@acorex-platform/module-integration-management-client 0.0.54 → 0.0.56

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.
Files changed (18) hide show
  1. package/fesm2022/{acorex-platform-module-integration-management-client-delete-connection.command-DQ_kn8dH.mjs → acorex-platform-module-integration-management-client-delete-connection.command-CCMZwP4W.mjs} +5 -2
  2. package/fesm2022/{acorex-platform-module-integration-management-client-delete-connection.command-DQ_kn8dH.mjs.map → acorex-platform-module-integration-management-client-delete-connection.command-CCMZwP4W.mjs.map} +1 -1
  3. package/fesm2022/{acorex-platform-module-integration-management-client-disconnect-connection.command-B4HeDA1n.mjs → acorex-platform-module-integration-management-client-disconnect-connection.command-DpVoXBdW.mjs} +5 -2
  4. package/fesm2022/{acorex-platform-module-integration-management-client-disconnect-connection.command-B4HeDA1n.mjs.map → acorex-platform-module-integration-management-client-disconnect-connection.command-DpVoXBdW.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-integration-management-client-integrations-page.component-BIDqAXx3.mjs → acorex-platform-module-integration-management-client-integrations-page.component-Bmb24K5W.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-integration-management-client-integrations-page.component-BIDqAXx3.mjs.map → acorex-platform-module-integration-management-client-integrations-page.component-Bmb24K5W.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-integration-management-client-update-connection.command-BNMR-t12.mjs → acorex-platform-module-integration-management-client-update-connection.command-Kqir73pA.mjs} +9 -3
  8. package/fesm2022/acorex-platform-module-integration-management-client-update-connection.command-Kqir73pA.mjs.map +1 -0
  9. package/fesm2022/{acorex-platform-module-integration-management-client-validate-connection.command-CGtb_GPX.mjs → acorex-platform-module-integration-management-client-validate-connection.command-D4RZ6WPP.mjs} +5 -2
  10. package/fesm2022/acorex-platform-module-integration-management-client-validate-connection.command-D4RZ6WPP.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-integration-management-client.mjs +12 -11
  12. package/fesm2022/acorex-platform-module-integration-management-client.mjs.map +1 -1
  13. package/i18n/en-AU/integration-management.json +224 -0
  14. package/i18n/en-US/integration-management.json +224 -0
  15. package/i18n/fa-IR/integration-management.json +161 -0
  16. package/package.json +1 -1
  17. package/fesm2022/acorex-platform-module-integration-management-client-update-connection.command-BNMR-t12.mjs.map +0 -1
  18. package/fesm2022/acorex-platform-module-integration-management-client-validate-connection.command-CGtb_GPX.mjs.map +0 -1
@@ -16,7 +16,10 @@ class DeleteConnectionCommand {
16
16
  try {
17
17
  const connection = await this.connectionManager.getByIdForCurrentUser(input.connectionId);
18
18
  if (!connection) {
19
- return { success: false, message: { text: 'Connection not found or access denied.' } };
19
+ return {
20
+ success: false,
21
+ message: { text: '@integration-management:commands.connection.errors.not-found-or-denied' },
22
+ };
20
23
  }
21
24
  const { tenantId, applicationId, userId } = this.connectionManager.getSessionContext();
22
25
  if (connection.secretRef) {
@@ -50,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
50
53
  }] });
51
54
 
52
55
  export { DeleteConnectionCommand };
53
- //# sourceMappingURL=acorex-platform-module-integration-management-client-delete-connection.command-DQ_kn8dH.mjs.map
56
+ //# sourceMappingURL=acorex-platform-module-integration-management-client-delete-connection.command-CCMZwP4W.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-integration-management-client-delete-connection.command-DQ_kn8dH.mjs","sources":["../../../../libs/modules/integration-management/client/src/lib/features/commands/delete-connection.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXP_INTEGRATION_SECRET_STORE } from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\nimport {\n AXMIntegrationConnectionManager,\n toSafeIntegrationConnectionDto,\n} from '../shared/integration-connection.manager';\nimport { AXMIntegrationConnectionLifecycleDispatcher } from '../shared/integration-connection-lifecycle.dispatcher';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface DeleteConnectionCommandInput {\n connectionId: string;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class DeleteConnectionCommand implements AXPCommand<DeleteConnectionCommandInput, { deleted: true }> {\n private readonly connectionManager = inject(AXMIntegrationConnectionManager);\n private readonly secretStore = inject(AXP_INTEGRATION_SECRET_STORE);\n private readonly lifecycle = inject(AXMIntegrationConnectionLifecycleDispatcher);\n\n async execute(\n input: DeleteConnectionCommandInput,\n ): AXPCommandExecuteResultPromise<{ deleted: true }> {\n try {\n const connection = await this.connectionManager.getByIdForCurrentUser(input.connectionId);\n if (!connection) {\n return { success: false, message: { text: 'Connection not found or access denied.' } };\n }\n\n const { tenantId, applicationId, userId } = this.connectionManager.getSessionContext();\n if (connection.secretRef) {\n await this.secretStore.delete(connection.secretRef, {\n tenantId,\n applicationId,\n userId,\n connectionId: connection.id,\n providerId: connection.providerId,\n connectionScope: connection.connectionScope,\n connectionKey: connection.connectionKey,\n authMethodType: connection.authMethodType,\n });\n }\n\n const safe = toSafeIntegrationConnectionDto(connection);\n await this.connectionManager.deleteConnection(connection.id);\n await this.lifecycle.dispatchDeleted(safe);\n\n return { success: true, kind: 'object', data: { deleted: true } };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to remove integration connection.';\n return { success: false, message: { text: message } };\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;AAmBA;AAEA;MAGa,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,+BAA+B,CAAC;AAC3D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAClD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,2CAA2C,CAAC;AAmCjF,IAAA;IAjCC,MAAM,OAAO,CACX,KAAmC,EAAA;AAEnC,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC;YACzF,IAAI,CAAC,UAAU,EAAE;AACf,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,EAAE;YACxF;AAEA,YAAA,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACtF,YAAA,IAAI,UAAU,CAAC,SAAS,EAAE;gBACxB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE;oBAClD,QAAQ;oBACR,aAAa;oBACb,MAAM;oBACN,YAAY,EAAE,UAAU,CAAC,EAAE;oBAC3B,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,eAAe,EAAE,UAAU,CAAC,eAAe;oBAC3C,aAAa,EAAE,UAAU,CAAC,aAAa;oBACvC,cAAc,EAAE,UAAU,CAAC,cAAc;AAC1C,iBAAA,CAAC;YACJ;AAEA,YAAA,MAAM,IAAI,GAAG,8BAA8B,CAAC,UAAU,CAAC;YACvD,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC;AAE1C,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACnE;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,0CAA0C;AACnG,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;8GArCW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
1
+ {"version":3,"file":"acorex-platform-module-integration-management-client-delete-connection.command-CCMZwP4W.mjs","sources":["../../../../libs/modules/integration-management/client/src/lib/features/commands/delete-connection.command.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXP_INTEGRATION_SECRET_STORE } from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\nimport {\n AXMIntegrationConnectionManager,\n toSafeIntegrationConnectionDto,\n} from '../shared/integration-connection.manager';\nimport { AXMIntegrationConnectionLifecycleDispatcher } from '../shared/integration-connection-lifecycle.dispatcher';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface DeleteConnectionCommandInput {\n connectionId: string;\n}\n\n//#endregion\n\n//#region ---- Command ----\n\n@Injectable({ providedIn: 'root' })\nexport class DeleteConnectionCommand implements AXPCommand<DeleteConnectionCommandInput, { deleted: true }> {\n private readonly connectionManager = inject(AXMIntegrationConnectionManager);\n private readonly secretStore = inject(AXP_INTEGRATION_SECRET_STORE);\n private readonly lifecycle = inject(AXMIntegrationConnectionLifecycleDispatcher);\n\n async execute(\n input: DeleteConnectionCommandInput,\n ): AXPCommandExecuteResultPromise<{ deleted: true }> {\n try {\n const connection = await this.connectionManager.getByIdForCurrentUser(input.connectionId);\n if (!connection) {\n return {\n success: false,\n message: { text: '@integration-management:commands.connection.errors.not-found-or-denied' },\n };\n }\n\n const { tenantId, applicationId, userId } = this.connectionManager.getSessionContext();\n if (connection.secretRef) {\n await this.secretStore.delete(connection.secretRef, {\n tenantId,\n applicationId,\n userId,\n connectionId: connection.id,\n providerId: connection.providerId,\n connectionScope: connection.connectionScope,\n connectionKey: connection.connectionKey,\n authMethodType: connection.authMethodType,\n });\n }\n\n const safe = toSafeIntegrationConnectionDto(connection);\n await this.connectionManager.deleteConnection(connection.id);\n await this.lifecycle.dispatchDeleted(safe);\n\n return { success: true, kind: 'object', data: { deleted: true } };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to remove integration connection.';\n return { success: false, message: { text: message } };\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;AAmBA;AAEA;MAGa,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,+BAA+B,CAAC;AAC3D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAClD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,2CAA2C,CAAC;AAsCjF,IAAA;IApCC,MAAM,OAAO,CACX,KAAmC,EAAA;AAEnC,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC;YACzF,IAAI,CAAC,UAAU,EAAE;gBACf,OAAO;AACL,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,wEAAwE,EAAE;iBAC5F;YACH;AAEA,YAAA,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACtF,YAAA,IAAI,UAAU,CAAC,SAAS,EAAE;gBACxB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE;oBAClD,QAAQ;oBACR,aAAa;oBACb,MAAM;oBACN,YAAY,EAAE,UAAU,CAAC,EAAE;oBAC3B,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,eAAe,EAAE,UAAU,CAAC,eAAe;oBAC3C,aAAa,EAAE,UAAU,CAAC,aAAa;oBACvC,cAAc,EAAE,UAAU,CAAC,cAAc;AAC1C,iBAAA,CAAC;YACJ;AAEA,YAAA,MAAM,IAAI,GAAG,8BAA8B,CAAC,UAAU,CAAC;YACvD,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC;AAE1C,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QACnE;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,0CAA0C;AACnG,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;8GAxCW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -16,7 +16,10 @@ class DisconnectConnectionCommand {
16
16
  try {
17
17
  const connection = await this.connectionManager.getByIdForCurrentUser(input.connectionId);
18
18
  if (!connection) {
19
- return { success: false, message: { text: 'Connection not found or access denied.' } };
19
+ return {
20
+ success: false,
21
+ message: { text: '@integration-management:commands.connection.errors.not-found-or-denied' },
22
+ };
20
23
  }
21
24
  const { tenantId, applicationId, userId } = this.connectionManager.getSessionContext();
22
25
  if (connection.secretRef) {
@@ -57,4 +60,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
57
60
  }] });
