@pega/sdk 0.0.13 → 0.0.15

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 (139) hide show
  1. package/README.md +46 -6
  2. package/dist/index.js +50 -24
  3. package/package.json +42 -3
  4. package/templates/angular-sdk-reference/extra-webpack.config.cjs +23 -0
  5. package/templates/angular-sdk-reference/index.html +12 -0
  6. package/templates/angular-sdk-reference/src/app/pconnect-renderer.component.ts +153 -0
  7. package/templates/angular-sdk-reference/src/components/component-map.ts +90 -0
  8. package/templates/angular-sdk-reference/src/components/fields/auto-complete/auto-complete.component.ts +304 -0
  9. package/templates/angular-sdk-reference/src/components/fields/checkbox/checkbox.component.ts +89 -0
  10. package/templates/angular-sdk-reference/src/components/fields/currency/currency.component.ts +112 -0
  11. package/templates/angular-sdk-reference/src/components/fields/date-input/date-input.component.ts +101 -0
  12. package/templates/angular-sdk-reference/src/components/fields/dropdown/dropdown.component.ts +118 -0
  13. package/templates/angular-sdk-reference/src/components/fields/email/email.component.ts +104 -0
  14. package/templates/angular-sdk-reference/src/components/fields/integer/integer.component.ts +106 -0
  15. package/templates/angular-sdk-reference/src/components/fields/phone/phone.component.ts +104 -0
  16. package/templates/angular-sdk-reference/src/components/fields/radio-buttons/radio-buttons.component.ts +113 -0
  17. package/templates/angular-sdk-reference/src/components/fields/text-area/text-area.component.ts +111 -0
  18. package/templates/angular-sdk-reference/src/components/fields/text-input/text-input.component.ts +110 -0
  19. package/templates/angular-sdk-reference/src/components/fields/url-input/url-input.component.ts +113 -0
  20. package/templates/angular-sdk-reference/src/components/helpers/sdk-helpers.ts +93 -0
  21. package/templates/angular-sdk-reference/src/components/infra/assignment/assignment.component.ts +206 -0
  22. package/templates/angular-sdk-reference/src/components/infra/case-summary/case-summary.component.ts +75 -0
  23. package/templates/angular-sdk-reference/src/components/infra/case-view/case-view.component.ts +126 -0
  24. package/templates/angular-sdk-reference/src/components/infra/flow-container/flow-container.component.ts +411 -0
  25. package/templates/angular-sdk-reference/src/components/infra/reference/reference.component.ts +158 -0
  26. package/templates/angular-sdk-reference/src/components/infra/region/region.component.ts +39 -0
  27. package/templates/angular-sdk-reference/src/components/infra/root-container/root-container.component.ts +199 -0
  28. package/templates/angular-sdk-reference/src/components/infra/stages/stages.component.ts +89 -0
  29. package/templates/angular-sdk-reference/src/components/infra/view/view.component.ts +144 -0
  30. package/templates/angular-sdk-reference/src/components/infra/view-container/view-container.component.ts +191 -0
  31. package/templates/angular-sdk-reference/src/components/templates/default-form/default-form.component.ts +105 -0
  32. package/templates/angular-sdk-reference/src/components/templates/narrow-wide/narrow-wide.component.ts +37 -0
  33. package/templates/angular-sdk-reference/src/components/templates/one-column/one-column.component.ts +37 -0
  34. package/templates/angular-sdk-reference/src/components/templates/two-column/two-column.component.ts +37 -0
  35. package/templates/angular-sdk-reference/src/components/templates/wide-narrow/wide-narrow.component.ts +37 -0
  36. package/templates/angular-sdk-reference/tsconfig.app.json +13 -0
  37. package/templates/react-sdk-reference/.ai-common/agents/embedded-flow-expert.md +75 -34
  38. package/templates/react-sdk-reference/.ai-common/agents/implementation-expert.md +74 -38
  39. package/templates/react-sdk-reference/.ai-common/global/ai-agent-instructions-embedded.md +33 -1
  40. package/templates/react-sdk-reference/.ai-common/global/ai-agent-instructions.md +57 -22
  41. package/templates/react-sdk-reference/.ai-common/instructions/embedded-component.md +25 -10
  42. package/templates/react-sdk-reference/.ai-common/prompts/add-component.md +40 -19
  43. package/templates/react-sdk-reference/.ai-common/prompts/component-manifest.json +62 -1
  44. package/templates/react-sdk-reference/.ai-common/prompts/embedded-component-manifest.md +26 -4
  45. package/templates/react-sdk-reference/.ai-common/prompts/generate-all-components.md +84 -33
  46. package/templates/react-sdk-reference/.ai-common/prompts/generate-dse-components.md +46 -26
  47. package/templates/react-sdk-reference/.ai-common/prompts/generate-embedded-components.md +28 -15
  48. package/templates/react-sdk-reference/.ai-common/prompts/generate-field-components.md +24 -6
  49. package/templates/react-sdk-reference/.ai-common/prompts/generate-infra-components.md +24 -6
  50. package/templates/react-sdk-reference/.ai-common/prompts/generate-template-components.md +24 -6
  51. package/templates/react-sdk-reference/.ai-common/prompts/generate-widget-components.md +24 -6
  52. package/templates/react-sdk-reference/.ai-common/prompts/identify-components.md +2 -0
  53. package/templates/react-sdk-reference/.ai-common/prompts/replace-design-system.md +44 -17
  54. package/templates/react-sdk-reference/.ai-common/skills/connect-pega-server.md +14 -1
  55. package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/AssignmentHeader.md +79 -0
  56. package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/Toast.md +96 -0
  57. package/templates/react-sdk-reference/.ai-common/skills/design-system-extension.md +56 -35
  58. package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/analyze-customer-repo.md +29 -3
  59. package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/run-and-verify-integration.md +97 -37
  60. package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/wire-integration.md +91 -60
  61. package/templates/react-sdk-reference/.ai-common/skills/field-components.md +88 -30
  62. package/templates/react-sdk-reference/.ai-common/skills/field-skills/AutoComplete.md +133 -101
  63. package/templates/react-sdk-reference/.ai-common/skills/field-skills/EmbeddedData.md +385 -0
  64. package/templates/react-sdk-reference/.ai-common/skills/field-skills/EmbeddedDataMulti.md +506 -0
  65. package/templates/react-sdk-reference/.ai-common/skills/field-skills/ObjectReference.md +549 -86
  66. package/templates/react-sdk-reference/.ai-common/skills/field-skills/UserReference.md +181 -83
  67. package/templates/react-sdk-reference/.ai-common/skills/infra-components.md +13 -1
  68. package/templates/react-sdk-reference/.ai-common/skills/portal-flow/run-and-verify-portal.md +290 -0
  69. package/templates/react-sdk-reference/.ai-common/skills/template-components.md +13 -1
  70. package/templates/react-sdk-reference/.ai-common/skills/template-skills/ListView.md +125 -153
  71. package/templates/react-sdk-reference/.ai-common/skills/template-skills/SimpleTable.md +90 -81
  72. package/templates/react-sdk-reference/.ai-common/skills/widget-components.md +13 -1
  73. package/templates/react-sdk-reference/assets/icons/trash.svg +3 -0
  74. package/templates/react-sdk-reference/index.html +0 -1
  75. package/templates/react-sdk-reference/package.json +2 -2
  76. package/templates/react-sdk-reference/package.minimal.json +2 -2
  77. package/templates/react-sdk-reference/sdk-config.json +3 -3
  78. package/templates/react-sdk-reference/src/FallbackComponent.tsx +1 -1
  79. package/templates/react-sdk-reference/src/MashupApp.tsx +33 -78
  80. package/templates/react-sdk-reference/src/PortalApp.tsx +23 -100
  81. package/templates/react-sdk-reference/src/components/component-map.ts +15 -1
  82. package/templates/react-sdk-reference/src/components/designSystemExtension/AssignmentHeader/AssignmentHeader.tsx +15 -0
  83. package/templates/react-sdk-reference/src/components/designSystemExtension/AssignmentHeader/index.tsx +1 -0
  84. package/templates/react-sdk-reference/src/components/designSystemExtension/FieldGroup/FieldGroup.tsx +1 -1
  85. package/templates/react-sdk-reference/src/components/designSystemExtension/FieldGroupList/FieldGroupList.tsx +1 -1
  86. package/templates/react-sdk-reference/src/components/designSystemExtension/FieldValueList/FieldValueList.tsx +16 -4
  87. package/templates/react-sdk-reference/src/components/designSystemExtension/ModalDialog/ModalDialog.tsx +26 -0
  88. package/templates/react-sdk-reference/src/components/designSystemExtension/ModalDialog/index.tsx +1 -0
  89. package/templates/react-sdk-reference/src/components/designSystemExtension/Toast/Toast.tsx +35 -0
  90. package/templates/react-sdk-reference/src/components/designSystemExtension/Toast/index.tsx +1 -0
  91. package/templates/react-sdk-reference/src/components/field/AutoComplete/AutoComplete.tsx +362 -24
  92. package/templates/react-sdk-reference/src/components/field/CancelAlert/CancelAlert.tsx +1 -1
  93. package/templates/react-sdk-reference/src/components/field/Checkbox/Checkbox.tsx +3 -1
  94. package/templates/react-sdk-reference/src/components/field/Currency/Currency.tsx +6 -3
  95. package/templates/react-sdk-reference/src/components/field/Date/Date.tsx +2 -1
  96. package/templates/react-sdk-reference/src/components/field/DateTime/DateTime.tsx +2 -1
  97. package/templates/react-sdk-reference/src/components/field/Decimal/Decimal.tsx +4 -3
  98. package/templates/react-sdk-reference/src/components/field/Dropdown/Dropdown.tsx +2 -0
  99. package/templates/react-sdk-reference/src/components/field/Email/Email.tsx +2 -1
  100. package/templates/react-sdk-reference/src/components/field/EmbeddedDataMulti/EmbeddedDataMulti.tsx +121 -0
  101. package/templates/react-sdk-reference/src/components/field/EmbeddedDataMulti/config-ext.json +7 -0
  102. package/templates/react-sdk-reference/src/components/field/EmbeddedDataMulti/index.tsx +1 -0
  103. package/templates/react-sdk-reference/src/components/field/Integer/Integer.tsx +2 -1
  104. package/templates/react-sdk-reference/src/components/field/Location/Location.tsx +1 -1
  105. package/templates/react-sdk-reference/src/components/field/Multiselect/Multiselect.tsx +40 -20
  106. package/templates/react-sdk-reference/src/components/field/ObjectReference/ObjectReference.tsx +554 -49
  107. package/templates/react-sdk-reference/src/components/field/ObjectReference/utils.ts +111 -20
  108. package/templates/react-sdk-reference/src/components/field/Percentage/Percentage.tsx +4 -3
  109. package/templates/react-sdk-reference/src/components/field/Phone/Phone.tsx +2 -1
  110. package/templates/react-sdk-reference/src/components/field/SelectableCard/SelectableCard.tsx +2 -1
  111. package/templates/react-sdk-reference/src/components/field/TextArea/TextArea.tsx +2 -1
  112. package/templates/react-sdk-reference/src/components/field/TextInput/TextInput.tsx +2 -1
  113. package/templates/react-sdk-reference/src/components/field/Time/Time.tsx +2 -1
  114. package/templates/react-sdk-reference/src/components/field/URL/URL.tsx +2 -1
  115. package/templates/react-sdk-reference/src/components/field/UserReference/UserReference.tsx +1 -1
  116. package/templates/react-sdk-reference/src/components/helpers/field-utils.ts +44 -0
  117. package/templates/react-sdk-reference/src/components/helpers/simpleTableHelpers.ts +19 -7
  118. package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/DataViewActionButtons/DataViewActionButtons.tsx +97 -0
  119. package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/DataViewActionButtons/index.tsx +1 -0
  120. package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/ListViewActionButtons/ListViewActionButtons.tsx +53 -0
  121. package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/ListViewActionButtons/index.tsx +1 -0
  122. package/templates/react-sdk-reference/src/components/template/AdvancedSearch/SearchGroups/SearchGroups.tsx +2 -2
  123. package/templates/react-sdk-reference/src/components/template/CaseSummary/CaseSummary.tsx +3 -1
  124. package/templates/react-sdk-reference/src/components/template/DataReference/SearchForm.tsx +4 -4
  125. package/templates/react-sdk-reference/src/components/template/HierarchicalForm/HierarchicalForm.tsx +2 -2
  126. package/templates/react-sdk-reference/src/components/template/InlineDashboard/InlineDashboard.tsx +1 -1
  127. package/templates/react-sdk-reference/src/components/template/ListView/ListView.tsx +7 -3
  128. package/templates/react-sdk-reference/src/components/template/SimpleTable/SimpleTableManual/SimpleTableManual.tsx +173 -99
  129. package/templates/react-sdk-reference/src/components/template/SimpleTable/SimpleTableSelect/SimpleTableSelect.tsx +63 -56
  130. package/templates/react-sdk-reference/src/components/widget/ToDo/ToDo.tsx +1 -1
  131. package/templates/react-sdk-reference/vite.config.ts +26 -4
  132. package/templates/react-sdk-reference/.ai-common/instructions/dse-component.md +0 -47
  133. package/templates/react-sdk-reference/.ai-common/instructions/field-component.md +0 -50
  134. package/templates/react-sdk-reference/.ai-common/instructions/infra-component.md +0 -76
  135. package/templates/react-sdk-reference/.ai-common/instructions/template-component.md +0 -43
  136. package/templates/react-sdk-reference/.ai-common/instructions/widget-component.md +0 -45
  137. package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/authenticate.md +0 -311
  138. package/templates/react-sdk-reference/pega-constellationjs-0.26.3-local.tgz +0 -0
  139. package/templates/react-sdk-reference/pega-sdk-react-0.1.0.tgz +0 -0
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Dropdown — select/dropdown field.
3
+ *
4
+ * Pattern reference: sdk-react Dropdown
5
+ */
6
+
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ import { Component, Input } from '@angular/core';
9
+ import type { OnInit, OnChanges, SimpleChanges } from '@angular/core';
10
+ import { CommonModule } from '@angular/common';
11
+ import { FormsModule } from '@angular/forms';
12
+ import { handleEvent } from '../../helpers/sdk-helpers';
13
+
14
+ @Component({
15
+ selector: 'pega-dropdown',
16
+ standalone: true,
17
+ imports: [CommonModule, FormsModule],
18
+ template: `
19
+ <div *ngIf="!readOnly" style="margin-bottom: 1rem;">
20
+ <label
21
+ *ngIf="label"
22
+ style="display: block; margin-bottom: 0.25rem; font-weight: 500; font-size: 0.875rem;"
23
+ >
24
+ {{ label
25
+ }}<span *ngIf="required" style="color: #dc2626; margin-left: 0.25rem;"
26
+ >*</span
27
+ >
28
+ </label>
29
+ <select
30
+ [attr.data-testid]="testId"
31
+ [disabled]="disabled"
32
+ [required]="required"
33
+ (change)="onSelectChange($event)"
34
+ style="width: 100%; padding: 0.5rem 0.75rem; border-radius: 0.375rem; font-size: 0.875rem;"
35
+ [style.border]="
36
+ validatemessage ? '1px solid #dc2626' : '1px solid #d1d5db'
37
+ "
38
+ >
39
+ <option value="" [selected]="!value">
40
+ {{ placeholder || 'Select...' }}
41
+ </option>
42
+ <option
43
+ *ngFor="let opt of options"
44
+ [value]="opt.value"
45
+ [selected]="opt.value === value"
46
+ >
47
+ {{ opt.text || opt.value }}
48
+ </option>
49
+ </select>
50
+ <div
51
+ *ngIf="validatemessage"
52
+ style="color: #dc2626; font-size: 0.75rem; margin-top: 0.25rem;"
53
+ >
54
+ {{ validatemessage }}
55
+ </div>
56
+ </div>
57
+ <div *ngIf="readOnly" style="margin-bottom: 1rem;">
58
+ <span style="font-size: 0.75rem; color: #6b7280;">{{ label }}</span>
59
+ <div style="font-size: 0.875rem;">{{ displayValue }}</div>
60
+ </div>
61
+ `,
62
+ })
63
+ export class DropdownComponent implements OnInit, OnChanges {
64
+ @Input() props: any;
65
+
66
+ label = '';
67
+ value: any = '';
68
+ placeholder = '';
69
+ testId = '';
70
+ required = false;
71
+ disabled = false;
72
+ readOnly = false;
73
+ validatemessage = '';
74
+ options: Array<{ value: string; text?: string }> = [];
75
+ displayValue = '';
76
+
77
+ private actions: any;
78
+ private propName = '';
79
+
80
+ ngOnInit(): void {
81
+ this.updateFromProps();
82
+ }
83
+
84
+ ngOnChanges(changes: SimpleChanges): void {
85
+ if (changes['props']) {
86
+ this.updateFromProps();
87
+ }
88
+ }
89
+
90
+ private updateFromProps(): void {
91
+ const p = this.props;
92
+ this.label = p.label ?? '';
93
+ this.value = p.value ?? '';
94
+ this.placeholder = p.placeholder ?? '';
95
+ this.testId = p.testId ?? '';
96
+ this.required = p.required ?? false;
97
+ this.disabled = p.disabled ?? false;
98
+ this.readOnly = p.readOnly ?? false;
99
+ this.validatemessage = p.validatemessage ?? '';
100
+ this.options = Array.isArray(p.datasource) ? p.datasource : [];
101
+
102
+ const match = this.options.find((o) => o.value === this.value);
103
+ this.displayValue = match?.text ?? match?.value ?? String(this.value);
104
+
105
+ const pConn = p.getPConnect?.();
106
+ this.actions = pConn?.getActionsApi?.();
107
+ this.propName =
108
+ ((pConn?.getStateProps?.() as Record<string, unknown>)
109
+ ?.value as string) ?? '';
110
+ }
111
+
112
+ onSelectChange(event: Event): void {
113
+ const target = event.target as HTMLSelectElement;
114
+ if (this.actions && this.propName) {
115
+ handleEvent(this.actions, 'changeNblur', this.propName, target.value);
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Email — email input field.
3
+ *
4
+ * Pattern reference: sdk-react Email
5
+ */
6
+
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ import { Component, Input } from '@angular/core';
9
+ import type { OnInit, OnChanges, SimpleChanges } from '@angular/core';
10
+ import { CommonModule } from '@angular/common';
11
+ import { FormsModule } from '@angular/forms';
12
+ import { handleEvent } from '../../helpers/sdk-helpers';
13
+
14
+ @Component({
15
+ selector: 'pega-email',
16
+ standalone: true,
17
+ imports: [CommonModule, FormsModule],
18
+ template: `
19
+ <div *ngIf="!readOnly" style="margin-bottom: 1rem;">
20
+ <label
21
+ *ngIf="label"
22
+ style="display: block; margin-bottom: 0.25rem; font-weight: 500; font-size: 0.875rem;"
23
+ >
24
+ {{ label
25
+ }}<span *ngIf="required" style="color: #dc2626; margin-left: 0.25rem;"
26
+ >*</span
27
+ >
28
+ </label>
29
+ <input
30
+ type="email"
31
+ [attr.data-testid]="testId"
32
+ [value]="value"
33
+ [placeholder]="placeholder"
34
+ [disabled]="disabled"
35
+ [required]="required"
36
+ (blur)="onBlur($event)"
37
+ style="width: 100%; padding: 0.5rem 0.75rem; border-radius: 0.375rem; font-size: 0.875rem;"
38
+ [style.border]="
39
+ validatemessage ? '1px solid #dc2626' : '1px solid #d1d5db'
40
+ "
41
+ />
42
+ <div
43
+ *ngIf="validatemessage"
44
+ style="color: #dc2626; font-size: 0.75rem; margin-top: 0.25rem;"
45
+ >
46
+ {{ validatemessage }}
47
+ </div>
48
+ </div>
49
+ <div *ngIf="readOnly" style="margin-bottom: 1rem;">
50
+ <span style="font-size: 0.75rem; color: #6b7280;">{{ label }}</span>
51
+ <div style="font-size: 0.875rem;">{{ value }}</div>
52
+ </div>
53
+ `,
54
+ })
55
+ export class EmailComponent implements OnInit, OnChanges {
56
+ @Input() props: any;
57
+
58
+ label = '';
59
+ value = '';
60
+ placeholder = '';
61
+ testId = '';
62
+ required = false;
63
+ disabled = false;
64
+ readOnly = false;
65
+ validatemessage = '';
66
+
67
+ private actions: any;
68
+ private propName = '';
69
+
70
+ ngOnInit(): void {
71
+ this.updateFromProps();
72
+ }
73
+
74
+ ngOnChanges(changes: SimpleChanges): void {
75
+ if (changes['props']) {
76
+ this.updateFromProps();
77
+ }
78
+ }
79
+
80
+ private updateFromProps(): void {
81
+ const p = this.props;
82
+ this.label = p.label ?? '';
83
+ this.value = p.value ?? '';
84
+ this.placeholder = p.placeholder ?? '';
85
+ this.testId = p.testId ?? '';
86
+ this.required = p.required ?? false;
87
+ this.disabled = p.disabled ?? false;
88
+ this.readOnly = p.readOnly ?? false;
89
+ this.validatemessage = p.validatemessage ?? '';
90
+
91
+ const pConn = p.getPConnect?.();
92
+ this.actions = pConn?.getActionsApi?.();
93
+ this.propName =
94
+ ((pConn?.getStateProps?.() as Record<string, unknown>)
95
+ ?.value as string) ?? '';
96
+ }
97
+
98
+ onBlur(event: Event): void {
99
+ const target = event.target as HTMLInputElement;
100
+ if (this.actions && this.propName) {
101
+ handleEvent(this.actions, 'changeNblur', this.propName, target.value);
102
+ }
103
+ }
104
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Integer — numeric integer input field.
3
+ *
4
+ * Pattern reference: sdk-react Integer
5
+ */
6
+
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ import { Component, Input } from '@angular/core';
9
+ import type { OnInit, OnChanges, SimpleChanges } from '@angular/core';
10
+ import { CommonModule } from '@angular/common';
11
+ import { FormsModule } from '@angular/forms';
12
+ import { handleEvent } from '../../helpers/sdk-helpers';
13
+
14
+ @Component({
15
+ selector: 'pega-integer',
16
+ standalone: true,
17
+ imports: [CommonModule, FormsModule],
18
+ template: `
19
+ <div *ngIf="!readOnly" style="margin-bottom: 1rem;">
20
+ <label
21
+ *ngIf="label"
22
+ style="display: block; margin-bottom: 0.25rem; font-weight: 500; font-size: 0.875rem;"
23
+ >
24
+ {{ label
25
+ }}<span *ngIf="required" style="color: #dc2626; margin-left: 0.25rem;"
26
+ >*</span
27
+ >
28
+ </label>
29
+ <input
30
+ type="number"
31
+ step="1"
32
+ [attr.data-testid]="testId"
33
+ [value]="value"
34
+ [placeholder]="placeholder"
35
+ [disabled]="disabled"
36
+ [required]="required"
37
+ (blur)="onBlur($event)"
38
+ style="width: 100%; padding: 0.5rem 0.75rem; border-radius: 0.375rem; font-size: 0.875rem;"
39
+ [style.border]="
40
+ validatemessage ? '1px solid #dc2626' : '1px solid #d1d5db'
41
+ "
42
+ />
43
+ <div
44
+ *ngIf="validatemessage"
45
+ style="color: #dc2626; font-size: 0.75rem; margin-top: 0.25rem;"
46
+ >
47
+ {{ validatemessage }}
48
+ </div>
49
+ </div>
50
+ <div *ngIf="readOnly" style="margin-bottom: 1rem;">
51
+ <span style="font-size: 0.75rem; color: #6b7280;">{{ label }}</span>
52
+ <div style="font-size: 0.875rem;">{{ value }}</div>
53
+ </div>
54
+ `,
55
+ })
56
+ export class IntegerComponent implements OnInit, OnChanges {
57
+ @Input() props: any;
58
+
59
+ label = '';
60
+ value: any = '';
61
+ placeholder = '';
62
+ testId = '';
63
+ required = false;
64
+ disabled = false;
65
+ readOnly = false;
66
+ validatemessage = '';
67
+
68
+ private actions: any;
69
+ private propName = '';
70
+
71
+ ngOnInit(): void {
72
+ this.updateFromProps();
73
+ }
74
+
75
+ ngOnChanges(changes: SimpleChanges): void {
76
+ if (changes['props']) {
77
+ this.updateFromProps();
78
+ }
79
+ }
80
+
81
+ private updateFromProps(): void {
82
+ const p = this.props;
83
+ this.label = p.label ?? '';
84
+ this.value = p.value ?? '';
85
+ this.placeholder = p.placeholder ?? '';
86
+ this.testId = p.testId ?? '';
87
+ this.required = p.required ?? false;
88
+ this.disabled = p.disabled ?? false;
89
+ this.readOnly = p.readOnly ?? false;
90
+ this.validatemessage = p.validatemessage ?? '';
91
+
92
+ const pConn = p.getPConnect?.();
93
+ this.actions = pConn?.getActionsApi?.();
94
+ this.propName =
95
+ ((pConn?.getStateProps?.() as Record<string, unknown>)
96
+ ?.value as string) ?? '';
97
+ }
98
+
99
+ onBlur(event: Event): void {
100
+ const target = event.target as HTMLInputElement;
101
+ if (this.actions && this.propName) {
102
+ const intVal = target.value ? parseInt(target.value, 10) : '';
103
+ handleEvent(this.actions, 'changeNblur', this.propName, intVal);
104
+ }
105
+ }
106
+ }
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Phone — telephone input field.
3
+ *
4
+ * Pattern reference: sdk-react Phone
5
+ */
6
+
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ import { Component, Input } from '@angular/core';
9
+ import type { OnInit, OnChanges, SimpleChanges } from '@angular/core';
10
+ import { CommonModule } from '@angular/common';
11
+ import { FormsModule } from '@angular/forms';
12
+ import { handleEvent } from '../../helpers/sdk-helpers';
13
+
14
+ @Component({
15
+ selector: 'pega-phone',
16
+ standalone: true,
17
+ imports: [CommonModule, FormsModule],
18
+ template: `
19
+ <div *ngIf="!readOnly" style="margin-bottom: 1rem;">
20
+ <label
21
+ *ngIf="label"
22
+ style="display: block; margin-bottom: 0.25rem; font-weight: 500; font-size: 0.875rem;"
23
+ >
24
+ {{ label
25
+ }}<span *ngIf="required" style="color: #dc2626; margin-left: 0.25rem;"
26
+ >*</span
27
+ >
28
+ </label>
29
+ <input
30
+ type="tel"
31
+ [attr.data-testid]="testId"
32
+ [value]="value"
33
+ [placeholder]="placeholder"
34
+ [disabled]="disabled"
35
+ [required]="required"
36
+ (blur)="onBlur($event)"
37
+ style="width: 100%; padding: 0.5rem 0.75rem; border-radius: 0.375rem; font-size: 0.875rem;"
38
+ [style.border]="
39
+ validatemessage ? '1px solid #dc2626' : '1px solid #d1d5db'
40
+ "
41
+ />
42
+ <div
43
+ *ngIf="validatemessage"
44
+ style="color: #dc2626; font-size: 0.75rem; margin-top: 0.25rem;"
45
+ >
46
+ {{ validatemessage }}
47
+ </div>
48
+ </div>
49
+ <div *ngIf="readOnly" style="margin-bottom: 1rem;">
50
+ <span style="font-size: 0.75rem; color: #6b7280;">{{ label }}</span>
51
+ <div style="font-size: 0.875rem;">{{ value }}</div>
52
+ </div>
53
+ `,
54
+ })
55
+ export class PhoneComponent implements OnInit, OnChanges {
56
+ @Input() props: any;
57
+
58
+ label = '';
59
+ value = '';
60
+ placeholder = '';
61
+ testId = '';
62
+ required = false;
63
+ disabled = false;
64
+ readOnly = false;
65
+ validatemessage = '';
66
+
67
+ private actions: any;
68
+ private propName = '';
69
+
70
+ ngOnInit(): void {
71
+ this.updateFromProps();
72
+ }
73
+
74
+ ngOnChanges(changes: SimpleChanges): void {
75
+ if (changes['props']) {
76
+ this.updateFromProps();
77
+ }
78
+ }
79
+
80
+ private updateFromProps(): void {
81
+ const p = this.props;
82
+ this.label = p.label ?? '';
83
+ this.value = p.value ?? '';
84
+ this.placeholder = p.placeholder ?? '';
85
+ this.testId = p.testId ?? '';
86
+ this.required = p.required ?? false;
87
+ this.disabled = p.disabled ?? false;
88
+ this.readOnly = p.readOnly ?? false;
89
+ this.validatemessage = p.validatemessage ?? '';
90
+
91
+ const pConn = p.getPConnect?.();
92
+ this.actions = pConn?.getActionsApi?.();
93
+ this.propName =
94
+ ((pConn?.getStateProps?.() as Record<string, unknown>)
95
+ ?.value as string) ?? '';
96
+ }
97
+
98
+ onBlur(event: Event): void {
99
+ const target = event.target as HTMLInputElement;
100
+ if (this.actions && this.propName) {
101
+ handleEvent(this.actions, 'changeNblur', this.propName, target.value);
102
+ }
103
+ }
104
+ }
@@ -0,0 +1,113 @@
1
+ /**
2
+ * RadioButtons — radio button group field.
3
+ *
4
+ * Pattern reference: sdk-react RadioButtons
5
+ */
6
+
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ import { Component, Input } from '@angular/core';
9
+ import type { OnInit, OnChanges, SimpleChanges } from '@angular/core';
10
+ import { CommonModule } from '@angular/common';
11
+ import { handleEvent } from '../../helpers/sdk-helpers';
12
+
13
+ @Component({
14
+ selector: 'pega-radio-buttons',
15
+ standalone: true,
16
+ imports: [CommonModule],
17
+ template: `
18
+ <div *ngIf="!readOnly" style="margin-bottom: 1rem;">
19
+ <fieldset style="border: none; padding: 0; margin: 0;">
20
+ <legend
21
+ *ngIf="label"
22
+ style="display: block; margin-bottom: 0.25rem; font-weight: 500; font-size: 0.875rem;"
23
+ >
24
+ {{ label
25
+ }}<span *ngIf="required" style="color: #dc2626; margin-left: 0.25rem;"
26
+ >*</span
27
+ >
28
+ </legend>
29
+ <div style="display: flex; flex-direction: column; gap: 0.5rem;">
30
+ <label
31
+ *ngFor="let opt of options"
32
+ style="display: flex; align-items: center; gap: 0.5rem; font-size: 0.875rem; cursor: pointer;"
33
+ >
34
+ <input
35
+ type="radio"
36
+ [attr.data-testid]="testId"
37
+ [name]="propName"
38
+ [value]="opt.value"
39
+ [checked]="opt.value === value"
40
+ [disabled]="disabled"
41
+ (change)="onRadioChange($event)"
42
+ />
43
+ {{ opt.text || opt.value }}
44
+ </label>
45
+ </div>
46
+ </fieldset>
47
+ <div
48
+ *ngIf="validatemessage"
49
+ style="color: #dc2626; font-size: 0.75rem; margin-top: 0.25rem;"
50
+ >
51
+ {{ validatemessage }}
52
+ </div>
53
+ </div>
54
+ <div *ngIf="readOnly" style="margin-bottom: 1rem;">
55
+ <span style="font-size: 0.75rem; color: #6b7280;">{{ label }}</span>
56
+ <div style="font-size: 0.875rem;">{{ displayValue }}</div>
57
+ </div>
58
+ `,
59
+ })
60
+ export class RadioButtonsComponent implements OnInit, OnChanges {
61
+ @Input() props: any;
62
+
63
+ label = '';
64
+ value: any = '';
65
+ testId = '';
66
+ required = false;
67
+ disabled = false;
68
+ readOnly = false;
69
+ validatemessage = '';
70
+ options: Array<{ value: string; text?: string }> = [];
71
+ displayValue = '';
72
+ propName = '';
73
+
74
+ private actions: any;
75
+
76
+ ngOnInit(): void {
77
+ this.updateFromProps();
78
+ }
79
+
80
+ ngOnChanges(changes: SimpleChanges): void {
81
+ if (changes['props']) {
82
+ this.updateFromProps();
83
+ }
84
+ }
85
+
86
+ private updateFromProps(): void {
87
+ const p = this.props;
88
+ this.label = p.label ?? '';
89
+ this.value = p.value ?? '';
90
+ this.testId = p.testId ?? '';
91
+ this.required = p.required ?? false;
92
+ this.disabled = p.disabled ?? false;
93
+ this.readOnly = p.readOnly ?? false;
94
+ this.validatemessage = p.validatemessage ?? '';
95
+ this.options = Array.isArray(p.datasource) ? p.datasource : [];
96
+
97
+ const match = this.options.find((o) => o.value === this.value);
98
+ this.displayValue = match?.text ?? match?.value ?? String(this.value);
99
+
100
+ const pConn = p.getPConnect?.();
101
+ this.actions = pConn?.getActionsApi?.();
102
+ this.propName =
103
+ ((pConn?.getStateProps?.() as Record<string, unknown>)
104
+ ?.value as string) ?? '';
105
+ }
106
+
107
+ onRadioChange(event: Event): void {
108
+ const target = event.target as HTMLInputElement;
109
+ if (this.actions && this.propName) {
110
+ handleEvent(this.actions, 'changeNblur', this.propName, target.value);
111
+ }
112
+ }
113
+ }
@@ -0,0 +1,111 @@
1
+ /**
2
+ * TextArea — multi-line text input field.
3
+ *
4
+ * Pattern reference: sdk-react TextArea
5
+ */
6
+
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ import { Component, Input } from '@angular/core';
9
+ import type { OnInit, OnChanges, SimpleChanges } from '@angular/core';
10
+ import { CommonModule } from '@angular/common';
11
+ import { FormsModule } from '@angular/forms';
12
+ import { handleEvent } from '../../helpers/sdk-helpers';
13
+
14
+ @Component({
15
+ selector: 'pega-text-area',
16
+ standalone: true,
17
+ imports: [CommonModule, FormsModule],
18
+ template: `
19
+ <div *ngIf="!readOnly" style="margin-bottom: 1rem;">
20
+ <label
21
+ *ngIf="label"
22
+ style="display: block; margin-bottom: 0.25rem; font-weight: 500; font-size: 0.875rem;"
23
+ >
24
+ {{ label
25
+ }}<span *ngIf="required" style="color: #dc2626; margin-left: 0.25rem;"
26
+ >*</span
27
+ >
28
+ </label>
29
+ <textarea
30
+ [attr.data-testid]="testId"
31
+ [value]="value"
32
+ [placeholder]="placeholder"
33
+ [disabled]="disabled"
34
+ [required]="required"
35
+ (change)="onChange($event)"
36
+ (blur)="onBlur($event)"
37
+ rows="3"
38
+ style="width: 100%; padding: 0.5rem 0.75rem; border-radius: 0.375rem; font-size: 0.875rem; resize: vertical;"
39
+ [style.border]="
40
+ validatemessage ? '1px solid #dc2626' : '1px solid #d1d5db'
41
+ "
42
+ >
43
+ </textarea>
44
+ <div
45
+ *ngIf="validatemessage"
46
+ style="color: #dc2626; font-size: 0.75rem; margin-top: 0.25rem;"
47
+ >
48
+ {{ validatemessage }}
49
+ </div>
50
+ </div>
51
+ <div *ngIf="readOnly" style="margin-bottom: 1rem;">
52
+ <span style="font-size: 0.75rem; color: #6b7280;">{{ label }}</span>
53
+ <div style="font-size: 0.875rem; white-space: pre-wrap;">{{ value }}</div>
54
+ </div>
55
+ `,
56
+ })
57
+ export class TextAreaComponent implements OnInit, OnChanges {
58
+ @Input() props: any;
59
+
60
+ label = '';
61
+ value = '';
62
+ placeholder = '';
63
+ testId = '';
64
+ required = false;
65
+ disabled = false;
66
+ readOnly = false;
67
+ validatemessage = '';
68
+
69
+ private actions: any;
70
+ private propName = '';
71
+
72
+ ngOnInit(): void {
73
+ this.updateFromProps();
74
+ }
75
+
76
+ ngOnChanges(changes: SimpleChanges): void {
77
+ if (changes['props']) {
78
+ this.updateFromProps();
79
+ }
80
+ }
81
+
82
+ private updateFromProps(): void {
83
+ const p = this.props;
84
+ this.label = p.label ?? '';
85
+ this.value = p.value ?? '';
86
+ this.placeholder = p.placeholder ?? '';
87
+ this.testId = p.testId ?? '';
88
+ this.required = p.required ?? false;
89
+ this.disabled = p.disabled ?? false;
90
+ this.readOnly = p.readOnly ?? false;
91
+ this.validatemessage = p.validatemessage ?? '';
92
+
93
+ const pConn = p.getPConnect?.();
94
+ this.actions = pConn?.getActionsApi?.();
95
+ this.propName =
96
+ ((pConn?.getStateProps?.() as Record<string, unknown>)
97
+ ?.value as string) ?? '';
98
+ }
99
+
100
+ onChange(event: Event): void {
101
+ const target = event.target as HTMLTextAreaElement;
102
+ this.value = target.value;
103
+ }
104
+
105
+ onBlur(event: Event): void {
106
+ const target = event.target as HTMLTextAreaElement;
107
+ if (this.actions && this.propName) {
108
+ handleEvent(this.actions, 'changeNblur', this.propName, target.value);
109
+ }
110
+ }
111
+ }