@acorex-platform/module-workflow-management-client 0.0.21

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 (41) hide show
  1. package/fesm2022/acorex-platform-module-workflow-management-client-acorex-platform-module-workflow-management-client-B_Sl7G2v.mjs +4990 -0
  2. package/fesm2022/acorex-platform-module-workflow-management-client-acorex-platform-module-workflow-management-client-B_Sl7G2v.mjs.map +1 -0
  3. package/fesm2022/acorex-platform-module-workflow-management-client-activity-command-configurator-widget-column.component-BPa0Sh6Z.mjs +57 -0
  4. package/fesm2022/acorex-platform-module-workflow-management-client-activity-command-configurator-widget-column.component-BPa0Sh6Z.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-module-workflow-management-client-activity-command-configurator-widget-edit.component-DuYGXzAL.mjs +482 -0
  6. package/fesm2022/acorex-platform-module-workflow-management-client-activity-command-configurator-widget-edit.component-DuYGXzAL.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-module-workflow-management-client-contracts.mjs +163 -0
  8. package/fesm2022/acorex-platform-module-workflow-management-client-contracts.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-workflow-management-client-execute-workflow-with-input.command-BFdyJ4rC.mjs +127 -0
  10. package/fesm2022/acorex-platform-module-workflow-management-client-execute-workflow-with-input.command-BFdyJ4rC.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-workflow-management-client-execute-workflow.command-Cfdm1QAy.mjs +142 -0
  12. package/fesm2022/acorex-platform-module-workflow-management-client-execute-workflow.command-Cfdm1QAy.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-module-workflow-management-client-index-C8nsbDAw.mjs +142 -0
  14. package/fesm2022/acorex-platform-module-workflow-management-client-index-C8nsbDAw.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-module-workflow-management-client-index-CttfExOC.mjs +417 -0
  16. package/fesm2022/acorex-platform-module-workflow-management-client-index-CttfExOC.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-module-workflow-management-client-index-DKZTLui4.mjs +1329 -0
  18. package/fesm2022/acorex-platform-module-workflow-management-client-index-DKZTLui4.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-module-workflow-management-client-save-workflow-definition-activities.command-spFF77AO.mjs +60 -0
  20. package/fesm2022/acorex-platform-module-workflow-management-client-save-workflow-definition-activities.command-spFF77AO.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-activity-instance-rows.utils-CMVZYS4y.mjs +172 -0
  22. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-activity-instance-rows.utils-CMVZYS4y.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-configurator-widget-column.component-D0E2zjIA.mjs +81 -0
  24. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-configurator-widget-column.component-D0E2zjIA.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-configurator-widget-edit.component-CVTeOv-q.mjs +538 -0
  26. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-configurator-widget-edit.component-CVTeOv-q.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-live-dashboard.queries--9NtYkau.mjs +218 -0
  28. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-live-dashboard.queries--9NtYkau.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-popup.component-BWOyivC5.mjs +588 -0
  30. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-popup.component-BWOyivC5.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-timeline-tab.component-AnJ-Pywf.mjs +33 -0
  32. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-timeline-tab.component-AnJ-Pywf.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-visual-tab.component-Bw68Jwcb.mjs +227 -0
  34. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-run-history-visual-tab.component-Bw68Jwcb.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-task-popover.component-Cg4gODGo.mjs +300 -0
  36. package/fesm2022/acorex-platform-module-workflow-management-client-workflow-task-popover.component-Cg4gODGo.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-module-workflow-management-client.mjs +2 -0
  38. package/fesm2022/acorex-platform-module-workflow-management-client.mjs.map +1 -0
  39. package/package.json +28 -0
  40. package/types/acorex-platform-module-workflow-management-client-contracts.d.ts +341 -0
  41. package/types/acorex-platform-module-workflow-management-client.d.ts +1026 -0