58
61
 
59
62
  export { DisconnectConnectionCommand };
60
- //# sourceMappingURL=acorex-platform-module-integration-management-client-disconnect-connection.command-B4HeDA1n.mjs.map
63
+ //# sourceMappingURL=acorex-platform-module-integration-management-client-disconnect-connection.command-DpVoXBdW.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-integration-management-client-disconnect-connection.command-B4HeDA1n.mjs","sources":["../../../../libs/modules/integration-management/client/src/lib/features/commands/disconnect-connection.command.ts"],"sourcesContent":["\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXP_INTEGRATION_CONNECTION_STATUS, type AXPSafeIntegrationConnectionDto } from '@acorex-platform/framework-shared/core';\n\nimport { Injectable, inject } from '@angular/core';\nimport {\n AXMIntegrationConnectionManager,\n scrubDisconnectedConnectionConfig,\n toSafeIntegrationConnectionDto,\n} from '../shared/integration-connection.manager';\nimport { AXMIntegrationConnectionLifecycleDispatcher } from '../shared/integration-connection-lifecycle.dispatcher';\n\nimport { AXP_INTEGRATION_SECRET_STORE } from '@acorex-platform/framework-client/common';\n\n//#region ---- Types ----\n\nexport interface DisconnectConnectionCommandInput {\n connectionId: string;\n}\n\n//#endregion\n\n@Injectable({ providedIn: 'root' })\nexport class DisconnectConnectionCommand\n implements AXPCommand<DisconnectConnectionCommandInput, AXPSafeIntegrationConnectionDto>\n{\n private readonly connectionManager = inject(AXMIntegrationConnectionManager);\n private readonly secretStore = inject(AXP_INTEGRATION_SECRET_STORE);\n private readonly lifecycle = inject(AXMIntegrationConnectionLifecycleDispatcher);\n\n async execute(\n input: DisconnectConnectionCommandInput,\n ): AXPCommandExecuteResultPromise<AXPSafeIntegrationConnectionDto> {\n try {\n const connection = await this.connectionManager.getByIdForCurrentUser(input.connectionId);\n if (!connection) {\n return { success: false, message: { text: 'Connection not found or access denied.' } };\n }\n\n const { tenantId, applicationId, userId } = this.connectionManager.getSessionContext();\n if (connection.secretRef) {\n await this.secretStore.delete(connection.secretRef, {\n tenantId,\n applicationId,\n userId,\n connectionId: connection.id,\n providerId: connection.providerId,\n connectionScope: connection.connectionScope,\n connectionKey: connection.connectionKey,\n authMethodType: connection.authMethodType,\n });\n }\n\n const updated = await this.connectionManager.updateConnection(connection.id, {\n secretRef: null,\n config: scrubDisconnectedConnectionConfig(\n (connection.config ?? null) as Record<string, unknown> | null,\n ),\n status: AXP_INTEGRATION_CONNECTION_STATUS.NotConnected,\n isRevoked: false,\n lastErrorCode: null,\n lastErrorMessage: null,\n });\n\n const safe = toSafeIntegrationConnectionDto(updated);\n await this.lifecycle.dispatchDisconnected(safe);\n\n return { success: true, kind: 'object', data: safe };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to disconnect integration.';\n return { success: false, message: { text: message } };\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;;AAoBA;MAGa,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,+BAA+B,CAAC;AAC3D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAClD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,2CAA2C,CAAC;AA6CjF,IAAA;IA3CC,MAAM,OAAO,CACX,KAAuC,EAAA;AAEvC,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC;YACzF,IAAI,CAAC,UAAU,EAAE;AACf,gBAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,wCAAwC,EAAE,EAAE;YACxF;AAEA,YAAA,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACtF,YAAA,IAAI,UAAU,CAAC,SAAS,EAAE;gBACxB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE;oBAClD,QAAQ;oBACR,aAAa;oBACb,MAAM;oBACN,YAAY,EAAE,UAAU,CAAC,EAAE;oBAC3B,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,eAAe,EAAE,UAAU,CAAC,eAAe;oBAC3C,aAAa,EAAE,UAAU,CAAC,aAAa;oBACvC,cAAc,EAAE,UAAU,CAAC,cAAc;AAC1C,iBAAA,CAAC;YACJ;AAEA,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,EAAE;AAC3E,gBAAA,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,iCAAiC,EACtC,UAAU,CAAC,MAAM,IAAI,IAAI,EAC3B;gBACD,MAAM,EAAE,iCAAiC,CAAC,YAAY;AACtD,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,gBAAgB,EAAE,IAAI;AACvB,aAAA,CAAC;AAEF,YAAA,MAAM,IAAI,GAAG,8BAA8B,CAAC,OAAO,CAAC;YACpD,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAE/C,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;QACtD;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,mCAAmC;AAC5F,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;8GAjDW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;;2FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
1
+ {"version":3,"file":"acorex-platform-module-integration-management-client-disconnect-connection.command-DpVoXBdW.mjs","sources":["../../../../libs/modules/integration-management/client/src/lib/features/commands/disconnect-connection.command.ts"],"sourcesContent":["\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXP_INTEGRATION_CONNECTION_STATUS, type AXPSafeIntegrationConnectionDto } from '@acorex-platform/framework-shared/core';\n\nimport { Injectable, inject } from '@angular/core';\nimport {\n AXMIntegrationConnectionManager,\n scrubDisconnectedConnectionConfig,\n toSafeIntegrationConnectionDto,\n} from '../shared/integration-connection.manager';\nimport { AXMIntegrationConnectionLifecycleDispatcher } from '../shared/integration-connection-lifecycle.dispatcher';\n\nimport { AXP_INTEGRATION_SECRET_STORE } from '@acorex-platform/framework-client/common';\n\n//#region ---- Types ----\n\nexport interface DisconnectConnectionCommandInput {\n connectionId: string;\n}\n\n//#endregion\n\n@Injectable({ providedIn: 'root' })\nexport class DisconnectConnectionCommand\n implements AXPCommand<DisconnectConnectionCommandInput, AXPSafeIntegrationConnectionDto>\n{\n private readonly connectionManager = inject(AXMIntegrationConnectionManager);\n private readonly secretStore = inject(AXP_INTEGRATION_SECRET_STORE);\n private readonly lifecycle = inject(AXMIntegrationConnectionLifecycleDispatcher);\n\n async execute(\n input: DisconnectConnectionCommandInput,\n ): AXPCommandExecuteResultPromise<AXPSafeIntegrationConnectionDto> {\n try {\n const connection = await this.connectionManager.getByIdForCurrentUser(input.connectionId);\n if (!connection) {\n return {\n success: false,\n message: { text: '@integration-management:commands.connection.errors.not-found-or-denied' },\n };\n }\n\n const { tenantId, applicationId, userId } = this.connectionManager.getSessionContext();\n if (connection.secretRef) {\n await this.secretStore.delete(connection.secretRef, {\n tenantId,\n applicationId,\n userId,\n connectionId: connection.id,\n providerId: connection.providerId,\n connectionScope: connection.connectionScope,\n connectionKey: connection.connectionKey,\n authMethodType: connection.authMethodType,\n });\n }\n\n const updated = await this.connectionManager.updateConnection(connection.id, {\n secretRef: null,\n config: scrubDisconnectedConnectionConfig(\n (connection.config ?? null) as Record<string, unknown> | null,\n ),\n status: AXP_INTEGRATION_CONNECTION_STATUS.NotConnected,\n isRevoked: false,\n lastErrorCode: null,\n lastErrorMessage: null,\n });\n\n const safe = toSafeIntegrationConnectionDto(updated);\n await this.lifecycle.dispatchDisconnected(safe);\n\n return { success: true, kind: 'object', data: safe };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : 'Failed to disconnect integration.';\n return { success: false, message: { text: message } };\n }\n }\n}\n\n//#endregion\n"],"names":[],"mappings":";;;;;;;AAoBA;MAGa,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,+BAA+B,CAAC;AAC3D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAClD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,2CAA2C,CAAC;AAgDjF,IAAA;IA9CC,MAAM,OAAO,CACX,KAAuC,EAAA;AAEvC,QAAA,IAAI;AACF,YAAA,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,CAAC;YACzF,IAAI,CAAC,UAAU,EAAE;gBACf,OAAO;AACL,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,wEAAwE,EAAE;iBAC5F;YACH;AAEA,YAAA,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE;AACtF,YAAA,IAAI,UAAU,CAAC,SAAS,EAAE;gBACxB,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE;oBAClD,QAAQ;oBACR,aAAa;oBACb,MAAM;oBACN,YAAY,EAAE,UAAU,CAAC,EAAE;oBAC3B,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,eAAe,EAAE,UAAU,CAAC,eAAe;oBAC3C,aAAa,EAAE,UAAU,CAAC,aAAa;oBACvC,cAAc,EAAE,UAAU,CAAC,cAAc;AAC1C,iBAAA,CAAC;YACJ;AAEA,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,EAAE;AAC3E,gBAAA,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,iCAAiC,EACtC,UAAU,CAAC,MAAM,IAAI,IAAI,EAC3B;gBACD,MAAM,EAAE,iCAAiC,CAAC,YAAY;AACtD,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,gBAAgB,EAAE,IAAI;AACvB,aAAA,CAAC;AAEF,YAAA,MAAM,IAAI,GAAG,8BAA8B,CAAC,OAAO,CAAC;YACpD,MAAM,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC;AAE/C,YAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;QACtD;QAAE,OAAO,KAAc,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,mCAAmC;AAC5F,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QACvD;IACF;8GApDW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;;2FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;"}
@@ -377,7 +377,7 @@ class AXMIntegrationsPageComponent extends AXPPageLayoutBaseComponent {
377
377
  });
