@cognivo/components 0.8.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/LICENSE +21 -0
- package/README.md +119 -0
- package/dist/ai.d.ts +102 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +181 -0
- package/dist/ai.js.map +1 -0
- package/dist/bias.d.ts +21 -0
- package/dist/bias.d.ts.map +1 -0
- package/dist/bias.js +15 -0
- package/dist/bias.js.map +1 -0
- package/dist/chunks/floating-DfsaYJnh.js +103 -0
- package/dist/chunks/floating-DfsaYJnh.js.map +1 -0
- package/dist/chunks/focus-trap-BdRNhSPD.js +53 -0
- package/dist/chunks/focus-trap-BdRNhSPD.js.map +1 -0
- package/dist/chunks/outside-click-CP1P1fK3.js +15 -0
- package/dist/chunks/outside-click-CP1P1fK3.js.map +1 -0
- package/dist/chunks/premium.css-9I4kHrsl.js +466 -0
- package/dist/chunks/premium.css-9I4kHrsl.js.map +1 -0
- package/dist/chunks/roving-index-BuO0tTba.js +31 -0
- package/dist/chunks/roving-index-BuO0tTba.js.map +1 -0
- package/dist/cognivo.min.js +33066 -0
- package/dist/cognivo.min.js.map +1 -0
- package/dist/components/ai-ab-test/ai-ab-test.d.ts +22 -0
- package/dist/components/ai-ab-test/ai-ab-test.d.ts.map +1 -0
- package/dist/components/ai-ab-test/ai-ab-test.js +173 -0
- package/dist/components/ai-ab-test/ai-ab-test.js.map +1 -0
- package/dist/components/ai-accessibility-report/ai-accessibility-report.d.ts +33 -0
- package/dist/components/ai-accessibility-report/ai-accessibility-report.d.ts.map +1 -0
- package/dist/components/ai-accessibility-report/ai-accessibility-report.js +380 -0
- package/dist/components/ai-accessibility-report/ai-accessibility-report.js.map +1 -0
- package/dist/components/ai-action-preview/ai-action-preview.d.ts +32 -0
- package/dist/components/ai-action-preview/ai-action-preview.d.ts.map +1 -0
- package/dist/components/ai-action-preview/ai-action-preview.js +295 -0
- package/dist/components/ai-action-preview/ai-action-preview.js.map +1 -0
- package/dist/components/ai-agent-card/ai-agent-card.d.ts +18 -0
- package/dist/components/ai-agent-card/ai-agent-card.d.ts.map +1 -0
- package/dist/components/ai-agent-card/ai-agent-card.js +267 -0
- package/dist/components/ai-agent-card/ai-agent-card.js.map +1 -0
- package/dist/components/ai-agent-steps/ai-agent-steps.d.ts +53 -0
- package/dist/components/ai-agent-steps/ai-agent-steps.d.ts.map +1 -0
- package/dist/components/ai-agent-steps/ai-agent-steps.js +297 -0
- package/dist/components/ai-agent-steps/ai-agent-steps.js.map +1 -0
- package/dist/components/ai-alert-card/ai-alert-card.d.ts +25 -0
- package/dist/components/ai-alert-card/ai-alert-card.d.ts.map +1 -0
- package/dist/components/ai-alert-card/ai-alert-card.js +235 -0
- package/dist/components/ai-alert-card/ai-alert-card.js.map +1 -0
- package/dist/components/ai-analytics-chart/ai-analytics-chart.d.ts +51 -0
- package/dist/components/ai-analytics-chart/ai-analytics-chart.d.ts.map +1 -0
- package/dist/components/ai-analytics-chart/ai-analytics-chart.js +334 -0
- package/dist/components/ai-analytics-chart/ai-analytics-chart.js.map +1 -0
- package/dist/components/ai-annotation/ai-annotation.d.ts +34 -0
- package/dist/components/ai-annotation/ai-annotation.d.ts.map +1 -0
- package/dist/components/ai-annotation/ai-annotation.js +254 -0
- package/dist/components/ai-annotation/ai-annotation.js.map +1 -0
- package/dist/components/ai-api-key-manager/ai-api-key-manager.d.ts +35 -0
- package/dist/components/ai-api-key-manager/ai-api-key-manager.d.ts.map +1 -0
- package/dist/components/ai-api-key-manager/ai-api-key-manager.js +443 -0
- package/dist/components/ai-api-key-manager/ai-api-key-manager.js.map +1 -0
- package/dist/components/ai-app-sidebar/ai-app-sidebar.d.ts +26 -0
- package/dist/components/ai-app-sidebar/ai-app-sidebar.d.ts.map +1 -0
- package/dist/components/ai-app-sidebar/ai-app-sidebar.js +206 -0
- package/dist/components/ai-app-sidebar/ai-app-sidebar.js.map +1 -0
- package/dist/components/ai-assistant-widget/ai-assistant-widget.d.ts +28 -0
- package/dist/components/ai-assistant-widget/ai-assistant-widget.d.ts.map +1 -0
- package/dist/components/ai-assistant-widget/ai-assistant-widget.js +335 -0
- package/dist/components/ai-assistant-widget/ai-assistant-widget.js.map +1 -0
- package/dist/components/ai-audio-player/ai-audio-player.d.ts +31 -0
- package/dist/components/ai-audio-player/ai-audio-player.d.ts.map +1 -0
- package/dist/components/ai-audio-player/ai-audio-player.js +274 -0
- package/dist/components/ai-audio-player/ai-audio-player.js.map +1 -0
- package/dist/components/ai-avatar/ai-avatar.d.ts +20 -0
- package/dist/components/ai-avatar/ai-avatar.d.ts.map +1 -0
- package/dist/components/ai-avatar/ai-avatar.js +77 -0
- package/dist/components/ai-avatar/ai-avatar.js.map +1 -0
- package/dist/components/ai-badge/ai-badge.d.ts +20 -0
- package/dist/components/ai-badge/ai-badge.d.ts.map +1 -0
- package/dist/components/ai-badge/ai-badge.js +69 -0
- package/dist/components/ai-badge/ai-badge.js.map +1 -0
- package/dist/components/ai-batch-progress/ai-batch-progress.d.ts +21 -0
- package/dist/components/ai-batch-progress/ai-batch-progress.d.ts.map +1 -0
- package/dist/components/ai-batch-progress/ai-batch-progress.js +334 -0
- package/dist/components/ai-batch-progress/ai-batch-progress.js.map +1 -0
- package/dist/components/ai-cache-indicator/ai-cache-indicator.d.ts +31 -0
- package/dist/components/ai-cache-indicator/ai-cache-indicator.d.ts.map +1 -0
- package/dist/components/ai-cache-indicator/ai-cache-indicator.js +314 -0
- package/dist/components/ai-cache-indicator/ai-cache-indicator.js.map +1 -0
- package/dist/components/ai-capture-flow/ai-capture-flow.d.ts +33 -0
- package/dist/components/ai-capture-flow/ai-capture-flow.d.ts.map +1 -0
- package/dist/components/ai-capture-flow/ai-capture-flow.js +336 -0
- package/dist/components/ai-capture-flow/ai-capture-flow.js.map +1 -0
- package/dist/components/ai-changelog/ai-changelog.d.ts +24 -0
- package/dist/components/ai-changelog/ai-changelog.d.ts.map +1 -0
- package/dist/components/ai-changelog/ai-changelog.js +292 -0
- package/dist/components/ai-changelog/ai-changelog.js.map +1 -0
- package/dist/components/ai-chart-summary/ai-chart-summary.d.ts +30 -0
- package/dist/components/ai-chart-summary/ai-chart-summary.d.ts.map +1 -0
- package/dist/components/ai-chart-summary/ai-chart-summary.js +269 -0
- package/dist/components/ai-chart-summary/ai-chart-summary.js.map +1 -0
- package/dist/components/ai-chat/ai-chat.d.ts +70 -0
- package/dist/components/ai-chat/ai-chat.d.ts.map +1 -0
- package/dist/components/ai-chat/ai-chat.js +707 -0
- package/dist/components/ai-chat/ai-chat.js.map +1 -0
- package/dist/components/ai-citation/ai-citation.d.ts +27 -0
- package/dist/components/ai-citation/ai-citation.d.ts.map +1 -0
- package/dist/components/ai-citation/ai-citation.js +277 -0
- package/dist/components/ai-citation/ai-citation.js.map +1 -0
- package/dist/components/ai-collaborative-editor/ai-collaborative-editor.d.ts +54 -0
- package/dist/components/ai-collaborative-editor/ai-collaborative-editor.d.ts.map +1 -0
- package/dist/components/ai-collaborative-editor/ai-collaborative-editor.js +387 -0
- package/dist/components/ai-collaborative-editor/ai-collaborative-editor.js.map +1 -0
- package/dist/components/ai-command-palette/ai-command-palette.d.ts +34 -0
- package/dist/components/ai-command-palette/ai-command-palette.d.ts.map +1 -0
- package/dist/components/ai-command-palette/ai-command-palette.js +119 -0
- package/dist/components/ai-command-palette/ai-command-palette.js.map +1 -0
- package/dist/components/ai-confidence-badge/ai-confidence-badge.d.ts +31 -0
- package/dist/components/ai-confidence-badge/ai-confidence-badge.d.ts.map +1 -0
- package/dist/components/ai-confidence-badge/ai-confidence-badge.js +200 -0
- package/dist/components/ai-confidence-badge/ai-confidence-badge.js.map +1 -0
- package/dist/components/ai-confidence-slider/ai-confidence-slider.d.ts +16 -0
- package/dist/components/ai-confidence-slider/ai-confidence-slider.d.ts.map +1 -0
- package/dist/components/ai-confidence-slider/ai-confidence-slider.js +212 -0
- package/dist/components/ai-confidence-slider/ai-confidence-slider.js.map +1 -0
- package/dist/components/ai-consent-manager/ai-consent-manager.d.ts +26 -0
- package/dist/components/ai-consent-manager/ai-consent-manager.d.ts.map +1 -0
- package/dist/components/ai-consent-manager/ai-consent-manager.js +169 -0
- package/dist/components/ai-consent-manager/ai-consent-manager.js.map +1 -0
- package/dist/components/ai-context-window/ai-context-window.d.ts +20 -0
- package/dist/components/ai-context-window/ai-context-window.d.ts.map +1 -0
- package/dist/components/ai-context-window/ai-context-window.js +201 -0
- package/dist/components/ai-context-window/ai-context-window.js.map +1 -0
- package/dist/components/ai-copy-button/ai-copy-button.d.ts +23 -0
- package/dist/components/ai-copy-button/ai-copy-button.d.ts.map +1 -0
- package/dist/components/ai-copy-button/ai-copy-button.js +193 -0
- package/dist/components/ai-copy-button/ai-copy-button.js.map +1 -0
- package/dist/components/ai-cost-dashboard/ai-cost-dashboard.d.ts +28 -0
- package/dist/components/ai-cost-dashboard/ai-cost-dashboard.d.ts.map +1 -0
- package/dist/components/ai-cost-dashboard/ai-cost-dashboard.js +328 -0
- package/dist/components/ai-cost-dashboard/ai-cost-dashboard.js.map +1 -0
- package/dist/components/ai-data-card/ai-data-card.d.ts +50 -0
- package/dist/components/ai-data-card/ai-data-card.d.ts.map +1 -0
- package/dist/components/ai-data-card/ai-data-card.js +358 -0
- package/dist/components/ai-data-card/ai-data-card.js.map +1 -0
- package/dist/components/ai-data-lineage/ai-data-lineage.d.ts +28 -0
- package/dist/components/ai-data-lineage/ai-data-lineage.d.ts.map +1 -0
- package/dist/components/ai-data-lineage/ai-data-lineage.js +200 -0
- package/dist/components/ai-data-lineage/ai-data-lineage.js.map +1 -0
- package/dist/components/ai-data-preview/ai-data-preview.d.ts +31 -0
- package/dist/components/ai-data-preview/ai-data-preview.d.ts.map +1 -0
- package/dist/components/ai-data-preview/ai-data-preview.js +415 -0
- package/dist/components/ai-data-preview/ai-data-preview.js.map +1 -0
- package/dist/components/ai-data-table/ai-data-table.d.ts +62 -0
- package/dist/components/ai-data-table/ai-data-table.d.ts.map +1 -0
- package/dist/components/ai-data-table/ai-data-table.js +388 -0
- package/dist/components/ai-data-table/ai-data-table.js.map +1 -0
- package/dist/components/ai-debug-console/ai-debug-console.d.ts +39 -0
- package/dist/components/ai-debug-console/ai-debug-console.d.ts.map +1 -0
- package/dist/components/ai-debug-console/ai-debug-console.js +517 -0
- package/dist/components/ai-debug-console/ai-debug-console.js.map +1 -0
- package/dist/components/ai-detection-canvas/ai-detection-canvas.d.ts +26 -0
- package/dist/components/ai-detection-canvas/ai-detection-canvas.d.ts.map +1 -0
- package/dist/components/ai-detection-canvas/ai-detection-canvas.js +233 -0
- package/dist/components/ai-detection-canvas/ai-detection-canvas.js.map +1 -0
- package/dist/components/ai-diff-panel/ai-diff-panel.d.ts +35 -0
- package/dist/components/ai-diff-panel/ai-diff-panel.d.ts.map +1 -0
- package/dist/components/ai-diff-panel/ai-diff-panel.js +374 -0
- package/dist/components/ai-diff-panel/ai-diff-panel.js.map +1 -0
- package/dist/components/ai-embedding-viz/ai-embedding-viz.d.ts +31 -0
- package/dist/components/ai-embedding-viz/ai-embedding-viz.d.ts.map +1 -0
- package/dist/components/ai-embedding-viz/ai-embedding-viz.js +256 -0
- package/dist/components/ai-embedding-viz/ai-embedding-viz.js.map +1 -0
- package/dist/components/ai-empty-state/ai-empty-state.d.ts +18 -0
- package/dist/components/ai-empty-state/ai-empty-state.d.ts.map +1 -0
- package/dist/components/ai-empty-state/ai-empty-state.js +58 -0
- package/dist/components/ai-empty-state/ai-empty-state.js.map +1 -0
- package/dist/components/ai-error-boundary/ai-error-boundary.d.ts +17 -0
- package/dist/components/ai-error-boundary/ai-error-boundary.d.ts.map +1 -0
- package/dist/components/ai-error-boundary/ai-error-boundary.js +212 -0
- package/dist/components/ai-error-boundary/ai-error-boundary.js.map +1 -0
- package/dist/components/ai-eval-scorecard/ai-eval-scorecard.d.ts +19 -0
- package/dist/components/ai-eval-scorecard/ai-eval-scorecard.d.ts.map +1 -0
- package/dist/components/ai-eval-scorecard/ai-eval-scorecard.js +199 -0
- package/dist/components/ai-eval-scorecard/ai-eval-scorecard.js.map +1 -0
- package/dist/components/ai-feature-flag/ai-feature-flag.d.ts +43 -0
- package/dist/components/ai-feature-flag/ai-feature-flag.d.ts.map +1 -0
- package/dist/components/ai-feature-flag/ai-feature-flag.js +457 -0
- package/dist/components/ai-feature-flag/ai-feature-flag.js.map +1 -0
- package/dist/components/ai-feedback/ai-feedback.d.ts +28 -0
- package/dist/components/ai-feedback/ai-feedback.d.ts.map +1 -0
- package/dist/components/ai-feedback/ai-feedback.js +478 -0
- package/dist/components/ai-feedback/ai-feedback.js.map +1 -0
- package/dist/components/ai-file-upload/ai-file-upload.d.ts +18 -0
- package/dist/components/ai-file-upload/ai-file-upload.d.ts.map +1 -0
- package/dist/components/ai-file-upload/ai-file-upload.js +70 -0
- package/dist/components/ai-file-upload/ai-file-upload.js.map +1 -0
- package/dist/components/ai-form-generator/ai-form-generator.d.ts +39 -0
- package/dist/components/ai-form-generator/ai-form-generator.d.ts.map +1 -0
- package/dist/components/ai-form-generator/ai-form-generator.js +225 -0
- package/dist/components/ai-form-generator/ai-form-generator.js.map +1 -0
- package/dist/components/ai-guardrail/ai-guardrail.d.ts +22 -0
- package/dist/components/ai-guardrail/ai-guardrail.d.ts.map +1 -0
- package/dist/components/ai-guardrail/ai-guardrail.js +229 -0
- package/dist/components/ai-guardrail/ai-guardrail.js.map +1 -0
- package/dist/components/ai-heatmap/ai-heatmap.d.ts +38 -0
- package/dist/components/ai-heatmap/ai-heatmap.d.ts.map +1 -0
- package/dist/components/ai-heatmap/ai-heatmap.js +250 -0
- package/dist/components/ai-heatmap/ai-heatmap.js.map +1 -0
- package/dist/components/ai-insight-card/ai-insight-card.d.ts +28 -0
- package/dist/components/ai-insight-card/ai-insight-card.d.ts.map +1 -0
- package/dist/components/ai-insight-card/ai-insight-card.js +319 -0
- package/dist/components/ai-insight-card/ai-insight-card.js.map +1 -0
- package/dist/components/ai-json-viewer/ai-json-viewer.d.ts +24 -0
- package/dist/components/ai-json-viewer/ai-json-viewer.d.ts.map +1 -0
- package/dist/components/ai-json-viewer/ai-json-viewer.js +173 -0
- package/dist/components/ai-json-viewer/ai-json-viewer.js.map +1 -0
- package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.d.ts +25 -0
- package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.d.ts.map +1 -0
- package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.js +240 -0
- package/dist/components/ai-keyboard-shortcuts/ai-keyboard-shortcuts.js.map +1 -0
- package/dist/components/ai-kpi-grid/ai-kpi-grid.d.ts +26 -0
- package/dist/components/ai-kpi-grid/ai-kpi-grid.d.ts.map +1 -0
- package/dist/components/ai-kpi-grid/ai-kpi-grid.js +180 -0
- package/dist/components/ai-kpi-grid/ai-kpi-grid.js.map +1 -0
- package/dist/components/ai-labeling-board/ai-labeling-board.d.ts +31 -0
- package/dist/components/ai-labeling-board/ai-labeling-board.d.ts.map +1 -0
- package/dist/components/ai-labeling-board/ai-labeling-board.js +393 -0
- package/dist/components/ai-labeling-board/ai-labeling-board.js.map +1 -0
- package/dist/components/ai-memory-panel/ai-memory-panel.d.ts +24 -0
- package/dist/components/ai-memory-panel/ai-memory-panel.d.ts.map +1 -0
- package/dist/components/ai-memory-panel/ai-memory-panel.js +238 -0
- package/dist/components/ai-memory-panel/ai-memory-panel.js.map +1 -0
- package/dist/components/ai-model-comparison/ai-model-comparison.d.ts +25 -0
- package/dist/components/ai-model-comparison/ai-model-comparison.d.ts.map +1 -0
- package/dist/components/ai-model-comparison/ai-model-comparison.js +321 -0
- package/dist/components/ai-model-comparison/ai-model-comparison.js.map +1 -0
- package/dist/components/ai-model-selector/ai-model-selector.d.ts +29 -0
- package/dist/components/ai-model-selector/ai-model-selector.d.ts.map +1 -0
- package/dist/components/ai-model-selector/ai-model-selector.js +200 -0
- package/dist/components/ai-model-selector/ai-model-selector.js.map +1 -0
- package/dist/components/ai-notification-center/ai-notification-center.d.ts +34 -0
- package/dist/components/ai-notification-center/ai-notification-center.d.ts.map +1 -0
- package/dist/components/ai-notification-center/ai-notification-center.js +334 -0
- package/dist/components/ai-notification-center/ai-notification-center.js.map +1 -0
- package/dist/components/ai-onboarding/ai-onboarding.d.ts +35 -0
- package/dist/components/ai-onboarding/ai-onboarding.d.ts.map +1 -0
- package/dist/components/ai-onboarding/ai-onboarding.js +375 -0
- package/dist/components/ai-onboarding/ai-onboarding.js.map +1 -0
- package/dist/components/ai-permission-gate/ai-permission-gate.d.ts +27 -0
- package/dist/components/ai-permission-gate/ai-permission-gate.d.ts.map +1 -0
- package/dist/components/ai-permission-gate/ai-permission-gate.js +193 -0
- package/dist/components/ai-permission-gate/ai-permission-gate.js.map +1 -0
- package/dist/components/ai-personalization-dash/ai-personalization-dash.d.ts +27 -0
- package/dist/components/ai-personalization-dash/ai-personalization-dash.d.ts.map +1 -0
- package/dist/components/ai-personalization-dash/ai-personalization-dash.js +181 -0
- package/dist/components/ai-personalization-dash/ai-personalization-dash.js.map +1 -0
- package/dist/components/ai-presence/ai-presence.d.ts +27 -0
- package/dist/components/ai-presence/ai-presence.d.ts.map +1 -0
- package/dist/components/ai-presence/ai-presence.js +261 -0
- package/dist/components/ai-presence/ai-presence.js.map +1 -0
- package/dist/components/ai-progress-steps/ai-progress-steps.d.ts +20 -0
- package/dist/components/ai-progress-steps/ai-progress-steps.d.ts.map +1 -0
- package/dist/components/ai-progress-steps/ai-progress-steps.js +201 -0
- package/dist/components/ai-progress-steps/ai-progress-steps.js.map +1 -0
- package/dist/components/ai-prompt-editor/ai-prompt-editor.d.ts +25 -0
- package/dist/components/ai-prompt-editor/ai-prompt-editor.d.ts.map +1 -0
- package/dist/components/ai-prompt-editor/ai-prompt-editor.js +294 -0
- package/dist/components/ai-prompt-editor/ai-prompt-editor.js.map +1 -0
- package/dist/components/ai-prompt-template/ai-prompt-template.d.ts +20 -0
- package/dist/components/ai-prompt-template/ai-prompt-template.d.ts.map +1 -0
- package/dist/components/ai-prompt-template/ai-prompt-template.js +288 -0
- package/dist/components/ai-prompt-template/ai-prompt-template.js.map +1 -0
- package/dist/components/ai-rag-panel/ai-rag-panel.d.ts +24 -0
- package/dist/components/ai-rag-panel/ai-rag-panel.d.ts.map +1 -0
- package/dist/components/ai-rag-panel/ai-rag-panel.js +226 -0
- package/dist/components/ai-rag-panel/ai-rag-panel.js.map +1 -0
- package/dist/components/ai-reasoning-tree/ai-reasoning-tree.d.ts +20 -0
- package/dist/components/ai-reasoning-tree/ai-reasoning-tree.d.ts.map +1 -0
- package/dist/components/ai-reasoning-tree/ai-reasoning-tree.js +180 -0
- package/dist/components/ai-reasoning-tree/ai-reasoning-tree.js.map +1 -0
- package/dist/components/ai-result-panel/ai-result-panel.d.ts +35 -0
- package/dist/components/ai-result-panel/ai-result-panel.d.ts.map +1 -0
- package/dist/components/ai-result-panel/ai-result-panel.js +412 -0
- package/dist/components/ai-result-panel/ai-result-panel.js.map +1 -0
- package/dist/components/ai-reveal-animation/ai-reveal-animation.d.ts +28 -0
- package/dist/components/ai-reveal-animation/ai-reveal-animation.d.ts.map +1 -0
- package/dist/components/ai-reveal-animation/ai-reveal-animation.js +146 -0
- package/dist/components/ai-reveal-animation/ai-reveal-animation.js.map +1 -0
- package/dist/components/ai-reward-signal/ai-reward-signal.d.ts +22 -0
- package/dist/components/ai-reward-signal/ai-reward-signal.d.ts.map +1 -0
- package/dist/components/ai-reward-signal/ai-reward-signal.js +231 -0
- package/dist/components/ai-reward-signal/ai-reward-signal.js.map +1 -0
- package/dist/components/ai-rich-message/ai-rich-message.d.ts +38 -0
- package/dist/components/ai-rich-message/ai-rich-message.d.ts.map +1 -0
- package/dist/components/ai-rich-message/ai-rich-message.js +285 -0
- package/dist/components/ai-rich-message/ai-rich-message.js.map +1 -0
- package/dist/components/ai-scenario-panel/ai-scenario-panel.d.ts +19 -0
- package/dist/components/ai-scenario-panel/ai-scenario-panel.d.ts.map +1 -0
- package/dist/components/ai-scenario-panel/ai-scenario-panel.js +182 -0
- package/dist/components/ai-scenario-panel/ai-scenario-panel.js.map +1 -0
- package/dist/components/ai-search/ai-search.d.ts +38 -0
- package/dist/components/ai-search/ai-search.d.ts.map +1 -0
- package/dist/components/ai-search/ai-search.js +397 -0
- package/dist/components/ai-search/ai-search.js.map +1 -0
- package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.d.ts +21 -0
- package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.d.ts.map +1 -0
- package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.js +185 -0
- package/dist/components/ai-segmentation-viewer/ai-segmentation-viewer.js.map +1 -0
- package/dist/components/ai-sidebar/ai-sidebar.d.ts +19 -0
- package/dist/components/ai-sidebar/ai-sidebar.d.ts.map +1 -0
- package/dist/components/ai-sidebar/ai-sidebar.js +59 -0
- package/dist/components/ai-sidebar/ai-sidebar.js.map +1 -0
- package/dist/components/ai-similarity-card/ai-similarity-card.d.ts +23 -0
- package/dist/components/ai-similarity-card/ai-similarity-card.d.ts.map +1 -0
- package/dist/components/ai-similarity-card/ai-similarity-card.js +224 -0
- package/dist/components/ai-similarity-card/ai-similarity-card.js.map +1 -0
- package/dist/components/ai-source-graph/ai-source-graph.d.ts +19 -0
- package/dist/components/ai-source-graph/ai-source-graph.d.ts.map +1 -0
- package/dist/components/ai-source-graph/ai-source-graph.js +226 -0
- package/dist/components/ai-source-graph/ai-source-graph.js.map +1 -0
- package/dist/components/ai-status-page/ai-status-page.d.ts +32 -0
- package/dist/components/ai-status-page/ai-status-page.d.ts.map +1 -0
- package/dist/components/ai-status-page/ai-status-page.js +304 -0
- package/dist/components/ai-status-page/ai-status-page.js.map +1 -0
- package/dist/components/ai-streaming-text/ai-streaming-text.d.ts +23 -0
- package/dist/components/ai-streaming-text/ai-streaming-text.d.ts.map +1 -0
- package/dist/components/ai-streaming-text/ai-streaming-text.js +80 -0
- package/dist/components/ai-streaming-text/ai-streaming-text.js.map +1 -0
- package/dist/components/ai-test-runner/ai-test-runner.d.ts +37 -0
- package/dist/components/ai-test-runner/ai-test-runner.d.ts.map +1 -0
- package/dist/components/ai-test-runner/ai-test-runner.js +448 -0
- package/dist/components/ai-test-runner/ai-test-runner.js.map +1 -0
- package/dist/components/ai-thinking/ai-thinking.d.ts +33 -0
- package/dist/components/ai-thinking/ai-thinking.d.ts.map +1 -0
- package/dist/components/ai-thinking/ai-thinking.js +371 -0
- package/dist/components/ai-thinking/ai-thinking.js.map +1 -0
- package/dist/components/ai-timeline/ai-timeline.d.ts +28 -0
- package/dist/components/ai-timeline/ai-timeline.d.ts.map +1 -0
- package/dist/components/ai-timeline/ai-timeline.js +378 -0
- package/dist/components/ai-timeline/ai-timeline.js.map +1 -0
- package/dist/components/ai-toast/ai-toast.d.ts +27 -0
- package/dist/components/ai-toast/ai-toast.d.ts.map +1 -0
- package/dist/components/ai-toast/ai-toast.js +68 -0
- package/dist/components/ai-toast/ai-toast.js.map +1 -0
- package/dist/components/ai-token-tracker/ai-token-tracker.d.ts +20 -0
- package/dist/components/ai-token-tracker/ai-token-tracker.d.ts.map +1 -0
- package/dist/components/ai-token-tracker/ai-token-tracker.js +235 -0
- package/dist/components/ai-token-tracker/ai-token-tracker.js.map +1 -0
- package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.d.ts +31 -0
- package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.d.ts.map +1 -0
- package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.js +225 -0
- package/dist/components/ai-tool-card-resolver/ai-tool-card-resolver.js.map +1 -0
- package/dist/components/ai-tool-indicator/ai-tool-indicator.d.ts +18 -0
- package/dist/components/ai-tool-indicator/ai-tool-indicator.d.ts.map +1 -0
- package/dist/components/ai-tool-indicator/ai-tool-indicator.js +186 -0
- package/dist/components/ai-tool-indicator/ai-tool-indicator.js.map +1 -0
- package/dist/components/ai-transform-slider/ai-transform-slider.d.ts +21 -0
- package/dist/components/ai-transform-slider/ai-transform-slider.d.ts.map +1 -0
- package/dist/components/ai-transform-slider/ai-transform-slider.js +270 -0
- package/dist/components/ai-transform-slider/ai-transform-slider.js.map +1 -0
- package/dist/components/ai-translation-panel/ai-translation-panel.d.ts +24 -0
- package/dist/components/ai-translation-panel/ai-translation-panel.d.ts.map +1 -0
- package/dist/components/ai-translation-panel/ai-translation-panel.js +347 -0
- package/dist/components/ai-translation-panel/ai-translation-panel.js.map +1 -0
- package/dist/components/ai-usage-meter/ai-usage-meter.d.ts +33 -0
- package/dist/components/ai-usage-meter/ai-usage-meter.d.ts.map +1 -0
- package/dist/components/ai-usage-meter/ai-usage-meter.js +286 -0
- package/dist/components/ai-usage-meter/ai-usage-meter.js.map +1 -0
- package/dist/components/ai-validation-checklist/ai-validation-checklist.d.ts +35 -0
- package/dist/components/ai-validation-checklist/ai-validation-checklist.d.ts.map +1 -0
- package/dist/components/ai-validation-checklist/ai-validation-checklist.js +360 -0
- package/dist/components/ai-validation-checklist/ai-validation-checklist.js.map +1 -0
- package/dist/components/ai-version-selector/ai-version-selector.d.ts +28 -0
- package/dist/components/ai-version-selector/ai-version-selector.d.ts.map +1 -0
- package/dist/components/ai-version-selector/ai-version-selector.js +326 -0
- package/dist/components/ai-version-selector/ai-version-selector.js.map +1 -0
- package/dist/components/ai-voice-panel/ai-voice-panel.d.ts +46 -0
- package/dist/components/ai-voice-panel/ai-voice-panel.d.ts.map +1 -0
- package/dist/components/ai-voice-panel/ai-voice-panel.js +363 -0
- package/dist/components/ai-voice-panel/ai-voice-panel.js.map +1 -0
- package/dist/components/ai-webhook-config/ai-webhook-config.d.ts +46 -0
- package/dist/components/ai-webhook-config/ai-webhook-config.d.ts.map +1 -0
- package/dist/components/ai-webhook-config/ai-webhook-config.js +358 -0
- package/dist/components/ai-webhook-config/ai-webhook-config.js.map +1 -0
- package/dist/components/ai-workflow-builder/ai-workflow-builder.d.ts +26 -0
- package/dist/components/ai-workflow-builder/ai-workflow-builder.d.ts.map +1 -0
- package/dist/components/ai-workflow-builder/ai-workflow-builder.js +179 -0
- package/dist/components/ai-workflow-builder/ai-workflow-builder.js.map +1 -0
- package/dist/components/bias-anchoring/bias-anchoring.d.ts +35 -0
- package/dist/components/bias-anchoring/bias-anchoring.d.ts.map +1 -0
- package/dist/components/bias-anchoring/bias-anchoring.js +107 -0
- package/dist/components/bias-anchoring/bias-anchoring.js.map +1 -0
- package/dist/components/bias-authority/bias-authority.d.ts +31 -0
- package/dist/components/bias-authority/bias-authority.d.ts.map +1 -0
- package/dist/components/bias-authority/bias-authority.js +97 -0
- package/dist/components/bias-authority/bias-authority.js.map +1 -0
- package/dist/components/bias-commitment/bias-commitment.d.ts +39 -0
- package/dist/components/bias-commitment/bias-commitment.d.ts.map +1 -0
- package/dist/components/bias-commitment/bias-commitment.js +115 -0
- package/dist/components/bias-commitment/bias-commitment.js.map +1 -0
- package/dist/components/bias-reciprocity/bias-reciprocity.d.ts +30 -0
- package/dist/components/bias-reciprocity/bias-reciprocity.d.ts.map +1 -0
- package/dist/components/bias-reciprocity/bias-reciprocity.js +86 -0
- package/dist/components/bias-reciprocity/bias-reciprocity.js.map +1 -0
- package/dist/components/bias-scarcity/bias-scarcity.d.ts +39 -0
- package/dist/components/bias-scarcity/bias-scarcity.d.ts.map +1 -0
- package/dist/components/bias-scarcity/bias-scarcity.js +120 -0
- package/dist/components/bias-scarcity/bias-scarcity.js.map +1 -0
- package/dist/components/bias-social-proof/bias-social-proof.d.ts +37 -0
- package/dist/components/bias-social-proof/bias-social-proof.d.ts.map +1 -0
- package/dist/components/bias-social-proof/bias-social-proof.js +112 -0
- package/dist/components/bias-social-proof/bias-social-proof.js.map +1 -0
- package/dist/components/cg-accordion/cg-accordion.d.ts +34 -0
- package/dist/components/cg-accordion/cg-accordion.d.ts.map +1 -0
- package/dist/components/cg-accordion/cg-accordion.js +219 -0
- package/dist/components/cg-accordion/cg-accordion.js.map +1 -0
- package/dist/components/cg-alert-dialog/cg-alert-dialog.d.ts +53 -0
- package/dist/components/cg-alert-dialog/cg-alert-dialog.d.ts.map +1 -0
- package/dist/components/cg-alert-dialog/cg-alert-dialog.js +220 -0
- package/dist/components/cg-alert-dialog/cg-alert-dialog.js.map +1 -0
- package/dist/components/cg-app-shell/cg-app-shell.d.ts +54 -0
- package/dist/components/cg-app-shell/cg-app-shell.d.ts.map +1 -0
- package/dist/components/cg-app-shell/cg-app-shell.js +135 -0
- package/dist/components/cg-app-shell/cg-app-shell.js.map +1 -0
- package/dist/components/cg-aspect-ratio/cg-aspect-ratio.d.ts +34 -0
- package/dist/components/cg-aspect-ratio/cg-aspect-ratio.d.ts.map +1 -0
- package/dist/components/cg-aspect-ratio/cg-aspect-ratio.js +47 -0
- package/dist/components/cg-aspect-ratio/cg-aspect-ratio.js.map +1 -0
- package/dist/components/cg-auth-shell/cg-auth-shell.d.ts +61 -0
- package/dist/components/cg-auth-shell/cg-auth-shell.d.ts.map +1 -0
- package/dist/components/cg-auth-shell/cg-auth-shell.js +163 -0
- package/dist/components/cg-auth-shell/cg-auth-shell.js.map +1 -0
- package/dist/components/cg-autocomplete/cg-autocomplete.d.ts +50 -0
- package/dist/components/cg-autocomplete/cg-autocomplete.d.ts.map +1 -0
- package/dist/components/cg-autocomplete/cg-autocomplete.js +279 -0
- package/dist/components/cg-autocomplete/cg-autocomplete.js.map +1 -0
- package/dist/components/cg-avatar/cg-avatar.d.ts +35 -0
- package/dist/components/cg-avatar/cg-avatar.d.ts.map +1 -0
- package/dist/components/cg-avatar/cg-avatar.js +171 -0
- package/dist/components/cg-avatar/cg-avatar.js.map +1 -0
- package/dist/components/cg-avatar-group/cg-avatar-group.d.ts +39 -0
- package/dist/components/cg-avatar-group/cg-avatar-group.d.ts.map +1 -0
- package/dist/components/cg-avatar-group/cg-avatar-group.js +218 -0
- package/dist/components/cg-avatar-group/cg-avatar-group.js.map +1 -0
- package/dist/components/cg-badge/cg-badge.d.ts +37 -0
- package/dist/components/cg-badge/cg-badge.d.ts.map +1 -0
- package/dist/components/cg-badge/cg-badge.js +125 -0
- package/dist/components/cg-badge/cg-badge.js.map +1 -0
- package/dist/components/cg-badge-group/cg-badge-group.d.ts +28 -0
- package/dist/components/cg-badge-group/cg-badge-group.d.ts.map +1 -0
- package/dist/components/cg-badge-group/cg-badge-group.js +78 -0
- package/dist/components/cg-badge-group/cg-badge-group.js.map +1 -0
- package/dist/components/cg-breadcrumbs/cg-breadcrumbs.d.ts +52 -0
- package/dist/components/cg-breadcrumbs/cg-breadcrumbs.d.ts.map +1 -0
- package/dist/components/cg-breadcrumbs/cg-breadcrumbs.js +286 -0
- package/dist/components/cg-breadcrumbs/cg-breadcrumbs.js.map +1 -0
- package/dist/components/cg-button/cg-button.d.ts +106 -0
- package/dist/components/cg-button/cg-button.d.ts.map +1 -0
- package/dist/components/cg-button/cg-button.js +355 -0
- package/dist/components/cg-button/cg-button.js.map +1 -0
- package/dist/components/cg-button-group/cg-button-group.d.ts +25 -0
- package/dist/components/cg-button-group/cg-button-group.d.ts.map +1 -0
- package/dist/components/cg-button-group/cg-button-group.js +89 -0
- package/dist/components/cg-button-group/cg-button-group.js.map +1 -0
- package/dist/components/cg-calendar/cg-calendar.d.ts +52 -0
- package/dist/components/cg-calendar/cg-calendar.d.ts.map +1 -0
- package/dist/components/cg-calendar/cg-calendar.js +346 -0
- package/dist/components/cg-calendar/cg-calendar.js.map +1 -0
- package/dist/components/cg-callout/cg-callout.d.ts +32 -0
- package/dist/components/cg-callout/cg-callout.d.ts.map +1 -0
- package/dist/components/cg-callout/cg-callout.js +197 -0
- package/dist/components/cg-callout/cg-callout.js.map +1 -0
- package/dist/components/cg-card/cg-card.d.ts +60 -0
- package/dist/components/cg-card/cg-card.d.ts.map +1 -0
- package/dist/components/cg-card/cg-card.js +207 -0
- package/dist/components/cg-card/cg-card.js.map +1 -0
- package/dist/components/cg-carousel/cg-carousel.d.ts +52 -0
- package/dist/components/cg-carousel/cg-carousel.d.ts.map +1 -0
- package/dist/components/cg-carousel/cg-carousel.js +262 -0
- package/dist/components/cg-carousel/cg-carousel.js.map +1 -0
- package/dist/components/cg-chart/cg-chart.d.ts +55 -0
- package/dist/components/cg-chart/cg-chart.d.ts.map +1 -0
- package/dist/components/cg-chart/cg-chart.js +381 -0
- package/dist/components/cg-chart/cg-chart.js.map +1 -0
- package/dist/components/cg-checkbox/cg-checkbox.d.ts +50 -0
- package/dist/components/cg-checkbox/cg-checkbox.d.ts.map +1 -0
- package/dist/components/cg-checkbox/cg-checkbox.js +294 -0
- package/dist/components/cg-checkbox/cg-checkbox.js.map +1 -0
- package/dist/components/cg-chip/cg-chip.d.ts +36 -0
- package/dist/components/cg-chip/cg-chip.d.ts.map +1 -0
- package/dist/components/cg-chip/cg-chip.js +256 -0
- package/dist/components/cg-chip/cg-chip.js.map +1 -0
- package/dist/components/cg-code-block/cg-code-block.d.ts +23 -0
- package/dist/components/cg-code-block/cg-code-block.d.ts.map +1 -0
- package/dist/components/cg-code-block/cg-code-block.js +327 -0
- package/dist/components/cg-code-block/cg-code-block.js.map +1 -0
- package/dist/components/cg-collapsible/cg-collapsible.d.ts +34 -0
- package/dist/components/cg-collapsible/cg-collapsible.d.ts.map +1 -0
- package/dist/components/cg-collapsible/cg-collapsible.js +160 -0
- package/dist/components/cg-collapsible/cg-collapsible.js.map +1 -0
- package/dist/components/cg-color-picker/cg-color-picker.d.ts +51 -0
- package/dist/components/cg-color-picker/cg-color-picker.d.ts.map +1 -0
- package/dist/components/cg-color-picker/cg-color-picker.js +492 -0
- package/dist/components/cg-color-picker/cg-color-picker.js.map +1 -0
- package/dist/components/cg-combobox/cg-combobox.d.ts +56 -0
- package/dist/components/cg-combobox/cg-combobox.d.ts.map +1 -0
- package/dist/components/cg-combobox/cg-combobox.js +374 -0
- package/dist/components/cg-combobox/cg-combobox.js.map +1 -0
- package/dist/components/cg-command/cg-command.d.ts +65 -0
- package/dist/components/cg-command/cg-command.d.ts.map +1 -0
- package/dist/components/cg-command/cg-command.js +339 -0
- package/dist/components/cg-command/cg-command.js.map +1 -0
- package/dist/components/cg-context-menu/cg-context-menu.d.ts +66 -0
- package/dist/components/cg-context-menu/cg-context-menu.d.ts.map +1 -0
- package/dist/components/cg-context-menu/cg-context-menu.js +165 -0
- package/dist/components/cg-context-menu/cg-context-menu.js.map +1 -0
- package/dist/components/cg-date-picker/cg-date-picker.d.ts +44 -0
- package/dist/components/cg-date-picker/cg-date-picker.d.ts.map +1 -0
- package/dist/components/cg-date-picker/cg-date-picker.js +240 -0
- package/dist/components/cg-date-picker/cg-date-picker.js.map +1 -0
- package/dist/components/cg-date-range-picker/cg-date-range-picker.d.ts +45 -0
- package/dist/components/cg-date-range-picker/cg-date-range-picker.d.ts.map +1 -0
- package/dist/components/cg-date-range-picker/cg-date-range-picker.js +266 -0
- package/dist/components/cg-date-range-picker/cg-date-range-picker.js.map +1 -0
- package/dist/components/cg-date-time-picker/cg-date-time-picker.d.ts +66 -0
- package/dist/components/cg-date-time-picker/cg-date-time-picker.d.ts.map +1 -0
- package/dist/components/cg-date-time-picker/cg-date-time-picker.js +521 -0
- package/dist/components/cg-date-time-picker/cg-date-time-picker.js.map +1 -0
- package/dist/components/cg-definition-list/cg-definition-list.d.ts +99 -0
- package/dist/components/cg-definition-list/cg-definition-list.d.ts.map +1 -0
- package/dist/components/cg-definition-list/cg-definition-list.js +332 -0
- package/dist/components/cg-definition-list/cg-definition-list.js.map +1 -0
- package/dist/components/cg-draggable/cg-draggable.d.ts +53 -0
- package/dist/components/cg-draggable/cg-draggable.d.ts.map +1 -0
- package/dist/components/cg-draggable/cg-draggable.js +136 -0
- package/dist/components/cg-draggable/cg-draggable.js.map +1 -0
- package/dist/components/cg-drawer/cg-drawer.d.ts +57 -0
- package/dist/components/cg-drawer/cg-drawer.d.ts.map +1 -0
- package/dist/components/cg-drawer/cg-drawer.js +421 -0
- package/dist/components/cg-drawer/cg-drawer.js.map +1 -0
- package/dist/components/cg-dropdown/cg-dropdown.d.ts +63 -0
- package/dist/components/cg-dropdown/cg-dropdown.d.ts.map +1 -0
- package/dist/components/cg-dropdown/cg-dropdown.js +232 -0
- package/dist/components/cg-dropdown/cg-dropdown.js.map +1 -0
- package/dist/components/cg-droppable/cg-droppable.d.ts +57 -0
- package/dist/components/cg-droppable/cg-droppable.d.ts.map +1 -0
- package/dist/components/cg-droppable/cg-droppable.js +114 -0
- package/dist/components/cg-droppable/cg-droppable.js.map +1 -0
- package/dist/components/cg-empty-state/cg-empty-state.d.ts +54 -0
- package/dist/components/cg-empty-state/cg-empty-state.d.ts.map +1 -0
- package/dist/components/cg-empty-state/cg-empty-state.js +201 -0
- package/dist/components/cg-empty-state/cg-empty-state.js.map +1 -0
- package/dist/components/cg-file-input/cg-file-input.d.ts +101 -0
- package/dist/components/cg-file-input/cg-file-input.d.ts.map +1 -0
- package/dist/components/cg-file-input/cg-file-input.js +684 -0
- package/dist/components/cg-file-input/cg-file-input.js.map +1 -0
- package/dist/components/cg-filter-bar/cg-filter-bar.d.ts +50 -0
- package/dist/components/cg-filter-bar/cg-filter-bar.d.ts.map +1 -0
- package/dist/components/cg-filter-bar/cg-filter-bar.js +115 -0
- package/dist/components/cg-filter-bar/cg-filter-bar.js.map +1 -0
- package/dist/components/cg-filter-chip/cg-filter-chip.d.ts +55 -0
- package/dist/components/cg-filter-chip/cg-filter-chip.d.ts.map +1 -0
- package/dist/components/cg-filter-chip/cg-filter-chip.js +213 -0
- package/dist/components/cg-filter-chip/cg-filter-chip.js.map +1 -0
- package/dist/components/cg-focus-scope/cg-focus-scope.d.ts +38 -0
- package/dist/components/cg-focus-scope/cg-focus-scope.d.ts.map +1 -0
- package/dist/components/cg-focus-scope/cg-focus-scope.js +47 -0
- package/dist/components/cg-focus-scope/cg-focus-scope.js.map +1 -0
- package/dist/components/cg-follow-up/cg-follow-up.d.ts +32 -0
- package/dist/components/cg-follow-up/cg-follow-up.d.ts.map +1 -0
- package/dist/components/cg-follow-up/cg-follow-up.js +233 -0
- package/dist/components/cg-follow-up/cg-follow-up.js.map +1 -0
- package/dist/components/cg-form/cg-form.d.ts +32 -0
- package/dist/components/cg-form/cg-form.d.ts.map +1 -0
- package/dist/components/cg-form/cg-form.js +109 -0
- package/dist/components/cg-form/cg-form.js.map +1 -0
- package/dist/components/cg-hover-card/cg-hover-card.d.ts +49 -0
- package/dist/components/cg-hover-card/cg-hover-card.d.ts.map +1 -0
- package/dist/components/cg-hover-card/cg-hover-card.js +149 -0
- package/dist/components/cg-hover-card/cg-hover-card.js.map +1 -0
- package/dist/components/cg-icon/cg-icon.d.ts +28 -0
- package/dist/components/cg-icon/cg-icon.d.ts.map +1 -0
- package/dist/components/cg-icon/cg-icon.js +339 -0
- package/dist/components/cg-icon/cg-icon.js.map +1 -0
- package/dist/components/cg-icon/solar-icons.d.ts +12 -0
- package/dist/components/cg-icon/solar-icons.d.ts.map +1 -0
- package/dist/components/cg-image/cg-image.d.ts +31 -0
- package/dist/components/cg-image/cg-image.d.ts.map +1 -0
- package/dist/components/cg-image/cg-image.js +168 -0
- package/dist/components/cg-image/cg-image.js.map +1 -0
- package/dist/components/cg-image-block/cg-image-block.d.ts +36 -0
- package/dist/components/cg-image-block/cg-image-block.d.ts.map +1 -0
- package/dist/components/cg-image-block/cg-image-block.js +214 -0
- package/dist/components/cg-image-block/cg-image-block.js.map +1 -0
- package/dist/components/cg-image-gallery/cg-image-gallery.d.ts +34 -0
- package/dist/components/cg-image-gallery/cg-image-gallery.d.ts.map +1 -0
- package/dist/components/cg-image-gallery/cg-image-gallery.js +158 -0
- package/dist/components/cg-image-gallery/cg-image-gallery.js.map +1 -0
- package/dist/components/cg-input/cg-input.d.ts +65 -0
- package/dist/components/cg-input/cg-input.d.ts.map +1 -0
- package/dist/components/cg-input/cg-input.js +425 -0
- package/dist/components/cg-input/cg-input.js.map +1 -0
- package/dist/components/cg-kanban/cg-kanban.d.ts +44 -0
- package/dist/components/cg-kanban/cg-kanban.d.ts.map +1 -0
- package/dist/components/cg-kanban/cg-kanban.js +86 -0
- package/dist/components/cg-kanban/cg-kanban.js.map +1 -0
- package/dist/components/cg-kanban-column/cg-kanban-column.d.ts +58 -0
- package/dist/components/cg-kanban-column/cg-kanban-column.d.ts.map +1 -0
- package/dist/components/cg-kanban-column/cg-kanban-column.js +144 -0
- package/dist/components/cg-kanban-column/cg-kanban-column.js.map +1 -0
- package/dist/components/cg-kbd/cg-kbd.d.ts +27 -0
- package/dist/components/cg-kbd/cg-kbd.d.ts.map +1 -0
- package/dist/components/cg-kbd/cg-kbd.js +91 -0
- package/dist/components/cg-kbd/cg-kbd.js.map +1 -0
- package/dist/components/cg-label/cg-label.d.ts +26 -0
- package/dist/components/cg-label/cg-label.d.ts.map +1 -0
- package/dist/components/cg-label/cg-label.js +89 -0
- package/dist/components/cg-label/cg-label.js.map +1 -0
- package/dist/components/cg-link/cg-link.d.ts +27 -0
- package/dist/components/cg-link/cg-link.d.ts.map +1 -0
- package/dist/components/cg-link/cg-link.js +152 -0
- package/dist/components/cg-link/cg-link.js.map +1 -0
- package/dist/components/cg-list/cg-list.d.ts +37 -0
- package/dist/components/cg-list/cg-list.d.ts.map +1 -0
- package/dist/components/cg-list/cg-list.js +314 -0
- package/dist/components/cg-list/cg-list.js.map +1 -0
- package/dist/components/cg-listbox/cg-listbox.d.ts +38 -0
- package/dist/components/cg-listbox/cg-listbox.d.ts.map +1 -0
- package/dist/components/cg-listbox/cg-listbox.js +258 -0
- package/dist/components/cg-listbox/cg-listbox.js.map +1 -0
- package/dist/components/cg-markdown/cg-markdown.d.ts +41 -0
- package/dist/components/cg-markdown/cg-markdown.d.ts.map +1 -0
- package/dist/components/cg-markdown/cg-markdown.js +542 -0
- package/dist/components/cg-markdown/cg-markdown.js.map +1 -0
- package/dist/components/cg-menubar/cg-menubar.d.ts +64 -0
- package/dist/components/cg-menubar/cg-menubar.d.ts.map +1 -0
- package/dist/components/cg-menubar/cg-menubar.js +338 -0
- package/dist/components/cg-menubar/cg-menubar.js.map +1 -0
- package/dist/components/cg-meter/cg-meter.d.ts +36 -0
- package/dist/components/cg-meter/cg-meter.d.ts.map +1 -0
- package/dist/components/cg-meter/cg-meter.js +204 -0
- package/dist/components/cg-meter/cg-meter.js.map +1 -0
- package/dist/components/cg-metric-card/cg-metric-card.d.ts +51 -0
- package/dist/components/cg-metric-card/cg-metric-card.d.ts.map +1 -0
- package/dist/components/cg-metric-card/cg-metric-card.js +312 -0
- package/dist/components/cg-metric-card/cg-metric-card.js.map +1 -0
- package/dist/components/cg-mfa-prompt/cg-mfa-prompt.d.ts +77 -0
- package/dist/components/cg-mfa-prompt/cg-mfa-prompt.d.ts.map +1 -0
- package/dist/components/cg-mfa-prompt/cg-mfa-prompt.js +245 -0
- package/dist/components/cg-mfa-prompt/cg-mfa-prompt.js.map +1 -0
- package/dist/components/cg-modal/cg-modal.d.ts +55 -0
- package/dist/components/cg-modal/cg-modal.d.ts.map +1 -0
- package/dist/components/cg-modal/cg-modal.js +409 -0
- package/dist/components/cg-modal/cg-modal.js.map +1 -0
- package/dist/components/cg-navbar/cg-navbar.d.ts +87 -0
- package/dist/components/cg-navbar/cg-navbar.d.ts.map +1 -0
- package/dist/components/cg-navbar/cg-navbar.js +473 -0
- package/dist/components/cg-navbar/cg-navbar.js.map +1 -0
- package/dist/components/cg-navigation-menu/cg-navigation-menu.d.ts +46 -0
- package/dist/components/cg-navigation-menu/cg-navigation-menu.d.ts.map +1 -0
- package/dist/components/cg-navigation-menu/cg-navigation-menu.js +257 -0
- package/dist/components/cg-navigation-menu/cg-navigation-menu.js.map +1 -0
- package/dist/components/cg-number-input/cg-number-input.d.ts +47 -0
- package/dist/components/cg-number-input/cg-number-input.d.ts.map +1 -0
- package/dist/components/cg-number-input/cg-number-input.js +266 -0
- package/dist/components/cg-number-input/cg-number-input.js.map +1 -0
- package/dist/components/cg-otp-input/cg-otp-input.d.ts +44 -0
- package/dist/components/cg-otp-input/cg-otp-input.d.ts.map +1 -0
- package/dist/components/cg-otp-input/cg-otp-input.js +188 -0
- package/dist/components/cg-otp-input/cg-otp-input.js.map +1 -0
- package/dist/components/cg-pagination/cg-pagination.d.ts +34 -0
- package/dist/components/cg-pagination/cg-pagination.d.ts.map +1 -0
- package/dist/components/cg-pagination/cg-pagination.js +232 -0
- package/dist/components/cg-pagination/cg-pagination.js.map +1 -0
- package/dist/components/cg-password-input/cg-password-input.d.ts +43 -0
- package/dist/components/cg-password-input/cg-password-input.d.ts.map +1 -0
- package/dist/components/cg-password-input/cg-password-input.js +261 -0
- package/dist/components/cg-password-input/cg-password-input.js.map +1 -0
- package/dist/components/cg-phone-input/cg-phone-input.d.ts +93 -0
- package/dist/components/cg-phone-input/cg-phone-input.d.ts.map +1 -0
- package/dist/components/cg-phone-input/cg-phone-input.js +972 -0
- package/dist/components/cg-phone-input/cg-phone-input.js.map +1 -0
- package/dist/components/cg-phone-input/countries.d.ts +38 -0
- package/dist/components/cg-phone-input/countries.d.ts.map +1 -0
- package/dist/components/cg-popover/cg-popover.d.ts +53 -0
- package/dist/components/cg-popover/cg-popover.d.ts.map +1 -0
- package/dist/components/cg-popover/cg-popover.js +215 -0
- package/dist/components/cg-popover/cg-popover.js.map +1 -0
- package/dist/components/cg-portal/cg-portal.d.ts +73 -0
- package/dist/components/cg-portal/cg-portal.d.ts.map +1 -0
- package/dist/components/cg-portal/cg-portal.js +80 -0
- package/dist/components/cg-portal/cg-portal.js.map +1 -0
- package/dist/components/cg-progress-bar/cg-progress-bar.d.ts +51 -0
- package/dist/components/cg-progress-bar/cg-progress-bar.d.ts.map +1 -0
- package/dist/components/cg-progress-bar/cg-progress-bar.js +267 -0
- package/dist/components/cg-progress-bar/cg-progress-bar.js.map +1 -0
- package/dist/components/cg-radio/cg-radio.d.ts +43 -0
- package/dist/components/cg-radio/cg-radio.d.ts.map +1 -0
- package/dist/components/cg-radio/cg-radio.js +268 -0
- package/dist/components/cg-radio/cg-radio.js.map +1 -0
- package/dist/components/cg-radio-group/cg-radio-group.d.ts +49 -0
- package/dist/components/cg-radio-group/cg-radio-group.d.ts.map +1 -0
- package/dist/components/cg-radio-group/cg-radio-group.js +142 -0
- package/dist/components/cg-radio-group/cg-radio-group.js.map +1 -0
- package/dist/components/cg-rating/cg-rating.d.ts +41 -0
- package/dist/components/cg-rating/cg-rating.d.ts.map +1 -0
- package/dist/components/cg-rating/cg-rating.js +201 -0
- package/dist/components/cg-rating/cg-rating.js.map +1 -0
- package/dist/components/cg-resizable/cg-resizable.d.ts +33 -0
- package/dist/components/cg-resizable/cg-resizable.d.ts.map +1 -0
- package/dist/components/cg-resizable/cg-resizable.js +236 -0
- package/dist/components/cg-resizable/cg-resizable.js.map +1 -0
- package/dist/components/cg-scroll-area/cg-scroll-area.d.ts +27 -0
- package/dist/components/cg-scroll-area/cg-scroll-area.d.ts.map +1 -0
- package/dist/components/cg-scroll-area/cg-scroll-area.js +111 -0
- package/dist/components/cg-scroll-area/cg-scroll-area.js.map +1 -0
- package/dist/components/cg-search-input/cg-search-input.d.ts +62 -0
- package/dist/components/cg-search-input/cg-search-input.d.ts.map +1 -0
- package/dist/components/cg-search-input/cg-search-input.js +106 -0
- package/dist/components/cg-search-input/cg-search-input.js.map +1 -0
- package/dist/components/cg-segmented-control/cg-segmented-control.d.ts +52 -0
- package/dist/components/cg-segmented-control/cg-segmented-control.d.ts.map +1 -0
- package/dist/components/cg-segmented-control/cg-segmented-control.js +182 -0
- package/dist/components/cg-segmented-control/cg-segmented-control.js.map +1 -0
- package/dist/components/cg-select/cg-select.d.ts +67 -0
- package/dist/components/cg-select/cg-select.d.ts.map +1 -0
- package/dist/components/cg-select/cg-select.js +302 -0
- package/dist/components/cg-select/cg-select.js.map +1 -0
- package/dist/components/cg-separator/cg-separator.d.ts +25 -0
- package/dist/components/cg-separator/cg-separator.d.ts.map +1 -0
- package/dist/components/cg-separator/cg-separator.js +105 -0
- package/dist/components/cg-separator/cg-separator.js.map +1 -0
- package/dist/components/cg-sheet/cg-sheet.d.ts +39 -0
- package/dist/components/cg-sheet/cg-sheet.d.ts.map +1 -0
- package/dist/components/cg-sheet/cg-sheet.js +211 -0
- package/dist/components/cg-sheet/cg-sheet.js.map +1 -0
- package/dist/components/cg-sidebar/cg-sidebar.d.ts +56 -0
- package/dist/components/cg-sidebar/cg-sidebar.d.ts.map +1 -0
- package/dist/components/cg-sidebar/cg-sidebar.js +266 -0
- package/dist/components/cg-sidebar/cg-sidebar.js.map +1 -0
- package/dist/components/cg-skeleton/cg-skeleton.d.ts +31 -0
- package/dist/components/cg-skeleton/cg-skeleton.d.ts.map +1 -0
- package/dist/components/cg-skeleton/cg-skeleton.js +136 -0
- package/dist/components/cg-skeleton/cg-skeleton.js.map +1 -0
- package/dist/components/cg-slider/cg-slider.d.ts +51 -0
- package/dist/components/cg-slider/cg-slider.d.ts.map +1 -0
- package/dist/components/cg-slider/cg-slider.js +375 -0
- package/dist/components/cg-slider/cg-slider.js.map +1 -0
- package/dist/components/cg-sortable/cg-sortable.d.ts +72 -0
- package/dist/components/cg-sortable/cg-sortable.d.ts.map +1 -0
- package/dist/components/cg-sortable/cg-sortable.js +177 -0
- package/dist/components/cg-sortable/cg-sortable.js.map +1 -0
- package/dist/components/cg-spinner/cg-spinner.d.ts +28 -0
- package/dist/components/cg-spinner/cg-spinner.d.ts.map +1 -0
- package/dist/components/cg-spinner/cg-spinner.js +119 -0
- package/dist/components/cg-spinner/cg-spinner.js.map +1 -0
- package/dist/components/cg-split-button/cg-split-button.d.ts +66 -0
- package/dist/components/cg-split-button/cg-split-button.d.ts.map +1 -0
- package/dist/components/cg-split-button/cg-split-button.js +330 -0
- package/dist/components/cg-split-button/cg-split-button.js.map +1 -0
- package/dist/components/cg-stack/cg-stack.d.ts +25 -0
- package/dist/components/cg-stack/cg-stack.d.ts.map +1 -0
- package/dist/components/cg-stack/cg-stack.js +85 -0
- package/dist/components/cg-stack/cg-stack.js.map +1 -0
- package/dist/components/cg-steps/cg-steps.d.ts +37 -0
- package/dist/components/cg-steps/cg-steps.d.ts.map +1 -0
- package/dist/components/cg-steps/cg-steps.js +251 -0
- package/dist/components/cg-steps/cg-steps.js.map +1 -0
- package/dist/components/cg-switch/cg-switch.d.ts +38 -0
- package/dist/components/cg-switch/cg-switch.d.ts.map +1 -0
- package/dist/components/cg-switch/cg-switch.js +210 -0
- package/dist/components/cg-switch/cg-switch.js.map +1 -0
- package/dist/components/cg-table/cg-table.d.ts +67 -0
- package/dist/components/cg-table/cg-table.d.ts.map +1 -0
- package/dist/components/cg-table/cg-table.js +395 -0
- package/dist/components/cg-table/cg-table.js.map +1 -0
- package/dist/components/cg-tabs/cg-tabs.d.ts +39 -0
- package/dist/components/cg-tabs/cg-tabs.d.ts.map +1 -0
- package/dist/components/cg-tabs/cg-tabs.js +241 -0
- package/dist/components/cg-tabs/cg-tabs.js.map +1 -0
- package/dist/components/cg-tag-input/cg-tag-input.d.ts +50 -0
- package/dist/components/cg-tag-input/cg-tag-input.d.ts.map +1 -0
- package/dist/components/cg-tag-input/cg-tag-input.js +307 -0
- package/dist/components/cg-tag-input/cg-tag-input.js.map +1 -0
- package/dist/components/cg-text/cg-text.d.ts +30 -0
- package/dist/components/cg-text/cg-text.d.ts.map +1 -0
- package/dist/components/cg-text/cg-text.js +126 -0
- package/dist/components/cg-text/cg-text.js.map +1 -0
- package/dist/components/cg-textarea/cg-textarea.d.ts +57 -0
- package/dist/components/cg-textarea/cg-textarea.d.ts.map +1 -0
- package/dist/components/cg-textarea/cg-textarea.js +295 -0
- package/dist/components/cg-textarea/cg-textarea.js.map +1 -0
- package/dist/components/cg-theme/cg-theme.d.ts +82 -0
- package/dist/components/cg-theme/cg-theme.d.ts.map +1 -0
- package/dist/components/cg-theme/cg-theme.js +91 -0
- package/dist/components/cg-theme/cg-theme.js.map +1 -0
- package/dist/components/cg-theme-editor/cg-theme-editor.d.ts +98 -0
- package/dist/components/cg-theme-editor/cg-theme-editor.d.ts.map +1 -0
- package/dist/components/cg-theme-editor/cg-theme-editor.js +341 -0
- package/dist/components/cg-theme-editor/cg-theme-editor.js.map +1 -0
- package/dist/components/cg-time-picker/cg-time-picker.d.ts +55 -0
- package/dist/components/cg-time-picker/cg-time-picker.d.ts.map +1 -0
- package/dist/components/cg-time-picker/cg-time-picker.js +417 -0
- package/dist/components/cg-time-picker/cg-time-picker.js.map +1 -0
- package/dist/components/cg-timeline/cg-timeline.d.ts +70 -0
- package/dist/components/cg-timeline/cg-timeline.d.ts.map +1 -0
- package/dist/components/cg-timeline/cg-timeline.js +131 -0
- package/dist/components/cg-timeline/cg-timeline.js.map +1 -0
- package/dist/components/cg-timeline-event/cg-timeline-event.d.ts +59 -0
- package/dist/components/cg-timeline-event/cg-timeline-event.d.ts.map +1 -0
- package/dist/components/cg-timeline-event/cg-timeline-event.js +190 -0
- package/dist/components/cg-timeline-event/cg-timeline-event.js.map +1 -0
- package/dist/components/cg-toaster/cg-toaster.d.ts +44 -0
- package/dist/components/cg-toaster/cg-toaster.d.ts.map +1 -0
- package/dist/components/cg-toaster/cg-toaster.js +226 -0
- package/dist/components/cg-toaster/cg-toaster.js.map +1 -0
- package/dist/components/cg-toggle/cg-toggle.d.ts +38 -0
- package/dist/components/cg-toggle/cg-toggle.d.ts.map +1 -0
- package/dist/components/cg-toggle/cg-toggle.js +204 -0
- package/dist/components/cg-toggle/cg-toggle.js.map +1 -0
- package/dist/components/cg-toggle-group/cg-toggle-group.d.ts +39 -0
- package/dist/components/cg-toggle-group/cg-toggle-group.d.ts.map +1 -0
- package/dist/components/cg-toggle-group/cg-toggle-group.js +112 -0
- package/dist/components/cg-toggle-group/cg-toggle-group.js.map +1 -0
- package/dist/components/cg-tooltip/cg-tooltip.d.ts +59 -0
- package/dist/components/cg-tooltip/cg-tooltip.d.ts.map +1 -0
- package/dist/components/cg-tooltip/cg-tooltip.js +277 -0
- package/dist/components/cg-tooltip/cg-tooltip.js.map +1 -0
- package/dist/components/cg-tree-view/cg-tree-view.d.ts +42 -0
- package/dist/components/cg-tree-view/cg-tree-view.d.ts.map +1 -0
- package/dist/components/cg-tree-view/cg-tree-view.js +244 -0
- package/dist/components/cg-tree-view/cg-tree-view.js.map +1 -0
- package/dist/components/cg-visually-hidden/cg-visually-hidden.d.ts +42 -0
- package/dist/components/cg-visually-hidden/cg-visually-hidden.d.ts.map +1 -0
- package/dist/components/cg-visually-hidden/cg-visually-hidden.js +40 -0
- package/dist/components/cg-visually-hidden/cg-visually-hidden.js.map +1 -0
- package/dist/foundation.d.ts +116 -0
- package/dist/foundation.d.ts.map +1 -0
- package/dist/foundation.js +211 -0
- package/dist/foundation.js.map +1 -0
- package/dist/index.d.ts +228 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +407 -0
- package/dist/index.js.map +1 -0
- package/dist/lazy.d.ts +9 -0
- package/dist/lazy.d.ts.map +1 -0
- package/dist/lazy.js +38 -0
- package/dist/lazy.js.map +1 -0
- package/dist/styles/ai-effects.css.d.ts +11 -0
- package/dist/styles/ai-effects.css.d.ts.map +1 -0
- package/dist/styles/base.css.d.ts +12 -0
- package/dist/styles/base.css.d.ts.map +1 -0
- package/dist/styles/elevation.css.d.ts +11 -0
- package/dist/styles/elevation.css.d.ts.map +1 -0
- package/dist/styles/focus.css.d.ts +11 -0
- package/dist/styles/focus.css.d.ts.map +1 -0
- package/dist/styles/index.d.ts +8 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles/menu.css.d.ts +14 -0
- package/dist/styles/menu.css.d.ts.map +1 -0
- package/dist/styles/motion.css.d.ts +41 -0
- package/dist/styles/motion.css.d.ts.map +1 -0
- package/dist/styles/premium.css.d.ts +75 -0
- package/dist/styles/premium.css.d.ts.map +1 -0
- package/dist/utils/drag-manager.d.ts +40 -0
- package/dist/utils/drag-manager.d.ts.map +1 -0
- package/dist/utils/floating.d.ts +55 -0
- package/dist/utils/floating.d.ts.map +1 -0
- package/dist/utils/focus-trap.d.ts +37 -0
- package/dist/utils/focus-trap.d.ts.map +1 -0
- package/dist/utils/lazy.d.ts +47 -0
- package/dist/utils/lazy.d.ts.map +1 -0
- package/dist/utils/outside-click.d.ts +24 -0
- package/dist/utils/outside-click.d.ts.map +1 -0
- package/dist/utils/roving-index.d.ts +54 -0
- package/dist/utils/roving-index.d.ts.map +1 -0
- package/dist/utils/sanitize.d.ts +7 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/text-scramble.d.ts +144 -0
- package/dist/utils/text-scramble.d.ts.map +1 -0
- package/package.json +887 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-chat.js","sources":["../../../src/components/ai-chat/ai-chat.ts"],"sourcesContent":["/**\n * @element ai-chat\n * Full-featured AI chat interface with streaming, markdown rendering, message actions, and follow-up chips.\n *\n * @example\n * ```html\n * <ai-chat\n * .aiClient=${myClient}\n * welcomeMessage=\"Ask me anything!\"\n * placeholder=\"Type a message...\"\n * ></ai-chat>\n * ```\n *\n * @fires {CustomEvent<{message: string}>} ai-message-sent - User sent a message\n * @fires {CustomEvent<{message: string}>} ai-response-received - AI response completed\n * @fires {CustomEvent<{error: string}>} ai-error - AI request failed\n * @fires {CustomEvent} ai-chat-stop - User stopped generation\n * @fires {CustomEvent<{content: string}>} ai-chat-copy - Message copied\n * @fires {CustomEvent<{messageId: string}>} ai-chat-regenerate - Regenerate requested\n * @fires {CustomEvent<{messageId: string, rating: 'up'|'down'}>} ai-chat-rate - Message rated\n *\n * @cssprop --cg-component-ai-chat-radius - Chat container border radius\n * @cssprop --cg-component-ai-chat-textarea-max-height - Max height for the input textarea\n * @cssprop --cg-color-surface-cards-background - Chat background\n * @cssprop --cg-color-action-primary-background-default - Send button, links, AI avatar\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, state, customElement, query } from 'lit/decorators.js';\nimport { AiIntent } from '@cognivo/core';\nimport type { AiClient, AiContext, AiRequestOptions, AiResult } from '@cognivo/core';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\n\ninterface MessageVersion {\n content: string;\n timestamp: number;\n}\n\ninterface Message {\n id: string;\n role: 'user' | 'ai';\n versions: MessageVersion[];\n activeVersion: number;\n isError?: boolean;\n}\n\n@customElement('ai-chat')\nexport class AiChat extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n .chat {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: var(--cg-component-ai-chat-min-height);\n max-height: var(--cg-component-ai-chat-max-height);\n background: var(--cg-color-surface-cards-background);\n border-radius: var(--cg-component-ai-chat-radius);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n overflow: hidden;\n }\n\n .wrapper { position: relative; display: flex; flex-direction: column; flex: 1; min-height: 0; overflow: hidden; }\n\n /* ── Messages ── */\n .messages {\n flex: 1;\n overflow-y: auto;\n padding: var(--cg-spacing-24);\n display: flex;\n flex-direction: column;\n gap: var(--cg-spacing-16);\n scroll-behavior: smooth;\n }\n\n .msg {\n max-width: 85%;\n animation: slideIn var(--cg-transition-duration-slow) var(--cg-transition-easing-default);\n }\n .msg.user { align-self: flex-end; }\n .msg.ai { align-self: flex-start; }\n\n @keyframes slideIn {\n from { opacity: 0; transform: translateY(var(--cg-spacing-8)); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n /* ── Bubble ── */\n .bubble {\n padding: var(--cg-spacing-12) var(--cg-spacing-20);\n border-radius: var(--cg-border-radius-200);\n line-height: var(--cg-line-height-relaxed);\n font-size: var(--cg-font-size-sm);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n }\n .msg.user .bubble {\n background: var(--cg-overlay-accent-subtle);\n color: var(--cg-color-surface-base-text);\n border-bottom-right-radius: var(--cg-spacing-4);\n border-color: var(--cg-overlay-accent-medium);\n }\n .msg.ai .bubble {\n background: var(--cg-color-surface-cards-background);\n color: var(--cg-color-surface-base-text);\n border-bottom-left-radius: var(--cg-spacing-4);\n }\n .msg.ai .bubble.error {\n background: var(--cg-color-status-error-background-default);\n color: var(--cg-color-status-error-text-default);\n border-color: var(--cg-color-status-error-border-default);\n }\n\n /* ── Streaming cursor ── */\n .cursor {\n display: inline-block;\n width: var(--cg-spacing-2);\n height: var(--cg-spacing-16);\n background: var(--cg-color-action-primary-background-default);\n margin-left: var(--cg-spacing-1);\n vertical-align: text-bottom;\n animation: blink 1s step-end infinite;\n }\n @keyframes blink {\n 0%, 50% { opacity: 1; }\n 51%, 100% { opacity: 0; }\n }\n\n /* ── Message actions (layout only — buttons are cg-button) ── */\n .actions {\n display: flex;\n gap: var(--cg-spacing-4);\n margin-top: var(--cg-spacing-6);\n opacity: 0;\n transition: opacity var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .msg:hover .actions, .msg:focus-within .actions { opacity: 1; }\n\n /* ── Version nav ── */\n .version-nav {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-4);\n margin-top: var(--cg-spacing-4);\n }\n .version-label {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-surface-container-outlined);\n }\n\n /* ── Thinking ── */\n .thinking-area {\n align-self: flex-start;\n padding: 0 var(--cg-spacing-20) var(--cg-spacing-4);\n }\n\n /* ── Positioned elements ── */\n .stop-btn { margin: 0 auto var(--cg-spacing-8); }\n .scroll-btn { position: absolute; bottom: var(--cg-spacing-80); right: var(--cg-spacing-20); z-index: 10; }\n .follow-ups { padding: 0 var(--cg-spacing-20) var(--cg-spacing-12); }\n\n /* ── Input area — fused container like ChatGPT/Claude ── */\n .input-area {\n padding: var(--cg-spacing-12) var(--cg-spacing-16);\n flex-shrink: 0;\n }\n .input-box {\n display: flex;\n align-items: flex-end;\n gap: var(--cg-spacing-8);\n padding: var(--cg-spacing-8) var(--cg-spacing-8) var(--cg-spacing-8) var(--cg-spacing-16);\n background: var(--cg-color-input-background-default);\n border: var(--cg-border-width-50) solid var(--cg-color-input-border-default);\n border-radius: var(--cg-border-radius-200);\n transition:\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n box-shadow var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .input-box:focus-within {\n border-color: var(--cg-color-input-border-focus);\n box-shadow: 0 0 0 3px var(--cg-overlay-accent-strong);\n }\n .input-box textarea {\n flex: 1;\n border: none;\n outline: none;\n background: transparent;\n color: var(--cg-color-input-text-default);\n font: inherit;\n font-size: var(--cg-font-size-sm);\n line-height: var(--cg-line-height-relaxed);\n resize: none;\n padding: var(--cg-spacing-4) 0;\n min-height: var(--cg-spacing-24);\n max-height: var(--cg-component-ai-chat-textarea-max-height);\n }\n .input-box textarea::placeholder {\n color: var(--cg-color-input-text-placeholder);\n }\n /* Shared icon button style for send + mic */\n .icon-btn {\n flex-shrink: 0;\n width: var(--cg-spacing-32);\n height: var(--cg-spacing-32);\n border-radius: var(--cg-border-radius-full);\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition:\n background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n opacity var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .icon-btn:active:not(:disabled) { transform: scale(var(--cg-interaction-press-scale)); }\n .icon-btn:disabled { opacity: 0.3; cursor: default; }\n\n .send-btn {\n background: var(--cg-color-action-primary-background-default);\n color: var(--cg-color-action-primary-text-default);\n }\n .send-btn:hover:not(:disabled) {\n background: var(--cg-color-action-primary-background-hover);\n }\n\n .mic-btn {\n background: transparent;\n color: var(--cg-color-input-text-placeholder);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n }\n .mic-btn:hover:not(:disabled) {\n color: var(--cg-color-surface-base-text);\n border-color: var(--cg-color-input-border-hover);\n }\n .mic-btn.recording {\n color: var(--cg-color-status-error-text-default);\n border-color: var(--cg-color-status-error-text-default);\n background: var(--cg-color-status-error-background-default);\n animation: micPulse 1.5s ease-in-out infinite;\n }\n @keyframes micPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.6; }\n }\n\n /* ── Empty state ── */\n .empty {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: var(--cg-color-surface-container-outlined);\n gap: var(--cg-spacing-12);\n text-align: center;\n }\n .empty-text {\n font-size: var(--cg-font-size-base);\n font-weight: var(--cg-font-weight-medium);\n }\n\n /* ── Rounded variants ── */\n :host([rounded=\"none\"]) .chat { border-radius: 0; }\n :host([rounded=\"sm\"]) .chat { border-radius: var(--cg-border-radius-100); }\n :host([rounded=\"md\"]) .chat { border-radius: var(--cg-border-radius-150); }\n :host([rounded=\"lg\"]) .chat { border-radius: var(--cg-component-ai-chat-radius); }\n\n /* Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n .msg { animation: none; }\n .cursor { animation: none; opacity: 1; }\n }\n `];\n\n @property({ reflect: true }) rounded: 'none' | 'sm' | 'md' | 'lg' = 'lg';\n @property({ type: Object }) aiClient: AiClient | null = null;\n @property({ type: Array }) chatDataset: unknown[] = [];\n @property({ type: Boolean }) showActions: boolean = true;\n @property({ type: Boolean }) showFollowUps: boolean = true;\n @property({ type: String }) welcomeMessage: string = 'Ask me about your data!';\n @property({ type: String }) placeholder: string = 'Type a message...';\n @property({ type: Number }) maxMessages: number = 100;\n /** AI intent to invoke (default: 'chat'). Override for domain-specific intents. */\n @property({ type: String }) intent: string = 'chat';\n /** When true and aiClient.streamIntent exists, uses streaming instead of runIntent */\n @property({ type: Boolean }) useStreaming: boolean = false;\n /** Show mic button for voice input (uses Web Speech API) */\n @property({ type: Boolean }) showVoice: boolean = false;\n /** BCP-47 language for voice recognition */\n @property({ type: String }) voiceLanguage: string = 'en-US';\n\n @state() private _messages: Message[] = [];\n @state() private _isRecording: boolean = false;\n @state() private _input: string = '';\n @state() private _isStreaming: boolean = false;\n @state() private _isThinking: boolean = false;\n @state() private _isComposing: boolean = false;\n @state() private _showScrollBtn: boolean = false;\n @state() private _copiedId: string | null = null;\n @state() private _followUps: string[] = [];\n @state() private _streamingContent: string = '';\n\n @query('.messages') private _messagesEl!: HTMLDivElement;\n\n private _msgCounter: number = 0;\n private _abortController: AbortController | null = null;\n private _recognition: SpeechRecognition | null = null;\n private _copyResetTimer: ReturnType<typeof setTimeout> | undefined;\n\n private _genId(): string { return `msg-${++this._msgCounter}`; }\n\n // ── Voice input ──\n\n private _getSpeechRecognition(): SpeechRecognitionCtor | null {\n if (typeof window === 'undefined') return null;\n return window.SpeechRecognition || window.webkitSpeechRecognition || null;\n }\n\n private _toggleVoice() {\n if (this._isRecording) {\n this._stopVoice();\n } else {\n this._startVoice();\n }\n }\n\n private _startVoice() {\n const Ctor = this._getSpeechRecognition();\n if (!Ctor) return;\n\n this._stopVoice();\n const recognition = new Ctor();\n recognition.lang = this.voiceLanguage;\n recognition.continuous = false;\n recognition.interimResults = true;\n\n recognition.onstart = () => {\n this._isRecording = true;\n };\n\n recognition.onresult = (event: SpeechRecognitionEvent) => {\n let interim = '';\n let final = '';\n for (let i = event.resultIndex; i < event.results.length; i++) {\n const result = event.results[i];\n if (!result) continue;\n if (result.isFinal) {\n final += result[0]?.transcript ?? '';\n } else {\n interim += result[0]?.transcript ?? '';\n }\n }\n if (final) {\n this._input = (this._input ? this._input + ' ' : '') + final.trim();\n } else if (interim) {\n // Show interim in textarea placeholder feel — append to input temporarily\n const textarea = this.shadowRoot?.querySelector('textarea');\n if (textarea) textarea.placeholder = interim + '...';\n }\n };\n\n recognition.onend = () => {\n this._isRecording = false;\n this._recognition = null;\n // Restore placeholder\n const textarea = this.shadowRoot?.querySelector('textarea');\n if (textarea) textarea.placeholder = this.placeholder;\n };\n\n recognition.onerror = () => {\n this._isRecording = false;\n this._recognition = null;\n };\n\n this._recognition = recognition;\n try {\n recognition.start();\n } catch {\n this._isRecording = false;\n }\n }\n\n private _stopVoice() {\n if (this._recognition) {\n try { this._recognition.stop(); } catch { /* ignore */ }\n this._recognition = null;\n }\n this._isRecording = false;\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this._stopVoice();\n if (this._copyResetTimer) {\n clearTimeout(this._copyResetTimer);\n this._copyResetTimer = undefined;\n }\n // Abort any in-flight AI request on unmount\n if (this._abortController) {\n try { this._abortController.abort(); } catch { /* ignore */ }\n this._abortController = null;\n }\n }\n\n private _scrollToBottom() {\n requestAnimationFrame(() => {\n if (this._messagesEl) {\n this._messagesEl.scrollTop = this._messagesEl.scrollHeight;\n }\n });\n }\n\n private _handleScroll() {\n if (!this._messagesEl) return;\n const { scrollTop, scrollHeight, clientHeight } = this._messagesEl;\n this._showScrollBtn = scrollHeight - scrollTop - clientHeight > 100;\n }\n\n /** Build conversation history for AI context */\n private _buildHistory(): Array<{ role: string; content: string }> {\n return this._messages.map(m => ({\n role: m.role,\n content: m.versions[m.activeVersion]?.content ?? '',\n }));\n }\n\n /** Enforce maxMessages limit by trimming oldest messages */\n private _trimMessages() {\n if (this._messages.length > this.maxMessages) {\n this._messages = this._messages.slice(this._messages.length - this.maxMessages);\n }\n }\n\n /** Add a message programmatically from outside the component */\n addMessage(role: 'user' | 'ai', content: string): string {\n const id = this._genId();\n this._messages = [...this._messages, {\n id,\n role,\n versions: [{ content, timestamp: Date.now() }],\n activeVersion: 0,\n }];\n this._trimMessages();\n this._scrollToBottom();\n return id;\n }\n\n /** Clear all messages */\n clearMessages() {\n this._messages = [];\n this._followUps = [];\n this._streamingContent = '';\n }\n\n private async _sendMessage() {\n if (!this._input.trim() || !this.aiClient || this._isStreaming || this._isThinking) return;\n\n const text = this._input.trim();\n this._input = '';\n this._followUps = [];\n\n // Reset textarea height after clearing\n const textarea = this.shadowRoot?.querySelector('.input-box textarea') as HTMLTextAreaElement | null;\n if (textarea) { textarea.value = ''; textarea.style.height = 'auto'; }\n\n this._messages = [...this._messages, {\n id: this._genId(),\n role: 'user',\n versions: [{ content: text, timestamp: Date.now() }],\n activeVersion: 0,\n }];\n this._trimMessages();\n\n this.dispatchEvent(new CustomEvent('ai-message-sent', {\n bubbles: true, composed: true,\n detail: { message: text, timestamp: Date.now() },\n }));\n\n await this.updateComplete;\n this._scrollToBottom();\n this._isThinking = true;\n this._abortController = new AbortController();\n\n const context: AiContext = {\n dataset: this.chatDataset.length > 0 ? this.chatDataset : [{ info: 'No data provided' }],\n meta: {\n userQuestion: text,\n conversationHistory: JSON.stringify(this._buildHistory()),\n },\n };\n\n try {\n if (this.useStreaming && this.aiClient.streamIntent) {\n await this._sendStreaming(context);\n } else {\n await this._sendNonStreaming(context);\n }\n } catch (err: unknown) {\n if (this._abortController?.signal.aborted) return;\n this._isThinking = false;\n this._isStreaming = false;\n const errMsg = err instanceof Error ? err.message : 'An error occurred';\n this._messages = [...this._messages, {\n id: this._genId(),\n role: 'ai',\n versions: [{ content: errMsg, timestamp: Date.now() }],\n activeVersion: 0,\n isError: true,\n }];\n this._trimMessages();\n this.dispatchEvent(new CustomEvent('ai-error', {\n bubbles: true, composed: true,\n detail: { error: errMsg, timestamp: Date.now() },\n }));\n } finally {\n this._isStreaming = false;\n this._isThinking = false;\n this._abortController = null;\n await this.updateComplete;\n this._scrollToBottom();\n }\n }\n\n private async _sendNonStreaming(context: AiContext) {\n const options: AiRequestOptions = { signal: this._abortController!.signal };\n const result: AiResult = await this.aiClient!.runIntent(\n this.intent as AiIntent,\n context,\n options,\n );\n\n this._isThinking = false;\n const aiContent = String(\n result.explanation\n || (result.metadata?.content)\n || (result.metadata?.text)\n || 'Analysis complete.'\n );\n\n this._messages = [...this._messages, {\n id: this._genId(),\n role: 'ai',\n versions: [{ content: aiContent, timestamp: Date.now() }],\n activeVersion: 0,\n }];\n this._trimMessages();\n\n this.dispatchEvent(new CustomEvent('ai-response-received', {\n bubbles: true, composed: true,\n detail: { message: aiContent, timestamp: Date.now() },\n }));\n }\n\n private async _sendStreaming(context: AiContext) {\n this._isThinking = false;\n this._isStreaming = true;\n this._streamingContent = '';\n\n const streamId = 'msg-stream';\n this._messages = [...this._messages, {\n id: streamId,\n role: 'ai',\n versions: [{ content: '', timestamp: Date.now() }],\n activeVersion: 0,\n }];\n\n const options: AiRequestOptions = { signal: this._abortController!.signal };\n const generator = this.aiClient!.streamIntent!(\n this.intent as AiIntent,\n context,\n options,\n );\n\n for await (const partial of generator) {\n if (this._abortController?.signal.aborted) break;\n const token = String(partial.explanation || partial.metadata?.content || partial.metadata?.text || '');\n this._streamingContent += token;\n\n this._messages = this._messages.map(m =>\n m.id === streamId\n ? { ...m, versions: [{ content: this._streamingContent, timestamp: Date.now() }] }\n : m\n );\n this._scrollToBottom();\n }\n\n this.completeStream();\n }\n\n /** Append streaming content to a new or existing AI message (for external streaming control) */\n streamResponse(token: string) {\n this._isStreaming = true;\n this._isThinking = false;\n this._streamingContent += token;\n\n const streamId = 'msg-stream';\n const hasStream = this._messages.some(m => m.id === streamId);\n\n if (hasStream) {\n this._messages = this._messages.map(m =>\n m.id === streamId\n ? { ...m, versions: [{ content: this._streamingContent, timestamp: Date.now() }] }\n : m\n );\n } else {\n this._messages = [...this._messages, {\n id: streamId,\n role: 'ai',\n versions: [{ content: this._streamingContent, timestamp: Date.now() }],\n activeVersion: 0,\n }];\n }\n this._scrollToBottom();\n }\n\n /** Complete streaming */\n completeStream(followUps?: string[]) {\n this._isStreaming = false;\n const newId = this._genId();\n\n // Immutable update — replace stream id with permanent id\n this._messages = this._messages.map(m =>\n m.id === 'msg-stream' ? { ...m, id: newId } : m\n );\n this._trimMessages();\n\n const lastMsg = this._messages[this._messages.length - 1];\n this._streamingContent = '';\n if (followUps) this._followUps = followUps;\n\n this.dispatchEvent(new CustomEvent('ai-response-received', {\n bubbles: true, composed: true,\n detail: { message: lastMsg?.versions[0]?.content ?? '', timestamp: Date.now() },\n }));\n }\n\n /** Export conversation as markdown */\n exportConversation(): string {\n return this._messages.map(m => {\n const v = m.versions[m.activeVersion]!;\n return `**${m.role === 'user' ? 'User' : 'AI'}:** ${v.content}`;\n }).join('\\n\\n');\n }\n\n private _handleStop() {\n this._abortController?.abort();\n this._isStreaming = false;\n this._isThinking = false;\n this.dispatchEvent(new CustomEvent('ai-chat-stop', { bubbles: true, composed: true }));\n }\n\n private _handleCopy(msg: Message) {\n const text = msg.versions[msg.activeVersion]!.content;\n navigator.clipboard?.writeText(text);\n this._copiedId = msg.id;\n if (this._copyResetTimer) clearTimeout(this._copyResetTimer);\n this._copyResetTimer = setTimeout(() => { this._copiedId = null; this._copyResetTimer = undefined; }, 2000);\n this.dispatchEvent(new CustomEvent('ai-chat-copy', {\n bubbles: true, composed: true,\n detail: { content: text },\n }));\n }\n\n private _handleRegenerate(msg: Message) {\n this.dispatchEvent(new CustomEvent('ai-chat-regenerate', {\n bubbles: true, composed: true,\n detail: { messageId: msg.id },\n }));\n }\n\n private _handleRate(msg: Message, rating: 'up' | 'down') {\n this.dispatchEvent(new CustomEvent('ai-chat-rate', {\n bubbles: true, composed: true,\n detail: { messageId: msg.id, rating },\n }));\n }\n\n private _handleFollowUp(text: string) {\n this._input = text;\n this._followUps = [];\n this._sendMessage();\n }\n\n private _switchVersion(msg: Message, delta: number) {\n const newIdx = msg.activeVersion + delta;\n if (newIdx >= 0 && newIdx < msg.versions.length) {\n // Immutable update — don't mutate the message directly\n this._messages = this._messages.map(m =>\n m.id === msg.id ? { ...m, activeVersion: newIdx } : m\n );\n }\n }\n\n private _handleKeyDown(e: KeyboardEvent) {\n if (e.key === 'Enter' && !e.shiftKey && !this._isComposing) {\n e.preventDefault();\n this._sendMessage();\n }\n }\n\n override render() {\n if (!this.aiClient) {\n return html`\n <div class=\"chat\">\n <div class=\"empty\" role=\"status\">\n <cg-icon name=\"settings\" size=\"lg\"></cg-icon>\n <div class=\"empty-text\">Set <code>aiClient</code> to start chatting</div>\n </div>\n </div>\n `;\n }\n\n return html`\n <div class=\"chat\">\n <div class=\"wrapper\">\n <div class=\"messages\" role=\"log\" aria-live=\"polite\" aria-label=\"Chat messages\" @scroll=${this._handleScroll}>\n ${this._messages.length === 0 && !this._isThinking ? html`\n <div class=\"empty\">\n <cg-icon name=\"chat\" size=\"lg\"></cg-icon>\n <div class=\"empty-text\">${this.welcomeMessage}</div>\n </div>\n ` : this._messages.map(msg => {\n const v = msg.versions[msg.activeVersion]!;\n return html`\n <div class=\"msg ${msg.role}\" role=\"article\" aria-label=\"${msg.role === 'user' ? 'Your message' : 'AI response'}\">\n <div class=\"msg-content\">\n <div class=\"bubble ${msg.isError ? 'error' : ''}\">\n ${msg.role === 'ai' && !msg.isError\n ? html`<cg-markdown .text=${v.content}></cg-markdown>`\n : v.content}\n ${this._isStreaming && msg.id === 'msg-stream' ? html`<span class=\"cursor\" aria-hidden=\"true\"></span>` : nothing}\n </div>\n\n ${msg.role === 'ai' && this.showActions && !this._isStreaming ? html`\n <div class=\"actions\">\n <cg-button variant=\"tertiary\" size=\"sm\"\n status=${this._copiedId === msg.id ? 'success' : 'idle'}\n @click=${() => this._handleCopy(msg)}\n aria-label=${this._copiedId === msg.id ? 'Copied to clipboard' : 'Copy message'}>\n <cg-icon slot=\"prefix\" name=${this._copiedId === msg.id ? 'check' : 'copy'} size=\"xs\"></cg-icon>\n ${this._copiedId === msg.id ? 'Copied' : 'Copy'}\n </cg-button>\n <cg-button variant=\"tertiary\" size=\"sm\" @click=${() => this._handleRegenerate(msg)} aria-label=\"Regenerate response\">\n <cg-icon slot=\"prefix\" name=\"refresh\" size=\"xs\"></cg-icon> Retry\n </cg-button>\n <cg-button variant=\"tertiary\" size=\"sm\" @click=${() => this._handleRate(msg, 'up')} aria-label=\"Rate good\">\n <cg-icon name=\"star\" size=\"xs\"></cg-icon>\n </cg-button>\n <cg-button variant=\"tertiary\" size=\"sm\" @click=${() => this._handleRate(msg, 'down')} aria-label=\"Rate bad\">\n <cg-icon name=\"warning\" size=\"xs\"></cg-icon>\n </cg-button>\n </div>\n ` : nothing}\n\n ${msg.versions.length > 1 ? html`\n <nav class=\"version-nav\" aria-label=\"Message versions\">\n <cg-button variant=\"tertiary\" size=\"sm\" ?disabled=${msg.activeVersion === 0} @click=${() => this._switchVersion(msg, -1)} aria-label=\"Previous version\">\n <cg-icon name=\"chevron-left\" size=\"xs\"></cg-icon>\n </cg-button>\n <span class=\"version-label\">${msg.activeVersion + 1} / ${msg.versions.length}</span>\n <cg-button variant=\"tertiary\" size=\"sm\" ?disabled=${msg.activeVersion === msg.versions.length - 1} @click=${() => this._switchVersion(msg, 1)} aria-label=\"Next version\">\n <cg-icon name=\"chevron-right\" size=\"xs\"></cg-icon>\n </cg-button>\n </nav>\n ` : nothing}\n </div>\n </div>\n `;\n })}\n\n ${this._isThinking ? html`\n <div class=\"thinking-area\" role=\"status\" aria-label=\"AI is thinking\">\n <ai-thinking text=\"Analyzing\" shimmer delay=\"0\"></ai-thinking>\n </div>\n ` : nothing}\n </div>\n\n ${this._showScrollBtn ? html`\n <cg-button class=\"scroll-btn\" variant=\"secondary\" size=\"sm\" rounded=\"full\"\n @click=${this._scrollToBottom} aria-label=\"Scroll to bottom\">\n <cg-icon name=\"arrow-down\" size=\"xs\"></cg-icon>\n </cg-button>\n ` : nothing}\n\n ${(this._isStreaming || this._isThinking) ? html`\n <cg-button class=\"stop-btn\" type=\"danger\" size=\"sm\" @click=${this._handleStop} aria-label=\"Stop generating\">\n <cg-icon slot=\"prefix\" name=\"close\" size=\"xs\"></cg-icon> Stop generating\n </cg-button>\n ` : nothing}\n\n ${this._followUps.length > 0 && this.showFollowUps ? html`\n <cg-follow-up\n class=\"follow-ups\"\n .items=${this._followUps}\n hideLabel\n variant=\"chips\"\n ?disabled=${this._isStreaming || this._isThinking}\n @cg-follow-up-click=${(e: CustomEvent<{text: string}>) => this._handleFollowUp(e.detail.text)}\n ></cg-follow-up>\n ` : nothing}\n </div>\n\n <div class=\"input-area\">\n <div class=\"input-box\">\n <textarea\n rows=\"1\"\n placeholder=${this.placeholder}\n .value=${this._input}\n ?disabled=${this._isStreaming || this._isThinking}\n @input=${(e: Event) => {\n const ta = e.target as HTMLTextAreaElement;\n this._input = ta.value;\n ta.style.height = 'auto';\n ta.style.height = ta.scrollHeight + 'px';\n }}\n @keydown=${this._handleKeyDown}\n @compositionstart=${() => this._isComposing = true}\n @compositionend=${() => this._isComposing = false}\n aria-label=\"Chat message\"\n ></textarea>\n ${this.showVoice && this._getSpeechRecognition() ? html`\n <button\n class=\"icon-btn mic-btn ${this._isRecording ? 'recording' : ''}\"\n @click=${this._toggleVoice}\n ?disabled=${this._isStreaming || this._isThinking}\n aria-label=\"${this._isRecording ? 'Stop voice input' : 'Start voice input'}\"\n aria-pressed=\"${this._isRecording ? 'true' : 'false'}\"\n >\n <cg-icon name=${this._isRecording ? 'close' : 'mic'} size=\"sm\"></cg-icon>\n </button>\n ` : nothing}\n <button\n class=\"icon-btn send-btn\"\n @click=${this._sendMessage}\n ?disabled=${this._isStreaming || this._isThinking || !this._input.trim()}\n aria-label=\"Send message\"\n >\n <cg-icon name=\"arrow-up\" size=\"sm\"></cg-icon>\n </button>\n </div>\n </div>\n </div>\n `;\n }\n}\n"],"names":["AiChat","LitElement","Ctor","recognition","event","interim","final","i","result","textarea","scrollTop","scrollHeight","clientHeight","m","role","content","id","text","context","err","errMsg","options","aiContent","streamId","generator","partial","token","followUps","newId","lastMsg","v","msg","rating","delta","newIdx","e","html","nothing","ta","hostBlock","reducedMotion","css","__decorateClass","property","state","query","customElement"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { LitElement, nothing } from 'lit';
|
|
2
|
+
interface CitationSource {
|
|
3
|
+
title: string;
|
|
4
|
+
url?: string;
|
|
5
|
+
excerpt?: string;
|
|
6
|
+
relevance?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class AiCitation extends LitElement {
|
|
9
|
+
static styles: import('lit').CSSResult[];
|
|
10
|
+
sources: CitationSource[];
|
|
11
|
+
mode: 'inline' | 'list';
|
|
12
|
+
maxVisible: number;
|
|
13
|
+
private _expandedIndex;
|
|
14
|
+
private _sanitizeUrl;
|
|
15
|
+
private _relevanceClass;
|
|
16
|
+
private _relevanceLabel;
|
|
17
|
+
private _handleCiteClick;
|
|
18
|
+
private _renderCard;
|
|
19
|
+
render(): import('lit').TemplateResult<1> | typeof nothing;
|
|
20
|
+
}
|
|
21
|
+
declare global {
|
|
22
|
+
interface HTMLElementTagNameMap {
|
|
23
|
+
'ai-citation': AiCitation;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=ai-citation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-citation.d.ts","sourceRoot":"","sources":["../../../src/components/ai-citation/ai-citation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAa,OAAO,EAAE,MAAM,KAAK,CAAC;AAGrD,OAAO,6BAA6B,CAAC;AAErC,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBACa,UAAW,SAAQ,UAAU;IACxC,OAAgB,MAAM,4BAkKnB;IAEwB,OAAO,EAAE,cAAc,EAAE,CAAM;IAC9C,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAY;IACnB,UAAU,SAAK;IAElC,OAAO,CAAC,cAAc,CAAM;IAErC,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,WAAW;IAmBV,MAAM;CA+ChB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { css as v, LitElement as u, nothing as s, html as o } from "lit";
|
|
2
|
+
import { property as g, state as p, customElement as h } from "lit/decorators.js";
|
|
3
|
+
import { h as f, r as b } from "../../chunks/premium.css-9I4kHrsl.js";
|
|
4
|
+
import "../cg-tooltip/cg-tooltip.js";
|
|
5
|
+
var m = Object.defineProperty, x = Object.getOwnPropertyDescriptor, n = (e, t, r, i) => {
|
|
6
|
+
for (var a = i > 1 ? void 0 : i ? x(t, r) : t, l = e.length - 1, d; l >= 0; l--)
|
|
7
|
+
(d = e[l]) && (a = (i ? d(t, r, a) : d(a)) || a);
|
|
8
|
+
return i && a && m(t, r, a), a;
|
|
9
|
+
};
|
|
10
|
+
let c = class extends u {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments), this.sources = [], this.mode = "inline", this.maxVisible = 5, this._expandedIndex = -1;
|
|
13
|
+
}
|
|
14
|
+
_sanitizeUrl(e) {
|
|
15
|
+
if (!e) return;
|
|
16
|
+
const t = e.trim();
|
|
17
|
+
if (!t) return;
|
|
18
|
+
const r = t.toLowerCase().replace(/[\s\u0000-\u001f]/g, "");
|
|
19
|
+
if (r.startsWith("javascript:") || r.startsWith("data:") || r.startsWith("vbscript:")) return;
|
|
20
|
+
if (r.startsWith("http:") || r.startsWith("https:") || r.startsWith("//")) return t;
|
|
21
|
+
const i = t.indexOf(":"), a = t.indexOf("/");
|
|
22
|
+
if (i === -1 || a !== -1 && a < i) return t;
|
|
23
|
+
}
|
|
24
|
+
_relevanceClass(e) {
|
|
25
|
+
return e ? e >= 0.7 ? "high" : e >= 0.4 ? "medium" : "low" : "low";
|
|
26
|
+
}
|
|
27
|
+
_relevanceLabel(e) {
|
|
28
|
+
return e == null ? "Relevance unknown" : `Relevance: ${Math.round(e * 100)}%`;
|
|
29
|
+
}
|
|
30
|
+
_handleCiteClick(e) {
|
|
31
|
+
this._expandedIndex = this._expandedIndex === e ? -1 : e, this.dispatchEvent(new CustomEvent("ai-citation-click", {
|
|
32
|
+
bubbles: !0,
|
|
33
|
+
composed: !0,
|
|
34
|
+
detail: { index: e, source: this.sources[e] }
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
_renderCard(e, t) {
|
|
38
|
+
const r = this._sanitizeUrl(e.url);
|
|
39
|
+
return o`
|
|
40
|
+
<div class="source-card">
|
|
41
|
+
<div class="source-header">
|
|
42
|
+
<div class="source-number">${t + 1}</div>
|
|
43
|
+
${r ? o`<a class="source-title" href="${r}" target="_blank" rel="noopener">${e.title}</a>` : o`<span class="source-title">${e.title}</span>`}
|
|
44
|
+
<cg-tooltip content=${this._relevanceLabel(e.relevance)} position="top">
|
|
45
|
+
<span class="relevance-dot ${this._relevanceClass(e.relevance)}" aria-label=${this._relevanceLabel(e.relevance)}></span>
|
|
46
|
+
</cg-tooltip>
|
|
47
|
+
</div>
|
|
48
|
+
${e.excerpt ? o`<div class="source-excerpt">${e.excerpt}</div>` : s}
|
|
49
|
+
${r ? o`<div class="source-url">${r}</div>` : s}
|
|
50
|
+
</div>
|
|
51
|
+
`;
|
|
52
|
+
}
|
|
53
|
+
render() {
|
|
54
|
+
if (!this.sources.length) return s;
|
|
55
|
+
if (this.mode === "list")
|
|
56
|
+
return o`
|
|
57
|
+
<div class="list">
|
|
58
|
+
<div class="sources-label">Sources (${this.sources.length})</div>
|
|
59
|
+
${this.sources.map((r, i) => {
|
|
60
|
+
const a = this._sanitizeUrl(r.url);
|
|
61
|
+
return o`
|
|
62
|
+
<div class="list-item">
|
|
63
|
+
<div class="source-number">${i + 1}</div>
|
|
64
|
+
<div class="list-content">
|
|
65
|
+
<div class="list-title">
|
|
66
|
+
${a ? o`<a href="${a}" target="_blank" rel="noopener">${r.title}</a>` : r.title}
|
|
67
|
+
</div>
|
|
68
|
+
${r.excerpt ? o`<div class="list-excerpt">${r.excerpt}</div>` : s}
|
|
69
|
+
</div>
|
|
70
|
+
<cg-tooltip content=${this._relevanceLabel(r.relevance)} position="top">
|
|
71
|
+
<span class="relevance-dot ${this._relevanceClass(r.relevance)}" aria-label=${this._relevanceLabel(r.relevance)}></span>
|
|
72
|
+
</cg-tooltip>
|
|
73
|
+
</div>
|
|
74
|
+
`;
|
|
75
|
+
})}
|
|
76
|
+
</div>
|
|
77
|
+
`;
|
|
78
|
+
const e = this.sources.slice(0, this.maxVisible), t = this.sources.length - this.maxVisible;
|
|
79
|
+
return o`
|
|
80
|
+
<span class="inline">
|
|
81
|
+
${e.map((r, i) => o`
|
|
82
|
+
<button
|
|
83
|
+
type="button"
|
|
84
|
+
class="cite-badge"
|
|
85
|
+
aria-label="Source ${i + 1}: ${r.title}"
|
|
86
|
+
aria-expanded="${this._expandedIndex === i}"
|
|
87
|
+
@click=${() => this._handleCiteClick(i)}
|
|
88
|
+
>${i + 1}</button>
|
|
89
|
+
${this._expandedIndex === i ? this._renderCard(r, i) : s}
|
|
90
|
+
`)}
|
|
91
|
+
${t > 0 ? o`<span class="cite-badge more" aria-label="${t} more source${t > 1 ? "s" : ""}">+${t}</span>` : s}
|
|
92
|
+
</span>
|
|
93
|
+
`;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
c.styles = [f, b, v`
|
|
97
|
+
/* ── Inline mode ── */
|
|
98
|
+
.inline { display: inline; }
|
|
99
|
+
|
|
100
|
+
.cite-badge {
|
|
101
|
+
display: inline-flex;
|
|
102
|
+
align-items: center;
|
|
103
|
+
justify-content: center;
|
|
104
|
+
width: var(--cg-spacing-16);
|
|
105
|
+
height: var(--cg-spacing-16);
|
|
106
|
+
border-radius: var(--cg-border-radius-50);
|
|
107
|
+
background: var(--cg-overlay-accent-light);
|
|
108
|
+
color: var(--cg-color-surface-base-text);
|
|
109
|
+
font-size: var(--cg-font-size-xs);
|
|
110
|
+
font-weight: var(--cg-font-weight-bold);
|
|
111
|
+
cursor: pointer;
|
|
112
|
+
vertical-align: super;
|
|
113
|
+
margin: 0 var(--cg-spacing-1);
|
|
114
|
+
border: var(--cg-border-width-50) solid transparent;
|
|
115
|
+
padding: 0;
|
|
116
|
+
font-family: inherit;
|
|
117
|
+
transition:
|
|
118
|
+
background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),
|
|
119
|
+
border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);
|
|
120
|
+
}
|
|
121
|
+
.cite-badge:hover {
|
|
122
|
+
background: var(--cg-overlay-accent-medium);
|
|
123
|
+
border-color: var(--cg-overlay-accent-strong);
|
|
124
|
+
}
|
|
125
|
+
.cite-badge:focus-visible {
|
|
126
|
+
outline: none;
|
|
127
|
+
box-shadow: 0 0 0 var(--cg-border-width-300) var(--cg-overlay-accent-strong);
|
|
128
|
+
}
|
|
129
|
+
.cite-badge.more {
|
|
130
|
+
width: auto;
|
|
131
|
+
padding: 0 var(--cg-spacing-4);
|
|
132
|
+
cursor: default;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* ── Source card (expanded) ── */
|
|
136
|
+
.source-card {
|
|
137
|
+
background: var(--cg-color-surface-cards-background);
|
|
138
|
+
border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);
|
|
139
|
+
border-radius: var(--cg-component-card-radius);
|
|
140
|
+
padding: var(--cg-spacing-12);
|
|
141
|
+
margin: var(--cg-spacing-8) 0;
|
|
142
|
+
max-width: 400px;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.source-header {
|
|
146
|
+
display: flex;
|
|
147
|
+
align-items: center;
|
|
148
|
+
gap: var(--cg-spacing-8);
|
|
149
|
+
margin-bottom: var(--cg-spacing-6);
|
|
150
|
+
}
|
|
151
|
+
.source-number {
|
|
152
|
+
width: var(--cg-spacing-20);
|
|
153
|
+
height: var(--cg-spacing-20);
|
|
154
|
+
border-radius: var(--cg-border-radius-50);
|
|
155
|
+
background: var(--cg-overlay-accent-light);
|
|
156
|
+
color: var(--cg-color-surface-cards-text);
|
|
157
|
+
font-size: var(--cg-font-size-xs);
|
|
158
|
+
font-weight: var(--cg-font-weight-bold);
|
|
159
|
+
display: flex;
|
|
160
|
+
align-items: center;
|
|
161
|
+
justify-content: center;
|
|
162
|
+
flex-shrink: 0;
|
|
163
|
+
}
|
|
164
|
+
.source-title {
|
|
165
|
+
font-size: var(--cg-font-size-sm);
|
|
166
|
+
font-weight: var(--cg-font-weight-medium);
|
|
167
|
+
color: var(--cg-color-surface-cards-text);
|
|
168
|
+
text-decoration: none;
|
|
169
|
+
flex: 1;
|
|
170
|
+
min-width: 0;
|
|
171
|
+
overflow: hidden;
|
|
172
|
+
text-overflow: ellipsis;
|
|
173
|
+
white-space: nowrap;
|
|
174
|
+
border-radius: var(--cg-border-radius-50);
|
|
175
|
+
}
|
|
176
|
+
a.source-title:hover { text-decoration: underline; }
|
|
177
|
+
a.source-title:focus-visible {
|
|
178
|
+
outline: none;
|
|
179
|
+
box-shadow: 0 0 0 var(--cg-border-width-300) var(--cg-color-focus-ring);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* Relevance dot — uses ai-confidence tier-3 tokens (theme-aware) */
|
|
183
|
+
.relevance-dot {
|
|
184
|
+
width: var(--cg-spacing-8);
|
|
185
|
+
height: var(--cg-spacing-8);
|
|
186
|
+
border-radius: var(--cg-border-radius-full);
|
|
187
|
+
flex-shrink: 0;
|
|
188
|
+
}
|
|
189
|
+
.relevance-dot.high { background: var(--cg-ai-confidence-high-color); }
|
|
190
|
+
.relevance-dot.medium { background: var(--cg-ai-confidence-medium-color); }
|
|
191
|
+
.relevance-dot.low { background: var(--cg-color-input-text-placeholder); }
|
|
192
|
+
|
|
193
|
+
.source-excerpt {
|
|
194
|
+
font-size: var(--cg-font-size-xs);
|
|
195
|
+
color: var(--cg-color-input-text-placeholder);
|
|
196
|
+
line-height: var(--cg-line-height-snug);
|
|
197
|
+
margin-top: var(--cg-spacing-6);
|
|
198
|
+
display: -webkit-box;
|
|
199
|
+
-webkit-line-clamp: 3;
|
|
200
|
+
-webkit-box-orient: vertical;
|
|
201
|
+
overflow: hidden;
|
|
202
|
+
}
|
|
203
|
+
.source-url {
|
|
204
|
+
font-size: var(--cg-font-size-xs);
|
|
205
|
+
color: var(--cg-color-input-text-placeholder);
|
|
206
|
+
margin-top: var(--cg-spacing-4);
|
|
207
|
+
overflow: hidden;
|
|
208
|
+
text-overflow: ellipsis;
|
|
209
|
+
white-space: nowrap;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/* ── List mode ── */
|
|
213
|
+
.list {
|
|
214
|
+
display: flex;
|
|
215
|
+
flex-direction: column;
|
|
216
|
+
gap: var(--cg-spacing-2);
|
|
217
|
+
}
|
|
218
|
+
.list-item {
|
|
219
|
+
display: flex;
|
|
220
|
+
align-items: flex-start;
|
|
221
|
+
gap: var(--cg-spacing-8);
|
|
222
|
+
padding: var(--cg-spacing-8) 0;
|
|
223
|
+
border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);
|
|
224
|
+
}
|
|
225
|
+
.list-item:last-child { border-bottom: none; }
|
|
226
|
+
|
|
227
|
+
.list-content { flex: 1; min-width: 0; }
|
|
228
|
+
.list-title {
|
|
229
|
+
font-size: var(--cg-font-size-sm);
|
|
230
|
+
font-weight: var(--cg-font-weight-medium);
|
|
231
|
+
color: var(--cg-color-surface-cards-text);
|
|
232
|
+
}
|
|
233
|
+
.list-title a {
|
|
234
|
+
color: var(--cg-color-surface-cards-text);
|
|
235
|
+
text-decoration: none;
|
|
236
|
+
border-radius: var(--cg-border-radius-50);
|
|
237
|
+
}
|
|
238
|
+
.list-title a:hover { text-decoration: underline; }
|
|
239
|
+
.list-title a:focus-visible {
|
|
240
|
+
outline: none;
|
|
241
|
+
box-shadow: 0 0 0 var(--cg-border-width-300) var(--cg-color-focus-ring);
|
|
242
|
+
}
|
|
243
|
+
.list-excerpt {
|
|
244
|
+
font-size: var(--cg-font-size-xs);
|
|
245
|
+
color: var(--cg-color-input-text-placeholder);
|
|
246
|
+
line-height: var(--cg-line-height-snug);
|
|
247
|
+
margin-top: var(--cg-spacing-4);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.sources-label {
|
|
251
|
+
font-size: var(--cg-font-size-xs);
|
|
252
|
+
font-weight: var(--cg-font-weight-semibold);
|
|
253
|
+
color: var(--cg-color-input-text-placeholder);
|
|
254
|
+
text-transform: uppercase;
|
|
255
|
+
letter-spacing: var(--cg-letter-spacing-wide);
|
|
256
|
+
margin-bottom: var(--cg-spacing-8);
|
|
257
|
+
}
|
|
258
|
+
`];
|
|
259
|
+
n([
|
|
260
|
+
g({ type: Array })
|
|
261
|
+
], c.prototype, "sources", 2);
|
|
262
|
+
n([
|
|
263
|
+
g()
|
|
264
|
+
], c.prototype, "mode", 2);
|
|
265
|
+
n([
|
|
266
|
+
g({ type: Number })
|
|
267
|
+
], c.prototype, "maxVisible", 2);
|
|
268
|
+
n([
|
|
269
|
+
p()
|
|
270
|
+
], c.prototype, "_expandedIndex", 2);
|
|
271
|
+
c = n([
|
|
272
|
+
h("ai-citation")
|
|
273
|
+
], c);
|
|
274
|
+
export {
|
|
275
|
+
c as AiCitation
|
|
276
|
+
};
|
|
277
|
+
//# sourceMappingURL=ai-citation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-citation.js","sources":["../../../src/components/ai-citation/ai-citation.ts"],"sourcesContent":["/**\n * @element ai-citation\n * Inline numbered citation badges or bibliography list with expandable\n * source cards. Two modes:\n * - inline: small superscript-style number badges next to AI text;\n * clicking a badge expands a source card below.\n * - list: bibliography-style ordered list (Sources section).\n *\n * Dogfooded primitives: <cg-tooltip> for the relevance dot.\n *\n * @fires {CustomEvent<{index: number, source: CitationSource}>} ai-citation-click\n */\nimport { LitElement, html, css, nothing } from 'lit';\nimport { property, state, customElement } from 'lit/decorators.js';\nimport { hostBlock, reducedMotion } from '../../styles/index.js';\nimport '../cg-tooltip/cg-tooltip.js';\n\ninterface CitationSource {\n title: string;\n url?: string;\n excerpt?: string;\n relevance?: number;\n}\n\n@customElement('ai-citation')\nexport class AiCitation extends LitElement {\n static override styles = [hostBlock, reducedMotion, css`\n /* ── Inline mode ── */\n .inline { display: inline; }\n\n .cite-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--cg-spacing-16);\n height: var(--cg-spacing-16);\n border-radius: var(--cg-border-radius-50);\n background: var(--cg-overlay-accent-light);\n color: var(--cg-color-surface-base-text);\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-bold);\n cursor: pointer;\n vertical-align: super;\n margin: 0 var(--cg-spacing-1);\n border: var(--cg-border-width-50) solid transparent;\n padding: 0;\n font-family: inherit;\n transition:\n background-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default),\n border-color var(--cg-transition-duration-fast) var(--cg-transition-easing-default);\n }\n .cite-badge:hover {\n background: var(--cg-overlay-accent-medium);\n border-color: var(--cg-overlay-accent-strong);\n }\n .cite-badge:focus-visible {\n outline: none;\n box-shadow: 0 0 0 var(--cg-border-width-300) var(--cg-overlay-accent-strong);\n }\n .cite-badge.more {\n width: auto;\n padding: 0 var(--cg-spacing-4);\n cursor: default;\n }\n\n /* ── Source card (expanded) ── */\n .source-card {\n background: var(--cg-color-surface-cards-background);\n border: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n border-radius: var(--cg-component-card-radius);\n padding: var(--cg-spacing-12);\n margin: var(--cg-spacing-8) 0;\n max-width: 400px;\n }\n\n .source-header {\n display: flex;\n align-items: center;\n gap: var(--cg-spacing-8);\n margin-bottom: var(--cg-spacing-6);\n }\n .source-number {\n width: var(--cg-spacing-20);\n height: var(--cg-spacing-20);\n border-radius: var(--cg-border-radius-50);\n background: var(--cg-overlay-accent-light);\n color: var(--cg-color-surface-cards-text);\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-bold);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n .source-title {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n color: var(--cg-color-surface-cards-text);\n text-decoration: none;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n border-radius: var(--cg-border-radius-50);\n }\n a.source-title:hover { text-decoration: underline; }\n a.source-title:focus-visible {\n outline: none;\n box-shadow: 0 0 0 var(--cg-border-width-300) var(--cg-color-focus-ring);\n }\n\n /* Relevance dot — uses ai-confidence tier-3 tokens (theme-aware) */\n .relevance-dot {\n width: var(--cg-spacing-8);\n height: var(--cg-spacing-8);\n border-radius: var(--cg-border-radius-full);\n flex-shrink: 0;\n }\n .relevance-dot.high { background: var(--cg-ai-confidence-high-color); }\n .relevance-dot.medium { background: var(--cg-ai-confidence-medium-color); }\n .relevance-dot.low { background: var(--cg-color-input-text-placeholder); }\n\n .source-excerpt {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n line-height: var(--cg-line-height-snug);\n margin-top: var(--cg-spacing-6);\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n .source-url {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n margin-top: var(--cg-spacing-4);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n /* ── List mode ── */\n .list {\n display: flex;\n flex-direction: column;\n gap: var(--cg-spacing-2);\n }\n .list-item {\n display: flex;\n align-items: flex-start;\n gap: var(--cg-spacing-8);\n padding: var(--cg-spacing-8) 0;\n border-bottom: var(--cg-border-width-50) solid var(--cg-color-surface-cards-border);\n }\n .list-item:last-child { border-bottom: none; }\n\n .list-content { flex: 1; min-width: 0; }\n .list-title {\n font-size: var(--cg-font-size-sm);\n font-weight: var(--cg-font-weight-medium);\n color: var(--cg-color-surface-cards-text);\n }\n .list-title a {\n color: var(--cg-color-surface-cards-text);\n text-decoration: none;\n border-radius: var(--cg-border-radius-50);\n }\n .list-title a:hover { text-decoration: underline; }\n .list-title a:focus-visible {\n outline: none;\n box-shadow: 0 0 0 var(--cg-border-width-300) var(--cg-color-focus-ring);\n }\n .list-excerpt {\n font-size: var(--cg-font-size-xs);\n color: var(--cg-color-input-text-placeholder);\n line-height: var(--cg-line-height-snug);\n margin-top: var(--cg-spacing-4);\n }\n\n .sources-label {\n font-size: var(--cg-font-size-xs);\n font-weight: var(--cg-font-weight-semibold);\n color: var(--cg-color-input-text-placeholder);\n text-transform: uppercase;\n letter-spacing: var(--cg-letter-spacing-wide);\n margin-bottom: var(--cg-spacing-8);\n }\n `];\n\n @property({ type: Array }) sources: CitationSource[] = [];\n @property() mode: 'inline' | 'list' = 'inline';\n @property({ type: Number }) maxVisible = 5;\n\n @state() private _expandedIndex = -1;\n\n private _sanitizeUrl(url?: string): string | undefined {\n if (!url) return undefined;\n const trimmed = url.trim();\n if (!trimmed) return undefined;\n const lower = trimmed.toLowerCase().replace(/[\\s\\u0000-\\u001f]/g, '');\n if (lower.startsWith('javascript:') || lower.startsWith('data:') || lower.startsWith('vbscript:')) return undefined;\n if (lower.startsWith('http:') || lower.startsWith('https:') || lower.startsWith('//')) return trimmed;\n const colonIndex = trimmed.indexOf(':');\n const slashIndex = trimmed.indexOf('/');\n if (colonIndex === -1 || (slashIndex !== -1 && slashIndex < colonIndex)) return trimmed;\n return undefined;\n }\n\n private _relevanceClass(r?: number): string {\n if (!r) return 'low';\n return r >= 0.7 ? 'high' : r >= 0.4 ? 'medium' : 'low';\n }\n\n private _relevanceLabel(r?: number): string {\n if (r === undefined || r === null) return 'Relevance unknown';\n return `Relevance: ${Math.round(r * 100)}%`;\n }\n\n private _handleCiteClick(index: number) {\n this._expandedIndex = this._expandedIndex === index ? -1 : index;\n this.dispatchEvent(new CustomEvent('ai-citation-click', {\n bubbles: true, composed: true,\n detail: { index, source: this.sources[index] },\n }));\n }\n\n private _renderCard(source: CitationSource, index: number) {\n const safeUrl = this._sanitizeUrl(source.url);\n return html`\n <div class=\"source-card\">\n <div class=\"source-header\">\n <div class=\"source-number\">${index + 1}</div>\n ${safeUrl\n ? html`<a class=\"source-title\" href=\"${safeUrl}\" target=\"_blank\" rel=\"noopener\">${source.title}</a>`\n : html`<span class=\"source-title\">${source.title}</span>`}\n <cg-tooltip content=${this._relevanceLabel(source.relevance)} position=\"top\">\n <span class=\"relevance-dot ${this._relevanceClass(source.relevance)}\" aria-label=${this._relevanceLabel(source.relevance)}></span>\n </cg-tooltip>\n </div>\n ${source.excerpt ? html`<div class=\"source-excerpt\">${source.excerpt}</div>` : nothing}\n ${safeUrl ? html`<div class=\"source-url\">${safeUrl}</div>` : nothing}\n </div>\n `;\n }\n\n override render() {\n if (!this.sources.length) return nothing;\n\n if (this.mode === 'list') {\n return html`\n <div class=\"list\">\n <div class=\"sources-label\">Sources (${this.sources.length})</div>\n ${this.sources.map((s, i) => {\n const safeUrl = this._sanitizeUrl(s.url);\n return html`\n <div class=\"list-item\">\n <div class=\"source-number\">${i + 1}</div>\n <div class=\"list-content\">\n <div class=\"list-title\">\n ${safeUrl ? html`<a href=\"${safeUrl}\" target=\"_blank\" rel=\"noopener\">${s.title}</a>` : s.title}\n </div>\n ${s.excerpt ? html`<div class=\"list-excerpt\">${s.excerpt}</div>` : nothing}\n </div>\n <cg-tooltip content=${this._relevanceLabel(s.relevance)} position=\"top\">\n <span class=\"relevance-dot ${this._relevanceClass(s.relevance)}\" aria-label=${this._relevanceLabel(s.relevance)}></span>\n </cg-tooltip>\n </div>\n `;\n })}\n </div>\n `;\n }\n\n const visible = this.sources.slice(0, this.maxVisible);\n const remaining = this.sources.length - this.maxVisible;\n\n return html`\n <span class=\"inline\">\n ${visible.map((s, i) => html`\n <button\n type=\"button\"\n class=\"cite-badge\"\n aria-label=\"Source ${i + 1}: ${s.title}\"\n aria-expanded=\"${this._expandedIndex === i}\"\n @click=${() => this._handleCiteClick(i)}\n >${i + 1}</button>\n ${this._expandedIndex === i ? this._renderCard(s, i) : nothing}\n `)}\n ${remaining > 0 ? html`<span class=\"cite-badge more\" aria-label=\"${remaining} more source${remaining > 1 ? 's' : ''}\">+${remaining}</span>` : nothing}\n </span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ai-citation': AiCitation;\n }\n}\n"],"names":["AiCitation","LitElement","url","trimmed","lower","colonIndex","slashIndex","r","index","source","safeUrl","html","nothing","s","visible","remaining","hostBlock","reducedMotion","css","__decorateClass","property","state","customElement"],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export interface EditorCursor {
|
|
3
|
+
user: string;
|
|
4
|
+
position: number;
|
|
5
|
+
color: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class AiCollaborativeEditor extends LitElement {
|
|
8
|
+
static styles: import('lit').CSSResult[];
|
|
9
|
+
content: string;
|
|
10
|
+
cursors: EditorCursor[];
|
|
11
|
+
editable: boolean;
|
|
12
|
+
placeholder: string;
|
|
13
|
+
title: string;
|
|
14
|
+
/** Sync state shown in the footer. Consumers flip this during save. */
|
|
15
|
+
sync: 'idle' | 'saving' | 'saved' | 'error';
|
|
16
|
+
/** ms of cursor inactivity before the user's label fades out. 0 disables. */
|
|
17
|
+
idleFadeDelay: number;
|
|
18
|
+
private _charCount;
|
|
19
|
+
private _wordCount;
|
|
20
|
+
private _idleUsers;
|
|
21
|
+
/** Per-cursor screen positions in textarea-relative pixels. */
|
|
22
|
+
private _cursorPositions;
|
|
23
|
+
private _textarea;
|
|
24
|
+
private _mirror;
|
|
25
|
+
private _idleTimers;
|
|
26
|
+
private _previousPositions;
|
|
27
|
+
updated(changed: Map<string, unknown>): void;
|
|
28
|
+
disconnectedCallback(): void;
|
|
29
|
+
private _updateCounts;
|
|
30
|
+
/**
|
|
31
|
+
* For each remote cursor, measure where its caret would render by inserting
|
|
32
|
+
* a zero-width marker at that offset in a hidden mirror element with the
|
|
33
|
+
* same metrics as the textarea, then reading the rect.
|
|
34
|
+
*
|
|
35
|
+
* Replaces the previous `charWidth = 8.4 / lineHeight = 22.4` heuristic
|
|
36
|
+
* which silently drifted under any zoom or font fallback.
|
|
37
|
+
*/
|
|
38
|
+
private _measureCursors;
|
|
39
|
+
/**
|
|
40
|
+
* When a remote cursor's `position` changes, the user is "active" — clear
|
|
41
|
+
* the idle flag and (re)start a timer that marks them idle after
|
|
42
|
+
* idleFadeDelay ms.
|
|
43
|
+
*/
|
|
44
|
+
private _handleCursorActivity;
|
|
45
|
+
private _onInput;
|
|
46
|
+
private _onSelect;
|
|
47
|
+
render(): import('lit').TemplateResult<1>;
|
|
48
|
+
}
|
|
49
|
+
declare global {
|
|
50
|
+
interface HTMLElementTagNameMap {
|
|
51
|
+
'ai-collaborative-editor': AiCollaborativeEditor;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=ai-collaborative-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-collaborative-editor.d.ts","sourceRoot":"","sources":["../../../src/components/ai-collaborative-editor/ai-collaborative-editor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAGrD,OAAO,2BAA2B,CAAC;AACnC,OAAO,6BAA6B,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBACa,qBAAsB,SAAQ,UAAU;IACnD,OAAgB,MAAM,4BA+KnB;IAEyB,OAAO,SAAM;IACd,OAAO,EAAE,YAAY,EAAE,CAAM;IAC3B,QAAQ,UAAQ;IACjB,WAAW,SAAmB;IACrB,KAAK,SAAM;IAChD,uEAAuE;IAC1C,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAU;IAClF,6EAA6E;IACnB,aAAa,SAAQ;IAEtE,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,UAAU,CAAqB;IAChD,+DAA+D;IACtD,OAAO,CAAC,gBAAgB,CAAoD;IAElE,OAAO,CAAC,SAAS,CAAuB;IACzC,OAAO,CAAC,OAAO,CAAkB;IAEnD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,kBAAkB,CAA6B;IAE9C,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAS5C,oBAAoB,IAAI,IAAI;IAMrC,OAAO,CAAC,aAAa;IAMrB;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAyBvB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IA6B7B,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,SAAS;IAYR,MAAM;CA2EhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,yBAAyB,EAAE,qBAAqB,CAAC;KAClD;CACF"}
|