@memberjunction/ng-dashboards 5.22.0 → 5.23.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/README.md +51 -0
- package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
- package/dist/AI/components/agents/agent-configuration.component.js +364 -362
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/agents/agent-editor.component.js +2 -2
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +275 -64
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2645 -436
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +240 -6
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +2166 -256
- 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 +191 -197
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +9 -8
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +305 -299
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/system/system-configuration.component.js +319 -313
- package/dist/AI/components/system/system-configuration.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +1 -2
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +12 -27
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +10 -12
- package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
- package/dist/APIKeys/api-key-create-dialog.component.js +13 -19
- package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
- package/dist/APIKeys/api-key-edit-panel.component.js +12 -14
- package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
- package/dist/APIKeys/api-scopes-panel.component.js +61 -68
- package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
- package/dist/APIKeys/api-usage-panel.component.js +10 -11
- package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
- package/dist/Actions/components/actions-list-view.component.js +82 -96
- package/dist/Actions/components/actions-list-view.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +130 -134
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
- package/dist/Actions/components/categories-list-view.component.js +40 -46
- package/dist/Actions/components/categories-list-view.component.js.map +1 -1
- package/dist/Actions/components/code-management.component.js +2 -2
- package/dist/Actions/components/code-management.component.js.map +1 -1
- package/dist/Actions/components/entity-integration.component.js +2 -2
- package/dist/Actions/components/entity-integration.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +127 -132
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/executions-list-view.component.js +2 -2
- package/dist/Actions/components/executions-list-view.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +11 -17
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-explorer.component.js +5 -11
- package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-list-item.component.js +8 -10
- package/dist/Actions/components/explorer/action-list-item.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-toolbar.component.js +112 -133
- package/dist/Actions/components/explorer/action-toolbar.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-tree-panel.component.js +63 -83
- package/dist/Actions/components/explorer/action-tree-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-action-panel.component.js +17 -21
- package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
- package/dist/Actions/components/explorer/new-category-panel.component.js +17 -21
- package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
- package/dist/Actions/components/scheduled-actions.component.js +2 -2
- package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
- package/dist/Actions/components/security-permissions.component.js +2 -2
- package/dist/Actions/components/security-permissions.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +13 -5
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +168 -145
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +4 -5
- package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js +197 -200
- package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +5 -7
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +142 -148
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/browser/component-browser.component.js +153 -166
- package/dist/ComponentStudio/components/browser/component-browser.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +15 -20
- package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +16 -21
- package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js +18 -23
- package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/editors/spec-editor.component.js +25 -30
- package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +10 -11
- package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +24 -35
- package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/components/text-import-dialog.component.js +15 -17
- package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
- package/dist/Credentials/components/credentials-categories-resource.component.js +7 -6
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-list-resource.component.js +6 -5
- package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +7 -6
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -9
- package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
- package/dist/Home/home-dashboard.component.js +4 -4
- package/dist/Home/home-dashboard.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +4 -4
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +246 -259
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/widgets/integration-card.component.js +7 -9
- package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
- package/dist/Integration/integration.module.d.ts +6 -10
- package/dist/Integration/integration.module.d.ts.map +1 -1
- package/dist/Integration/integration.module.js +12 -20
- package/dist/Integration/integration.module.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +106 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +607 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +7 -2
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +59 -31
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/index.d.ts +1 -0
- package/dist/KnowledgeHub/index.d.ts.map +1 -1
- package/dist/KnowledgeHub/index.js +1 -0
- package/dist/KnowledgeHub/index.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +9 -7
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +5 -4
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +10 -9
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/MCP/components/mcp-connection-dialog.component.js +141 -132
- package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-log-detail-panel.component.js +4 -4
- package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +141 -128
- package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
- package/dist/MCP/components/mcp-test-tool-dialog.component.js +210 -218
- package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +2 -2
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/MCP/mcp.module.d.ts +6 -9
- package/dist/MCP/mcp.module.d.ts.map +1 -1
- package/dist/MCP/mcp.module.js +20 -22
- package/dist/MCP/mcp.module.js.map +1 -1
- package/dist/Scheduling/components/scheduling-activity.component.js +5 -4
- package/dist/Scheduling/components/scheduling-activity.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-jobs.component.js +6 -5
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
- package/dist/Scheduling/components/scheduling-overview.component.js +93 -92
- package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +9 -10
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/actions-dashboards.module.d.ts +8 -13
- package/dist/actions-dashboards.module.d.ts.map +1 -1
- package/dist/actions-dashboards.module.js +6 -27
- package/dist/actions-dashboards.module.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +16 -20
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +23 -44
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +4 -8
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +0 -19
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/component-studio-dashboards.module.d.ts +7 -11
- package/dist/component-studio-dashboards.module.d.ts.map +1 -1
- package/dist/component-studio-dashboards.module.js +22 -34
- package/dist/component-studio-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +12 -18
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +15 -31
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/credentials-dashboards.module.d.ts +5 -8
- package/dist/credentials-dashboards.module.d.ts.map +1 -1
- package/dist/credentials-dashboards.module.js +3 -19
- package/dist/credentials-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +7 -13
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +0 -27
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +5 -8
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +3 -19
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/dist/scheduling-dashboards.module.d.ts +6 -10
- package/dist/scheduling-dashboards.module.d.ts.map +1 -1
- package/dist/scheduling-dashboards.module.js +3 -23
- package/dist/scheduling-dashboards.module.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +7 -13
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +0 -27
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +47 -55
|
@@ -11,40 +11,36 @@ import { RegisterClass } from '@memberjunction/global';
|
|
|
11
11
|
import { Metadata } from '@memberjunction/core';
|
|
12
12
|
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
13
13
|
import { Subject, takeUntil } from 'rxjs';
|
|
14
|
-
import { TextImportDialogComponent } from './components/text-import-dialog.component';
|
|
15
|
-
import { ArtifactSelectionDialogComponent } from './components/artifact-selection-dialog.component';
|
|
16
|
-
import { ArtifactLoadDialogComponent } from './components/artifact-load-dialog.component';
|
|
17
14
|
import { ComponentStudioStateService } from './services/component-studio-state.service';
|
|
18
15
|
import { ComponentVersionService } from './services/component-version.service';
|
|
19
16
|
import { RunView } from '@memberjunction/core';
|
|
20
17
|
import * as i0 from "@angular/core";
|
|
21
18
|
import * as i1 from "./services/component-studio-state.service";
|
|
22
19
|
import * as i2 from "./services/component-version.service";
|
|
23
|
-
import * as i3 from "@
|
|
24
|
-
import * as i4 from "@memberjunction/ng-notifications";
|
|
20
|
+
import * as i3 from "@memberjunction/ng-notifications";
|
|
25
21
|
const _c0 = ["fileInput"];
|
|
26
22
|
function ComponentStudioDashboardComponent_Conditional_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
-
i0.ɵɵelementStart(0, "span",
|
|
28
|
-
i0.ɵɵelement(1, "span",
|
|
23
|
+
i0.ɵɵelementStart(0, "span", 38);
|
|
24
|
+
i0.ɵɵelement(1, "span", 40);
|
|
29
25
|
i0.ɵɵtext(2, " Running ");
|
|
30
26
|
i0.ɵɵelementEnd();
|
|
31
27
|
} }
|
|
32
28
|
function ComponentStudioDashboardComponent_Conditional_5_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
-
i0.ɵɵelement(0, "span",
|
|
29
|
+
i0.ɵɵelement(0, "span", 39);
|
|
34
30
|
} }
|
|
35
31
|
function ComponentStudioDashboardComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
-
i0.ɵɵelementStart(0, "span",
|
|
32
|
+
i0.ɵɵelementStart(0, "span", 34);
|
|
37
33
|
i0.ɵɵelement(1, "i", 27);
|
|
38
34
|
i0.ɵɵtext(2);
|
|
39
35
|
i0.ɵɵelementEnd();
|
|
40
|
-
i0.ɵɵelementStart(3, "span",
|
|
41
|
-
i0.ɵɵelement(4, "i",
|
|
36
|
+
i0.ɵɵelementStart(3, "span", 35);
|
|
37
|
+
i0.ɵɵelement(4, "i", 36);
|
|
42
38
|
i0.ɵɵelementEnd();
|
|
43
|
-
i0.ɵɵelementStart(5, "span",
|
|
39
|
+
i0.ɵɵelementStart(5, "span", 37);
|
|
44
40
|
i0.ɵɵtext(6);
|
|
45
41
|
i0.ɵɵelementEnd();
|
|
46
|
-
i0.ɵɵconditionalCreate(7, ComponentStudioDashboardComponent_Conditional_5_Conditional_7_Template, 3, 0, "span",
|
|
47
|
-
i0.ɵɵconditionalCreate(8, ComponentStudioDashboardComponent_Conditional_5_Conditional_8_Template, 1, 0, "span",
|
|
42
|
+
i0.ɵɵconditionalCreate(7, ComponentStudioDashboardComponent_Conditional_5_Conditional_7_Template, 3, 0, "span", 38);
|
|
43
|
+
i0.ɵɵconditionalCreate(8, ComponentStudioDashboardComponent_Conditional_5_Conditional_8_Template, 1, 0, "span", 39);
|
|
48
44
|
} if (rf & 2) {
|
|
49
45
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
50
46
|
i0.ɵɵadvance(2);
|
|
@@ -58,15 +54,15 @@ function ComponentStudioDashboardComponent_Conditional_5_Template(rf, ctx) { if
|
|
|
58
54
|
} }
|
|
59
55
|
function ComponentStudioDashboardComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
60
56
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
61
|
-
i0.ɵɵelementStart(0, "button",
|
|
57
|
+
i0.ɵɵelementStart(0, "button", 41);
|
|
62
58
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.SaveVersion()); });
|
|
63
|
-
i0.ɵɵelement(1, "i",
|
|
59
|
+
i0.ɵɵelement(1, "i", 42);
|
|
64
60
|
i0.ɵɵtext(2, " Save ");
|
|
65
61
|
i0.ɵɵelementEnd();
|
|
66
62
|
} }
|
|
67
63
|
function ComponentStudioDashboardComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
68
64
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
69
|
-
i0.ɵɵelementStart(0, "button",
|
|
65
|
+
i0.ɵɵelementStart(0, "button", 43);
|
|
70
66
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.RefreshComponent()); });
|
|
71
67
|
i0.ɵɵelement(1, "i", 17);
|
|
72
68
|
i0.ɵɵtext(2, " Refresh ");
|
|
@@ -74,31 +70,31 @@ function ComponentStudioDashboardComponent_Conditional_9_Template(rf, ctx) { if
|
|
|
74
70
|
} }
|
|
75
71
|
function ComponentStudioDashboardComponent_Conditional_10_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
76
72
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
77
|
-
i0.ɵɵelementStart(0, "div",
|
|
73
|
+
i0.ɵɵelementStart(0, "div", 48)(1, "button", 49);
|
|
78
74
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_10_Conditional_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ExportToArtifact()); });
|
|
79
|
-
i0.ɵɵelement(2, "i",
|
|
75
|
+
i0.ɵɵelement(2, "i", 42);
|
|
80
76
|
i0.ɵɵtext(3, " To Artifact ");
|
|
81
77
|
i0.ɵɵelementEnd();
|
|
82
|
-
i0.ɵɵelementStart(4, "button",
|
|
78
|
+
i0.ɵɵelementStart(4, "button", 49);
|
|
83
79
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_10_Conditional_5_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ExportToFile()); });
|
|
84
|
-
i0.ɵɵelement(5, "i",
|
|
80
|
+
i0.ɵɵelement(5, "i", 50);
|
|
85
81
|
i0.ɵɵtext(6, " To File ");
|
|
86
82
|
i0.ɵɵelementEnd();
|
|
87
|
-
i0.ɵɵelementStart(7, "button",
|
|
83
|
+
i0.ɵɵelementStart(7, "button", 49);
|
|
88
84
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_10_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ExportToClipboard()); });
|
|
89
|
-
i0.ɵɵelement(8, "i",
|
|
85
|
+
i0.ɵɵelement(8, "i", 51);
|
|
90
86
|
i0.ɵɵtext(9, " To Clipboard ");
|
|
91
87
|
i0.ɵɵelementEnd()();
|
|
92
88
|
} }
|
|
93
89
|
function ComponentStudioDashboardComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
94
90
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
95
|
-
i0.ɵɵelementStart(0, "div",
|
|
91
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "button", 45);
|
|
96
92
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_10_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleExportDropdown()); });
|
|
97
|
-
i0.ɵɵelement(2, "i",
|
|
93
|
+
i0.ɵɵelement(2, "i", 46);
|
|
98
94
|
i0.ɵɵtext(3, " Export ");
|
|
99
|
-
i0.ɵɵelement(4, "i",
|
|
95
|
+
i0.ɵɵelement(4, "i", 47);
|
|
100
96
|
i0.ɵɵelementEnd();
|
|
101
|
-
i0.ɵɵconditionalCreate(5, ComponentStudioDashboardComponent_Conditional_10_Conditional_5_Template, 10, 0, "div",
|
|
97
|
+
i0.ɵɵconditionalCreate(5, ComponentStudioDashboardComponent_Conditional_10_Conditional_5_Template, 10, 0, "div", 48);
|
|
102
98
|
i0.ɵɵelementEnd();
|
|
103
99
|
} if (rf & 2) {
|
|
104
100
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -108,10 +104,10 @@ function ComponentStudioDashboardComponent_Conditional_10_Template(rf, ctx) { if
|
|
|
108
104
|
} }
|
|
109
105
|
function ComponentStudioDashboardComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
110
106
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
111
|
-
i0.ɵɵelementStart(0, "div",
|
|
107
|
+
i0.ɵɵelementStart(0, "div", 52)(1, "mj-component-browser", 53);
|
|
112
108
|
i0.ɵɵlistener("NewComponent", function ComponentStudioDashboardComponent_Conditional_21_Template_mj_component_browser_NewComponent_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnNewComponent()); })("ImportFromFile", function ComponentStudioDashboardComponent_Conditional_21_Template_mj_component_browser_ImportFromFile_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ImportFromFile()); })("ImportFromText", function ComponentStudioDashboardComponent_Conditional_21_Template_mj_component_browser_ImportFromText_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ImportFromText()); })("ImportFromArtifact", function ComponentStudioDashboardComponent_Conditional_21_Template_mj_component_browser_ImportFromArtifact_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ImportFromArtifact()); });
|
|
113
109
|
i0.ɵɵelementEnd()();
|
|
114
|
-
i0.ɵɵelementStart(2, "div",
|
|
110
|
+
i0.ɵɵelementStart(2, "div", 54);
|
|
115
111
|
i0.ɵɵlistener("mousedown", function ComponentStudioDashboardComponent_Conditional_21_Template_div_mousedown_2_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnLeftResizeStart($event)); });
|
|
116
112
|
i0.ɵɵelementEnd();
|
|
117
113
|
} if (rf & 2) {
|
|
@@ -120,13 +116,13 @@ function ComponentStudioDashboardComponent_Conditional_21_Template(rf, ctx) { if
|
|
|
120
116
|
} }
|
|
121
117
|
function ComponentStudioDashboardComponent_Conditional_23_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
122
118
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
123
|
-
i0.ɵɵelementStart(0, "div",
|
|
119
|
+
i0.ɵɵelementStart(0, "div", 66);
|
|
124
120
|
i0.ɵɵlistener("mousedown", function ComponentStudioDashboardComponent_Conditional_23_Conditional_11_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnCenterResizeStart($event)); });
|
|
125
|
-
i0.ɵɵelement(1, "div",
|
|
121
|
+
i0.ɵɵelement(1, "div", 67);
|
|
126
122
|
i0.ɵɵelementEnd();
|
|
127
123
|
} }
|
|
128
124
|
function ComponentStudioDashboardComponent_Conditional_23_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
129
|
-
i0.ɵɵelementStart(0, "div",
|
|
125
|
+
i0.ɵɵelementStart(0, "div", 68);
|
|
130
126
|
i0.ɵɵelement(1, "mj-editor-tabs");
|
|
131
127
|
i0.ɵɵelementEnd();
|
|
132
128
|
} if (rf & 2) {
|
|
@@ -135,20 +131,20 @@ function ComponentStudioDashboardComponent_Conditional_23_Conditional_12_Templat
|
|
|
135
131
|
} }
|
|
136
132
|
function ComponentStudioDashboardComponent_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
137
133
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
138
|
-
i0.ɵɵelementStart(0, "div",
|
|
139
|
-
i0.ɵɵelement(3, "i",
|
|
134
|
+
i0.ɵɵelementStart(0, "div", 55)(1, "div", 56)(2, "div", 57);
|
|
135
|
+
i0.ɵɵelement(3, "i", 58);
|
|
140
136
|
i0.ɵɵelementStart(4, "span");
|
|
141
137
|
i0.ɵɵtext(5, "Preview");
|
|
142
138
|
i0.ɵɵelementEnd()();
|
|
143
|
-
i0.ɵɵelementStart(6, "div",
|
|
139
|
+
i0.ɵɵelementStart(6, "div", 59)(7, "button", 60);
|
|
144
140
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_23_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleEditorPanel()); });
|
|
145
|
-
i0.ɵɵelement(8, "i",
|
|
141
|
+
i0.ɵɵelement(8, "i", 61);
|
|
146
142
|
i0.ɵɵelementEnd()()();
|
|
147
|
-
i0.ɵɵelementStart(9, "div",
|
|
143
|
+
i0.ɵɵelementStart(9, "div", 62)(10, "mj-component-preview", 63);
|
|
148
144
|
i0.ɵɵlistener("AskAIToFix", function ComponentStudioDashboardComponent_Conditional_23_Template_mj_component_preview_AskAIToFix_10_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnAskAIToFix($event)); });
|
|
149
145
|
i0.ɵɵelementEnd()()();
|
|
150
|
-
i0.ɵɵconditionalCreate(11, ComponentStudioDashboardComponent_Conditional_23_Conditional_11_Template, 2, 0, "div",
|
|
151
|
-
i0.ɵɵconditionalCreate(12, ComponentStudioDashboardComponent_Conditional_23_Conditional_12_Template, 2, 2, "div",
|
|
146
|
+
i0.ɵɵconditionalCreate(11, ComponentStudioDashboardComponent_Conditional_23_Conditional_11_Template, 2, 0, "div", 64);
|
|
147
|
+
i0.ɵɵconditionalCreate(12, ComponentStudioDashboardComponent_Conditional_23_Conditional_12_Template, 2, 2, "div", 65);
|
|
152
148
|
} if (rf & 2) {
|
|
153
149
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
154
150
|
i0.ɵɵstyleProp("flex", ctx_r1.IsEditorPanelCollapsed ? "1 1 100%" : ctx_r1.previewFlex);
|
|
@@ -162,8 +158,8 @@ function ComponentStudioDashboardComponent_Conditional_23_Template(rf, ctx) { if
|
|
|
162
158
|
} }
|
|
163
159
|
function ComponentStudioDashboardComponent_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
164
160
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
165
|
-
i0.ɵɵelementStart(0, "div", 21)(1, "div",
|
|
166
|
-
i0.ɵɵelement(3, "i",
|
|
161
|
+
i0.ɵɵelementStart(0, "div", 21)(1, "div", 69)(2, "div", 70);
|
|
162
|
+
i0.ɵɵelement(3, "i", 71);
|
|
167
163
|
i0.ɵɵelementEnd();
|
|
168
164
|
i0.ɵɵelementStart(4, "h2");
|
|
169
165
|
i0.ɵɵtext(5, "Ready to Build");
|
|
@@ -171,53 +167,48 @@ function ComponentStudioDashboardComponent_Conditional_24_Template(rf, ctx) { if
|
|
|
171
167
|
i0.ɵɵelementStart(6, "p");
|
|
172
168
|
i0.ɵɵtext(7, "Select a component from the browser or create a new one to get started");
|
|
173
169
|
i0.ɵɵelementEnd();
|
|
174
|
-
i0.ɵɵelementStart(8, "div",
|
|
170
|
+
i0.ɵɵelementStart(8, "div", 72)(9, "button", 73);
|
|
175
171
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_24_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnNewComponent()); });
|
|
176
|
-
i0.ɵɵelement(10, "span",
|
|
172
|
+
i0.ɵɵelement(10, "span", 74);
|
|
177
173
|
i0.ɵɵtext(11, " New Component ");
|
|
178
174
|
i0.ɵɵelementEnd();
|
|
179
|
-
i0.ɵɵelementStart(12, "button",
|
|
175
|
+
i0.ɵɵelementStart(12, "button", 75);
|
|
180
176
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_24_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ImportFromFile()); });
|
|
181
|
-
i0.ɵɵelement(13, "span",
|
|
177
|
+
i0.ɵɵelement(13, "span", 76);
|
|
182
178
|
i0.ɵɵtext(14, " Import ");
|
|
183
179
|
i0.ɵɵelementEnd()();
|
|
184
|
-
i0.ɵɵelementStart(15, "div",
|
|
180
|
+
i0.ɵɵelementStart(15, "div", 77)(16, "span", 78);
|
|
185
181
|
i0.ɵɵtext(17, "Quick start:");
|
|
186
182
|
i0.ɵɵelementEnd();
|
|
187
|
-
i0.ɵɵelementStart(18, "button",
|
|
183
|
+
i0.ɵɵelementStart(18, "button", 79);
|
|
188
184
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_24_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnQuickStart("dashboard")); });
|
|
189
|
-
i0.ɵɵelement(19, "i",
|
|
185
|
+
i0.ɵɵelement(19, "i", 80);
|
|
190
186
|
i0.ɵɵtext(20, " Dashboard ");
|
|
191
187
|
i0.ɵɵelementEnd();
|
|
192
|
-
i0.ɵɵelementStart(21, "button",
|
|
188
|
+
i0.ɵɵelementStart(21, "button", 79);
|
|
193
189
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_24_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnQuickStart("report")); });
|
|
194
|
-
i0.ɵɵelement(22, "i",
|
|
190
|
+
i0.ɵɵelement(22, "i", 81);
|
|
195
191
|
i0.ɵɵtext(23, " Report ");
|
|
196
192
|
i0.ɵɵelementEnd();
|
|
197
|
-
i0.ɵɵelementStart(24, "button",
|
|
193
|
+
i0.ɵɵelementStart(24, "button", 79);
|
|
198
194
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_24_Template_button_click_24_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnQuickStart("chart")); });
|
|
199
|
-
i0.ɵɵelement(25, "i",
|
|
195
|
+
i0.ɵɵelement(25, "i", 82);
|
|
200
196
|
i0.ɵɵtext(26, " Chart ");
|
|
201
197
|
i0.ɵɵelementEnd();
|
|
202
|
-
i0.ɵɵelementStart(27, "button",
|
|
198
|
+
i0.ɵɵelementStart(27, "button", 79);
|
|
203
199
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_24_Template_button_click_27_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnQuickStart("form")); });
|
|
204
|
-
i0.ɵɵelement(28, "i",
|
|
200
|
+
i0.ɵɵelement(28, "i", 83);
|
|
205
201
|
i0.ɵɵtext(29, " Form ");
|
|
206
202
|
i0.ɵɵelementEnd()()()();
|
|
207
|
-
} if (rf & 2) {
|
|
208
|
-
i0.ɵɵadvance(9);
|
|
209
|
-
i0.ɵɵproperty("themeColor", "primary");
|
|
210
|
-
i0.ɵɵadvance(3);
|
|
211
|
-
i0.ɵɵproperty("themeColor", "base");
|
|
212
203
|
} }
|
|
213
204
|
function ComponentStudioDashboardComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
214
205
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
215
|
-
i0.ɵɵelementStart(0, "div",
|
|
206
|
+
i0.ɵɵelementStart(0, "div", 54);
|
|
216
207
|
i0.ɵɵlistener("mousedown", function ComponentStudioDashboardComponent_Conditional_25_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnRightResizeStart($event)); });
|
|
217
208
|
i0.ɵɵelementEnd();
|
|
218
209
|
} }
|
|
219
210
|
function ComponentStudioDashboardComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
220
|
-
i0.ɵɵelementStart(0, "div",
|
|
211
|
+
i0.ɵɵelementStart(0, "div", 84);
|
|
221
212
|
i0.ɵɵelement(1, "mj-ai-assistant-panel");
|
|
222
213
|
i0.ɵɵelementEnd();
|
|
223
214
|
} if (rf & 2) {
|
|
@@ -226,7 +217,7 @@ function ComponentStudioDashboardComponent_Conditional_26_Template(rf, ctx) { if
|
|
|
226
217
|
} }
|
|
227
218
|
function ComponentStudioDashboardComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
228
219
|
i0.ɵɵelementStart(0, "span", 26);
|
|
229
|
-
i0.ɵɵelement(1, "i",
|
|
220
|
+
i0.ɵɵelement(1, "i", 85);
|
|
230
221
|
i0.ɵɵtext(2);
|
|
231
222
|
i0.ɵɵpipe(3, "date");
|
|
232
223
|
i0.ɵɵelementEnd();
|
|
@@ -237,56 +228,56 @@ function ComponentStudioDashboardComponent_Conditional_33_Template(rf, ctx) { if
|
|
|
237
228
|
} }
|
|
238
229
|
function ComponentStudioDashboardComponent_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
239
230
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
240
|
-
i0.ɵɵelementStart(0, "div",
|
|
231
|
+
i0.ɵɵelementStart(0, "div", 86);
|
|
241
232
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_38_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ShowKeyboardShortcuts = false); });
|
|
242
|
-
i0.ɵɵelementStart(1, "div",
|
|
233
|
+
i0.ɵɵelementStart(1, "div", 87);
|
|
243
234
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_38_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r12); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
244
|
-
i0.ɵɵelementStart(2, "div",
|
|
235
|
+
i0.ɵɵelementStart(2, "div", 88)(3, "h3");
|
|
245
236
|
i0.ɵɵtext(4, "Keyboard Shortcuts");
|
|
246
237
|
i0.ɵɵelementEnd();
|
|
247
|
-
i0.ɵɵelementStart(5, "button",
|
|
238
|
+
i0.ɵɵelementStart(5, "button", 89);
|
|
248
239
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_38_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ShowKeyboardShortcuts = false); });
|
|
249
|
-
i0.ɵɵelement(6, "i",
|
|
240
|
+
i0.ɵɵelement(6, "i", 90);
|
|
250
241
|
i0.ɵɵelementEnd()();
|
|
251
|
-
i0.ɵɵelementStart(7, "div",
|
|
242
|
+
i0.ɵɵelementStart(7, "div", 91)(8, "div", 92)(9, "h4");
|
|
252
243
|
i0.ɵɵtext(10, "General");
|
|
253
244
|
i0.ɵɵelementEnd();
|
|
254
|
-
i0.ɵɵelementStart(11, "div",
|
|
245
|
+
i0.ɵɵelementStart(11, "div", 93)(12, "span", 94)(13, "kbd");
|
|
255
246
|
i0.ɵɵtext(14, "Ctrl");
|
|
256
247
|
i0.ɵɵelementEnd();
|
|
257
248
|
i0.ɵɵtext(15, " + ");
|
|
258
249
|
i0.ɵɵelementStart(16, "kbd");
|
|
259
250
|
i0.ɵɵtext(17, "S");
|
|
260
251
|
i0.ɵɵelementEnd()();
|
|
261
|
-
i0.ɵɵelementStart(18, "span",
|
|
252
|
+
i0.ɵɵelementStart(18, "span", 95);
|
|
262
253
|
i0.ɵɵtext(19, "Save version");
|
|
263
254
|
i0.ɵɵelementEnd()();
|
|
264
|
-
i0.ɵɵelementStart(20, "div",
|
|
255
|
+
i0.ɵɵelementStart(20, "div", 93)(21, "span", 94)(22, "kbd");
|
|
265
256
|
i0.ɵɵtext(23, "Ctrl");
|
|
266
257
|
i0.ɵɵelementEnd();
|
|
267
258
|
i0.ɵɵtext(24, " + ");
|
|
268
259
|
i0.ɵɵelementStart(25, "kbd");
|
|
269
260
|
i0.ɵɵtext(26, "N");
|
|
270
261
|
i0.ɵɵelementEnd()();
|
|
271
|
-
i0.ɵɵelementStart(27, "span",
|
|
262
|
+
i0.ɵɵelementStart(27, "span", 95);
|
|
272
263
|
i0.ɵɵtext(28, "New component");
|
|
273
264
|
i0.ɵɵelementEnd()();
|
|
274
|
-
i0.ɵɵelementStart(29, "div",
|
|
265
|
+
i0.ɵɵelementStart(29, "div", 93)(30, "span", 94)(31, "kbd");
|
|
275
266
|
i0.ɵɵtext(32, "?");
|
|
276
267
|
i0.ɵɵelementEnd()();
|
|
277
|
-
i0.ɵɵelementStart(33, "span",
|
|
268
|
+
i0.ɵɵelementStart(33, "span", 95);
|
|
278
269
|
i0.ɵɵtext(34, "Toggle shortcuts");
|
|
279
270
|
i0.ɵɵelementEnd()();
|
|
280
|
-
i0.ɵɵelementStart(35, "div",
|
|
271
|
+
i0.ɵɵelementStart(35, "div", 93)(36, "span", 94)(37, "kbd");
|
|
281
272
|
i0.ɵɵtext(38, "Esc");
|
|
282
273
|
i0.ɵɵelementEnd()();
|
|
283
|
-
i0.ɵɵelementStart(39, "span",
|
|
274
|
+
i0.ɵɵelementStart(39, "span", 95);
|
|
284
275
|
i0.ɵɵtext(40, "Close overlay");
|
|
285
276
|
i0.ɵɵelementEnd()()()()()();
|
|
286
277
|
} }
|
|
287
278
|
function ComponentStudioDashboardComponent_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
288
279
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
289
|
-
i0.ɵɵelementStart(0, "mj-new-component-dialog",
|
|
280
|
+
i0.ɵɵelementStart(0, "mj-new-component-dialog", 96);
|
|
290
281
|
i0.ɵɵlistener("Close", function ComponentStudioDashboardComponent_Conditional_39_Template_mj_new_component_dialog_Close_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnNewComponentDialogClose($event)); });
|
|
291
282
|
i0.ɵɵelementEnd();
|
|
292
283
|
} if (rf & 2) {
|
|
@@ -295,19 +286,46 @@ function ComponentStudioDashboardComponent_Conditional_39_Template(rf, ctx) { if
|
|
|
295
286
|
} }
|
|
296
287
|
function ComponentStudioDashboardComponent_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
297
288
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
298
|
-
i0.ɵɵelementStart(0, "mj-save-version-dialog",
|
|
289
|
+
i0.ɵɵelementStart(0, "mj-save-version-dialog", 97);
|
|
299
290
|
i0.ɵɵlistener("Save", function ComponentStudioDashboardComponent_Conditional_40_Template_mj_save_version_dialog_Save_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSaveVersionConfirm($event)); })("Cancel", function ComponentStudioDashboardComponent_Conditional_40_Template_mj_save_version_dialog_Cancel_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ShowSaveVersionDialog = false); });
|
|
300
291
|
i0.ɵɵelementEnd();
|
|
301
292
|
} if (rf & 2) {
|
|
302
293
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
303
294
|
i0.ɵɵproperty("Visible", ctx_r1.ShowSaveVersionDialog)("CurrentVersion", ctx_r1.versionService.CurrentVersionNumber);
|
|
304
295
|
} }
|
|
296
|
+
function ComponentStudioDashboardComponent_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
297
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
298
|
+
i0.ɵɵelementStart(0, "mj-dialog", 98);
|
|
299
|
+
i0.ɵɵlistener("Close", function ComponentStudioDashboardComponent_Conditional_41_Template_mj_dialog_Close_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnTextImportCancel()); });
|
|
300
|
+
i0.ɵɵelementStart(1, "app-text-import-dialog", 99);
|
|
301
|
+
i0.ɵɵlistener("importSpec", function ComponentStudioDashboardComponent_Conditional_41_Template_app_text_import_dialog_importSpec_1_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnTextImportSpec($event)); })("cancelDialog", function ComponentStudioDashboardComponent_Conditional_41_Template_app_text_import_dialog_cancelDialog_1_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnTextImportCancel()); });
|
|
302
|
+
i0.ɵɵelementEnd()();
|
|
303
|
+
} if (rf & 2) {
|
|
304
|
+
i0.ɵɵproperty("Visible", true)("Width", 700)("MinWidth", 500);
|
|
305
|
+
} }
|
|
306
|
+
function ComponentStudioDashboardComponent_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
307
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
308
|
+
i0.ɵɵelementStart(0, "app-artifact-load-dialog", 96);
|
|
309
|
+
i0.ɵɵlistener("Close", function ComponentStudioDashboardComponent_Conditional_42_Template_app_artifact_load_dialog_Close_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnArtifactLoadClose($event)); });
|
|
310
|
+
i0.ɵɵelementEnd();
|
|
311
|
+
} if (rf & 2) {
|
|
312
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
313
|
+
i0.ɵɵproperty("Visible", ctx_r1.ShowArtifactLoadDialog);
|
|
314
|
+
} }
|
|
315
|
+
function ComponentStudioDashboardComponent_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
316
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
317
|
+
i0.ɵɵelementStart(0, "app-artifact-selection-dialog", 96);
|
|
318
|
+
i0.ɵɵlistener("Close", function ComponentStudioDashboardComponent_Conditional_43_Template_app_artifact_selection_dialog_Close_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnArtifactSelectionClose($event)); });
|
|
319
|
+
i0.ɵɵelementEnd();
|
|
320
|
+
} if (rf & 2) {
|
|
321
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
322
|
+
i0.ɵɵproperty("Visible", ctx_r1.ShowArtifactSelectionDialog);
|
|
323
|
+
} }
|
|
305
324
|
let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent extends BaseDashboard {
|
|
306
325
|
static { ComponentStudioDashboardComponent_1 = this; }
|
|
307
326
|
state;
|
|
308
327
|
versionService;
|
|
309
328
|
cdr;
|
|
310
|
-
dialogService;
|
|
311
329
|
notificationService;
|
|
312
330
|
static USER_PREFS_KEY = 'ComponentStudio.UserPreferences';
|
|
313
331
|
// --- Panel widths ---
|
|
@@ -330,6 +348,9 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
330
348
|
ShowNewComponentDialog = false;
|
|
331
349
|
ShowKeyboardShortcuts = false;
|
|
332
350
|
ShowSaveVersionDialog = false;
|
|
351
|
+
ShowTextImportDialog = false;
|
|
352
|
+
ShowArtifactLoadDialog = false;
|
|
353
|
+
ShowArtifactSelectionDialog = false;
|
|
333
354
|
// --- Status bar ---
|
|
334
355
|
LastSavedTime = null;
|
|
335
356
|
// --- Preferences ---
|
|
@@ -337,12 +358,11 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
337
358
|
fileInput;
|
|
338
359
|
destroy$ = new Subject();
|
|
339
360
|
metadata = new Metadata();
|
|
340
|
-
constructor(state, versionService, cdr,
|
|
361
|
+
constructor(state, versionService, cdr, notificationService) {
|
|
341
362
|
super();
|
|
342
363
|
this.state = state;
|
|
343
364
|
this.versionService = versionService;
|
|
344
365
|
this.cdr = cdr;
|
|
345
|
-
this.dialogService = dialogService;
|
|
346
366
|
this.notificationService = notificationService;
|
|
347
367
|
}
|
|
348
368
|
async GetResourceDisplayName(data) {
|
|
@@ -621,56 +641,46 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
621
641
|
this.fileInput?.nativeElement.click();
|
|
622
642
|
}
|
|
623
643
|
ImportFromText() {
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
width: 700,
|
|
627
|
-
height: 600,
|
|
628
|
-
minWidth: 500,
|
|
629
|
-
title: '',
|
|
630
|
-
actions: []
|
|
631
|
-
});
|
|
632
|
-
const instance = dialogRef.content.instance;
|
|
633
|
-
instance.importSpec.subscribe((spec) => {
|
|
634
|
-
this.handleSpecImport(spec, 'text-import.json', 'Text');
|
|
635
|
-
dialogRef.close();
|
|
636
|
-
});
|
|
637
|
-
instance.cancelDialog.subscribe(() => dialogRef.close());
|
|
644
|
+
this.ShowTextImportDialog = true;
|
|
645
|
+
this.cdr.detectChanges();
|
|
638
646
|
}
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
isFileLoaded: true,
|
|
658
|
-
type: result.spec.type || 'Component',
|
|
659
|
-
status: 'Artifact',
|
|
660
|
-
sourceArtifactID: result.artifactID,
|
|
661
|
-
sourceVersionID: result.versionID
|
|
662
|
-
};
|
|
663
|
-
this.state.AddFileLoadedComponent(artifactComponent);
|
|
664
|
-
this.state.ExpandedComponent = artifactComponent;
|
|
665
|
-
this.state.RunComponent(artifactComponent);
|
|
666
|
-
this.notificationService.CreateSimpleNotification(`Loaded "${result.spec.name}" from artifact`, 'success', 3000);
|
|
667
|
-
}
|
|
668
|
-
catch (error) {
|
|
669
|
-
if (error && error !== 'cancel') {
|
|
670
|
-
console.error('Error loading from artifact:', error);
|
|
671
|
-
this.notificationService.CreateSimpleNotification('Failed to load from artifact', 'error');
|
|
672
|
-
}
|
|
647
|
+
OnTextImportSpec(spec) {
|
|
648
|
+
this.ShowTextImportDialog = false;
|
|
649
|
+
this.handleSpecImport(spec, 'text-import.json', 'Text');
|
|
650
|
+
this.cdr.detectChanges();
|
|
651
|
+
}
|
|
652
|
+
OnTextImportCancel() {
|
|
653
|
+
this.ShowTextImportDialog = false;
|
|
654
|
+
this.cdr.detectChanges();
|
|
655
|
+
}
|
|
656
|
+
ImportFromArtifact() {
|
|
657
|
+
this.ShowArtifactLoadDialog = true;
|
|
658
|
+
this.cdr.detectChanges();
|
|
659
|
+
}
|
|
660
|
+
OnArtifactLoadClose(result) {
|
|
661
|
+
this.ShowArtifactLoadDialog = false;
|
|
662
|
+
if (!result) {
|
|
663
|
+
this.cdr.detectChanges();
|
|
664
|
+
return;
|
|
673
665
|
}
|
|
666
|
+
const artifactComponent = {
|
|
667
|
+
id: this.state.GenerateId(),
|
|
668
|
+
name: result.spec.name,
|
|
669
|
+
description: result.spec.description,
|
|
670
|
+
specification: result.spec,
|
|
671
|
+
filename: `${result.artifactName} (v${result.versionNumber})`,
|
|
672
|
+
loadedAt: new Date(),
|
|
673
|
+
isFileLoaded: true,
|
|
674
|
+
type: result.spec.type || 'Component',
|
|
675
|
+
status: 'Artifact',
|
|
676
|
+
sourceArtifactID: result.artifactID,
|
|
677
|
+
sourceVersionID: result.versionID
|
|
678
|
+
};
|
|
679
|
+
this.state.AddFileLoadedComponent(artifactComponent);
|
|
680
|
+
this.state.ExpandedComponent = artifactComponent;
|
|
681
|
+
this.state.RunComponent(artifactComponent);
|
|
682
|
+
this.notificationService.CreateSimpleNotification(`Loaded "${result.spec.name}" from artifact`, 'success', 3000);
|
|
683
|
+
this.cdr.detectChanges();
|
|
674
684
|
}
|
|
675
685
|
async HandleFileSelect(event) {
|
|
676
686
|
const input = event.target;
|
|
@@ -707,21 +717,24 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
707
717
|
this.state.ExpandedComponent = component;
|
|
708
718
|
this.state.RunComponent(component);
|
|
709
719
|
}
|
|
710
|
-
|
|
720
|
+
ExportToArtifact() {
|
|
711
721
|
this.exportDropdownOpen = false;
|
|
712
722
|
const currentSpec = this.state.GetCurrentSpec();
|
|
713
723
|
if (!currentSpec || !this.state.SelectedComponent)
|
|
714
724
|
return;
|
|
715
|
-
|
|
725
|
+
this.ShowArtifactSelectionDialog = true;
|
|
726
|
+
this.cdr.detectChanges();
|
|
727
|
+
}
|
|
728
|
+
async OnArtifactSelectionClose(result) {
|
|
729
|
+
this.ShowArtifactSelectionDialog = false;
|
|
730
|
+
if (!result?.action) {
|
|
731
|
+
this.cdr.detectChanges();
|
|
732
|
+
return;
|
|
733
|
+
}
|
|
734
|
+
const currentSpec = this.state.GetCurrentSpec();
|
|
735
|
+
if (!currentSpec)
|
|
736
|
+
return;
|
|
716
737
|
try {
|
|
717
|
-
const dialogRef = this.dialogService.open({
|
|
718
|
-
content: ArtifactSelectionDialogComponent,
|
|
719
|
-
width: 1200,
|
|
720
|
-
height: 900
|
|
721
|
-
});
|
|
722
|
-
const result = await dialogRef.result.toPromise();
|
|
723
|
-
if (!result?.action)
|
|
724
|
-
return;
|
|
725
738
|
const artifact = result.artifact;
|
|
726
739
|
let version;
|
|
727
740
|
if (result.action === 'update-version' && result.versionToUpdate) {
|
|
@@ -762,6 +775,7 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
762
775
|
console.error('Error saving to artifact:', error);
|
|
763
776
|
this.notificationService.CreateSimpleNotification('Error saving to artifact', 'error');
|
|
764
777
|
}
|
|
778
|
+
this.cdr.detectChanges();
|
|
765
779
|
}
|
|
766
780
|
ExportToFile() {
|
|
767
781
|
this.exportDropdownOpen = false;
|
|
@@ -876,7 +890,7 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
876
890
|
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
877
891
|
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
|
|
878
892
|
}
|
|
879
|
-
static ɵfac = function ComponentStudioDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ComponentStudioDashboardComponent)(i0.ɵɵdirectiveInject(i1.ComponentStudioStateService), i0.ɵɵdirectiveInject(i2.ComponentVersionService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.
|
|
893
|
+
static ɵfac = function ComponentStudioDashboardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ComponentStudioDashboardComponent)(i0.ɵɵdirectiveInject(i1.ComponentStudioStateService), i0.ɵɵdirectiveInject(i2.ComponentVersionService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.MJNotificationService)); };
|
|
880
894
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ComponentStudioDashboardComponent, selectors: [["mj-component-studio-dashboard"]], viewQuery: function ComponentStudioDashboardComponent_Query(rf, ctx) { if (rf & 1) {
|
|
881
895
|
i0.ɵɵviewQuery(_c0, 5);
|
|
882
896
|
} if (rf & 2) {
|
|
@@ -884,7 +898,7 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
884
898
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fileInput = _t.first);
|
|
885
899
|
} }, hostBindings: function ComponentStudioDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
886
900
|
i0.ɵɵlistener("keydown", function ComponentStudioDashboardComponent_keydown_HostBindingHandler($event) { return ctx.OnKeyDown($event); }, i0.ɵɵresolveDocument)("click", function ComponentStudioDashboardComponent_click_HostBindingHandler($event) { return ctx.OnDocumentClick($event); }, i0.ɵɵresolveDocument);
|
|
887
|
-
} }, standalone: false, features: [i0.ɵɵProvidersFeature([ComponentStudioStateService, ComponentVersionService]), i0.ɵɵInheritDefinitionFeature], decls:
|
|
901
|
+
} }, standalone: false, features: [i0.ɵɵProvidersFeature([ComponentStudioStateService, ComponentVersionService]), i0.ɵɵInheritDefinitionFeature], decls: 44, vars: 23, consts: [["fileInput", ""], [1, "component-studio"], [1, "studio-toolbar"], [1, "toolbar-context"], ["title", "Toggle browser panel", 1, "tb-btn", "icon-only", 3, "click"], [1, "fa-solid", "fa-bars"], [1, "toolbar-spacer"], [1, "toolbar-actions"], ["title", "Save version (Ctrl+S)", 1, "tb-btn", "primary"], ["title", "Refresh component", 1, "tb-btn"], [1, "header-dropdown", 3, "open"], [1, "toolbar-divider"], [1, "tb-btn", "icon-only", 3, "click", "title"], [1, "fa-solid", "fa-robot"], ["title", "Keyboard shortcuts (?)", 1, "tb-btn", "icon-only", 3, "click"], [1, "fa-solid", "fa-keyboard"], ["title", "Refresh data", 1, "tb-btn", "icon-only", 3, "click", "disabled"], [1, "fa-solid", "fa-arrows-rotate"], ["type", "file", "accept", ".json", 2, "display", "none", 3, "change"], [1, "studio-body"], [1, "panel", "panel-center"], [1, "empty-state"], [1, "resize-handle"], [1, "panel", "panel-right", 3, "width"], [1, "status-bar"], [1, "status-left"], [1, "status-item"], [1, "fa-solid", "fa-cube"], [1, "status-right"], [1, "status-item", "shortcut-hint"], [1, "shortcuts-overlay"], [3, "Visible"], [3, "Visible", "CurrentVersion"], ["Title", "Import Component from Text", 3, "Visible", "Width", "MinWidth"], [1, "breadcrumb-type"], [1, "breadcrumb-sep"], [1, "fa-solid", "fa-chevron-right"], [1, "component-label"], [1, "running-badge"], ["title", "Unsaved changes", 1, "unsaved-dot"], [1, "running-dot-small"], ["title", "Save version (Ctrl+S)", 1, "tb-btn", "primary", 3, "click"], [1, "fa-solid", "fa-save"], ["title", "Refresh component", 1, "tb-btn", 3, "click"], [1, "header-dropdown"], [1, "tb-btn", 3, "click"], [1, "fa-solid", "fa-file-export"], [1, "fa-solid", "fa-chevron-down", "dropdown-icon"], [1, "dropdown-menu"], [1, "dropdown-item", 3, "click"], [1, "fa-solid", "fa-file"], [1, "fa-solid", "fa-clipboard"], [1, "panel", "panel-left"], [3, "NewComponent", "ImportFromFile", "ImportFromText", "ImportFromArtifact"], [1, "resize-handle", 3, "mousedown"], [1, "workspace-preview"], [1, "preview-sub-header"], [1, "preview-sub-left"], [1, "fa-solid", "fa-eye"], [1, "preview-sub-right"], ["title", "Toggle editor panel", 1, "toggle-editors-btn", 3, "click"], [1, "fa-solid", "fa-columns"], [1, "preview-body"], [3, "AskAIToFix"], [1, "resize-handle", "center-divider"], [1, "workspace-editors", 3, "flex"], [1, "resize-handle", "center-divider", 3, "mousedown"], [1, "divider-grip"], [1, "workspace-editors"], [1, "empty-state-content"], [1, "empty-state-icon"], [1, "fa-solid", "fa-rocket"], [1, "empty-state-actions"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", 3, "click"], [1, "fa-solid", "fa-file-import"], [1, "quick-start-templates"], [1, "quick-start-label"], [1, "quick-start-btn", 3, "click"], [1, "fa-solid", "fa-chart-line"], [1, "fa-solid", "fa-file-alt"], [1, "fa-solid", "fa-chart-pie"], [1, "fa-solid", "fa-edit"], [1, "panel", "panel-right"], [1, "fa-solid", "fa-check-circle"], [1, "shortcuts-overlay", 3, "click"], [1, "shortcuts-panel", 3, "click"], [1, "shortcuts-header"], [1, "shortcuts-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "shortcuts-body"], [1, "shortcut-group"], [1, "shortcut-row"], [1, "shortcut-keys"], [1, "shortcut-desc"], [3, "Close", "Visible"], [3, "Save", "Cancel", "Visible", "CurrentVersion"], ["Title", "Import Component from Text", 3, "Close", "Visible", "Width", "MinWidth"], [3, "importSpec", "cancelDialog"]], template: function ComponentStudioDashboardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
888
902
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
889
903
|
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3)(3, "button", 4);
|
|
890
904
|
i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.ToggleLeftPanel()); });
|
|
@@ -916,7 +930,7 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
916
930
|
i0.ɵɵelementStart(20, "div", 19);
|
|
917
931
|
i0.ɵɵconditionalCreate(21, ComponentStudioDashboardComponent_Conditional_21_Template, 3, 2);
|
|
918
932
|
i0.ɵɵelementStart(22, "div", 20);
|
|
919
|
-
i0.ɵɵconditionalCreate(23, ComponentStudioDashboardComponent_Conditional_23_Template, 13, 8)(24, ComponentStudioDashboardComponent_Conditional_24_Template, 30,
|
|
933
|
+
i0.ɵɵconditionalCreate(23, ComponentStudioDashboardComponent_Conditional_23_Template, 13, 8)(24, ComponentStudioDashboardComponent_Conditional_24_Template, 30, 0, "div", 21);
|
|
920
934
|
i0.ɵɵelementEnd();
|
|
921
935
|
i0.ɵɵconditionalCreate(25, ComponentStudioDashboardComponent_Conditional_25_Template, 1, 0, "div", 22);
|
|
922
936
|
i0.ɵɵconditionalCreate(26, ComponentStudioDashboardComponent_Conditional_26_Template, 2, 2, "div", 23);
|
|
@@ -935,6 +949,9 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
935
949
|
i0.ɵɵconditionalCreate(38, ComponentStudioDashboardComponent_Conditional_38_Template, 41, 0, "div", 30);
|
|
936
950
|
i0.ɵɵconditionalCreate(39, ComponentStudioDashboardComponent_Conditional_39_Template, 1, 1, "mj-new-component-dialog", 31);
|
|
937
951
|
i0.ɵɵconditionalCreate(40, ComponentStudioDashboardComponent_Conditional_40_Template, 1, 2, "mj-save-version-dialog", 32);
|
|
952
|
+
i0.ɵɵconditionalCreate(41, ComponentStudioDashboardComponent_Conditional_41_Template, 2, 3, "mj-dialog", 33);
|
|
953
|
+
i0.ɵɵconditionalCreate(42, ComponentStudioDashboardComponent_Conditional_42_Template, 1, 1, "app-artifact-load-dialog", 31);
|
|
954
|
+
i0.ɵɵconditionalCreate(43, ComponentStudioDashboardComponent_Conditional_43_Template, 1, 1, "app-artifact-selection-dialog", 31);
|
|
938
955
|
i0.ɵɵelementEnd();
|
|
939
956
|
} if (rf & 2) {
|
|
940
957
|
i0.ɵɵclassProp("resizing", ctx.IsResizing);
|
|
@@ -969,6 +986,12 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
|
|
|
969
986
|
i0.ɵɵconditional(ctx.ShowNewComponentDialog ? 39 : -1);
|
|
970
987
|
i0.ɵɵadvance();
|
|
971
988
|
i0.ɵɵconditional(ctx.ShowSaveVersionDialog ? 40 : -1);
|
|
989
|
+
i0.ɵɵadvance();
|
|
990
|
+
i0.ɵɵconditional(ctx.ShowTextImportDialog ? 41 : -1);
|
|
991
|
+
i0.ɵɵadvance();
|
|
992
|
+
i0.ɵɵconditional(ctx.ShowArtifactLoadDialog ? 42 : -1);
|
|
993
|
+
i0.ɵɵadvance();
|
|
994
|
+
i0.ɵɵconditional(ctx.ShowArtifactSelectionDialog ? 43 : -1);
|
|
972
995
|
} }, styles: ["[_nghost-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.component-studio[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n}\n\n\n\n\n\n\n.component-studio[_ngcontent-%COMP%] .studio-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 0 8px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n z-index: 10;\n min-height: 42px;\n gap: 8px;\n}\n\n\n\n.component-studio[_ngcontent-%COMP%] .toolbar-context[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-shrink: 1;\n overflow: hidden;\n}\n\n.component-studio[_ngcontent-%COMP%] .toolbar-spacer[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n\n\n.component-studio[_ngcontent-%COMP%] .toolbar-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n}\n\n\n\n.component-studio[_ngcontent-%COMP%] .tb-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n line-height: 1;\n}\n\n.component-studio[_ngcontent-%COMP%] .tb-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\n\n.component-studio[_ngcontent-%COMP%] .tb-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.component-studio[_ngcontent-%COMP%] .tb-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.component-studio[_ngcontent-%COMP%] .tb-btn.icon-only[_ngcontent-%COMP%] {\n padding: 5px 7px;\n}\n\n.component-studio[_ngcontent-%COMP%] .tb-btn.primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.component-studio[_ngcontent-%COMP%] .tb-btn.primary[_ngcontent-%COMP%]:hover {\n opacity: 0.9;\n}\n\n.component-studio[_ngcontent-%COMP%] .tb-btn.active-toggle[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n\n\n.component-studio[_ngcontent-%COMP%] .breadcrumb-type[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n}\n\n.component-studio[_ngcontent-%COMP%] .breadcrumb-type[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.component-studio[_ngcontent-%COMP%] .breadcrumb-sep[_ngcontent-%COMP%] {\n font-size: 9px;\n color: var(--mj-border-default);\n}\n\n.component-studio[_ngcontent-%COMP%] .component-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 240px;\n}\n\n.component-studio[_ngcontent-%COMP%] .running-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n font-size: 11px;\n font-weight: 600;\n border-radius: 10px;\n white-space: nowrap;\n}\n\n.component-studio[_ngcontent-%COMP%] .running-dot-small[_ngcontent-%COMP%] {\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--mj-status-success);\n animation: _ngcontent-%COMP%_pulse 1.5s ease-in-out infinite;\n}\n\n.component-studio[_ngcontent-%COMP%] .unsaved-dot[_ngcontent-%COMP%] {\n display: inline-block;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: var(--mj-status-warning);\n animation: _ngcontent-%COMP%_pulse 2s infinite;\n flex-shrink: 0;\n}\n\n.component-studio[_ngcontent-%COMP%] .toolbar-divider[_ngcontent-%COMP%] {\n width: 1px;\n height: 18px;\n background: var(--mj-border-default);\n margin: 0 2px;\n flex-shrink: 0;\n}\n\n.component-studio[_ngcontent-%COMP%] .dropdown-icon[_ngcontent-%COMP%] {\n font-size: 9px;\n opacity: 0.6;\n}\n\n\n\n.component-studio[_ngcontent-%COMP%] .header-dropdown[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.component-studio[_ngcontent-%COMP%] .header-dropdown[_ngcontent-%COMP%] .dropdown-menu[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-lg);\n z-index: 100;\n min-width: 180px;\n overflow: hidden;\n}\n\n.component-studio[_ngcontent-%COMP%] .header-dropdown[_ngcontent-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 10px 16px;\n border: none;\n background: none;\n text-align: left;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n transition: background 0.15s ease;\n}\n\n.component-studio[_ngcontent-%COMP%] .header-dropdown[_ngcontent-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .dropdown-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio[_ngcontent-%COMP%] .header-dropdown[_ngcontent-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .dropdown-item[_ngcontent-%COMP%]:not(:last-child) {\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.component-studio[_ngcontent-%COMP%] .header-dropdown[_ngcontent-%COMP%] .dropdown-menu[_ngcontent-%COMP%] .dropdown-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n\n\n\n\n\n.component-studio[_ngcontent-%COMP%] .studio-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n.component-studio[_ngcontent-%COMP%] .panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n\n.component-studio[_ngcontent-%COMP%] .panel-left[_ngcontent-%COMP%] {\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio[_ngcontent-%COMP%] .panel-center[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: row;\n min-width: 400px;\n}\n\n\n\n.component-studio[_ngcontent-%COMP%] .panel-center[_ngcontent-%COMP%] .workspace-preview[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.component-studio[_ngcontent-%COMP%] .panel-center[_ngcontent-%COMP%] .workspace-preview.full-width[_ngcontent-%COMP%] {\n border-right: none;\n}\n\n\n\n.component-studio[_ngcontent-%COMP%] .preview-sub-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 10px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n min-height: 32px;\n}\n\n.component-studio[_ngcontent-%COMP%] .preview-sub-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.component-studio[_ngcontent-%COMP%] .preview-sub-left[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.component-studio[_ngcontent-%COMP%] .preview-sub-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.component-studio[_ngcontent-%COMP%] .toggle-editors-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 12px;\n transition: all 0.15s ease;\n}\n\n.component-studio[_ngcontent-%COMP%] .toggle-editors-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.component-studio[_ngcontent-%COMP%] .toggle-editors-btn.active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.component-studio[_ngcontent-%COMP%] .preview-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n\n\n.component-studio[_ngcontent-%COMP%] .panel-center[_ngcontent-%COMP%] .workspace-editors[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n\n\n.component-studio[_ngcontent-%COMP%] .panel-right[_ngcontent-%COMP%] {\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n}\n\n\n\n\n\n\n.component-studio[_ngcontent-%COMP%] .resize-handle[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 5px;\n cursor: col-resize;\n background: transparent;\n position: relative;\n z-index: 5;\n transition: background 0.15s ease;\n}\n\n.component-studio[_ngcontent-%COMP%] .resize-handle[_ngcontent-%COMP%]:hover, \n.component-studio[_ngcontent-%COMP%] .resize-handle[_ngcontent-%COMP%]:active {\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n\n\n.component-studio[_ngcontent-%COMP%] .resize-handle.center-divider[_ngcontent-%COMP%] {\n width: 7px;\n background: var(--mj-border-default);\n}\n\n.component-studio[_ngcontent-%COMP%] .resize-handle.center-divider[_ngcontent-%COMP%]:hover, \n.component-studio[_ngcontent-%COMP%] .resize-handle.center-divider[_ngcontent-%COMP%]:active {\n background: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n.component-studio[_ngcontent-%COMP%] .resize-handle[_ngcontent-%COMP%] .divider-grip[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 3px;\n height: 32px;\n border-radius: 2px;\n background: var(--mj-text-secondary);\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.component-studio[_ngcontent-%COMP%] .resize-handle[_ngcontent-%COMP%]:hover .divider-grip[_ngcontent-%COMP%] {\n opacity: 0.5;\n}\n\n\n\n.component-studio[_ngcontent-%COMP%]:not(.resizing) .panel[_ngcontent-%COMP%] {\n transition: width 0.15s ease, flex 0.15s ease;\n}\n\n.component-studio[_ngcontent-%COMP%]:not(.resizing) .workspace-preview[_ngcontent-%COMP%], \n.component-studio[_ngcontent-%COMP%]:not(.resizing) .workspace-editors[_ngcontent-%COMP%] {\n transition: flex 0.15s ease;\n}\n\n\n\n\n\n\n.component-studio[_ngcontent-%COMP%] .status-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 2px 16px;\n background: var(--mj-bg-surface-sunken);\n border-top: 1px solid var(--mj-border-default);\n font-size: 11px;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n min-height: 24px;\n}\n\n.component-studio[_ngcontent-%COMP%] .status-bar[_ngcontent-%COMP%] .status-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.component-studio[_ngcontent-%COMP%] .status-bar[_ngcontent-%COMP%] .status-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.component-studio[_ngcontent-%COMP%] .status-bar[_ngcontent-%COMP%] .status-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.component-studio[_ngcontent-%COMP%] .status-bar[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 0 4px;\n font-size: 10px;\n font-family: inherit;\n line-height: 16px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 3px;\n}\n\n.component-studio[_ngcontent-%COMP%] .status-bar[_ngcontent-%COMP%] .shortcut-hint[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n opacity: 0.8;\n}\n\n\n\n\n\n\n.component-studio[_ngcontent-%COMP%] .shortcuts-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.component-studio[_ngcontent-%COMP%] .shortcuts-overlay[_ngcontent-%COMP%] .shortcuts-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n box-shadow: var(--mj-shadow-lg);\n width: 520px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.component-studio[_ngcontent-%COMP%] .shortcuts-overlay[_ngcontent-%COMP%] .shortcuts-panel[_ngcontent-%COMP%] .shortcuts-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.component-studio[_ngcontent-%COMP%] .shortcuts-overlay[_ngcontent-%COMP%] .shortcuts-panel[_ngcontent-%COMP%] .shortcuts-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.component-studio[_ngcontent-%COMP%] .shortcuts-overlay[_ngcontent-%COMP%] .shortcuts-panel[_ngcontent-%COMP%] .shortcuts-header[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 16px;\n padding: 4px;\n border-radius: 4px;\n transition: background 0.15s ease;\n}\n\n.component-studio[_ngcontent-%COMP%] .shortcuts-overlay[_ngcontent-%COMP%] .shortcuts-panel[_ngcontent-%COMP%] .shortcuts-header[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio[_ngcontent-%COMP%] .shortcuts-overlay[_ngcontent-%COMP%] .shortcuts-panel[_ngcontent-%COMP%] .shortcuts-body[_ngcontent-%COMP%] {\n padding: 16px 20px;\n overflow-y: auto;\n}\n\n.component-studio[_ngcontent-%COMP%] .shortcuts-overlay[_ngcontent-%COMP%] .shortcuts-panel[_ngcontent-%COMP%] .shortcuts-body[_ngcontent-%COMP%] .shortcut-group[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.component-studio[_ngcontent-%COMP%] .shortcuts-overlay[_ngcontent-%COMP%] .shortcuts-panel[_ngcontent-%COMP%] .shortcuts-body[_ngcontent-%COMP%] .shortcut-group[_ngcontent-%COMP%] + .shortcut-group[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.component-studio[_ngcontent-%COMP%] .shortcuts-overlay[_ngcontent-%COMP%] .shortcuts-panel[_ngcontent-%COMP%] .shortcuts-body[_ngcontent-%COMP%] .shortcut-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 0;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.component-studio[_ngcontent-%COMP%] .shortcuts-overlay[_ngcontent-%COMP%] .shortcuts-panel[_ngcontent-%COMP%] .shortcuts-body[_ngcontent-%COMP%] .shortcut-row[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n font-size: 12px;\n font-family: inherit;\n line-height: 20px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n box-shadow: 0 1px 0 var(--mj-border-default);\n min-width: 24px;\n text-align: center;\n}\n\n\n\n\n\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] {\n text-align: center;\n max-width: 400px;\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] .empty-state-icon[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 72px;\n height: 72px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n margin-bottom: 16px;\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] .empty-state-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 28px;\n color: var(--mj-brand-primary);\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0 0 8px;\n font-size: 22px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 24px;\n color: var(--mj-text-secondary);\n font-size: 14px;\n line-height: 1.5;\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] .empty-state-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n justify-content: center;\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] .quick-start-templates[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n flex-wrap: wrap;\n margin-top: 16px;\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] .quick-start-templates[_ngcontent-%COMP%] .quick-start-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-right: 4px;\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] .quick-start-templates[_ngcontent-%COMP%] .quick-start-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 12px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] .quick-start-templates[_ngcontent-%COMP%] .quick-start-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\n\n.component-studio[_ngcontent-%COMP%] .empty-state[_ngcontent-%COMP%] .empty-state-content[_ngcontent-%COMP%] .quick-start-templates[_ngcontent-%COMP%] .quick-start-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-brand-primary);\n margin-bottom: 0;\n}\n\n@keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}"] });
|
|
973
996
|
};
|
|
974
997
|
ComponentStudioDashboardComponent = ComponentStudioDashboardComponent_1 = __decorate([
|
|
@@ -977,8 +1000,8 @@ ComponentStudioDashboardComponent = ComponentStudioDashboardComponent_1 = __deco
|
|
|
977
1000
|
export { ComponentStudioDashboardComponent };
|
|
978
1001
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ComponentStudioDashboardComponent, [{
|
|
979
1002
|
type: Component,
|
|
980
|
-
args: [{ standalone: false, selector: 'mj-component-studio-dashboard', providers: [ComponentStudioStateService, ComponentVersionService], template: "<div class=\"component-studio\" [class.resizing]=\"IsResizing\" kendoDialogContainer>\n\n <!-- ============================================================\n TOOLBAR \u2014 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 kendoButton [themeColor]=\"'primary'\" (click)=\"OnNewComponent()\">\n <span class=\"fa-solid fa-plus\"></span> New Component\n </button>\n <button kendoButton [themeColor]=\"'base'\" (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</div>\n", styles: [":host {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.component-studio {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n}\n\n/* ============================================================\n TOOLBAR \u2014 unified bar with integrated breadcrumb\n ============================================================ */\n\n.component-studio .studio-toolbar {\n display: flex;\n align-items: center;\n padding: 0 8px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n z-index: 10;\n min-height: 42px;\n gap: 8px;\n}\n\n/* Left: hamburger + breadcrumb context */\n.component-studio .toolbar-context {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-shrink: 1;\n overflow: hidden;\n}\n\n.component-studio .toolbar-spacer {\n flex: 1;\n}\n\n/* Right: action buttons */\n.component-studio .toolbar-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n}\n\n/* ---- Toolbar buttons ---- */\n.component-studio .tb-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n line-height: 1;\n}\n\n.component-studio .tb-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\n\n.component-studio .tb-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.component-studio .tb-btn i {\n font-size: 12px;\n}\n\n.component-studio .tb-btn.icon-only {\n padding: 5px 7px;\n}\n\n.component-studio .tb-btn.primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.component-studio .tb-btn.primary:hover {\n opacity: 0.9;\n}\n\n.component-studio .tb-btn.active-toggle {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n/* ---- Breadcrumb elements inside toolbar ---- */\n.component-studio .breadcrumb-type {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n}\n\n.component-studio .breadcrumb-type i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.component-studio .breadcrumb-sep {\n font-size: 9px;\n color: var(--mj-border-default);\n}\n\n.component-studio .component-label {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 240px;\n}\n\n.component-studio .running-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n font-size: 11px;\n font-weight: 600;\n border-radius: 10px;\n white-space: nowrap;\n}\n\n.component-studio .running-dot-small {\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--mj-status-success);\n animation: pulse 1.5s ease-in-out infinite;\n}\n\n.component-studio .unsaved-dot {\n display: inline-block;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: var(--mj-status-warning);\n animation: pulse 2s infinite;\n flex-shrink: 0;\n}\n\n.component-studio .toolbar-divider {\n width: 1px;\n height: 18px;\n background: var(--mj-border-default);\n margin: 0 2px;\n flex-shrink: 0;\n}\n\n.component-studio .dropdown-icon {\n font-size: 9px;\n opacity: 0.6;\n}\n\n/* ---- Dropdown menus ---- */\n.component-studio .header-dropdown {\n position: relative;\n}\n\n.component-studio .header-dropdown .dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-lg);\n z-index: 100;\n min-width: 180px;\n overflow: hidden;\n}\n\n.component-studio .header-dropdown .dropdown-menu .dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 10px 16px;\n border: none;\n background: none;\n text-align: left;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n transition: background 0.15s ease;\n}\n\n.component-studio .header-dropdown .dropdown-menu .dropdown-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio .header-dropdown .dropdown-menu .dropdown-item:not(:last-child) {\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.component-studio .header-dropdown .dropdown-menu .dropdown-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n/* ============================================================\n THREE-PANEL BODY\n ============================================================ */\n\n.component-studio .studio-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n.component-studio .panel {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n\n.component-studio .panel-left {\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio .panel-center {\n flex: 1;\n display: flex;\n flex-direction: row;\n min-width: 400px;\n}\n\n/* Preview pane (left side of center) */\n.component-studio .panel-center .workspace-preview {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.component-studio .panel-center .workspace-preview.full-width {\n border-right: none;\n}\n\n/* Preview sub-header */\n.component-studio .preview-sub-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 10px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n min-height: 32px;\n}\n\n.component-studio .preview-sub-left {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.component-studio .preview-sub-left i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.component-studio .preview-sub-right {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.component-studio .toggle-editors-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 12px;\n transition: all 0.15s ease;\n}\n\n.component-studio .toggle-editors-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.component-studio .toggle-editors-btn.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.component-studio .preview-body {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n/* Editor pane (right side of center) */\n.component-studio .panel-center .workspace-editors {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n/* Right panel: AI Assistant */\n.component-studio .panel-right {\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n}\n\n/* ============================================================\n RESIZE HANDLES\n ============================================================ */\n\n.component-studio .resize-handle {\n flex-shrink: 0;\n width: 5px;\n cursor: col-resize;\n background: transparent;\n position: relative;\n z-index: 5;\n transition: background 0.15s ease;\n}\n\n.component-studio .resize-handle:hover,\n.component-studio .resize-handle:active {\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n/* Center divider \u2014 more obvious separator between preview and editors */\n.component-studio .resize-handle.center-divider {\n width: 7px;\n background: var(--mj-border-default);\n}\n\n.component-studio .resize-handle.center-divider:hover,\n.component-studio .resize-handle.center-divider:active {\n background: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n.component-studio .resize-handle .divider-grip {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 3px;\n height: 32px;\n border-radius: 2px;\n background: var(--mj-text-secondary);\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.component-studio .resize-handle:hover .divider-grip {\n opacity: 0.5;\n}\n\n/* SMOOTH RESIZE TRANSITIONS */\n.component-studio:not(.resizing) .panel {\n transition: width 0.15s ease, flex 0.15s ease;\n}\n\n.component-studio:not(.resizing) .workspace-preview,\n.component-studio:not(.resizing) .workspace-editors {\n transition: flex 0.15s ease;\n}\n\n/* ============================================================\n STATUS BAR\n ============================================================ */\n\n.component-studio .status-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 2px 16px;\n background: var(--mj-bg-surface-sunken);\n border-top: 1px solid var(--mj-border-default);\n font-size: 11px;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n min-height: 24px;\n}\n\n.component-studio .status-bar .status-left {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.component-studio .status-bar .status-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.component-studio .status-bar .status-item {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.component-studio .status-bar kbd {\n display: inline-block;\n padding: 0 4px;\n font-size: 10px;\n font-family: inherit;\n line-height: 16px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 3px;\n}\n\n.component-studio .status-bar .shortcut-hint {\n display: flex;\n align-items: center;\n gap: 4px;\n opacity: 0.8;\n}\n\n/* ============================================================\n KEYBOARD SHORTCUTS OVERLAY\n ============================================================ */\n\n.component-studio .shortcuts-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n box-shadow: var(--mj-shadow-lg);\n width: 520px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-header button {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 16px;\n padding: 4px;\n border-radius: 4px;\n transition: background 0.15s ease;\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-header button:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-body {\n padding: 16px 20px;\n overflow-y: auto;\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-body .shortcut-group h4 {\n margin: 0 0 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-body .shortcut-group + .shortcut-group {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-body .shortcut-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 0;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-body .shortcut-row kbd {\n display: inline-block;\n padding: 2px 8px;\n font-size: 12px;\n font-family: inherit;\n line-height: 20px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n box-shadow: 0 1px 0 var(--mj-border-default);\n min-width: 24px;\n text-align: center;\n}\n\n/* ============================================================\n EMPTY STATE\n ============================================================ */\n\n.component-studio .empty-state {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio .empty-state .empty-state-content {\n text-align: center;\n max-width: 400px;\n}\n\n.component-studio .empty-state .empty-state-content .empty-state-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 72px;\n height: 72px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n margin-bottom: 16px;\n}\n\n.component-studio .empty-state .empty-state-content .empty-state-icon i {\n font-size: 28px;\n color: var(--mj-brand-primary);\n}\n\n.component-studio .empty-state .empty-state-content i {\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.component-studio .empty-state .empty-state-content h2 {\n margin: 0 0 8px;\n font-size: 22px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.component-studio .empty-state .empty-state-content p {\n margin: 0 0 24px;\n color: var(--mj-text-secondary);\n font-size: 14px;\n line-height: 1.5;\n}\n\n.component-studio .empty-state .empty-state-content .empty-state-actions {\n display: flex;\n gap: 8px;\n justify-content: center;\n}\n\n.component-studio .empty-state .empty-state-content .quick-start-templates {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n flex-wrap: wrap;\n margin-top: 16px;\n}\n\n.component-studio .empty-state .empty-state-content .quick-start-templates .quick-start-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-right: 4px;\n}\n\n.component-studio .empty-state .empty-state-content .quick-start-templates .quick-start-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 12px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.component-studio .empty-state .empty-state-content .quick-start-templates .quick-start-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\n\n.component-studio .empty-state .empty-state-content .quick-start-templates .quick-start-btn i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n margin-bottom: 0;\n}\n\n@keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n"] }]
|
|
981
|
-
}], () => [{ type: i1.ComponentStudioStateService }, { type: i2.ComponentVersionService }, { type: i0.ChangeDetectorRef }, { type: i3.
|
|
1003
|
+
args: [{ standalone: false, selector: 'mj-component-studio-dashboard', providers: [ComponentStudioStateService, ComponentVersionService], template: "<div class=\"component-studio\" [class.resizing]=\"IsResizing\">\n\n <!-- ============================================================\n TOOLBAR \u2014 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", styles: [":host {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.component-studio {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n}\n\n/* ============================================================\n TOOLBAR \u2014 unified bar with integrated breadcrumb\n ============================================================ */\n\n.component-studio .studio-toolbar {\n display: flex;\n align-items: center;\n padding: 0 8px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n z-index: 10;\n min-height: 42px;\n gap: 8px;\n}\n\n/* Left: hamburger + breadcrumb context */\n.component-studio .toolbar-context {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n flex-shrink: 1;\n overflow: hidden;\n}\n\n.component-studio .toolbar-spacer {\n flex: 1;\n}\n\n/* Right: action buttons */\n.component-studio .toolbar-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-shrink: 0;\n}\n\n/* ---- Toolbar buttons ---- */\n.component-studio .tb-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n white-space: nowrap;\n line-height: 1;\n}\n\n.component-studio .tb-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\n\n.component-studio .tb-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.component-studio .tb-btn i {\n font-size: 12px;\n}\n\n.component-studio .tb-btn.icon-only {\n padding: 5px 7px;\n}\n\n.component-studio .tb-btn.primary {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.component-studio .tb-btn.primary:hover {\n opacity: 0.9;\n}\n\n.component-studio .tb-btn.active-toggle {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n/* ---- Breadcrumb elements inside toolbar ---- */\n.component-studio .breadcrumb-type {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n}\n\n.component-studio .breadcrumb-type i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.component-studio .breadcrumb-sep {\n font-size: 9px;\n color: var(--mj-border-default);\n}\n\n.component-studio .component-label {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 240px;\n}\n\n.component-studio .running-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n font-size: 11px;\n font-weight: 600;\n border-radius: 10px;\n white-space: nowrap;\n}\n\n.component-studio .running-dot-small {\n display: inline-block;\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: var(--mj-status-success);\n animation: pulse 1.5s ease-in-out infinite;\n}\n\n.component-studio .unsaved-dot {\n display: inline-block;\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: var(--mj-status-warning);\n animation: pulse 2s infinite;\n flex-shrink: 0;\n}\n\n.component-studio .toolbar-divider {\n width: 1px;\n height: 18px;\n background: var(--mj-border-default);\n margin: 0 2px;\n flex-shrink: 0;\n}\n\n.component-studio .dropdown-icon {\n font-size: 9px;\n opacity: 0.6;\n}\n\n/* ---- Dropdown menus ---- */\n.component-studio .header-dropdown {\n position: relative;\n}\n\n.component-studio .header-dropdown .dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n right: 0;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: var(--mj-shadow-lg);\n z-index: 100;\n min-width: 180px;\n overflow: hidden;\n}\n\n.component-studio .header-dropdown .dropdown-menu .dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 10px 16px;\n border: none;\n background: none;\n text-align: left;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n transition: background 0.15s ease;\n}\n\n.component-studio .header-dropdown .dropdown-menu .dropdown-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio .header-dropdown .dropdown-menu .dropdown-item:not(:last-child) {\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.component-studio .header-dropdown .dropdown-menu .dropdown-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n/* ============================================================\n THREE-PANEL BODY\n ============================================================ */\n\n.component-studio .studio-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n.component-studio .panel {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--mj-bg-surface);\n}\n\n.component-studio .panel-left {\n flex-shrink: 0;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio .panel-center {\n flex: 1;\n display: flex;\n flex-direction: row;\n min-width: 400px;\n}\n\n/* Preview pane (left side of center) */\n.component-studio .panel-center .workspace-preview {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.component-studio .panel-center .workspace-preview.full-width {\n border-right: none;\n}\n\n/* Preview sub-header */\n.component-studio .preview-sub-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 4px 10px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n min-height: 32px;\n}\n\n.component-studio .preview-sub-left {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.component-studio .preview-sub-left i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n}\n\n.component-studio .preview-sub-right {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.component-studio .toggle-editors-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 12px;\n transition: all 0.15s ease;\n}\n\n.component-studio .toggle-editors-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.component-studio .toggle-editors-btn.active {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n\n.component-studio .preview-body {\n flex: 1;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n/* Editor pane (right side of center) */\n.component-studio .panel-center .workspace-editors {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n/* Right panel: AI Assistant */\n.component-studio .panel-right {\n flex-shrink: 0;\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n}\n\n/* ============================================================\n RESIZE HANDLES\n ============================================================ */\n\n.component-studio .resize-handle {\n flex-shrink: 0;\n width: 5px;\n cursor: col-resize;\n background: transparent;\n position: relative;\n z-index: 5;\n transition: background 0.15s ease;\n}\n\n.component-studio .resize-handle:hover,\n.component-studio .resize-handle:active {\n background: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n/* Center divider \u2014 more obvious separator between preview and editors */\n.component-studio .resize-handle.center-divider {\n width: 7px;\n background: var(--mj-border-default);\n}\n\n.component-studio .resize-handle.center-divider:hover,\n.component-studio .resize-handle.center-divider:active {\n background: color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n.component-studio .resize-handle .divider-grip {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 3px;\n height: 32px;\n border-radius: 2px;\n background: var(--mj-text-secondary);\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.component-studio .resize-handle:hover .divider-grip {\n opacity: 0.5;\n}\n\n/* SMOOTH RESIZE TRANSITIONS */\n.component-studio:not(.resizing) .panel {\n transition: width 0.15s ease, flex 0.15s ease;\n}\n\n.component-studio:not(.resizing) .workspace-preview,\n.component-studio:not(.resizing) .workspace-editors {\n transition: flex 0.15s ease;\n}\n\n/* ============================================================\n STATUS BAR\n ============================================================ */\n\n.component-studio .status-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 2px 16px;\n background: var(--mj-bg-surface-sunken);\n border-top: 1px solid var(--mj-border-default);\n font-size: 11px;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n min-height: 24px;\n}\n\n.component-studio .status-bar .status-left {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.component-studio .status-bar .status-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.component-studio .status-bar .status-item {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.component-studio .status-bar kbd {\n display: inline-block;\n padding: 0 4px;\n font-size: 10px;\n font-family: inherit;\n line-height: 16px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 3px;\n}\n\n.component-studio .status-bar .shortcut-hint {\n display: flex;\n align-items: center;\n gap: 4px;\n opacity: 0.8;\n}\n\n/* ============================================================\n KEYBOARD SHORTCUTS OVERLAY\n ============================================================ */\n\n.component-studio .shortcuts-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n box-shadow: var(--mj-shadow-lg);\n width: 520px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-header button {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-secondary);\n font-size: 16px;\n padding: 4px;\n border-radius: 4px;\n transition: background 0.15s ease;\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-header button:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-body {\n padding: 16px 20px;\n overflow-y: auto;\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-body .shortcut-group h4 {\n margin: 0 0 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-body .shortcut-group + .shortcut-group {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-body .shortcut-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 0;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.component-studio .shortcuts-overlay .shortcuts-panel .shortcuts-body .shortcut-row kbd {\n display: inline-block;\n padding: 2px 8px;\n font-size: 12px;\n font-family: inherit;\n line-height: 20px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n box-shadow: 0 1px 0 var(--mj-border-default);\n min-width: 24px;\n text-align: center;\n}\n\n/* ============================================================\n EMPTY STATE\n ============================================================ */\n\n.component-studio .empty-state {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n}\n\n.component-studio .empty-state .empty-state-content {\n text-align: center;\n max-width: 400px;\n}\n\n.component-studio .empty-state .empty-state-content .empty-state-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 72px;\n height: 72px;\n border-radius: 50%;\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n margin-bottom: 16px;\n}\n\n.component-studio .empty-state .empty-state-content .empty-state-icon i {\n font-size: 28px;\n color: var(--mj-brand-primary);\n}\n\n.component-studio .empty-state .empty-state-content i {\n color: var(--mj-border-default);\n margin-bottom: 16px;\n}\n\n.component-studio .empty-state .empty-state-content h2 {\n margin: 0 0 8px;\n font-size: 22px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.component-studio .empty-state .empty-state-content p {\n margin: 0 0 24px;\n color: var(--mj-text-secondary);\n font-size: 14px;\n line-height: 1.5;\n}\n\n.component-studio .empty-state .empty-state-content .empty-state-actions {\n display: flex;\n gap: 8px;\n justify-content: center;\n}\n\n.component-studio .empty-state .empty-state-content .quick-start-templates {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n flex-wrap: wrap;\n margin-top: 16px;\n}\n\n.component-studio .empty-state .empty-state-content .quick-start-templates .quick-start-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-right: 4px;\n}\n\n.component-studio .empty-state .empty-state-content .quick-start-templates .quick-start-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 4px 12px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 16px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.component-studio .empty-state .empty-state-content .quick-start-templates .quick-start-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-default);\n}\n\n.component-studio .empty-state .empty-state-content .quick-start-templates .quick-start-btn i {\n font-size: 11px;\n color: var(--mj-brand-primary);\n margin-bottom: 0;\n}\n\n@keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n}\n"] }]
|
|
1004
|
+
}], () => [{ type: i1.ComponentStudioStateService }, { type: i2.ComponentVersionService }, { type: i0.ChangeDetectorRef }, { type: i3.MJNotificationService }], { fileInput: [{
|
|
982
1005
|
type: ViewChild,
|
|
983
1006
|
args: ['fileInput', { static: false }]
|
|
984
1007
|
}], OnKeyDown: [{
|
|
@@ -988,5 +1011,5 @@ export { ComponentStudioDashboardComponent };
|
|
|
988
1011
|
type: HostListener,
|
|
989
1012
|
args: ['document:click', ['$event']]
|
|
990
1013
|
}] }); })();
|
|
991
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ComponentStudioDashboardComponent, { className: "ComponentStudioDashboardComponent", filePath: "src/ComponentStudio/component-studio-dashboard.component.ts", lineNumber:
|
|
1014
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ComponentStudioDashboardComponent, { className: "ComponentStudioDashboardComponent", filePath: "src/ComponentStudio/component-studio-dashboard.component.ts", lineNumber: 52 }); })();
|
|
992
1015
|
//# sourceMappingURL=component-studio-dashboard.component.js.map
|