378
378
  }
379
379
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMIntegrationsPageComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
380
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMIntegrationsPageComponent, isStandalone: true, selector: "axm-integrations-page", providers: [{ provide: AXPPageLayoutBase, useExisting: AXMIntegrationsPageComponent }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout>\n <!-- ----- Page start side: overview stats and category filters (large screens) ----- -->\n @if (showSidebarPanel()) {\n <axp-layout-start-side class=\"h-full\">\n <axp-layout-content class=\"axm-integrations-page__sidebar\">\n @if (loading()) {\n <!-- ----- Sidebar skeleton while domains and providers load ----- -->\n <section class=\"axm-integrations-page__sidebar-section\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-sidebar-title\"></ax-skeleton>\n <div class=\"axm-integrations-page__sidebar-section-body\">\n @for (row of [0, 1, 2, 3]; track row) {\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-sidebar-row\"></ax-skeleton>\n }\n </div>\n </section>\n <section class=\"axm-integrations-page__sidebar-section\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-sidebar-title\"></ax-skeleton>\n <div class=\"axm-integrations-page__sidebar-section-body\">\n @for (row of [0, 1, 2, 3, 4]; track row) {\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-sidebar-row\"></ax-skeleton>\n }\n </div>\n </section>\n } @else {\n <section class=\"axm-integrations-page__sidebar-section\">\n <h3 class=\"axm-integrations-page__sidebar-section-title\">\n {{ (PAGE_I18N + '.sidebar.overview.title' | translate | async) ?? '' }}\n </h3>\n <ul class=\"axm-integrations-page__overview-list\">\n <li class=\"axm-integrations-page__overview-item\">\n <span class=\"axm-integrations-page__overview-label\">\n <ax-icon icon=\"fa-light fa-circle-check\"></ax-icon>\n <span>{{ (PAGE_I18N + '.sidebar.overview.connected' | translate | async) ?? '' }}</span>\n </span>\n <span class=\"axm-integrations-page__overview-count\">{{ overviewStats().connected }}</span>\n </li>\n <li class=\"axm-integrations-page__overview-item\">\n <span class=\"axm-integrations-page__overview-label\">\n <ax-icon icon=\"fa-light fa-shield-exclamation\"></ax-icon>\n <span>{{ (PAGE_I18N + '.sidebar.overview.error' | translate | async) ?? '' }}</span>\n </span>\n <span class=\"axm-integrations-page__overview-count\" [class.--danger]=\"overviewStats().error > 0\">{{ overviewStats().error }}</span>\n </li>\n <li class=\"axm-integrations-page__overview-item\">\n <span class=\"axm-integrations-page__overview-label\">\n <ax-icon icon=\"fa-light fa-toggle-off\"></ax-icon>\n <span>{{ (PAGE_I18N + '.sidebar.overview.disabled' | translate | async) ?? '' }}</span>\n </span>\n <span class=\"axm-integrations-page__overview-count\">{{ overviewStats().disabled }}</span>\n </li>\n <li class=\"axm-integrations-page__overview-item\">\n <span class=\"axm-integrations-page__overview-label\">\n <ax-icon icon=\"fa-light fa-plug\"></ax-icon>\n <span>{{ (PAGE_I18N + '.sidebar.overview.not-connected' | translate | async) ?? '' }}</span>\n </span>\n <span class=\"axm-integrations-page__overview-count\">{{ overviewStats().notConnected }}</span>\n </li>\n </ul>\n </section>\n\n <section class=\"axm-integrations-page__sidebar-section\">\n <h3 class=\"axm-integrations-page__sidebar-section-title\">\n {{ (PAGE_I18N + '.sidebar.categories.title' | translate | async) ?? '' }}\n </h3>\n <ul class=\"axm-integrations-page__category-list\">\n <li class=\"axm-integrations-page__category-item\">\n <ax-check-box\n class=\"axm-integrations-page__category-checkbox\"\n [ngModel]=\"isAllDomainsSelected()\"\n (onValueChanged)=\"handleAllDomainsFilterChange($event)\"\n >\n <ax-label>{{ (PAGE_I18N + '.sidebar.categories.all' | translate | async) ?? '' }}</ax-label>\n </ax-check-box>\n </li>\n @for (section of domainSections(); track section.domain.id) {\n <li class=\"axm-integrations-page__category-item\">\n <ax-check-box\n class=\"axm-integrations-page__category-checkbox\"\n [ngModel]=\"isDomainFilterSelected(section.domain.id)\"\n (onValueChanged)=\"handleDomainFilterChange(section.domain.id, $event)\"\n >\n <ax-label>{{ section.domain.displayName | translate | async }}</ax-label>\n </ax-check-box>\n </li>\n }\n </ul>\n </section>\n }\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content>\n @if (loading()) {\n <!-- ----- Skeleton placeholders while domains and providers are fetched ----- -->\n <div class=\"flex w-full flex-col gap-8\">\n @for (sectionIndex of skeletonSectionPlaceholders; track sectionIndex) {\n <section class=\"flex flex-col gap-4\">\n <div class=\"flex flex-col gap-2\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-section-title\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-section-description\"></ax-skeleton>\n </div>\n\n <div class=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-[repeat(auto-fill,minmax(16rem,18rem))] lg:justify-start\">\n @for (cardIndex of skeletonCardPlaceholders; track cardIndex) {\n <div class=\"axm-integrations-page__skeleton-card\">\n <div class=\"flex items-start justify-between gap-3\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-icon\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-status-badge\"></ax-skeleton>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-title\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-description\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-description --short\"></ax-skeleton>\n </div>\n\n <div class=\"axm-integrations-page__skeleton-footer\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-action\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-switch\"></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </section>\n }\n </div>\n } @else if (!visibleDomainSections().length) {\n <!-- ----- Empty state when all category filters are cleared on large screens ----- -->\n <axp-state-message mode=\"empty\" icon=\"fa-light fa-filter\" [title]=\"PAGE_I18N + '.sidebar.empty-filter.title'\" [description]=\"PAGE_I18N + '.sidebar.empty-filter.description'\">\n <ax-button slot=\"actions\" look=\"solid\" color=\"primary\" [text]=\"(PAGE_I18N + '.sidebar.empty-filter.action' | translate | async) ?? ''\" (onClick)=\"handleSelectAllDomainFilters()\"></ax-button>\n </axp-state-message>\n } @else {\n <!-- ----- Domain sections with tenant provider cards ----- -->\n <div class=\"flex w-full flex-col gap-8\">\n @for (section of visibleDomainSections(); track section.domain.id) {\n <section class=\"flex flex-col gap-4\">\n <div class=\"flex flex-col gap-1\">\n <h2 class=\"text-lg font-semibold\">\n {{ section.domain.displayName | translate | async }}\n </h2>\n @if (section.domain.description) {\n <p class=\"text-sm text-muted\">\n {{ section.domain.description | translate | async }}\n </p>\n }\n </div>\n\n <div class=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-[repeat(auto-fill,minmax(18rem,24rem))] lg:justify-start\">\n @for (provider of section.providers; track provider.id) {\n <article class=\"flex h-full w-full flex-col gap-3 rounded-xl border border-surface bg-lighter-surface p-4 shadow-sm transition-shadow hover:shadow-md\">\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"flex size-14 shrink-0 items-center justify-center rounded-xl border border-surface bg-transparent\">\n @if (provider.logoKey) {\n <axp-logo [logoKey]=\"provider.logoKey\" appearance=\"colored\" [size]=\"32\" />\n } @else if (provider.icon) {\n <ax-icon class=\"text-2xl\">\n <i [class]=\"provider.icon\"></i>\n </ax-icon>\n }\n </div>\n\n <div class=\"ax-sm\">\n @if (provider.allowMultipleConnections) {\n @if (getProviderConnectionSummary(provider.id); as summary) {\n @if (summary.total > 0) {\n <ax-badge\n look=\"twotone\"\n [color]=\"getMultiConnectionStatusBadgeColor(provider.id)\"\n [text]=\"(PANEL_I18N + '.status.connected-count' | translate: { params: { connected: summary.connected, total: summary.total } } | async) ?? ''\"\n ></ax-badge>\n } @else {\n <ax-badge look=\"twotone\" color=\"secondary\" [text]=\"(PANEL_I18N + '.status.not-connected' | translate | async) ?? ''\"></ax-badge>\n }\n }\n } @else if (hasEstablishedConnection(provider.id)) {\n @if (isConnectionEnabled(provider.id)) {\n <ax-badge look=\"twotone\" color=\"success\" [text]=\"(PANEL_I18N + '.status.connected' | translate | async) ?? ''\"></ax-badge>\n } @else {\n <ax-badge look=\"twotone\" color=\"warning\" [text]=\"(PANEL_I18N + '.status.disabled' | translate | async) ?? ''\"></ax-badge>\n }\n } @else {\n <ax-badge look=\"twotone\" color=\"secondary\" [text]=\"(PANEL_I18N + '.status.not-connected' | translate | async) ?? ''\"></ax-badge>\n }\n </div>\n </div>\n\n <div class=\"flex min-w-0 flex-1 flex-col gap-2\">\n <div class=\"flex flex-wrap items-center gap-2 font-medium\">\n <span>{{ provider.displayName | translate | async }}</span>\n @if (isConnectDisabled(provider.id) && connectDisabledBadgeKey(provider.id); as badgeKey) {\n <span\n class=\"inline-flex cursor-help\"\n [axTooltip]=\"(connectDisabledMessageKey(provider.id) | translate | async) ?? ''\"\n axTooltipPlacement=\"top\"\n [attr.aria-label]=\"(connectDisabledMessageKey(provider.id) | translate | async) ?? ''\"\n >\n <ax-badge size=\"sm\" look=\"twotone\" color=\"warning\" [text]=\"(badgeKey | translate | async) ?? ''\"></ax-badge>\n </span>\n }\n </div>\n\n @if (provider.description) {\n <p class=\"text-sm text-muted\">\n {{ provider.description | translate | async }}\n </p>\n }\n\n @if (getProviderBadges(provider.id); as badges) {\n @if (badges.length > 0) {\n <div class=\"flex flex-wrap items-center gap-1\">\n @for (badge of badges; track badge.text) {\n <ax-badge size=\"sm\" look=\"twotone\" [color]=\"badge.color\" [text]=\"badge.text\"></ax-badge>\n }\n </div>\n }\n }\n\n <!-- ----- Multi-connection provider: list each connection with status and actions ----- -->\n @if (provider.allowMultipleConnections) {\n <div class=\"mt-1 flex flex-col gap-2\">\n @for (connection of getConnections(provider.id); track connection.id) {\n <div class=\"flex flex-col gap-2 rounded-lg border border-surface bg-lighter-surface p-3\">\n <!-- ----- Row 1: connection identity + status badge ----- -->\n <div class=\"flex items-start justify-between gap-2\">\n <div class=\"min-w-0 flex-1\">\n <div class=\"truncate text-sm font-medium\">{{ connection.displayName }}</div>\n @if (connection.instanceUrl) {\n <div class=\"truncate text-xs text-muted\">{{ connection.instanceUrl }}</div>\n }\n </div>\n <div class=\"ax-sm shrink-0\">\n @if (isEstablishedConnection(connection)) {\n @if (isEnabledConnection(connection)) {\n <ax-badge look=\"twotone\" color=\"success\" [text]=\"(PANEL_I18N + '.status.connected' | translate | async) ?? ''\"></ax-badge>\n } @else {\n <ax-badge look=\"twotone\" color=\"warning\" [text]=\"(PANEL_I18N + '.status.disabled' | translate | async) ?? ''\"></ax-badge>\n }\n } @else {\n <ax-badge look=\"twotone\" color=\"secondary\" [text]=\"(PANEL_I18N + '.status.not-connected' | translate | async) ?? ''\"></ax-badge>\n }\n </div>\n </div>\n\n <!-- ----- Row 2: actions + enable toggle ----- -->\n <div class=\"flex flex-nowrap items-center justify-between gap-2\">\n <div class=\"flex shrink-0 flex-nowrap items-center gap-2\">\n @if (isEstablishedConnection(connection)) {\n <ax-dropdown-button\n size=\"sm\"\n look=\"outline\"\n [mode]=\"'dropdown'\"\n type=\"button\"\n [disabled]=\"pendingAction()\"\n [text]=\"(PANEL_I18N + '.actions.manage' | translate | async) ?? ''\"\n >\n <ax-button-item-list>\n @if (supportsConfigure(provider, connection)) {\n <ax-button-item\n [text]=\"(PANEL_I18N + '.actions.reconfigure' | translate | async) ?? ''\"\n [disabled]=\"pendingAction() || isConnectDisabled(provider.id)\"\n (onClick)=\"handleConfigure(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-gear\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n <ax-button-item\n [text]=\"(PANEL_I18N + '.actions.disconnect' | translate | async) ?? ''\"\n color=\"danger\"\n [disabled]=\"pendingAction()\"\n (onClick)=\"handleDisconnect(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-link-slash\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(PANEL_I18N + '.actions.remove' | translate | async) ?? ''\"\n color=\"danger\"\n [disabled]=\"pendingAction()\"\n (onClick)=\"handleRemove(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n } @else if (supportsConnect(provider)) {\n <ax-button\n size=\"sm\"\n look=\"solid\"\n type=\"button\"\n [disabled]=\"pendingAction() || isConnectDisabled(provider.id)\"\n [text]=\"(PANEL_I18N + '.actions.connect' | translate | async) ?? ''\"\n (onClick)=\"handleConnect(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plug\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-button\n size=\"sm\"\n look=\"outline\"\n color=\"danger\"\n type=\"button\"\n [disabled]=\"pendingAction()\"\n [text]=\"(PANEL_I18N + '.actions.remove' | translate | async) ?? ''\"\n (onClick)=\"handleRemove(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></ax-icon>\n </ax-prefix>\n </ax-button>\n } @else {\n <ax-button\n size=\"sm\"\n look=\"outline\"\n color=\"danger\"\n type=\"button\"\n [disabled]=\"pendingAction()\"\n [text]=\"(PANEL_I18N + '.actions.remove' | translate | async) ?? ''\"\n (onClick)=\"handleRemove(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n </div>\n\n <ax-switch\n class=\"shrink-0\"\n [ngModel]=\"isEnabledConnection(connection)\"\n [disabled]=\"pendingAction() || !isEstablishedConnection(connection)\"\n (ngModelChange)=\"handleToggleEnabled(provider, $event, connection)\"\n ></ax-switch>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- ----- Card footer: single-connection manage/connect, or add connection for multi ----- -->\n <div class=\"mt-auto flex items-center justify-between gap-3 border-t border-surface pt-4\">\n @if (provider.allowMultipleConnections) {\n @if (supportsConnect(provider)) {\n <ax-button\n size=\"sm\"\n look=\"outline\"\n type=\"button\"\n [disabled]=\"pendingAction() || isConnectDisabled(provider.id)\"\n [text]=\"(PANEL_I18N + '.actions.add-connection' | translate | async) ?? ''\"\n (onClick)=\"handleAddConnection(provider)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n } @else {\n <span></span>\n }\n <span></span>\n } @else if (hasEstablishedConnection(provider.id)) {\n <ax-dropdown-button size=\"sm\" [mode]=\"'dropdown'\" type=\"button\" [disabled]=\"pendingAction()\" [text]=\"(PANEL_I18N + '.actions.manage' | translate | async) ?? ''\">\n <ax-button-item-list>\n @if (supportsConfigure(provider)) {\n <ax-button-item [text]=\"(PANEL_I18N + '.actions.reconfigure' | translate | async) ?? ''\" [disabled]=\"pendingAction() || isConnectDisabled(provider.id)\" (onClick)=\"handleConfigure(provider)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-gear\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n @for (action of getManageActions(provider); track action.commandKey) {\n <ax-button-item [text]=\"(action.titleKey | translate | async) ?? ''\" [color]=\"action.color\" [disabled]=\"pendingAction()\" (onClick)=\"handleManageAction(provider, action)\">\n @if (action.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n <ax-button-item [text]=\"(PANEL_I18N + '.actions.disconnect' | translate | async) ?? ''\" color=\"danger\" [disabled]=\"pendingAction()\" (onClick)=\"handleDisconnect(provider)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-link-slash\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n <ax-switch [ngModel]=\"isConnectionEnabled(provider.id)\" [disabled]=\"pendingAction() || !hasEstablishedConnection(provider.id)\" (ngModelChange)=\"handleToggleEnabled(provider, $event)\"></ax-switch>\n } @else if (supportsConnect(provider)) {\n <ax-button size=\"sm\" look=\"solid\" type=\"button\" [disabled]=\"pendingAction() || isConnectDisabled(provider.id)\" [text]=\"(PANEL_I18N + '.actions.connect' | translate | async) ?? ''\" (onClick)=\"handleConnect(provider)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plug\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-switch [ngModel]=\"isConnectionEnabled(provider.id)\" [disabled]=\"pendingAction() || !hasEstablishedConnection(provider.id)\" (ngModelChange)=\"handleToggleEnabled(provider, $event)\"></ax-switch>\n } @else {\n <span></span>\n <ax-switch [ngModel]=\"isConnectionEnabled(provider.id)\" [disabled]=\"pendingAction() || !hasEstablishedConnection(provider.id)\" (ngModelChange)=\"handleToggleEnabled(provider, $event)\"></ax-switch>\n }\n </div>\n </article>\n }\n </div>\n </section>\n }\n </div>\n }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["@layer properties;axm-integrations-page axp-layout-start-side{min-width:calc(var(--spacing, .25rem) * 80)!important;border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}axm-integrations-page axp-layout-start-side axp-layout-content.axm-integrations-page__sidebar{flex:none;padding-inline:calc(var(--spacing, .25rem) * 4);padding-bottom:calc(var(--spacing, .25rem) * 4)}axm-integrations-page .axm-integrations-page__sidebar-section{margin-top:calc(var(--spacing, .25rem) * 4)}axm-integrations-page .axm-integrations-page__sidebar-section-title{margin:0;padding-bottom:calc(var(--spacing, .25rem) * 2);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);opacity:85%}axm-integrations-page .axm-integrations-page__sidebar-section:first-child .axm-integrations-page__sidebar-section-title{padding-top:calc(var(--spacing, .25rem) * 4)}axm-integrations-page .axm-integrations-page__sidebar-section-body{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3)}axm-integrations-page .axm-integrations-page__overview-list,axm-integrations-page .axm-integrations-page__category-list{margin:0;display:flex;list-style-type:none;flex-direction:column;gap:var(--spacing, .25rem);padding:0}axm-integrations-page .axm-integrations-page__overview-item{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 1.5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}axm-integrations-page .axm-integrations-page__overview-label{display:inline-flex;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 2.5)}axm-integrations-page .axm-integrations-page__overview-label ax-icon{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));color:rgba(var(--ax-sys-color-text-default))}@supports (color: color-mix(in lab,red,red)){axm-integrations-page .axm-integrations-page__overview-label ax-icon{color:color-mix(in oklab,rgba(var(--ax-sys-color-text-default)) 80%,transparent)}}axm-integrations-page .axm-integrations-page__overview-count{display:inline-flex;min-width:calc(var(--spacing, .25rem) * 7);flex-shrink:0;align-items:center;justify-content:center;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface))}axm-integrations-page .axm-integrations-page__overview-count.--danger{background-color:var(--color-danger);color:var(--color-on-danger);border-color:var(--color-border-danger)}axm-integrations-page .axm-integrations-page__category-item{padding-block:calc(var(--spacing, .25rem) * 1.5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}axm-integrations-page .axm-integrations-page__category-checkbox{width:100%}axm-integrations-page .axm-integrations-page__skeleton-sidebar-title{height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 28);border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-sidebar-row{height:calc(var(--spacing, .25rem) * 8);width:100%;border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-section-title{height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 40);border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-section-description{height:calc(var(--spacing, .25rem) * 4);width:100%;max-width:var(--container-md, 28rem);border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-card{display:flex;height:100%;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3);border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter);border-color:rgba(var(--ax-sys-color-surface));padding:calc(var(--spacing, .25rem) * 4)}axm-integrations-page .axm-integrations-page__skeleton-icon{width:calc(var(--spacing, .25rem) * 14);height:calc(var(--spacing, .25rem) * 14);flex-shrink:0;border-radius:var(--radius-xl, .75rem)}axm-integrations-page .axm-integrations-page__skeleton-status-badge{height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 20);flex-shrink:0;border-radius:calc(infinity * 1px)}axm-integrations-page .axm-integrations-page__skeleton-title{height:calc(var(--spacing, .25rem) * 5);width:calc(3 / 5 * 100%);border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-description{height:calc(var(--spacing, .25rem) * 4);width:100%;border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-description.--short{width:80%}axm-integrations-page .axm-integrations-page__skeleton-footer{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-surface));padding-top:calc(var(--spacing, .25rem) * 4)}axm-integrations-page .axm-integrations-page__skeleton-action{height:calc(var(--spacing, .25rem) * 8);width:calc(var(--spacing, .25rem) * 24);border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-switch{height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 11);border-radius:calc(infinity * 1px)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i2.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i4.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type: i5.AXDropdownButtonComponent, selector: "ax-dropdown-button", inputs: ["disabled", "size", "text", "color", "look", "type", "mode"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "lookChange", "colorChange", "disabledChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i6.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i6.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i7.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i8.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXSwitchModule }, { kind: "component", type: i9.AXSwitchComponent, selector: "ax-switch", inputs: ["disabled", "readonly", "color", "tabIndex", "value", "name", "isLoading"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged", "readonlyChange", "disabledChange"] }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "directive", type: i10.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
380
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMIntegrationsPageComponent, isStandalone: true, selector: "axm-integrations-page", providers: [{ provide: AXPPageLayoutBase, useExisting: AXMIntegrationsPageComponent }], usesInheritance: true, ngImport: i0, template: "<axp-page-layout>\n <!-- ----- Page start side: overview stats and category filters (large screens) ----- -->\n @if (showSidebarPanel()) {\n <axp-layout-start-side class=\"h-full\">\n <axp-layout-content class=\"axm-integrations-page__sidebar\">\n @if (loading()) {\n <!-- ----- Sidebar skeleton while domains and providers load ----- -->\n <section class=\"axm-integrations-page__sidebar-section\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-sidebar-title\"></ax-skeleton>\n <div class=\"axm-integrations-page__sidebar-section-body\">\n @for (row of [0, 1, 2, 3]; track row) {\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-sidebar-row\"></ax-skeleton>\n }\n </div>\n </section>\n <section class=\"axm-integrations-page__sidebar-section\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-sidebar-title\"></ax-skeleton>\n <div class=\"axm-integrations-page__sidebar-section-body\">\n @for (row of [0, 1, 2, 3, 4]; track row) {\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-sidebar-row\"></ax-skeleton>\n }\n </div>\n </section>\n } @else {\n <section class=\"axm-integrations-page__sidebar-section\">\n <h3 class=\"axm-integrations-page__sidebar-section-title\">\n {{ (PAGE_I18N + '.sidebar.overview.title' | translate | async) ?? '' }}\n </h3>\n <ul class=\"axm-integrations-page__overview-list\">\n <li class=\"axm-integrations-page__overview-item\">\n <span class=\"axm-integrations-page__overview-label\">\n <ax-icon icon=\"fa-light fa-circle-check\"></ax-icon>\n <span>{{ (PAGE_I18N + '.sidebar.overview.connected' | translate | async) ?? '' }}</span>\n </span>\n <span class=\"axm-integrations-page__overview-count\">{{ overviewStats().connected }}</span>\n </li>\n <li class=\"axm-integrations-page__overview-item\">\n <span class=\"axm-integrations-page__overview-label\">\n <ax-icon icon=\"fa-light fa-shield-exclamation\"></ax-icon>\n <span>{{ (PAGE_I18N + '.sidebar.overview.error' | translate | async) ?? '' }}</span>\n </span>\n <span class=\"axm-integrations-page__overview-count\" [class.--danger]=\"overviewStats().error > 0\">{{ overviewStats().error }}</span>\n </li>\n <li class=\"axm-integrations-page__overview-item\">\n <span class=\"axm-integrations-page__overview-label\">\n <ax-icon icon=\"fa-light fa-toggle-off\"></ax-icon>\n <span>{{ (PAGE_I18N + '.sidebar.overview.disabled' | translate | async) ?? '' }}</span>\n </span>\n <span class=\"axm-integrations-page__overview-count\">{{ overviewStats().disabled }}</span>\n </li>\n <li class=\"axm-integrations-page__overview-item\">\n <span class=\"axm-integrations-page__overview-label\">\n <ax-icon icon=\"fa-light fa-plug\"></ax-icon>\n <span>{{ (PAGE_I18N + '.sidebar.overview.not-connected' | translate | async) ?? '' }}</span>\n </span>\n <span class=\"axm-integrations-page__overview-count\">{{ overviewStats().notConnected }}</span>\n </li>\n </ul>\n </section>\n\n <section class=\"axm-integrations-page__sidebar-section\">\n <h3 class=\"axm-integrations-page__sidebar-section-title\">\n {{ (PAGE_I18N + '.sidebar.categories.title' | translate | async) ?? '' }}\n </h3>\n <ul class=\"axm-integrations-page__category-list\">\n <li class=\"axm-integrations-page__category-item\">\n <ax-check-box\n class=\"axm-integrations-page__category-checkbox\"\n [ngModel]=\"isAllDomainsSelected()\"\n (onValueChanged)=\"handleAllDomainsFilterChange($event)\"\n >\n <ax-label>{{ (PAGE_I18N + '.sidebar.categories.all' | translate | async) ?? '' }}</ax-label>\n </ax-check-box>\n </li>\n @for (section of domainSections(); track section.domain.id) {\n <li class=\"axm-integrations-page__category-item\">\n <ax-check-box\n class=\"axm-integrations-page__category-checkbox\"\n [ngModel]=\"isDomainFilterSelected(section.domain.id)\"\n (onValueChanged)=\"handleDomainFilterChange(section.domain.id, $event)\"\n >\n <ax-label>{{ section.domain.displayName | translate | async }}</ax-label>\n </ax-check-box>\n </li>\n }\n </ul>\n </section>\n }\n </axp-layout-content>\n </axp-layout-start-side>\n }\n\n <axp-page-content>\n @if (loading()) {\n <!-- ----- Skeleton placeholders while domains and providers are fetched ----- -->\n <div class=\"flex w-full flex-col gap-8\">\n @for (sectionIndex of skeletonSectionPlaceholders; track sectionIndex) {\n <section class=\"flex flex-col gap-4\">\n <div class=\"flex flex-col gap-2\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-section-title\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-section-description\"></ax-skeleton>\n </div>\n\n <div class=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-[repeat(auto-fill,minmax(16rem,18rem))] lg:justify-start\">\n @for (cardIndex of skeletonCardPlaceholders; track cardIndex) {\n <div class=\"axm-integrations-page__skeleton-card\">\n <div class=\"flex items-start justify-between gap-3\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-icon\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-status-badge\"></ax-skeleton>\n </div>\n\n <div class=\"flex flex-col gap-2\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-title\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-description\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-description --short\"></ax-skeleton>\n </div>\n\n <div class=\"axm-integrations-page__skeleton-footer\">\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-action\"></ax-skeleton>\n <ax-skeleton [animated]=\"true\" class=\"axm-integrations-page__skeleton-switch\"></ax-skeleton>\n </div>\n </div>\n }\n </div>\n </section>\n }\n </div>\n } @else if (!visibleDomainSections().length) {\n <!-- ----- Empty state when all category filters are cleared on large screens ----- -->\n <axp-state-message mode=\"empty\" icon=\"fa-light fa-filter\" [title]=\"PAGE_I18N + '.sidebar.empty-filter.title'\" [description]=\"PAGE_I18N + '.sidebar.empty-filter.description'\">\n <ax-button slot=\"actions\" look=\"solid\" color=\"primary\" [text]=\"(PAGE_I18N + '.sidebar.empty-filter.action' | translate | async) ?? ''\" (onClick)=\"handleSelectAllDomainFilters()\"></ax-button>\n </axp-state-message>\n } @else {\n <!-- ----- Domain sections with tenant provider cards ----- -->\n <div class=\"flex w-full flex-col gap-8\">\n @for (section of visibleDomainSections(); track section.domain.id) {\n <section class=\"flex flex-col gap-4\">\n <div class=\"flex flex-col gap-1\">\n <h2 class=\"text-lg font-semibold\">\n {{ section.domain.displayName | translate | async }}\n </h2>\n @if (section.domain.description) {\n <p class=\"text-sm text-muted\">\n {{ section.domain.description | translate | async }}\n </p>\n }\n </div>\n\n <div class=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-[repeat(auto-fill,minmax(18rem,24rem))] lg:justify-start\">\n @for (provider of section.providers; track provider.id) {\n <article class=\"flex h-full w-full flex-col gap-3 rounded-xl border border-surface bg-lighter-surface p-4 shadow-sm transition-shadow hover:shadow-md\">\n <div class=\"flex items-start justify-between gap-3\">\n <div class=\"flex size-14 shrink-0 items-center justify-center rounded-xl border border-surface bg-transparent\">\n @if (provider.logoKey) {\n <axp-logo [logoKey]=\"provider.logoKey\" appearance=\"colored\" [size]=\"32\" />\n } @else if (provider.icon) {\n <ax-icon class=\"text-2xl\">\n <i [class]=\"provider.icon\"></i>\n </ax-icon>\n }\n </div>\n\n <div class=\"ax-sm\">\n @if (provider.allowMultipleConnections) {\n @if (getProviderConnectionSummary(provider.id); as summary) {\n @if (summary.total > 0) {\n <ax-badge\n look=\"twotone\"\n [color]=\"getMultiConnectionStatusBadgeColor(provider.id)\"\n [text]=\"(PANEL_I18N + '.status.connected-count' | translate: { params: { connected: summary.connected, total: summary.total } } | async) ?? ''\"\n ></ax-badge>\n } @else {\n <ax-badge look=\"twotone\" color=\"secondary\" [text]=\"(PANEL_I18N + '.status.not-connected' | translate | async) ?? ''\"></ax-badge>\n }\n }\n } @else if (hasEstablishedConnection(provider.id)) {\n @if (isConnectionEnabled(provider.id)) {\n <ax-badge look=\"twotone\" color=\"success\" [text]=\"(PANEL_I18N + '.status.connected' | translate | async) ?? ''\"></ax-badge>\n } @else {\n <ax-badge look=\"twotone\" color=\"warning\" [text]=\"(PANEL_I18N + '.status.disabled' | translate | async) ?? ''\"></ax-badge>\n }\n } @else {\n <ax-badge look=\"twotone\" color=\"secondary\" [text]=\"(PANEL_I18N + '.status.not-connected' | translate | async) ?? ''\"></ax-badge>\n }\n </div>\n </div>\n\n <div class=\"flex min-w-0 flex-1 flex-col gap-2\">\n <div class=\"flex flex-wrap items-center gap-2 font-medium\">\n <span>{{ provider.displayName | translate | async }}</span>\n @if (isConnectDisabled(provider.id) && connectDisabledBadgeKey(provider.id); as badgeKey) {\n <span\n class=\"inline-flex cursor-help\"\n [axTooltip]=\"(connectDisabledMessageKey(provider.id) | translate | async) ?? ''\"\n axTooltipPlacement=\"top\"\n [attr.aria-label]=\"(connectDisabledMessageKey(provider.id) | translate | async) ?? ''\"\n >\n <ax-badge size=\"sm\" look=\"twotone\" color=\"warning\" [text]=\"(badgeKey | translate | async) ?? ''\"></ax-badge>\n </span>\n }\n </div>\n\n @if (provider.description) {\n <p class=\"text-sm text-muted\">\n {{ provider.description | translate | async }}\n </p>\n }\n\n @if (getProviderBadges(provider.id); as badges) {\n @if (badges.length > 0) {\n <div class=\"flex flex-wrap items-center gap-1\">\n @for (badge of badges; track badge.text) {\n <ax-badge size=\"sm\" look=\"twotone\" [color]=\"badge.color\" [text]=\"badge.text\"></ax-badge>\n }\n </div>\n }\n }\n\n <!-- ----- Multi-connection provider: list each connection with status and actions ----- -->\n @if (provider.allowMultipleConnections) {\n <div class=\"mt-1 flex flex-col gap-2\">\n @for (connection of getConnections(provider.id); track connection.id) {\n <div class=\"flex flex-col gap-2 rounded-lg border border-surface bg-lighter-surface p-3\">\n <!-- ----- Row 1: connection identity + status badge ----- -->\n <div class=\"flex items-start justify-between gap-2\">\n <div class=\"min-w-0 flex-1\">\n <div class=\"truncate text-sm font-medium\">{{ connection.displayName }}</div>\n @if (connection.instanceUrl) {\n <div class=\"truncate text-xs text-muted\">{{ connection.instanceUrl }}</div>\n }\n </div>\n <div class=\"ax-sm shrink-0\">\n @if (isEstablishedConnection(connection)) {\n @if (isEnabledConnection(connection)) {\n <ax-badge look=\"twotone\" color=\"success\" [text]=\"(PANEL_I18N + '.status.connected' | translate | async) ?? ''\"></ax-badge>\n } @else {\n <ax-badge look=\"twotone\" color=\"warning\" [text]=\"(PANEL_I18N + '.status.disabled' | translate | async) ?? ''\"></ax-badge>\n }\n } @else {\n <ax-badge look=\"twotone\" color=\"secondary\" [text]=\"(PANEL_I18N + '.status.not-connected' | translate | async) ?? ''\"></ax-badge>\n }\n </div>\n </div>\n\n <!-- ----- Row 2: actions + enable toggle ----- -->\n <div class=\"flex flex-nowrap items-center justify-between gap-2\">\n <div class=\"flex shrink-0 flex-nowrap items-center gap-2\">\n @if (isEstablishedConnection(connection)) {\n <ax-dropdown-button\n size=\"sm\"\n look=\"outline\"\n [mode]=\"'dropdown'\"\n type=\"button\"\n [disabled]=\"pendingAction()\"\n [text]=\"(PANEL_I18N + '.actions.manage' | translate | async) ?? ''\"\n >\n <ax-button-item-list>\n @if (supportsConfigure(provider, connection)) {\n <ax-button-item\n [text]=\"(PANEL_I18N + '.actions.reconfigure' | translate | async) ?? ''\"\n [disabled]=\"pendingAction() || isConnectDisabled(provider.id)\"\n (onClick)=\"handleConfigure(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-gear\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n <ax-button-item\n [text]=\"(PANEL_I18N + '.actions.disconnect' | translate | async) ?? ''\"\n color=\"danger\"\n [disabled]=\"pendingAction()\"\n (onClick)=\"handleDisconnect(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-link-slash\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(PANEL_I18N + '.actions.remove' | translate | async) ?? ''\"\n color=\"danger\"\n [disabled]=\"pendingAction()\"\n (onClick)=\"handleRemove(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n } @else if (supportsConnect(provider)) {\n <ax-button\n size=\"sm\"\n look=\"solid\"\n type=\"button\"\n [disabled]=\"pendingAction() || isConnectDisabled(provider.id)\"\n [text]=\"(PANEL_I18N + '.actions.connect' | translate | async) ?? ''\"\n (onClick)=\"handleConnect(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plug\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-button\n size=\"sm\"\n look=\"outline\"\n color=\"danger\"\n type=\"button\"\n [disabled]=\"pendingAction()\"\n [text]=\"(PANEL_I18N + '.actions.remove' | translate | async) ?? ''\"\n (onClick)=\"handleRemove(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></ax-icon>\n </ax-prefix>\n </ax-button>\n } @else {\n <ax-button\n size=\"sm\"\n look=\"outline\"\n color=\"danger\"\n type=\"button\"\n [disabled]=\"pendingAction()\"\n [text]=\"(PANEL_I18N + '.actions.remove' | translate | async) ?? ''\"\n (onClick)=\"handleRemove(provider, connection)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-trash\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n </div>\n\n <ax-switch\n class=\"shrink-0\"\n [ngModel]=\"isEnabledConnection(connection)\"\n [disabled]=\"pendingAction() || !isEstablishedConnection(connection)\"\n (ngModelChange)=\"handleToggleEnabled(provider, $event, connection)\"\n ></ax-switch>\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- ----- Card footer: single-connection manage/connect, or add connection for multi ----- -->\n <div class=\"mt-auto flex items-center justify-between gap-3 border-t border-surface pt-4\">\n @if (provider.allowMultipleConnections) {\n @if (supportsConnect(provider)) {\n <ax-button\n size=\"sm\"\n look=\"outline\"\n type=\"button\"\n [disabled]=\"pendingAction() || isConnectDisabled(provider.id)\"\n [text]=\"(PANEL_I18N + '.actions.add-connection' | translate | async) ?? ''\"\n (onClick)=\"handleAddConnection(provider)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plus\"></ax-icon>\n </ax-prefix>\n </ax-button>\n } @else {\n <span></span>\n }\n <span></span>\n } @else if (hasEstablishedConnection(provider.id)) {\n <ax-dropdown-button size=\"sm\" [mode]=\"'dropdown'\" type=\"button\" [disabled]=\"pendingAction()\" [text]=\"(PANEL_I18N + '.actions.manage' | translate | async) ?? ''\">\n <ax-button-item-list>\n @if (supportsConfigure(provider)) {\n <ax-button-item [text]=\"(PANEL_I18N + '.actions.reconfigure' | translate | async) ?? ''\" [disabled]=\"pendingAction() || isConnectDisabled(provider.id)\" (onClick)=\"handleConfigure(provider)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-gear\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n @for (action of getManageActions(provider); track action.commandKey) {\n <ax-button-item [text]=\"(action.titleKey | translate | async) ?? ''\" [color]=\"action.color\" [disabled]=\"pendingAction()\" (onClick)=\"handleManageAction(provider, action)\">\n @if (action.icon) {\n <ax-prefix>\n <ax-icon [icon]=\"action.icon\"></ax-icon>\n </ax-prefix>\n }\n </ax-button-item>\n }\n <ax-button-item [text]=\"(PANEL_I18N + '.actions.disconnect' | translate | async) ?? ''\" color=\"danger\" [disabled]=\"pendingAction()\" (onClick)=\"handleDisconnect(provider)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-link-slash\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n <ax-switch [ngModel]=\"isConnectionEnabled(provider.id)\" [disabled]=\"pendingAction() || !hasEstablishedConnection(provider.id)\" (ngModelChange)=\"handleToggleEnabled(provider, $event)\"></ax-switch>\n } @else if (supportsConnect(provider)) {\n <ax-button size=\"sm\" look=\"solid\" type=\"button\" [disabled]=\"pendingAction() || isConnectDisabled(provider.id)\" [text]=\"(PANEL_I18N + '.actions.connect' | translate | async) ?? ''\" (onClick)=\"handleConnect(provider)\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-plug\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-switch [ngModel]=\"isConnectionEnabled(provider.id)\" [disabled]=\"pendingAction() || !hasEstablishedConnection(provider.id)\" (ngModelChange)=\"handleToggleEnabled(provider, $event)\"></ax-switch>\n } @else {\n <span></span>\n <ax-switch [ngModel]=\"isConnectionEnabled(provider.id)\" [disabled]=\"pendingAction() || !hasEstablishedConnection(provider.id)\" (ngModelChange)=\"handleToggleEnabled(provider, $event)\"></ax-switch>\n }\n </div>\n </article>\n }\n </div>\n </section>\n }\n </div>\n }\n </axp-page-content>\n</axp-page-layout>\n", styles: ["@layer properties;axm-integrations-page axp-layout-start-side{min-width:calc(var(--spacing, .25rem) * 80)!important;border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}axm-integrations-page axp-layout-start-side axp-layout-content.axm-integrations-page__sidebar{flex:none;padding-inline:calc(var(--spacing, .25rem) * 4);padding-bottom:calc(var(--spacing, .25rem) * 4)}axm-integrations-page .axm-integrations-page__sidebar-section{margin-top:calc(var(--spacing, .25rem) * 4)}axm-integrations-page .axm-integrations-page__sidebar-section-title{margin:0;padding-bottom:calc(var(--spacing, .25rem) * 2);--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);opacity:85%}axm-integrations-page .axm-integrations-page__sidebar-section:first-child .axm-integrations-page__sidebar-section-title{padding-top:calc(var(--spacing, .25rem) * 4)}axm-integrations-page .axm-integrations-page__sidebar-section-body{display:flex;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3)}axm-integrations-page .axm-integrations-page__overview-list,axm-integrations-page .axm-integrations-page__category-list{margin:0;display:flex;list-style-type:none;flex-direction:column;gap:var(--spacing, .25rem);padding:0}axm-integrations-page .axm-integrations-page__overview-item{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);padding-block:calc(var(--spacing, .25rem) * 1.5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}axm-integrations-page .axm-integrations-page__overview-label{display:inline-flex;min-width:0px;align-items:center;gap:calc(var(--spacing, .25rem) * 2.5)}axm-integrations-page .axm-integrations-page__overview-label ax-icon{font-size:var(--text-base, 1rem);line-height:var(--tw-leading, var(--text-base--line-height, 1.5 ));color:rgba(var(--ax-sys-color-text-default))}@supports (color: color-mix(in lab,red,red)){axm-integrations-page .axm-integrations-page__overview-label ax-icon{color:color-mix(in oklab,rgba(var(--ax-sys-color-text-default)) 80%,transparent)}}axm-integrations-page .axm-integrations-page__overview-count{display:inline-flex;min-width:calc(var(--spacing, .25rem) * 7);flex-shrink:0;align-items:center;justify-content:center;border-radius:var(--radius-md, .375rem);padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * .5);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface))}axm-integrations-page .axm-integrations-page__overview-count.--danger{background-color:var(--color-danger);color:var(--color-on-danger);border-color:var(--color-border-danger)}axm-integrations-page .axm-integrations-page__category-item{padding-block:calc(var(--spacing, .25rem) * 1.5);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)))}axm-integrations-page .axm-integrations-page__category-checkbox{width:100%}axm-integrations-page .axm-integrations-page__skeleton-sidebar-title{height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 28);border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-sidebar-row{height:calc(var(--spacing, .25rem) * 8);width:100%;border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-section-title{height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 40);border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-section-description{height:calc(var(--spacing, .25rem) * 4);width:100%;max-width:var(--container-md, 28rem);border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-card{display:flex;height:100%;width:100%;flex-direction:column;gap:calc(var(--spacing, .25rem) * 3);border-radius:var(--radius-xl, .75rem);border-style:var(--tw-border-style);border-width:1px;background-color:var(--color-lighter);color:var(--color-on-lighter);border-color:var(--color-border-lighter);border-color:rgba(var(--ax-sys-color-surface));padding:calc(var(--spacing, .25rem) * 4)}axm-integrations-page .axm-integrations-page__skeleton-icon{width:calc(var(--spacing, .25rem) * 14);height:calc(var(--spacing, .25rem) * 14);flex-shrink:0;border-radius:var(--radius-xl, .75rem)}axm-integrations-page .axm-integrations-page__skeleton-status-badge{height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 20);flex-shrink:0;border-radius:calc(infinity * 1px)}axm-integrations-page .axm-integrations-page__skeleton-title{height:calc(var(--spacing, .25rem) * 5);width:calc(3 / 5 * 100%);border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-description{height:calc(var(--spacing, .25rem) * 4);width:100%;border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-description.--short{width:80%}axm-integrations-page .axm-integrations-page__skeleton-footer{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:rgba(var(--ax-sys-color-surface));padding-top:calc(var(--spacing, .25rem) * 4)}axm-integrations-page .axm-integrations-page__skeleton-action{height:calc(var(--spacing, .25rem) * 8);width:calc(var(--spacing, .25rem) * 24);border-radius:var(--radius-md, .375rem)}axm-integrations-page .axm-integrations-page__skeleton-switch{height:calc(var(--spacing, .25rem) * 6);width:calc(var(--spacing, .25rem) * 11);border-radius:calc(infinity * 1px)}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i2.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i3.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i3.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "component", type: i4.AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type: i5.AXDropdownButtonComponent, selector: "ax-dropdown-button", inputs: ["disabled", "size", "text", "selected", "color", "look", "type", "mode", "iconOnly"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "lookChange", "colorChange", "disabledChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i6.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i6.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i7.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i8.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "ngmodule", type: AXSwitchModule }, { kind: "component", type: i9.AXSwitchComponent, selector: "ax-switch", inputs: ["disabled", "readonly", "color", "tabIndex", "value", "name", "isLoading"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged", "readonlyChange", "disabledChange"] }, { kind: "ngmodule", type: AXTooltipModule }, { kind: "directive", type: i10.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltipDisabled", "axTooltip", "axTooltipContext", "axTooltipPlacement", "axTooltipOffsetX", "axTooltipOffsetY", "axTooltipOpenAfter", "axTooltipCloseAfter"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPLogoComponent, selector: "axp-logo", inputs: ["logoKey", "appearance", "size", "format"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type: AXPThemeLayoutStartSideComponent, selector: "axp-layout-page-start-side, axp-layout-start-side" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
381
381
  }
382
382
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMIntegrationsPageComponent, decorators: [{
383
383
  type: Component,
@@ -403,4 +403,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
403
403
  }] });
404
404
 
405
405
  export { AXMIntegrationsPageComponent };
406
- //# sourceMappingURL=acorex-platform-module-integration-management-client-integrations-page.component-BIDqAXx3.mjs.map
406
+ //# sourceMappingURL=acorex-platform-module-integration-management-client-integrations-page.component-Bmb24K5W.mjs.map