@acorex-platform/framework-client 0.0.37 → 0.0.46

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 (104) hide show
  1. package/fesm2022/acorex-platform-framework-client-auth.mjs +212 -44
  2. package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs → acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs} +31 -1
  4. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-framework-client-common.mjs +848 -76
  6. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-framework-client-core.mjs +273 -96
  8. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +292 -11
  10. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
  11. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-Bp2cNCPO.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs} +10 -6
  12. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-framework-client-layout-components-property-viewer-inline-code-editor.component-CcpUTEVQ.mjs +66 -0
  14. package/fesm2022/acorex-platform-framework-client-layout-components-property-viewer-inline-code-editor.component-CcpUTEVQ.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-framework-client-layout-components-resource-appointment-board.component-DCkpgsFH.mjs +195 -0
  16. package/fesm2022/acorex-platform-framework-client-layout-components-resource-appointment-board.component-DCkpgsFH.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +3987 -1020
  18. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +1179 -304
  20. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  21. package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-C74cBc-K.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Dc_NpBx6.mjs} +1697 -323
  22. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Dc_NpBx6.mjs.map +1 -0
  23. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-B6nG9dIS.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-Cx-n7ZuA.mjs} +2 -2
  24. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-B6nG9dIS.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-Cx-n7ZuA.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-DLQA_Q2Y.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-BONV249y.mjs} +2 -2
  26. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-DLQA_Q2Y.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-BONV249y.mjs.map} +1 -1
  27. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-B4wC1iqZ.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-uTG2nFly.mjs} +2 -2
  28. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-B4wC1iqZ.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-uTG2nFly.mjs.map} +1 -1
  29. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
  30. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +3 -3
  31. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +3854 -3278
  33. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CDpzvn6z.mjs +33191 -0
  35. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CDpzvn6z.mjs.map +1 -0
  36. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BDOdcoyN.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BkrPu1wO.mjs} +8 -5
  37. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BkrPu1wO.mjs.map +1 -0
  38. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-value.util-Cb7R1qLO.mjs +45 -0
  39. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-value.util-Cb7R1qLO.mjs.map +1 -0
  40. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs +68 -0
  41. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs.map +1 -0
  42. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-edit.component-CVsPKhNl.mjs +88 -0
  43. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-edit.component-CVsPKhNl.mjs.map +1 -0
  44. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-view.component-BEq4O4al.mjs +71 -0
  45. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-view.component-BEq4O4al.mjs.map +1 -0
  46. package/fesm2022/acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-WpiEHusZ.mjs +81 -0
  47. package/fesm2022/acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-WpiEHusZ.mjs.map +1 -0
  48. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-Cadl6guA.mjs} +41 -23
  49. package/fesm2022/acorex-platform-framework-client-layout-widgets-page-widget-designer.component-Cadl6guA.mjs.map +1 -0
  50. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Cw3NhWL8.mjs} +3 -3
  51. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Cw3NhWL8.mjs.map} +1 -1
  52. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-column.component-Clb27Loe.mjs +71 -0
  53. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-column.component-Clb27Loe.mjs.map +1 -0
  54. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-edit.component-l7q8A-D3.mjs +111 -0
  55. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-edit.component-l7q8A-D3.mjs.map +1 -0
  56. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-view.component-Cc1AH09b.mjs +77 -0
  57. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-view.component-Cc1AH09b.mjs.map +1 -0
  58. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-BCLxS3rS.mjs} +3 -3
  59. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-BCLxS3rS.mjs.map} +1 -1
  60. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BEa-vD6O.mjs} +21 -8
  61. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BEa-vD6O.mjs.map +1 -0
  62. package/fesm2022/acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs +124 -0
  63. package/fesm2022/acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs.map +1 -0
  64. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs +345 -0
  65. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs.map +1 -0
  66. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -31985
  67. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
  68. package/fesm2022/acorex-platform-framework-client-realtime.mjs +2 -1
  69. package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
  70. package/fesm2022/acorex-platform-framework-client-runtime.mjs +47 -3
  71. package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
  72. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-DBUwSzvg.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-CHLsBvBE.mjs} +2 -2
  73. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-DBUwSzvg.mjs.map → acorex-platform-framework-client-themes-default-entity-master-single-view.component-CHLsBvBE.mjs.map} +1 -1
  74. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +373 -70
  75. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  76. package/fesm2022/{acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs → acorex-platform-framework-client-themes-shared-settings.provider-DIkjSTU7.mjs} +102 -1
  77. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-DIkjSTU7.mjs.map +1 -0
  78. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +174 -22
  79. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  80. package/package.json +2 -2
  81. package/realtime/README.md +1 -1
  82. package/types/acorex-platform-framework-client-auth.d.ts +18 -1
  83. package/types/acorex-platform-framework-client-common.d.ts +209 -8
  84. package/types/acorex-platform-framework-client-core.d.ts +166 -121
  85. package/types/acorex-platform-framework-client-layout-builder.d.ts +29 -0
  86. package/types/acorex-platform-framework-client-layout-components.d.ts +699 -146
  87. package/types/acorex-platform-framework-client-layout-designer.d.ts +192 -14
  88. package/types/acorex-platform-framework-client-layout-entity.d.ts +159 -91
  89. package/types/acorex-platform-framework-client-layout-views.d.ts +16 -0
  90. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +140 -37
  91. package/types/acorex-platform-framework-client-layout-widgets.d.ts +235 -117
  92. package/types/acorex-platform-framework-client-realtime.d.ts +16 -3
  93. package/types/acorex-platform-framework-client-runtime.d.ts +8 -0
  94. package/types/acorex-platform-framework-client-themes-default.d.ts +62 -11
  95. package/types/acorex-platform-framework-client-themes-shared.d.ts +25 -2
  96. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-Bp2cNCPO.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs +0 -77
  99. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-C74cBc-K.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BDOdcoyN.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs.map +0 -1