@@ -0,0 +1,588 @@
1
+ import * as i1$1 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { input, inject, signal, effect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
5
+ import { AXButtonModule } from '@acorex/components/button';
6
+ import * as i4 from '@acorex/components/decorators';
7
+ import { AXDecoratorModule } from '@acorex/components/decorators';
8
+ import * as i1 from '@acorex/components/loading';
9
+ import { AXLoadingModule } from '@acorex/components/loading';
10
+ import { AXBasePageComponent } from '@acorex/components/page';
11
+ import * as i3 from '@acorex/components/tabs';
12
+ import { AXTabsModule } from '@acorex/components/tabs';
13
+ import * as i5 from '@acorex/core/format';
14
+ import { AXFormatModule } from '@acorex/core/format';
15
+ import * as i7 from '@acorex/core/translation';
16
+ import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
17
+ import { AXPExpressionEvaluatorService } from '@acorex-platform/framework-client/core';
18
+ import { AXPEntityService, AXPEntityDefinitionRegistryService } from '@acorex-platform/framework-client/layout/entity';
19
+ import { AXPActivityDefinitionService, AXPWorkflowDefinitionService, WorkflowExpressionScopeService } from '@acorex-platform/framework-client/workflow';
20
+ import { toString, get } from 'lodash';
21
+ import { b as buildWorkflowTaskDisplayParamsFromWorkflowState, d as buildWorkflowTaskDisplayParams, r as rehydrateWorkflowStateInputTitles } from './acorex-platform-module-workflow-management-client-acorex-platform-module-workflow-management-client-B_Sl7G2v.mjs';
22
+ import { f as formatReadableActivityName } from './acorex-platform-module-workflow-management-client-workflow-activity-instance-rows.utils-CMVZYS4y.mjs';
23
+
24
+ //#region ---- Imports ----
25
+ //#endregion
26
+ //#region ---- Constants ----
27
+ /** Activity types omitted from end-user history (internal plumbing). */
28
+ const HIDDEN_ACTIVITY_NAMES = new Set(['workflow-activity:get-current-session-user']);
29
+ /** Activity types that show assignee and performer in end-user history. */
30
+ const USER_PARTICIPANT_ACTIVITY_NAMES = new Set([
31
+ 'workflow-activity:human-task',
32
+ 'workflow-activity:cartable',
33
+ 'workflow-activity:sign-off',
34
+ 'workflow-activity:rejection-reason',
35
+ 'workflow-activity:create-entity-form',
36
+ ]);
37
+ const ACTIVITY_STATUS_KEYS = {
38
+ Running: '@workflow-management:workflow-run.history.activity-status.running',
39
+ Completed: '@workflow-management:workflow-run.history.activity-status.completed',
40
+ Pending: '@workflow-management:workflow-run.history.activity-status.pending',
41
+ Executing: '@workflow-management:workflow-run.history.activity-status.executing',
42
+ Suspended: '@workflow-management:workflow-run.history.activity-status.suspended',
43
+ Canceled: '@workflow-management:workflow-run.history.activity-status.canceled',
44
+ Cancelled: '@workflow-management:workflow-run.history.activity-status.canceled',
45
+ Faulted: '@workflow-management:workflow-run.history.activity-status.faulted',
46
+ Failed: '@workflow-management:workflow-run.history.activity-status.failed',
47
+ };
48
+ //#endregion
49
+ //#region ---- Helpers ----
50
+ function normalizeUserIds(value) {
51
+ if (value == null) {
52
+ return [];
53
+ }
54
+ if (Array.isArray(value)) {
55
+ return value.filter((v) => typeof v === 'string' && v.trim().length > 0);
56
+ }
57
+ if (typeof value === 'string' && value.trim().length > 0) {
58
+ return [value.trim()];
59
+ }
60
+ return [];
61
+ }
62
+ function formatPerformedByLabel(label, id, empty) {
63
+ const labelText = label != null && String(label).trim() !== '' ? String(label).trim() : '';
64
+ if (labelText && labelText !== 'System') {
65
+ return labelText;
66
+ }
67
+ const idText = id != null && String(id).trim() !== '' ? String(id).trim() : '';
68
+ if (idText) {
69
+ return idText;
70
+ }
71
+ return empty;
72
+ }
73
+ function isTranslationKey(value) {
74
+ return value.trim().startsWith('@');
75
+ }
76
+ function getGraphHumanTaskContext(graphActivity) {
77
+ const context = graphActivity?.inputs?.['context'];
78
+ if (context != null && typeof context === 'object' && !Array.isArray(context)) {
79
+ return context;
80
+ }
81
+ return undefined;
82
+ }
83
+ function parseBookmarkPayload(bookmark) {
84
+ if (bookmark?.payload && typeof bookmark.payload === 'object') {
85
+ return bookmark.payload;
86
+ }
87
+ const raw = bookmark?.payloadJson?.trim();
88
+ if (!raw) {
89
+ return null;
90
+ }
91
+ try {
92
+ const parsed = JSON.parse(raw);
93
+ return parsed != null && typeof parsed === 'object' && !Array.isArray(parsed)
94
+ ? parsed
95
+ : null;
96
+ }
97
+ catch {
98
+ return null;
99
+ }
100
+ }
101
+ function hasUnresolvedInterpolation(value) {
102
+ return /\{\{[^}]+\}\}/.test(value);
103
+ }
104
+ async function resolveDisplayText(translationService, value, params) {
105
+ const raw = value?.trim();
106
+ if (!raw) {
107
+ return '';
108
+ }
109
+ if (!isTranslationKey(raw)) {
110
+ return raw;
111
+ }
112
+ return translationService.translateAsync(raw, { params });
113
+ }
114
+ function isModuleEntityRef(value) {
115
+ return /^[A-Za-z][\w]*\.[A-Za-z][\w]*$/.test(value.trim());
116
+ }
117
+ async function resolveGraphActivityTitle(translationService, graphActivity, workflowState, taskTranslationDeps, titleResolveContext) {
118
+ const graphTitle = typeof graphActivity?.title === 'string' ? graphActivity.title.trim() : '';
119
+ if (graphTitle) {
120
+ if (isTranslationKey(graphTitle)) {
121
+ const params = await buildWorkflowTaskDisplayParamsFromWorkflowState(workflowState, taskTranslationDeps);
122
+ const resolved = await resolveDisplayText(translationService, graphTitle, params);
123
+ if (resolved && !hasUnresolvedInterpolation(resolved)) {
124
+ return resolved;
125
+ }
126
+ }
127
+ if (isModuleEntityRef(graphTitle) && titleResolveContext?.resolveEntityRefTitle) {
128
+ const entityTitle = await titleResolveContext.resolveEntityRefTitle(graphTitle);
129
+ if (entityTitle.trim()) {
130
+ return entityTitle.trim();
131
+ }
132
+ }
133
+ if (!isModuleEntityRef(graphTitle)) {
134
+ const params = await buildWorkflowTaskDisplayParamsFromWorkflowState(workflowState, taskTranslationDeps);
135
+ const resolved = await resolveDisplayText(translationService, graphTitle, params);
136
+ if (resolved && !hasUnresolvedInterpolation(resolved)) {
137
+ return resolved;
138
+ }
139
+ }
140
+ }
141
+ const inputTitle = typeof graphActivity?.inputs?.['title'] === 'string' ? graphActivity.inputs['title'].trim() : '';
142
+ if (inputTitle) {
143
+ const params = await buildWorkflowTaskDisplayParamsFromWorkflowState(workflowState, taskTranslationDeps);
144
+ const resolved = await resolveDisplayText(translationService, inputTitle, params);
145
+ if (resolved && !hasUnresolvedInterpolation(resolved)) {
146
+ return resolved;
147
+ }
148
+ }
149
+ const activityName = graphActivity?.name?.trim() ?? '';
150
+ if (activityName && titleResolveContext?.resolveActivityDefinitionTitle) {
151
+ const definitionTitle = await titleResolveContext.resolveActivityDefinitionTitle(activityName);
152
+ if (definitionTitle.trim()) {
153
+ return definitionTitle.trim();
154
+ }
155
+ }
156
+ return '';
157
+ }
158
+ async function resolveStepTitle(translationService, graphActivity, nodeId, isHumanTask, payload, workflowState, taskTranslationDeps, titleResolveContext) {
159
+ if (isHumanTask) {
160
+ const payloadContext = payload?.['context'] && typeof payload['context'] === 'object'
161
+ ? payload['context']
162
+ : undefined;
163
+ const graphContext = getGraphHumanTaskContext(graphActivity);
164
+ const graphParams = await buildWorkflowTaskDisplayParams(graphContext, workflowState, taskTranslationDeps);
165
+ const payloadParams = await buildWorkflowTaskDisplayParams(payloadContext, workflowState, taskTranslationDeps);
166
+ const taskParams = { ...graphParams, ...payloadParams };
167
+ const payloadTitle = typeof payload?.['title'] === 'string' ? payload['title'].trim() : '';
168
+ const graphTitle = typeof graphActivity?.inputs?.['title'] === 'string' ? graphActivity.inputs['title'].trim() : '';
169
+ const titleSource = payloadTitle || graphTitle;
170
+ if (titleSource) {
171
+ const resolved = await resolveDisplayText(translationService, titleSource, taskParams);
172
+ if (resolved && !hasUnresolvedInterpolation(resolved)) {
173
+ return resolved;
174
+ }
175
+ }
176
+ if (taskParams['employeeDisplayName']?.trim() && taskParams['leaveTypeTitle']?.trim()) {
177
+ return `${taskParams['employeeDisplayName']} — ${taskParams['leaveTypeTitle']}`;
178
+ }
179
+ }
180
+ const resolvedGraphTitle = await resolveGraphActivityTitle(translationService, graphActivity, workflowState, taskTranslationDeps, titleResolveContext);
181
+ if (resolvedGraphTitle) {
182
+ return resolvedGraphTitle;
183
+ }
184
+ const rawTitle = graphActivity?.name
185
+ ? formatReadableActivityName(graphActivity.name)
186
+ : formatReadableActivityName(nodeId);
187
+ return rawTitle;
188
+ }
189
+ async function resolveActivityStatus(translationService, status) {
190
+ const normalized = (status ?? '').trim();
191
+ if (!normalized) {
192
+ return '';
193
+ }
194
+ const key = ACTIVITY_STATUS_KEYS[normalized] ?? ACTIVITY_STATUS_KEYS[normalized.toLowerCase()];
195
+ if (key) {
196
+ return translationService.translateAsync(key);
197
+ }
198
+ return formatReadableActivityName(normalized);
199
+ }
200
+ async function resolveUserDisplayName(userEntityData, userId, cache) {
201
+ const id = userId.trim();
202
+ if (!id) {
203
+ return '';
204
+ }
205
+ const cached = cache.get(id);
206
+ if (cached) {
207
+ return cached;
208
+ }
209
+ let display = id;
210
+ try {
211
+ const row = await userEntityData.byKey(id);
212
+ if (row && typeof row === 'object') {
213
+ const displayName = 'displayName' in row ? String(row.displayName ?? '').trim() : '';
214
+ const username = 'username' in row ? String(row.username ?? '').trim() : '';
215
+ display = displayName || username || id;
216
+ }
217
+ }
218
+ catch {
219
+ display = id;
220
+ }
221
+ cache.set(id, display);
222
+ return display;
223
+ }
224
+ async function resolveAssigneeDisplay(payload, userEntityData, userCache, emptyLabel) {
225
+ if (!payload) {
226
+ return emptyLabel;
227
+ }
228
+ const assigned = normalizeUserIds(payload['assignedUserIds']);
229
+ if (assigned.length > 0) {
230
+ const names = await Promise.all(assigned.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));
231
+ return names.filter((name) => name.length > 0).join(', ') || emptyLabel;
232
+ }
233
+ const candidates = normalizeUserIds(payload['candidateUserIds']);
234
+ if (candidates.length > 0) {
235
+ const names = await Promise.all(candidates.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));
236
+ return names.filter((name) => name.length > 0).join(', ') || emptyLabel;
237
+ }
238
+ return emptyLabel;
239
+ }
240
+ /**
241
+ * Resolves who was assigned to a step (original assignee when take-over occurred).
242
+ */
243
+ async function resolveStepAssignee(nodeId, props, payload, userEntityData, userCache, emptyLabel) {
244
+ const reassign = props[`${nodeId}_reassignedToSelf`];
245
+ if (reassign && typeof reassign === 'object' && !Array.isArray(reassign)) {
246
+ const fromIds = normalizeUserIds(reassign.fromUserIds);
247
+ if (fromIds.length > 0) {
248
+ const names = await Promise.all(fromIds.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));
249
+ const joined = names.filter((name) => name.length > 0).join(', ');
250
+ if (joined) {
251
+ return joined;
252
+ }
253
+ }
254
+ }
255
+ const assignedAudit = normalizeUserIds(props[`${nodeId}_assignedUserIds`]);
256
+ if (assignedAudit.length > 0) {
257
+ const names = await Promise.all(assignedAudit.map((id) => resolveUserDisplayName(userEntityData, id, userCache)));
258
+ const joined = names.filter((name) => name.length > 0).join(', ');
259
+ if (joined) {
260
+ return joined;
261
+ }
262
+ }
263
+ const fromBookmark = await resolveAssigneeDisplay(payload, userEntityData, userCache, '');
264
+ if (fromBookmark) {
265
+ return fromBookmark;
266
+ }
267
+ return emptyLabel;
268
+ }
269
+ function resolveReporterDisplay(instance) {
270
+ const audit = instance.auditInfo?.created?.by;
271
+ if (audit?.fullName?.trim()) {
272
+ return audit.fullName.trim();
273
+ }
274
+ if (instance.assignUserRef?.displayName?.trim()) {
275
+ return instance.assignUserRef.displayName.trim();
276
+ }
277
+ return '';
278
+ }
279
+ function shouldIncludeActivity(graphActivity) {
280
+ const name = graphActivity?.name?.trim();
281
+ if (name && HIDDEN_ACTIVITY_NAMES.has(name)) {
282
+ return false;
283
+ }
284
+ return true;
285
+ }
286
+ //#endregion
287
+ //#region ---- Builder ----
288
+ /**
289
+ * Builds end-user workflow history rows (no technical audit fields, resolved titles and user names).
290
+ */
291
+ function resolveInstanceStatusTranslationKey(status, subStatus) {
292
+ const normalizedStatus = status.trim().toLowerCase();
293
+ const normalizedSubStatus = subStatus.trim().toLowerCase();
294
+ const combined = `${normalizedStatus}-${normalizedSubStatus}`;
295
+ const combinedMap = {
296
+ 'running-executing': 'in-progress',
297
+ 'running-suspended': 'pending-user-action',
298
+ 'running-pending': 'waiting',
299
+ 'running-idle': 'waiting',
300
+ 'finished-finished': 'completed',
301
+ 'finished-faulted': 'failed',
302
+ 'finished-cancelled': 'cancelled',
303
+ 'finished-canceled': 'cancelled',
304
+ };
305
+ if (combinedMap[combined]) {
306
+ return combinedMap[combined];
307
+ }
308
+ if (normalizedStatus === 'running') {
309
+ return 'in-progress';
310
+ }
311
+ if (normalizedStatus === 'finished') {
312
+ return 'completed';
313
+ }
314
+ return 'unknown';
315
+ }
316
+ async function resolveWorkflowInstanceStatusDisplay(translationService, instance) {
317
+ if (!instance) {
318
+ return '';
319
+ }
320
+ const statusKey = resolveInstanceStatusTranslationKey(String(instance.status ?? ''), String(instance.subStatus ?? ''));
321
+ const translated = await translationService.translateAsync(`@workflow-management:workflow-run.history.instance-status.${statusKey}`);
322
+ if (translated.trim()) {
323
+ return translated.trim();
324
+ }
325
+ return instance.statusDisplay?.trim() ?? '';
326
+ }
327
+ async function resolveWorkflowTitle(translationService, definition, instance) {
328
+ if (definition?.title != null) {
329
+ const resolved = translationService.resolve(definition.title);
330
+ if (resolved?.trim()) {
331
+ return resolved.trim();
332
+ }
333
+ }
334
+ return (instance?.workflowTitle?.trim() ||
335
+ instance?.name?.trim() ||
336
+ instance?.definitionId?.trim() ||
337
+ '');
338
+ }
339
+ async function buildWorkflowHistoryPopupTitleAsync(translationService, definition, instance) {
340
+ const workflowTitle = await resolveWorkflowTitle(translationService, definition, instance);
341
+ const statusDisplay = await resolveWorkflowInstanceStatusDisplay(translationService, instance);
342
+ if (workflowTitle && statusDisplay) {
343
+ return translationService.translateAsync('@workflow-management:workflow-run.history.popup-title', {
344
+ params: { workflowTitle, statusDisplay },
345
+ });
346
+ }
347
+ return workflowTitle || statusDisplay;
348
+ }
349
+ async function buildWorkflowHistoryRows(instance, definition, translationService, userEntityData, emptyLabel, taskTranslationDeps, titleResolveContext) {
350
+ const wi = instance?.workflowInstance;
351
+ if (!wi?.workflowState) {
352
+ return [];
353
+ }
354
+ const props = (wi.workflowState.properties ?? {});
355
+ const contexts = wi.workflowState.activityExecutionContexts ?? [];
356
+ const activities = definition?.graph?.activities ?? [];
357
+ const findActivity = (nodeId) => activities.find((a) => a.id === nodeId);
358
+ const workflowState = wi.workflowState;
359
+ const extended = wi;
360
+ const bookmarks = extended.bookmarks ?? [];
361
+ const userCache = new Map();
362
+ const rows = [];
363
+ for (const ctx of contexts) {
364
+ const nodeId = ctx.scheduledActivityNodeId;
365
+ const graphActivity = findActivity(nodeId);
366
+ if (!shouldIncludeActivity(graphActivity)) {
367
+ continue;
368
+ }
369
+ const activityName = graphActivity?.name?.trim() ?? '';
370
+ const isHumanTask = activityName === 'workflow-activity:human-task' || activityName === 'workflow-activity:cartable';
371
+ const showsParticipants = USER_PARTICIPANT_ACTIVITY_NAMES.has(activityName);
372
+ const bookmark = bookmarks.find((b) => b.activityId === nodeId);
373
+ const payload = parseBookmarkPayload(bookmark);
374
+ const stepTitle = await resolveStepTitle(translationService, graphActivity, nodeId, isHumanTask, payload, workflowState, taskTranslationDeps, titleResolveContext);
375
+ const labelKey = `${nodeId}_completedByLabel`;
376
+ const idKey = `${nodeId}_completedByUserId`;
377
+ let performedBy = '';
378
+ const performedByLabel = formatPerformedByLabel(props[labelKey], props[idKey], '');
379
+ if (performedByLabel && performedByLabel !== 'System') {
380
+ performedBy = performedByLabel;
381
+ }
382
+ else if (props[idKey] != null && String(props[idKey]).trim() !== '') {
383
+ performedBy = await resolveUserDisplayName(userEntityData, String(props[idKey]), userCache);
384
+ }
385
+ else if (performedByLabel === 'System') {
386
+ performedBy = await translationService.translateAsync('@workflow-management:workflow-run.history.system-performer');
387
+ }
388
+ else if (showsParticipants) {
389
+ const fallbackUserId = toString(get(props, 'managerUserId')).trim() || toString(get(props, 'initiatorUserId')).trim();
390
+ if (fallbackUserId) {
391
+ performedBy = await resolveUserDisplayName(userEntityData, fallbackUserId, userCache);
392
+ }
393
+ }
394
+ let assignee = showsParticipants
395
+ ? await resolveStepAssignee(nodeId, props, payload, userEntityData, userCache, emptyLabel)
396
+ : '';
397
+ if (showsParticipants && (!assignee || assignee === emptyLabel) && performedBy) {
398
+ assignee = performedBy;
399
+ }
400
+ if (showsParticipants && !performedBy) {
401
+ performedBy = emptyLabel;
402
+ }
403
+ if (showsParticipants && !assignee) {
404
+ assignee = emptyLabel;
405
+ }
406
+ const status = String(ctx.status ?? '');
407
+ const statusDisplay = await resolveActivityStatus(translationService, status);
408
+ rows.push({
409
+ contextId: ctx.id,
410
+ nodeId,
411
+ stepTitle,
412
+ status,
413
+ statusDisplay,
414
+ performedBy,
415
+ assignee,
416
+ startedAt: ctx.startedAt ?? '',
417
+ completedAt: ctx.completedAt ?? null,
418
+ isHumanTask,
419
+ showsParticipants,
420
+ });
421
+ }
422
+ rows.sort((a, b) => {
423
+ const ta = new Date(a.startedAt).getTime();
424
+ const tb = new Date(b.startedAt).getTime();
425
+ if (ta !== tb) {
426
+ return ta - tb;
427
+ }
428
+ return a.contextId.localeCompare(b.contextId);
429
+ });
430
+ return rows;
431
+ }
432
+ /** Popup header: workflow title and human-readable status (e.g. "Create Leave Request - Completed"). */
433
+ function buildWorkflowHistoryPopupTitle(workflowTitle, statusDisplay) {
434
+ const title = workflowTitle.trim();
435
+ const status = statusDisplay.trim();
436
+ if (title && status) {
437
+ return `${title} - ${status}`;
438
+ }
439
+ return title || status;
440
+ }
441
+ /** Summary metadata shown above the timeline (reporter and workflow start time). */
442
+ function buildWorkflowHistorySummary(instance) {
443
+ if (!instance) {
444
+ return { reporter: '', startedAt: null };
445
+ }
446
+ return {
447
+ reporter: resolveReporterDisplay(instance),
448
+ startedAt: instance.createdAt?.trim() || null,
449
+ };
450
+ }
451
+ //#endregion
452
+
453
+ //#region ---- Imports ----
454
+ //#endregion
455
+ //#region ---- Component ----
456
+ /**
457
+ * Popup: workflow run history with Timeline and Visual diagram tabs.
458
+ */
459
+ class AXMWorkflowRunHistoryPopupComponent extends AXBasePageComponent {
460
+ //#endregion
461
+ //#region ---- Lifecycle ----
462
+ constructor() {
463
+ super();
464
+ /** Injected by {@link AXPopupService} when opened as a popup. */
465
+ this.__popup__ = input(undefined, /* @ts-ignore */
466
+ ...(ngDevMode ? [{ debugName: "__popup__" }] : /* istanbul ignore next */ []));
467
+ //#endregion
468
+ //#region ---- Services & Dependencies ----
469
+ this.entityService = inject(AXPEntityService);
470
+ this.entityDefinitionRegistry = inject(AXPEntityDefinitionRegistryService);
471
+ this.activityDefinitionService = inject(AXPActivityDefinitionService);
472
+ this.workflowDefinitionService = inject(AXPWorkflowDefinitionService);
473
+ this.translationService = inject(AXTranslationService);
474
+ this.expressionScopeService = inject(WorkflowExpressionScopeService);
475
+ this.expressionEvaluator = inject(AXPExpressionEvaluatorService);
476
+ this.userEntityData = this.entityService.withEntity('SecurityManagement', 'User').data();
477
+ //#endregion
478
+ //#region ---- State ----
479
+ this.activeTabIndex = signal(0, /* @ts-ignore */
480
+ ...(ngDevMode ? [{ debugName: "activeTabIndex" }] : /* istanbul ignore next */ []));
481
+ this.isBusy = signal(true, /* @ts-ignore */
482
+ ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
483
+ this.summary = signal({ reporter: '', startedAt: null }, /* @ts-ignore */
484
+ ...(ngDevMode ? [{ debugName: "summary" }] : /* istanbul ignore next */ []));
485
+ this.definition = signal(null, /* @ts-ignore */
486
+ ...(ngDevMode ? [{ debugName: "definition" }] : /* istanbul ignore next */ []));
487
+ this.rows = signal([], /* @ts-ignore */
488
+ ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
489
+ this.popupTitle = signal('', /* @ts-ignore */
490
+ ...(ngDevMode ? [{ debugName: "popupTitle" }] : /* istanbul ignore next */ []));
491
+ effect(() => {
492
+ const title = this.popupTitle().trim();
493
+ const popupRef = this.__popup__();
494
+ if (title && popupRef) {
495
+ popupRef.setTitle(title);
496
+ }
497
+ });
498
+ }
499
+ async ngOnInit() {
500
+ super.ngOnInit();
501
+ await this.loadHistory();
502
+ }
503
+ //#endregion
504
+ //#region ---- Tab handlers ----
505
+ handleTabChange(event) {
506
+ this.activeTabIndex.set(event.index);
507
+ }
508
+ //#endregion
509
+ //#region ---- Data loading ----
510
+ async loadHistory() {
511
+ const trimmed = this.instanceId?.trim();
512
+ if (!trimmed) {
513
+ this.isBusy.set(false);
514
+ return;
515
+ }
516
+ this.isBusy.set(true);
517
+ try {
518
+ const emptyLabel = '—';
519
+ const loaded = await this.entityService
520
+ .withEntity('WorkflowManagement', 'WorkflowInstance')
521
+ .data()
522
+ .byKey(trimmed);
523
+ const defId = loaded?.definitionId?.trim();
524
+ let definition = null;
525
+ if (defId) {
526
+ definition = (await this.workflowDefinitionService.getWorkflowByName(defId)) ?? null;
527
+ }
528
+ this.definition.set(definition);
529
+ this.popupTitle.set(await buildWorkflowHistoryPopupTitleAsync(this.translationService, definition, loaded ?? null));
530
+ this.summary.set(buildWorkflowHistorySummary(loaded ?? null));
531
+ const titleResolveContext = {
532
+ resolveActivityDefinitionTitle: async (activityName) => {
533
+ const activityDef = await this.activityDefinitionService.getActivityByName(activityName);
534
+ return activityDef?.title ? (this.translationService.resolve(activityDef.title) ?? '') : '';
535
+ },
536
+ resolveEntityRefTitle: async (moduleEntityRef) => {
537
+ const [module, entity] = moduleEntityRef.split('.');
538
+ if (!module?.trim() || !entity?.trim()) {
539
+ return '';
540
+ }
541
+ try {
542
+ const entityDef = await this.entityDefinitionRegistry.resolve(module.trim(), entity.trim());
543
+ return entityDef?.title ? (this.translationService.resolve(entityDef.title) ?? '') : '';
544
+ }
545
+ catch {
546
+ return '';
547
+ }
548
+ },
549
+ };
550
+ const historyRows = await buildWorkflowHistoryRows(loaded ?? null, definition, this.translationService, this.userEntityData, emptyLabel, {
551
+ expressionScopeService: this.expressionScopeService,
552
+ expressionEvaluator: this.expressionEvaluator,
553
+ translationService: this.translationService,
554
+ resolveWorkflowStateForTasks: (workflowState) => rehydrateWorkflowStateInputTitles(workflowState, this.translationService, async (entity, id) => {
555
+ const row = await this.entityService.withEntity(entity).data().byKey(id);
556
+ return row && typeof row === 'object' ? row : null;
557
+ }),
558
+ }, titleResolveContext);
559
+ this.rows.set(historyRows);
560
+ }
561
+ finally {
562
+ this.isBusy.set(false);
563
+ }
564
+ }
565
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMWorkflowRunHistoryPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
566
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMWorkflowRunHistoryPopupComponent, isStandalone: true, selector: "axm-workflow-run-history-popup", inputs: { __popup__: { classPropertyName: "__popup__", publicName: "__popup__", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<ax-content>\n <div class=\"axm-workflow-run-history-popup\">\n <div class=\"axm-workflow-run-history-popup__sticky\">\n <div class=\"axm-workflow-run-history-popup__sticky-bar\">\n @if (summary().reporter || summary().startedAt) {\n <div class=\"axm-workflow-run-history-popup__overview\" role=\"list\">\n @if (summary().reporter) {\n <div class=\"axm-workflow-run-history-popup__overview-item\" role=\"listitem\">\n <span class=\"axm-workflow-run-history-popup__overview-k\">\n {{ '@workflow-management:workflow-run.history.field.reporter' | translate | async }}\n </span>\n <span class=\"axm-workflow-run-history-popup__overview-v\" [textContent]=\"summary().reporter\"></span>\n </div>\n }\n @if (summary().startedAt) {\n <div class=\"axm-workflow-run-history-popup__overview-item\" role=\"listitem\">\n <span class=\"axm-workflow-run-history-popup__overview-k\">\n {{ '@workflow-management:workflow-run.history.field.started-at' | translate | async }}\n </span>\n <span class=\"axm-workflow-run-history-popup__overview-v\">\n {{ summary().startedAt | format: 'datetime' : 'short' | async }}\n </span>\n </div>\n }\n </div>\n }\n\n <ax-tabs\n class=\"axm-workflow-run-history-popup__tabs\"\n [look]=\"'with-line'\"\n (onActiveTabChanged)=\"handleTabChange($event)\"\n >\n <ax-tab-item\n [key]=\"'timeline'\"\n [text]=\"('@workflow-management:workflow-run.history.tabs.timeline.title' | translate | async)!\"\n [active]=\"activeTabIndex() === 0\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-list-timeline\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n <ax-tab-item\n [key]=\"'visual'\"\n [text]=\"('@workflow-management:workflow-run.history.tabs.visual.title' | translate | async)!\"\n [active]=\"activeTabIndex() === 1\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-diagram-project\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n </ax-tabs>\n </div>\n </div>\n\n <div class=\"axm-workflow-run-history-popup__panel\">\n @if (activeTabIndex() === 0) {\n @defer (on viewport) {\n <axm-workflow-run-history-timeline-tab [rows]=\"rows()\" [isBusy]=\"isBusy()\" />\n } @placeholder {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n } @loading {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n }\n\n @if (activeTabIndex() === 1) {\n @defer (on viewport) {\n <axm-workflow-run-history-visual-tab\n [definition]=\"definition()\"\n [rows]=\"rows()\"\n [isBusy]=\"isBusy()\"\n />\n } @placeholder {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n } @loading {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n }\n </div>\n </div>\n</ax-content>\n", styles: ["@layer properties;.axm-workflow-run-history-popup{box-sizing:border-box;display:flex;height:100%;min-height:30vh;flex-direction:column;max-height:min(70vh,40rem)}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__sticky{position:sticky;top:0;z-index:2;flex-shrink:0;padding-inline:calc(var(--spacing, .25rem) * 6);background:rgb(var(--ax-sys-color-surface));border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__sticky-bar{display:flex;min-height:calc(var(--spacing, .25rem) * 12);flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:.5rem 1.5rem}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__overview{display:flex;min-width:0px;flex-wrap:wrap;align-items:center;padding-block:calc(var(--spacing, .25rem) * 3);gap:.5rem 1.25rem}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__overview-item{display:flex;min-width:0px;align-items:baseline;gap:.375rem}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__overview-k{flex-shrink:0;font-size:.6875rem;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);text-transform:uppercase;line-height:1.2;letter-spacing:.04em;color:rgb(var(--ax-sys-color-on-light-surface))}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__overview-v{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);line-height:1.35;color:rgb(var(--ax-sys-color-on-surface))}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__tabs{min-width:0px;flex:auto;min-width:min(100%,12rem);margin-inline-start:auto}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__panel{min-height:0px;flex:auto;overflow-y:auto;padding-inline:calc(var(--spacing, .25rem) * 6);padding-top:calc(var(--spacing, .25rem) * 4);padding-bottom:calc(var(--spacing, .25rem) * 6)}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__defer-placeholder{display:flex;min-height:calc(var(--spacing, .25rem) * 32);align-items:center;justify-content:center}@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-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.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: AXLoadingModule }, { kind: "component", type: i1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i3.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i3.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXFormatModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXFormatPipe, name: "format" }, { kind: "pipe", type: i7.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [/* @ts-ignore */
567
+ import('./acorex-platform-module-workflow-management-client-workflow-run-history-timeline-tab.component-AnJ-Pywf.mjs').then(m => m.AXMWorkflowRunHistoryTimelineTabComponent)], () => [/* @ts-ignore */
568
+ import('./acorex-platform-module-workflow-management-client-workflow-run-history-visual-tab.component-Bw68Jwcb.mjs').then(m => m.AXMWorkflowRunHistoryVisualTabComponent)]] }); }
569
+ }
570
+ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0.8", ngImport: i0, type: AXMWorkflowRunHistoryPopupComponent, resolveDeferredDeps: () => [/* @ts-ignore */
571
+ import('./acorex-platform-module-workflow-management-client-workflow-run-history-timeline-tab.component-AnJ-Pywf.mjs').then(m => m.AXMWorkflowRunHistoryTimelineTabComponent), /* @ts-ignore */
572
+ import('./acorex-platform-module-workflow-management-client-workflow-run-history-visual-tab.component-Bw68Jwcb.mjs').then(m => m.AXMWorkflowRunHistoryVisualTabComponent)], resolveMetadata: (AXMWorkflowRunHistoryTimelineTabComponent, AXMWorkflowRunHistoryVisualTabComponent) => ({ decorators: [{
573
+ type: Component,
574
+ args: [{ selector: 'axm-workflow-run-history-popup', imports: [
575
+ CommonModule,
576
+ AXButtonModule,
577
+ AXDecoratorModule,
578
+ AXLoadingModule,
579
+ AXTabsModule,
580
+ AXFormatModule,
581
+ AXTranslationModule,
582
+ AXMWorkflowRunHistoryTimelineTabComponent,
583
+ AXMWorkflowRunHistoryVisualTabComponent,
584
+ ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ax-content>\n <div class=\"axm-workflow-run-history-popup\">\n <div class=\"axm-workflow-run-history-popup__sticky\">\n <div class=\"axm-workflow-run-history-popup__sticky-bar\">\n @if (summary().reporter || summary().startedAt) {\n <div class=\"axm-workflow-run-history-popup__overview\" role=\"list\">\n @if (summary().reporter) {\n <div class=\"axm-workflow-run-history-popup__overview-item\" role=\"listitem\">\n <span class=\"axm-workflow-run-history-popup__overview-k\">\n {{ '@workflow-management:workflow-run.history.field.reporter' | translate | async }}\n </span>\n <span class=\"axm-workflow-run-history-popup__overview-v\" [textContent]=\"summary().reporter\"></span>\n </div>\n }\n @if (summary().startedAt) {\n <div class=\"axm-workflow-run-history-popup__overview-item\" role=\"listitem\">\n <span class=\"axm-workflow-run-history-popup__overview-k\">\n {{ '@workflow-management:workflow-run.history.field.started-at' | translate | async }}\n </span>\n <span class=\"axm-workflow-run-history-popup__overview-v\">\n {{ summary().startedAt | format: 'datetime' : 'short' | async }}\n </span>\n </div>\n }\n </div>\n }\n\n <ax-tabs\n class=\"axm-workflow-run-history-popup__tabs\"\n [look]=\"'with-line'\"\n (onActiveTabChanged)=\"handleTabChange($event)\"\n >\n <ax-tab-item\n [key]=\"'timeline'\"\n [text]=\"('@workflow-management:workflow-run.history.tabs.timeline.title' | translate | async)!\"\n [active]=\"activeTabIndex() === 0\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-list-timeline\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n <ax-tab-item\n [key]=\"'visual'\"\n [text]=\"('@workflow-management:workflow-run.history.tabs.visual.title' | translate | async)!\"\n [active]=\"activeTabIndex() === 1\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-diagram-project\"></ax-icon>\n </ax-prefix>\n </ax-tab-item>\n </ax-tabs>\n </div>\n </div>\n\n <div class=\"axm-workflow-run-history-popup__panel\">\n @if (activeTabIndex() === 0) {\n @defer (on viewport) {\n <axm-workflow-run-history-timeline-tab [rows]=\"rows()\" [isBusy]=\"isBusy()\" />\n } @placeholder {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n } @loading {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n }\n\n @if (activeTabIndex() === 1) {\n @defer (on viewport) {\n <axm-workflow-run-history-visual-tab\n [definition]=\"definition()\"\n [rows]=\"rows()\"\n [isBusy]=\"isBusy()\"\n />\n } @placeholder {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n } @loading {\n <div class=\"axm-workflow-run-history-popup__defer-placeholder\" aria-busy=\"true\">\n <ax-loading></ax-loading>\n </div>\n }\n }\n </div>\n </div>\n</ax-content>\n", styles: ["@layer properties;.axm-workflow-run-history-popup{box-sizing:border-box;display:flex;height:100%;min-height:30vh;flex-direction:column;max-height:min(70vh,40rem)}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__sticky{position:sticky;top:0;z-index:2;flex-shrink:0;padding-inline:calc(var(--spacing, .25rem) * 6);background:rgb(var(--ax-sys-color-surface));border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__sticky-bar{display:flex;min-height:calc(var(--spacing, .25rem) * 12);flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:.5rem 1.5rem}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__overview{display:flex;min-width:0px;flex-wrap:wrap;align-items:center;padding-block:calc(var(--spacing, .25rem) * 3);gap:.5rem 1.25rem}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__overview-item{display:flex;min-width:0px;align-items:baseline;gap:.375rem}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__overview-k{flex-shrink:0;font-size:.6875rem;--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);text-transform:uppercase;line-height:1.2;letter-spacing:.04em;color:rgb(var(--ax-sys-color-on-light-surface))}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__overview-v{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500);line-height:1.35;color:rgb(var(--ax-sys-color-on-surface))}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__tabs{min-width:0px;flex:auto;min-width:min(100%,12rem);margin-inline-start:auto}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__panel{min-height:0px;flex:auto;overflow-y:auto;padding-inline:calc(var(--spacing, .25rem) * 6);padding-top:calc(var(--spacing, .25rem) * 4);padding-bottom:calc(var(--spacing, .25rem) * 6)}.axm-workflow-run-history-popup .axm-workflow-run-history-popup__defer-placeholder{display:flex;min-height:calc(var(--spacing, .25rem) * 32);align-items:center;justify-content:center}@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-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
585
+ }], ctorParameters: () => [], propDecorators: { __popup__: [{ type: i0.Input, args: [{ isSignal: true, alias: "__popup__", required: false }] }] } }) });
586
+
587
+ export { AXMWorkflowRunHistoryPopupComponent };
588
+ //# sourceMappingURL=acorex-platform-module-workflow-management-client-workflow-run-history-popup.component-BWOyivC5.mjs.map