@memberjunction/ng-dashboards 5.30.1 → 5.31.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/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +4 -4
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts +2 -1
- package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +8 -6
- package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +2 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +6 -5
- package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +6 -5
- package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +2 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +7 -4
- package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +3 -2
- package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/model-performance/model-performance.component.js +10 -6
- package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +2 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +6 -5
- package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +2 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +6 -5
- package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +55 -52
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -15
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +4 -3
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +2 -2
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +10 -8
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +2 -2
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.js +13 -10
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js +1 -1
- package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1181 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -0
- package/dist/AI/components/tags/tags-resource.component.js +7487 -0
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +25 -21
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/index.d.ts +1 -0
- package/dist/AI/index.d.ts.map +1 -1
- package/dist/AI/index.js +5 -0
- package/dist/AI/index.js.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +12 -4
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +5 -4
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -1
- package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +5 -5
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +11 -10
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-list.component.d.ts +2 -1
- package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
- package/dist/APIKeys/api-key-list.component.js +6 -5
- package/dist/APIKeys/api-key-list.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +4 -4
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +8 -6
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.d.ts +3 -2
- package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +10 -8
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.d.ts +2 -1
- package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +6 -5
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +2 -2
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts +2 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +6 -5
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +1 -1
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts +2 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +6 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts +2 -1
- package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +7 -5
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +4 -4
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +1 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +1 -1
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-providers-resource.component.js +3 -3
- package/dist/Communication/communication-providers-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +1 -1
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/Communication/communication-templates-resource.component.js +3 -3
- package/dist/Communication/communication-templates-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +5 -4
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +2 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +6 -4
- package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +11 -2
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +61 -27
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -2
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +19 -11
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +4 -2
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +11 -3
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +10 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/workspace/component-preview.component.js +18 -9
- package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts +11 -1
- package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-studio-state.service.js +23 -3
- package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts +6 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +16 -6
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js +1 -1
- package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +3 -3
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/Credentials/credentials-dashboard.component.js +1 -1
- package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js +13 -13
- package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +4 -0
- package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-adapter.js +5 -2
- package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +3 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -4
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +3 -2
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +7 -6
- package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +3 -2
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +6 -5
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +10 -9
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts +6 -1
- package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
- package/dist/DataExplorer/services/explorer-state.service.js +15 -5
- package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts +64 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js +400 -0
- package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts +42 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js +232 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts +14 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js +38 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts +24 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js +77 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts +88 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js +404 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts +12 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js +116 -0
- package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +55 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +204 -0
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +61 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js +485 -0
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts +52 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js +320 -0
- package/dist/DatabaseDesigner/components/modify/database-modify.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts +79 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js +378 -0
- package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts +85 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js +429 -0
- package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts +58 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js +333 -0
- package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts +36 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js +345 -0
- package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts +13 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts.map +1 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js +81 -0
- package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +30 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +131 -0
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts +19 -0
- package/dist/DatabaseDesigner/database-designer-erd.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer-erd.js +84 -0
- package/dist/DatabaseDesigner/database-designer-erd.js.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts +167 -0
- package/dist/DatabaseDesigner/database-designer.types.d.ts.map +1 -0
- package/dist/DatabaseDesigner/database-designer.types.js +26 -0
- package/dist/DatabaseDesigner/database-designer.types.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts +94 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js +392 -0
- package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts +78 -0
- package/dist/DatabaseDesigner/services/database-designer.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js +273 -0
- package/dist/DatabaseDesigner/services/database-designer.service.js.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts +79 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts.map +1 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js +204 -0
- package/dist/DatabaseDesigner/services/entity-wizard-state.service.js.map +1 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-config-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-config-dialog.component.js +6 -4
- package/dist/Home/action-pin-config-dialog.component.js.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts +2 -1
- package/dist/Home/action-pin-runner-dialog.component.d.ts.map +1 -1
- package/dist/Home/action-pin-runner-dialog.component.js +5 -4
- package/dist/Home/action-pin-runner-dialog.component.js.map +1 -1
- package/dist/Home/home-application.d.ts.map +1 -1
- package/dist/Home/home-application.js +10 -12
- package/dist/Home/home-application.js.map +1 -1
- package/dist/Home/home-dashboard.component.d.ts.map +1 -1
- package/dist/Home/home-dashboard.component.js +3 -3
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +1 -0
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +11 -10
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -2
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +1 -0
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +5 -4
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/Integration/services/integration-data.service.d.ts +5 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +27 -19
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +8 -6
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +6 -6
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +3 -3
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +6 -6
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-categories-resource.component.js +4 -4
- package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +6 -6
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +11 -10
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +5 -0
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +11 -3
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +8 -6
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts +2 -1
- package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +7 -5
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +12 -12
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Permissions/permissions-shared.d.ts +3 -3
- package/dist/Permissions/permissions-shared.d.ts.map +1 -1
- package/dist/Permissions/permissions-shared.js +5 -5
- package/dist/Permissions/permissions-shared.js.map +1 -1
- package/dist/Permissions/resource-access-resource.component.js +1 -1
- package/dist/Permissions/resource-access-resource.component.js.map +1 -1
- package/dist/Permissions/user-access-resource.component.js +1 -2
- package/dist/Permissions/user-access-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +5 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +21 -13
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +2 -2
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +9 -7
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts +6 -1
- package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
- package/dist/Testing/services/testing-instrumentation.service.js +21 -11
- package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.d.ts +3 -1
- package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +15 -11
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +5 -5
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/graph-resource.component.js +1 -2
- package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/labels-resource.component.js +3 -3
- package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js +1 -1
- package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +35 -34
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +6 -0
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +3 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -1
- package/dist/public-api.js.map +1 -1
- package/dist/shared/entity-field-display.d.ts +4 -3
- package/dist/shared/entity-field-display.d.ts.map +1 -1
- package/dist/shared/entity-field-display.js +9 -9
- package/dist/shared/entity-field-display.js.map +1 -1
- package/package.json +52 -51
|
@@ -47,7 +47,7 @@ export declare class ComponentStudioDashboardComponent extends BaseDashboard imp
|
|
|
47
47
|
private prefsLoaded;
|
|
48
48
|
fileInput?: ElementRef<HTMLInputElement>;
|
|
49
49
|
protected destroy$: Subject<void>;
|
|
50
|
-
private metadata;
|
|
50
|
+
private get metadata();
|
|
51
51
|
constructor(state: ComponentStudioStateService, versionService: ComponentVersionService, cdr: ChangeDetectorRef, notificationService: MJNotificationService);
|
|
52
52
|
GetResourceDisplayName(data: ResourceData): Promise<string>;
|
|
53
53
|
ngAfterViewInit(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-studio-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/ComponentStudio/component-studio-dashboard.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,aAAa,EAAE,SAAS,EAAa,UAAU,EAAE,iBAAiB,EAAgB,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,OAAO,EAGL,YAAY,EAEb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,OAAO,EAAa,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAE5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAuB,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC7H,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gEAAgE,CAAC;;AAenG;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAQa,iCAAkC,SAAQ,aAAc,YAAW,aAAa,EAAE,SAAS;IA4C7F,KAAK,EAAE,2BAA2B;IAClC,cAAc,EAAE,uBAAuB;IAC9C,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,mBAAmB;IA7C7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAqC;IAGpE,cAAc,SAAO;IACrB,eAAe,SAAO;IACtB,WAAW,SAAa;IACxB,UAAU,SAAa;IAC9B,OAAO,CAAC,kBAAkB,CAAM;IAGzB,kBAAkB,UAAS;IAG3B,UAAU,UAAS;IAC1B,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,gBAAgB,CAAK;IAGtB,oBAAoB,UAAS;IAC7B,sBAAsB,UAAS;IAG/B,sBAAsB,UAAS;IAC/B,qBAAqB,UAAS;IAC9B,qBAAqB,UAAS;IAC9B,oBAAoB,UAAS;IAC7B,sBAAsB,UAAS;IAC/B,2BAA2B,UAAS;IAGpC,aAAa,EAAE,IAAI,GAAG,IAAI,CAAQ;IAGzC,OAAO,CAAC,WAAW,CAAS;IAEe,SAAS,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAEpF,UAAmB,QAAQ,gBAAuB;IAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"component-studio-dashboard.component.d.ts","sourceRoot":"","sources":["../../src/ComponentStudio/component-studio-dashboard.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,6 @@ var ComponentStudioDashboardComponent_1;
|
|
|
8
8
|
import { Component, ViewChild, HostListener } from '@angular/core';
|
|
9
9
|
import { BaseDashboard } from '@memberjunction/ng-shared';
|
|
10
10
|
import { RegisterClass } from '@memberjunction/global';
|
|
11
|
-
import { Metadata } from '@memberjunction/core';
|
|
12
11
|
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
13
12
|
import { Subject, takeUntil } from 'rxjs';
|
|
14
13
|
import { ComponentStudioStateService } from './services/component-studio-state.service';
|
|
@@ -357,7 +356,7 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
357
356
|
prefsLoaded = false;
|
|
358
357
|
fileInput;
|
|
359
358
|
destroy$ = new Subject();
|
|
360
|
-
metadata
|
|
359
|
+
get metadata() { return this.ProviderToUse; }
|
|
361
360
|
constructor(state, versionService, cdr, notificationService) {
|
|
362
361
|
super();
|
|
363
362
|
this.state = state;
|
|
@@ -384,7 +383,9 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
384
383
|
this.destroy$.complete();
|
|
385
384
|
}
|
|
386
385
|
initDashboard() {
|
|
387
|
-
//
|
|
386
|
+
// Wire up provider-aware services for multi-provider support
|
|
387
|
+
this.state.Provider = this.ProviderToUse;
|
|
388
|
+
this.versionService.Provider = this.ProviderToUse;
|
|
388
389
|
}
|
|
389
390
|
loadData() {
|
|
390
391
|
this.state.LoadComponents();
|
|
@@ -745,7 +746,7 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
745
746
|
version = await this.metadata.GetEntityObject('MJ: Artifact Versions');
|
|
746
747
|
version.ArtifactID = artifact.ID;
|
|
747
748
|
version.UserID = this.metadata.CurrentUser.ID;
|
|
748
|
-
const rv =
|
|
749
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
749
750
|
const versionsResult = await rv.RunView({
|
|
750
751
|
EntityName: 'MJ: Artifact Versions',
|
|
751
752
|
ExtraFilter: `ArtifactID = '${artifact.ID}'`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-studio-dashboard.component.js","sourceRoot":"","sources":["../../src/ComponentStudio/component-studio-dashboard.component.ts","../../src/ComponentStudio/component-studio-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ViewChild, ElementRef, ChangeDetectorRef, HostListener } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Metadata } from '@memberjunction/core';\nimport {\n MJComponentEntityExtended,\n MJArtifactVersionEntity,\n ResourceData,\n UserInfoEngine\n} from '@memberjunction/core-entities';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ArtifactSelectionResult } from './components/artifact-selection-dialog.component';\nimport { ArtifactLoadResult } from './components/artifact-load-dialog.component';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { ComponentStudioStateService, FileLoadedComponent, ComponentError } from './services/component-studio-state.service';\nimport { ComponentVersionService } from './services/component-version.service';\nimport { SaveVersionResult } from './components/save-version-dialog/save-version-dialog.component';\nimport { RunView } from '@memberjunction/core';\n\n/**\n * User preferences persisted via UserInfoEngine.\n */\ninterface ComponentStudioPreferences {\n leftPanelWidth: number;\n rightPanelWidth: number;\n previewFlexPercent: number;\n isAIPanelCollapsed: boolean;\n isLeftPanelCollapsed: boolean;\n isEditorPanelCollapsed: boolean;\n}\n\n/**\n * Result from the New Component dialog.\n */\nexport interface NewComponentResult {\n name: string;\n title: string;\n description: string;\n type: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-component-studio-dashboard',\n templateUrl: './component-studio-dashboard.component.html',\n styleUrls: ['./component-studio-dashboard.component.css'],\n providers: [ComponentStudioStateService, ComponentVersionService]\n})\n@RegisterClass(BaseDashboard, 'ComponentStudioDashboard')\nexport class ComponentStudioDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n\n private static readonly USER_PREFS_KEY = 'ComponentStudio.UserPreferences';\n\n // --- Panel widths ---\n public leftPanelWidth = 340;\n public rightPanelWidth = 380;\n public previewFlex = '1 1 50%';\n public editorFlex = '1 1 50%';\n private previewFlexPercent = 50;\n\n // --- Dropdown states ---\n public exportDropdownOpen = false;\n\n // --- Resize state ---\n public IsResizing = false;\n private resizeType: 'left' | 'right' | 'center' | null = null;\n private resizeStartX = 0;\n private resizeStartValue = 0;\n\n // --- Collapsible panels ---\n public IsLeftPanelCollapsed = false;\n public IsEditorPanelCollapsed = false;\n\n // --- Dialog states ---\n public ShowNewComponentDialog = false;\n public ShowKeyboardShortcuts = false;\n public ShowSaveVersionDialog = false;\n public ShowTextImportDialog = false;\n public ShowArtifactLoadDialog = false;\n public ShowArtifactSelectionDialog = false;\n\n // --- Status bar ---\n public LastSavedTime: Date | null = null;\n\n // --- Preferences ---\n private prefsLoaded = false;\n\n @ViewChild('fileInput', { static: false }) fileInput?: ElementRef<HTMLInputElement>;\n\n protected override destroy$ = new Subject<void>();\n private metadata: Metadata = new Metadata();\n\n constructor(\n public state: ComponentStudioStateService,\n public versionService: ComponentVersionService,\n private cdr: ChangeDetectorRef,\n private notificationService: MJNotificationService\n ) {\n super();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Component Studio';\n }\n\n async ngAfterViewInit() {\n this.initDashboard();\n\n // Subscribe to state changes for change detection\n this.state.StateChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.cdr.detectChanges();\n });\n\n this.loadUserPreferences();\n await this.state.LoadComponents();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected initDashboard(): void {\n // Initialize dashboard\n }\n\n protected loadData(): void {\n this.state.LoadComponents();\n }\n\n // ============================================================\n // USER PREFERENCES\n // ============================================================\n\n private loadUserPreferences(): void {\n try {\n const saved = UserInfoEngine.Instance.GetSetting(ComponentStudioDashboardComponent.USER_PREFS_KEY);\n if (saved) {\n const prefs = JSON.parse(saved) as ComponentStudioPreferences;\n this.applyPreferences(prefs);\n }\n } catch (error) {\n console.warn('[ComponentStudio] Failed to load user preferences:', error);\n } finally {\n this.prefsLoaded = true;\n }\n }\n\n private applyPreferences(prefs: ComponentStudioPreferences): void {\n if (prefs.leftPanelWidth) this.leftPanelWidth = prefs.leftPanelWidth;\n if (prefs.rightPanelWidth) this.rightPanelWidth = prefs.rightPanelWidth;\n if (prefs.previewFlexPercent) {\n this.previewFlexPercent = prefs.previewFlexPercent;\n this.previewFlex = `1 1 ${prefs.previewFlexPercent}%`;\n this.editorFlex = `1 1 ${100 - prefs.previewFlexPercent}%`;\n }\n if (prefs.isAIPanelCollapsed != null) {\n this.state.IsAIPanelCollapsed = prefs.isAIPanelCollapsed;\n }\n if (prefs.isLeftPanelCollapsed != null) {\n this.IsLeftPanelCollapsed = prefs.isLeftPanelCollapsed;\n }\n if (prefs.isEditorPanelCollapsed != null) {\n this.IsEditorPanelCollapsed = prefs.isEditorPanelCollapsed;\n }\n }\n\n private getCurrentPreferences(): ComponentStudioPreferences {\n return {\n leftPanelWidth: this.leftPanelWidth,\n rightPanelWidth: this.rightPanelWidth,\n previewFlexPercent: this.previewFlexPercent,\n isAIPanelCollapsed: this.state.IsAIPanelCollapsed,\n isLeftPanelCollapsed: this.IsLeftPanelCollapsed,\n isEditorPanelCollapsed: this.IsEditorPanelCollapsed\n };\n }\n\n private saveUserPreferences(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSetting(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n private saveUserPreferencesDebounced(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSettingDebounced(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n // ============================================================\n // KEYBOARD SHORTCUTS\n // ============================================================\n\n @HostListener('document:keydown', ['$event'])\n OnKeyDown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n const isInputFocused = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n\n // Ctrl+S / Cmd+S = Save Version\n if ((event.ctrlKey || event.metaKey) && event.key === 's') {\n event.preventDefault();\n if (this.state.SelectedComponent) {\n this.SaveVersion();\n }\n }\n\n // Ctrl+N / Cmd+N = New Component\n if ((event.ctrlKey || event.metaKey) && event.key === 'n') {\n event.preventDefault();\n this.OnNewComponent();\n }\n\n // Ctrl+/ or ? = Toggle keyboard shortcuts\n if ((event.ctrlKey || event.metaKey) && event.key === '/') {\n event.preventDefault();\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n } else if (event.key === '?' && !isInputFocused) {\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n }\n\n // Escape = Close overlays\n if (event.key === 'Escape') {\n if (this.ShowKeyboardShortcuts) {\n this.ShowKeyboardShortcuts = false;\n this.cdr.detectChanges();\n }\n }\n }\n\n // ============================================================\n // SAVE VERSION\n // ============================================================\n\n SaveVersion(): void {\n if (!this.state.SelectedComponent) return;\n this.ShowSaveVersionDialog = true;\n this.cdr.detectChanges();\n }\n\n async OnSaveVersionConfirm(result: SaveVersionResult): Promise<void> {\n this.ShowSaveVersionDialog = false;\n\n let success: boolean;\n if (result.Mode === 'update') {\n success = await this.versionService.UpdateCurrentVersion(result.Comment || undefined);\n } else {\n success = await this.versionService.SaveVersion(result.Comment || undefined);\n }\n\n if (success) {\n this.LastSavedTime = new Date();\n this.notificationService.CreateSimpleNotification(\n `Saved as v${this.versionService.CurrentVersionNumber}`,\n 'success',\n 3000\n );\n this.state.HasUnsavedChanges = false;\n } else {\n this.notificationService.CreateSimpleNotification(\n 'Failed to save version',\n 'error'\n );\n }\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // REFRESH COMPONENT\n // ============================================================\n\n RefreshComponent(): void {\n this.state.RefreshComponent.emit();\n }\n\n // ============================================================\n // AI PANEL\n // ============================================================\n\n ToggleAIPanel(): void {\n this.state.IsAIPanelCollapsed = !this.state.IsAIPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleLeftPanel(): void {\n this.IsLeftPanelCollapsed = !this.IsLeftPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleEditorPanel(): void {\n this.IsEditorPanelCollapsed = !this.IsEditorPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n OnAskAIToFix(error: ComponentError): void {\n // Open AI panel if collapsed\n if (this.state.IsAIPanelCollapsed) {\n this.state.IsAIPanelCollapsed = false;\n }\n // Send error to AI panel\n this.state.SendErrorToAI.emit(error);\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // NEW COMPONENT\n // ============================================================\n\n OnNewComponent(): void {\n this.ShowNewComponentDialog = true;\n this.cdr.detectChanges();\n }\n\n OnNewComponentDialogClose(result: NewComponentResult | null): void {\n this.ShowNewComponentDialog = false;\n if (!result) {\n this.cdr.detectChanges();\n return;\n }\n this.createComponentFromResult(result);\n this.cdr.detectChanges();\n }\n\n OnQuickStart(type: string): void {\n const typeNames: Record<string, string> = {\n dashboard: 'Dashboard',\n report: 'Report',\n chart: 'Chart',\n form: 'Form'\n };\n const typeName = typeNames[type] || 'Component';\n this.createComponentFromResult({\n name: `New ${typeName}`,\n title: `New ${typeName}`,\n description: '',\n type\n });\n }\n\n private createComponentFromResult(result: NewComponentResult): void {\n const newSpec: ComponentSpec = {\n name: result.name,\n title: result.title,\n description: result.description,\n type: result.type,\n location: 'embedded',\n exampleUsage: '',\n code: this.getTemplateCode(result.name, result.type),\n functionalRequirements: '',\n dataRequirements: { mode: 'views', entities: [], queries: [], description: '' },\n technicalDesign: ''\n } as ComponentSpec;\n\n const fileComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.name,\n description: result.description,\n specification: newSpec,\n filename: 'new-component.json',\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.type || 'Dashboard',\n status: 'New'\n };\n\n this.state.AddFileLoadedComponent(fileComponent);\n this.state.ExpandedComponent = fileComponent;\n this.state.RunComponent(fileComponent);\n }\n\n private getTemplateCode(name: string, type: string): string {\n return `function Component({ utilities, settings }) {\n const React = utilities.React;\n const { useState } = React;\n\n return React.createElement('div', {\n style: { padding: '24px', fontFamily: 'system-ui' }\n },\n React.createElement('h2', null, '${name}'),\n React.createElement('p', null, 'Start building your ${type || 'component'} here.')\n );\n}`;\n }\n\n // ============================================================\n // IMPORT / EXPORT\n // ============================================================\n\n ToggleExportDropdown(): void {\n this.exportDropdownOpen = !this.exportDropdownOpen;\n }\n\n @HostListener('document:click', ['$event'])\n OnDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (!target.closest('.header-dropdown')) {\n this.exportDropdownOpen = false;\n }\n }\n\n ImportFromFile(): void {\n this.fileInput?.nativeElement.click();\n }\n\n ImportFromText(): void {\n this.ShowTextImportDialog = true;\n this.cdr.detectChanges();\n }\n\n OnTextImportSpec(spec: ComponentSpec): void {\n this.ShowTextImportDialog = false;\n this.handleSpecImport(spec, 'text-import.json', 'Text');\n this.cdr.detectChanges();\n }\n\n OnTextImportCancel(): void {\n this.ShowTextImportDialog = false;\n this.cdr.detectChanges();\n }\n\n ImportFromArtifact(): void {\n this.ShowArtifactLoadDialog = true;\n this.cdr.detectChanges();\n }\n\n OnArtifactLoadClose(result: ArtifactLoadResult | undefined): void {\n this.ShowArtifactLoadDialog = false;\n if (!result) {\n this.cdr.detectChanges();\n return;\n }\n\n const artifactComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.spec.name,\n description: result.spec.description,\n specification: result.spec,\n filename: `${result.artifactName} (v${result.versionNumber})`,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.spec.type || 'Component',\n status: 'Artifact',\n sourceArtifactID: result.artifactID,\n sourceVersionID: result.versionID\n };\n\n this.state.AddFileLoadedComponent(artifactComponent);\n this.state.ExpandedComponent = artifactComponent;\n this.state.RunComponent(artifactComponent);\n\n this.notificationService.CreateSimpleNotification(\n `Loaded \"${result.spec.name}\" from artifact`,\n 'success',\n 3000\n );\n this.cdr.detectChanges();\n }\n\n async HandleFileSelect(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n if (!file || !file.name.endsWith('.json')) return;\n\n try {\n const content = await this.readFile(file);\n const spec = JSON.parse(content) as ComponentSpec;\n if (!spec.name || !spec.code) {\n console.error('Invalid spec: missing name or code');\n return;\n }\n this.handleSpecImport(spec, file.name, 'File');\n input.value = '';\n } catch (error) {\n console.error('Error loading file:', error);\n }\n }\n\n private handleSpecImport(spec: ComponentSpec, filename: string, status: string): void {\n const component: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: spec.name,\n description: spec.description,\n specification: spec,\n filename,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: spec.type || 'Component',\n status\n };\n\n this.state.AddFileLoadedComponent(component);\n this.state.ExpandedComponent = component;\n this.state.RunComponent(component);\n }\n\n ExportToArtifact(): void {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n this.ShowArtifactSelectionDialog = true;\n this.cdr.detectChanges();\n }\n\n async OnArtifactSelectionClose(result: ArtifactSelectionResult | undefined): Promise<void> {\n this.ShowArtifactSelectionDialog = false;\n if (!result?.action) {\n this.cdr.detectChanges();\n return;\n }\n\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec) return;\n\n try {\n const artifact = result.artifact;\n let version: MJArtifactVersionEntity;\n\n if (result.action === 'update-version' && result.versionToUpdate) {\n version = result.versionToUpdate;\n } else {\n version = await this.metadata.GetEntityObject<MJArtifactVersionEntity>('MJ: Artifact Versions');\n version.ArtifactID = artifact.ID;\n version.UserID = this.metadata.CurrentUser.ID;\n\n const rv = new RunView();\n const versionsResult = await rv.RunView<MJArtifactVersionEntity>({\n EntityName: 'MJ: Artifact Versions',\n ExtraFilter: `ArtifactID = '${artifact.ID}'`,\n OrderBy: 'VersionNumber DESC',\n MaxRows: 1,\n ResultType: 'entity_object'\n });\n\n version.VersionNumber = (versionsResult.Success && versionsResult.Results?.length > 0)\n ? versionsResult.Results[0].VersionNumber + 1\n : 1;\n }\n\n version.Content = JSON.stringify(currentSpec, null, 2);\n version.ContentHash = await this.generateSHA256Hash(version.Content);\n version.Name = currentSpec.name;\n version.Description = currentSpec.description || null;\n const timestamp = new Date().toISOString();\n const actionText = result.action === 'update-version' ? 'Updated' : 'Created';\n version.Comments = `${actionText} from Component Studio at ${timestamp}`;\n\n const saved = await version.Save();\n if (saved) {\n this.notificationService.CreateSimpleNotification(\n `Saved as artifact version ${version.VersionNumber}`,\n 'success',\n 3000\n );\n } else {\n this.notificationService.CreateSimpleNotification('Failed to save artifact version', 'error');\n }\n } catch (error) {\n console.error('Error saving to artifact:', error);\n this.notificationService.CreateSimpleNotification('Error saving to artifact', 'error');\n }\n this.cdr.detectChanges();\n }\n\n ExportToFile(): void {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n const componentName = this.state.GetComponentName(this.state.SelectedComponent);\n const filename = componentName.replace(/\\s+/g, '-').replace(/[^a-z0-9\\-]/gi, '-').toLowerCase() + '.json';\n const blob = new Blob([JSON.stringify(currentSpec, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n async ExportToClipboard(): Promise<void> {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec) return;\n\n try {\n await navigator.clipboard.writeText(JSON.stringify(currentSpec, null, 2));\n this.notificationService.CreateSimpleNotification('Copied to clipboard', 'success', 2000);\n } catch (error) {\n this.notificationService.CreateSimpleNotification('Failed to copy to clipboard', 'error');\n }\n }\n\n async RefreshData(): Promise<void> {\n await this.state.LoadComponents();\n }\n\n // ============================================================\n // RESIZE HANDLERS\n // ============================================================\n\n OnLeftResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'left';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.leftPanelWidth;\n this.addResizeListeners();\n }\n\n OnRightResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'right';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.rightPanelWidth;\n this.addResizeListeners();\n }\n\n OnCenterResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'center';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.previewFlexPercent;\n this.addResizeListeners();\n }\n\n private addResizeListeners(): void {\n this.IsResizing = true;\n document.addEventListener('mousemove', this.onResizeMove);\n document.addEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onResizeMove = (event: MouseEvent): void => {\n if (this.resizeType === 'left') {\n const delta = event.clientX - this.resizeStartX;\n this.leftPanelWidth = Math.max(280, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'right') {\n const delta = this.resizeStartX - event.clientX;\n this.rightPanelWidth = Math.max(300, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'center') {\n const centerPanel = document.querySelector('.panel-center') as HTMLElement;\n if (centerPanel) {\n const rect = centerPanel.getBoundingClientRect();\n const relativeX = event.clientX - rect.left;\n const percent = Math.max(20, Math.min(80, (relativeX / rect.width) * 100));\n this.previewFlexPercent = percent;\n this.previewFlex = `1 1 ${percent}%`;\n this.editorFlex = `1 1 ${100 - percent}%`;\n }\n }\n this.cdr.detectChanges();\n };\n\n private onResizeEnd = (): void => {\n this.IsResizing = false;\n this.resizeType = null;\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveUserPreferencesDebounced();\n };\n\n // ============================================================\n // HELPERS\n // ============================================================\n\n private readFile(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (e) => resolve(e.target?.result as string);\n reader.onerror = reject;\n reader.readAsText(file);\n });\n }\n\n private async generateSHA256Hash(content: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","<div class=\"component-studio\" [class.resizing]=\"IsResizing\">\n\n <!-- ============================================================\n TOOLBAR — Unified bar with integrated breadcrumb\n Left: hamburger + breadcrumb context\n Right: Save | Export | divider | AI | Keyboard | Refresh\n ============================================================ -->\n <div class=\"studio-toolbar\">\n <div class=\"toolbar-context\">\n <!-- Toggle left panel -->\n <button class=\"tb-btn icon-only\" title=\"Toggle browser panel\" (click)=\"ToggleLeftPanel()\">\n <i class=\"fa-solid fa-bars\"></i>\n </button>\n\n @if (state.SelectedComponent) {\n <span class=\"breadcrumb-type\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.GetComponentType(state.SelectedComponent) || 'Component' }}\n </span>\n <span class=\"breadcrumb-sep\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n <span class=\"component-label\">{{ state.GetComponentName(state.SelectedComponent) }}</span>\n\n @if (state.IsRunning) {\n <span class=\"running-badge\">\n <span class=\"running-dot-small\"></span>\n Running\n </span>\n }\n @if (state.HasUnsavedChanges) {\n <span class=\"unsaved-dot\" title=\"Unsaved changes\"></span>\n }\n }\n </div>\n\n <div class=\"toolbar-spacer\"></div>\n\n <div class=\"toolbar-actions\">\n <!-- Save Version -->\n @if (state.SelectedComponent) {\n <button class=\"tb-btn primary\" (click)=\"SaveVersion()\" title=\"Save version (Ctrl+S)\">\n <i class=\"fa-solid fa-save\"></i> Save\n </button>\n }\n\n <!-- Refresh Component -->\n @if (state.SelectedComponent && state.IsRunning) {\n <button class=\"tb-btn\" (click)=\"RefreshComponent()\" title=\"Refresh component\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n }\n\n <!-- Export -->\n @if (state.SelectedComponent && state.IsRunning) {\n <div class=\"header-dropdown\" [class.open]=\"exportDropdownOpen\">\n <button class=\"tb-btn\" (click)=\"ToggleExportDropdown()\">\n <i class=\"fa-solid fa-file-export\"></i> Export\n <i class=\"fa-solid fa-chevron-down dropdown-icon\"></i>\n </button>\n @if (exportDropdownOpen) {\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" (click)=\"ExportToArtifact()\">\n <i class=\"fa-solid fa-save\"></i> To Artifact\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToFile()\">\n <i class=\"fa-solid fa-file\"></i> To File\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToClipboard()\">\n <i class=\"fa-solid fa-clipboard\"></i> To Clipboard\n </button>\n </div>\n }\n </div>\n }\n\n <span class=\"toolbar-divider\"></span>\n\n <!-- AI Panel Toggle -->\n <button class=\"tb-btn icon-only\" [class.active-toggle]=\"!state.IsAIPanelCollapsed\"\n (click)=\"ToggleAIPanel()\"\n [title]=\"state.IsAIPanelCollapsed ? 'Show AI Assistant' : 'Hide AI Assistant'\">\n <i class=\"fa-solid fa-robot\"></i>\n </button>\n\n <!-- Keyboard Shortcuts -->\n <button class=\"tb-btn icon-only\" (click)=\"ShowKeyboardShortcuts = !ShowKeyboardShortcuts\"\n title=\"Keyboard shortcuts (?)\">\n <i class=\"fa-solid fa-keyboard\"></i>\n </button>\n\n <!-- Refresh -->\n <button class=\"tb-btn icon-only\" (click)=\"RefreshData()\" [disabled]=\"state.IsLoading\" title=\"Refresh data\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </button>\n </div>\n\n <!-- Hidden file input -->\n <input #fileInput type=\"file\" accept=\".json\" (change)=\"HandleFileSelect($event)\" style=\"display: none;\" />\n </div>\n\n <!-- ============================================================\n THREE-PANEL BODY\n ============================================================ -->\n <div class=\"studio-body\">\n\n <!-- Left Panel: Component Browser (collapsible) -->\n @if (!IsLeftPanelCollapsed) {\n <div class=\"panel panel-left\" [style.width.px]=\"leftPanelWidth\">\n <mj-component-browser\n (NewComponent)=\"OnNewComponent()\"\n (ImportFromFile)=\"ImportFromFile()\"\n (ImportFromText)=\"ImportFromText()\"\n (ImportFromArtifact)=\"ImportFromArtifact()\">\n </mj-component-browser>\n </div>\n\n <!-- Resize Handle: Left <-> Center -->\n <div class=\"resize-handle\" (mousedown)=\"OnLeftResizeStart($event)\"></div>\n }\n\n <!-- Center Panel: Workspace (side-by-side: Preview LEFT, Editor RIGHT) -->\n <div class=\"panel panel-center\">\n @if (state.SelectedComponent) {\n <!-- Preview (left side) -->\n <div class=\"workspace-preview\" [class.full-width]=\"IsEditorPanelCollapsed\" [style.flex]=\"IsEditorPanelCollapsed ? '1 1 100%' : previewFlex\">\n <div class=\"preview-sub-header\">\n <div class=\"preview-sub-left\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Preview</span>\n </div>\n <div class=\"preview-sub-right\">\n <!-- Toggle editor panel -->\n <button class=\"toggle-editors-btn\" [class.active]=\"!IsEditorPanelCollapsed\"\n (click)=\"ToggleEditorPanel()\" title=\"Toggle editor panel\">\n <i class=\"fa-solid fa-columns\"></i>\n </button>\n </div>\n </div>\n <div class=\"preview-body\">\n <mj-component-preview\n (AskAIToFix)=\"OnAskAIToFix($event)\">\n </mj-component-preview>\n </div>\n </div>\n\n <!-- Resize Handle: Preview <-> Editor (obvious center divider) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"resize-handle center-divider\" (mousedown)=\"OnCenterResizeStart($event)\">\n <div class=\"divider-grip\"></div>\n </div>\n }\n\n <!-- Editor Tabs (right side, collapsible) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"workspace-editors\" [style.flex]=\"editorFlex\">\n <mj-editor-tabs></mj-editor-tabs>\n </div>\n }\n } @else {\n <!-- Enhanced Empty State -->\n <div class=\"empty-state\">\n <div class=\"empty-state-content\">\n <div class=\"empty-state-icon\">\n <i class=\"fa-solid fa-rocket\"></i>\n </div>\n <h2>Ready to Build</h2>\n <p>Select a component from the browser or create a new one to get started</p>\n <div class=\"empty-state-actions\">\n <button mjButton variant=\"primary\" (click)=\"OnNewComponent()\">\n <span class=\"fa-solid fa-plus\"></span> New Component\n </button>\n <button mjButton (click)=\"ImportFromFile()\">\n <span class=\"fa-solid fa-file-import\"></span> Import\n </button>\n </div>\n <div class=\"quick-start-templates\">\n <span class=\"quick-start-label\">Quick start:</span>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('dashboard')\">\n <i class=\"fa-solid fa-chart-line\"></i> Dashboard\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('report')\">\n <i class=\"fa-solid fa-file-alt\"></i> Report\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('chart')\">\n <i class=\"fa-solid fa-chart-pie\"></i> Chart\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('form')\">\n <i class=\"fa-solid fa-edit\"></i> Form\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Resize Handle: Center <-> Right -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"resize-handle\" (mousedown)=\"OnRightResizeStart($event)\"></div>\n }\n\n <!-- Right Panel: AI Assistant -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"panel panel-right\" [style.width.px]=\"rightPanelWidth\">\n <mj-ai-assistant-panel></mj-ai-assistant-panel>\n </div>\n }\n </div>\n\n <!-- ============================================================\n STATUS BAR\n ============================================================ -->\n <div class=\"status-bar\">\n <div class=\"status-left\">\n <span class=\"status-item\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.FilteredComponents.length }} component{{ state.FilteredComponents.length !== 1 ? 's' : '' }}\n </span>\n </div>\n <div class=\"status-right\">\n @if (LastSavedTime) {\n <span class=\"status-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n Saved {{ LastSavedTime | date:'shortTime' }}\n </span>\n }\n <span class=\"status-item shortcut-hint\">\n <kbd>?</kbd> Shortcuts\n </span>\n </div>\n </div>\n\n <!-- ============================================================\n KEYBOARD SHORTCUTS OVERLAY\n ============================================================ -->\n @if (ShowKeyboardShortcuts) {\n <div class=\"shortcuts-overlay\" (click)=\"ShowKeyboardShortcuts = false\">\n <div class=\"shortcuts-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"shortcuts-header\">\n <h3>Keyboard Shortcuts</h3>\n <button class=\"shortcuts-close\" (click)=\"ShowKeyboardShortcuts = false\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"shortcuts-body\">\n <div class=\"shortcut-group\">\n <h4>General</h4>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>S</kbd></span>\n <span class=\"shortcut-desc\">Save version</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>N</kbd></span>\n <span class=\"shortcut-desc\">New component</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>?</kbd></span>\n <span class=\"shortcut-desc\">Toggle shortcuts</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Esc</kbd></span>\n <span class=\"shortcut-desc\">Close overlay</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- ============================================================\n NEW COMPONENT DIALOG\n ============================================================ -->\n @if (ShowNewComponentDialog) {\n <mj-new-component-dialog\n [Visible]=\"ShowNewComponentDialog\"\n (Close)=\"OnNewComponentDialogClose($event)\">\n </mj-new-component-dialog>\n }\n\n @if (ShowSaveVersionDialog) {\n <mj-save-version-dialog\n [Visible]=\"ShowSaveVersionDialog\"\n [CurrentVersion]=\"versionService.CurrentVersionNumber\"\n (Save)=\"OnSaveVersionConfirm($event)\"\n (Cancel)=\"ShowSaveVersionDialog = false\">\n </mj-save-version-dialog>\n }\n\n <!-- Text Import Dialog -->\n @if (ShowTextImportDialog) {\n <mj-dialog [Visible]=\"true\" Title=\"Import Component from Text\" (Close)=\"OnTextImportCancel()\" [Width]=\"700\" [MinWidth]=\"500\">\n <app-text-import-dialog\n (importSpec)=\"OnTextImportSpec($event)\"\n (cancelDialog)=\"OnTextImportCancel()\">\n </app-text-import-dialog>\n </mj-dialog>\n }\n\n <!-- Artifact Load Dialog -->\n @if (ShowArtifactLoadDialog) {\n <app-artifact-load-dialog\n [Visible]=\"ShowArtifactLoadDialog\"\n (Close)=\"OnArtifactLoadClose($event)\">\n </app-artifact-load-dialog>\n }\n\n <!-- Artifact Selection Dialog -->\n @if (ShowArtifactSelectionDialog) {\n <app-artifact-selection-dialog\n [Visible]=\"ShowArtifactSelectionDialog\"\n (Close)=\"OnArtifactSelectionClose($event)\">\n </app-artifact-selection-dialog>\n }\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"component-studio-dashboard.component.js","sourceRoot":"","sources":["../../src/ComponentStudio/component-studio-dashboard.component.ts","../../src/ComponentStudio/component-studio-dashboard.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, AfterViewInit, OnDestroy, ViewChild, ElementRef, ChangeDetectorRef, HostListener } from '@angular/core';\nimport { BaseDashboard } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { Metadata, IMetadataProvider } from '@memberjunction/core';\nimport {\n MJComponentEntityExtended,\n MJArtifactVersionEntity,\n ResourceData,\n UserInfoEngine\n} from '@memberjunction/core-entities';\nimport { Subject, takeUntil } from 'rxjs';\nimport { ComponentSpec } from '@memberjunction/interactive-component-types';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { ArtifactSelectionResult } from './components/artifact-selection-dialog.component';\nimport { ArtifactLoadResult } from './components/artifact-load-dialog.component';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { ComponentStudioStateService, FileLoadedComponent, ComponentError } from './services/component-studio-state.service';\nimport { ComponentVersionService } from './services/component-version.service';\nimport { SaveVersionResult } from './components/save-version-dialog/save-version-dialog.component';\nimport { RunView } from '@memberjunction/core';\n\n/**\n * User preferences persisted via UserInfoEngine.\n */\ninterface ComponentStudioPreferences {\n leftPanelWidth: number;\n rightPanelWidth: number;\n previewFlexPercent: number;\n isAIPanelCollapsed: boolean;\n isLeftPanelCollapsed: boolean;\n isEditorPanelCollapsed: boolean;\n}\n\n/**\n * Result from the New Component dialog.\n */\nexport interface NewComponentResult {\n name: string;\n title: string;\n description: string;\n type: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-component-studio-dashboard',\n templateUrl: './component-studio-dashboard.component.html',\n styleUrls: ['./component-studio-dashboard.component.css'],\n providers: [ComponentStudioStateService, ComponentVersionService]\n})\n@RegisterClass(BaseDashboard, 'ComponentStudioDashboard')\nexport class ComponentStudioDashboardComponent extends BaseDashboard implements AfterViewInit, OnDestroy {\n\n private static readonly USER_PREFS_KEY = 'ComponentStudio.UserPreferences';\n\n // --- Panel widths ---\n public leftPanelWidth = 340;\n public rightPanelWidth = 380;\n public previewFlex = '1 1 50%';\n public editorFlex = '1 1 50%';\n private previewFlexPercent = 50;\n\n // --- Dropdown states ---\n public exportDropdownOpen = false;\n\n // --- Resize state ---\n public IsResizing = false;\n private resizeType: 'left' | 'right' | 'center' | null = null;\n private resizeStartX = 0;\n private resizeStartValue = 0;\n\n // --- Collapsible panels ---\n public IsLeftPanelCollapsed = false;\n public IsEditorPanelCollapsed = false;\n\n // --- Dialog states ---\n public ShowNewComponentDialog = false;\n public ShowKeyboardShortcuts = false;\n public ShowSaveVersionDialog = false;\n public ShowTextImportDialog = false;\n public ShowArtifactLoadDialog = false;\n public ShowArtifactSelectionDialog = false;\n\n // --- Status bar ---\n public LastSavedTime: Date | null = null;\n\n // --- Preferences ---\n private prefsLoaded = false;\n\n @ViewChild('fileInput', { static: false }) fileInput?: ElementRef<HTMLInputElement>;\n\n protected override destroy$ = new Subject<void>();\n private get metadata(): IMetadataProvider { return this.ProviderToUse; }\n\n constructor(\n public state: ComponentStudioStateService,\n public versionService: ComponentVersionService,\n private cdr: ChangeDetectorRef,\n private notificationService: MJNotificationService\n ) {\n super();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Component Studio';\n }\n\n async ngAfterViewInit() {\n this.initDashboard();\n\n // Subscribe to state changes for change detection\n this.state.StateChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.cdr.detectChanges();\n });\n\n this.loadUserPreferences();\n await this.state.LoadComponents();\n this.NotifyLoadComplete();\n }\n\n ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n protected initDashboard(): void {\n // Wire up provider-aware services for multi-provider support\n this.state.Provider = this.ProviderToUse;\n this.versionService.Provider = this.ProviderToUse;\n }\n\n protected loadData(): void {\n this.state.LoadComponents();\n }\n\n // ============================================================\n // USER PREFERENCES\n // ============================================================\n\n private loadUserPreferences(): void {\n try {\n const saved = UserInfoEngine.Instance.GetSetting(ComponentStudioDashboardComponent.USER_PREFS_KEY);\n if (saved) {\n const prefs = JSON.parse(saved) as ComponentStudioPreferences;\n this.applyPreferences(prefs);\n }\n } catch (error) {\n console.warn('[ComponentStudio] Failed to load user preferences:', error);\n } finally {\n this.prefsLoaded = true;\n }\n }\n\n private applyPreferences(prefs: ComponentStudioPreferences): void {\n if (prefs.leftPanelWidth) this.leftPanelWidth = prefs.leftPanelWidth;\n if (prefs.rightPanelWidth) this.rightPanelWidth = prefs.rightPanelWidth;\n if (prefs.previewFlexPercent) {\n this.previewFlexPercent = prefs.previewFlexPercent;\n this.previewFlex = `1 1 ${prefs.previewFlexPercent}%`;\n this.editorFlex = `1 1 ${100 - prefs.previewFlexPercent}%`;\n }\n if (prefs.isAIPanelCollapsed != null) {\n this.state.IsAIPanelCollapsed = prefs.isAIPanelCollapsed;\n }\n if (prefs.isLeftPanelCollapsed != null) {\n this.IsLeftPanelCollapsed = prefs.isLeftPanelCollapsed;\n }\n if (prefs.isEditorPanelCollapsed != null) {\n this.IsEditorPanelCollapsed = prefs.isEditorPanelCollapsed;\n }\n }\n\n private getCurrentPreferences(): ComponentStudioPreferences {\n return {\n leftPanelWidth: this.leftPanelWidth,\n rightPanelWidth: this.rightPanelWidth,\n previewFlexPercent: this.previewFlexPercent,\n isAIPanelCollapsed: this.state.IsAIPanelCollapsed,\n isLeftPanelCollapsed: this.IsLeftPanelCollapsed,\n isEditorPanelCollapsed: this.IsEditorPanelCollapsed\n };\n }\n\n private saveUserPreferences(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSetting(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n private saveUserPreferencesDebounced(): void {\n if (!this.prefsLoaded) return;\n try {\n UserInfoEngine.Instance.SetSettingDebounced(\n ComponentStudioDashboardComponent.USER_PREFS_KEY,\n JSON.stringify(this.getCurrentPreferences())\n );\n } catch (error) {\n console.warn('[ComponentStudio] Failed to save user preferences:', error);\n }\n }\n\n // ============================================================\n // KEYBOARD SHORTCUTS\n // ============================================================\n\n @HostListener('document:keydown', ['$event'])\n OnKeyDown(event: KeyboardEvent): void {\n const target = event.target as HTMLElement;\n const isInputFocused = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;\n\n // Ctrl+S / Cmd+S = Save Version\n if ((event.ctrlKey || event.metaKey) && event.key === 's') {\n event.preventDefault();\n if (this.state.SelectedComponent) {\n this.SaveVersion();\n }\n }\n\n // Ctrl+N / Cmd+N = New Component\n if ((event.ctrlKey || event.metaKey) && event.key === 'n') {\n event.preventDefault();\n this.OnNewComponent();\n }\n\n // Ctrl+/ or ? = Toggle keyboard shortcuts\n if ((event.ctrlKey || event.metaKey) && event.key === '/') {\n event.preventDefault();\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n } else if (event.key === '?' && !isInputFocused) {\n this.ShowKeyboardShortcuts = !this.ShowKeyboardShortcuts;\n this.cdr.detectChanges();\n }\n\n // Escape = Close overlays\n if (event.key === 'Escape') {\n if (this.ShowKeyboardShortcuts) {\n this.ShowKeyboardShortcuts = false;\n this.cdr.detectChanges();\n }\n }\n }\n\n // ============================================================\n // SAVE VERSION\n // ============================================================\n\n SaveVersion(): void {\n if (!this.state.SelectedComponent) return;\n this.ShowSaveVersionDialog = true;\n this.cdr.detectChanges();\n }\n\n async OnSaveVersionConfirm(result: SaveVersionResult): Promise<void> {\n this.ShowSaveVersionDialog = false;\n\n let success: boolean;\n if (result.Mode === 'update') {\n success = await this.versionService.UpdateCurrentVersion(result.Comment || undefined);\n } else {\n success = await this.versionService.SaveVersion(result.Comment || undefined);\n }\n\n if (success) {\n this.LastSavedTime = new Date();\n this.notificationService.CreateSimpleNotification(\n `Saved as v${this.versionService.CurrentVersionNumber}`,\n 'success',\n 3000\n );\n this.state.HasUnsavedChanges = false;\n } else {\n this.notificationService.CreateSimpleNotification(\n 'Failed to save version',\n 'error'\n );\n }\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // REFRESH COMPONENT\n // ============================================================\n\n RefreshComponent(): void {\n this.state.RefreshComponent.emit();\n }\n\n // ============================================================\n // AI PANEL\n // ============================================================\n\n ToggleAIPanel(): void {\n this.state.IsAIPanelCollapsed = !this.state.IsAIPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleLeftPanel(): void {\n this.IsLeftPanelCollapsed = !this.IsLeftPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n ToggleEditorPanel(): void {\n this.IsEditorPanelCollapsed = !this.IsEditorPanelCollapsed;\n this.saveUserPreferences();\n this.cdr.detectChanges();\n }\n\n OnAskAIToFix(error: ComponentError): void {\n // Open AI panel if collapsed\n if (this.state.IsAIPanelCollapsed) {\n this.state.IsAIPanelCollapsed = false;\n }\n // Send error to AI panel\n this.state.SendErrorToAI.emit(error);\n this.cdr.detectChanges();\n }\n\n // ============================================================\n // NEW COMPONENT\n // ============================================================\n\n OnNewComponent(): void {\n this.ShowNewComponentDialog = true;\n this.cdr.detectChanges();\n }\n\n OnNewComponentDialogClose(result: NewComponentResult | null): void {\n this.ShowNewComponentDialog = false;\n if (!result) {\n this.cdr.detectChanges();\n return;\n }\n this.createComponentFromResult(result);\n this.cdr.detectChanges();\n }\n\n OnQuickStart(type: string): void {\n const typeNames: Record<string, string> = {\n dashboard: 'Dashboard',\n report: 'Report',\n chart: 'Chart',\n form: 'Form'\n };\n const typeName = typeNames[type] || 'Component';\n this.createComponentFromResult({\n name: `New ${typeName}`,\n title: `New ${typeName}`,\n description: '',\n type\n });\n }\n\n private createComponentFromResult(result: NewComponentResult): void {\n const newSpec: ComponentSpec = {\n name: result.name,\n title: result.title,\n description: result.description,\n type: result.type,\n location: 'embedded',\n exampleUsage: '',\n code: this.getTemplateCode(result.name, result.type),\n functionalRequirements: '',\n dataRequirements: { mode: 'views', entities: [], queries: [], description: '' },\n technicalDesign: ''\n } as ComponentSpec;\n\n const fileComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.name,\n description: result.description,\n specification: newSpec,\n filename: 'new-component.json',\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.type || 'Dashboard',\n status: 'New'\n };\n\n this.state.AddFileLoadedComponent(fileComponent);\n this.state.ExpandedComponent = fileComponent;\n this.state.RunComponent(fileComponent);\n }\n\n private getTemplateCode(name: string, type: string): string {\n return `function Component({ utilities, settings }) {\n const React = utilities.React;\n const { useState } = React;\n\n return React.createElement('div', {\n style: { padding: '24px', fontFamily: 'system-ui' }\n },\n React.createElement('h2', null, '${name}'),\n React.createElement('p', null, 'Start building your ${type || 'component'} here.')\n );\n}`;\n }\n\n // ============================================================\n // IMPORT / EXPORT\n // ============================================================\n\n ToggleExportDropdown(): void {\n this.exportDropdownOpen = !this.exportDropdownOpen;\n }\n\n @HostListener('document:click', ['$event'])\n OnDocumentClick(event: MouseEvent): void {\n const target = event.target as HTMLElement;\n if (!target.closest('.header-dropdown')) {\n this.exportDropdownOpen = false;\n }\n }\n\n ImportFromFile(): void {\n this.fileInput?.nativeElement.click();\n }\n\n ImportFromText(): void {\n this.ShowTextImportDialog = true;\n this.cdr.detectChanges();\n }\n\n OnTextImportSpec(spec: ComponentSpec): void {\n this.ShowTextImportDialog = false;\n this.handleSpecImport(spec, 'text-import.json', 'Text');\n this.cdr.detectChanges();\n }\n\n OnTextImportCancel(): void {\n this.ShowTextImportDialog = false;\n this.cdr.detectChanges();\n }\n\n ImportFromArtifact(): void {\n this.ShowArtifactLoadDialog = true;\n this.cdr.detectChanges();\n }\n\n OnArtifactLoadClose(result: ArtifactLoadResult | undefined): void {\n this.ShowArtifactLoadDialog = false;\n if (!result) {\n this.cdr.detectChanges();\n return;\n }\n\n const artifactComponent: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: result.spec.name,\n description: result.spec.description,\n specification: result.spec,\n filename: `${result.artifactName} (v${result.versionNumber})`,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: result.spec.type || 'Component',\n status: 'Artifact',\n sourceArtifactID: result.artifactID,\n sourceVersionID: result.versionID\n };\n\n this.state.AddFileLoadedComponent(artifactComponent);\n this.state.ExpandedComponent = artifactComponent;\n this.state.RunComponent(artifactComponent);\n\n this.notificationService.CreateSimpleNotification(\n `Loaded \"${result.spec.name}\" from artifact`,\n 'success',\n 3000\n );\n this.cdr.detectChanges();\n }\n\n async HandleFileSelect(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n if (!file || !file.name.endsWith('.json')) return;\n\n try {\n const content = await this.readFile(file);\n const spec = JSON.parse(content) as ComponentSpec;\n if (!spec.name || !spec.code) {\n console.error('Invalid spec: missing name or code');\n return;\n }\n this.handleSpecImport(spec, file.name, 'File');\n input.value = '';\n } catch (error) {\n console.error('Error loading file:', error);\n }\n }\n\n private handleSpecImport(spec: ComponentSpec, filename: string, status: string): void {\n const component: FileLoadedComponent = {\n id: this.state.GenerateId(),\n name: spec.name,\n description: spec.description,\n specification: spec,\n filename,\n loadedAt: new Date(),\n isFileLoaded: true,\n type: spec.type || 'Component',\n status\n };\n\n this.state.AddFileLoadedComponent(component);\n this.state.ExpandedComponent = component;\n this.state.RunComponent(component);\n }\n\n ExportToArtifact(): void {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n this.ShowArtifactSelectionDialog = true;\n this.cdr.detectChanges();\n }\n\n async OnArtifactSelectionClose(result: ArtifactSelectionResult | undefined): Promise<void> {\n this.ShowArtifactSelectionDialog = false;\n if (!result?.action) {\n this.cdr.detectChanges();\n return;\n }\n\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec) return;\n\n try {\n const artifact = result.artifact;\n let version: MJArtifactVersionEntity;\n\n if (result.action === 'update-version' && result.versionToUpdate) {\n version = result.versionToUpdate;\n } else {\n version = await this.metadata.GetEntityObject<MJArtifactVersionEntity>('MJ: Artifact Versions');\n version.ArtifactID = artifact.ID;\n version.UserID = this.metadata.CurrentUser.ID;\n\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const versionsResult = await rv.RunView<MJArtifactVersionEntity>({\n EntityName: 'MJ: Artifact Versions',\n ExtraFilter: `ArtifactID = '${artifact.ID}'`,\n OrderBy: 'VersionNumber DESC',\n MaxRows: 1,\n ResultType: 'entity_object'\n });\n\n version.VersionNumber = (versionsResult.Success && versionsResult.Results?.length > 0)\n ? versionsResult.Results[0].VersionNumber + 1\n : 1;\n }\n\n version.Content = JSON.stringify(currentSpec, null, 2);\n version.ContentHash = await this.generateSHA256Hash(version.Content);\n version.Name = currentSpec.name;\n version.Description = currentSpec.description || null;\n const timestamp = new Date().toISOString();\n const actionText = result.action === 'update-version' ? 'Updated' : 'Created';\n version.Comments = `${actionText} from Component Studio at ${timestamp}`;\n\n const saved = await version.Save();\n if (saved) {\n this.notificationService.CreateSimpleNotification(\n `Saved as artifact version ${version.VersionNumber}`,\n 'success',\n 3000\n );\n } else {\n this.notificationService.CreateSimpleNotification('Failed to save artifact version', 'error');\n }\n } catch (error) {\n console.error('Error saving to artifact:', error);\n this.notificationService.CreateSimpleNotification('Error saving to artifact', 'error');\n }\n this.cdr.detectChanges();\n }\n\n ExportToFile(): void {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec || !this.state.SelectedComponent) return;\n\n const componentName = this.state.GetComponentName(this.state.SelectedComponent);\n const filename = componentName.replace(/\\s+/g, '-').replace(/[^a-z0-9\\-]/gi, '-').toLowerCase() + '.json';\n const blob = new Blob([JSON.stringify(currentSpec, null, 2)], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n async ExportToClipboard(): Promise<void> {\n this.exportDropdownOpen = false;\n const currentSpec = this.state.GetCurrentSpec();\n if (!currentSpec) return;\n\n try {\n await navigator.clipboard.writeText(JSON.stringify(currentSpec, null, 2));\n this.notificationService.CreateSimpleNotification('Copied to clipboard', 'success', 2000);\n } catch (error) {\n this.notificationService.CreateSimpleNotification('Failed to copy to clipboard', 'error');\n }\n }\n\n async RefreshData(): Promise<void> {\n await this.state.LoadComponents();\n }\n\n // ============================================================\n // RESIZE HANDLERS\n // ============================================================\n\n OnLeftResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'left';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.leftPanelWidth;\n this.addResizeListeners();\n }\n\n OnRightResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'right';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.rightPanelWidth;\n this.addResizeListeners();\n }\n\n OnCenterResizeStart(event: MouseEvent): void {\n event.preventDefault();\n this.resizeType = 'center';\n this.resizeStartX = event.clientX;\n this.resizeStartValue = this.previewFlexPercent;\n this.addResizeListeners();\n }\n\n private addResizeListeners(): void {\n this.IsResizing = true;\n document.addEventListener('mousemove', this.onResizeMove);\n document.addEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n private onResizeMove = (event: MouseEvent): void => {\n if (this.resizeType === 'left') {\n const delta = event.clientX - this.resizeStartX;\n this.leftPanelWidth = Math.max(280, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'right') {\n const delta = this.resizeStartX - event.clientX;\n this.rightPanelWidth = Math.max(300, Math.min(600, this.resizeStartValue + delta));\n } else if (this.resizeType === 'center') {\n const centerPanel = document.querySelector('.panel-center') as HTMLElement;\n if (centerPanel) {\n const rect = centerPanel.getBoundingClientRect();\n const relativeX = event.clientX - rect.left;\n const percent = Math.max(20, Math.min(80, (relativeX / rect.width) * 100));\n this.previewFlexPercent = percent;\n this.previewFlex = `1 1 ${percent}%`;\n this.editorFlex = `1 1 ${100 - percent}%`;\n }\n }\n this.cdr.detectChanges();\n };\n\n private onResizeEnd = (): void => {\n this.IsResizing = false;\n this.resizeType = null;\n document.removeEventListener('mousemove', this.onResizeMove);\n document.removeEventListener('mouseup', this.onResizeEnd);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n this.saveUserPreferencesDebounced();\n };\n\n // ============================================================\n // HELPERS\n // ============================================================\n\n private readFile(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (e) => resolve(e.target?.result as string);\n reader.onerror = reject;\n reader.readAsText(file);\n });\n }\n\n private async generateSHA256Hash(content: string): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(content);\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n }\n}\n","<div class=\"component-studio\" [class.resizing]=\"IsResizing\">\n\n <!-- ============================================================\n TOOLBAR — Unified bar with integrated breadcrumb\n Left: hamburger + breadcrumb context\n Right: Save | Export | divider | AI | Keyboard | Refresh\n ============================================================ -->\n <div class=\"studio-toolbar\">\n <div class=\"toolbar-context\">\n <!-- Toggle left panel -->\n <button class=\"tb-btn icon-only\" title=\"Toggle browser panel\" (click)=\"ToggleLeftPanel()\">\n <i class=\"fa-solid fa-bars\"></i>\n </button>\n\n @if (state.SelectedComponent) {\n <span class=\"breadcrumb-type\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.GetComponentType(state.SelectedComponent) || 'Component' }}\n </span>\n <span class=\"breadcrumb-sep\"><i class=\"fa-solid fa-chevron-right\"></i></span>\n <span class=\"component-label\">{{ state.GetComponentName(state.SelectedComponent) }}</span>\n\n @if (state.IsRunning) {\n <span class=\"running-badge\">\n <span class=\"running-dot-small\"></span>\n Running\n </span>\n }\n @if (state.HasUnsavedChanges) {\n <span class=\"unsaved-dot\" title=\"Unsaved changes\"></span>\n }\n }\n </div>\n\n <div class=\"toolbar-spacer\"></div>\n\n <div class=\"toolbar-actions\">\n <!-- Save Version -->\n @if (state.SelectedComponent) {\n <button class=\"tb-btn primary\" (click)=\"SaveVersion()\" title=\"Save version (Ctrl+S)\">\n <i class=\"fa-solid fa-save\"></i> Save\n </button>\n }\n\n <!-- Refresh Component -->\n @if (state.SelectedComponent && state.IsRunning) {\n <button class=\"tb-btn\" (click)=\"RefreshComponent()\" title=\"Refresh component\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Refresh\n </button>\n }\n\n <!-- Export -->\n @if (state.SelectedComponent && state.IsRunning) {\n <div class=\"header-dropdown\" [class.open]=\"exportDropdownOpen\">\n <button class=\"tb-btn\" (click)=\"ToggleExportDropdown()\">\n <i class=\"fa-solid fa-file-export\"></i> Export\n <i class=\"fa-solid fa-chevron-down dropdown-icon\"></i>\n </button>\n @if (exportDropdownOpen) {\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" (click)=\"ExportToArtifact()\">\n <i class=\"fa-solid fa-save\"></i> To Artifact\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToFile()\">\n <i class=\"fa-solid fa-file\"></i> To File\n </button>\n <button class=\"dropdown-item\" (click)=\"ExportToClipboard()\">\n <i class=\"fa-solid fa-clipboard\"></i> To Clipboard\n </button>\n </div>\n }\n </div>\n }\n\n <span class=\"toolbar-divider\"></span>\n\n <!-- AI Panel Toggle -->\n <button class=\"tb-btn icon-only\" [class.active-toggle]=\"!state.IsAIPanelCollapsed\"\n (click)=\"ToggleAIPanel()\"\n [title]=\"state.IsAIPanelCollapsed ? 'Show AI Assistant' : 'Hide AI Assistant'\">\n <i class=\"fa-solid fa-robot\"></i>\n </button>\n\n <!-- Keyboard Shortcuts -->\n <button class=\"tb-btn icon-only\" (click)=\"ShowKeyboardShortcuts = !ShowKeyboardShortcuts\"\n title=\"Keyboard shortcuts (?)\">\n <i class=\"fa-solid fa-keyboard\"></i>\n </button>\n\n <!-- Refresh -->\n <button class=\"tb-btn icon-only\" (click)=\"RefreshData()\" [disabled]=\"state.IsLoading\" title=\"Refresh data\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </button>\n </div>\n\n <!-- Hidden file input -->\n <input #fileInput type=\"file\" accept=\".json\" (change)=\"HandleFileSelect($event)\" style=\"display: none;\" />\n </div>\n\n <!-- ============================================================\n THREE-PANEL BODY\n ============================================================ -->\n <div class=\"studio-body\">\n\n <!-- Left Panel: Component Browser (collapsible) -->\n @if (!IsLeftPanelCollapsed) {\n <div class=\"panel panel-left\" [style.width.px]=\"leftPanelWidth\">\n <mj-component-browser\n (NewComponent)=\"OnNewComponent()\"\n (ImportFromFile)=\"ImportFromFile()\"\n (ImportFromText)=\"ImportFromText()\"\n (ImportFromArtifact)=\"ImportFromArtifact()\">\n </mj-component-browser>\n </div>\n\n <!-- Resize Handle: Left <-> Center -->\n <div class=\"resize-handle\" (mousedown)=\"OnLeftResizeStart($event)\"></div>\n }\n\n <!-- Center Panel: Workspace (side-by-side: Preview LEFT, Editor RIGHT) -->\n <div class=\"panel panel-center\">\n @if (state.SelectedComponent) {\n <!-- Preview (left side) -->\n <div class=\"workspace-preview\" [class.full-width]=\"IsEditorPanelCollapsed\" [style.flex]=\"IsEditorPanelCollapsed ? '1 1 100%' : previewFlex\">\n <div class=\"preview-sub-header\">\n <div class=\"preview-sub-left\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Preview</span>\n </div>\n <div class=\"preview-sub-right\">\n <!-- Toggle editor panel -->\n <button class=\"toggle-editors-btn\" [class.active]=\"!IsEditorPanelCollapsed\"\n (click)=\"ToggleEditorPanel()\" title=\"Toggle editor panel\">\n <i class=\"fa-solid fa-columns\"></i>\n </button>\n </div>\n </div>\n <div class=\"preview-body\">\n <mj-component-preview\n (AskAIToFix)=\"OnAskAIToFix($event)\">\n </mj-component-preview>\n </div>\n </div>\n\n <!-- Resize Handle: Preview <-> Editor (obvious center divider) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"resize-handle center-divider\" (mousedown)=\"OnCenterResizeStart($event)\">\n <div class=\"divider-grip\"></div>\n </div>\n }\n\n <!-- Editor Tabs (right side, collapsible) -->\n @if (!IsEditorPanelCollapsed) {\n <div class=\"workspace-editors\" [style.flex]=\"editorFlex\">\n <mj-editor-tabs></mj-editor-tabs>\n </div>\n }\n } @else {\n <!-- Enhanced Empty State -->\n <div class=\"empty-state\">\n <div class=\"empty-state-content\">\n <div class=\"empty-state-icon\">\n <i class=\"fa-solid fa-rocket\"></i>\n </div>\n <h2>Ready to Build</h2>\n <p>Select a component from the browser or create a new one to get started</p>\n <div class=\"empty-state-actions\">\n <button mjButton variant=\"primary\" (click)=\"OnNewComponent()\">\n <span class=\"fa-solid fa-plus\"></span> New Component\n </button>\n <button mjButton (click)=\"ImportFromFile()\">\n <span class=\"fa-solid fa-file-import\"></span> Import\n </button>\n </div>\n <div class=\"quick-start-templates\">\n <span class=\"quick-start-label\">Quick start:</span>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('dashboard')\">\n <i class=\"fa-solid fa-chart-line\"></i> Dashboard\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('report')\">\n <i class=\"fa-solid fa-file-alt\"></i> Report\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('chart')\">\n <i class=\"fa-solid fa-chart-pie\"></i> Chart\n </button>\n <button class=\"quick-start-btn\" (click)=\"OnQuickStart('form')\">\n <i class=\"fa-solid fa-edit\"></i> Form\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Resize Handle: Center <-> Right -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"resize-handle\" (mousedown)=\"OnRightResizeStart($event)\"></div>\n }\n\n <!-- Right Panel: AI Assistant -->\n @if (!state.IsAIPanelCollapsed) {\n <div class=\"panel panel-right\" [style.width.px]=\"rightPanelWidth\">\n <mj-ai-assistant-panel></mj-ai-assistant-panel>\n </div>\n }\n </div>\n\n <!-- ============================================================\n STATUS BAR\n ============================================================ -->\n <div class=\"status-bar\">\n <div class=\"status-left\">\n <span class=\"status-item\">\n <i class=\"fa-solid fa-cube\"></i>\n {{ state.FilteredComponents.length }} component{{ state.FilteredComponents.length !== 1 ? 's' : '' }}\n </span>\n </div>\n <div class=\"status-right\">\n @if (LastSavedTime) {\n <span class=\"status-item\">\n <i class=\"fa-solid fa-check-circle\"></i>\n Saved {{ LastSavedTime | date:'shortTime' }}\n </span>\n }\n <span class=\"status-item shortcut-hint\">\n <kbd>?</kbd> Shortcuts\n </span>\n </div>\n </div>\n\n <!-- ============================================================\n KEYBOARD SHORTCUTS OVERLAY\n ============================================================ -->\n @if (ShowKeyboardShortcuts) {\n <div class=\"shortcuts-overlay\" (click)=\"ShowKeyboardShortcuts = false\">\n <div class=\"shortcuts-panel\" (click)=\"$event.stopPropagation()\">\n <div class=\"shortcuts-header\">\n <h3>Keyboard Shortcuts</h3>\n <button class=\"shortcuts-close\" (click)=\"ShowKeyboardShortcuts = false\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <div class=\"shortcuts-body\">\n <div class=\"shortcut-group\">\n <h4>General</h4>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>S</kbd></span>\n <span class=\"shortcut-desc\">Save version</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Ctrl</kbd> + <kbd>N</kbd></span>\n <span class=\"shortcut-desc\">New component</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>?</kbd></span>\n <span class=\"shortcut-desc\">Toggle shortcuts</span>\n </div>\n <div class=\"shortcut-row\">\n <span class=\"shortcut-keys\"><kbd>Esc</kbd></span>\n <span class=\"shortcut-desc\">Close overlay</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- ============================================================\n NEW COMPONENT DIALOG\n ============================================================ -->\n @if (ShowNewComponentDialog) {\n <mj-new-component-dialog\n [Visible]=\"ShowNewComponentDialog\"\n (Close)=\"OnNewComponentDialogClose($event)\">\n </mj-new-component-dialog>\n }\n\n @if (ShowSaveVersionDialog) {\n <mj-save-version-dialog\n [Visible]=\"ShowSaveVersionDialog\"\n [CurrentVersion]=\"versionService.CurrentVersionNumber\"\n (Save)=\"OnSaveVersionConfirm($event)\"\n (Cancel)=\"ShowSaveVersionDialog = false\">\n </mj-save-version-dialog>\n }\n\n <!-- Text Import Dialog -->\n @if (ShowTextImportDialog) {\n <mj-dialog [Visible]=\"true\" Title=\"Import Component from Text\" (Close)=\"OnTextImportCancel()\" [Width]=\"700\" [MinWidth]=\"500\">\n <app-text-import-dialog\n (importSpec)=\"OnTextImportSpec($event)\"\n (cancelDialog)=\"OnTextImportCancel()\">\n </app-text-import-dialog>\n </mj-dialog>\n }\n\n <!-- Artifact Load Dialog -->\n @if (ShowArtifactLoadDialog) {\n <app-artifact-load-dialog\n [Visible]=\"ShowArtifactLoadDialog\"\n (Close)=\"OnArtifactLoadClose($event)\">\n </app-artifact-load-dialog>\n }\n\n <!-- Artifact Selection Dialog -->\n @if (ShowArtifactSelectionDialog) {\n <app-artifact-selection-dialog\n [Visible]=\"ShowArtifactSelectionDialog\"\n (Close)=\"OnArtifactSelectionClose($event)\">\n </app-artifact-selection-dialog>\n }\n</div>\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { OnInit, OnDestroy, ElementRef, ChangeDetectorRef } from '@angular/core';
|
|
2
2
|
import { ComponentStudioStateService } from '../../services/component-studio-state.service';
|
|
3
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
/**
|
|
5
6
|
* Represents a single message in the AI assistant chat thread
|
|
@@ -27,7 +28,7 @@ interface AIModelOption {
|
|
|
27
28
|
Vendor: string | null;
|
|
28
29
|
DisplayLabel: string;
|
|
29
30
|
}
|
|
30
|
-
export declare class AIAssistantPanelComponent implements OnInit, OnDestroy {
|
|
31
|
+
export declare class AIAssistantPanelComponent extends BaseAngularComponent implements OnInit, OnDestroy {
|
|
31
32
|
State: ComponentStudioStateService;
|
|
32
33
|
private cdr;
|
|
33
34
|
chatThreadEl: ElementRef<HTMLDivElement>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-assistant-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAa,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAKvG,OAAO,EAAE,2BAA2B,EAAkB,MAAM,+CAA+C,CAAC;;
|
|
1
|
+
{"version":3,"file":"ai-assistant-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAa,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAKvG,OAAO,EAAE,2BAA2B,EAAkB,MAAM,+CAA+C,CAAC;AAC5G,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;;AAErE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,qBAMa,yBAA0B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IA0BrF,KAAK,EAAE,2BAA2B;IACzC,OAAO,CAAC,GAAG;IAzBY,YAAY,EAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC3C,WAAW,EAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAGtE,QAAQ,EAAE,WAAW,EAAE,CAAM;IAC7B,SAAS,SAAM;IACf,oBAAoB,UAAS;IAG7B,eAAe,EAAE,aAAa,EAAE,CAAM;IACtC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IACtC,eAAe,UAAS;IAGxB,YAAY,EAAE,WAAW,EAAE,CAKzB;IAEF,OAAO,CAAC,QAAQ,CAAuB;gBAG9B,KAAK,EAAE,2BAA2B,EACjC,GAAG,EAAE,iBAAiB;IAG1B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,WAAW,IAAI,IAAI;IASb,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCjC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,iBAAiB;IAWzB,aAAa,IAAI,IAAI;IAUrB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAcxC,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAO1C,aAAa,IAAI,IAAI;IAIrB,eAAe,IAAI,IAAI;IAKvB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO;IAWlD,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,gBAAgB;IAKxB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAInC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM;yCAxOlD,yBAAyB;2CAAzB,yBAAyB;CA2OrC"}
|
|
@@ -2,6 +2,7 @@ import { Component, ViewChild } from '@angular/core';
|
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
3
|
import { takeUntil } from 'rxjs/operators';
|
|
4
4
|
import { RunView } from '@memberjunction/core';
|
|
5
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "../../services/component-studio-state.service";
|
|
7
8
|
import * as i2 from "@angular/forms";
|
|
@@ -118,7 +119,7 @@ function AIAssistantPanelComponent_Conditional_22_Template(rf, ctx) { if (rf & 1
|
|
|
118
119
|
i0.ɵɵelement(5, "span", 40)(6, "span", 40)(7, "span", 40);
|
|
119
120
|
i0.ɵɵelementEnd()()();
|
|
120
121
|
} }
|
|
121
|
-
export class AIAssistantPanelComponent {
|
|
122
|
+
export class AIAssistantPanelComponent extends BaseAngularComponent {
|
|
122
123
|
State;
|
|
123
124
|
cdr;
|
|
124
125
|
chatThreadEl;
|
|
@@ -140,6 +141,7 @@ export class AIAssistantPanelComponent {
|
|
|
140
141
|
];
|
|
141
142
|
destroy$ = new Subject();
|
|
142
143
|
constructor(State, cdr) {
|
|
144
|
+
super();
|
|
143
145
|
this.State = State;
|
|
144
146
|
this.cdr = cdr;
|
|
145
147
|
}
|
|
@@ -158,7 +160,7 @@ export class AIAssistantPanelComponent {
|
|
|
158
160
|
async LoadModels() {
|
|
159
161
|
this.IsLoadingModels = true;
|
|
160
162
|
try {
|
|
161
|
-
const rv =
|
|
163
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
162
164
|
const result = await rv.RunView({
|
|
163
165
|
EntityName: 'MJ: AI Models',
|
|
164
166
|
ExtraFilter: `IsActive = 1 AND AIModelTypeID IN (SELECT ID FROM __mj.vwAIModelTypes WHERE Name = 'LLM')`,
|
|
@@ -323,7 +325,7 @@ export class AIAssistantPanelComponent {
|
|
|
323
325
|
let _t;
|
|
324
326
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.chatThreadEl = _t.first);
|
|
325
327
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.chatInputEl = _t.first);
|
|
326
|
-
} }, standalone: false, decls: 38, vars: 8, consts: [["chatThread", ""], ["chatInput", ""], [1, "ai-assistant-panel"], [1, "panel-header"], [1, "header-title"], [1, "fa-solid", "fa-robot"], ["title", "Collapse panel", 1, "collapse-btn", 3, "click"], [1, "fa-solid", "fa-chevron-right"], [1, "model-selector"], [1, "model-label"], [1, "model-dropdown-wrapper"], [1, "model-loading"], [1, "model-dropdown", 3, "ngModel", "disabled"], [1, "quick-actions"], [1, "quick-action-btn", 3, "disabled", "title"], [1, "chat-thread"], [1, "empty-thread"], [1, "message-wrapper", 3, "user", "assistant", "system"], [1, "message-wrapper", "assistant"], [1, "chat-input-area"], [1, "input-wrapper"], ["placeholder", "Ask the AI assistant...", "rows", "1", 1, "chat-textarea", 3, "ngModelChange", "keydown", "input", "ngModel", "disabled"], ["title", "Send message", 1, "send-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-paper-plane"], [1, "input-hint"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "model-dropdown", 3, "ngModelChange", "ngModel", "disabled"], [3, "value"], ["disabled", "", 3, "value"], [1, "quick-action-btn", 3, "click", "disabled", "title"], [1, "fa-solid", "fa-comments"], [1, "message-wrapper"], [1, "message-avatar", "assistant-avatar"], [1, "message-bubble"], [1, "message-content"], [1, "message-timestamp"], [1, "message-avatar", "user-avatar"], [1, "fa-solid", "fa-user"], [1, "message-bubble", "assistant-bubble", "typing-bubble"], [1, "typing-indicator"], [1, "dot"]], template: function AIAssistantPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
328
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 38, vars: 8, consts: [["chatThread", ""], ["chatInput", ""], [1, "ai-assistant-panel"], [1, "panel-header"], [1, "header-title"], [1, "fa-solid", "fa-robot"], ["title", "Collapse panel", 1, "collapse-btn", 3, "click"], [1, "fa-solid", "fa-chevron-right"], [1, "model-selector"], [1, "model-label"], [1, "model-dropdown-wrapper"], [1, "model-loading"], [1, "model-dropdown", 3, "ngModel", "disabled"], [1, "quick-actions"], [1, "quick-action-btn", 3, "disabled", "title"], [1, "chat-thread"], [1, "empty-thread"], [1, "message-wrapper", 3, "user", "assistant", "system"], [1, "message-wrapper", "assistant"], [1, "chat-input-area"], [1, "input-wrapper"], ["placeholder", "Ask the AI assistant...", "rows", "1", 1, "chat-textarea", 3, "ngModelChange", "keydown", "input", "ngModel", "disabled"], ["title", "Send message", 1, "send-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-paper-plane"], [1, "input-hint"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "model-dropdown", 3, "ngModelChange", "ngModel", "disabled"], [3, "value"], ["disabled", "", 3, "value"], [1, "quick-action-btn", 3, "click", "disabled", "title"], [1, "fa-solid", "fa-comments"], [1, "message-wrapper"], [1, "message-avatar", "assistant-avatar"], [1, "message-bubble"], [1, "message-content"], [1, "message-timestamp"], [1, "message-avatar", "user-avatar"], [1, "fa-solid", "fa-user"], [1, "message-bubble", "assistant-bubble", "typing-bubble"], [1, "typing-indicator"], [1, "dot"]], template: function AIAssistantPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
327
329
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
328
330
|
i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "div", 4);
|
|
329
331
|
i0.ɵɵelement(3, "i", 5);
|
|
@@ -396,5 +398,5 @@ export class AIAssistantPanelComponent {
|
|
|
396
398
|
type: ViewChild,
|
|
397
399
|
args: ['chatInput']
|
|
398
400
|
}] }); })();
|
|
399
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAssistantPanelComponent, { className: "AIAssistantPanelComponent", filePath: "src/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.ts", lineNumber:
|
|
401
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AIAssistantPanelComponent, { className: "AIAssistantPanelComponent", filePath: "src/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.ts", lineNumber: 44 }); })();
|
|
400
402
|
//# sourceMappingURL=ai-assistant-panel.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-assistant-panel.component.js","sourceRoot":"","sources":["../../../../src/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.ts","../../../../src/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqB,SAAS,EAAiC,MAAM,eAAe,CAAC;AACvG,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;;;;;;;;;ICcvC,+BAA2B;IACzB,wBAA2C;IAC3C,4BAAM;IAAA,iCAAiB;IACzB,AADyB,iBAAO,EAC1B;;;IAOF,kCAA2B;IAAA,YAAwB;IAAA,iBAAS;;;IAApD,mCAAkB;IAAC,cAAwB;IAAxB,2CAAwB;;;IAGnD,kCAAgC;IAAA,mCAAmB;IAAA,iBAAS;;IAApD,4BAAc;;;;IAR1B,kCAG4C;IAD1C,iUAA6B;IAE7B,+GAEC;IACD,8GAAoC;IAGtC,iBAAS;;;IARP,sDAA6B;IAC7B,8DAAyC;IACzC,cAEC;IAFD,qCAEC;IACD,eAEC;IAFD,8DAEC;;;;IASL,kCAKyB;IADvB,kNAAS,+BAAqB,KAAC;IAE/B,oBAA0C;IAC1C,4BAAM;IAAA,YAAkB;IAC1B,AAD0B,iBAAO,EACxB;;;;IANP,mEAAgD;IAGhD,AAFA,iGAAkE,0BAE5C;IACnB,cAAkC;IAAlC,cAAA,8CAAkC,CAAA;IAC/B,eAAkB;IAAlB,qCAAkB;;;IAQ1B,+BAA0B;IACxB,wBAAoC;IACpC,yBAAG;IAAA,kFAAkE;IACvE,AADuE,iBAAI,EACrE;;;IAMF,+BAA6C;IAC3C,uBAAiC;IACnC,iBAAM;;;IASN,+BAAwC;IACtC,wBAAgC;IAClC,iBAAM;;;IAfV,+BAAgK;IAC9J,mGAAoC;IAOlC,AADF,+BAAoL,cACrJ;IAAA,YAAqB;IAAA,iBAAM;IACxD,+BAA+B;IAAA,YAAwC;IACzE,AADyE,iBAAM,EACzE;IAEN,mGAA+B;IAKjC,iBAAM;;;;IAjB+G,AAAjD,AAAvC,kDAAsC,8CAAiD,wCAA2C;IAC7J,cAIC;IAJD,0DAIC;IAE2B,cAA6C;IAAyD,AAAxD,AAA9C,yDAA6C,qDAAwD,+CAAkD;IACpJ,eAAqB;IAArB,wCAAqB;IACnB,eAAwC;IAAxC,kEAAwC;IAGzE,cAIC;IAJD,qDAIC;;;IAOD,AADF,+BAAuC,cACQ;IAC3C,uBAAiC;IACnC,iBAAM;IAEJ,AADF,+BAA2D,cAC3B;IAG5B,AADA,AADA,2BAAyB,eACA,eACA;IAG/B,AADE,AADE,iBAAM,EACF,EACF;;ADrDZ,MAAM,OAAO,yBAAyB;IA0B3B;IACC;IAzBe,YAAY,CAA8B;IAC3C,WAAW,CAAmC;IAEtE,qBAAqB;IACrB,QAAQ,GAAkB,EAAE,CAAC;IAC7B,SAAS,GAAG,EAAE,CAAC;IACf,oBAAoB,GAAG,KAAK,CAAC;IAE7B,yBAAyB;IACzB,eAAe,GAAoB,EAAE,CAAC;IACtC,eAAe,GAAkB,IAAI,CAAC;IACtC,eAAe,GAAG,KAAK,CAAC;IAExB,wBAAwB;IACxB,YAAY,GAAkB;QAC5B,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,IAAI,EAAE;QACxF,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,+GAA+G,EAAE,aAAa,EAAE,KAAK,EAAE;QAC1L,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,qEAAqE,EAAE,aAAa,EAAE,KAAK,EAAE;QAChJ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,iGAAiG,EAAE,aAAa,EAAE,KAAK,EAAE;KAClL,CAAC;IAEM,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAEvC,YACS,KAAkC,EACjC,GAAsB;QADvB,UAAK,GAAL,KAAK,CAA6B;QACjC,QAAG,GAAH,GAAG,CAAmB;IAC7B,CAAC;IAEJ,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,+DAA+D;IAC/D,gBAAgB;IAChB,+DAA+D;IAE/D,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAkB;gBAC/C,UAAU,EAAE,eAAe;gBAC3B,WAAW,EAAE,2FAA2F;gBACxG,OAAO,EAAE,0BAA0B;gBACnC,UAAU,EAAE,eAAe;aAC5B,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACrC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBAClD,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;iBAC5E,CAAC,CAAC,CAAC;gBAEJ,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QACnD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,+DAA+D;IAC/D,qBAAqB;IACrB,+DAA+D;IAEvD,sBAAsB;QAC5B,IAAI,CAAC,KAAK,CAAC,aAAa;aACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,CAAC,KAAqB,EAAE,EAAE;YACnC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,mBAAmB,CAAC,KAAqB;QAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,gBAAgB;YACzC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzH,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,aAAa,GAAG,mBAAmB,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAE/H,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,GAAG,mBAAmB,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QACpE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,+DAA+D;IAC/D,kBAAkB;IAClB,+DAA+D;IAEvD,iBAAiB;QACvB,IAAI,CAAC,UAAU,CACb,WAAW,EACX,kLAAkL,CACnL,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,eAAe;IACf,+DAA+D;IAE/D,aAAa;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,oBAAoB;YAAE,OAAO;QAE/C,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,aAAa,CAAC,MAAmB;QAC/B,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;YAAE,OAAO;QAE7D,IAAI,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YACpD,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC5F,IAAI,CAAC,SAAS,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;QACjC,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,cAAc,CAAC,KAAoB;QACjC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC7C,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,eAAe;QACb,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,oBAAoB,CAAC,MAAmB;QACtC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC;QACzC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+DAA+D;IAC/D,qBAAqB;IACrB,+DAA+D;IAEvD,UAAU,CAAC,IAAqC,EAAE,OAAe;QACvE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEO,gBAAgB,CAAC,WAAmB;QAC1C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,UAAU,CACb,WAAW,EACX,uJAAuJ,CACxJ,CAAC;YACF,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC3B,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,+DAA+D;IAC/D,aAAa;IACb,+DAA+D;IAEvD,cAAc;QACpB,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;gBAC3C,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU;QAChB,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YACzC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QAChD,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QAC/B,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,CAAC,CAAC;QACnB,MAAM,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;QACxC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;IAC5E,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACvD,CAAC;IAED,eAAe,CAAC,IAAU;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,gBAAgB,CAAC,KAAa,EAAE,OAAoB;QAClD,OAAO,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;mHA1OU,yBAAyB;6DAAzB,yBAAyB;;;;;;;;YCvClC,AADF,AAFF,8BAAgC,aAEJ,aACE;YACxB,uBAAiC;YACjC,4BAAM;YAAA,4BAAY;YACpB,AADoB,iBAAO,EACrB;YACN,iCAAgF;YAAnD,4IAAS,qBAAiB,KAAC;YACtD,uBAAyC;YAE7C,AADE,iBAAS,EACL;YAIJ,AADF,8BAA4B,eACC;YAAA,sBAAK;YAAA,iBAAQ;YACxC,gCAAoC;YAMhC,AALF,8FAAuB,2EAKd;YAcb,AADE,iBAAM,EACF;YAGN,gCAA2B;YACzB,kGAUC;YACH,iBAAM;YAGN,mCAAqC;YACnC,8FAA6B;YAO7B,gHAmBC;YAGD,8FAA4B;YAc9B,iBAAM;YAKF,AADF,AADF,gCAA6B,eACA,uBASd;YALT,gQAAuB;YAEvB,AADA,yJAAW,0BAAsB,KAAC,kIACzB,mBAAe,KAAC;YAGhB,iBAAW;YACtB,mCAKuB;YADrB,6IAAS,mBAAe,KAAC;YAEzB,yBAAuC;YAE3C,AADE,iBAAS,EACL;YAEJ,AADF,gCAAwB,YAChB;YAAA,uBAAM;YAAA,4BAAK;YAAA,sBAAK;YAAA,iBAAM;YAAC,2BAAS;YAAA,4BAAK;YAAA,4BAAW;YAAA,iBAAM;YAAC,8BAAY;YAG/E,AADE,AADE,AAD2E,iBAAO,EAC5E,EACF,EACF;;YA5GA,gBAiBC;YAjBD,+CAiBC;YAMH,eAUC;YAVD,+BAUC;YAKD,eAKC;YALD,qDAKC;YAED,cAmBC;YAnBD,2BAmBC;YAGD,eAaC;YAbD,oDAaC;YASG,eAAuB;YAAvB,6CAAuB;YAGvB,mDAAiC;YAKjC,eAAqE;YAArE,sFAAqE;YACrE,wFAAkE;;;iFDxE7D,yBAAyB;cANrC,SAAS;6BACI,KAAK,YACP,uBAAuB;;kBAMhC,SAAS;mBAAC,YAAY;;kBACtB,SAAS;mBAAC,WAAW;;kFAHX,yBAAyB","sourcesContent":["import { Component, OnInit, OnDestroy, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { RunView } from '@memberjunction/core';\nimport { MJAIModelEntity } from '@memberjunction/core-entities';\nimport { ComponentStudioStateService, ComponentError } from '../../services/component-studio-state.service';\n\n/**\n * Represents a single message in the AI assistant chat thread\n */\nexport interface ChatMessage {\n Role: 'user' | 'assistant' | 'system';\n Content: string;\n Timestamp: Date;\n}\n\n/**\n * Represents a quick action button in the AI assistant panel\n */\ninterface QuickAction {\n Label: string;\n Icon: string;\n Prompt: string;\n RequiresError: boolean;\n}\n\n/**\n * Represents an AI model option in the model selector dropdown\n */\ninterface AIModelOption {\n ID: string;\n Name: string;\n Vendor: string | null;\n DisplayLabel: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-ai-assistant-panel',\n templateUrl: './ai-assistant-panel.component.html',\n styleUrls: ['./ai-assistant-panel.component.css']\n})\nexport class AIAssistantPanelComponent implements OnInit, OnDestroy {\n\n @ViewChild('chatThread') chatThreadEl!: ElementRef<HTMLDivElement>;\n @ViewChild('chatInput') chatInputEl!: ElementRef<HTMLTextAreaElement>;\n\n // --- Chat State ---\n Messages: ChatMessage[] = [];\n InputText = '';\n IsWaitingForResponse = false;\n\n // --- Model Selector ---\n AvailableModels: AIModelOption[] = [];\n SelectedModelID: string | null = null;\n IsLoadingModels = false;\n\n // --- Quick Actions ---\n QuickActions: QuickAction[] = [\n { Label: 'Fix Errors', Icon: 'fa-bug', Prompt: 'Fix this error: ', RequiresError: true },\n { Label: 'Improve Code', Icon: 'fa-magic', Prompt: 'Review and improve the current component code. Suggest optimizations, better patterns, and cleaner structure.', RequiresError: false },\n { Label: 'Generate Code', Icon: 'fa-code', Prompt: 'Generate code for the current component based on its specification.', RequiresError: false },\n { Label: 'Explain', Icon: 'fa-question-circle', Prompt: 'Explain what the current component does, including its structure, data flow, and key behaviors.', RequiresError: false }\n ];\n\n private destroy$ = new Subject<void>();\n\n constructor(\n public State: ComponentStudioStateService,\n private cdr: ChangeDetectorRef\n ) {}\n\n async ngOnInit(): Promise<void> {\n this.subscribeToErrorEvents();\n await this.LoadModels();\n this.addWelcomeMessage();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ============================================================\n // MODEL LOADING\n // ============================================================\n\n async LoadModels(): Promise<void> {\n this.IsLoadingModels = true;\n try {\n const rv = new RunView();\n const result = await rv.RunView<MJAIModelEntity>({\n EntityName: 'MJ: AI Models',\n ExtraFilter: `IsActive = 1 AND AIModelTypeID IN (SELECT ID FROM __mj.vwAIModelTypes WHERE Name = 'LLM')`,\n OrderBy: 'PowerRank DESC, Name ASC',\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.AvailableModels = result.Results.map(model => ({\n ID: model.ID,\n Name: model.Name,\n Vendor: model.Vendor,\n DisplayLabel: model.Vendor ? `${model.Name} (${model.Vendor})` : model.Name\n }));\n\n if (this.AvailableModels.length > 0) {\n this.SelectedModelID = this.AvailableModels[0].ID;\n }\n }\n } catch (error) {\n console.error('Error loading AI models:', error);\n } finally {\n this.IsLoadingModels = false;\n this.cdr.detectChanges();\n }\n }\n\n // ============================================================\n // ERROR SUBSCRIPTION\n // ============================================================\n\n private subscribeToErrorEvents(): void {\n this.State.SendErrorToAI\n .pipe(takeUntil(this.destroy$))\n .subscribe((error: ComponentError) => {\n this.handleIncomingError(error);\n });\n }\n\n private handleIncomingError(error: ComponentError): void {\n const errorDetails = error.technicalDetails\n ? (typeof error.technicalDetails === 'string' ? error.technicalDetails : JSON.stringify(error.technicalDetails, null, 2))\n : '';\n\n const systemContent = `Error detected [${error.type}]: ${error.message}${errorDetails ? '\\n\\nDetails:\\n' + errorDetails : ''}`;\n\n this.addMessage('system', systemContent);\n this.InputText = `Fix this error: ${error.type} - ${error.message}`;\n this.cdr.detectChanges();\n this.focusInput();\n }\n\n // ============================================================\n // WELCOME MESSAGE\n // ============================================================\n\n private addWelcomeMessage(): void {\n this.addMessage(\n 'assistant',\n 'Welcome to the Component Studio AI Assistant. I can help you fix errors, improve code, generate components, and explain how things work. Select a component and ask me anything!'\n );\n }\n\n // ============================================================\n // CHAT ACTIONS\n // ============================================================\n\n OnSendMessage(): void {\n const text = this.InputText.trim();\n if (!text || this.IsWaitingForResponse) return;\n\n this.addMessage('user', text);\n this.InputText = '';\n this.resetInputHeight();\n this.simulateResponse(text);\n }\n\n OnQuickAction(action: QuickAction): void {\n if (action.RequiresError && !this.State.CurrentError) return;\n\n if (action.RequiresError && this.State.CurrentError) {\n const errorContext = `${this.State.CurrentError.type} - ${this.State.CurrentError.message}`;\n this.InputText = `${action.Prompt}${errorContext}`;\n } else {\n this.InputText = action.Prompt;\n }\n\n this.cdr.detectChanges();\n this.focusInput();\n }\n\n OnInputKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n this.OnSendMessage();\n }\n }\n\n OnInputChange(): void {\n this.autoGrowTextarea();\n }\n\n OnCollapsePanel(): void {\n this.State.IsAIPanelCollapsed = true;\n this.State.StateChanged.emit();\n }\n\n IsQuickActionEnabled(action: QuickAction): boolean {\n if (action.RequiresError) {\n return this.State.CurrentError != null;\n }\n return true;\n }\n\n // ============================================================\n // MESSAGE MANAGEMENT\n // ============================================================\n\n private addMessage(role: 'user' | 'assistant' | 'system', content: string): void {\n this.Messages.push({\n Role: role,\n Content: content,\n Timestamp: new Date()\n });\n this.cdr.detectChanges();\n this.scrollToBottom();\n }\n\n private simulateResponse(userMessage: string): void {\n this.IsWaitingForResponse = true;\n this.cdr.detectChanges();\n this.scrollToBottom();\n\n setTimeout(() => {\n this.addMessage(\n 'assistant',\n 'AI assistant coming soon \\u2014 agent integration in progress. Your message has been received and will be processed once the AI backend is connected.'\n );\n this.IsWaitingForResponse = false;\n this.cdr.detectChanges();\n }, 1000);\n }\n\n // ============================================================\n // UI HELPERS\n // ============================================================\n\n private scrollToBottom(): void {\n Promise.resolve().then(() => {\n if (this.chatThreadEl) {\n const el = this.chatThreadEl.nativeElement;\n el.scrollTop = el.scrollHeight;\n }\n });\n }\n\n private focusInput(): void {\n Promise.resolve().then(() => {\n if (this.chatInputEl) {\n this.chatInputEl.nativeElement.focus();\n }\n });\n }\n\n private autoGrowTextarea(): void {\n if (!this.chatInputEl) return;\n const textarea = this.chatInputEl.nativeElement;\n textarea.style.height = 'auto';\n const lineHeight = 20;\n const maxLines = 4;\n const maxHeight = lineHeight * maxLines;\n textarea.style.height = Math.min(textarea.scrollHeight, maxHeight) + 'px';\n }\n\n private resetInputHeight(): void {\n if (!this.chatInputEl) return;\n this.chatInputEl.nativeElement.style.height = 'auto';\n }\n\n FormatTimestamp(date: Date): string {\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n }\n\n TrackByTimestamp(index: number, message: ChatMessage): number {\n return message.Timestamp.getTime();\n }\n}\n","<div class=\"ai-assistant-panel\">\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>AI Assistant</span>\n </div>\n <button class=\"collapse-btn\" (click)=\"OnCollapsePanel()\" title=\"Collapse panel\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n\n <!-- Model Selector -->\n <div class=\"model-selector\">\n <label class=\"model-label\">Model</label>\n <div class=\"model-dropdown-wrapper\">\n @if (IsLoadingModels) {\n <div class=\"model-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading models...</span>\n </div>\n } @else {\n <select\n class=\"model-dropdown\"\n [(ngModel)]=\"SelectedModelID\"\n [disabled]=\"AvailableModels.length === 0\">\n @for (model of AvailableModels; track model.ID) {\n <option [value]=\"model.ID\">{{ model.DisplayLabel }}</option>\n }\n @if (AvailableModels.length === 0) {\n <option [value]=\"null\" disabled>No models available</option>\n }\n </select>\n }\n </div>\n </div>\n\n <!-- Quick Actions Bar -->\n <div class=\"quick-actions\">\n @for (action of QuickActions; track action.Label) {\n <button\n class=\"quick-action-btn\"\n [class.disabled]=\"!IsQuickActionEnabled(action)\"\n [disabled]=\"!IsQuickActionEnabled(action) || IsWaitingForResponse\"\n (click)=\"OnQuickAction(action)\"\n [title]=\"action.Label\">\n <i class=\"fa-solid {{ action.Icon }}\"></i>\n <span>{{ action.Label }}</span>\n </button>\n }\n </div>\n\n <!-- Chat Thread -->\n <div class=\"chat-thread\" #chatThread>\n @if (Messages.length === 0) {\n <div class=\"empty-thread\">\n <i class=\"fa-solid fa-comments\"></i>\n <p>No messages yet. Start a conversation or use a quick action above.</p>\n </div>\n }\n\n @for (message of Messages; track TrackByTimestamp($index, message)) {\n <div class=\"message-wrapper\" [class.user]=\"message.Role === 'user'\" [class.assistant]=\"message.Role === 'assistant'\" [class.system]=\"message.Role === 'system'\">\n @if (message.Role === 'assistant') {\n <div class=\"message-avatar assistant-avatar\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n }\n\n <div class=\"message-bubble\" [class.user-bubble]=\"message.Role === 'user'\" [class.assistant-bubble]=\"message.Role === 'assistant'\" [class.system-bubble]=\"message.Role === 'system'\">\n <div class=\"message-content\">{{ message.Content }}</div>\n <div class=\"message-timestamp\">{{ FormatTimestamp(message.Timestamp) }}</div>\n </div>\n\n @if (message.Role === 'user') {\n <div class=\"message-avatar user-avatar\">\n <i class=\"fa-solid fa-user\"></i>\n </div>\n }\n </div>\n }\n\n <!-- Typing Indicator -->\n @if (IsWaitingForResponse) {\n <div class=\"message-wrapper assistant\">\n <div class=\"message-avatar assistant-avatar\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n <div class=\"message-bubble assistant-bubble typing-bubble\">\n <div class=\"typing-indicator\">\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Chat Input Area -->\n <div class=\"chat-input-area\">\n <div class=\"input-wrapper\">\n <textarea\n #chatInput\n class=\"chat-textarea\"\n [(ngModel)]=\"InputText\"\n (keydown)=\"OnInputKeydown($event)\"\n (input)=\"OnInputChange()\"\n [disabled]=\"IsWaitingForResponse\"\n placeholder=\"Ask the AI assistant...\"\n rows=\"1\"></textarea>\n <button\n class=\"send-btn\"\n [class.active]=\"InputText.trim().length > 0 && !IsWaitingForResponse\"\n [disabled]=\"InputText.trim().length === 0 || IsWaitingForResponse\"\n (click)=\"OnSendMessage()\"\n title=\"Send message\">\n <i class=\"fa-solid fa-paper-plane\"></i>\n </button>\n </div>\n <div class=\"input-hint\">\n <span>Press <kbd>Enter</kbd> to send, <kbd>Shift+Enter</kbd> for new line</span>\n </div>\n </div>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"ai-assistant-panel.component.js","sourceRoot":"","sources":["../../../../src/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.ts","../../../../src/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { RunView } from '@memberjunction/core';\nimport { MJAIModelEntity } from '@memberjunction/core-entities';\nimport { ComponentStudioStateService, ComponentError } from '../../services/component-studio-state.service';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\n\n/**\n * Represents a single message in the AI assistant chat thread\n */\nexport interface ChatMessage {\n Role: 'user' | 'assistant' | 'system';\n Content: string;\n Timestamp: Date;\n}\n\n/**\n * Represents a quick action button in the AI assistant panel\n */\ninterface QuickAction {\n Label: string;\n Icon: string;\n Prompt: string;\n RequiresError: boolean;\n}\n\n/**\n * Represents an AI model option in the model selector dropdown\n */\ninterface AIModelOption {\n ID: string;\n Name: string;\n Vendor: string | null;\n DisplayLabel: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-ai-assistant-panel',\n templateUrl: './ai-assistant-panel.component.html',\n styleUrls: ['./ai-assistant-panel.component.css']\n})\nexport class AIAssistantPanelComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n\n @ViewChild('chatThread') chatThreadEl!: ElementRef<HTMLDivElement>;\n @ViewChild('chatInput') chatInputEl!: ElementRef<HTMLTextAreaElement>;\n\n // --- Chat State ---\n Messages: ChatMessage[] = [];\n InputText = '';\n IsWaitingForResponse = false;\n\n // --- Model Selector ---\n AvailableModels: AIModelOption[] = [];\n SelectedModelID: string | null = null;\n IsLoadingModels = false;\n\n // --- Quick Actions ---\n QuickActions: QuickAction[] = [\n { Label: 'Fix Errors', Icon: 'fa-bug', Prompt: 'Fix this error: ', RequiresError: true },\n { Label: 'Improve Code', Icon: 'fa-magic', Prompt: 'Review and improve the current component code. Suggest optimizations, better patterns, and cleaner structure.', RequiresError: false },\n { Label: 'Generate Code', Icon: 'fa-code', Prompt: 'Generate code for the current component based on its specification.', RequiresError: false },\n { Label: 'Explain', Icon: 'fa-question-circle', Prompt: 'Explain what the current component does, including its structure, data flow, and key behaviors.', RequiresError: false }\n ];\n\n private destroy$ = new Subject<void>();\n\n constructor(\n public State: ComponentStudioStateService,\n private cdr: ChangeDetectorRef\n ) { super(); }\n\n async ngOnInit(): Promise<void> {\n this.subscribeToErrorEvents();\n await this.LoadModels();\n this.addWelcomeMessage();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // ============================================================\n // MODEL LOADING\n // ============================================================\n\n async LoadModels(): Promise<void> {\n this.IsLoadingModels = true;\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const result = await rv.RunView<MJAIModelEntity>({\n EntityName: 'MJ: AI Models',\n ExtraFilter: `IsActive = 1 AND AIModelTypeID IN (SELECT ID FROM __mj.vwAIModelTypes WHERE Name = 'LLM')`,\n OrderBy: 'PowerRank DESC, Name ASC',\n ResultType: 'entity_object'\n });\n\n if (result.Success && result.Results) {\n this.AvailableModels = result.Results.map(model => ({\n ID: model.ID,\n Name: model.Name,\n Vendor: model.Vendor,\n DisplayLabel: model.Vendor ? `${model.Name} (${model.Vendor})` : model.Name\n }));\n\n if (this.AvailableModels.length > 0) {\n this.SelectedModelID = this.AvailableModels[0].ID;\n }\n }\n } catch (error) {\n console.error('Error loading AI models:', error);\n } finally {\n this.IsLoadingModels = false;\n this.cdr.detectChanges();\n }\n }\n\n // ============================================================\n // ERROR SUBSCRIPTION\n // ============================================================\n\n private subscribeToErrorEvents(): void {\n this.State.SendErrorToAI\n .pipe(takeUntil(this.destroy$))\n .subscribe((error: ComponentError) => {\n this.handleIncomingError(error);\n });\n }\n\n private handleIncomingError(error: ComponentError): void {\n const errorDetails = error.technicalDetails\n ? (typeof error.technicalDetails === 'string' ? error.technicalDetails : JSON.stringify(error.technicalDetails, null, 2))\n : '';\n\n const systemContent = `Error detected [${error.type}]: ${error.message}${errorDetails ? '\\n\\nDetails:\\n' + errorDetails : ''}`;\n\n this.addMessage('system', systemContent);\n this.InputText = `Fix this error: ${error.type} - ${error.message}`;\n this.cdr.detectChanges();\n this.focusInput();\n }\n\n // ============================================================\n // WELCOME MESSAGE\n // ============================================================\n\n private addWelcomeMessage(): void {\n this.addMessage(\n 'assistant',\n 'Welcome to the Component Studio AI Assistant. I can help you fix errors, improve code, generate components, and explain how things work. Select a component and ask me anything!'\n );\n }\n\n // ============================================================\n // CHAT ACTIONS\n // ============================================================\n\n OnSendMessage(): void {\n const text = this.InputText.trim();\n if (!text || this.IsWaitingForResponse) return;\n\n this.addMessage('user', text);\n this.InputText = '';\n this.resetInputHeight();\n this.simulateResponse(text);\n }\n\n OnQuickAction(action: QuickAction): void {\n if (action.RequiresError && !this.State.CurrentError) return;\n\n if (action.RequiresError && this.State.CurrentError) {\n const errorContext = `${this.State.CurrentError.type} - ${this.State.CurrentError.message}`;\n this.InputText = `${action.Prompt}${errorContext}`;\n } else {\n this.InputText = action.Prompt;\n }\n\n this.cdr.detectChanges();\n this.focusInput();\n }\n\n OnInputKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' && !event.shiftKey) {\n event.preventDefault();\n this.OnSendMessage();\n }\n }\n\n OnInputChange(): void {\n this.autoGrowTextarea();\n }\n\n OnCollapsePanel(): void {\n this.State.IsAIPanelCollapsed = true;\n this.State.StateChanged.emit();\n }\n\n IsQuickActionEnabled(action: QuickAction): boolean {\n if (action.RequiresError) {\n return this.State.CurrentError != null;\n }\n return true;\n }\n\n // ============================================================\n // MESSAGE MANAGEMENT\n // ============================================================\n\n private addMessage(role: 'user' | 'assistant' | 'system', content: string): void {\n this.Messages.push({\n Role: role,\n Content: content,\n Timestamp: new Date()\n });\n this.cdr.detectChanges();\n this.scrollToBottom();\n }\n\n private simulateResponse(userMessage: string): void {\n this.IsWaitingForResponse = true;\n this.cdr.detectChanges();\n this.scrollToBottom();\n\n setTimeout(() => {\n this.addMessage(\n 'assistant',\n 'AI assistant coming soon \\u2014 agent integration in progress. Your message has been received and will be processed once the AI backend is connected.'\n );\n this.IsWaitingForResponse = false;\n this.cdr.detectChanges();\n }, 1000);\n }\n\n // ============================================================\n // UI HELPERS\n // ============================================================\n\n private scrollToBottom(): void {\n Promise.resolve().then(() => {\n if (this.chatThreadEl) {\n const el = this.chatThreadEl.nativeElement;\n el.scrollTop = el.scrollHeight;\n }\n });\n }\n\n private focusInput(): void {\n Promise.resolve().then(() => {\n if (this.chatInputEl) {\n this.chatInputEl.nativeElement.focus();\n }\n });\n }\n\n private autoGrowTextarea(): void {\n if (!this.chatInputEl) return;\n const textarea = this.chatInputEl.nativeElement;\n textarea.style.height = 'auto';\n const lineHeight = 20;\n const maxLines = 4;\n const maxHeight = lineHeight * maxLines;\n textarea.style.height = Math.min(textarea.scrollHeight, maxHeight) + 'px';\n }\n\n private resetInputHeight(): void {\n if (!this.chatInputEl) return;\n this.chatInputEl.nativeElement.style.height = 'auto';\n }\n\n FormatTimestamp(date: Date): string {\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n }\n\n TrackByTimestamp(index: number, message: ChatMessage): number {\n return message.Timestamp.getTime();\n }\n}\n","<div class=\"ai-assistant-panel\">\n <!-- Header -->\n <div class=\"panel-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-robot\"></i>\n <span>AI Assistant</span>\n </div>\n <button class=\"collapse-btn\" (click)=\"OnCollapsePanel()\" title=\"Collapse panel\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n </div>\n\n <!-- Model Selector -->\n <div class=\"model-selector\">\n <label class=\"model-label\">Model</label>\n <div class=\"model-dropdown-wrapper\">\n @if (IsLoadingModels) {\n <div class=\"model-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading models...</span>\n </div>\n } @else {\n <select\n class=\"model-dropdown\"\n [(ngModel)]=\"SelectedModelID\"\n [disabled]=\"AvailableModels.length === 0\">\n @for (model of AvailableModels; track model.ID) {\n <option [value]=\"model.ID\">{{ model.DisplayLabel }}</option>\n }\n @if (AvailableModels.length === 0) {\n <option [value]=\"null\" disabled>No models available</option>\n }\n </select>\n }\n </div>\n </div>\n\n <!-- Quick Actions Bar -->\n <div class=\"quick-actions\">\n @for (action of QuickActions; track action.Label) {\n <button\n class=\"quick-action-btn\"\n [class.disabled]=\"!IsQuickActionEnabled(action)\"\n [disabled]=\"!IsQuickActionEnabled(action) || IsWaitingForResponse\"\n (click)=\"OnQuickAction(action)\"\n [title]=\"action.Label\">\n <i class=\"fa-solid {{ action.Icon }}\"></i>\n <span>{{ action.Label }}</span>\n </button>\n }\n </div>\n\n <!-- Chat Thread -->\n <div class=\"chat-thread\" #chatThread>\n @if (Messages.length === 0) {\n <div class=\"empty-thread\">\n <i class=\"fa-solid fa-comments\"></i>\n <p>No messages yet. Start a conversation or use a quick action above.</p>\n </div>\n }\n\n @for (message of Messages; track TrackByTimestamp($index, message)) {\n <div class=\"message-wrapper\" [class.user]=\"message.Role === 'user'\" [class.assistant]=\"message.Role === 'assistant'\" [class.system]=\"message.Role === 'system'\">\n @if (message.Role === 'assistant') {\n <div class=\"message-avatar assistant-avatar\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n }\n\n <div class=\"message-bubble\" [class.user-bubble]=\"message.Role === 'user'\" [class.assistant-bubble]=\"message.Role === 'assistant'\" [class.system-bubble]=\"message.Role === 'system'\">\n <div class=\"message-content\">{{ message.Content }}</div>\n <div class=\"message-timestamp\">{{ FormatTimestamp(message.Timestamp) }}</div>\n </div>\n\n @if (message.Role === 'user') {\n <div class=\"message-avatar user-avatar\">\n <i class=\"fa-solid fa-user\"></i>\n </div>\n }\n </div>\n }\n\n <!-- Typing Indicator -->\n @if (IsWaitingForResponse) {\n <div class=\"message-wrapper assistant\">\n <div class=\"message-avatar assistant-avatar\">\n <i class=\"fa-solid fa-robot\"></i>\n </div>\n <div class=\"message-bubble assistant-bubble typing-bubble\">\n <div class=\"typing-indicator\">\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n <span class=\"dot\"></span>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Chat Input Area -->\n <div class=\"chat-input-area\">\n <div class=\"input-wrapper\">\n <textarea\n #chatInput\n class=\"chat-textarea\"\n [(ngModel)]=\"InputText\"\n (keydown)=\"OnInputKeydown($event)\"\n (input)=\"OnInputChange()\"\n [disabled]=\"IsWaitingForResponse\"\n placeholder=\"Ask the AI assistant...\"\n rows=\"1\"></textarea>\n <button\n class=\"send-btn\"\n [class.active]=\"InputText.trim().length > 0 && !IsWaitingForResponse\"\n [disabled]=\"InputText.trim().length === 0 || IsWaitingForResponse\"\n (click)=\"OnSendMessage()\"\n title=\"Send message\">\n <i class=\"fa-solid fa-paper-plane\"></i>\n </button>\n </div>\n <div class=\"input-hint\">\n <span>Press <kbd>Enter</kbd> to send, <kbd>Shift+Enter</kbd> for new line</span>\n </div>\n </div>\n</div>\n"]}
|