@@ -0,0 +1,345 @@
1
+ import * as i1 from '@acorex/components/button';
2
+ import { AXButtonModule } from '@acorex/components/button';
3
+ import * as i2 from '@acorex/components/decorators';
4
+ import { AXDecoratorModule } from '@acorex/components/decorators';
5
+ import { AXPopupService } from '@acorex/components/popup';
6
+ import * as i3 from '@acorex/core/translation';
7
+ import { AXTranslationModule } from '@acorex/core/translation';
8
+ import { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';
9
+ import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
10
+ import * as i1$1 from '@angular/common';
11
+ import { CommonModule } from '@angular/common';
12
+ import * as i0 from '@angular/core';
13
+ import { inject, computed, signal, ChangeDetectionStrategy, Component } from '@angular/core';
14
+
15
+ class AXPTriggersWidgetEditComponent extends AXPValueWidgetComponent {
16
+ constructor() {
17
+ super(...arguments);
18
+ //#region ---- Services & Dependencies ----
19
+ this.popupService = inject(AXPopupService);
20
+ //#endregion
21
+ //#region ---- Computed Properties ----
22
+ this.disabled = computed(() => this.options()['disabled'], /* @ts-ignore */
23
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
24
+ this.triggers = computed(() => {
25
+ const value = this.getValue();
26
+ return Array.isArray(value) ? value : [];
27
+ }, /* @ts-ignore */
28
+ ...(ngDevMode ? [{ debugName: "triggers" }] : /* istanbul ignore next */ []));
29
+ this.hasTriggers = computed(() => {
30
+ return this.triggers().length > 0;
31
+ }, /* @ts-ignore */
32
+ ...(ngDevMode ? [{ debugName: "hasTriggers" }] : /* istanbul ignore next */ []));
33
+ }
34
+ //#endregion
35
+ //#region ---- Public Methods ----
36
+ getEventPreview(event) {
37
+ const preview = event.length > 50 ? event.substring(0, 50) + '...' : event;
38
+ return preview;
39
+ }
40
+ getActionPreview(action) {
41
+ const actionStr = Array.isArray(action) ? action.join(', ') : action;
42
+ const preview = actionStr.length > 50 ? actionStr.substring(0, 50) + '...' : actionStr;
43
+ return preview;
44
+ }
45
+ getActionFullText(action) {
46
+ return Array.isArray(action) ? action.join('\n') : action;
47
+ }
48
+ //#endregion
49
+ //#region ---- Event Handlers ----
50
+ handleAddTrigger() {
51
+ const newTrigger = {
52
+ event: '',
53
+ action: '',
54
+ };
55
+ const currentTriggers = [...this.triggers()];
56
+ currentTriggers.push(newTrigger);
57
+ this.setValue(currentTriggers);
58
+ }
59
+ handleRemoveTrigger(index) {
60
+ const currentTriggers = [...this.triggers()];
61
+ currentTriggers.splice(index, 1);
62
+ this.setValue(currentTriggers);
63
+ }
64
+ async openEventEditor(index) {
65
+ const trigger = this.triggers()[index];
66
+ if (!trigger)
67
+ return;
68
+ const { AXPTriggerExpressionEditorPopupComponent } = await import('./acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs');
69
+ const result = await this.popupService.open(AXPTriggerExpressionEditorPopupComponent, {
70
+ title: '@general:widgets.triggers.edit-event-expression',
71
+ size: 'lg',
72
+ data: {
73
+ value: signal(trigger.event),
74
+ },
75
+ });
76
+ if (result?.data?.value) {
77
+ const updatedTriggers = [...this.triggers()];
78
+ updatedTriggers[index] = {
79
+ ...updatedTriggers[index],
80
+ event: result.data.value,
81
+ };
82
+ this.setValue(updatedTriggers);
83
+ }
84
+ }
85
+ async openActionEditor(index) {
86
+ const trigger = this.triggers()[index];
87
+ if (!trigger)
88
+ return;
89
+ // Convert action to string for editing (if array, join with newlines)
90
+ const actionValue = Array.isArray(trigger.action)
91
+ ? trigger.action.join('\n')
92
+ : trigger.action || '';
93
+ const { AXPTriggerExpressionEditorPopupComponent } = await import('./acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs');
94
+ const result = await this.popupService.open(AXPTriggerExpressionEditorPopupComponent, {
95
+ title: '@general:widgets.triggers.edit-action-expression',
96
+ size: 'lg',
97
+ data: {
98
+ value: signal(actionValue),
99
+ },
100
+ });
101
+ if (result?.data?.value !== undefined) {
102
+ const updatedTriggers = [...this.triggers()];
103
+ // Convert back to array if multiple lines, otherwise keep as string
104
+ const actionResult = result.data.value;
105
+ const action = actionResult.includes('\n')
106
+ ? actionResult.split('\n').filter((l) => l.trim())
107
+ : actionResult;
108
+ updatedTriggers[index] = {
109
+ ...updatedTriggers[index],
110
+ action: action,
111
+ };
112
+ this.setValue(updatedTriggers);
113
+ }
114
+ }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTriggersWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
116
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPTriggersWidgetEditComponent, isStandalone: true, selector: "axp-triggers-widget-editor", usesInheritance: true, ngImport: i0, template: `
117
+ <div class="flex flex-col gap-2">
118
+ @if (hasTriggers()) {
119
+ @for (trigger of triggers(); let i = $index; track i) {
120
+ <div
121
+ class="flex items-center gap-2 px-2 py-1 rounded-lg border shadow-sm lightest-surface hover:shadow-md transition-shadow"
122
+ >
123
+ <!-- Trigger Icon -->
124
+ <div
125
+ class="flex items-center justify-center w-8 h-8 rounded-md bg-pink-100 text-pink-600 font-semibold shrink-0"
126
+ >
127
+ <ax-icon icon="fa-light fa-bolt" ></ax-icon>
128
+ </div>
129
+
130
+ <!-- Trigger Details -->
131
+ <div class="flex-1 flex flex-col min-w-0">
132
+ <!-- Event -->
133
+ <div class="flex items-center gap-2">
134
+ <span class="text-xs font-semibold text-gray-500 uppercase tracking-wide w-16">
135
+ {{ '@general:widgets.triggers.event.label' | translate | async }}
136
+ </span>
137
+ <span
138
+ class="text-sm font-mono text-primary cursor-pointer underline truncate"
139
+ (click)="openEventEditor(i)"
140
+ [title]="trigger.event || ''"
141
+ >
142
+ @if (trigger.event) {
143
+ {{ getEventPreview(trigger.event) }}
144
+ } @else {
145
+ <span class="not-italic">
146
+ {{ '@general:widgets.triggers.event.placeholder' | translate | async }}
147
+ </span>
148
+ }
149
+ </span>
150
+ </div>
151
+
152
+ <!-- Action -->
153
+ <div class="flex items-center gap-2">
154
+ <span class="text-xs font-semibold text-gray-500 uppercase tracking-wide w-16">
155
+ {{ '@general:widgets.triggers.action.label' | translate | async }}
156
+ </span>
157
+ <span
158
+ class="text-sm font-mono text-success cursor-pointer underline truncate"
159
+ (click)="openActionEditor(i)"
160
+ [title]="getActionFullText(trigger.action)"
161
+ >
162
+ @if (trigger.action) {
163
+ {{ getActionPreview(trigger.action) }}
164
+ } @else {
165
+ <span class="not-italic">
166
+ {{ '@general:widgets.triggers.action.placeholder' | translate | async }}
167
+ </span>
168
+ }
169
+ </span>
170
+ </div>
171
+ </div>
172
+
173
+ <!-- Action Buttons -->
174
+ <div class="flex items-center gap-2 shrink-0 ax-sm">
175
+ <ax-button
176
+ look="blank"
177
+ color="danger"
178
+ [disabled]="disabled()"
179
+ (onClick)="handleRemoveTrigger(i)"
180
+ class="px-3"
181
+ >
182
+ <ax-icon icon="fa-light fa-trash-can"></ax-icon>
183
+ </ax-button>
184
+ </div>
185
+ </div>
186
+ }
187
+ } @else {
188
+ <axp-state-message
189
+ icon="fa-light fa-bolt"
190
+ [description]="'@general:widgets.triggers.empty-state.title'"
191
+ >
192
+ <ax-button
193
+ slot="actions"
194
+ [text]="'@general:widgets.triggers.add-first-trigger' | translate | async"
195
+ look="twotone"
196
+ [disabled]="disabled()"
197
+ (onClick)="handleAddTrigger()"
198
+ >
199
+ <ax-prefix>
200
+ <ax-icon class="fa-solid fa-add"></ax-icon>
201
+ </ax-prefix>
202
+ </ax-button>
203
+ </axp-state-message>
204
+ }
205
+
206
+ @if (hasTriggers()) {
207
+ <!-- Add Trigger Button -->
208
+ <div class="flex items-center justify-end">
209
+ <ax-button
210
+ [text]="'@general:widgets.triggers.add-trigger' | translate | async"
211
+ look="twotone"
212
+ color="primary"
213
+ [disabled]="disabled()"
214
+ (onClick)="handleAddTrigger()"
215
+ class="px-3"
216
+ >
217
+ <ax-prefix>
218
+ <ax-icon class="fa-solid fa-add"></ax-icon>
219
+ </ax-prefix>
220
+ </ax-button>
221
+ </div>
222
+ }
223
+ </div>
224
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.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: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.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: AXTranslationModule }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
225
+ }
226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTriggersWidgetEditComponent, decorators: [{
227
+ type: Component,
228
+ args: [{
229
+ selector: 'axp-triggers-widget-editor',
230
+ template: `
231
+ <div class="flex flex-col gap-2">
232
+ @if (hasTriggers()) {
233
+ @for (trigger of triggers(); let i = $index; track i) {
234
+ <div
235
+ class="flex items-center gap-2 px-2 py-1 rounded-lg border shadow-sm lightest-surface hover:shadow-md transition-shadow"
236
+ >
237
+ <!-- Trigger Icon -->
238
+ <div
239
+ class="flex items-center justify-center w-8 h-8 rounded-md bg-pink-100 text-pink-600 font-semibold shrink-0"
240
+ >
241
+ <ax-icon icon="fa-light fa-bolt" ></ax-icon>
242
+ </div>
243
+
244
+ <!-- Trigger Details -->
245
+ <div class="flex-1 flex flex-col min-w-0">
246
+ <!-- Event -->
247
+ <div class="flex items-center gap-2">
248
+ <span class="text-xs font-semibold text-gray-500 uppercase tracking-wide w-16">
249
+ {{ '@general:widgets.triggers.event.label' | translate | async }}
250
+ </span>
251
+ <span
252
+ class="text-sm font-mono text-primary cursor-pointer underline truncate"
253
+ (click)="openEventEditor(i)"
254
+ [title]="trigger.event || ''"
255
+ >
256
+ @if (trigger.event) {
257
+ {{ getEventPreview(trigger.event) }}
258
+ } @else {
259
+ <span class="not-italic">
260
+ {{ '@general:widgets.triggers.event.placeholder' | translate | async }}
261
+ </span>
262
+ }
263
+ </span>
264
+ </div>
265
+
266
+ <!-- Action -->
267
+ <div class="flex items-center gap-2">
268
+ <span class="text-xs font-semibold text-gray-500 uppercase tracking-wide w-16">
269
+ {{ '@general:widgets.triggers.action.label' | translate | async }}
270
+ </span>
271
+ <span
272
+ class="text-sm font-mono text-success cursor-pointer underline truncate"
273
+ (click)="openActionEditor(i)"
274
+ [title]="getActionFullText(trigger.action)"
275
+ >
276
+ @if (trigger.action) {
277
+ {{ getActionPreview(trigger.action) }}
278
+ } @else {
279
+ <span class="not-italic">
280
+ {{ '@general:widgets.triggers.action.placeholder' | translate | async }}
281
+ </span>
282
+ }
283
+ </span>
284
+ </div>
285
+ </div>
286
+
287
+ <!-- Action Buttons -->
288
+ <div class="flex items-center gap-2 shrink-0 ax-sm">
289
+ <ax-button
290
+ look="blank"
291
+ color="danger"
292
+ [disabled]="disabled()"
293
+ (onClick)="handleRemoveTrigger(i)"
294
+ class="px-3"
295
+ >
296
+ <ax-icon icon="fa-light fa-trash-can"></ax-icon>
297
+ </ax-button>
298
+ </div>
299
+ </div>
300
+ }
301
+ } @else {
302
+ <axp-state-message
303
+ icon="fa-light fa-bolt"
304
+ [description]="'@general:widgets.triggers.empty-state.title'"
305
+ >
306
+ <ax-button
307
+ slot="actions"
308
+ [text]="'@general:widgets.triggers.add-first-trigger' | translate | async"
309
+ look="twotone"
310
+ [disabled]="disabled()"
311
+ (onClick)="handleAddTrigger()"
312
+ >
313
+ <ax-prefix>
314
+ <ax-icon class="fa-solid fa-add"></ax-icon>
315
+ </ax-prefix>
316
+ </ax-button>
317
+ </axp-state-message>
318
+ }
319
+
320
+ @if (hasTriggers()) {
321
+ <!-- Add Trigger Button -->
322
+ <div class="flex items-center justify-end">
323
+ <ax-button
324
+ [text]="'@general:widgets.triggers.add-trigger' | translate | async"
325
+ look="twotone"
326
+ color="primary"
327
+ [disabled]="disabled()"
328
+ (onClick)="handleAddTrigger()"
329
+ class="px-3"
330
+ >
331
+ <ax-prefix>
332
+ <ax-icon class="fa-solid fa-add"></ax-icon>
333
+ </ax-prefix>
334
+ </ax-button>
335
+ </div>
336
+ }
337
+ </div>
338
+ `,
339
+ changeDetection: ChangeDetectionStrategy.OnPush,
340
+ imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXPStateMessageComponent],
341
+ }]
342
+ }] });
343
+
344
+ export { AXPTriggersWidgetEditComponent };
345
+ //# sourceMappingURL=acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs","sources":["../../../../../libs/framework/client/layout/widgets/src/lib/widgets/property-editors/triggers/triggers-widget-editor.component.ts"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPWidgetTrigger, AXPWidgetTriggers } from '@acorex-platform/framework-shared/core';\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\n\n@Component({\n selector: 'axp-triggers-widget-editor',\n template: `\n <div class=\"flex flex-col gap-2\">\n @if (hasTriggers()) {\n @for (trigger of triggers(); let i = $index; track i) {\n <div\n class=\"flex items-center gap-2 px-2 py-1 rounded-lg border shadow-sm lightest-surface hover:shadow-md transition-shadow\"\n >\n <!-- Trigger Icon -->\n <div\n class=\"flex items-center justify-center w-8 h-8 rounded-md bg-pink-100 text-pink-600 font-semibold shrink-0\"\n >\n <ax-icon icon=\"fa-light fa-bolt\" ></ax-icon>\n </div>\n\n <!-- Trigger Details -->\n <div class=\"flex-1 flex flex-col min-w-0\">\n <!-- Event -->\n <div class=\"flex items-center gap-2\">\n <span class=\"text-xs font-semibold text-gray-500 uppercase tracking-wide w-16\">\n {{ '@general:widgets.triggers.event.label' | translate | async }}\n </span>\n <span\n class=\"text-sm font-mono text-primary cursor-pointer underline truncate\"\n (click)=\"openEventEditor(i)\"\n [title]=\"trigger.event || ''\"\n >\n @if (trigger.event) {\n {{ getEventPreview(trigger.event) }}\n } @else {\n <span class=\"not-italic\">\n {{ '@general:widgets.triggers.event.placeholder' | translate | async }}\n </span>\n }\n </span>\n </div>\n\n <!-- Action -->\n <div class=\"flex items-center gap-2\">\n <span class=\"text-xs font-semibold text-gray-500 uppercase tracking-wide w-16\">\n {{ '@general:widgets.triggers.action.label' | translate | async }}\n </span>\n <span\n class=\"text-sm font-mono text-success cursor-pointer underline truncate\"\n (click)=\"openActionEditor(i)\"\n [title]=\"getActionFullText(trigger.action)\"\n >\n @if (trigger.action) {\n {{ getActionPreview(trigger.action) }}\n } @else {\n <span class=\"not-italic\">\n {{ '@general:widgets.triggers.action.placeholder' | translate | async }}\n </span>\n }\n </span>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"flex items-center gap-2 shrink-0 ax-sm\">\n <ax-button\n look=\"blank\"\n color=\"danger\"\n [disabled]=\"disabled()\"\n (onClick)=\"handleRemoveTrigger(i)\"\n class=\"px-3\"\n >\n <ax-icon icon=\"fa-light fa-trash-can\"></ax-icon>\n </ax-button>\n </div>\n </div>\n }\n } @else {\n <axp-state-message\n icon=\"fa-light fa-bolt\"\n [description]=\"'@general:widgets.triggers.empty-state.title'\"\n >\n <ax-button\n slot=\"actions\"\n [text]=\"'@general:widgets.triggers.add-first-trigger' | translate | async\"\n look=\"twotone\"\n [disabled]=\"disabled()\"\n (onClick)=\"handleAddTrigger()\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </axp-state-message>\n }\n\n @if (hasTriggers()) {\n <!-- Add Trigger Button -->\n <div class=\"flex items-center justify-end\">\n <ax-button\n [text]=\"'@general:widgets.triggers.add-trigger' | translate | async\"\n look=\"twotone\"\n color=\"primary\"\n [disabled]=\"disabled()\"\n (onClick)=\"handleAddTrigger()\"\n class=\"px-3\"\n >\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXPStateMessageComponent],\n})\nexport class AXPTriggersWidgetEditComponent extends AXPValueWidgetComponent<AXPWidgetTriggers> {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n protected disabled = computed<boolean>(() => this.options()['disabled'] as boolean);\n\n protected triggers = computed<AXPWidgetTriggers>(() => {\n const value = this.getValue();\n return Array.isArray(value) ? value : [];\n });\n\n protected hasTriggers = computed<boolean>(() => {\n return this.triggers().length > 0;\n });\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n protected getEventPreview(event: string): string {\n const preview = event.length > 50 ? event.substring(0, 50) + '...' : event;\n return preview;\n }\n\n protected getActionPreview(action: string | string[]): string {\n const actionStr = Array.isArray(action) ? action.join(', ') : action;\n const preview = actionStr.length > 50 ? actionStr.substring(0, 50) + '...' : actionStr;\n return preview;\n }\n\n protected getActionFullText(action: string | string[]): string {\n return Array.isArray(action) ? action.join('\\n') : action;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleAddTrigger(): void {\n const newTrigger: AXPWidgetTrigger = {\n event: '',\n action: '',\n };\n const currentTriggers = [...this.triggers()];\n currentTriggers.push(newTrigger);\n this.setValue(currentTriggers);\n }\n\n protected handleRemoveTrigger(index: number): void {\n const currentTriggers = [...this.triggers()];\n currentTriggers.splice(index, 1);\n this.setValue(currentTriggers);\n }\n\n protected async openEventEditor(index: number): Promise<void> {\n const trigger = this.triggers()[index];\n if (!trigger) return;\n\n const { AXPTriggerExpressionEditorPopupComponent } = await import(\n './trigger-expression-editor-popup.component'\n );\n\n const result = await this.popupService.open(AXPTriggerExpressionEditorPopupComponent, {\n title: '@general:widgets.triggers.edit-event-expression',\n size: 'lg',\n data: {\n value: signal(trigger.event),\n },\n });\n\n if (result?.data?.value) {\n const updatedTriggers = [...this.triggers()];\n updatedTriggers[index] = {\n ...updatedTriggers[index],\n event: result.data.value,\n };\n this.setValue(updatedTriggers);\n }\n }\n\n protected async openActionEditor(index: number): Promise<void> {\n const trigger = this.triggers()[index];\n if (!trigger) return;\n\n // Convert action to string for editing (if array, join with newlines)\n const actionValue = Array.isArray(trigger.action)\n ? trigger.action.join('\\n')\n : trigger.action || '';\n\n const { AXPTriggerExpressionEditorPopupComponent } = await import(\n './trigger-expression-editor-popup.component'\n );\n\n const result = await this.popupService.open(AXPTriggerExpressionEditorPopupComponent, {\n title: '@general:widgets.triggers.edit-action-expression',\n size: 'lg',\n data: {\n value: signal(actionValue),\n },\n });\n\n if (result?.data?.value !== undefined) {\n const updatedTriggers = [...this.triggers()];\n // Convert back to array if multiple lines, otherwise keep as string\n const actionResult = result.data.value;\n const action = actionResult.includes('\\n')\n ? actionResult.split('\\n').filter((l: string) => l.trim())\n : actionResult;\n\n updatedTriggers[index] = {\n ...updatedTriggers[index],\n action: action,\n };\n this.setValue(updatedTriggers);\n }\n }\n\n //#endregion\n}\n\n"],"names":["i3","i4"],"mappings":"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"}