@aceshooting/lyra-ui 11.2.0 → 12.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +407 -0
- package/README.md +11 -8
- package/custom-elements.json +1 -1
- package/dist/all.d.ts +1 -0
- package/dist/all.js +1 -1
- package/dist/autoloader.js +1 -1
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +0 -1
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
- package/dist/components/charts/chart/chart.class.d.ts +13 -1
- package/dist/components/charts/chart/histogram-bin.d.ts +0 -1
- package/dist/components/charts/chart/histogram-bin.js +1 -1
- package/dist/components/charts/chart/lite-chart.class.d.ts +22 -9
- package/dist/components/charts/chart/lite-chart.class.js +6 -6
- package/dist/components/conversation/code-block/code-block-shared.d.ts +4 -54
- package/dist/components/conversation/code-block/code-block-shared.js +1 -1
- package/dist/components/conversation/code-block/shiki-types.d.ts +2 -1
- package/dist/components/conversation/generation-metrics/generation-metrics.class.js +1 -1
- package/dist/components/conversation/model-select/model-select.class.d.ts +0 -3
- package/dist/components/conversation/model-select/model-select.class.js +1 -1
- package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
- package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +0 -1
- package/dist/components/conversation/voice-picker/voice-picker.class.js +1 -1
- package/dist/components/data/data-grid/data-grid.class.js +1 -1
- package/dist/components/data/funnel/funnel.class.d.ts +92 -0
- package/dist/components/data/funnel/funnel.class.js +25 -0
- package/dist/components/data/funnel/funnel.d.ts +1 -0
- package/dist/components/data/funnel/funnel.js +1 -0
- package/dist/components/data/funnel/funnel.styles.d.ts +1 -0
- package/dist/components/data/funnel/funnel.styles.js +127 -0
- package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +0 -1
- package/dist/components/data/graph-query-builder/graph-query-builder.class.js +1 -1
- package/dist/components/data/heatmap/heatmap.class.d.ts +199 -14
- package/dist/components/data/heatmap/heatmap.class.js +30 -22
- package/dist/components/data/heatmap/heatmap.styles.js +36 -0
- package/dist/components/data/index.d.ts +1 -0
- package/dist/components/data/index.js +1 -1
- package/dist/components/data/table/table.class.d.ts +18 -4
- package/dist/components/data/table/table.class.js +2 -2
- package/dist/components/data/table/table.styles.js +2 -1
- package/dist/components/data/timeline/timeline-cluster.d.ts +1 -0
- package/dist/components/data/timeline/timeline-cluster.js +1 -0
- package/dist/components/data/timeline/timeline-item.class.d.ts +17 -2
- package/dist/components/data/timeline/timeline-item.class.js +13 -2
- package/dist/components/data/timeline/timeline-item.styles.js +65 -0
- package/dist/components/data/timeline/timeline.class.d.ts +83 -27
- package/dist/components/data/timeline/timeline.class.js +3 -3
- package/dist/components/data/timeline/timeline.d.ts +1 -0
- package/dist/components/data/timeline/timeline.js +1 -1
- package/dist/components/data/timeline/timeline.styles.js +14 -0
- package/dist/components/forms/button/button.class.js +1 -1
- package/dist/components/forms/checkbox/checkbox.class.d.ts +0 -1
- package/dist/components/forms/checkbox/checkbox.class.js +1 -1
- package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +0 -1
- package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
- package/dist/components/forms/code-editor/code-editor.class.js +1 -1
- package/dist/components/forms/color-picker/color-picker.class.js +1 -1
- package/dist/components/forms/combobox/combobox.class.d.ts +7 -1
- package/dist/components/forms/combobox/combobox.class.js +3 -2
- package/dist/components/forms/combobox/combobox.styles.js +1 -1
- package/dist/components/forms/date-picker/date-input.class.d.ts +23 -0
- package/dist/components/forms/date-picker/date-input.class.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-data-loader.d.ts +0 -1
- package/dist/components/forms/input/native-time-input.class.js +1 -1
- package/dist/components/forms/input/time-input-shared.d.ts +2 -1
- package/dist/components/forms/input/time-input.class.js +1 -1
- package/dist/components/forms/locale-picker/locale-picker.class.d.ts +0 -1
- package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
- package/dist/components/forms/radio/radio-button.styles.d.ts +0 -1
- package/dist/components/forms/radio/radio-button.styles.js +1 -1
- package/dist/components/forms/radio/radio-group.class.d.ts +0 -1
- package/dist/components/forms/radio/radio-group.class.js +1 -1
- package/dist/components/forms/radio/radio.class.d.ts +0 -1
- package/dist/components/forms/radio/radio.class.js +1 -1
- package/dist/components/forms/rubric-form/rubric-form.class.d.ts +0 -1
- package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
- package/dist/components/forms/select/select.class.d.ts +0 -1
- package/dist/components/forms/select/select.class.js +1 -1
- package/dist/components/forms/slider/slider.class.d.ts +0 -1
- package/dist/components/forms/slider/slider.class.js +1 -1
- package/dist/components/forms/switch/switch.class.d.ts +0 -1
- package/dist/components/forms/switch/switch.class.js +1 -1
- package/dist/components/forms/time-range/time-range.class.d.ts +0 -1
- package/dist/components/forms/time-range/time-range.class.js +1 -1
- package/dist/components/forms/token-input/token-input.class.d.ts +0 -1
- package/dist/components/forms/token-input/token-input.class.js +1 -1
- package/dist/components/layout/app-rail/app-rail-item.class.d.ts +16 -0
- package/dist/components/layout/app-rail/app-rail-item.class.js +4 -4
- package/dist/components/layout/dashboard-grid/layout-internal.d.ts +0 -1
- package/dist/components/layout/dashboard-grid/layout-internal.js +1 -1
- package/dist/components/layout/details/accordion-owner.d.ts +1 -1
- package/dist/components/layout/filter-bar/filter-bar.class.d.ts +32 -3
- package/dist/components/layout/filter-bar/filter-bar.class.js +2 -1
- package/dist/components/layout/menu/menu-item.class.js +1 -1
- package/dist/components/layout/virtual-list/virtual-list.class.js +1 -1
- package/dist/components/layout/widget/widget.class.d.ts +16 -0
- package/dist/components/layout/widget/widget.class.js +2 -2
- package/dist/components/lr-funnel.d.ts +1 -0
- package/dist/components/lr-funnel.js +1 -0
- package/dist/components/media/av-player/av-metadata.d.ts +0 -2
- package/dist/components/media/av-player/av-metadata.js +1 -1
- package/dist/components/media/file-input/file-input.class.d.ts +0 -1
- package/dist/components/media/file-input/file-input.class.js +1 -1
- package/dist/components/media/flag/flag-peer-bulk-standard.d.ts +25 -0
- package/dist/components/media/flag/flag-peer-bulk-standard.js +1 -0
- package/dist/components/media/flag/flag.class.d.ts +8 -0
- package/dist/components/media/flag/flag.class.js +1 -1
- package/dist/components/media/map/map-loader.d.ts +4 -1
- package/dist/components/media/map/map.class.d.ts +242 -23
- package/dist/components/media/map/map.class.js +2 -2
- package/dist/components/overlays/chip/chip-group.class.d.ts +16 -0
- package/dist/components/overlays/chip/chip-group.class.js +10 -3
- package/dist/components/overlays/overlay/popover.class.d.ts +7 -1
- package/dist/components/overlays/overlay/popover.class.js +1 -1
- package/dist/components/overlays/overlay/tooltip.class.d.ts +1 -0
- package/dist/components/overlays/overlay/tooltip.class.js +1 -1
- package/dist/components/overlays/progress/progress-shared.d.ts +0 -2
- package/dist/components/overlays/progress/progress-shared.js +1 -1
- package/dist/components/overlays/rating/rating.class.js +1 -1
- package/dist/components/retrieval/graph/graph-canvas.d.ts +10 -9
- package/dist/components/retrieval/mind-map/mind-map-layout.d.ts +0 -4
- package/dist/components/retrieval/mind-map/mind-map-layout.js +1 -1
- package/dist/components/utility/format/format-options.d.ts +0 -2
- package/dist/components/utility/format/format-options.js +1 -1
- package/dist/components/utility/icon/icon-resource.d.ts +0 -2
- package/dist/components/utility/icon/icon-resource.js +1 -1
- package/dist/components/viewers/archive-viewer/zip-resource-guard.d.ts +2 -1
- package/dist/components/viewers/docx-viewer/docx-resource-guard.d.ts +0 -3
- package/dist/components/viewers/docx-viewer/docx-resource-guard.js +1 -1
- package/dist/components/viewers/ebook-viewer/ebook-loader.d.ts +2 -1
- package/dist/components/viewers/ebook-viewer/epub-resource-guard.d.ts +0 -3
- package/dist/components/viewers/ebook-viewer/epub-resource-guard.js +1 -1
- package/dist/components/viewers/pdf-viewer/pdf-loader.d.ts +2 -2
- package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +2 -2
- package/dist/components/viewers/pptx-viewer/pptx-resource-guard.d.ts +0 -2
- package/dist/components/viewers/pptx-viewer/pptx-resource-guard.js +1 -1
- package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.d.ts +0 -5
- package/dist/components/viewers/spreadsheet-viewer/xlsx-resource-guard.js +1 -1
- package/dist/custom-elements-jsx.d.ts +16 -8
- package/dist/events.d.ts +15 -0
- package/dist/internal/accessibility-visibility.d.ts +1 -1
- package/dist/internal/anchor-target.d.ts +1 -3
- package/dist/internal/anchor-target.js +2 -2
- package/dist/internal/anchored-overlay-runtime.d.ts +7 -0
- package/dist/internal/anchored-overlay-runtime.js +1 -0
- package/dist/internal/announcement-text.d.ts +1 -1
- package/dist/internal/ansi.d.ts +0 -4
- package/dist/internal/ansi.js +1 -1
- package/dist/internal/aria-ownership.d.ts +2 -1
- package/dist/internal/autoloader-manifest.js +1 -1
- package/dist/internal/autoloader-tags.d.ts +1 -1
- package/dist/internal/autoloader-tags.js +1 -1
- package/dist/internal/default-strings.generated.d.ts +1 -0
- package/dist/internal/default-strings.generated.js +1 -1
- package/dist/internal/focus-navigation.d.ts +3 -2
- package/dist/internal/form-associated.d.ts +0 -1
- package/dist/internal/form-associated.js +1 -1
- package/dist/internal/form-control-labels.d.ts +0 -3
- package/dist/internal/form-control-labels.js +1 -1
- package/dist/internal/localization-runtime.js +1 -1
- package/dist/internal/localization-types.d.ts +1 -1
- package/dist/internal/localization.js +1 -1
- package/dist/internal/lyra-element.d.ts +7 -14
- package/dist/internal/lyra-element.js +1 -1
- package/dist/internal/nonmodal-overlay-manager.d.ts +9 -0
- package/dist/internal/nonmodal-overlay-manager.js +1 -0
- package/dist/internal/overlay-manager.d.ts +4 -20
- package/dist/internal/overlay-manager.js +1 -1
- package/dist/internal/overlay-stack.d.ts +66 -0
- package/dist/internal/overlay-stack.js +1 -0
- package/dist/internal/package-metadata.d.ts +1 -1
- package/dist/internal/package-metadata.js +1 -1
- package/dist/internal/positioner.js +1 -1
- package/dist/internal/root-registration-allowlist.d.ts +1 -1
- package/dist/internal/root-registration-allowlist.js +1 -1
- package/dist/internal/text-quote.d.ts +1 -1
- package/dist/lyra.d.ts +5 -4
- package/dist/lyra.js +1 -1
- package/dist/ssr/all.d.ts +1 -0
- package/dist/ssr/all.js +1 -1
- package/dist/ssr.d.ts +4 -4
- package/dist/styles/tokens-root.css +488 -0
- package/dist/svelte.d.ts +17 -8
- package/dist/translations/ar.js +1 -1
- package/dist/translations/de.js +1 -1
- package/dist/translations/es.js +1 -1
- package/dist/translations/fa.js +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/he.js +1 -1
- package/dist/translations/ja.js +1 -1
- package/dist/translations/pt-BR.js +1 -1
- package/dist/translations/ru.js +1 -1
- package/dist/translations/zh-CN.js +1 -1
- package/dist/utilities/localization.js +1 -1
- package/dist/vue.d.ts +16 -8
- package/llms/components/lr-app-rail-item.md +8 -1
- package/llms/components/lr-app-rail.md +6 -0
- package/llms/components/lr-chip-group.md +7 -0
- package/llms/components/lr-chip.md +7 -0
- package/llms/components/lr-combobox.md +42 -0
- package/llms/components/lr-date-input.md +19 -1
- package/llms/components/lr-date-picker.md +19 -1
- package/llms/components/lr-filter-bar.md +50 -1
- package/llms/components/lr-flag.md +14 -0
- package/llms/components/lr-funnel.md +122 -0
- package/llms/components/lr-heatmap.md +55 -8
- package/llms/components/lr-lite-chart.md +20 -8
- package/llms/components/lr-map.md +109 -22
- package/llms/components/lr-option.md +42 -0
- package/llms/components/lr-popover.md +39 -0
- package/llms/components/lr-table.md +7 -3
- package/llms/components/lr-timeline-item.md +49 -24
- package/llms/components/lr-timeline.md +49 -24
- package/llms/components/lr-widget.md +7 -1
- package/llms/index.md +3 -2
- package/llms/peers.md +1 -1
- package/llms/shared.md +110 -1
- package/llms-full.txt +681 -67
- package/llms.txt +1 -1
- package/package.json +26 -8
- package/vscode-css-data.json +63 -0
- package/vscode-html-data.json +108 -23
- package/web-types.json +32738 -310
package/dist/all.d.ts
CHANGED
|
@@ -106,6 +106,7 @@ import './components/data/flow-run-status/flow-run-status.js';
|
|
|
106
106
|
import './components/utility/format/format-bytes.js';
|
|
107
107
|
import './components/utility/format/format-date.js';
|
|
108
108
|
import './components/utility/format/format-number.js';
|
|
109
|
+
import './components/data/funnel/funnel.js';
|
|
109
110
|
import './components/data/gauge/gauge.js';
|
|
110
111
|
import './components/conversation/generation-metrics/generation-metrics.js';
|
|
111
112
|
import './components/retrieval/graph-legend/graph-legend.js';
|
package/dist/all.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./components/layout/details/accordion.js";import"./components/layout/details/accordion-item.js";import"./components/agent-tools/activity-feed/activity-feed.js";import"./components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.js";import"./components/agent-tools/agent-run/agent-run.js";import"./components/agent-tools/agent-trace/agent-trace.js";import"./components/conversation/agent-workspace/agent-workspace.js";import"./components/overlays/alert/alert.js";import"./components/media/animated-image/animated-image.js";import"./components/media/animation/animation.js";import"./components/layout/app-rail/app-rail.js";import"./components/layout/app-rail/app-rail-item.js";import"./components/agent-tools/approval-queue/approval-queue.js";import"./components/viewers/archive-viewer/archive-viewer.js";import"./components/agent-tools/artifact-panel/artifact-panel.js";import"./components/media/attachment-chip/attachment-chip.js";import"./components/media/attachment-trigger/attachment-trigger.js";import"./components/conversation/audio-visualizer/audio-visualizer.js";import"./components/media/av-player/av-player.js";import"./components/media/avatar/avatar.js";import"./components/media/avatar-group/avatar-group.js";import"./components/overlays/badge/badge.js";import"./components/conversation/branch-picker/branch-picker.js";import"./components/layout/breadcrumb/breadcrumb.js";import"./components/layout/breadcrumb/breadcrumb-item.js";import"./components/agent-tools/browser-frame/browser-frame.js";import"./components/forms/button/button.js";import"./components/layout/button-group/button-group.js";import"./components/data/calendar/calendar.js";import"./components/viewers/calendar-viewer/calendar-viewer.js";import"./components/overlays/callout/callout.js";import"./components/layout/card/card.js";import"./components/layout/carousel/carousel.js";import"./components/layout/carousel/carousel-item.js";import"./components/conversation/chat-composer/chat-composer.js";import"./components/conversation/chat-message/chat-message.js";import"./components/conversation/chat-viewport/chat-viewport.js";import"./components/forms/checkbox/checkbox.js";import"./components/forms/checkbox-group/checkbox-group.js";import"./components/conversation/checkpoint/checkpoint.js";import"./components/overlays/chip/chip.js";import"./components/overlays/chip/chip-group.js";import"./components/retrieval/chunk-inspector/chunk-inspector.js";import"./components/retrieval/citation-badge/citation-badge.js";import"./components/retrieval/claim-evidence/claim-evidence.js";import"./components/conversation/code-block/code-block.js";import"./components/conversation/code-block/code-block-core.js";import"./components/forms/code-editor/code-editor.js";import"./components/forms/color-picker/color-picker.js";import"./components/forms/combobox/combobox.js";import"./components/layout/command-palette/command-palette.js";import"./components/agent-tools/commit-card/commit-card.js";import"./components/retrieval/community-card/community-card.js";import"./components/agent-tools/compare-panel/compare-panel.js";import"./components/data/condition-builder/condition-builder.js";import"./components/agent-tools/confirm-bar/confirm-bar.js";import"./components/viewers/contact-viewer/contact-viewer.js";import"./components/agent-tools/context-inspector/context-inspector.js";import"./components/data/context-meter/context-meter.js";import"./components/layout/control-group/control-group.js";import"./components/conversation/conversation-item/conversation-item.js";import"./components/utility/copy-button/copy-button.js";import"./components/viewers/csv-viewer/csv-viewer.js";import"./components/layout/dashboard-grid/dashboard-grid.js";import"./components/data/data-grid/data-grid.js";import"./components/viewers/dataset-viewer/dataset-viewer.js";import"./components/forms/date-picker/date-input.js";import"./components/forms/date-picker/date-picker.js";import"./components/layout/details/details.js";import"./components/overlays/dialog/dialog.js";import"./components/utility/diff-view/diff-view.js";import"./components/utility/divider/divider.js";import"./components/layout/dock-panel/dock-panel.js";import"./components/viewers/document-compare/document-compare.js";import"./components/data/document-library/document-library.js";import"./components/viewers/document-preview/document-preview.js";import"./components/viewers/document-viewer/document-viewer.js";import"./components/viewers/docx-viewer/docx-viewer.js";import"./components/overlays/drawer/drawer.js";import"./components/layout/drilldown-panel/drilldown-panel.js";import"./components/overlays/overlay/dropdown.js";import"./components/layout/menu/dropdown-item.js";import"./components/viewers/ebook-viewer/ebook-viewer.js";import"./components/viewers/email-viewer/email-viewer.js";import"./components/retrieval/embedding-explorer/embedding-explorer.js";import"./components/forms/emoji-picker/emoji-picker.js";import"./components/overlays/empty/empty.js";import"./components/retrieval/entity-card/entity-card.js";import"./components/retrieval/entity-chip/entity-chip.js";import"./components/retrieval/entity-dossier/entity-dossier.js";import"./components/data/env-list/env-list.js";import"./components/agent-tools/eval-dataset/eval-dataset.js";import"./components/agent-tools/eval-result/eval-result.js";import"./components/agent-tools/evaluation-run/evaluation-run.js";import"./components/utility/export-button/export-button.js";import"./components/media/file-icon/file-icon.js";import"./components/media/file-input/file-input.js";import"./components/data/file-tree/file-tree.js";import"./components/layout/filter-bar/filter-bar.js";import"./components/media/flag/flag.js";import"./components/data/flow-canvas/flow-canvas.js";import"./components/data/flow-controls/flow-controls.js";import"./components/data/flow-minimap/flow-minimap.js";import"./components/data/flow-node/flow-node.js";import"./components/data/flow-run-status/flow-run-status.js";import"./components/utility/format/format-bytes.js";import"./components/utility/format/format-date.js";import"./components/utility/format/format-number.js";import"./components/data/gauge/gauge.js";import"./components/conversation/generation-metrics/generation-metrics.js";import"./components/retrieval/graph-legend/graph-legend.js";import"./components/data/graph-query-builder/graph-query-builder.js";import"./components/retrieval/grounding-summary/grounding-summary.js";import"./components/conversation/handoff-divider/handoff-divider.js";import"./components/data/heatmap/heatmap.js";import"./components/viewers/highlight-layer/highlight-layer.js";import"./components/viewers/html-viewer/html-viewer.js";import"./components/utility/icon/icon.js";import"./components/forms/icon-button/icon-button.js";import"./components/media/image-comparer/image-comparer.js";import"./components/media/image-viewer/image-viewer.js";import"./components/viewers/include/include.js";import"./components/retrieval/ingestion-queue/ingestion-queue.js";import"./components/forms/input/input.js";import"./components/utility/intersection-observer/intersection-observer.js";import"./components/agent-tools/schema-viewer/schema-viewer.js";import"./components/utility/json-viewer/json-viewer.js";import"./components/overlays/kbd/kbd.js";import"./components/retrieval/knowledge-base/knowledge-base.js";import"./components/retrieval/knowledge-base-admin/knowledge-base-admin.js";import"./components/utility/known-date/known-date.js";import"./components/media/lightbox/lightbox.js";import"./components/charts/chart/lite-chart.js";import"./components/utility/live-region/live-region.js";import"./components/forms/locale-picker/locale-picker.js";import"./components/conversation/markdown/markdown.js";import"./components/conversation/markdown/markdown-core.js";import"./components/agent-tools/mcp-app/mcp-app.js";import"./components/media/media-card/media-card.js";import"./components/retrieval/memory-panel/memory-panel.js";import"./components/utility/mention-popover/mention-popover.js";import"./components/layout/menu/menu.js";import"./components/layout/menu/menu-item.js";import"./components/layout/menu/menu-label.js";import"./components/conversation/message-actions/message-actions.js";import"./components/conversation/message-feedback/message-feedback.js";import"./components/conversation/message-parts/message-parts.js";import"./components/retrieval/mind-map/mind-map.js";import"./components/conversation/model-select/model-select.js";import"./components/conversation/model-settings-panel/model-settings-panel.js";import"./components/layout/multi-split/multi-split.js";import"./components/utility/mutation-observer/mutation-observer.js";import"./components/forms/input/native-time-input.js";import"./components/retrieval/neighbor-list/neighbor-list.js";import"./components/retrieval/node-palette/node-palette.js";import"./components/viewers/notebook-viewer/notebook-viewer.js";import"./components/forms/input/number-input.js";import"./components/forms/combobox/option.js";import"./components/forms/otp-input/otp-input.js";import"./components/layout/page/page.js";import"./components/viewers/page-rail/page-rail.js";import"./components/data/pagination/pagination.js";import"./components/media/pan-zoom/pan-zoom.js";import"./components/retrieval/path-strip/path-strip.js";import"./components/viewers/pdf-viewer/pdf-viewer.js";import"./components/forms/phone-input/phone-input.js";import"./components/agent-tools/policy-summary/policy-summary.js";import"./components/utility/poll-status/poll-status.js";import"./components/overlays/overlay/popover.js";import"./components/overlays/popup/popup.js";import"./components/viewers/pptx-viewer/pptx-viewer.js";import"./components/overlays/progress/progress-bar.js";import"./components/overlays/progress/progress-ring.js";import"./components/conversation/prompt-input/prompt-input.js";import"./components/conversation/prompt-queue/prompt-queue.js";import"./components/agent-tools/prompt-studio/prompt-studio.js";import"./components/retrieval/provenance-panel/provenance-panel.js";import"./components/conversation/push-to-talk/push-to-talk.js";import"./components/media/qr-code/qr-code.js";import"./components/forms/radio/radio.js";import"./components/forms/radio/radio-button.js";import"./components/forms/radio/radio-group.js";import"./components/retrieval/rag-answer/rag-answer.js";import"./components/retrieval/rag-eval-dashboard/rag-eval-dashboard.js";import"./components/utility/random-content/random-content.js";import"./components/overlays/rating/rating.js";import"./components/conversation/realtime-session/realtime-session.js";import"./components/utility/format/relative-time.js";import"./components/layout/reorder-list/reorder-item.js";import"./components/layout/reorder-list/reorder-list.js";import"./components/utility/resize-observer/resize-observer.js";import"./components/layout/responsive-panel/responsive-panel.js";import"./components/agent-tools/result-card/result-card.js";import"./components/agent-tools/result-card/result-field.js";import"./components/retrieval/retrieval-compare/retrieval-compare.js";import"./components/retrieval/retrieval-results/retrieval-results.js";import"./components/retrieval/retrieval-search/retrieval-search.js";import"./components/retrieval/retrieval-trace/retrieval-trace.js";import"./components/forms/rubric-form/rubric-form.js";import"./components/layout/scroller/scroller.js";import"./components/layout/segmented/segmented.js";import"./components/forms/select/select.js";import"./components/conversation/selection-toolbar/selection-toolbar.js";import"./components/media/sequence-playback/sequence-playback.js";import"./components/data/sequence-strip/sequence-strip.js";import"./components/overlays/skeleton/skeleton.js";import"./components/forms/slider/slider.js";import"./components/retrieval/source-card/source-card.js";import"./components/retrieval/source-list/source-list.js";import"./components/retrieval/source-picker/source-picker.js";import"./components/agent-tools/span-waterfall/span-waterfall.js";import"./components/data/sparkline/sparkline.js";import"./components/overlays/spinner/spinner.js";import"./components/layout/split-panel/split-panel.js";import"./components/viewers/spreadsheet-viewer/spreadsheet-viewer.js";import"./components/agent-tools/stack-trace/stack-trace.js";import"./components/data/stat/stat.js";import"./components/layout/stepper/stepper.js";import"./components/conversation/stream-status/stream-status.js";import"./components/conversation/streaming-text/streaming-text.js";import"./components/agent-tools/subagent-panel/subagent-panel.js";import"./components/conversation/suggestion-chips/suggestion-chips.js";import"./components/viewers/svg-viewer/svg-viewer.js";import"./components/forms/swatch-picker/swatch-picker.js";import"./components/forms/switch/switch.js";import"./components/layout/tab-group/tab.js";import"./components/layout/tab-group/tab-group.js";import"./components/layout/tab-group/tab-panel.js";import"./components/data/table/table.js";import"./components/overlays/badge/tag.js";import"./components/agent-tools/task-list/task-list.js";import"./components/agent-tools/terminal/terminal.js";import"./components/agent-tools/test-results/test-results.js";import"./components/forms/textarea/textarea.js";import"./components/agent-tools/thinking-panel/thinking-panel.js";import"./components/conversation/thread-list/thread-list.js";import"./components/forms/input/time-input.js";import"./components/forms/time-range/time-range.js";import"./components/data/timeline/timeline.js";import"./components/data/timeline/timeline-item.js";import"./components/overlays/toast/toast.js";import"./components/overlays/toast/toast-item.js";import"./components/forms/token-input/token-input.js";import"./components/agent-tools/tool-approval-dialog/tool-approval-dialog.js";import"./components/agent-tools/tool-call-chip/tool-call-chip.js";import"./components/agent-tools/tool-param-form/tool-param-form.js";import"./components/agent-tools/tool-result-dialog/tool-result-dialog.js";import"./components/agent-tools/tool-result-view/tool-result-view.js";import"./components/agent-tools/tool-select-dialog/tool-select-dialog.js";import"./components/agent-tools/tool-timeline/tool-timeline.js";import"./components/overlays/overlay/tooltip.js";import"./components/utility/tour/tour.js";import"./components/agent-tools/trace-tree/trace-tree.js";import"./components/conversation/transcript-feed/transcript-feed.js";import"./components/data/tree/tree.js";import"./components/data/tree/tree-item.js";import"./components/conversation/typing-indicator/typing-indicator.js";import"./components/conversation/usage-badge/usage-badge.js";import"./components/media/video/video.js";import"./components/media/video-playlist/video-playlist.js";import"./components/layout/virtual-list/virtual-list.js";import"./components/utility/visually-hidden/visually-hidden.js";import"./components/conversation/voice-picker/voice-picker.js";import"./components/layout/widget/widget.js";import"./components/conversation/widget-renderer/widget-renderer.js";import"./components/data/word-cloud/word-cloud.js";import"./components/viewers/xml-viewer/xml-viewer.js";import"./components/media/zoomable-frame/zoomable-frame.js";import"./components/viewers/archive-viewer/archive-viewer-register.js";import"./components/viewers/ebook-viewer/ebook-viewer-register.js";export*from"./lyra.js";
|
|
1
|
+
import"./components/layout/details/accordion.js";import"./components/layout/details/accordion-item.js";import"./components/agent-tools/activity-feed/activity-feed.js";import"./components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.js";import"./components/agent-tools/agent-run/agent-run.js";import"./components/agent-tools/agent-trace/agent-trace.js";import"./components/conversation/agent-workspace/agent-workspace.js";import"./components/overlays/alert/alert.js";import"./components/media/animated-image/animated-image.js";import"./components/media/animation/animation.js";import"./components/layout/app-rail/app-rail.js";import"./components/layout/app-rail/app-rail-item.js";import"./components/agent-tools/approval-queue/approval-queue.js";import"./components/viewers/archive-viewer/archive-viewer.js";import"./components/agent-tools/artifact-panel/artifact-panel.js";import"./components/media/attachment-chip/attachment-chip.js";import"./components/media/attachment-trigger/attachment-trigger.js";import"./components/conversation/audio-visualizer/audio-visualizer.js";import"./components/media/av-player/av-player.js";import"./components/media/avatar/avatar.js";import"./components/media/avatar-group/avatar-group.js";import"./components/overlays/badge/badge.js";import"./components/conversation/branch-picker/branch-picker.js";import"./components/layout/breadcrumb/breadcrumb.js";import"./components/layout/breadcrumb/breadcrumb-item.js";import"./components/agent-tools/browser-frame/browser-frame.js";import"./components/forms/button/button.js";import"./components/layout/button-group/button-group.js";import"./components/data/calendar/calendar.js";import"./components/viewers/calendar-viewer/calendar-viewer.js";import"./components/overlays/callout/callout.js";import"./components/layout/card/card.js";import"./components/layout/carousel/carousel.js";import"./components/layout/carousel/carousel-item.js";import"./components/conversation/chat-composer/chat-composer.js";import"./components/conversation/chat-message/chat-message.js";import"./components/conversation/chat-viewport/chat-viewport.js";import"./components/forms/checkbox/checkbox.js";import"./components/forms/checkbox-group/checkbox-group.js";import"./components/conversation/checkpoint/checkpoint.js";import"./components/overlays/chip/chip.js";import"./components/overlays/chip/chip-group.js";import"./components/retrieval/chunk-inspector/chunk-inspector.js";import"./components/retrieval/citation-badge/citation-badge.js";import"./components/retrieval/claim-evidence/claim-evidence.js";import"./components/conversation/code-block/code-block.js";import"./components/conversation/code-block/code-block-core.js";import"./components/forms/code-editor/code-editor.js";import"./components/forms/color-picker/color-picker.js";import"./components/forms/combobox/combobox.js";import"./components/layout/command-palette/command-palette.js";import"./components/agent-tools/commit-card/commit-card.js";import"./components/retrieval/community-card/community-card.js";import"./components/agent-tools/compare-panel/compare-panel.js";import"./components/data/condition-builder/condition-builder.js";import"./components/agent-tools/confirm-bar/confirm-bar.js";import"./components/viewers/contact-viewer/contact-viewer.js";import"./components/agent-tools/context-inspector/context-inspector.js";import"./components/data/context-meter/context-meter.js";import"./components/layout/control-group/control-group.js";import"./components/conversation/conversation-item/conversation-item.js";import"./components/utility/copy-button/copy-button.js";import"./components/viewers/csv-viewer/csv-viewer.js";import"./components/layout/dashboard-grid/dashboard-grid.js";import"./components/data/data-grid/data-grid.js";import"./components/viewers/dataset-viewer/dataset-viewer.js";import"./components/forms/date-picker/date-input.js";import"./components/forms/date-picker/date-picker.js";import"./components/layout/details/details.js";import"./components/overlays/dialog/dialog.js";import"./components/utility/diff-view/diff-view.js";import"./components/utility/divider/divider.js";import"./components/layout/dock-panel/dock-panel.js";import"./components/viewers/document-compare/document-compare.js";import"./components/data/document-library/document-library.js";import"./components/viewers/document-preview/document-preview.js";import"./components/viewers/document-viewer/document-viewer.js";import"./components/viewers/docx-viewer/docx-viewer.js";import"./components/overlays/drawer/drawer.js";import"./components/layout/drilldown-panel/drilldown-panel.js";import"./components/overlays/overlay/dropdown.js";import"./components/layout/menu/dropdown-item.js";import"./components/viewers/ebook-viewer/ebook-viewer.js";import"./components/viewers/email-viewer/email-viewer.js";import"./components/retrieval/embedding-explorer/embedding-explorer.js";import"./components/forms/emoji-picker/emoji-picker.js";import"./components/overlays/empty/empty.js";import"./components/retrieval/entity-card/entity-card.js";import"./components/retrieval/entity-chip/entity-chip.js";import"./components/retrieval/entity-dossier/entity-dossier.js";import"./components/data/env-list/env-list.js";import"./components/agent-tools/eval-dataset/eval-dataset.js";import"./components/agent-tools/eval-result/eval-result.js";import"./components/agent-tools/evaluation-run/evaluation-run.js";import"./components/utility/export-button/export-button.js";import"./components/media/file-icon/file-icon.js";import"./components/media/file-input/file-input.js";import"./components/data/file-tree/file-tree.js";import"./components/layout/filter-bar/filter-bar.js";import"./components/media/flag/flag.js";import"./components/data/flow-canvas/flow-canvas.js";import"./components/data/flow-controls/flow-controls.js";import"./components/data/flow-minimap/flow-minimap.js";import"./components/data/flow-node/flow-node.js";import"./components/data/flow-run-status/flow-run-status.js";import"./components/utility/format/format-bytes.js";import"./components/utility/format/format-date.js";import"./components/utility/format/format-number.js";import"./components/data/funnel/funnel.js";import"./components/data/gauge/gauge.js";import"./components/conversation/generation-metrics/generation-metrics.js";import"./components/retrieval/graph-legend/graph-legend.js";import"./components/data/graph-query-builder/graph-query-builder.js";import"./components/retrieval/grounding-summary/grounding-summary.js";import"./components/conversation/handoff-divider/handoff-divider.js";import"./components/data/heatmap/heatmap.js";import"./components/viewers/highlight-layer/highlight-layer.js";import"./components/viewers/html-viewer/html-viewer.js";import"./components/utility/icon/icon.js";import"./components/forms/icon-button/icon-button.js";import"./components/media/image-comparer/image-comparer.js";import"./components/media/image-viewer/image-viewer.js";import"./components/viewers/include/include.js";import"./components/retrieval/ingestion-queue/ingestion-queue.js";import"./components/forms/input/input.js";import"./components/utility/intersection-observer/intersection-observer.js";import"./components/agent-tools/schema-viewer/schema-viewer.js";import"./components/utility/json-viewer/json-viewer.js";import"./components/overlays/kbd/kbd.js";import"./components/retrieval/knowledge-base/knowledge-base.js";import"./components/retrieval/knowledge-base-admin/knowledge-base-admin.js";import"./components/utility/known-date/known-date.js";import"./components/media/lightbox/lightbox.js";import"./components/charts/chart/lite-chart.js";import"./components/utility/live-region/live-region.js";import"./components/forms/locale-picker/locale-picker.js";import"./components/conversation/markdown/markdown.js";import"./components/conversation/markdown/markdown-core.js";import"./components/agent-tools/mcp-app/mcp-app.js";import"./components/media/media-card/media-card.js";import"./components/retrieval/memory-panel/memory-panel.js";import"./components/utility/mention-popover/mention-popover.js";import"./components/layout/menu/menu.js";import"./components/layout/menu/menu-item.js";import"./components/layout/menu/menu-label.js";import"./components/conversation/message-actions/message-actions.js";import"./components/conversation/message-feedback/message-feedback.js";import"./components/conversation/message-parts/message-parts.js";import"./components/retrieval/mind-map/mind-map.js";import"./components/conversation/model-select/model-select.js";import"./components/conversation/model-settings-panel/model-settings-panel.js";import"./components/layout/multi-split/multi-split.js";import"./components/utility/mutation-observer/mutation-observer.js";import"./components/forms/input/native-time-input.js";import"./components/retrieval/neighbor-list/neighbor-list.js";import"./components/retrieval/node-palette/node-palette.js";import"./components/viewers/notebook-viewer/notebook-viewer.js";import"./components/forms/input/number-input.js";import"./components/forms/combobox/option.js";import"./components/forms/otp-input/otp-input.js";import"./components/layout/page/page.js";import"./components/viewers/page-rail/page-rail.js";import"./components/data/pagination/pagination.js";import"./components/media/pan-zoom/pan-zoom.js";import"./components/retrieval/path-strip/path-strip.js";import"./components/viewers/pdf-viewer/pdf-viewer.js";import"./components/forms/phone-input/phone-input.js";import"./components/agent-tools/policy-summary/policy-summary.js";import"./components/utility/poll-status/poll-status.js";import"./components/overlays/overlay/popover.js";import"./components/overlays/popup/popup.js";import"./components/viewers/pptx-viewer/pptx-viewer.js";import"./components/overlays/progress/progress-bar.js";import"./components/overlays/progress/progress-ring.js";import"./components/conversation/prompt-input/prompt-input.js";import"./components/conversation/prompt-queue/prompt-queue.js";import"./components/agent-tools/prompt-studio/prompt-studio.js";import"./components/retrieval/provenance-panel/provenance-panel.js";import"./components/conversation/push-to-talk/push-to-talk.js";import"./components/media/qr-code/qr-code.js";import"./components/forms/radio/radio.js";import"./components/forms/radio/radio-button.js";import"./components/forms/radio/radio-group.js";import"./components/retrieval/rag-answer/rag-answer.js";import"./components/retrieval/rag-eval-dashboard/rag-eval-dashboard.js";import"./components/utility/random-content/random-content.js";import"./components/overlays/rating/rating.js";import"./components/conversation/realtime-session/realtime-session.js";import"./components/utility/format/relative-time.js";import"./components/layout/reorder-list/reorder-item.js";import"./components/layout/reorder-list/reorder-list.js";import"./components/utility/resize-observer/resize-observer.js";import"./components/layout/responsive-panel/responsive-panel.js";import"./components/agent-tools/result-card/result-card.js";import"./components/agent-tools/result-card/result-field.js";import"./components/retrieval/retrieval-compare/retrieval-compare.js";import"./components/retrieval/retrieval-results/retrieval-results.js";import"./components/retrieval/retrieval-search/retrieval-search.js";import"./components/retrieval/retrieval-trace/retrieval-trace.js";import"./components/forms/rubric-form/rubric-form.js";import"./components/layout/scroller/scroller.js";import"./components/layout/segmented/segmented.js";import"./components/forms/select/select.js";import"./components/conversation/selection-toolbar/selection-toolbar.js";import"./components/media/sequence-playback/sequence-playback.js";import"./components/data/sequence-strip/sequence-strip.js";import"./components/overlays/skeleton/skeleton.js";import"./components/forms/slider/slider.js";import"./components/retrieval/source-card/source-card.js";import"./components/retrieval/source-list/source-list.js";import"./components/retrieval/source-picker/source-picker.js";import"./components/agent-tools/span-waterfall/span-waterfall.js";import"./components/data/sparkline/sparkline.js";import"./components/overlays/spinner/spinner.js";import"./components/layout/split-panel/split-panel.js";import"./components/viewers/spreadsheet-viewer/spreadsheet-viewer.js";import"./components/agent-tools/stack-trace/stack-trace.js";import"./components/data/stat/stat.js";import"./components/layout/stepper/stepper.js";import"./components/conversation/stream-status/stream-status.js";import"./components/conversation/streaming-text/streaming-text.js";import"./components/agent-tools/subagent-panel/subagent-panel.js";import"./components/conversation/suggestion-chips/suggestion-chips.js";import"./components/viewers/svg-viewer/svg-viewer.js";import"./components/forms/swatch-picker/swatch-picker.js";import"./components/forms/switch/switch.js";import"./components/layout/tab-group/tab.js";import"./components/layout/tab-group/tab-group.js";import"./components/layout/tab-group/tab-panel.js";import"./components/data/table/table.js";import"./components/overlays/badge/tag.js";import"./components/agent-tools/task-list/task-list.js";import"./components/agent-tools/terminal/terminal.js";import"./components/agent-tools/test-results/test-results.js";import"./components/forms/textarea/textarea.js";import"./components/agent-tools/thinking-panel/thinking-panel.js";import"./components/conversation/thread-list/thread-list.js";import"./components/forms/input/time-input.js";import"./components/forms/time-range/time-range.js";import"./components/data/timeline/timeline.js";import"./components/data/timeline/timeline-item.js";import"./components/overlays/toast/toast.js";import"./components/overlays/toast/toast-item.js";import"./components/forms/token-input/token-input.js";import"./components/agent-tools/tool-approval-dialog/tool-approval-dialog.js";import"./components/agent-tools/tool-call-chip/tool-call-chip.js";import"./components/agent-tools/tool-param-form/tool-param-form.js";import"./components/agent-tools/tool-result-dialog/tool-result-dialog.js";import"./components/agent-tools/tool-result-view/tool-result-view.js";import"./components/agent-tools/tool-select-dialog/tool-select-dialog.js";import"./components/agent-tools/tool-timeline/tool-timeline.js";import"./components/overlays/overlay/tooltip.js";import"./components/utility/tour/tour.js";import"./components/agent-tools/trace-tree/trace-tree.js";import"./components/conversation/transcript-feed/transcript-feed.js";import"./components/data/tree/tree.js";import"./components/data/tree/tree-item.js";import"./components/conversation/typing-indicator/typing-indicator.js";import"./components/conversation/usage-badge/usage-badge.js";import"./components/media/video/video.js";import"./components/media/video-playlist/video-playlist.js";import"./components/layout/virtual-list/virtual-list.js";import"./components/utility/visually-hidden/visually-hidden.js";import"./components/conversation/voice-picker/voice-picker.js";import"./components/layout/widget/widget.js";import"./components/conversation/widget-renderer/widget-renderer.js";import"./components/data/word-cloud/word-cloud.js";import"./components/viewers/xml-viewer/xml-viewer.js";import"./components/media/zoomable-frame/zoomable-frame.js";import"./components/viewers/archive-viewer/archive-viewer-register.js";import"./components/viewers/ebook-viewer/ebook-viewer-register.js";export*from"./lyra.js";
|
package/dist/autoloader.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{AUTOLOADER_MANIFEST}from"./internal/autoloader-manifest.js";import{loadAutoloaderConstructor}from"./internal/autoloader-loaders.js";import{AUTOLOADER_TAG_SET}from"./internal/autoloader-tags.js";import{registryForRoot}from"./internal/definition-registry.js";import{collectRenderedTree,nativeElementLocalName,renderedTreeTraversalLimits,RenderedTreeTraversalError}from"./internal/rendered-tree-traversal.js";const AUTOLOADER_PENDING_ATTRIBUTE="data-lr-autoload-pending",markerOwners=new Map;let activeContext;function defaultRoot(){return typeof document>"u"?void 0:document}function isReadonlySet(value){if(!value||typeof value!="object")return!1;const candidate=value;return typeof candidate.has=="function"&&typeof candidate[Symbol.iterator]=="function"}function normalizeConcurrency(value){const resolved=value??16;if(!Number.isFinite(resolved)||!Number.isInteger(resolved)||resolved<1)throw new RangeError("Autoloader maxConcurrency must be an integer >= 1");return resolved}function normalizeOptions(options){const traversal=renderedTreeTraversalLimits(options??{},"Autoloader"),maxConcurrency=normalizeConcurrency(options?.maxConcurrency),common={events:options?.events===!0,traversal,maxConcurrency},policy=options?.optionalPeers;if(policy===void 0)return{optionalPeers:new Set,...common};if(policy==="all")return{optionalPeers:"all",...common};if(!Array.isArray(policy)&&!isReadonlySet(policy))throw new TypeError("optionalPeers must be 'all', an array, or a ReadonlySet of package names");const peers=[...policy];if(peers.some(peer=>typeof peer!="string"||peer.length===0||peer!==peer.trim()))throw new TypeError("optionalPeers must contain non-empty package names");return{optionalPeers:new Set(peers),...common}}function isEligible(entry,options){const allowedPeers=options.optionalPeers;return entry.optionalPeers.length===0||allowedPeers==="all"?!0:entry.optionalPeers.every(peer=>allowedPeers.has(peer))}function nativeNodeType(node){try{const NodeConstructor=typeof Node>"u"?void 0:Node;return(NodeConstructor&&Object.getOwnPropertyDescriptor(NodeConstructor.prototype,"nodeType")?.get)?.call(node)??node.nodeType}catch{return}}function ownerDocumentForNode(node){if(nativeNodeType(node)===9)return node;try{const NodeConstructor=typeof Node>"u"?void 0:Node;return(NodeConstructor&&Object.getOwnPropertyDescriptor(NodeConstructor.prototype,"ownerDocument")?.get)?.call(node)??void 0}catch{return}}function eventConstructor(root){const fromWindow=ownerDocumentForNode(root)?.defaultView?.CustomEvent;return fromWindow||(typeof CustomEvent>"u"?void 0:CustomEvent)}function emit(context,name,detail){if(!context.options.events||!context.active)return;const EventConstructor=eventConstructor(context.root);EventConstructor&&context.root.dispatchEvent(new EventConstructor(name,{bubbles:!0,composed:!0,detail}))}function markPending(context,element){let owners=markerOwners.get(element);if(!owners){if(element.hasAttribute(AUTOLOADER_PENDING_ATTRIBUTE))return;owners=new Set,markerOwners.set(element,owners)}const claim={context,element};return owners.add(claim),context.markerClaims.add(claim),element.hasAttribute(AUTOLOADER_PENDING_ATTRIBUTE)||element.setAttribute(AUTOLOADER_PENDING_ATTRIBUTE,""),claim}function clearPending(claim){if(!claim.context.markerClaims.delete(claim))return;const owners=markerOwners.get(claim.element);owners?.delete(claim)&&(owners.size>0||(claim.element.removeAttribute(AUTOLOADER_PENDING_ATTRIBUTE),markerOwners.delete(claim.element)))}function clearAllPending(context){for(const claim of[...context.markerClaims])clearPending(claim)}function definitionMap(context,registry){let definitions=context.definitionLoads.get(registry);return definitions||(definitions=new Map,context.definitionLoads.set(registry,definitions)),definitions}async function waitForUpdate(element){try{const updateComplete=element.updateComplete;updateComplete&&typeof updateComplete.then=="function"&&await updateComplete}catch{}}async function runBounded(items,concurrency,task){let next=0,failed=!1,failure;const worker=async()=>{for(;!failed;){const index=next;if(index>=items.length)return;next+=1;try{await task(items[index])}catch(error){failed||(failed=!0,failure=error)}}},workers=Array.from({length:Math.min(concurrency,items.length)},()=>worker());if(await Promise.all(workers),failed)throw failure}async function withWorkSlot(context,task){if(context.active&&(context.activeWork>=context.options.maxConcurrency&&await new Promise(resolve=>context.workWaiters.push(resolve)),!!context.active)){context.activeWork+=1;try{return await task()}finally{context.activeWork-=1,context.workWaiters.shift()?.()}}}async function defineTag(context,registry,tag){if(registry.get(tag))return;const definitions=definitionMap(context,registry),existing=definitions.get(tag);if(existing)return existing;const entry=AUTOLOADER_MANIFEST[tag],pending=(async()=>{emit(context,"lr-autoload-preload",{tag,optionalPeers:entry.optionalPeers});try{const constructor=await loadAutoloaderConstructor(tag);if(!context.active||(registry.get(tag)||registry.define(tag,constructor),await registry.whenDefined(tag),!context.active))return;context.loadedTags.add(tag),emit(context,"lr-autoload-loaded",{tag,optionalPeers:entry.optionalPeers})}catch(error){throw emit(context,"lr-autoload-error",{tag,optionalPeers:entry.optionalPeers,error}),error}})();definitions.set(tag,pending);const clearDefinition=()=>{definitions.get(tag)===pending&&definitions.delete(tag)};return pending.then(clearDefinition,clearDefinition),pending}function newDiscoveryState(){return{work:0,elements:new Set,roots:new Set}}function collectDiscoveryBatch(context,requestedRoots,state){const batchRoots=[],batchElements=[],rootDepths=new Map,elementDepths=new Map,seenRequests=new Set;for(const request of requestedRoots){if(seenRequests.has(request.root))continue;seenRequests.add(request.root);const result=collectRenderedTree(request.root,context.options.traversal,state,"Autoloader discovery",request.depth);for(const discoveredRoot of result.roots)batchRoots.push(discoveredRoot),rootDepths.set(discoveredRoot,result.rootDepths.get(discoveredRoot)??request.depth);for(const element of result.elements)batchElements.push(element),elementDepths.set(element,result.elementDepths.get(element)??request.depth)}return{roots:batchRoots,elements:batchElements,rootDepths,elementDepths}}function isElement(node){return nativeNodeType(node)===1}function observerConstructor(root){const fromWindow=ownerDocumentForNode(root)?.defaultView?.MutationObserver;return fromWindow||(typeof MutationObserver>"u"?void 0:MutationObserver)}function nativeParentNode(node){try{const NodeConstructor=ownerDocumentForNode(node)?.defaultView?.Node??(typeof Node>"u"?void 0:Node);return(NodeConstructor&&Object.getOwnPropertyDescriptor(NodeConstructor.prototype,"parentNode")?.get)?.call(node)??null}catch{return null}}function parentAcrossOpenShadowBoundary(node){const parent=nativeParentNode(node);if(parent)return parent;if(nativeNodeType(node)!==11||!("host"in node))return null;try{const ShadowRootConstructor=ownerDocumentForNode(node)?.defaultView?.ShadowRoot??(typeof ShadowRoot>"u"?void 0:ShadowRoot),host=(ShadowRootConstructor&&Object.getOwnPropertyDescriptor(ShadowRootConstructor.prototype,"host")?.get)?.call(node)??void 0;return host&&isElement(host)?host:null}catch{return null}}function spendAncestryWork(state,maximum){if(state.work>=maximum)throw new RenderedTreeTraversalError("Autoloader discovery","maxWork",maximum);state.work+=1}function renderedDepthFromRoot(root,node,state,maximumWork){let current=node,depth=0;const seen=new Set;for(;current&&!seen.has(current);){if(spendAncestryWork(state,maximumWork),current===root)return depth;if(seen.add(current),nativeNodeType(current)===11&&"host"in current){const host=parentAcrossOpenShadowBoundary(current);if(!host)return;depth+=1,current=host;continue}const parent=parentAcrossOpenShadowBoundary(current);if(!parent)return;isElement(parent)&&(depth+=1),current=parent}}function isReachableFromRoot(root,node,state,maximumWork){let current=node;const seen=new Set;for(;current&&!seen.has(current);){if(spendAncestryWork(state,maximumWork),current===root)return!0;seen.add(current),current=parentAcrossOpenShadowBoundary(current)}return!1}function observeRoot(context,root){!context.observer||context.observedRoots.has(root)||(context.observer.observe(root,{childList:!0,subtree:!0}),context.observedRoots.add(root))}function pruneDetachedObservedRoots(context,state){const observer=context.observer;if(!observer)return;const reachableRoots=[...context.observedRoots].filter(root=>isReachableFromRoot(context.root,root,state,context.options.traversal.maxWork));if(reachableRoots.length!==context.observedRoots.size){observer.disconnect(),context.observedRoots.clear();for(const root of reachableRoots)observeRoot(context,root)}}function openShadowRootFor(element){try{const ElementConstructor=element.ownerDocument?.defaultView?.Element??(typeof Element>"u"?void 0:Element);return(ElementConstructor&&Object.getOwnPropertyDescriptor(ElementConstructor.prototype,"shadowRoot")?.get)?.call(element)??void 0}catch{return}}async function finishDiscoveredElement(context,element){if(await waitForUpdate(element),!!context.active)return openShadowRootFor(element)}function prepareDiscoveryBatch(context,requestedRoots,state){if(!context.active||requestedRoots.length===0)return;const{roots,elements,elementDepths}=collectDiscoveryBatch(context,requestedRoots,state);for(const discoveredRoot of roots)observeRoot(context,discoveredRoot);const grouped=new Map,definedElements=[],markerClaims=new Map;for(const element of elements){const tag=nativeElementLocalName(element);if(!tag||!AUTOLOADER_TAG_SET.has(tag))continue;const typedTag=tag,entry=AUTOLOADER_MANIFEST[typedTag],registry=registryForRoot(element);if(!registry)continue;let alreadyDefined=!1;try{alreadyDefined=typeof registry.get=="function"&®istry.get(typedTag)!==void 0}catch{continue}if(alreadyDefined){const markerClaim=markPending(context,element);definedElements.push({element,depth:elementDepths.get(element)??0,markerClaim});continue}if(!isEligible(entry,context.options))continue;markerClaims.set(element,markPending(context,element));let tags=grouped.get(registry);tags||(tags=new Map,grouped.set(registry,tags));const matches=tags.get(typedTag)??[];matches.push(element),tags.set(typedTag,matches)}const definitions=[],elementsToFinish=[...definedElements];for(const[registry,tags]of grouped)for(const[tag,matches]of tags){const definition={registry,tag};definitions.push(definition),elementsToFinish.push(...matches.map(element=>({element,depth:elementDepths.get(element)??0,markerClaim:markerClaims.get(element),definition})))}return{definitions,elementsToFinish,state}}async function executeDiscoveryBatch(context,prepared){const{definitions,elementsToFinish,state}=prepared;try{let hasDefinitionFailure=!1,firstDefinitionFailure;const failedDefinitions=new Set;if(await runBounded(definitions,context.options.maxConcurrency,async definition=>{try{await withWorkSlot(context,()=>defineTag(context,definition.registry,definition.tag))}catch(error){failedDefinitions.add(definition),hasDefinitionFailure||(hasDefinitionFailure=!0,firstDefinitionFailure=error)}}),!context.active)return;const postUpdateRoots=new Map;if(await runBounded(elementsToFinish,context.options.maxConcurrency,async work=>{try{if(work.definition&&failedDefinitions.has(work.definition))return;const shadowRoot=await withWorkSlot(context,()=>finishDiscoveredElement(context,work.element));shadowRoot&&postUpdateRoots.set(shadowRoot,work.depth+1)}finally{work.markerClaim&&clearPending(work.markerClaim)}}),context.active&&postUpdateRoots.size>0&&await processDiscoveryBatch(context,[...postUpdateRoots].map(([root,depth])=>({root,depth})),state),hasDefinitionFailure)throw firstDefinitionFailure}finally{for(const{markerClaim}of elementsToFinish)markerClaim&&clearPending(markerClaim)}}async function processDiscoveryBatch(context,requestedRoots,state,queuedClaims=[]){const prepared=prepareDiscoveryBatch(context,requestedRoots,state);for(const claim of queuedClaims)clearPending(claim);prepared&&await executeDiscoveryBatch(context,prepared)}async function discoverRootsWithContext(context,roots){if(!context.active)return[];const before=new Set(context.loadedTags);return await processDiscoveryBatch(context,roots.map(root=>({root,depth:0})),newDiscoveryState()),[...context.loadedTags].filter(tag=>!before.has(tag))}function queueObservedDiscovery(context,roots,state){const queuedClaims=[];for(const{root}of roots){if(!isElement(root))continue;const localName=nativeElementLocalName(root);if(!localName||!AUTOLOADER_TAG_SET.has(localName))continue;const tag=localName,registry=registryForRoot(root);if(!registry)continue;let alreadyDefined=!1;try{alreadyDefined=typeof registry.get=="function"&®istry.get(tag)!==void 0}catch{continue}if(!alreadyDefined&&!isEligible(AUTOLOADER_MANIFEST[tag],context.options))continue;const claim=markPending(context,root);claim&&queuedClaims.push(claim)}const queued=context.discoveryTail.then(()=>processDiscoveryBatch(context,roots,state,queuedClaims));return context.discoveryTail=queued.then(()=>{},()=>{}),queued.finally(()=>{for(const claim of queuedClaims)clearPending(claim)})}function createContext(root,options){return{active:!0,root,options:normalizeOptions(options),markerClaims:new Set,definitionLoads:new WeakMap,loadedTags:new Set,observedRoots:new Set,discoveryTail:Promise.resolve(),activeWork:0,workWaiters:[]}}async function discover(root=defaultRoot(),options){if(!root||typeof root.querySelectorAll!="function")return[];const context=createContext(root,options);try{return await discoverRootsWithContext(context,[root])}finally{context.active=!1,clearAllPending(context)}}async function start(root=defaultRoot(),options){if(stop(),!root||typeof root.querySelectorAll!="function")return[];const context=createContext(root,options);activeContext=context;const Observer=observerConstructor(root);Observer&&(context.observer=new Observer(records=>{if(!context.active)return;const state=newDiscoveryState(),addedRoots=new Map;try{records.some(record=>record.removedNodes.length>0)&&pruneDetachedObservedRoots(context,state);for(const record of records)if(isReachableFromRoot(context.root,record.target,state,context.options.traversal.maxWork))for(const node of record.addedNodes){const nodeType=nativeNodeType(node);if(nodeType!==1&&nodeType!==11)continue;const depth=renderedDepthFromRoot(context.root,node,state,context.options.traversal.maxWork);depth!==void 0&&addedRoots.set(node,depth)}}catch(error){error instanceof RenderedTreeTraversalError&&emit(context,"lr-autoload-traversal-error",{limit:error.limit,maximum:error.maximum,error});return}addedRoots.size!==0&&queueObservedDiscovery(context,[...addedRoots].map(([discoveredRoot,depth])=>({root:discoveredRoot,depth})),state).catch(error=>{error instanceof RenderedTreeTraversalError&&emit(context,"lr-autoload-traversal-error",{limit:error.limit,maximum:error.maximum,error})})}));try{const initialDiscovery=discoverRootsWithContext(context,[root]);return context.discoveryTail=initialDiscovery.then(()=>{},()=>{}),await initialDiscovery}catch(error){throw activeContext===context&&stop(),error}}function stop(){const context=activeContext;if(context){activeContext=void 0,context.active=!1,context.observer?.disconnect(),context.observedRoots.clear();for(const resolve of context.workWaiters.splice(0))resolve();clearAllPending(context)}}export{AUTOLOADER_PENDING_ATTRIBUTE,discover,start,stop};
|
|
1
|
+
import{AUTOLOADER_MANIFEST}from"./internal/autoloader-manifest.js";import{loadAutoloaderConstructor}from"./internal/autoloader-loaders.js";import{AUTOLOADER_TAG_SET}from"./internal/autoloader-tags.js";import{registryForRoot}from"./internal/definition-registry.js";import{collectRenderedTree,nativeElementLocalName,renderedTreeTraversalLimits,RenderedTreeTraversalError}from"./internal/rendered-tree-traversal.js";const AUTOLOADER_PENDING_ATTRIBUTE="data-lr-autoload-pending",markerOwners=new Map;let activeContext;function defaultRoot(){return typeof document>"u"?void 0:document}function isReadonlySet(value){if(!value||typeof value!="object")return!1;const candidate=value;return typeof candidate.has=="function"&&typeof candidate[Symbol.iterator]=="function"}function normalizeConcurrency(value){const resolved=value??16;if(!Number.isFinite(resolved)||!Number.isInteger(resolved)||resolved<1)throw new RangeError("Autoloader maxConcurrency must be an integer >= 1");return resolved}function normalizeOptions(options){const traversal=renderedTreeTraversalLimits(options??{},"Autoloader"),maxConcurrency=normalizeConcurrency(options?.maxConcurrency),common={events:options?.events===!0,traversal,maxConcurrency},policy=options?.optionalPeers;if(policy===void 0)return{optionalPeers:new Set,...common};if(policy==="all")return{optionalPeers:"all",...common};if(!Array.isArray(policy)&&!isReadonlySet(policy))throw new TypeError("optionalPeers must be 'all', an array, or a ReadonlySet of package names");const peers=[...policy];if(peers.some(peer=>typeof peer!="string"||peer.length===0||peer!==peer.trim()))throw new TypeError("optionalPeers must contain non-empty package names");return{optionalPeers:new Set(peers),...common}}function isEligible(entry,options){const allowedPeers=options.optionalPeers;return entry.optionalPeers.length===0||allowedPeers==="all"?!0:entry.optionalPeers.every(peer=>allowedPeers.has(peer))}function nativeNodeType(node){try{const NodeConstructor=typeof Node>"u"?void 0:Node;return(NodeConstructor&&Object.getOwnPropertyDescriptor(NodeConstructor.prototype,"nodeType")?.get)?.call(node)??node.nodeType}catch{return}}function ownerDocumentForNode(node){if(nativeNodeType(node)===9)return node;try{const NodeConstructor=typeof Node>"u"?void 0:Node;return(NodeConstructor&&Object.getOwnPropertyDescriptor(NodeConstructor.prototype,"ownerDocument")?.get)?.call(node)??void 0}catch{return}}function eventConstructor(root){const fromWindow=ownerDocumentForNode(root)?.defaultView?.CustomEvent;return fromWindow||(typeof CustomEvent>"u"?void 0:CustomEvent)}function emit(context,name,detail){if(!context.options.events||!context.active)return;const EventConstructor=eventConstructor(context.root);EventConstructor&&context.root.dispatchEvent(new EventConstructor(name,{bubbles:!0,composed:!0,detail}))}function markPending(context,element){let owners=markerOwners.get(element);if(!owners){if(element.hasAttribute(AUTOLOADER_PENDING_ATTRIBUTE))return;owners=new Set,markerOwners.set(element,owners)}const claim={context,element};return owners.add(claim),context.markerClaims.add(claim),element.hasAttribute(AUTOLOADER_PENDING_ATTRIBUTE)||element.setAttribute(AUTOLOADER_PENDING_ATTRIBUTE,""),claim}function clearPending(claim){if(!claim.context.markerClaims.delete(claim))return;const owners=markerOwners.get(claim.element);owners?.delete(claim)&&(owners.size>0||(claim.element.removeAttribute(AUTOLOADER_PENDING_ATTRIBUTE),markerOwners.delete(claim.element)))}function clearAllPending(context){for(const claim of[...context.markerClaims])clearPending(claim)}function definitionMap(context,registry){let definitions=context.definitionLoads.get(registry);return definitions||(definitions=new Map,context.definitionLoads.set(registry,definitions)),definitions}async function waitForUpdate(element){try{const updateComplete=element.updateComplete;updateComplete&&typeof updateComplete.then=="function"&&await updateComplete}catch{}}async function runBounded(items,concurrency,task){let next=0,failed=!1,failure;const worker=async()=>{for(;!failed;){const index=next;if(index>=items.length)return;next+=1;try{await task(items[index])}catch(error){failed||(failed=!0,failure=error)}}},workers=Array.from({length:Math.min(concurrency,items.length)},()=>worker());if(await Promise.all(workers),failed)throw failure}async function withWorkSlot(context,task){if(context.active)return task()}async function defineTag(context,registry,tag){if(registry.get(tag))return;const definitions=definitionMap(context,registry),existing=definitions.get(tag);if(existing)return existing;const entry=AUTOLOADER_MANIFEST[tag],pending=(async()=>{emit(context,"lr-autoload-preload",{tag,optionalPeers:entry.optionalPeers});try{const constructor=await loadAutoloaderConstructor(tag);if(!context.active||(registry.get(tag)||registry.define(tag,constructor),await registry.whenDefined(tag),!context.active))return;context.loadedTags.add(tag),emit(context,"lr-autoload-loaded",{tag,optionalPeers:entry.optionalPeers})}catch(error){throw emit(context,"lr-autoload-error",{tag,optionalPeers:entry.optionalPeers,error}),error}})();definitions.set(tag,pending);const clearDefinition=()=>{definitions.get(tag)===pending&&definitions.delete(tag)};return pending.then(clearDefinition,clearDefinition),pending}function newDiscoveryState(){return{work:0,elements:new Set,roots:new Set}}function collectDiscoveryBatch(context,requestedRoots,state){const batchRoots=[],batchElements=[],rootDepths=new Map,elementDepths=new Map,seenRequests=new Set;for(const request of requestedRoots){if(seenRequests.has(request.root))continue;seenRequests.add(request.root);const result=collectRenderedTree(request.root,context.options.traversal,state,"Autoloader discovery",request.depth);for(const discoveredRoot of result.roots)batchRoots.push(discoveredRoot),rootDepths.set(discoveredRoot,result.rootDepths.get(discoveredRoot)??request.depth);for(const element of result.elements)batchElements.push(element),elementDepths.set(element,result.elementDepths.get(element)??request.depth)}return{roots:batchRoots,elements:batchElements,rootDepths,elementDepths}}function isElement(node){return nativeNodeType(node)===1}function observerConstructor(root){const fromWindow=ownerDocumentForNode(root)?.defaultView?.MutationObserver;return fromWindow||(typeof MutationObserver>"u"?void 0:MutationObserver)}function nativeParentNode(node){try{const NodeConstructor=ownerDocumentForNode(node)?.defaultView?.Node??(typeof Node>"u"?void 0:Node);return(NodeConstructor&&Object.getOwnPropertyDescriptor(NodeConstructor.prototype,"parentNode")?.get)?.call(node)??null}catch{return null}}function parentAcrossOpenShadowBoundary(node){const parent=nativeParentNode(node);if(parent)return parent;if(nativeNodeType(node)!==11||!("host"in node))return null;try{const ShadowRootConstructor=ownerDocumentForNode(node)?.defaultView?.ShadowRoot??(typeof ShadowRoot>"u"?void 0:ShadowRoot),host=(ShadowRootConstructor&&Object.getOwnPropertyDescriptor(ShadowRootConstructor.prototype,"host")?.get)?.call(node)??void 0;return host&&isElement(host)?host:null}catch{return null}}function spendAncestryWork(state,maximum){if(state.work>=maximum)throw new RenderedTreeTraversalError("Autoloader discovery","maxWork",maximum);state.work+=1}function renderedDepthFromRoot(root,node,state,maximumWork){let current=node,depth=0;const seen=new Set;for(;current&&!seen.has(current);){if(spendAncestryWork(state,maximumWork),current===root)return depth;if(seen.add(current),nativeNodeType(current)===11&&"host"in current){const host=parentAcrossOpenShadowBoundary(current);if(!host)return;depth+=1,current=host;continue}const parent=parentAcrossOpenShadowBoundary(current);if(!parent)return;isElement(parent)&&(depth+=1),current=parent}}function isReachableFromRoot(root,node,state,maximumWork){let current=node;const seen=new Set;for(;current&&!seen.has(current);){if(spendAncestryWork(state,maximumWork),current===root)return!0;seen.add(current),current=parentAcrossOpenShadowBoundary(current)}return!1}function observeRoot(context,root){!context.observer||context.observedRoots.has(root)||(context.observer.observe(root,{childList:!0,subtree:!0}),context.observedRoots.add(root))}function pruneDetachedObservedRoots(context,state){const observer=context.observer;if(!observer)return;const reachableRoots=[...context.observedRoots].filter(root=>isReachableFromRoot(context.root,root,state,context.options.traversal.maxWork));if(reachableRoots.length!==context.observedRoots.size){observer.disconnect(),context.observedRoots.clear();for(const root of reachableRoots)observeRoot(context,root)}}function openShadowRootFor(element){try{const ElementConstructor=element.ownerDocument?.defaultView?.Element??(typeof Element>"u"?void 0:Element);return(ElementConstructor&&Object.getOwnPropertyDescriptor(ElementConstructor.prototype,"shadowRoot")?.get)?.call(element)??void 0}catch{return}}async function finishDiscoveredElement(context,element){if(await waitForUpdate(element),!!context.active)return openShadowRootFor(element)}function prepareDiscoveryBatch(context,requestedRoots,state){if(!context.active||requestedRoots.length===0)return;const{roots,elements,elementDepths}=collectDiscoveryBatch(context,requestedRoots,state);for(const discoveredRoot of roots)observeRoot(context,discoveredRoot);const grouped=new Map,definedElements=[],markerClaims=new Map;for(const element of elements){const tag=nativeElementLocalName(element);if(!tag||!AUTOLOADER_TAG_SET.has(tag))continue;const typedTag=tag,entry=AUTOLOADER_MANIFEST[typedTag],registry=registryForRoot(element);if(!registry)continue;let alreadyDefined=!1;try{alreadyDefined=typeof registry.get=="function"&®istry.get(typedTag)!==void 0}catch{continue}if(alreadyDefined){const markerClaim=markPending(context,element);definedElements.push({element,depth:elementDepths.get(element)??0,markerClaim});continue}if(!isEligible(entry,context.options))continue;markerClaims.set(element,markPending(context,element));let tags=grouped.get(registry);tags||(tags=new Map,grouped.set(registry,tags));const matches=tags.get(typedTag)??[];matches.push(element),tags.set(typedTag,matches)}const definitions=[],elementsToFinish=[...definedElements];for(const[registry,tags]of grouped)for(const[tag,matches]of tags){const definition={registry,tag};definitions.push(definition),elementsToFinish.push(...matches.map(element=>({element,depth:elementDepths.get(element)??0,markerClaim:markerClaims.get(element),definition})))}return{definitions,elementsToFinish,state}}async function executeDiscoveryBatch(context,prepared){const{definitions,elementsToFinish,state}=prepared;try{let hasDefinitionFailure=!1,firstDefinitionFailure;const failedDefinitions=new Set;if(await runBounded(definitions,context.options.maxConcurrency,async definition=>{try{await withWorkSlot(context,()=>defineTag(context,definition.registry,definition.tag))}catch(error){failedDefinitions.add(definition),hasDefinitionFailure||(hasDefinitionFailure=!0,firstDefinitionFailure=error)}}),!context.active)return;const postUpdateRoots=new Map;if(await runBounded(elementsToFinish,context.options.maxConcurrency,async work=>{try{if(work.definition&&failedDefinitions.has(work.definition))return;const shadowRoot=await withWorkSlot(context,()=>finishDiscoveredElement(context,work.element));shadowRoot&&postUpdateRoots.set(shadowRoot,work.depth+1)}finally{work.markerClaim&&clearPending(work.markerClaim)}}),context.active&&postUpdateRoots.size>0&&await processDiscoveryBatch(context,[...postUpdateRoots].map(([root,depth])=>({root,depth})),state),hasDefinitionFailure)throw firstDefinitionFailure}finally{for(const{markerClaim}of elementsToFinish)markerClaim&&clearPending(markerClaim)}}async function processDiscoveryBatch(context,requestedRoots,state,queuedClaims=[]){const prepared=prepareDiscoveryBatch(context,requestedRoots,state);for(const claim of queuedClaims)clearPending(claim);prepared&&await executeDiscoveryBatch(context,prepared)}async function discoverRootsWithContext(context,roots){if(!context.active)return[];const before=new Set(context.loadedTags);return await processDiscoveryBatch(context,roots.map(root=>({root,depth:0})),newDiscoveryState()),[...context.loadedTags].filter(tag=>!before.has(tag))}function queueObservedDiscovery(context,roots,state){const queuedClaims=[];for(const{root}of roots){if(!isElement(root))continue;const localName=nativeElementLocalName(root);if(!localName||!AUTOLOADER_TAG_SET.has(localName))continue;const tag=localName,registry=registryForRoot(root);if(!registry)continue;let alreadyDefined=!1;try{alreadyDefined=typeof registry.get=="function"&®istry.get(tag)!==void 0}catch{continue}if(!alreadyDefined&&!isEligible(AUTOLOADER_MANIFEST[tag],context.options))continue;const claim=markPending(context,root);claim&&queuedClaims.push(claim)}const queued=context.discoveryTail.then(()=>processDiscoveryBatch(context,roots,state,queuedClaims));return context.discoveryTail=queued.then(()=>{},()=>{}),queued.finally(()=>{for(const claim of queuedClaims)clearPending(claim)})}function createContext(root,options){return{active:!0,root,options:normalizeOptions(options),markerClaims:new Set,definitionLoads:new WeakMap,loadedTags:new Set,observedRoots:new Set,discoveryTail:Promise.resolve()}}async function discover(root=defaultRoot(),options){if(!root||typeof root.querySelectorAll!="function")return[];const context=createContext(root,options);try{return await discoverRootsWithContext(context,[root])}finally{context.active=!1,clearAllPending(context)}}async function start(root=defaultRoot(),options){if(stop(),!root||typeof root.querySelectorAll!="function")return[];const context=createContext(root,options);activeContext=context;const Observer=observerConstructor(root);Observer&&(context.observer=new Observer(records=>{if(!context.active)return;const state=newDiscoveryState(),addedRoots=new Map;try{records.some(record=>record.removedNodes.length>0)&&pruneDetachedObservedRoots(context,state);for(const record of records)if(isReachableFromRoot(context.root,record.target,state,context.options.traversal.maxWork))for(const node of record.addedNodes){const nodeType=nativeNodeType(node);if(nodeType!==1&&nodeType!==11)continue;const depth=renderedDepthFromRoot(context.root,node,state,context.options.traversal.maxWork);depth!==void 0&&addedRoots.set(node,depth)}}catch(error){error instanceof RenderedTreeTraversalError&&emit(context,"lr-autoload-traversal-error",{limit:error.limit,maximum:error.maximum,error});return}addedRoots.size!==0&&queueObservedDiscovery(context,[...addedRoots].map(([discoveredRoot,depth])=>({root:discoveredRoot,depth})),state).catch(error=>{error instanceof RenderedTreeTraversalError&&emit(context,"lr-autoload-traversal-error",{limit:error.limit,maximum:error.maximum,error})})}));try{const initialDiscovery=discoverRootsWithContext(context,[root]);return context.discoveryTail=initialDiscovery.then(()=>{},()=>{}),await initialDiscovery}catch(error){throw activeContext===context&&stop(),error}}function stop(){const context=activeContext;context&&(activeContext=void 0,context.active=!1,context.observer?.disconnect(),context.observedRoots.clear(),clearAllPending(context))}export{AUTOLOADER_PENDING_ATTRIBUTE,discover,start,stop};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { type TemplateResult, type PropertyValues } from 'lit';
|
|
2
2
|
import { LyraElement, type LyraEventDetailSnapshot } from '../../../internal/lyra-element.js';
|
|
3
|
-
import '../../../internal/form-control-labels.js';
|
|
4
3
|
import '../../forms/select/select.class.js';
|
|
5
4
|
import '../../forms/combobox/option.class.js';
|
|
6
5
|
import { type FormOwnerValue } from '../../../internal/form-associated.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import"../../../internal/form-control-labels.js";import{nextId}from"../../../internal/a11y.js";import{AnchoredValidityController,resolveValidityAnchor,VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{syncValidityStates}from"../../../internal/custom-states.js";import{styles}from"./tool-param-form.styles.js";import"../../forms/select/select.class.js";import"../../forms/combobox/option.class.js";import{getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{attachInternalsSafely,getFormOwner,installCustomErrorProperty,isBarredFromValidation,setFormOwner}from"../../../internal/form-associated.js";import{installInvalidEventAlias}from"../../../internal/invalid-event-alias.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LYRA_DEFAULT_fieldMustBeBoolean,LYRA_DEFAULT_fieldMustBeInteger,LYRA_DEFAULT_fieldMustBeNumber,LYRA_DEFAULT_fieldMustBeOneOf,LYRA_DEFAULT_fieldMustBeString,LYRA_DEFAULT_fieldMustEqual,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_noData,LYRA_DEFAULT_schemaMustBeObject,LYRA_DEFAULT_schemaPropertiesMustBeFlat,LYRA_DEFAULT_toolParamBooleanFalse,LYRA_DEFAULT_toolParamBooleanTrue,LYRA_DEFAULT_toolParamBooleanUnset,LYRA_DEFAULT_toolParamMissingProperty,LYRA_DEFAULT_toolParamSchemaLimit,LYRA_DEFAULT_unsupportedFieldType,LYRA_DEFAULT_valueMustBeSerializable}from"../../../internal/default-strings.generated.js";const MAX_SCHEMA_FIELDS=100,MAX_ENUM_OPTIONS=500,MAX_VALUE_ENTRIES=1e4,MAX_VALUE_NODES=5e4,MAX_VALUE_DEPTH=16,OMIT_VALUE=Symbol("omit-tool-param-value");function isPlainRecord(value){try{const prototype=Object.getPrototypeOf(value);return prototype===null||Object.getPrototypeOf(prototype)===null}catch{return!1}}function snapshotValueEntry(value,budget,depth){if(value===null||typeof value!="object"&&typeof value!="function"||typeof value=="function")return value;if(depth>MAX_VALUE_DEPTH||budget.remaining<=0)return budget.truncated=!0,OMIT_VALUE;const existing=budget.seen.get(value);if(existing!==void 0)return existing;let isArray=!1;try{isArray=Array.isArray(value)}catch{return budget.invalid=!0,OMIT_VALUE}if(isArray){const output2=[];budget.seen.set(value,output2);let length=0;try{const descriptor=Object.getOwnPropertyDescriptor(value,"length");descriptor&&"value"in descriptor&&typeof descriptor.value=="number"&&Number.isSafeInteger(descriptor.value)&&descriptor.value>=0&&(descriptor.value>MAX_VALUE_ENTRIES&&(budget.truncated=!0),length=Math.min(descriptor.value,MAX_VALUE_ENTRIES))}catch{budget.invalid=!0}for(let index=0;index<length&&budget.remaining>0;index+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,String(index))}catch{budget.invalid=!0;continue}if(!descriptor)continue;if(!("value"in descriptor)){budget.invalid=!0;continue}budget.remaining-=1;const entry=snapshotValueEntry(descriptor.value,budget,depth+1);entry!==OMIT_VALUE&&output2.push(entry)}return budget.remaining<=0&&length>output2.length&&(budget.truncated=!0),Object.freeze(output2)}if(!isPlainRecord(value))return value;const output={};budget.seen.set(value,output);let descriptors;try{descriptors=Object.getOwnPropertyDescriptors(value)}catch{return budget.invalid=!0,OMIT_VALUE}let retained=0;for(const key of Reflect.ownKeys(descriptors)){const descriptor=descriptors[key];if(!descriptor?.enumerable)continue;if(retained>=MAX_VALUE_ENTRIES||budget.remaining<=0){budget.truncated=!0;break}if(!("value"in descriptor)){budget.invalid=!0;continue}retained+=1,budget.remaining-=1;const entry=snapshotValueEntry(descriptor.value,budget,depth+1);entry!==OMIT_VALUE&&Object.defineProperty(output,key,{value:entry,enumerable:!0,configurable:!1,writable:!1})}return Object.freeze(output)}function snapshotFormValue(value){if(value==null)return{value:Object.freeze({}),invalid:!1,truncated:!1};let isArray=!1;try{isArray=Array.isArray(value)}catch{return{value:Object.freeze({}),invalid:!0,truncated:!1}}if(typeof value!="object"||isArray||!isPlainRecord(value))return{value:Object.freeze({}),invalid:!0,truncated:!1};const budget={remaining:MAX_VALUE_NODES,seen:new WeakMap,invalid:!1,truncated:!1},snapshot=snapshotValueEntry(value,budget,0);return{value:snapshot===OMIT_VALUE?Object.freeze({}):snapshot,invalid:budget.invalid||snapshot===OMIT_VALUE,truncated:budget.truncated}}const EMPTY_SCHEMA=Object.freeze({type:"object",properties:Object.freeze({})});function snapshotSchemaStringArray(value){let isArray=!1;try{isArray=Array.isArray(value)}catch{return{isArray:!1,exceededLimit:!1}}if(!isArray)return{isArray:!1,exceededLimit:!1};let sourceLength=0;try{const descriptor=Object.getOwnPropertyDescriptor(value,"length");descriptor&&"value"in descriptor&&typeof descriptor.value=="number"&&Number.isSafeInteger(descriptor.value)&&descriptor.value>=0&&(sourceLength=descriptor.value)}catch{return{isArray:!0,value:Object.freeze([]),exceededLimit:!1}}const output=[];for(let index=0;index<Math.min(sourceLength,MAX_SCHEMA_FIELDS);index+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,String(index))}catch{continue}descriptor&&"value"in descriptor&&typeof descriptor.value=="string"&&output.push(descriptor.value)}return{isArray:!0,value:Object.freeze(output),exceededLimit:sourceLength>MAX_SCHEMA_FIELDS}}function snapshotSchema(value){if(value==null)return{schema:EMPTY_SCHEMA,shapeError:"",exceededLimits:!1};let isArray=!1;try{isArray=Array.isArray(value)}catch{return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1}}if(typeof value!="object"||isArray)return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1};let rootDescriptors;try{rootDescriptors=Object.getOwnPropertyDescriptors(value)}catch{return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1}}const typeDescriptor=rootDescriptors.type;if(!typeDescriptor||!("value"in typeDescriptor)||typeDescriptor.value!=="object")return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1};const propertiesDescriptor=rootDescriptors.properties,propertiesValue=propertiesDescriptor&&"value"in propertiesDescriptor?propertiesDescriptor.value:void 0;if(propertiesValue===null||typeof propertiesValue!="object"||!isPlainRecord(propertiesValue))return{schema:EMPTY_SCHEMA,shapeError:"properties",exceededLimits:!1};const properties=Object.create(null);let shapeError="",exceededLimits=!1,seenFields=0,propertyDescriptors;try{propertyDescriptors=Object.getOwnPropertyDescriptors(propertiesValue)}catch{return{schema:EMPTY_SCHEMA,shapeError:"properties",exceededLimits:!1}}for(const key of Reflect.ownKeys(propertyDescriptors)){const descriptor=propertyDescriptors[key];if(typeof key!="string"||!descriptor?.enumerable)continue;if(seenFields+=1,seenFields>MAX_SCHEMA_FIELDS){exceededLimits=!0;break}if(!("value"in descriptor)||descriptor.value===null||typeof descriptor.value!="object"||!isPlainRecord(descriptor.value)){shapeError="properties";continue}const propertySnapshot=snapshotFormValue(descriptor.value);if(propertySnapshot.invalid||propertySnapshot.truncated){shapeError="properties";continue}const property=propertySnapshot.value;let choices=property.enum;Array.isArray(choices)&&choices.length>MAX_ENUM_OPTIONS&&(exceededLimits=!0,choices=Object.freeze(choices.slice(0,MAX_ENUM_OPTIONS))),properties[key]=Object.freeze({...property,...choices===void 0?{}:{enum:choices}})}const requiredDescriptor=rootDescriptors.required;let required;if(requiredDescriptor&&"value"in requiredDescriptor){const requiredSnapshot=snapshotSchemaStringArray(requiredDescriptor.value);requiredSnapshot.isArray?(required=requiredSnapshot.value,requiredSnapshot.exceededLimit&&(exceededLimits=!0)):requiredDescriptor.enumerable&&(shapeError="properties")}else requiredDescriptor?.enumerable&&(shapeError="properties");return{schema:Object.freeze({type:"object",properties:Object.freeze(properties),...required===void 0?{}:{required}}),shapeError,exceededLimits}}function cloneFormValue(value,_ownerWindow){return snapshotFormValue(value).value}class LyraToolParamForm extends LyraElement{static{this.defaultStrings={...super.defaultStrings,fieldMustBeBoolean:LYRA_DEFAULT_fieldMustBeBoolean,fieldMustBeInteger:LYRA_DEFAULT_fieldMustBeInteger,fieldMustBeNumber:LYRA_DEFAULT_fieldMustBeNumber,fieldMustBeOneOf:LYRA_DEFAULT_fieldMustBeOneOf,fieldMustBeString:LYRA_DEFAULT_fieldMustBeString,fieldMustEqual:LYRA_DEFAULT_fieldMustEqual,fieldRequired:LYRA_DEFAULT_fieldRequired,noData:LYRA_DEFAULT_noData,schemaMustBeObject:LYRA_DEFAULT_schemaMustBeObject,schemaPropertiesMustBeFlat:LYRA_DEFAULT_schemaPropertiesMustBeFlat,toolParamBooleanFalse:LYRA_DEFAULT_toolParamBooleanFalse,toolParamBooleanTrue:LYRA_DEFAULT_toolParamBooleanTrue,toolParamBooleanUnset:LYRA_DEFAULT_toolParamBooleanUnset,toolParamMissingProperty:LYRA_DEFAULT_toolParamMissingProperty,toolParamSchemaLimit:LYRA_DEFAULT_toolParamSchemaLimit,unsupportedFieldType:LYRA_DEFAULT_unsupportedFieldType,valueMustBeSerializable:LYRA_DEFAULT_valueMustBeSerializable}}static{this.formAssociated=!0}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-validity-change","lr-input"])}static{this.properties={customError:{attribute:"custom-error",reflect:!0,noAccessor:!0},name:{reflect:!0,noAccessor:!0},schema:{attribute:!1,noAccessor:!0},value:{attribute:!1,noAccessor:!0},disabled:{type:Boolean,reflect:!0,noAccessor:!0}}}constructor(){super(),this._errors={},this._formError="",this.showFormError=!1,this.touchedFields=new Set,this.baseId=nextId("tool-param-form"),this._fieldsetDisabled=!1,this._name="",this._schema=EMPTY_SCHEMA,this.schemaInputShapeError="",this.schemaInputExceededLimits=!1,this._value=Object.freeze({}),this.valueInputInvalid=!1,this.valueInputTruncated=!1,this.defaultValueSnapshot=Object.freeze({}),this.defaultValueCaptured=!1,this._effectiveValue=Object.freeze({}),this._validityFlags={},this._disabled=!1,this.hasInteracted=!1,this.visibleErrorSnapshot=new Map,this.suppressNextErrorAnnouncement=!0,this.stopNestedControlEvent=e=>{e.stopPropagation()},this.onFieldFocus=()=>{this.emit("focus")},this.onFieldBlur=()=>{this.emit("blur")},this.internals=attachInternalsSafely(this),this.validityController=new AnchoredValidityController(this,this.internals,()=>this[VALIDITY_ANCHOR]()),installCustomErrorProperty(this,()=>this.validityController.customValidityMessage),installInvalidEventAlias(this,init=>this.emit("lr-invalid",null,init)),this.syncFormState()}get form(){return getFormOwner(this.internals)}set form(owner){setFormOwner(this,owner)}getForm(){return getFormOwner(this.internals)}get labels(){return this.internals.labels}get validity(){return this.internals.validity}get validationMessage(){return this.internals.validationMessage}get willValidate(){return this.internals.willValidate}[VALIDITY_ANCHOR](){const field=this.firstInvalidField();if(field){const input=field.querySelector("input.control");if(input)return input;for(const child of field.children){const anchor=resolveValidityAnchor(child);if(anchor)return anchor}}return this.firstMissingPropertyError()}firstInvalidField(){if(!this.renderRoot)return;const fields=Array.from(this.renderRoot.querySelectorAll('[part="field"]'));for(const key of Object.keys(this._errors)){const field=fields.find(candidate=>candidate.dataset.key===key);if(field)return field}}get missingRequiredKeys(){const properties=this.schemaProperties;return this.requiredKeys.filter(key=>!Object.prototype.hasOwnProperty.call(properties,key)&&!!this._errors[key])}firstMissingPropertyError(){if(!this.renderRoot)return;const errors=Array.from(this.renderRoot.querySelectorAll('[part="error"][data-missing-property]'));for(const key of Object.keys(this._errors)){const error=errors.find(candidate=>candidate.dataset.key===key);if(error)return error}}focusFirstControl(){if(!this.renderRoot)return;const controls=this.renderRoot.querySelectorAll("input.control, lr-select");for(const control of controls)if(!(control.disabled||control.getAttribute("aria-disabled")==="true")){control.focus();return}}click(){this.effectiveDisabled||this.focusFirstControl()}connectedCallback(){this.defaultValueCaptured||(this.defaultValueSnapshot=cloneFormValue(this._value,this.ownerDocument.defaultView),this.defaultValueCaptured=!0),super.connectedCallback(),this.errorAnnouncementSink?.element.ownerDocument!==this.ownerDocument&&(this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this})),this.hasUpdated&&(this.suppressNextErrorAnnouncement=!0,this.requestUpdate()),this.syncFormState()}disconnectedCallback(){super.disconnectedCallback(),this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=void 0,this.suppressNextErrorAnnouncement=!0}get effectiveValue(){return snapshotFormValue(this._effectiveValue).value}get schemaProperties(){return this._schema.properties}get requiredKeys(){return this._schema.required??Object.freeze([])}resolveEffectiveValue(){const props=this.schemaProperties,out={...this.value};for(const[key,prop]of Object.entries(props))!Object.prototype.hasOwnProperty.call(this.value,key)&&prop.default!==void 0&&Object.defineProperty(out,key,{configurable:!0,enumerable:!0,writable:!0,value:prop.default});return snapshotFormValue(out).value}get schema(){return this._schema}set schema(next){const old=this._schema,snapshot=snapshotSchema(next);this._schema=snapshot.schema,this.schemaInputShapeError=snapshot.shapeError,this.schemaInputExceededLimits=snapshot.exceededLimits,this.syncFormState(),this.requestUpdate("schema",old)}get value(){return this._value}set value(next){const old=this._value,snapshot=snapshotFormValue(next);this._value=snapshot.value,this.valueInputInvalid=snapshot.invalid,this.valueInputTruncated=snapshot.truncated,this.syncFormState(),this.requestUpdate("value",old)}get name(){return this._name}set name(next){const old=this._name;this._name=next??"",this._name?this.setAttribute("name",this._name):this.removeAttribute("name"),this.requestUpdate("name",old)}get disabled(){return this._disabled}set disabled(next){const old=this._disabled;this._disabled=!!next,this.toggleAttribute("disabled",this._disabled),this.applyValidity(),this.requestUpdate("disabled",old)}get effectiveDisabled(){return this.disabled||this._fieldsetDisabled}get errors(){return this.publicValidityErrors()}publicValidityErrors(){const errors={...this._errors};return this.willValidate&&(this.validityController.customValidityMessage||this._formError)&&(errors.base=this.validationMessage),Object.freeze(errors)}publishValiditySnapshot(){if(!this.isConnected)return;const valid=!this.willValidate||this.validity.valid,errors=valid?Object.freeze({}):this.publicValidityErrors(),key=JSON.stringify({valid,errors});key!==this.lastValidityKey&&(this.lastValidityKey=key,this.emit("lr-validity-change",Object.freeze({valid,errors})))}get formError(){return this._formError}computeValidation(effective){const props=this.schemaProperties,required=new Set(this.requiredKeys),out={},flags={},addError=(key,message)=>{Object.defineProperty(out,key,{configurable:!0,enumerable:!0,writable:!0,value:message})};for(const[key,prop]of Object.entries(props)){const type=prop?.type;if(type!=="string"&&type!=="number"&&type!=="integer"&&type!=="boolean"){addError(key,this.localize("unsupportedFieldType",void 0,{type:String(type)})),flags.customError=!0;continue}if(!(Object.prototype.hasOwnProperty.call(effective,key)&&effective[key]!==void 0)){required.has(key)&&(addError(key,this.localize("fieldRequired")),flags.valueMissing=!0);continue}const v=effective[key];if(type==="string"&&typeof v!="string"){addError(key,this.localize("fieldMustBeString")),flags.typeMismatch=!0;continue}if(type==="number"&&(typeof v!="number"||!Number.isFinite(v))){addError(key,this.localize("fieldMustBeNumber")),flags.typeMismatch=!0;continue}if(type==="integer"&&(typeof v!="number"||!Number.isFinite(v))){addError(key,this.localize("fieldMustBeInteger")),flags.typeMismatch=!0;continue}if(type==="integer"&&!Number.isInteger(v)){addError(key,this.localize("fieldMustBeInteger")),flags.stepMismatch=!0;continue}if(type==="boolean"&&typeof v!="boolean"){addError(key,this.localize("fieldMustBeBoolean")),flags.typeMismatch=!0;continue}if(type==="string"&&Array.isArray(prop.enum)&&!prop.enum.includes(v)){addError(key,this.localize("fieldMustBeOneOf",void 0,{values:getListFormat(this.effectiveLocale,{style:"long",type:"disjunction"}).format(prop.enum)})),flags.customError=!0;continue}prop.const!==void 0&&v!==prop.const&&(addError(key,this.localize("fieldMustEqual",void 0,{value:JSON.stringify(prop.const)})),flags.customError=!0)}for(const key of required)Object.prototype.hasOwnProperty.call(props,key)||(!Object.prototype.hasOwnProperty.call(effective,key)||effective[key]===void 0)&&(addError(key,this.localize("fieldRequired")),flags.valueMissing=!0);return{errors:out,flags}}checkValidity(){return this.syncFormState(),this.internals.checkValidity()}reportValidity(){this.hasInteracted=!0,this.syncFormState(),Object.keys(this._errors).length>0&&(this.touchedFields=new Set([...this.touchedFields,...Object.keys(this._errors)])),this._formError&&(this.showFormError=!0);const valid=this.internals.reportValidity();return!valid&&!this.firstInvalidField()&&this.missingRequiredKeys.length>0&&this.updateComplete.then(()=>{const error=this.firstMissingPropertyError();this.validityController.refreshAnchor(),error?.focus()}),valid}setCustomValidity(message){this.validityController.setCustomValidity(message??""),this.syncValidityCustomStates(),this.publishValiditySnapshot()}formResetCallback(){this.hasInteracted=!1,this.value=cloneFormValue(this.defaultValueSnapshot,this.ownerDocument.defaultView),this.touchedFields=new Set,this.showFormError=!1}formStateRestoreCallback(state2,_mode){let restored={};if(typeof state2=="string")try{const parsed=JSON.parse(state2);parsed!==null&&typeof parsed=="object"&&!Array.isArray(parsed)&&(restored=parsed)}catch{}this.value=restored}formDisabledCallback(disabled){this._fieldsetDisabled=disabled,this.applyValidity(),this.requestUpdate()}schemaShapeError(){return this.schemaInputShapeError==="object"?this.localize("schemaMustBeObject"):this.schemaInputShapeError==="properties"?this.localize("schemaPropertiesMustBeFlat"):this.schemaInputExceededLimits?this.localize("toolParamSchemaLimit",void 0,{fields:getNumberFormat(this.effectiveLocale).format(MAX_SCHEMA_FIELDS),options:getNumberFormat(this.effectiveLocale).format(MAX_ENUM_OPTIONS)}):""}serializeEffectiveValue(effective){const serialized=JSON.stringify(effective,(_key,value)=>{if(typeof value=="number"&&!Number.isFinite(value))throw new TypeError("Non-finite numbers are not JSON values.");return value});if(typeof serialized!="string")throw new TypeError("Value did not serialize to JSON.");return serialized}get barredFromValidation(){return isBarredFromValidation(this,this.internals)}syncInternals(formValue){this.internals.setFormValue(formValue,formValue),this.applyValidity()}applyValidity(){if(this.validityController){if(this.barredFromValidation||Object.keys(this._validityFlags).length===0)this.validityController.setValidity({});else{const firstMessage=Object.values(this._errors)[0]??this._formError;this.validityController.setValidity(this._validityFlags,firstMessage)}this.syncValidityCustomStates(),this.publishValiditySnapshot()}}syncValidityCustomStates(){syncValidityStates(this.internals,{required:this.requiredKeys.length>0,hasInteracted:this.hasInteracted,barred:this.barredFromValidation})}syncFormState(){let effective=Object.freeze({}),errors={},flags={},formError="",formValue=null;try{if(formError=this.schemaShapeError(),this.valueInputInvalid||this.valueInputTruncated)throw new TypeError("The value could not be retained within the public snapshot boundary.");effective=this.resolveEffectiveValue();const validation=this.computeValidation(effective);errors=validation.errors,flags=validation.flags,formValue=this.serializeEffectiveValue(effective)}catch{formError=this.localize("valueMustBeSerializable"),formValue=null}formError&&(flags.customError=!0,formValue=null),this._effectiveValue=effective,JSON.stringify(this._errors)!==JSON.stringify(errors)&&(this._errors=errors),this._formError=formError,this._validityFlags=flags,this.syncInternals(formValue)}updated(changed){if(super.updated(changed),this.publishValiditySnapshot(),changed.has("value")||changed.has("schema")||changed.has("_errors")||changed.has("_formError")){const nestedUpdates=Array.from(this.firstInvalidField()?.children??[]).filter(element=>typeof element[VALIDITY_ANCHOR]=="function").map(element=>element.updateComplete).filter(update=>update!==void 0);nestedUpdates.length>0&&Promise.all(nestedUpdates).then(()=>this.validityController.refreshAnchor())}const currentErrors=new Map;for(const node of this.renderRoot.querySelectorAll('[part="error"]')){const fieldKey=node.closest('[part~="field"]')?.dataset.key,key=node.dataset.key??fieldKey??"form",text=node.textContent?.trim()??"";text&¤tErrors.set(key,text)}if(!this.suppressNextErrorAnnouncement){const freshMessages=[];for(const[key,text]of currentErrors)this.visibleErrorSnapshot.get(key)!==text&&!freshMessages.includes(text)&&freshMessages.push(text);freshMessages.length>0&&this.errorAnnouncementSink?.announce(freshMessages.join(" "))}this.visibleErrorSnapshot=currentErrors,this.suppressNextErrorAnnouncement=!1}setFieldValue(key,val){this.effectiveDisabled||(this.hasInteracted=!0,this.value={...this.value,[key]:val},this.emit("lr-input",{value:this.effectiveValue}))}markTouched(key){this.hasInteracted=!0,this.syncValidityCustomStates(),!this.touchedFields.has(key)&&(this.touchedFields=new Set(this.touchedFields).add(key))}onTextInput(key,e){this.setFieldValue(key,e.target.value)}onNumberInput(key,e){const n=e.target.valueAsNumber;this.setFieldValue(key,Number.isNaN(n)?void 0:n)}onSelectChange(key,e){e.stopPropagation(),this.setFieldValue(key,e.target.value)}onBooleanSelectChange(key,e){e.stopPropagation();const value=e.target.value;if(value===""){if(this.effectiveDisabled)return;this.hasInteracted=!0;const next={...this.value};Reflect.deleteProperty(next,key),this.value=next,this.emit("lr-input",{value:this.effectiveValue});return}this.setFieldValue(key,value==="true")}renderControl(key,prop,fieldId,label,required,describedBy,errorMessage,effective){if(prop.type==="string"&&prop.enum&&prop.enum.length>0)return html`<lr-select
|
|
1
|
+
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{installFormControlLabelSupport}from"../../../internal/form-control-labels.js";installFormControlLabelSupport();import{nextId}from"../../../internal/a11y.js";import{AnchoredValidityController,resolveValidityAnchor,VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{syncValidityStates}from"../../../internal/custom-states.js";import{styles}from"./tool-param-form.styles.js";import"../../forms/select/select.class.js";import"../../forms/combobox/option.class.js";import{getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{attachInternalsSafely,getFormOwner,installCustomErrorProperty,isBarredFromValidation,setFormOwner}from"../../../internal/form-associated.js";import{installInvalidEventAlias}from"../../../internal/invalid-event-alias.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LYRA_DEFAULT_fieldMustBeBoolean,LYRA_DEFAULT_fieldMustBeInteger,LYRA_DEFAULT_fieldMustBeNumber,LYRA_DEFAULT_fieldMustBeOneOf,LYRA_DEFAULT_fieldMustBeString,LYRA_DEFAULT_fieldMustEqual,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_noData,LYRA_DEFAULT_schemaMustBeObject,LYRA_DEFAULT_schemaPropertiesMustBeFlat,LYRA_DEFAULT_toolParamBooleanFalse,LYRA_DEFAULT_toolParamBooleanTrue,LYRA_DEFAULT_toolParamBooleanUnset,LYRA_DEFAULT_toolParamMissingProperty,LYRA_DEFAULT_toolParamSchemaLimit,LYRA_DEFAULT_unsupportedFieldType,LYRA_DEFAULT_valueMustBeSerializable}from"../../../internal/default-strings.generated.js";const MAX_SCHEMA_FIELDS=100,MAX_ENUM_OPTIONS=500,MAX_VALUE_ENTRIES=1e4,MAX_VALUE_NODES=5e4,MAX_VALUE_DEPTH=16,OMIT_VALUE=Symbol("omit-tool-param-value");function isPlainRecord(value){try{const prototype=Object.getPrototypeOf(value);return prototype===null||Object.getPrototypeOf(prototype)===null}catch{return!1}}function snapshotValueEntry(value,budget,depth){if(value===null||typeof value!="object"&&typeof value!="function"||typeof value=="function")return value;if(depth>MAX_VALUE_DEPTH||budget.remaining<=0)return budget.truncated=!0,OMIT_VALUE;const existing=budget.seen.get(value);if(existing!==void 0)return existing;let isArray=!1;try{isArray=Array.isArray(value)}catch{return budget.invalid=!0,OMIT_VALUE}if(isArray){const output2=[];budget.seen.set(value,output2);let length=0;try{const descriptor=Object.getOwnPropertyDescriptor(value,"length");descriptor&&"value"in descriptor&&typeof descriptor.value=="number"&&Number.isSafeInteger(descriptor.value)&&descriptor.value>=0&&(descriptor.value>MAX_VALUE_ENTRIES&&(budget.truncated=!0),length=Math.min(descriptor.value,MAX_VALUE_ENTRIES))}catch{budget.invalid=!0}for(let index=0;index<length&&budget.remaining>0;index+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,String(index))}catch{budget.invalid=!0;continue}if(!descriptor)continue;if(!("value"in descriptor)){budget.invalid=!0;continue}budget.remaining-=1;const entry=snapshotValueEntry(descriptor.value,budget,depth+1);entry!==OMIT_VALUE&&output2.push(entry)}return budget.remaining<=0&&length>output2.length&&(budget.truncated=!0),Object.freeze(output2)}if(!isPlainRecord(value))return value;const output={};budget.seen.set(value,output);let descriptors;try{descriptors=Object.getOwnPropertyDescriptors(value)}catch{return budget.invalid=!0,OMIT_VALUE}let retained=0;for(const key of Reflect.ownKeys(descriptors)){const descriptor=descriptors[key];if(!descriptor?.enumerable)continue;if(retained>=MAX_VALUE_ENTRIES||budget.remaining<=0){budget.truncated=!0;break}if(!("value"in descriptor)){budget.invalid=!0;continue}retained+=1,budget.remaining-=1;const entry=snapshotValueEntry(descriptor.value,budget,depth+1);entry!==OMIT_VALUE&&Object.defineProperty(output,key,{value:entry,enumerable:!0,configurable:!1,writable:!1})}return Object.freeze(output)}function snapshotFormValue(value){if(value==null)return{value:Object.freeze({}),invalid:!1,truncated:!1};let isArray=!1;try{isArray=Array.isArray(value)}catch{return{value:Object.freeze({}),invalid:!0,truncated:!1}}if(typeof value!="object"||isArray||!isPlainRecord(value))return{value:Object.freeze({}),invalid:!0,truncated:!1};const budget={remaining:MAX_VALUE_NODES,seen:new WeakMap,invalid:!1,truncated:!1},snapshot=snapshotValueEntry(value,budget,0);return{value:snapshot===OMIT_VALUE?Object.freeze({}):snapshot,invalid:budget.invalid||snapshot===OMIT_VALUE,truncated:budget.truncated}}const EMPTY_SCHEMA=Object.freeze({type:"object",properties:Object.freeze({})});function snapshotSchemaStringArray(value){let isArray=!1;try{isArray=Array.isArray(value)}catch{return{isArray:!1,exceededLimit:!1}}if(!isArray)return{isArray:!1,exceededLimit:!1};let sourceLength=0;try{const descriptor=Object.getOwnPropertyDescriptor(value,"length");descriptor&&"value"in descriptor&&typeof descriptor.value=="number"&&Number.isSafeInteger(descriptor.value)&&descriptor.value>=0&&(sourceLength=descriptor.value)}catch{return{isArray:!0,value:Object.freeze([]),exceededLimit:!1}}const output=[];for(let index=0;index<Math.min(sourceLength,MAX_SCHEMA_FIELDS);index+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(value,String(index))}catch{continue}descriptor&&"value"in descriptor&&typeof descriptor.value=="string"&&output.push(descriptor.value)}return{isArray:!0,value:Object.freeze(output),exceededLimit:sourceLength>MAX_SCHEMA_FIELDS}}function snapshotSchema(value){if(value==null)return{schema:EMPTY_SCHEMA,shapeError:"",exceededLimits:!1};let isArray=!1;try{isArray=Array.isArray(value)}catch{return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1}}if(typeof value!="object"||isArray)return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1};let rootDescriptors;try{rootDescriptors=Object.getOwnPropertyDescriptors(value)}catch{return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1}}const typeDescriptor=rootDescriptors.type;if(!typeDescriptor||!("value"in typeDescriptor)||typeDescriptor.value!=="object")return{schema:EMPTY_SCHEMA,shapeError:"object",exceededLimits:!1};const propertiesDescriptor=rootDescriptors.properties,propertiesValue=propertiesDescriptor&&"value"in propertiesDescriptor?propertiesDescriptor.value:void 0;if(propertiesValue===null||typeof propertiesValue!="object"||!isPlainRecord(propertiesValue))return{schema:EMPTY_SCHEMA,shapeError:"properties",exceededLimits:!1};const properties=Object.create(null);let shapeError="",exceededLimits=!1,seenFields=0,propertyDescriptors;try{propertyDescriptors=Object.getOwnPropertyDescriptors(propertiesValue)}catch{return{schema:EMPTY_SCHEMA,shapeError:"properties",exceededLimits:!1}}for(const key of Reflect.ownKeys(propertyDescriptors)){const descriptor=propertyDescriptors[key];if(typeof key!="string"||!descriptor?.enumerable)continue;if(seenFields+=1,seenFields>MAX_SCHEMA_FIELDS){exceededLimits=!0;break}if(!("value"in descriptor)||descriptor.value===null||typeof descriptor.value!="object"||!isPlainRecord(descriptor.value)){shapeError="properties";continue}const propertySnapshot=snapshotFormValue(descriptor.value);if(propertySnapshot.invalid||propertySnapshot.truncated){shapeError="properties";continue}const property=propertySnapshot.value;let choices=property.enum;Array.isArray(choices)&&choices.length>MAX_ENUM_OPTIONS&&(exceededLimits=!0,choices=Object.freeze(choices.slice(0,MAX_ENUM_OPTIONS))),properties[key]=Object.freeze({...property,...choices===void 0?{}:{enum:choices}})}const requiredDescriptor=rootDescriptors.required;let required;if(requiredDescriptor&&"value"in requiredDescriptor){const requiredSnapshot=snapshotSchemaStringArray(requiredDescriptor.value);requiredSnapshot.isArray?(required=requiredSnapshot.value,requiredSnapshot.exceededLimit&&(exceededLimits=!0)):requiredDescriptor.enumerable&&(shapeError="properties")}else requiredDescriptor?.enumerable&&(shapeError="properties");return{schema:Object.freeze({type:"object",properties:Object.freeze(properties),...required===void 0?{}:{required}}),shapeError,exceededLimits}}function cloneFormValue(value,_ownerWindow){return snapshotFormValue(value).value}class LyraToolParamForm extends LyraElement{static{this.defaultStrings={...super.defaultStrings,fieldMustBeBoolean:LYRA_DEFAULT_fieldMustBeBoolean,fieldMustBeInteger:LYRA_DEFAULT_fieldMustBeInteger,fieldMustBeNumber:LYRA_DEFAULT_fieldMustBeNumber,fieldMustBeOneOf:LYRA_DEFAULT_fieldMustBeOneOf,fieldMustBeString:LYRA_DEFAULT_fieldMustBeString,fieldMustEqual:LYRA_DEFAULT_fieldMustEqual,fieldRequired:LYRA_DEFAULT_fieldRequired,noData:LYRA_DEFAULT_noData,schemaMustBeObject:LYRA_DEFAULT_schemaMustBeObject,schemaPropertiesMustBeFlat:LYRA_DEFAULT_schemaPropertiesMustBeFlat,toolParamBooleanFalse:LYRA_DEFAULT_toolParamBooleanFalse,toolParamBooleanTrue:LYRA_DEFAULT_toolParamBooleanTrue,toolParamBooleanUnset:LYRA_DEFAULT_toolParamBooleanUnset,toolParamMissingProperty:LYRA_DEFAULT_toolParamMissingProperty,toolParamSchemaLimit:LYRA_DEFAULT_toolParamSchemaLimit,unsupportedFieldType:LYRA_DEFAULT_unsupportedFieldType,valueMustBeSerializable:LYRA_DEFAULT_valueMustBeSerializable}}static{this.formAssociated=!0}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-validity-change","lr-input"])}static{this.properties={customError:{attribute:"custom-error",reflect:!0,noAccessor:!0},name:{reflect:!0,noAccessor:!0},schema:{attribute:!1,noAccessor:!0},value:{attribute:!1,noAccessor:!0},disabled:{type:Boolean,reflect:!0,noAccessor:!0}}}constructor(){super(),this._errors={},this._formError="",this.showFormError=!1,this.touchedFields=new Set,this.baseId=nextId("tool-param-form"),this._fieldsetDisabled=!1,this._name="",this._schema=EMPTY_SCHEMA,this.schemaInputShapeError="",this.schemaInputExceededLimits=!1,this._value=Object.freeze({}),this.valueInputInvalid=!1,this.valueInputTruncated=!1,this.defaultValueSnapshot=Object.freeze({}),this.defaultValueCaptured=!1,this._effectiveValue=Object.freeze({}),this._validityFlags={},this._disabled=!1,this.hasInteracted=!1,this.visibleErrorSnapshot=new Map,this.suppressNextErrorAnnouncement=!0,this.stopNestedControlEvent=e=>{e.stopPropagation()},this.onFieldFocus=()=>{this.emit("focus")},this.onFieldBlur=()=>{this.emit("blur")},this.internals=attachInternalsSafely(this),this.validityController=new AnchoredValidityController(this,this.internals,()=>this[VALIDITY_ANCHOR]()),installCustomErrorProperty(this,()=>this.validityController.customValidityMessage),installInvalidEventAlias(this,init=>this.emit("lr-invalid",null,init)),this.syncFormState()}get form(){return getFormOwner(this.internals)}set form(owner){setFormOwner(this,owner)}getForm(){return getFormOwner(this.internals)}get labels(){return this.internals.labels}get validity(){return this.internals.validity}get validationMessage(){return this.internals.validationMessage}get willValidate(){return this.internals.willValidate}[VALIDITY_ANCHOR](){const field=this.firstInvalidField();if(field){const input=field.querySelector("input.control");if(input)return input;for(const child of field.children){const anchor=resolveValidityAnchor(child);if(anchor)return anchor}}return this.firstMissingPropertyError()}firstInvalidField(){if(!this.renderRoot)return;const fields=Array.from(this.renderRoot.querySelectorAll('[part="field"]'));for(const key of Object.keys(this._errors)){const field=fields.find(candidate=>candidate.dataset.key===key);if(field)return field}}get missingRequiredKeys(){const properties=this.schemaProperties;return this.requiredKeys.filter(key=>!Object.prototype.hasOwnProperty.call(properties,key)&&!!this._errors[key])}firstMissingPropertyError(){if(!this.renderRoot)return;const errors=Array.from(this.renderRoot.querySelectorAll('[part="error"][data-missing-property]'));for(const key of Object.keys(this._errors)){const error=errors.find(candidate=>candidate.dataset.key===key);if(error)return error}}focusFirstControl(){if(!this.renderRoot)return;const controls=this.renderRoot.querySelectorAll("input.control, lr-select");for(const control of controls)if(!(control.disabled||control.getAttribute("aria-disabled")==="true")){control.focus();return}}click(){this.effectiveDisabled||this.focusFirstControl()}connectedCallback(){this.defaultValueCaptured||(this.defaultValueSnapshot=cloneFormValue(this._value,this.ownerDocument.defaultView),this.defaultValueCaptured=!0),super.connectedCallback(),this.errorAnnouncementSink?.element.ownerDocument!==this.ownerDocument&&(this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this})),this.hasUpdated&&(this.suppressNextErrorAnnouncement=!0,this.requestUpdate()),this.syncFormState()}disconnectedCallback(){super.disconnectedCallback(),this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=void 0,this.suppressNextErrorAnnouncement=!0}get effectiveValue(){return snapshotFormValue(this._effectiveValue).value}get schemaProperties(){return this._schema.properties}get requiredKeys(){return this._schema.required??Object.freeze([])}resolveEffectiveValue(){const props=this.schemaProperties,out={...this.value};for(const[key,prop]of Object.entries(props))!Object.prototype.hasOwnProperty.call(this.value,key)&&prop.default!==void 0&&Object.defineProperty(out,key,{configurable:!0,enumerable:!0,writable:!0,value:prop.default});return snapshotFormValue(out).value}get schema(){return this._schema}set schema(next){const old=this._schema,snapshot=snapshotSchema(next);this._schema=snapshot.schema,this.schemaInputShapeError=snapshot.shapeError,this.schemaInputExceededLimits=snapshot.exceededLimits,this.syncFormState(),this.requestUpdate("schema",old)}get value(){return this._value}set value(next){const old=this._value,snapshot=snapshotFormValue(next);this._value=snapshot.value,this.valueInputInvalid=snapshot.invalid,this.valueInputTruncated=snapshot.truncated,this.syncFormState(),this.requestUpdate("value",old)}get name(){return this._name}set name(next){const old=this._name;this._name=next??"",this._name?this.setAttribute("name",this._name):this.removeAttribute("name"),this.requestUpdate("name",old)}get disabled(){return this._disabled}set disabled(next){const old=this._disabled;this._disabled=!!next,this.toggleAttribute("disabled",this._disabled),this.applyValidity(),this.requestUpdate("disabled",old)}get effectiveDisabled(){return this.disabled||this._fieldsetDisabled}get errors(){return this.publicValidityErrors()}publicValidityErrors(){const errors={...this._errors};return this.willValidate&&(this.validityController.customValidityMessage||this._formError)&&(errors.base=this.validationMessage),Object.freeze(errors)}publishValiditySnapshot(){if(!this.isConnected)return;const valid=!this.willValidate||this.validity.valid,errors=valid?Object.freeze({}):this.publicValidityErrors(),key=JSON.stringify({valid,errors});key!==this.lastValidityKey&&(this.lastValidityKey=key,this.emit("lr-validity-change",Object.freeze({valid,errors})))}get formError(){return this._formError}computeValidation(effective){const props=this.schemaProperties,required=new Set(this.requiredKeys),out={},flags={},addError=(key,message)=>{Object.defineProperty(out,key,{configurable:!0,enumerable:!0,writable:!0,value:message})};for(const[key,prop]of Object.entries(props)){const type=prop?.type;if(type!=="string"&&type!=="number"&&type!=="integer"&&type!=="boolean"){addError(key,this.localize("unsupportedFieldType",void 0,{type:String(type)})),flags.customError=!0;continue}if(!(Object.prototype.hasOwnProperty.call(effective,key)&&effective[key]!==void 0)){required.has(key)&&(addError(key,this.localize("fieldRequired")),flags.valueMissing=!0);continue}const v=effective[key];if(type==="string"&&typeof v!="string"){addError(key,this.localize("fieldMustBeString")),flags.typeMismatch=!0;continue}if(type==="number"&&(typeof v!="number"||!Number.isFinite(v))){addError(key,this.localize("fieldMustBeNumber")),flags.typeMismatch=!0;continue}if(type==="integer"&&(typeof v!="number"||!Number.isFinite(v))){addError(key,this.localize("fieldMustBeInteger")),flags.typeMismatch=!0;continue}if(type==="integer"&&!Number.isInteger(v)){addError(key,this.localize("fieldMustBeInteger")),flags.stepMismatch=!0;continue}if(type==="boolean"&&typeof v!="boolean"){addError(key,this.localize("fieldMustBeBoolean")),flags.typeMismatch=!0;continue}if(type==="string"&&Array.isArray(prop.enum)&&!prop.enum.includes(v)){addError(key,this.localize("fieldMustBeOneOf",void 0,{values:getListFormat(this.effectiveLocale,{style:"long",type:"disjunction"}).format(prop.enum)})),flags.customError=!0;continue}prop.const!==void 0&&v!==prop.const&&(addError(key,this.localize("fieldMustEqual",void 0,{value:JSON.stringify(prop.const)})),flags.customError=!0)}for(const key of required)Object.prototype.hasOwnProperty.call(props,key)||(!Object.prototype.hasOwnProperty.call(effective,key)||effective[key]===void 0)&&(addError(key,this.localize("fieldRequired")),flags.valueMissing=!0);return{errors:out,flags}}checkValidity(){return this.syncFormState(),this.internals.checkValidity()}reportValidity(){this.hasInteracted=!0,this.syncFormState(),Object.keys(this._errors).length>0&&(this.touchedFields=new Set([...this.touchedFields,...Object.keys(this._errors)])),this._formError&&(this.showFormError=!0);const valid=this.internals.reportValidity();return!valid&&!this.firstInvalidField()&&this.missingRequiredKeys.length>0&&this.updateComplete.then(()=>{const error=this.firstMissingPropertyError();this.validityController.refreshAnchor(),error?.focus()}),valid}setCustomValidity(message){this.validityController.setCustomValidity(message??""),this.syncValidityCustomStates(),this.publishValiditySnapshot()}formResetCallback(){this.hasInteracted=!1,this.value=cloneFormValue(this.defaultValueSnapshot,this.ownerDocument.defaultView),this.touchedFields=new Set,this.showFormError=!1}formStateRestoreCallback(state2,_mode){let restored={};if(typeof state2=="string")try{const parsed=JSON.parse(state2);parsed!==null&&typeof parsed=="object"&&!Array.isArray(parsed)&&(restored=parsed)}catch{}this.value=restored}formDisabledCallback(disabled){this._fieldsetDisabled=disabled,this.applyValidity(),this.requestUpdate()}schemaShapeError(){return this.schemaInputShapeError==="object"?this.localize("schemaMustBeObject"):this.schemaInputShapeError==="properties"?this.localize("schemaPropertiesMustBeFlat"):this.schemaInputExceededLimits?this.localize("toolParamSchemaLimit",void 0,{fields:getNumberFormat(this.effectiveLocale).format(MAX_SCHEMA_FIELDS),options:getNumberFormat(this.effectiveLocale).format(MAX_ENUM_OPTIONS)}):""}serializeEffectiveValue(effective){const serialized=JSON.stringify(effective,(_key,value)=>{if(typeof value=="number"&&!Number.isFinite(value))throw new TypeError("Non-finite numbers are not JSON values.");return value});if(typeof serialized!="string")throw new TypeError("Value did not serialize to JSON.");return serialized}get barredFromValidation(){return isBarredFromValidation(this,this.internals)}syncInternals(formValue){this.internals.setFormValue(formValue,formValue),this.applyValidity()}applyValidity(){if(this.validityController){if(this.barredFromValidation||Object.keys(this._validityFlags).length===0)this.validityController.setValidity({});else{const firstMessage=Object.values(this._errors)[0]??this._formError;this.validityController.setValidity(this._validityFlags,firstMessage)}this.syncValidityCustomStates(),this.publishValiditySnapshot()}}syncValidityCustomStates(){syncValidityStates(this.internals,{required:this.requiredKeys.length>0,hasInteracted:this.hasInteracted,barred:this.barredFromValidation})}syncFormState(){let effective=Object.freeze({}),errors={},flags={},formError="",formValue=null;try{if(formError=this.schemaShapeError(),this.valueInputInvalid||this.valueInputTruncated)throw new TypeError("The value could not be retained within the public snapshot boundary.");effective=this.resolveEffectiveValue();const validation=this.computeValidation(effective);errors=validation.errors,flags=validation.flags,formValue=this.serializeEffectiveValue(effective)}catch{formError=this.localize("valueMustBeSerializable"),formValue=null}formError&&(flags.customError=!0,formValue=null),this._effectiveValue=effective,JSON.stringify(this._errors)!==JSON.stringify(errors)&&(this._errors=errors),this._formError=formError,this._validityFlags=flags,this.syncInternals(formValue)}updated(changed){if(super.updated(changed),this.publishValiditySnapshot(),changed.has("value")||changed.has("schema")||changed.has("_errors")||changed.has("_formError")){const nestedUpdates=Array.from(this.firstInvalidField()?.children??[]).filter(element=>typeof element[VALIDITY_ANCHOR]=="function").map(element=>element.updateComplete).filter(update=>update!==void 0);nestedUpdates.length>0&&Promise.all(nestedUpdates).then(()=>this.validityController.refreshAnchor())}const currentErrors=new Map;for(const node of this.renderRoot.querySelectorAll('[part="error"]')){const fieldKey=node.closest('[part~="field"]')?.dataset.key,key=node.dataset.key??fieldKey??"form",text=node.textContent?.trim()??"";text&¤tErrors.set(key,text)}if(!this.suppressNextErrorAnnouncement){const freshMessages=[];for(const[key,text]of currentErrors)this.visibleErrorSnapshot.get(key)!==text&&!freshMessages.includes(text)&&freshMessages.push(text);freshMessages.length>0&&this.errorAnnouncementSink?.announce(freshMessages.join(" "))}this.visibleErrorSnapshot=currentErrors,this.suppressNextErrorAnnouncement=!1}setFieldValue(key,val){this.effectiveDisabled||(this.hasInteracted=!0,this.value={...this.value,[key]:val},this.emit("lr-input",{value:this.effectiveValue}))}markTouched(key){this.hasInteracted=!0,this.syncValidityCustomStates(),!this.touchedFields.has(key)&&(this.touchedFields=new Set(this.touchedFields).add(key))}onTextInput(key,e){this.setFieldValue(key,e.target.value)}onNumberInput(key,e){const n=e.target.valueAsNumber;this.setFieldValue(key,Number.isNaN(n)?void 0:n)}onSelectChange(key,e){e.stopPropagation(),this.setFieldValue(key,e.target.value)}onBooleanSelectChange(key,e){e.stopPropagation();const value=e.target.value;if(value===""){if(this.effectiveDisabled)return;this.hasInteracted=!0;const next={...this.value};Reflect.deleteProperty(next,key),this.value=next,this.emit("lr-input",{value:this.effectiveValue});return}this.setFieldValue(key,value==="true")}renderControl(key,prop,fieldId,label,required,describedBy,errorMessage,effective){if(prop.type==="string"&&prop.enum&&prop.enum.length>0)return html`<lr-select
|
|
2
2
|
id=${fieldId}
|
|
3
3
|
.label=${label}
|
|
4
4
|
.hint=${prop.description??""}
|
|
@@ -322,7 +322,19 @@ export declare class LyraChart extends LyraElement<LyraChartEventMap> {
|
|
|
322
322
|
* indexes are ignored when state is applied or emitted.
|
|
323
323
|
*/
|
|
324
324
|
hiddenDatasets?: readonly number[];
|
|
325
|
-
/**
|
|
325
|
+
/**
|
|
326
|
+
* Accessible chart description, which REPLACES the generated summary rather than adding to it.
|
|
327
|
+
*
|
|
328
|
+
* Left unset, the component builds an sr-only per-series summary from the actual data. Setting
|
|
329
|
+
* this discards that summary entirely and substitutes your text -- a full override, which is the
|
|
330
|
+
* right tool when you can describe the chart better than a generic walk of the series can.
|
|
331
|
+
*
|
|
332
|
+
* It is the wrong tool for adding a caveat ("excludes returns", "sampled hourly") on top of the
|
|
333
|
+
* data summary: you would trade the whole summary for the caveat, and a consumer reasonably read
|
|
334
|
+
* the old one-line doc as additive and did exactly that. For a caveat, prefer visible text beside
|
|
335
|
+
* the chart -- a note only screen-reader users hear is worse for everyone than one everybody
|
|
336
|
+
* sees -- or fold the data into your own `description` text if you are overriding anyway.
|
|
337
|
+
*/
|
|
326
338
|
description: string | null;
|
|
327
339
|
/** Controls which cartesian grid axes are drawn. */
|
|
328
340
|
grid: LyraChartGrid;
|
|
@@ -2,7 +2,6 @@ export interface HistogramBucket {
|
|
|
2
2
|
label: string;
|
|
3
3
|
count: number;
|
|
4
4
|
}
|
|
5
|
-
export declare const MAX_HISTOGRAM_BINS = 1000;
|
|
6
5
|
/** Converts an untyped bucket count to a bounded, non-negative integer. */
|
|
7
6
|
export declare function normalizeHistogramBinCount(binCount: unknown): number;
|
|
8
7
|
/** Splits `values` into `binCount` equal-width buckets and counts membership.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteInterpolate,finiteRatio}from"../../../internal/numbers.js";const MAX_HISTOGRAM_BINS=1e3,LEFT_TO_RIGHT_ISOLATE="\u2066",POP_DIRECTIONAL_ISOLATE="\u2069";function normalizeHistogramBinCount(binCount){const numeric=typeof binCount=="number"?binCount:Number(binCount);return Number.isFinite(numeric)?Math.min(MAX_HISTOGRAM_BINS,Math.max(0,Math.floor(numeric))):0}function binValues(values,binCount,locale){const finite=values.filter(v=>Number.isFinite(v));if(finite.length===0)return[];const bins=normalizeHistogramBinCount(binCount);if(bins<=0)return[];let lo=finite[0],hi=finite[0];for(const v of finite)v<lo&&(lo=v),v>hi&&(hi=v);const constant=hi===lo,numberFormat=getNumberFormat(locale,{minimumFractionDigits:1,maximumFractionDigits:1});if(constant)return[{label:`${LEFT_TO_RIGHT_ISOLATE}${numberFormat.format(lo)}${POP_DIRECTIONAL_ISOLATE}`,count:finite.length}];const labelHi=hi,formatRange=numberFormat.formatRange?.bind(numberFormat),buckets=Array.from({length:bins},(_,i)=>{const bLo=finiteInterpolate(lo,labelHi,i/bins),bHi=finiteInterpolate(lo,labelHi,(i+1)/bins);return{label:`${LEFT_TO_RIGHT_ISOLATE}${formatRange?formatRange(bLo,bHi):`${numberFormat.format(bLo)}\u2013${numberFormat.format(bHi)}`}${POP_DIRECTIONAL_ISOLATE}`,count:0}});for(const v of finite){const index=Math.floor(finiteRatio(v,lo,hi)*bins);buckets[Math.min(bins-1,Math.max(0,index))].count++}return buckets}export{
|
|
1
|
+
import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteInterpolate,finiteRatio}from"../../../internal/numbers.js";const MAX_HISTOGRAM_BINS=1e3,LEFT_TO_RIGHT_ISOLATE="\u2066",POP_DIRECTIONAL_ISOLATE="\u2069";function normalizeHistogramBinCount(binCount){const numeric=typeof binCount=="number"?binCount:Number(binCount);return Number.isFinite(numeric)?Math.min(MAX_HISTOGRAM_BINS,Math.max(0,Math.floor(numeric))):0}function binValues(values,binCount,locale){const finite=values.filter(v=>Number.isFinite(v));if(finite.length===0)return[];const bins=normalizeHistogramBinCount(binCount);if(bins<=0)return[];let lo=finite[0],hi=finite[0];for(const v of finite)v<lo&&(lo=v),v>hi&&(hi=v);const constant=hi===lo,numberFormat=getNumberFormat(locale,{minimumFractionDigits:1,maximumFractionDigits:1});if(constant)return[{label:`${LEFT_TO_RIGHT_ISOLATE}${numberFormat.format(lo)}${POP_DIRECTIONAL_ISOLATE}`,count:finite.length}];const labelHi=hi,formatRange=numberFormat.formatRange?.bind(numberFormat),buckets=Array.from({length:bins},(_,i)=>{const bLo=finiteInterpolate(lo,labelHi,i/bins),bHi=finiteInterpolate(lo,labelHi,(i+1)/bins);return{label:`${LEFT_TO_RIGHT_ISOLATE}${formatRange?formatRange(bLo,bHi):`${numberFormat.format(bLo)}\u2013${numberFormat.format(bHi)}`}${POP_DIRECTIONAL_ISOLATE}`,count:0}});for(const v of finite){const index=Math.floor(finiteRatio(v,lo,hi)*bins);buckets[Math.min(bins-1,Math.max(0,index))].count++}return buckets}export{binValues,normalizeHistogramBinCount};
|
|
@@ -66,7 +66,8 @@ export interface LyraLiteChartEventMap {
|
|
|
66
66
|
* `layout="scroll"` (+ `barWidth`) gives every bar a fixed pixel width and
|
|
67
67
|
* lets the plot overflow the host horizontally (scrollable) instead of
|
|
68
68
|
* squeezing; `maxLabels` decimates which x-axis text labels render (bars
|
|
69
|
-
* always still render) once there are more categories than that
|
|
69
|
+
* always still render) once there are more categories than that, with
|
|
70
|
+
* `maxLabels="auto"` deriving the cap from the allocated plot width; and
|
|
70
71
|
* `barX` lets a consumer hand in its own per-category x-coordinate function
|
|
71
72
|
* — e.g. to pixel-align this chart's bars with a sibling `lr-heatmap`'s
|
|
72
73
|
* calendar columns — overriding the internal slot math for both bars and
|
|
@@ -78,7 +79,8 @@ export interface LyraLiteChartEventMap {
|
|
|
78
79
|
* template when unset; `roundedBars` draws bars as a rounded-top path
|
|
79
80
|
* instead of a square-cornered rect; `skipZero` omits a bar entirely (not
|
|
80
81
|
* just zero-height) for an exactly-`0` value; `valueAxisGutter`/`barGapRatio`
|
|
81
|
-
* override the internal `PAD_LEFT`/`BAR_GROUP_GAP` layout constants
|
|
82
|
+
* override the internal `PAD_LEFT`/`BAR_GROUP_GAP` layout constants, while
|
|
83
|
+
* `valueAxisGutter="auto"` sizes the gutter from the rendered tick strings; `scale`
|
|
82
84
|
* (`type="bar"` only) switches the bar-height mapping from the default
|
|
83
85
|
* linear `niceDomain` fraction to a `Math.sqrt(value / domainMax)`
|
|
84
86
|
* compression (mirroring `lr-heatmap`'s matrix-mode `sqrt` scale) so a
|
|
@@ -231,10 +233,12 @@ export declare class LyraLiteChart extends LyraElement<LyraLiteChartEventMap> {
|
|
|
231
233
|
* so an excessive requested width is reduced as needed to keep SVG and CSS geometry finite. */
|
|
232
234
|
barWidth: number;
|
|
233
235
|
/** Caps how many x-axis category labels render text once `this.labels.length` exceeds it,
|
|
234
|
-
* decimating roughly evenly while always keeping the first and last label.
|
|
235
|
-
*
|
|
236
|
+
* decimating roughly evenly while always keeping the first and last label. `'auto'` derives a
|
|
237
|
+
* deterministic cap from the resolved plot width and widest rendered category label using the
|
|
238
|
+
* same width estimate as label ellipsis. Bars themselves always render regardless — only the
|
|
239
|
+
* axis text is decimated. An explicit number is authoritative. Unset (the default) renders every
|
|
236
240
|
* label, unchanged from before this property existed. Works in either `layout` mode. */
|
|
237
|
-
maxLabels?: number;
|
|
241
|
+
maxLabels?: number | 'auto';
|
|
238
242
|
/** Overrides the x-origin `renderBars()`/the category labels would otherwise compute internally
|
|
239
243
|
* for a given category index, for `type="bar"` only (bars and their axis labels stay
|
|
240
244
|
* consistent with each other either way). Lets a consumer pixel-align this chart's bars with,
|
|
@@ -260,9 +264,14 @@ export declare class LyraLiteChart extends LyraElement<LyraLiteChartEventMap> {
|
|
|
260
264
|
* is exactly `0` — `null`/non-finite values are always skipped regardless of this flag. Default
|
|
261
265
|
* `false` preserves today's behavior of a zero-height but focusable/titled bar. */
|
|
262
266
|
skipZero: boolean;
|
|
263
|
-
/** Overrides the internal `PAD_LEFT` (36px) axis-gutter constant
|
|
264
|
-
*
|
|
265
|
-
|
|
267
|
+
/** Overrides the internal `PAD_LEFT` (36px) axis-gutter constant, or accepts `'auto'` to size the
|
|
268
|
+
* gutter from the exact formatted tick strings rendered in the current pass. Automatic sizing
|
|
269
|
+
* never shrinks below 36px. Fit layout bounds it to the smaller of 240px or 40% of the measured
|
|
270
|
+
* SVG width; scroll layout bounds it at 240px without feeding the explicitly-sized SVG's own
|
|
271
|
+
* width back into its gutter. An explicit numeric value is authoritative and retains the
|
|
272
|
+
* established 0..1,000,000px finite guard. The gutter is on the left in LTR and the right in
|
|
273
|
+
* RTL, keeping the y axis at logical start. Unset keeps the 36px default. */
|
|
274
|
+
valueAxisGutter?: number | 'auto';
|
|
266
275
|
/** Overrides the internal `BAR_GROUP_GAP` (0.2) fraction of a category slot left as a gap between
|
|
267
276
|
* categories. Unset (the default) keeps today's fixed 0.2. */
|
|
268
277
|
barGapRatio?: number;
|
|
@@ -457,6 +466,7 @@ export declare class LyraLiteChart extends LyraElement<LyraLiteChartEventMap> {
|
|
|
457
466
|
private emitPoint;
|
|
458
467
|
private emitNearestLinePoint;
|
|
459
468
|
private onPointKeyDown;
|
|
469
|
+
private formatValueAxisTick;
|
|
460
470
|
private renderGrid;
|
|
461
471
|
/**
|
|
462
472
|
* `slot` is the per-category width to lay bars out against — either the
|
|
@@ -468,10 +478,13 @@ export declare class LyraLiteChart extends LyraElement<LyraLiteChartEventMap> {
|
|
|
468
478
|
private renderBars;
|
|
469
479
|
private renderLines;
|
|
470
480
|
render(): TemplateResult;
|
|
481
|
+
private resolvedValueAxisGutter;
|
|
482
|
+
private automaticMaxLabels;
|
|
471
483
|
/** Indexes retained by `maxLabels`, distributed across the complete domain so the sample
|
|
472
484
|
* immediately before the forced final endpoint can never bunch against it. The generated mark
|
|
473
485
|
* sample caps the useful result at 1,000, so this selector must do the same rather than allocate
|
|
474
|
-
* an arbitrary consumer-supplied `maxLabels` count.
|
|
486
|
+
* an arbitrary consumer-supplied `maxLabels` count. In auto mode the resolved plot width and
|
|
487
|
+
* rendered source indexes supply a deterministic cap. `undefined` means every *sampled* label
|
|
475
488
|
* renders, preserving the default and non-finite-value behavior. */
|
|
476
489
|
private visibleLabelIndexes;
|
|
477
490
|
private displayCategoryLabel;
|