@memberjunction/ng-dashboards 5.22.0 → 5.24.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 +947 -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 +7645 -430
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +285 -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 +2454 -277
- 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 +20 -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 +419 -232
- 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/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +17 -17
- package/dist/DataExplorer/data-explorer-dashboard.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/activity/activity.component.d.ts.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +1 -0
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +5 -4
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +247 -259
- package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
- package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
- package/dist/Integration/components/overview/overview.component.js +1 -0
- package/dist/Integration/components/overview/overview.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +1 -0
- package/dist/Integration/components/schedules/schedules.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/analytics/analytics-resource.component.d.ts +411 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +4266 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +140 -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 +780 -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 +8 -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 +246 -195
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts +75 -0
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +601 -0
- package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts +93 -12
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js +637 -107
- package/dist/KnowledgeHub/components/search/knowledge-search-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/index.d.ts +3 -0
- package/dist/KnowledgeHub/index.d.ts.map +1 -1
- package/dist/KnowledgeHub/index.js +3 -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/__tests__/analytics-resource.test.d.ts +2 -0
- package/dist/__tests__/analytics-resource.test.d.ts.map +1 -0
- package/dist/__tests__/analytics-resource.test.js +181 -0
- package/dist/__tests__/analytics-resource.test.js.map +1 -0
- package/dist/__tests__/scheduling.test.d.ts +2 -0
- package/dist/__tests__/scheduling.test.d.ts.map +1 -0
- package/dist/__tests__/scheduling.test.js +205 -0
- package/dist/__tests__/scheduling.test.js.map +1 -0
- 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 +20 -20
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +43 -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 +2 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +2 -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/shared/entity-field-display.d.ts +44 -0
- package/dist/shared/entity-field-display.d.ts.map +1 -0
- package/dist/shared/entity-field-display.js +118 -0
- package/dist/shared/entity-field-display.js.map +1 -0
- 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 +48 -55
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-toolbar.component.js","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/action-toolbar.component.ts","../../../../src/Actions/components/explorer/action-toolbar.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,MAAM,EACN,YAAY,EAGZ,uBAAuB,EAExB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;;;;;;;;ICFrE,wBAAkC;;;;IAIhC,kCAG0B;IAAxB,yMAAS,oBAAa,KAAC;IACvB,wBAAiC;IACnC,iBAAS;;IAHP,AADA,iCAAmB,iBACH;;;IAHpB,qGAAwC;;;IAqBxC,+BAA2B;IAAA,YAA4B;IAAA,iBAAO;;;IAAnC,cAA4B;IAA5B,mDAA4B;;;;IAWjD,kCAG6C;IAA3C,0MAAS,uCAAgC,KAAC;IAC1C,uBACF;IAAA,iBAAS;;IAHP,AADA,iCAAmB,iBACH;;;;IAShB,AADF,iCAA+E,gBAGrC;IAAtC,+NAAU,oCAA0B,KAAC;IAFvC,iBAEwC;IACxC,2BAAkE;IAClE,YACF;IAAA,iBAAQ;;;;IANqB,oEAAiD;IAE1E,cAA0C;IAA1C,kEAA0C;IAEnB,cAAiC;;IAC1D,cACF;IADE,gDACF;;;;IASA,kCAG2C;IAAzC,2MAAS,qCAA8B,KAAC;IACxC,uBACF;IAAA,iBAAS;;IAHP,AADA,iCAAmB,iBACH;;;;IAShB,AADF,iCAA2E,gBAGrC;IAAlC,8NAAU,gCAAsB,KAAC;IAFnC,iBAEoC;IACpC,oBAA2B;IAC3B,YACF;IAAA,iBAAQ;;;;IANqB,gEAA6C;IAEtE,cAAsC;IAAtC,8DAAsC;IAErC,cAAmB;IAAnB,2BAAmB;IACtB,cACF;IADE,8CACF;;;;IAOF,AADF,+BAA6B,iBAIA;IAAzB,2MAAS,qBAAc,KAAC;IACxB,wBAAiC;IACjC,mCACF;IACF,AADE,iBAAS,EACL;;IANF,cAAmB;IACnB,AADA,iCAAmB,uBACG;;;IApDxB,AADF,AADF,AADF,+BAAwC,cACR,cACA,WACpB;IAAA,sBAAM;IAAA,iBAAO;IACnB,2GAAmC;IAQrC,iBAAM;IACN,+BAA4B;IAC1B,2GAQC;IAEL,AADE,iBAAM,EACF;IAIF,AADF,AADF,+BAA8B,eACA,YACpB;IAAA,qBAAI;IAAA,iBAAO;IACjB,6GAAgC;IAQlC,iBAAM;IACN,gCAA4B;IAC1B,6GAQC;IAEL,AADE,iBAAM,EACF;IAEN,0GAA0B;IAW5B,iBAAM;;;IA1DA,eAOC;IAPD,6DAOC;IAGD,eAQC;IARD,mCAQC;IAOD,eAOC;IAPD,2DAOC;IAGD,eAQC;IARD,iCAQC;IAIL,eAUC;IAVD,qDAUC;;;;IASD,sCAGkC;IAAhC,sOAAU,+BAAoB,KAAC;IAC/B,YACF;IAAA,iBAAa;;;IAHX,AADA,gCAAkB,iBACF;IAEhB,cACF;IADE,mDACF;;;;IAGA,sCAG8B;IAA5B,oOAAU,2BAAgB,KAAC;IAC3B,YACF;IAAA,iBAAa;;;IAHX,AADA,gCAAkB,iBACF;IAEhB,cACF;IADE,2FACF;;;IAfJ,+BAA4B;IAC1B,kIAOC;IACD,kIAOC;IACH,iBAAM;;;IAhBJ,cAOC;IAPD,sCAOC;IACD,eAOC;IAPD,mCAOC;;;IAUD,gCAAuB;IAAA,YAAmB;IAAA,iBAAO;;;IAA1B,cAAmB;IAAnB,+CAAmB;;;IAwBlC,wBAAoH;;;IAAjH,iGAAqF;;;;IAN5F,kCAEuC;IAArC,gOAAS,qCAA0B,KAAC;IACpC,oBAA6B;IAC7B,YACA;IAAA,4GAAkC;IAGpC,iBAAS;;;;IAPP,iEAA6C;IAE1C,cAAqB;IAArB,8BAAqB;IACxB,cACA;IADA,iDACA;IAAA,cAEC;IAFD,gEAEC;;;IATP,+BAAqC;IACnC,4GAUC;IACH,iBAAM;;;IAXJ,cAUC;IAVD,iCAUC;;AD/HX,MAAM,OAAO,sBAAsB;IA2CxB;IACC;IA3CD,UAAU,GAAG,CAAC,CAAC;IACf,aAAa,GAAG,CAAC,CAAC;IACjB,cAAc,GAAG,IAAI,YAAY,EAAQ,CAAC;IAC1C,YAAY,GAAG,IAAI,YAAY,EAAQ,CAAC;IAE3C,QAAQ,GAAmB,MAAM,CAAC;IAClC,SAAS,GAAc,MAAM,CAAC;IAC9B,aAAa,GAAkB,KAAK,CAAC;IACrC,OAAO,GAAkB;QAC9B,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,gBAAgB,EAAE,EAAE;QACpB,aAAa,EAAE,IAAI;KACpB,CAAC;IAEK,mBAAmB,GAAG,KAAK,CAAC;IAC5B,gBAAgB,GAAG,KAAK,CAAC;IAEzB,WAAW,GAAiB;QACjC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE;QAC1D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,mBAAmB,EAAE;QACtE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE;QACtE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE;QACzD,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE;KACrE,CAAC;IAEK,aAAa,GAAG;QACrB,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE;QACtD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACxD,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE;KACzD,CAAC;IAEK,WAAW,GAAG;QACnB,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,mBAAmB,EAAE;QACxE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,kBAAkB,EAAE;KAC/D,CAAC;IAEM,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAC/B,YAAY,GAAG,IAAI,OAAO,EAAU,CAAC;IAE7C,YACS,YAAwC,EACvC,GAAsB;QADvB,iBAAY,GAAZ,YAAY,CAA4B;QACvC,QAAG,GAAH,GAAG,CAAmB;IAC7B,CAAC;IAEJ,QAAQ;QACN,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YAC1E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;YAC9E,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;YAC5E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACjB,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,aAAa,CAAC,IAAY;QAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IAEM,WAAW,CAAC,IAAoB;QACrC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,YAAY,CAAC,KAAgB;QAClC,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IAEM,mBAAmB;QACxB,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;IAC1C,CAAC;IAEM,YAAY,CAAC,MAAc;QAChC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAEM,UAAU,CAAC,IAAY;QAC5B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAEM,gBAAgB,CAAC,MAAc;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAEM,cAAc,CAAC,IAAY;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEM,YAAY;QACjB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;IACnC,CAAC;IAEM,gBAAgB;QACrB,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC;IAEM,oBAAoB;QACzB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU;YAAE,KAAK,EAAE,CAAC;QACrC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QACnC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC9C,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI;YAAE,KAAK,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,qBAAqB;QAC1B,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACrD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC;IAEM,kBAAkB;QACvB,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAC/C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACnC,CAAC;IACH,CAAC;IAEM,cAAc;QACnB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAChC,CAAC;IAEM,YAAY;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC;QACtE,OAAO,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC;IACjC,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,mCAAmC,CAAC;IAChH,CAAC;IAEM,WAAW;QAChB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAEM,SAAS;QACd,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;gHA5LU,sBAAsB;6DAAtB,sBAAsB;YC7B7B,AADF,AAFF,AADF,8BAA4B,aACA,aAEM,uBAIY;YAAtC,4HAAe,yBAAqB,IAAC;YACrC,uFAAwC;YAGxC,uFAA0B;YAW9B,AADE,iBAAgB,EACZ;YAGN,8BAA6E;YAA7C,wIAAsC,KAAK,IAAC;YAC1E,iCAGoC;YAAlC,mGAAS,2BAAuB,IAAC;YACjC,uBAAkC;YAClC,yBACA;YAAA,2FAAkC;YAGlC,qBAA6F;YAC/F,iBAAS;YAET,4FAA2B;YAiE7B,iBAAM;YAGN,2FAA0B;YAoB5B,iBAAM;YAKF,AADF,AAFF,gCAA2B,eAEE,gBACL;YAAA,aAAmB;YAAA,iBAAO;YAC9C,4FAAoC;YAGpC,iCAAoB;YAAA,wBAAO;YAC7B,AAD6B,iBAAO,EAC9B;YAGN,+BAA0E;YAA1C,sIAAmC,KAAK,IAAC;YACvE,kCAEiC;YAA/B,oGAAS,wBAAoB,IAAC;YAC9B,qBAA+B;YAC/B,aACA;YAAA,qBAA0F;YAC5F,iBAAS;YAET,2FAAwB;YAe1B,iBAAM;YAIJ,AADF,gCAAyB,kBAKS;YAA9B,oGAAS,gBAAY,MAAM,CAAC,IAAC;YAC7B,yBAAgC;YAClC,iBAAS;YACT,mCAIgC;YAA9B,oGAAS,gBAAY,MAAM,CAAC,IAAC;YAC7B,yBAAgC;YAClC,iBAAS;YACT,mCAImC;YAAjC,oGAAS,gBAAY,SAAS,CAAC,IAAC;YAChC,yBAAgC;YAEpC,AADE,iBAAS,EACL;YAGN,mCAGwB;YAAtB,oGAAS,eAAW,IAAC;YACrB,yBAAmC;YACrC,iBAAS;YAGT,mCAG0B;YAAxB,oGAAS,iBAAa,IAAC;YACvB,yBAAgC;YAChC,6BACF;YAEJ,AADE,AADE,iBAAS,EACL,EACF;;YA1ME,eAAmC;YACnC,AADA,iDAAmC,iCACP;YAK5B,eASC;YATD,iDASC;YAQD,eAAmC;YAAnC,gDAAmC;YADnC,oCAAsB;YAKtB,eAEC;YAFD,0DAEC;YACE,cAAqF;YAArF,8FAAqF;YAG1F,cAgEC;YAhED,mDAgEC;YAIH,cAmBC;YAnBD,kDAmBC;YAMqB,eAAmB;YAAnB,uCAAmB;YACvC,cAEC;YAFD,gEAEC;YAOC,eAAsB;YAAtB,oCAAsB;YAEnB,cAAuB;YAAvB,gCAAuB;YAC1B,cACA;YADA,mDACA;YAAG,cAAkF;YAAlF,2FAAkF;YAGvF,cAcC;YAdD,gDAcC;YAMC,eAAsD;YACtD,AADA,wEAAsD,4DACC;YAMvD,eAAsD;YACtD,AADA,wEAAsD,4DACC;YAMvD,eAAyD;YACzD,AADA,2EAAyD,+DACC;YAS5D,eAAmB;YAAnB,iCAAmB;YAQnB,eAAoB;YACpB,AADA,kCAAoB,yBACI;;;iFDxKjB,sBAAsB;cAPlC,SAAS;6BACI,KAAK,YACP,mBAAmB,mBAGZ,uBAAuB,CAAC,MAAM;;kBAG9C,KAAK;;kBACL,KAAK;;kBACL,MAAM;;kBACN,MAAM;;kFAJI,sBAAsB","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport {\n ActionExplorerStateService,\n ActionViewMode,\n SortField,\n SortDirection,\n ActionFilters\n} from '../../services/action-explorer-state.service';\n\ninterface SortOption {\n field: SortField;\n label: string;\n icon: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-toolbar',\n templateUrl: './action-toolbar.component.html',\n styleUrls: ['./action-toolbar.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionToolbarComponent implements OnInit, OnDestroy {\n @Input() TotalCount = 0;\n @Input() FilteredCount = 0;\n @Output() NewActionClick = new EventEmitter<void>();\n @Output() RefreshClick = new EventEmitter<void>();\n\n public ViewMode: ActionViewMode = 'card';\n public SortField: SortField = 'name';\n public SortDirection: SortDirection = 'asc';\n public Filters: ActionFilters = {\n searchTerm: '',\n statuses: [],\n types: [],\n approvalStatuses: [],\n hasExecutions: null\n };\n\n public ShowFiltersDropdown = false;\n public ShowSortDropdown = false;\n\n public SortOptions: SortOption[] = [\n { field: 'name', label: 'Name', icon: 'fa-solid fa-font' },\n { field: 'updated', label: 'Last Updated', icon: 'fa-solid fa-clock' },\n { field: 'status', label: 'Status', icon: 'fa-solid fa-circle-check' },\n { field: 'type', label: 'Type', icon: 'fa-solid fa-tag' },\n { field: 'category', label: 'Category', icon: 'fa-solid fa-folder' }\n ];\n\n public StatusOptions = [\n { value: 'Active', label: 'Active', color: 'success' },\n { value: 'Pending', label: 'Pending', color: 'warning' },\n { value: 'Disabled', label: 'Disabled', color: 'error' }\n ];\n\n public TypeOptions = [\n { value: 'Generated', label: 'AI Generated', icon: 'fa-solid fa-robot' },\n { value: 'Custom', label: 'Custom', icon: 'fa-solid fa-code' }\n ];\n\n private destroy$ = new Subject<void>();\n private searchInput$ = new Subject<string>();\n\n constructor(\n public StateService: ActionExplorerStateService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.subscribeToState();\n this.setupSearchDebounce();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private subscribeToState(): void {\n this.StateService.ViewMode$.pipe(takeUntil(this.destroy$)).subscribe(mode => {\n this.ViewMode = mode;\n this.cdr.markForCheck();\n });\n\n this.StateService.SortConfig$.pipe(takeUntil(this.destroy$)).subscribe(config => {\n this.SortField = config.field;\n this.SortDirection = config.direction;\n this.cdr.markForCheck();\n });\n\n this.StateService.Filters$.pipe(takeUntil(this.destroy$)).subscribe(filters => {\n this.Filters = filters;\n this.cdr.markForCheck();\n });\n }\n\n private setupSearchDebounce(): void {\n this.searchInput$.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n ).subscribe(term => {\n this.StateService.setSearchTerm(term);\n });\n }\n\n public onSearchInput(term: string): void {\n this.searchInput$.next(term);\n }\n\n public clearSearch(): void {\n this.StateService.setSearchTerm('');\n }\n\n public setViewMode(mode: ActionViewMode): void {\n this.StateService.setViewMode(mode);\n }\n\n public setSortField(field: SortField): void {\n this.StateService.setSortField(field);\n this.ShowSortDropdown = false;\n }\n\n public toggleSortDirection(): void {\n this.StateService.toggleSortDirection();\n }\n\n public toggleStatus(status: string): void {\n const current = [...this.Filters.statuses];\n const index = current.indexOf(status);\n if (index >= 0) {\n current.splice(index, 1);\n } else {\n current.push(status);\n }\n this.StateService.setStatusFilter(current);\n }\n\n public toggleType(type: string): void {\n const current = [...this.Filters.types];\n const index = current.indexOf(type);\n if (index >= 0) {\n current.splice(index, 1);\n } else {\n current.push(type);\n }\n this.StateService.setTypeFilter(current);\n }\n\n public isStatusSelected(status: string): boolean {\n return this.Filters.statuses.includes(status);\n }\n\n public isTypeSelected(type: string): boolean {\n return this.Filters.types.includes(type);\n }\n\n public clearFilters(): void {\n this.StateService.clearFilters();\n }\n\n public hasActiveFilters(): boolean {\n return this.StateService.hasActiveFilters();\n }\n\n public getActiveFilterCount(): number {\n let count = 0;\n if (this.Filters.searchTerm) count++;\n count += this.Filters.statuses.length;\n count += this.Filters.types.length;\n count += this.Filters.approvalStatuses.length;\n if (this.Filters.hasExecutions != null) count++;\n return count;\n }\n\n public toggleFiltersDropdown(): void {\n this.ShowFiltersDropdown = !this.ShowFiltersDropdown;\n if (this.ShowFiltersDropdown) {\n this.ShowSortDropdown = false;\n }\n }\n\n public toggleSortDropdown(): void {\n this.ShowSortDropdown = !this.ShowSortDropdown;\n if (this.ShowSortDropdown) {\n this.ShowFiltersDropdown = false;\n }\n }\n\n public closeDropdowns(): void {\n this.ShowFiltersDropdown = false;\n this.ShowSortDropdown = false;\n }\n\n public getSortLabel(): string {\n const option = this.SortOptions.find(o => o.field === this.SortField);\n return option?.label || 'Sort';\n }\n\n public getSortIcon(): string {\n return this.SortDirection === 'asc' ? 'fa-solid fa-arrow-up-short-wide' : 'fa-solid fa-arrow-down-wide-short';\n }\n\n public onNewAction(): void {\n this.NewActionClick.emit();\n }\n\n public onRefresh(): void {\n this.RefreshClick.emit();\n }\n}\n","<div class=\"action-toolbar\">\n <div class=\"toolbar-left\">\n <!-- Search -->\n <div class=\"search-container\">\n <kendo-textbox\n [placeholder]=\"'Search actions...'\"\n [value]=\"Filters.searchTerm\"\n (valueChange)=\"onSearchInput($event)\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n @if (Filters.searchTerm) {\n <ng-template kendoTextBoxSuffixTemplate>\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </ng-template>\n }\n </kendo-textbox>\n </div>\n\n <!-- Filters Dropdown -->\n <div class=\"dropdown-container\" (clickOutside)=\"ShowFiltersDropdown = false\">\n <button kendoButton\n [fillMode]=\"'outline'\"\n [class.active]=\"hasActiveFilters()\"\n (click)=\"toggleFiltersDropdown()\">\n <i class=\"fa-solid fa-filter\"></i>\n Filters\n @if (getActiveFilterCount() > 0) {\n <span class=\"filter-badge\">{{ getActiveFilterCount() }}</span>\n }\n <i [class]=\"ShowFiltersDropdown ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </button>\n\n @if (ShowFiltersDropdown) {\n <div class=\"dropdown-menu filters-menu\">\n <div class=\"dropdown-section\">\n <div class=\"section-header\">\n <span>Status</span>\n @if (Filters.statuses.length > 0) {\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n (click)=\"StateService.setStatusFilter([])\">\n Clear\n </button>\n }\n </div>\n <div class=\"filter-options\">\n @for (status of StatusOptions; track status.value) {\n <label class=\"filter-option\" [class.selected]=\"isStatusSelected(status.value)\">\n <input type=\"checkbox\"\n [checked]=\"isStatusSelected(status.value)\"\n (change)=\"toggleStatus(status.value)\">\n <span class=\"status-dot\" [attr.data-status]=\"status.value\"></span>\n {{ status.label }}\n </label>\n }\n </div>\n </div>\n\n <div class=\"dropdown-section\">\n <div class=\"section-header\">\n <span>Type</span>\n @if (Filters.types.length > 0) {\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n (click)=\"StateService.setTypeFilter([])\">\n Clear\n </button>\n }\n </div>\n <div class=\"filter-options\">\n @for (type of TypeOptions; track type.value) {\n <label class=\"filter-option\" [class.selected]=\"isTypeSelected(type.value)\">\n <input type=\"checkbox\"\n [checked]=\"isTypeSelected(type.value)\"\n (change)=\"toggleType(type.value)\">\n <i [class]=\"type.icon\"></i>\n {{ type.label }}\n </label>\n }\n </div>\n </div>\n\n @if (hasActiveFilters()) {\n <div class=\"dropdown-footer\">\n <button kendoButton\n [fillMode]=\"'flat'\"\n [themeColor]=\"'error'\"\n (click)=\"clearFilters()\">\n <i class=\"fa-solid fa-times\"></i>\n Clear All Filters\n </button>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Active Filter Chips -->\n @if (hasActiveFilters()) {\n <div class=\"active-filters\">\n @for (status of Filters.statuses; track status) {\n <kendo-chip\n [removable]=\"true\"\n [size]=\"'small'\"\n (remove)=\"toggleStatus(status)\">\n Status: {{ status }}\n </kendo-chip>\n }\n @for (type of Filters.types; track type) {\n <kendo-chip\n [removable]=\"true\"\n [size]=\"'small'\"\n (remove)=\"toggleType(type)\">\n Type: {{ type === 'Generated' ? 'AI Generated' : type }}\n </kendo-chip>\n }\n </div>\n }\n </div>\n\n <div class=\"toolbar-right\">\n <!-- Results Count -->\n <div class=\"results-count\">\n <span class=\"count\">{{ FilteredCount }}</span>\n @if (FilteredCount !== TotalCount) {\n <span class=\"of-total\">of {{ TotalCount }}</span>\n }\n <span class=\"label\">actions</span>\n </div>\n\n <!-- Sort Dropdown -->\n <div class=\"dropdown-container\" (clickOutside)=\"ShowSortDropdown = false\">\n <button kendoButton\n [fillMode]=\"'outline'\"\n (click)=\"toggleSortDropdown()\">\n <i [class]=\"getSortIcon()\"></i>\n {{ getSortLabel() }}\n <i [class]=\"ShowSortDropdown ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </button>\n\n @if (ShowSortDropdown) {\n <div class=\"dropdown-menu sort-menu\">\n @for (option of SortOptions; track option.field) {\n <button class=\"sort-option\"\n [class.selected]=\"SortField === option.field\"\n (click)=\"setSortField(option.field)\">\n <i [class]=\"option.icon\"></i>\n {{ option.label }}\n @if (SortField === option.field) {\n <i [class]=\"SortDirection === 'asc' ? 'fa-solid fa-arrow-up' : 'fa-solid fa-arrow-down'\" class=\"direction-icon\"></i>\n }\n </button>\n }\n </div>\n }\n </div>\n\n <!-- View Mode Toggle -->\n <div class=\"view-toggle\">\n <button kendoButton\n [fillMode]=\"ViewMode === 'card' ? 'solid' : 'outline'\"\n [themeColor]=\"ViewMode === 'card' ? 'primary' : 'base'\"\n title=\"Card View\"\n (click)=\"setViewMode('card')\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button kendoButton\n [fillMode]=\"ViewMode === 'list' ? 'solid' : 'outline'\"\n [themeColor]=\"ViewMode === 'list' ? 'primary' : 'base'\"\n title=\"List View\"\n (click)=\"setViewMode('list')\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n <button kendoButton\n [fillMode]=\"ViewMode === 'compact' ? 'solid' : 'outline'\"\n [themeColor]=\"ViewMode === 'compact' ? 'primary' : 'base'\"\n title=\"Compact View\"\n (click)=\"setViewMode('compact')\">\n <i class=\"fa-solid fa-bars\"></i>\n </button>\n </div>\n\n <!-- Refresh Button -->\n <button kendoButton\n [fillMode]=\"'flat'\"\n title=\"Refresh\"\n (click)=\"onRefresh()\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n\n <!-- New Action Button -->\n <button kendoButton\n [fillMode]=\"'solid'\"\n [themeColor]=\"'primary'\"\n (click)=\"onNewAction()\">\n <i class=\"fa-solid fa-plus\"></i>\n New Action\n </button>\n </div>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"action-toolbar.component.js","sourceRoot":"","sources":["../../../../src/Actions/components/explorer/action-toolbar.component.ts","../../../../src/Actions/components/explorer/action-toolbar.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n ChangeDetectorRef\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport {\n ActionExplorerStateService,\n ActionViewMode,\n SortField,\n SortDirection,\n ActionFilters\n} from '../../services/action-explorer-state.service';\n\ninterface SortOption {\n field: SortField;\n label: string;\n icon: string;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-toolbar',\n templateUrl: './action-toolbar.component.html',\n styleUrls: ['./action-toolbar.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionToolbarComponent implements OnInit, OnDestroy {\n @Input() TotalCount = 0;\n @Input() FilteredCount = 0;\n @Output() NewActionClick = new EventEmitter<void>();\n @Output() RefreshClick = new EventEmitter<void>();\n\n public ViewMode: ActionViewMode = 'card';\n public SortField: SortField = 'name';\n public SortDirection: SortDirection = 'asc';\n public Filters: ActionFilters = {\n searchTerm: '',\n statuses: [],\n types: [],\n approvalStatuses: [],\n hasExecutions: null\n };\n\n public ShowFiltersDropdown = false;\n public ShowSortDropdown = false;\n\n public SortOptions: SortOption[] = [\n { field: 'name', label: 'Name', icon: 'fa-solid fa-font' },\n { field: 'updated', label: 'Last Updated', icon: 'fa-solid fa-clock' },\n { field: 'status', label: 'Status', icon: 'fa-solid fa-circle-check' },\n { field: 'type', label: 'Type', icon: 'fa-solid fa-tag' },\n { field: 'category', label: 'Category', icon: 'fa-solid fa-folder' }\n ];\n\n public StatusOptions = [\n { value: 'Active', label: 'Active', color: 'success' },\n { value: 'Pending', label: 'Pending', color: 'warning' },\n { value: 'Disabled', label: 'Disabled', color: 'error' }\n ];\n\n public TypeOptions = [\n { value: 'Generated', label: 'AI Generated', icon: 'fa-solid fa-robot' },\n { value: 'Custom', label: 'Custom', icon: 'fa-solid fa-code' }\n ];\n\n private destroy$ = new Subject<void>();\n private searchInput$ = new Subject<string>();\n\n constructor(\n public StateService: ActionExplorerStateService,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit(): void {\n this.subscribeToState();\n this.setupSearchDebounce();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private subscribeToState(): void {\n this.StateService.ViewMode$.pipe(takeUntil(this.destroy$)).subscribe(mode => {\n this.ViewMode = mode;\n this.cdr.markForCheck();\n });\n\n this.StateService.SortConfig$.pipe(takeUntil(this.destroy$)).subscribe(config => {\n this.SortField = config.field;\n this.SortDirection = config.direction;\n this.cdr.markForCheck();\n });\n\n this.StateService.Filters$.pipe(takeUntil(this.destroy$)).subscribe(filters => {\n this.Filters = filters;\n this.cdr.markForCheck();\n });\n }\n\n private setupSearchDebounce(): void {\n this.searchInput$.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroy$)\n ).subscribe(term => {\n this.StateService.setSearchTerm(term);\n });\n }\n\n public onSearchInput(term: string): void {\n this.searchInput$.next(term);\n }\n\n public clearSearch(): void {\n this.StateService.setSearchTerm('');\n }\n\n public setViewMode(mode: ActionViewMode): void {\n this.StateService.setViewMode(mode);\n }\n\n public setSortField(field: SortField): void {\n this.StateService.setSortField(field);\n this.ShowSortDropdown = false;\n }\n\n public toggleSortDirection(): void {\n this.StateService.toggleSortDirection();\n }\n\n public toggleStatus(status: string): void {\n const current = [...this.Filters.statuses];\n const index = current.indexOf(status);\n if (index >= 0) {\n current.splice(index, 1);\n } else {\n current.push(status);\n }\n this.StateService.setStatusFilter(current);\n }\n\n public toggleType(type: string): void {\n const current = [...this.Filters.types];\n const index = current.indexOf(type);\n if (index >= 0) {\n current.splice(index, 1);\n } else {\n current.push(type);\n }\n this.StateService.setTypeFilter(current);\n }\n\n public isStatusSelected(status: string): boolean {\n return this.Filters.statuses.includes(status);\n }\n\n public isTypeSelected(type: string): boolean {\n return this.Filters.types.includes(type);\n }\n\n public clearFilters(): void {\n this.StateService.clearFilters();\n }\n\n public hasActiveFilters(): boolean {\n return this.StateService.hasActiveFilters();\n }\n\n public getActiveFilterCount(): number {\n let count = 0;\n if (this.Filters.searchTerm) count++;\n count += this.Filters.statuses.length;\n count += this.Filters.types.length;\n count += this.Filters.approvalStatuses.length;\n if (this.Filters.hasExecutions != null) count++;\n return count;\n }\n\n public toggleFiltersDropdown(): void {\n this.ShowFiltersDropdown = !this.ShowFiltersDropdown;\n if (this.ShowFiltersDropdown) {\n this.ShowSortDropdown = false;\n }\n }\n\n public toggleSortDropdown(): void {\n this.ShowSortDropdown = !this.ShowSortDropdown;\n if (this.ShowSortDropdown) {\n this.ShowFiltersDropdown = false;\n }\n }\n\n public closeDropdowns(): void {\n this.ShowFiltersDropdown = false;\n this.ShowSortDropdown = false;\n }\n\n public getSortLabel(): string {\n const option = this.SortOptions.find(o => o.field === this.SortField);\n return option?.label || 'Sort';\n }\n\n public getSortIcon(): string {\n return this.SortDirection === 'asc' ? 'fa-solid fa-arrow-up-short-wide' : 'fa-solid fa-arrow-down-wide-short';\n }\n\n public onNewAction(): void {\n this.NewActionClick.emit();\n }\n\n public onRefresh(): void {\n this.RefreshClick.emit();\n }\n}\n","<div class=\"action-toolbar\">\n <div class=\"toolbar-left\">\n <!-- Search -->\n <div class=\"search-container\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\" class=\"mj-input\"\n placeholder=\"Search actions...\"\n [value]=\"Filters.searchTerm\"\n (input)=\"onSearchInput($any($event.target).value)\" />\n @if (Filters.searchTerm) {\n <button mjButton variant=\"flat\" size=\"sm\" class=\"search-clear\"\n (click)=\"clearSearch()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n\n <!-- Filters Dropdown -->\n <div class=\"dropdown-container\" (clickOutside)=\"ShowFiltersDropdown = false\">\n <button mjButton\n variant=\"outline\"\n [class.active]=\"hasActiveFilters()\"\n (click)=\"toggleFiltersDropdown()\">\n <i class=\"fa-solid fa-filter\"></i>\n Filters\n @if (getActiveFilterCount() > 0) {\n <span class=\"filter-badge\">{{ getActiveFilterCount() }}</span>\n }\n <i [class]=\"ShowFiltersDropdown ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </button>\n\n @if (ShowFiltersDropdown) {\n <div class=\"dropdown-menu filters-menu\">\n <div class=\"dropdown-section\">\n <div class=\"section-header\">\n <span>Status</span>\n @if (Filters.statuses.length > 0) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"StateService.setStatusFilter([])\">\n Clear\n </button>\n }\n </div>\n <div class=\"filter-options\">\n @for (status of StatusOptions; track status.value) {\n <label class=\"filter-option\" [class.selected]=\"isStatusSelected(status.value)\">\n <input type=\"checkbox\"\n [checked]=\"isStatusSelected(status.value)\"\n (change)=\"toggleStatus(status.value)\">\n <span class=\"status-dot\" [attr.data-status]=\"status.value\"></span>\n {{ status.label }}\n </label>\n }\n </div>\n </div>\n\n <div class=\"dropdown-section\">\n <div class=\"section-header\">\n <span>Type</span>\n @if (Filters.types.length > 0) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"StateService.setTypeFilter([])\">\n Clear\n </button>\n }\n </div>\n <div class=\"filter-options\">\n @for (type of TypeOptions; track type.value) {\n <label class=\"filter-option\" [class.selected]=\"isTypeSelected(type.value)\">\n <input type=\"checkbox\"\n [checked]=\"isTypeSelected(type.value)\"\n (change)=\"toggleType(type.value)\">\n <i [class]=\"type.icon\"></i>\n {{ type.label }}\n </label>\n }\n </div>\n </div>\n\n @if (hasActiveFilters()) {\n <div class=\"dropdown-footer\">\n <button mjButton\n variant=\"danger\"\n (click)=\"clearFilters()\">\n <i class=\"fa-solid fa-times\"></i>\n Clear All Filters\n </button>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Active Filter Chips -->\n @if (hasActiveFilters()) {\n <div class=\"active-filters\">\n @for (status of Filters.statuses; track status) {\n <span class=\"status-chip removable\" (click)=\"toggleStatus(status)\">\n Status: {{ status }} <i class=\"fa-solid fa-times\"></i>\n </span>\n }\n @for (type of Filters.types; track type) {\n <span class=\"status-chip removable\" (click)=\"toggleType(type)\">\n Type: {{ type === 'Generated' ? 'AI Generated' : type }} <i class=\"fa-solid fa-times\"></i>\n </span>\n }\n </div>\n }\n </div>\n\n <div class=\"toolbar-right\">\n <!-- Results Count -->\n <div class=\"results-count\">\n <span class=\"count\">{{ FilteredCount }}</span>\n @if (FilteredCount !== TotalCount) {\n <span class=\"of-total\">of {{ TotalCount }}</span>\n }\n <span class=\"label\">actions</span>\n </div>\n\n <!-- Sort Dropdown -->\n <div class=\"dropdown-container\" (clickOutside)=\"ShowSortDropdown = false\">\n <button mjButton\n variant=\"outline\"\n (click)=\"toggleSortDropdown()\">\n <i [class]=\"getSortIcon()\"></i>\n {{ getSortLabel() }}\n <i [class]=\"ShowSortDropdown ? 'fa-solid fa-chevron-up' : 'fa-solid fa-chevron-down'\"></i>\n </button>\n\n @if (ShowSortDropdown) {\n <div class=\"dropdown-menu sort-menu\">\n @for (option of SortOptions; track option.field) {\n <button class=\"sort-option\"\n [class.selected]=\"SortField === option.field\"\n (click)=\"setSortField(option.field)\">\n <i [class]=\"option.icon\"></i>\n {{ option.label }}\n @if (SortField === option.field) {\n <i [class]=\"SortDirection === 'asc' ? 'fa-solid fa-arrow-up' : 'fa-solid fa-arrow-down'\" class=\"direction-icon\"></i>\n }\n </button>\n }\n </div>\n }\n </div>\n\n <!-- View Mode Toggle -->\n <div class=\"view-toggle\">\n <button mjButton\n [variant]=\"ViewMode === 'card' ? 'primary' : 'outline'\"\n title=\"Card View\"\n (click)=\"setViewMode('card')\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button mjButton\n [variant]=\"ViewMode === 'list' ? 'primary' : 'outline'\"\n title=\"List View\"\n (click)=\"setViewMode('list')\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n <button mjButton\n [variant]=\"ViewMode === 'compact' ? 'primary' : 'outline'\"\n title=\"Compact View\"\n (click)=\"setViewMode('compact')\">\n <i class=\"fa-solid fa-bars\"></i>\n </button>\n </div>\n\n <!-- Refresh Button -->\n <button mjButton\n variant=\"flat\"\n title=\"Refresh\"\n (click)=\"onRefresh()\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n\n <!-- New Action Button -->\n <button mjButton\n variant=\"primary\"\n (click)=\"onNewAction()\">\n <i class=\"fa-solid fa-plus\"></i>\n New Action\n </button>\n </div>\n</div>\n"]}
|
|
@@ -4,36 +4,27 @@ import { takeUntil } from 'rxjs/operators';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "../../services/action-explorer-state.service";
|
|
6
6
|
import * as i2 from "@angular/common";
|
|
7
|
-
import * as i3 from "@
|
|
8
|
-
import * as i4 from "@progress/kendo-angular-inputs";
|
|
7
|
+
import * as i3 from "@memberjunction/ng-ui-components";
|
|
9
8
|
const _c0 = a0 => ({ nodes: a0 });
|
|
10
9
|
const _forTrack0 = ($index, $item) => $item.category.ID;
|
|
11
|
-
function
|
|
12
|
-
i0.ɵɵelement(0, "i", 31);
|
|
13
|
-
} }
|
|
14
|
-
function ActionTreePanelComponent_Conditional_0_Conditional_16_ng_template_0_Template(rf, ctx) { if (rf & 1) {
|
|
10
|
+
function ActionTreePanelComponent_Conditional_0_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
15
11
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
16
12
|
i0.ɵɵelementStart(0, "button", 32);
|
|
17
|
-
i0.ɵɵlistener("click", function
|
|
13
|
+
i0.ɵɵlistener("click", function ActionTreePanelComponent_Conditional_0_Conditional_17_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onSearchChange("")); });
|
|
18
14
|
i0.ɵɵelement(1, "i", 33);
|
|
19
15
|
i0.ɵɵelementEnd();
|
|
20
|
-
} if (rf & 2) {
|
|
21
|
-
i0.ɵɵproperty("fillMode", "flat")("size", "small");
|
|
22
16
|
} }
|
|
23
|
-
function
|
|
24
|
-
i0.ɵɵtemplate(0, ActionTreePanelComponent_Conditional_0_Conditional_16_ng_template_0_Template, 2, 2, "ng-template", 17);
|
|
25
|
-
} }
|
|
26
|
-
function ActionTreePanelComponent_Conditional_0_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
17
|
+
function ActionTreePanelComponent_Conditional_0_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
27
18
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
28
19
|
i0.ɵɵelementStart(0, "div", 34);
|
|
29
|
-
i0.ɵɵlistener("click", function
|
|
30
|
-
i0.ɵɵelementStart(1, "span",
|
|
20
|
+
i0.ɵɵlistener("click", function ActionTreePanelComponent_Conditional_0_Conditional_26_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectCategory("uncategorized")); });
|
|
21
|
+
i0.ɵɵelementStart(1, "span", 21);
|
|
31
22
|
i0.ɵɵelement(2, "i", 35);
|
|
32
23
|
i0.ɵɵelementEnd();
|
|
33
|
-
i0.ɵɵelementStart(3, "span",
|
|
24
|
+
i0.ɵɵelementStart(3, "span", 23);
|
|
34
25
|
i0.ɵɵtext(4, "Uncategorized");
|
|
35
26
|
i0.ɵɵelementEnd();
|
|
36
|
-
i0.ɵɵelementStart(5, "span",
|
|
27
|
+
i0.ɵɵelementStart(5, "span", 24);
|
|
37
28
|
i0.ɵɵtext(6);
|
|
38
29
|
i0.ɵɵelementEnd()();
|
|
39
30
|
} if (rf & 2) {
|
|
@@ -42,13 +33,13 @@ function ActionTreePanelComponent_Conditional_0_Conditional_25_Template(rf, ctx)
|
|
|
42
33
|
i0.ɵɵadvance(6);
|
|
43
34
|
i0.ɵɵtextInterpolate(ctx_r1.getUncategorizedCount());
|
|
44
35
|
} }
|
|
45
|
-
function
|
|
36
|
+
function ActionTreePanelComponent_Conditional_0_ng_container_28_Template(rf, ctx) { if (rf & 1) {
|
|
46
37
|
i0.ɵɵelementContainer(0);
|
|
47
38
|
} }
|
|
48
|
-
function
|
|
39
|
+
function ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
49
40
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
50
41
|
i0.ɵɵelementStart(0, "button", 46);
|
|
51
|
-
i0.ɵɵlistener("click", function
|
|
42
|
+
i0.ɵɵlistener("click", function ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Conditional_2_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const node_r6 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleExpanded(node_r6.category.ID, $event)); });
|
|
52
43
|
i0.ɵɵelement(1, "i");
|
|
53
44
|
i0.ɵɵelementEnd();
|
|
54
45
|
} if (rf & 2) {
|
|
@@ -58,29 +49,29 @@ function ActionTreePanelComponent_Conditional_0_ng_template_28_For_1_Conditional
|
|
|
58
49
|
i0.ɵɵadvance();
|
|
59
50
|
i0.ɵɵclassMap(ctx_r1.isExpanded(node_r6.category.ID) ? "fa-solid fa-chevron-down" : "fa-solid fa-chevron-right");
|
|
60
51
|
} }
|
|
61
|
-
function
|
|
52
|
+
function ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
62
53
|
i0.ɵɵelement(0, "span", 40);
|
|
63
54
|
} }
|
|
64
|
-
function
|
|
55
|
+
function ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Conditional_13_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
65
56
|
i0.ɵɵelementContainer(0);
|
|
66
57
|
} }
|
|
67
|
-
function
|
|
58
|
+
function ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
68
59
|
i0.ɵɵelementStart(0, "div", 45);
|
|
69
|
-
i0.ɵɵtemplate(1,
|
|
60
|
+
i0.ɵɵtemplate(1, ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Conditional_13_ng_container_1_Template, 1, 0, "ng-container", 27);
|
|
70
61
|
i0.ɵɵelementEnd();
|
|
71
62
|
} if (rf & 2) {
|
|
72
63
|
const node_r6 = i0.ɵɵnextContext().$implicit;
|
|
73
64
|
i0.ɵɵnextContext(2);
|
|
74
|
-
const categoryTreeTemplate_r8 = i0.ɵɵreference(
|
|
65
|
+
const categoryTreeTemplate_r8 = i0.ɵɵreference(30);
|
|
75
66
|
i0.ɵɵadvance();
|
|
76
67
|
i0.ɵɵproperty("ngTemplateOutlet", categoryTreeTemplate_r8)("ngTemplateOutletContext", i0.ɵɵpureFunction1(2, _c0, node_r6.children));
|
|
77
68
|
} }
|
|
78
|
-
function
|
|
69
|
+
function ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
79
70
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
80
71
|
i0.ɵɵelementStart(0, "div", 37)(1, "div", 38);
|
|
81
|
-
i0.ɵɵlistener("click", function
|
|
82
|
-
i0.ɵɵconditionalCreate(2,
|
|
83
|
-
i0.ɵɵelementStart(4, "span",
|
|
72
|
+
i0.ɵɵlistener("click", function ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Template_div_click_1_listener() { const node_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.selectCategory(node_r6.category.ID)); });
|
|
73
|
+
i0.ɵɵconditionalCreate(2, ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Conditional_2_Template, 2, 3, "button", 39)(3, ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Conditional_3_Template, 1, 0, "span", 40);
|
|
74
|
+
i0.ɵɵelementStart(4, "span", 21);
|
|
84
75
|
i0.ɵɵelement(5, "i");
|
|
85
76
|
i0.ɵɵelementEnd();
|
|
86
77
|
i0.ɵɵelementStart(6, "span", 41);
|
|
@@ -90,10 +81,10 @@ function ActionTreePanelComponent_Conditional_0_ng_template_28_For_1_Template(rf
|
|
|
90
81
|
i0.ɵɵtext(9);
|
|
91
82
|
i0.ɵɵelementEnd();
|
|
92
83
|
i0.ɵɵelementStart(10, "div", 43)(11, "button", 44);
|
|
93
|
-
i0.ɵɵlistener("click", function
|
|
94
|
-
i0.ɵɵelement(12, "i",
|
|
84
|
+
i0.ɵɵlistener("click", function ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Template_button_click_11_listener($event) { const node_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onNewCategory(node_r6.category.ID, $event)); });
|
|
85
|
+
i0.ɵɵelement(12, "i", 30);
|
|
95
86
|
i0.ɵɵelementEnd()()();
|
|
96
|
-
i0.ɵɵconditionalCreate(13,
|
|
87
|
+
i0.ɵɵconditionalCreate(13, ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Conditional_13_Template, 2, 4, "div", 45);
|
|
97
88
|
i0.ɵɵelementEnd();
|
|
98
89
|
} if (rf & 2) {
|
|
99
90
|
const node_r6 = ctx.$implicit;
|
|
@@ -113,13 +104,11 @@ function ActionTreePanelComponent_Conditional_0_ng_template_28_For_1_Template(rf
|
|
|
113
104
|
i0.ɵɵproperty("title", node_r6.totalActionCount + " total actions");
|
|
114
105
|
i0.ɵɵadvance();
|
|
115
106
|
i0.ɵɵtextInterpolate(node_r6.totalActionCount);
|
|
116
|
-
i0.ɵɵadvance(
|
|
117
|
-
i0.ɵɵproperty("fillMode", "flat")("size", "small");
|
|
118
|
-
i0.ɵɵadvance(2);
|
|
107
|
+
i0.ɵɵadvance(4);
|
|
119
108
|
i0.ɵɵconditional(node_r6.children.length > 0 && ctx_r1.isExpanded(node_r6.category.ID) ? 13 : -1);
|
|
120
109
|
} }
|
|
121
|
-
function
|
|
122
|
-
i0.ɵɵrepeaterCreate(0,
|
|
110
|
+
function ActionTreePanelComponent_Conditional_0_ng_template_29_Template(rf, ctx) { if (rf & 1) {
|
|
111
|
+
i0.ɵɵrepeaterCreate(0, ActionTreePanelComponent_Conditional_0_ng_template_29_For_1_Template, 14, 14, "div", 36, _forTrack0);
|
|
123
112
|
} if (rf & 2) {
|
|
124
113
|
const nodes_r9 = ctx.nodes;
|
|
125
114
|
i0.ɵɵrepeater(nodes_r9);
|
|
@@ -142,60 +131,54 @@ function ActionTreePanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1)
|
|
|
142
131
|
i0.ɵɵlistener("click", function ActionTreePanelComponent_Conditional_0_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleCollapse()); });
|
|
143
132
|
i0.ɵɵelement(12, "i", 13);
|
|
144
133
|
i0.ɵɵelementEnd()()();
|
|
145
|
-
i0.ɵɵelementStart(13, "div", 14)(14, "
|
|
146
|
-
i0.ɵɵ
|
|
147
|
-
i0.ɵɵ
|
|
148
|
-
i0.ɵɵ
|
|
134
|
+
i0.ɵɵelementStart(13, "div", 14)(14, "div", 15);
|
|
135
|
+
i0.ɵɵelement(15, "i", 16);
|
|
136
|
+
i0.ɵɵelementStart(16, "input", 17);
|
|
137
|
+
i0.ɵɵlistener("input", function ActionTreePanelComponent_Conditional_0_Template_input_input_16_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSearchChange($event.target.value)); });
|
|
138
|
+
i0.ɵɵelementEnd();
|
|
139
|
+
i0.ɵɵconditionalCreate(17, ActionTreePanelComponent_Conditional_0_Conditional_17_Template, 2, 0, "button", 18);
|
|
149
140
|
i0.ɵɵelementEnd()()();
|
|
150
|
-
i0.ɵɵelementStart(
|
|
151
|
-
i0.ɵɵlistener("click", function
|
|
152
|
-
i0.ɵɵelementStart(
|
|
153
|
-
i0.ɵɵelement(
|
|
141
|
+
i0.ɵɵelementStart(18, "div", 19)(19, "div", 20);
|
|
142
|
+
i0.ɵɵlistener("click", function ActionTreePanelComponent_Conditional_0_Template_div_click_19_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectCategory("all")); });
|
|
143
|
+
i0.ɵɵelementStart(20, "span", 21);
|
|
144
|
+
i0.ɵɵelement(21, "i", 22);
|
|
154
145
|
i0.ɵɵelementEnd();
|
|
155
|
-
i0.ɵɵelementStart(
|
|
156
|
-
i0.ɵɵtext(
|
|
146
|
+
i0.ɵɵelementStart(22, "span", 23);
|
|
147
|
+
i0.ɵɵtext(23, "All Actions");
|
|
157
148
|
i0.ɵɵelementEnd();
|
|
158
|
-
i0.ɵɵelementStart(
|
|
159
|
-
i0.ɵɵtext(
|
|
149
|
+
i0.ɵɵelementStart(24, "span", 24);
|
|
150
|
+
i0.ɵɵtext(25);
|
|
160
151
|
i0.ɵɵelementEnd()();
|
|
161
|
-
i0.ɵɵconditionalCreate(
|
|
162
|
-
i0.ɵɵelementStart(
|
|
163
|
-
i0.ɵɵtemplate(
|
|
152
|
+
i0.ɵɵconditionalCreate(26, ActionTreePanelComponent_Conditional_0_Conditional_26_Template, 7, 3, "div", 25);
|
|
153
|
+
i0.ɵɵelementStart(27, "div", 26);
|
|
154
|
+
i0.ɵɵtemplate(28, ActionTreePanelComponent_Conditional_0_ng_container_28_Template, 1, 0, "ng-container", 27);
|
|
164
155
|
i0.ɵɵelementEnd();
|
|
165
|
-
i0.ɵɵtemplate(
|
|
156
|
+
i0.ɵɵtemplate(29, ActionTreePanelComponent_Conditional_0_ng_template_29_Template, 2, 0, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
166
157
|
i0.ɵɵelementEnd();
|
|
167
|
-
i0.ɵɵelementStart(
|
|
168
|
-
i0.ɵɵlistener("click", function
|
|
169
|
-
i0.ɵɵelement(
|
|
170
|
-
i0.ɵɵtext(
|
|
158
|
+
i0.ɵɵelementStart(31, "div", 28)(32, "button", 29);
|
|
159
|
+
i0.ɵɵlistener("click", function ActionTreePanelComponent_Conditional_0_Template_button_click_32_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onNewCategory(null, $event)); });
|
|
160
|
+
i0.ɵɵelement(33, "i", 30);
|
|
161
|
+
i0.ɵɵtext(34, " New Category ");
|
|
171
162
|
i0.ɵɵelementEnd()();
|
|
172
|
-
i0.ɵɵelementStart(
|
|
173
|
-
i0.ɵɵlistener("mousedown", function
|
|
163
|
+
i0.ɵɵelementStart(35, "div", 31);
|
|
164
|
+
i0.ɵɵlistener("mousedown", function ActionTreePanelComponent_Conditional_0_Template_div_mousedown_35_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onResizeStart($event)); });
|
|
174
165
|
i0.ɵɵelementEnd()();
|
|
175
166
|
} if (rf & 2) {
|
|
176
|
-
const categoryTreeTemplate_r8 = i0.ɵɵreference(
|
|
167
|
+
const categoryTreeTemplate_r8 = i0.ɵɵreference(30);
|
|
177
168
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
178
169
|
i0.ɵɵstyleProp("width", ctx_r1.TreeWidth, "px");
|
|
179
|
-
i0.ɵɵadvance(
|
|
180
|
-
i0.ɵɵproperty("
|
|
181
|
-
i0.ɵɵadvance(
|
|
182
|
-
i0.ɵɵ
|
|
183
|
-
i0.ɵɵadvance(2);
|
|
184
|
-
i0.ɵɵproperty("fillMode", "flat")("size", "small");
|
|
185
|
-
i0.ɵɵadvance(3);
|
|
186
|
-
i0.ɵɵproperty("placeholder", "Filter categories...")("value", ctx_r1.SearchTerm)("size", "small");
|
|
187
|
-
i0.ɵɵadvance(2);
|
|
188
|
-
i0.ɵɵconditional(ctx_r1.SearchTerm ? 16 : -1);
|
|
170
|
+
i0.ɵɵadvance(16);
|
|
171
|
+
i0.ɵɵproperty("value", ctx_r1.SearchTerm);
|
|
172
|
+
i0.ɵɵadvance();
|
|
173
|
+
i0.ɵɵconditional(ctx_r1.SearchTerm ? 17 : -1);
|
|
189
174
|
i0.ɵɵadvance(2);
|
|
190
175
|
i0.ɵɵclassProp("selected", ctx_r1.isSelected("all"));
|
|
191
176
|
i0.ɵɵadvance(6);
|
|
192
177
|
i0.ɵɵtextInterpolate(ctx_r1.getTotalActionCount());
|
|
193
178
|
i0.ɵɵadvance();
|
|
194
|
-
i0.ɵɵconditional(ctx_r1.getUncategorizedCount() > 0 ?
|
|
179
|
+
i0.ɵɵconditional(ctx_r1.getUncategorizedCount() > 0 ? 26 : -1);
|
|
195
180
|
i0.ɵɵadvance(2);
|
|
196
|
-
i0.ɵɵproperty("ngTemplateOutlet", categoryTreeTemplate_r8)("ngTemplateOutletContext", i0.ɵɵpureFunction1(
|
|
197
|
-
i0.ɵɵadvance(4);
|
|
198
|
-
i0.ɵɵproperty("fillMode", "outline")("themeColor", "primary")("size", "small");
|
|
181
|
+
i0.ɵɵproperty("ngTemplateOutlet", categoryTreeTemplate_r8)("ngTemplateOutletContext", i0.ɵɵpureFunction1(10, _c0, ctx_r1.FilteredTree));
|
|
199
182
|
} }
|
|
200
183
|
function ActionTreePanelComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
201
184
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
@@ -205,15 +188,12 @@ function ActionTreePanelComponent_Conditional_1_Template(rf, ctx) { if (rf & 1)
|
|
|
205
188
|
i0.ɵɵelementEnd();
|
|
206
189
|
i0.ɵɵelementStart(3, "button", 49);
|
|
207
190
|
i0.ɵɵlistener("click", function ActionTreePanelComponent_Conditional_1_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectCategory("all")); });
|
|
208
|
-
i0.ɵɵelement(4, "i",
|
|
191
|
+
i0.ɵɵelement(4, "i", 22);
|
|
209
192
|
i0.ɵɵelementEnd()();
|
|
210
193
|
} if (rf & 2) {
|
|
211
194
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
212
|
-
i0.ɵɵadvance();
|
|
213
|
-
i0.ɵɵproperty("fillMode", "flat");
|
|
214
|
-
i0.ɵɵadvance(2);
|
|
195
|
+
i0.ɵɵadvance(3);
|
|
215
196
|
i0.ɵɵclassProp("selected", ctx_r1.isSelected("all"));
|
|
216
|
-
i0.ɵɵproperty("fillMode", "flat");
|
|
217
197
|
} }
|
|
218
198
|
export class ActionTreePanelComponent {
|
|
219
199
|
StateService;
|
|
@@ -425,15 +405,15 @@ export class ActionTreePanelComponent {
|
|
|
425
405
|
static ɵfac = function ActionTreePanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionTreePanelComponent)(i0.ɵɵdirectiveInject(i1.ActionExplorerStateService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
426
406
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionTreePanelComponent, selectors: [["mj-action-tree-panel"]], hostBindings: function ActionTreePanelComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
427
407
|
i0.ɵɵlistener("mousemove", function ActionTreePanelComponent_mousemove_HostBindingHandler($event) { return ctx.onMouseMove($event); }, i0.ɵɵresolveDocument)("mouseup", function ActionTreePanelComponent_mouseup_HostBindingHandler() { return ctx.onMouseUp(); }, i0.ɵɵresolveDocument);
|
|
428
|
-
} }, inputs: { Categories: "Categories", Actions: "Actions" }, outputs: { CategorySelected: "CategorySelected", NewCategoryClick: "NewCategoryClick", EditCategoryClick: "EditCategoryClick" }, standalone: false, decls: 2, vars: 1, consts: [["categoryTreeTemplate", ""], [1, "tree-panel", 3, "width"], [1, "tree-panel-collapsed"], [1, "tree-panel"], [1, "tree-header"], [1, "header-content"], [1, "fa-solid", "fa-folder-tree"], [1, "header-actions"], ["
|
|
429
|
-
i0.ɵɵconditionalCreate(0, ActionTreePanelComponent_Conditional_0_Template,
|
|
408
|
+
} }, inputs: { Categories: "Categories", Actions: "Actions" }, outputs: { CategorySelected: "CategorySelected", NewCategoryClick: "NewCategoryClick", EditCategoryClick: "EditCategoryClick" }, standalone: false, decls: 2, vars: 1, consts: [["categoryTreeTemplate", ""], [1, "tree-panel", 3, "width"], [1, "tree-panel-collapsed"], [1, "tree-panel"], [1, "tree-header"], [1, "header-content"], [1, "fa-solid", "fa-folder-tree"], [1, "header-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Expand All", 3, "click"], [1, "fa-solid", "fa-angles-down"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Collapse All", 3, "click"], [1, "fa-solid", "fa-angles-up"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Collapse Panel", 3, "click"], [1, "fa-solid", "fa-chevron-left"], [1, "tree-search"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Filter categories...", 1, "mj-input", 3, "input", "value"], ["mjButton", "", "variant", "flat", "size", "sm", 1, "search-clear"], [1, "tree-content"], [1, "tree-item", "root-item", 3, "click"], [1, "item-icon"], [1, "fa-solid", "fa-layer-group"], [1, "item-name"], [1, "item-count"], [1, "tree-item", "uncategorized-item", 3, "selected"], [1, "tree-categories"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "tree-footer"], ["mjButton", "", "variant", "primary", "size", "sm", 1, "new-category-btn", 3, "click"], [1, "fa-solid", "fa-plus"], ["title", "Drag to resize", 1, "resize-handle", 3, "mousedown"], ["mjButton", "", "variant", "flat", "size", "sm", 1, "search-clear", 3, "click"], [1, "fa-solid", "fa-times"], [1, "tree-item", "uncategorized-item", 3, "click"], [1, "fa-solid", "fa-inbox"], [1, "tree-node", 3, "--level"], [1, "tree-node"], [1, "tree-item", 3, "click"], [1, "expand-btn", 3, "title"], [1, "expand-placeholder"], [1, "item-name", 3, "title"], [1, "item-count", 3, "title"], [1, "item-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Add Subcategory", 3, "click"], [1, "tree-children"], [1, "expand-btn", 3, "click", "title"], ["mjButton", "", "variant", "flat", "title", "Expand Category Panel", 3, "click"], [1, "fa-solid", "fa-chevron-right"], ["mjButton", "", "variant", "flat", "title", "All Actions", 3, "click"]], template: function ActionTreePanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
409
|
+
i0.ɵɵconditionalCreate(0, ActionTreePanelComponent_Conditional_0_Template, 36, 12, "div", 1)(1, ActionTreePanelComponent_Conditional_1_Template, 5, 2, "div", 2);
|
|
430
410
|
} if (rf & 2) {
|
|
431
411
|
i0.ɵɵconditional(!ctx.IsCollapsed ? 0 : 1);
|
|
432
|
-
} }, dependencies: [i2.NgTemplateOutlet, i3.
|
|
412
|
+
} }, dependencies: [i2.NgTemplateOutlet, i3.MJButtonDirective], styles: [".tree-panel[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-card);\n border-right: 1px solid var(--mj-border-default);\n position: relative;\n min-width: 180px;\n max-width: 450px;\n}\n\n.tree-header[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.tree-header[_ngcontent-%COMP%] .header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.tree-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.tree-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.tree-header[_ngcontent-%COMP%] .header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 2px;\n}\n\n.tree-header[_ngcontent-%COMP%] .header-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 4px;\n min-width: 28px;\n height: 28px;\n}\n\n.tree-header[_ngcontent-%COMP%] .header-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.tree-search[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.tree-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.tree-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n}\n\n.tree-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n cursor: pointer;\n transition: all 0.15s ease;\n gap: 8px;\n position: relative;\n color: var(--mj-text-primary);\n}\n\n.tree-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n padding-right: 40px; \n\n}\n\n.tree-item[_ngcontent-%COMP%]:hover .item-count[_ngcontent-%COMP%] {\n display: none; \n\n}\n\n.tree-item.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.tree-item.selected[_ngcontent-%COMP%] .item-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.tree-item.root-item[_ngcontent-%COMP%], \n.tree-item.uncategorized-item[_ngcontent-%COMP%] {\n padding-left: 16px;\n margin-bottom: 4px;\n}\n\n.tree-item.root-item[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n.tree-item.uncategorized-item[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n.tree-item.uncategorized-item[_ngcontent-%COMP%] .item-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.tree-node[_ngcontent-%COMP%] {\n padding-left: calc(var(--level, 0) * 16px);\n}\n\n.expand-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.expand-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-active);\n}\n\n.expand-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.expand-placeholder[_ngcontent-%COMP%] {\n width: 20px;\n flex-shrink: 0;\n}\n\n.item-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n flex-shrink: 0;\n}\n\n.item-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-status-warning);\n}\n\n.item-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.item-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n flex-shrink: 0;\n}\n\n.tree-item.selected[_ngcontent-%COMP%] .item-count[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.item-actions[_ngcontent-%COMP%] {\n display: none;\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n.tree-item[_ngcontent-%COMP%]:hover .item-actions[_ngcontent-%COMP%] {\n display: flex;\n}\n\n.item-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 2px;\n min-width: 24px;\n height: 24px;\n}\n\n.item-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.tree-children[_ngcontent-%COMP%] {\n \n\n}\n\n.tree-footer[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.new-category-btn[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.resize-handle[_ngcontent-%COMP%] {\n position: absolute;\n top: 0;\n right: 0;\n width: 4px;\n height: 100%;\n cursor: ew-resize;\n background: transparent;\n transition: background 0.15s ease;\n z-index: 10;\n}\n\n.resize-handle[_ngcontent-%COMP%]:hover, \n.resize-handle[_ngcontent-%COMP%]:active {\n background: var(--mj-brand-primary);\n}\n\n\n\n.tree-panel-collapsed[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 4px;\n background: var(--mj-bg-surface-card);\n border-right: 1px solid var(--mj-border-default);\n width: 44px;\n gap: 4px;\n}\n\n.tree-panel-collapsed[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px;\n}\n\n.tree-panel-collapsed[_ngcontent-%COMP%] button.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n}\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-border-default);\n border-radius: 3px;\n}\n\n.tree-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-muted);\n}\n\n\n\n@media (max-width: 768px) {\n .tree-panel[_ngcontent-%COMP%] {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n z-index: 100;\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15);\n }\n}"], changeDetection: 0 });
|
|
433
413
|
}
|
|
434
414
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionTreePanelComponent, [{
|
|
435
415
|
type: Component,
|
|
436
|
-
args: [{ standalone: false, selector: 'mj-action-tree-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!IsCollapsed) {\n <div class=\"tree-panel\" [style.width.px]=\"TreeWidth\">\n <div class=\"tree-header\">\n <div class=\"header-content\">\n <h3><i class=\"fa-solid fa-folder-tree\"></i> Categories</h3>\n <div class=\"header-actions\">\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n title=\"Expand All\"\n (click)=\"expandAll()\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n title=\"Collapse All\"\n (click)=\"collapseAll()\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n title=\"Collapse Panel\"\n (click)=\"toggleCollapse()\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"tree-search\">\n <kendo-textbox\n [placeholder]=\"'Filter categories...'\"\n [value]=\"SearchTerm\"\n (valueChange)=\"onSearchChange($event)\"\n [size]=\"'small'\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n @if (SearchTerm) {\n <ng-template kendoTextBoxSuffixTemplate>\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n (click)=\"onSearchChange('')\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </ng-template>\n }\n </kendo-textbox>\n </div>\n </div>\n\n <div class=\"tree-content\">\n <!-- All Categories -->\n <div class=\"tree-item root-item\"\n [class.selected]=\"isSelected('all')\"\n (click)=\"selectCategory('all')\">\n <span class=\"item-icon\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </span>\n <span class=\"item-name\">All Actions</span>\n <span class=\"item-count\">{{ getTotalActionCount() }}</span>\n </div>\n\n <!-- Uncategorized -->\n @if (getUncategorizedCount() > 0) {\n <div class=\"tree-item uncategorized-item\"\n [class.selected]=\"isSelected('uncategorized')\"\n (click)=\"selectCategory('uncategorized')\">\n <span class=\"item-icon\">\n <i class=\"fa-solid fa-inbox\"></i>\n </span>\n <span class=\"item-name\">Uncategorized</span>\n <span class=\"item-count\">{{ getUncategorizedCount() }}</span>\n </div>\n }\n\n <!-- Category Tree -->\n <div class=\"tree-categories\">\n <ng-container *ngTemplateOutlet=\"categoryTreeTemplate; context: { nodes: FilteredTree }\"></ng-container>\n </div>\n\n <ng-template #categoryTreeTemplate let-nodes=\"nodes\">\n @for (node of nodes; track node.category.ID) {\n <div class=\"tree-node\" [style.--level]=\"node.level\">\n <div class=\"tree-item\"\n [class.selected]=\"isSelected(node.category.ID)\"\n [class.has-children]=\"node.children.length > 0\"\n (click)=\"selectCategory(node.category.ID)\">\n\n @if (node.children.length > 0) {\n <button class=\"expand-btn\"\n (click)=\"toggleExpanded(node.category.ID, $event)\"\n [title]=\"isExpanded(node.category.ID) ? 'Collapse' : 'Expand'\">\n <i [class]=\"isExpanded(node.category.ID) ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n </button>\n } @else {\n <span class=\"expand-placeholder\"></span>\n }\n\n <span class=\"item-icon\">\n <i [class]=\"isExpanded(node.category.ID) ? 'fa-solid fa-folder-open' : 'fa-solid fa-folder'\"></i>\n </span>\n <span class=\"item-name\" [title]=\"node.category.Name\">{{ node.category.Name }}</span>\n <span class=\"item-count\" [title]=\"node.totalActionCount + ' total actions'\">{{ node.totalActionCount }}</span>\n\n <div class=\"item-actions\">\n <button kendoButton\n [fillMode]=\"'flat'\"\n [size]=\"'small'\"\n title=\"Add Subcategory\"\n (click)=\"onNewCategory(node.category.ID, $event)\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n </div>\n </div>\n\n @if (node.children.length > 0 && isExpanded(node.category.ID)) {\n <div class=\"tree-children\">\n <ng-container *ngTemplateOutlet=\"categoryTreeTemplate; context: { nodes: node.children }\"></ng-container>\n </div>\n }\n </div>\n }\n </ng-template>\n </div>\n\n <div class=\"tree-footer\">\n <button kendoButton\n [fillMode]=\"'outline'\"\n [themeColor]=\"'primary'\"\n [size]=\"'small'\"\n class=\"new-category-btn\"\n (click)=\"onNewCategory(null, $event)\">\n <i class=\"fa-solid fa-plus\"></i>\n New Category\n </button>\n </div>\n\n <!-- Resize Handle -->\n <div class=\"resize-handle\"\n (mousedown)=\"onResizeStart($event)\"\n title=\"Drag to resize\">\n </div>\n </div>\n} @else {\n <!-- Collapsed State -->\n <div class=\"tree-panel-collapsed\">\n <button kendoButton\n [fillMode]=\"'flat'\"\n title=\"Expand Category Panel\"\n (click)=\"toggleCollapse()\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n <button kendoButton\n [fillMode]=\"'flat'\"\n title=\"All Actions\"\n [class.selected]=\"isSelected('all')\"\n (click)=\"selectCategory('all')\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </button>\n </div>\n}\n", styles: [".tree-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-card);\n border-right: 1px solid var(--mj-border-default);\n position: relative;\n min-width: 180px;\n max-width: 450px;\n}\n\n.tree-header {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.tree-header .header-content {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.tree-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.tree-header h3 i {\n color: var(--mj-brand-primary);\n}\n\n.tree-header .header-actions {\n display: flex;\n gap: 2px;\n}\n\n.tree-header .header-actions button {\n padding: 4px;\n min-width: 28px;\n height: 28px;\n}\n\n.tree-header .header-actions button i {\n font-size: 12px;\n}\n\n.tree-search {\n width: 100%;\n}\n\n.tree-search kendo-textbox {\n width: 100%;\n}\n\n.tree-search i {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.tree-content {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n}\n\n.tree-item {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n cursor: pointer;\n transition: all 0.15s ease;\n gap: 8px;\n position: relative;\n color: var(--mj-text-primary);\n}\n\n.tree-item:hover {\n background: var(--mj-bg-surface-hover);\n padding-right: 40px; /* Make room for the action button */\n}\n\n.tree-item:hover .item-count {\n display: none; /* Hide count when action button is visible */\n}\n\n.tree-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.tree-item.selected .item-icon i {\n color: var(--mj-brand-primary);\n}\n\n.tree-item.root-item,\n.tree-item.uncategorized-item {\n padding-left: 16px;\n margin-bottom: 4px;\n}\n\n.tree-item.root-item {\n font-weight: 600;\n}\n\n.tree-item.uncategorized-item {\n opacity: 0.8;\n}\n\n.tree-item.uncategorized-item .item-icon i {\n color: var(--mj-status-warning);\n}\n\n.tree-node {\n padding-left: calc(var(--level, 0) * 16px);\n}\n\n.expand-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.expand-btn:hover {\n background: var(--mj-bg-surface-active);\n}\n\n.expand-btn i {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.expand-placeholder {\n width: 20px;\n flex-shrink: 0;\n}\n\n.item-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n flex-shrink: 0;\n}\n\n.item-icon i {\n font-size: 14px;\n color: var(--mj-status-warning);\n}\n\n.item-name {\n flex: 1;\n font-size: 13px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.item-count {\n font-size: 11px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n flex-shrink: 0;\n}\n\n.tree-item.selected .item-count {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.item-actions {\n display: none;\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n.tree-item:hover .item-actions {\n display: flex;\n}\n\n.item-actions button {\n padding: 2px;\n min-width: 24px;\n height: 24px;\n}\n\n.item-actions button i {\n font-size: 10px;\n}\n\n.tree-children {\n /* Children are indented via --level CSS variable */\n}\n\n.tree-footer {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.new-category-btn {\n width: 100%;\n}\n\n/* Resize Handle */\n.resize-handle {\n position: absolute;\n top: 0;\n right: 0;\n width: 4px;\n height: 100%;\n cursor: ew-resize;\n background: transparent;\n transition: background 0.15s ease;\n z-index: 10;\n}\n\n.resize-handle:hover,\n.resize-handle:active {\n background: var(--mj-brand-primary);\n}\n\n/* Collapsed State */\n.tree-panel-collapsed {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 4px;\n background: var(--mj-bg-surface-card);\n border-right: 1px solid var(--mj-border-default);\n width: 44px;\n gap: 4px;\n}\n\n.tree-panel-collapsed button {\n padding: 8px;\n}\n\n.tree-panel-collapsed button.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* Scrollbar Styling */\n.tree-content::-webkit-scrollbar {\n width: 6px;\n}\n\n.tree-content::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.tree-content::-webkit-scrollbar-thumb {\n background: var(--mj-border-default);\n border-radius: 3px;\n}\n\n.tree-content::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-muted);\n}\n\n/* Mobile Responsiveness */\n@media (max-width: 768px) {\n .tree-panel {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n z-index: 100;\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15);\n }\n}\n"] }]
|
|
416
|
+
args: [{ standalone: false, selector: 'mj-action-tree-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!IsCollapsed) {\n <div class=\"tree-panel\" [style.width.px]=\"TreeWidth\">\n <div class=\"tree-header\">\n <div class=\"header-content\">\n <h3><i class=\"fa-solid fa-folder-tree\"></i> Categories</h3>\n <div class=\"header-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"Expand All\"\n (click)=\"expandAll()\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"Collapse All\"\n (click)=\"collapseAll()\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"Collapse Panel\"\n (click)=\"toggleCollapse()\">\n <i class=\"fa-solid fa-chevron-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"tree-search\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\" class=\"mj-input\"\n placeholder=\"Filter categories...\"\n [value]=\"SearchTerm\"\n (input)=\"onSearchChange($any($event.target).value)\" />\n @if (SearchTerm) {\n <button mjButton variant=\"flat\" size=\"sm\" class=\"search-clear\"\n (click)=\"onSearchChange('')\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n\n <div class=\"tree-content\">\n <!-- All Categories -->\n <div class=\"tree-item root-item\"\n [class.selected]=\"isSelected('all')\"\n (click)=\"selectCategory('all')\">\n <span class=\"item-icon\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </span>\n <span class=\"item-name\">All Actions</span>\n <span class=\"item-count\">{{ getTotalActionCount() }}</span>\n </div>\n\n <!-- Uncategorized -->\n @if (getUncategorizedCount() > 0) {\n <div class=\"tree-item uncategorized-item\"\n [class.selected]=\"isSelected('uncategorized')\"\n (click)=\"selectCategory('uncategorized')\">\n <span class=\"item-icon\">\n <i class=\"fa-solid fa-inbox\"></i>\n </span>\n <span class=\"item-name\">Uncategorized</span>\n <span class=\"item-count\">{{ getUncategorizedCount() }}</span>\n </div>\n }\n\n <!-- Category Tree -->\n <div class=\"tree-categories\">\n <ng-container *ngTemplateOutlet=\"categoryTreeTemplate; context: { nodes: FilteredTree }\"></ng-container>\n </div>\n\n <ng-template #categoryTreeTemplate let-nodes=\"nodes\">\n @for (node of nodes; track node.category.ID) {\n <div class=\"tree-node\" [style.--level]=\"node.level\">\n <div class=\"tree-item\"\n [class.selected]=\"isSelected(node.category.ID)\"\n [class.has-children]=\"node.children.length > 0\"\n (click)=\"selectCategory(node.category.ID)\">\n\n @if (node.children.length > 0) {\n <button class=\"expand-btn\"\n (click)=\"toggleExpanded(node.category.ID, $event)\"\n [title]=\"isExpanded(node.category.ID) ? 'Collapse' : 'Expand'\">\n <i [class]=\"isExpanded(node.category.ID) ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n </button>\n } @else {\n <span class=\"expand-placeholder\"></span>\n }\n\n <span class=\"item-icon\">\n <i [class]=\"isExpanded(node.category.ID) ? 'fa-solid fa-folder-open' : 'fa-solid fa-folder'\"></i>\n </span>\n <span class=\"item-name\" [title]=\"node.category.Name\">{{ node.category.Name }}</span>\n <span class=\"item-count\" [title]=\"node.totalActionCount + ' total actions'\">{{ node.totalActionCount }}</span>\n\n <div class=\"item-actions\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n title=\"Add Subcategory\"\n (click)=\"onNewCategory(node.category.ID, $event)\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n </div>\n </div>\n\n @if (node.children.length > 0 && isExpanded(node.category.ID)) {\n <div class=\"tree-children\">\n <ng-container *ngTemplateOutlet=\"categoryTreeTemplate; context: { nodes: node.children }\"></ng-container>\n </div>\n }\n </div>\n }\n </ng-template>\n </div>\n\n <div class=\"tree-footer\">\n <button mjButton\n variant=\"primary\"\n size=\"sm\"\n class=\"new-category-btn\"\n (click)=\"onNewCategory(null, $event)\">\n <i class=\"fa-solid fa-plus\"></i>\n New Category\n </button>\n </div>\n\n <!-- Resize Handle -->\n <div class=\"resize-handle\"\n (mousedown)=\"onResizeStart($event)\"\n title=\"Drag to resize\">\n </div>\n </div>\n} @else {\n <!-- Collapsed State -->\n <div class=\"tree-panel-collapsed\">\n <button mjButton\n variant=\"flat\"\n title=\"Expand Category Panel\"\n (click)=\"toggleCollapse()\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n title=\"All Actions\"\n [class.selected]=\"isSelected('all')\"\n (click)=\"selectCategory('all')\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </button>\n </div>\n}\n", styles: [".tree-panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-card);\n border-right: 1px solid var(--mj-border-default);\n position: relative;\n min-width: 180px;\n max-width: 450px;\n}\n\n.tree-header {\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.tree-header .header-content {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 12px;\n}\n\n.tree-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.tree-header h3 i {\n color: var(--mj-brand-primary);\n}\n\n.tree-header .header-actions {\n display: flex;\n gap: 2px;\n}\n\n.tree-header .header-actions button {\n padding: 4px;\n min-width: 28px;\n height: 28px;\n}\n\n.tree-header .header-actions button i {\n font-size: 12px;\n}\n\n.tree-search {\n width: 100%;\n}\n\n.tree-search i {\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.tree-content {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n}\n\n.tree-item {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n cursor: pointer;\n transition: all 0.15s ease;\n gap: 8px;\n position: relative;\n color: var(--mj-text-primary);\n}\n\n.tree-item:hover {\n background: var(--mj-bg-surface-hover);\n padding-right: 40px; /* Make room for the action button */\n}\n\n.tree-item:hover .item-count {\n display: none; /* Hide count when action button is visible */\n}\n\n.tree-item.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.tree-item.selected .item-icon i {\n color: var(--mj-brand-primary);\n}\n\n.tree-item.root-item,\n.tree-item.uncategorized-item {\n padding-left: 16px;\n margin-bottom: 4px;\n}\n\n.tree-item.root-item {\n font-weight: 600;\n}\n\n.tree-item.uncategorized-item {\n opacity: 0.8;\n}\n\n.tree-item.uncategorized-item .item-icon i {\n color: var(--mj-status-warning);\n}\n\n.tree-node {\n padding-left: calc(var(--level, 0) * 16px);\n}\n\n.expand-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n padding: 0;\n border: none;\n background: transparent;\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.expand-btn:hover {\n background: var(--mj-bg-surface-active);\n}\n\n.expand-btn i {\n font-size: 10px;\n color: var(--mj-text-muted);\n}\n\n.expand-placeholder {\n width: 20px;\n flex-shrink: 0;\n}\n\n.item-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n flex-shrink: 0;\n}\n\n.item-icon i {\n font-size: 14px;\n color: var(--mj-status-warning);\n}\n\n.item-name {\n flex: 1;\n font-size: 13px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.item-count {\n font-size: 11px;\n color: var(--mj-text-muted);\n background: var(--mj-bg-surface-sunken);\n padding: 2px 8px;\n border-radius: 10px;\n flex-shrink: 0;\n}\n\n.tree-item.selected .item-count {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.item-actions {\n display: none;\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n}\n\n.tree-item:hover .item-actions {\n display: flex;\n}\n\n.item-actions button {\n padding: 2px;\n min-width: 24px;\n height: 24px;\n}\n\n.item-actions button i {\n font-size: 10px;\n}\n\n.tree-children {\n /* Children are indented via --level CSS variable */\n}\n\n.tree-footer {\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.new-category-btn {\n width: 100%;\n}\n\n/* Resize Handle */\n.resize-handle {\n position: absolute;\n top: 0;\n right: 0;\n width: 4px;\n height: 100%;\n cursor: ew-resize;\n background: transparent;\n transition: background 0.15s ease;\n z-index: 10;\n}\n\n.resize-handle:hover,\n.resize-handle:active {\n background: var(--mj-brand-primary);\n}\n\n/* Collapsed State */\n.tree-panel-collapsed {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 4px;\n background: var(--mj-bg-surface-card);\n border-right: 1px solid var(--mj-border-default);\n width: 44px;\n gap: 4px;\n}\n\n.tree-panel-collapsed button {\n padding: 8px;\n}\n\n.tree-panel-collapsed button.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* Scrollbar Styling */\n.tree-content::-webkit-scrollbar {\n width: 6px;\n}\n\n.tree-content::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.tree-content::-webkit-scrollbar-thumb {\n background: var(--mj-border-default);\n border-radius: 3px;\n}\n\n.tree-content::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-muted);\n}\n\n/* Mobile Responsiveness */\n@media (max-width: 768px) {\n .tree-panel {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n z-index: 100;\n box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15);\n }\n}\n"] }]
|
|
437
417
|
}], () => [{ type: i1.ActionExplorerStateService }, { type: i0.ChangeDetectorRef }], { Categories: [{
|
|
438
418
|
type: Input
|
|
439
419
|
}], Actions: [{
|