iss-ctrl 0.0.21 → 0.0.22

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 (141) hide show
  1. package/README.md +33 -0
  2. package/fesm2022/iss-ctrl-attachment.viewer-DVUL39xd.mjs +110 -0
  3. package/fesm2022/iss-ctrl-attachment.viewer-DVUL39xd.mjs.map +1 -0
  4. package/fesm2022/iss-ctrl-base.mjs +663 -0
  5. package/fesm2022/iss-ctrl-base.mjs.map +1 -0
  6. package/fesm2022/iss-ctrl-checkbox.field-Dj5EGLUr.mjs +92 -0
  7. package/fesm2022/iss-ctrl-checkbox.field-Dj5EGLUr.mjs.map +1 -0
  8. package/fesm2022/iss-ctrl-checkbox.mjs +143 -0
  9. package/fesm2022/iss-ctrl-checkbox.mjs.map +1 -0
  10. package/fesm2022/iss-ctrl-checkbox.viewer-C3SEUszR.mjs +31 -0
  11. package/fesm2022/iss-ctrl-checkbox.viewer-C3SEUszR.mjs.map +1 -0
  12. package/fesm2022/iss-ctrl-chips.field-BLLAjBbP.mjs +76 -0
  13. package/fesm2022/iss-ctrl-chips.field-BLLAjBbP.mjs.map +1 -0
  14. package/fesm2022/iss-ctrl-chips.mjs +168 -0
  15. package/fesm2022/iss-ctrl-chips.mjs.map +1 -0
  16. package/fesm2022/iss-ctrl-chips.viewer-BcKT2hcq.mjs +38 -0
  17. package/fesm2022/iss-ctrl-chips.viewer-BcKT2hcq.mjs.map +1 -0
  18. package/fesm2022/iss-ctrl-date-picker.field-BSpXukpO.mjs +98 -0
  19. package/fesm2022/iss-ctrl-date-picker.field-BSpXukpO.mjs.map +1 -0
  20. package/fesm2022/iss-ctrl-date-picker.mjs +200 -0
  21. package/fesm2022/iss-ctrl-date-picker.mjs.map +1 -0
  22. package/fesm2022/iss-ctrl-date-picker.viewer-Dsmsf91t.mjs +40 -0
  23. package/fesm2022/iss-ctrl-date-picker.viewer-Dsmsf91t.mjs.map +1 -0
  24. package/fesm2022/iss-ctrl-date-range-picker.field-CjNHU1RW.mjs +97 -0
  25. package/fesm2022/iss-ctrl-date-range-picker.field-CjNHU1RW.mjs.map +1 -0
  26. package/fesm2022/iss-ctrl-date-range-picker.mjs +307 -0
  27. package/fesm2022/iss-ctrl-date-range-picker.mjs.map +1 -0
  28. package/fesm2022/iss-ctrl-date-range-picker.viewer-tmTQGPFh.mjs +41 -0
  29. package/fesm2022/iss-ctrl-date-range-picker.viewer-tmTQGPFh.mjs.map +1 -0
  30. package/fesm2022/iss-ctrl-datetime-picker.field-DGMY9PaU.mjs +98 -0
  31. package/fesm2022/iss-ctrl-datetime-picker.field-DGMY9PaU.mjs.map +1 -0
  32. package/fesm2022/iss-ctrl-datetime-picker.mjs +226 -0
  33. package/fesm2022/iss-ctrl-datetime-picker.mjs.map +1 -0
  34. package/fesm2022/iss-ctrl-datetime-picker.viewer-BeUyEBKo.mjs +42 -0
  35. package/fesm2022/iss-ctrl-datetime-picker.viewer-BeUyEBKo.mjs.map +1 -0
  36. package/fesm2022/iss-ctrl-file-picker.field-CbepZaX6.mjs +210 -0
  37. package/fesm2022/iss-ctrl-file-picker.field-CbepZaX6.mjs.map +1 -0
  38. package/fesm2022/iss-ctrl-file-picker.mjs +272 -0
  39. package/fesm2022/iss-ctrl-file-picker.mjs.map +1 -0
  40. package/fesm2022/iss-ctrl-input.field-Ctlf3OCN.mjs +104 -0
  41. package/fesm2022/iss-ctrl-input.field-Ctlf3OCN.mjs.map +1 -0
  42. package/fesm2022/iss-ctrl-input.mjs +204 -0
  43. package/fesm2022/iss-ctrl-input.mjs.map +1 -0
  44. package/fesm2022/iss-ctrl-input.viewer-BOZnW0_e.mjs +22 -0
  45. package/fesm2022/iss-ctrl-input.viewer-BOZnW0_e.mjs.map +1 -0
  46. package/fesm2022/iss-ctrl-iss-ctrl-DvnkwSMG.mjs +1789 -0
  47. package/fesm2022/iss-ctrl-iss-ctrl-DvnkwSMG.mjs.map +1 -0
  48. package/fesm2022/{iss-ctrl-load-event-bOt6IlIo.mjs → iss-ctrl-load-event-CuZ7pMjk.mjs} +4 -3
  49. package/fesm2022/iss-ctrl-load-event-CuZ7pMjk.mjs.map +1 -0
  50. package/fesm2022/{iss-ctrl-load-options-event-CxyAyNMe.mjs → iss-ctrl-load-options-event-B10rhdqh.mjs} +3 -3
  51. package/fesm2022/{iss-ctrl-load-options-event-CxyAyNMe.mjs.map → iss-ctrl-load-options-event-B10rhdqh.mjs.map} +1 -1
  52. package/fesm2022/{iss-ctrl-load-value-event-DJKJ5S3h.mjs → iss-ctrl-load-value-event-C-aRgKLx.mjs} +3 -3
  53. package/fesm2022/{iss-ctrl-load-value-event-DJKJ5S3h.mjs.map → iss-ctrl-load-value-event-C-aRgKLx.mjs.map} +1 -1
  54. package/fesm2022/iss-ctrl-mobile.field-DXVYT3q-.mjs +77 -0
  55. package/fesm2022/iss-ctrl-mobile.field-DXVYT3q-.mjs.map +1 -0
  56. package/fesm2022/iss-ctrl-mobile.mjs +2465 -0
  57. package/fesm2022/iss-ctrl-mobile.mjs.map +1 -0
  58. package/fesm2022/iss-ctrl-mobile.viewer-DQgxAcR-.mjs +22 -0
  59. package/fesm2022/iss-ctrl-mobile.viewer-DQgxAcR-.mjs.map +1 -0
  60. package/fesm2022/{iss-ctrl-note.field-B_Lbp28X.mjs → iss-ctrl-note.field-C8X9-mgD.mjs} +2 -2
  61. package/fesm2022/{iss-ctrl-note.field-B_Lbp28X.mjs.map → iss-ctrl-note.field-C8X9-mgD.mjs.map} +1 -1
  62. package/fesm2022/iss-ctrl-plate.field-aI81tAOV.mjs +92 -0
  63. package/fesm2022/iss-ctrl-plate.field-aI81tAOV.mjs.map +1 -0
  64. package/fesm2022/iss-ctrl-plate.mjs +491 -0
  65. package/fesm2022/iss-ctrl-plate.mjs.map +1 -0
  66. package/fesm2022/iss-ctrl-plate.viewer-B8PUBLH8.mjs +179 -0
  67. package/fesm2022/iss-ctrl-plate.viewer-B8PUBLH8.mjs.map +1 -0
  68. package/fesm2022/iss-ctrl-radio.field-B_JjPIlb.mjs +96 -0
  69. package/fesm2022/iss-ctrl-radio.field-B_JjPIlb.mjs.map +1 -0
  70. package/fesm2022/iss-ctrl-radio.mjs +101 -0
  71. package/fesm2022/iss-ctrl-radio.mjs.map +1 -0
  72. package/fesm2022/iss-ctrl-radio.viewer-EiDliZro.mjs +30 -0
  73. package/fesm2022/iss-ctrl-radio.viewer-EiDliZro.mjs.map +1 -0
  74. package/fesm2022/{iss-ctrl-replace-api-keys-C0XYQW4i.mjs → iss-ctrl-replace-api-keys-DLnagkOr.mjs} +2 -2
  75. package/fesm2022/{iss-ctrl-replace-api-keys-C0XYQW4i.mjs.map → iss-ctrl-replace-api-keys-DLnagkOr.mjs.map} +1 -1
  76. package/fesm2022/iss-ctrl-select.field-DoU4G_8t.mjs +87 -0
  77. package/fesm2022/iss-ctrl-select.field-DoU4G_8t.mjs.map +1 -0
  78. package/fesm2022/iss-ctrl-select.mjs +387 -0
  79. package/fesm2022/iss-ctrl-select.mjs.map +1 -0
  80. package/fesm2022/iss-ctrl-select.viewer-Dv9M-lG-.mjs +30 -0
  81. package/fesm2022/iss-ctrl-select.viewer-Dv9M-lG-.mjs.map +1 -0
  82. package/fesm2022/{iss-ctrl-set-value-event-CgXhi0Bv.mjs → iss-ctrl-set-value-event-Dhw0Vj5J.mjs} +2 -2
  83. package/fesm2022/{iss-ctrl-set-value-event-CgXhi0Bv.mjs.map → iss-ctrl-set-value-event-Dhw0Vj5J.mjs.map} +1 -1
  84. package/fesm2022/iss-ctrl-slide-toggle.field-TVVbAr6p.mjs +85 -0
  85. package/fesm2022/iss-ctrl-slide-toggle.field-TVVbAr6p.mjs.map +1 -0
  86. package/fesm2022/iss-ctrl-slide-toggle.mjs +72 -0
  87. package/fesm2022/iss-ctrl-slide-toggle.mjs.map +1 -0
  88. package/fesm2022/iss-ctrl-slide-toggle.viewer-hsIHwDj3.mjs +34 -0
  89. package/fesm2022/iss-ctrl-slide-toggle.viewer-hsIHwDj3.mjs.map +1 -0
  90. package/fesm2022/{iss-ctrl-table.field-B5FxF6hn.mjs → iss-ctrl-table.field-E0r9w0os.mjs} +142 -140
  91. package/fesm2022/iss-ctrl-table.field-E0r9w0os.mjs.map +1 -0
  92. package/fesm2022/iss-ctrl-textarea.field-CmHPDpk-.mjs +82 -0
  93. package/fesm2022/iss-ctrl-textarea.field-CmHPDpk-.mjs.map +1 -0
  94. package/fesm2022/iss-ctrl-textarea.mjs +115 -0
  95. package/fesm2022/iss-ctrl-textarea.mjs.map +1 -0
  96. package/fesm2022/iss-ctrl-textarea.viewer-CpmLauik.mjs +22 -0
  97. package/fesm2022/iss-ctrl-textarea.viewer-CpmLauik.mjs.map +1 -0
  98. package/fesm2022/iss-ctrl-time-picker.field-Cb0I5Ut1.mjs +77 -0
  99. package/fesm2022/iss-ctrl-time-picker.field-Cb0I5Ut1.mjs.map +1 -0
  100. package/fesm2022/iss-ctrl-time-picker.mjs +170 -0
  101. package/fesm2022/iss-ctrl-time-picker.mjs.map +1 -0
  102. package/fesm2022/iss-ctrl-time-picker.viewer-CJeFLrdI.mjs +22 -0
  103. package/fesm2022/iss-ctrl-time-picker.viewer-CJeFLrdI.mjs.map +1 -0
  104. package/fesm2022/iss-ctrl-toggle-button.field-Bj8WrkB-.mjs +105 -0
  105. package/fesm2022/iss-ctrl-toggle-button.field-Bj8WrkB-.mjs.map +1 -0
  106. package/fesm2022/iss-ctrl-toggle-button.mjs +156 -0
  107. package/fesm2022/iss-ctrl-toggle-button.mjs.map +1 -0
  108. package/fesm2022/iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs +30 -0
  109. package/fesm2022/iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs.map +1 -0
  110. package/fesm2022/iss-ctrl-tokens.mjs +25 -0
  111. package/fesm2022/iss-ctrl-tokens.mjs.map +1 -0
  112. package/fesm2022/{iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs → iss-ctrl-trigger-based-on-json-value-D9rTXVD1.mjs} +2 -2
  113. package/fesm2022/{iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs.map → iss-ctrl-trigger-based-on-json-value-D9rTXVD1.mjs.map} +1 -1
  114. package/fesm2022/{iss-ctrl-user-picker.field-BH63sZ-X.mjs → iss-ctrl-user-picker.field-BIzB5ZX6.mjs} +151 -150
  115. package/fesm2022/iss-ctrl-user-picker.field-BIzB5ZX6.mjs.map +1 -0
  116. package/fesm2022/iss-ctrl.mjs +3 -1
  117. package/fesm2022/iss-ctrl.mjs.map +1 -1
  118. package/package.json +69 -1
  119. package/types/iss-ctrl-base.d.ts +306 -0
  120. package/types/iss-ctrl-checkbox.d.ts +45 -0
  121. package/types/iss-ctrl-chips.d.ts +41 -0
  122. package/types/iss-ctrl-date-picker.d.ts +75 -0
  123. package/types/iss-ctrl-date-range-picker.d.ts +95 -0
  124. package/types/iss-ctrl-datetime-picker.d.ts +77 -0
  125. package/types/iss-ctrl-file-picker.d.ts +95 -0
  126. package/types/iss-ctrl-input.d.ts +76 -0
  127. package/types/iss-ctrl-mobile.d.ts +91 -0
  128. package/types/iss-ctrl-plate.d.ts +54 -0
  129. package/types/iss-ctrl-radio.d.ts +34 -0
  130. package/types/iss-ctrl-select.d.ts +75 -0
  131. package/types/iss-ctrl-slide-toggle.d.ts +26 -0
  132. package/types/iss-ctrl-textarea.d.ts +30 -0
  133. package/types/iss-ctrl-time-picker.d.ts +48 -0
  134. package/types/iss-ctrl-toggle-button.d.ts +41 -0
  135. package/types/iss-ctrl-tokens.d.ts +21 -0
  136. package/types/iss-ctrl.d.ts +120 -1810
  137. package/fesm2022/iss-ctrl-iss-ctrl-BKu6a5HF.mjs +0 -9683
  138. package/fesm2022/iss-ctrl-iss-ctrl-BKu6a5HF.mjs.map +0 -1
  139. package/fesm2022/iss-ctrl-load-event-bOt6IlIo.mjs.map +0 -1
  140. package/fesm2022/iss-ctrl-table.field-B5FxF6hn.mjs.map +0 -1
  141. package/fesm2022/iss-ctrl-user-picker.field-BH63sZ-X.mjs.map +0 -1
@@ -0,0 +1,105 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component } from '@angular/core';
3
+ import * as i1 from '@angular/forms';
4
+ import { ReactiveFormsModule } from '@angular/forms';
5
+ import { MatLabel } from '@angular/material/form-field';
6
+ import { F as FieldBase, V as VIEW_PROVIDER, a as ValidationMessage, b as FieldViewer } from './iss-ctrl-iss-ctrl-DvnkwSMG.mjs';
7
+ import { ToggleButtonControl } from 'iss-ctrl/toggle-button';
8
+ import { ToggleButtonViewer } from './iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs';
9
+
10
+ /**
11
+ * `<iss-field-toggle-button>` — options rendered as a button group.
12
+ *
13
+ * Rendered by the outlet for fields of type `toggle_button`. In `edit` mode it renders
14
+ * {@link ToggleButtonControl} plus the validation message; in `view` mode the matching viewer.
15
+ *
16
+ * ### Supported `config` keys
17
+ * | Key | Type | Description |
18
+ * | --- | --- | --- |
19
+ * | `multiple` | `boolean` | Allows more than one active button. |
20
+ * | `hideLabel` | `boolean` | Hides the field label. |
21
+ * | `readonly` | `boolean` | Shows the value but blocks interaction. |
22
+ *
23
+ * ### Other field members used
24
+ * `label()` · `options()`
25
+ *
26
+ * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
27
+ * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
28
+ *
29
+ * @example
30
+ * ```json
31
+ * { "name": "priority", "type": "toggle_button", "label": "Priority", "options": [{ "value": "high", "label": "High" }] }
32
+ * ```
33
+ */
34
+ class ToggleButtonField extends FieldBase {
35
+ onChange($event) {
36
+ this.field.ctrlJsonValue.set($event);
37
+ }
38
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ToggleButtonField, deps: null, target: i0.ɵɵFactoryTarget.Component });
39
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ToggleButtonField, isStandalone: true, selector: "iss-field-toggle-button", usesInheritance: true, ngImport: i0, template: `
40
+ @if (field.visible()) {
41
+ @if (field.mode() === "edit") {
42
+ @if (!field.config.hideLabel()) {
43
+ <mat-label>{{ field.label() }}</mat-label>
44
+ }
45
+ <iss-ctrl-toggle-button
46
+ [formControlName]="field.name"
47
+ [options]="field.options()"
48
+ [multiple]="field.config.multiple()"
49
+ [readonly]="field.config.readonly() ?? false"
50
+ (onChange)="onChange($event)"
51
+ />
52
+ <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
53
+ } @else {
54
+ <iss-field-viewer>
55
+ @if (!field.config.hideLabel()) {
56
+ <label>{{ field.label() }}</label>
57
+ }
58
+ <iss-viewer-toggle-button [field]="field"/>
59
+ </iss-field-viewer>
60
+ }
61
+ }
62
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "component", type: ToggleButtonControl, selector: "iss-ctrl-toggle-button", inputs: ["options"] }, { kind: "component", type: ValidationMessage, selector: "iss-validation-message-viewer", inputs: ["errors", "showMessage"] }, { kind: "component", type: ToggleButtonViewer, selector: "iss-viewer-toggle-button" }, { kind: "component", type: FieldViewer, selector: "iss-field-viewer" }], viewProviders: [VIEW_PROVIDER] });
63
+ }
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ToggleButtonField, decorators: [{
65
+ type: Component,
66
+ args: [{
67
+ selector: "iss-field-toggle-button",
68
+ viewProviders: [VIEW_PROVIDER],
69
+ imports: [
70
+ ReactiveFormsModule,
71
+ MatLabel,
72
+ ToggleButtonControl,
73
+ ValidationMessage,
74
+ ToggleButtonViewer,
75
+ FieldViewer
76
+ ],
77
+ template: `
78
+ @if (field.visible()) {
79
+ @if (field.mode() === "edit") {
80
+ @if (!field.config.hideLabel()) {
81
+ <mat-label>{{ field.label() }}</mat-label>
82
+ }
83
+ <iss-ctrl-toggle-button
84
+ [formControlName]="field.name"
85
+ [options]="field.options()"
86
+ [multiple]="field.config.multiple()"
87
+ [readonly]="field.config.readonly() ?? false"
88
+ (onChange)="onChange($event)"
89
+ />
90
+ <iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
91
+ } @else {
92
+ <iss-field-viewer>
93
+ @if (!field.config.hideLabel()) {
94
+ <label>{{ field.label() }}</label>
95
+ }
96
+ <iss-viewer-toggle-button [field]="field"/>
97
+ </iss-field-viewer>
98
+ }
99
+ }
100
+ `
101
+ }]
102
+ }] });
103
+
104
+ export { ToggleButtonField };
105
+ //# sourceMappingURL=iss-ctrl-toggle-button.field-Bj8WrkB-.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iss-ctrl-toggle-button.field-Bj8WrkB-.mjs","sources":["../../../projects/iss/src/components/controls/toggle-button/toggle-button.field.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatLabel } from \"@angular/material/form-field\";\nimport { VIEW_PROVIDER } from \"../../../shared/constants/view-provider.const\";\nimport { FieldViewer } from \"../../shared/field-viewer\";\nimport { ValidationMessage } from \"../../shared/validation-message\";\nimport { FieldBase } from \"../base/field-base\";\nimport { ToggleButtonControl } from \"iss-ctrl/toggle-button\";\nimport { ToggleButtonViewer } from \"./toggle-button.viewer\";\n\n/**\n * `<iss-field-toggle-button>` — options rendered as a button group.\n *\n * Rendered by the outlet for fields of type `toggle_button`. In `edit` mode it renders\n * {@link ToggleButtonControl} plus the validation message; in `view` mode the matching viewer.\n *\n * ### Supported `config` keys\n * | Key | Type | Description |\n * | --- | --- | --- |\n * | `multiple` | `boolean` | Allows more than one active button. |\n * | `hideLabel` | `boolean` | Hides the field label. |\n * | `readonly` | `boolean` | Shows the value but blocks interaction. |\n *\n * ### Other field members used\n * `label()` · `options()`\n *\n * Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and\n * `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.\n *\n * @example\n * ```json\n * { \"name\": \"priority\", \"type\": \"toggle_button\", \"label\": \"Priority\", \"options\": [{ \"value\": \"high\", \"label\": \"High\" }] }\n * ```\n */\n@Component({\n selector: \"iss-field-toggle-button\",\n viewProviders: [VIEW_PROVIDER],\n imports: [\n ReactiveFormsModule,\n MatLabel,\n ToggleButtonControl,\n ValidationMessage,\n ToggleButtonViewer,\n FieldViewer\n ],\n template: `\n @if (field.visible()) {\n @if (field.mode() === \"edit\") {\n @if (!field.config.hideLabel()) {\n <mat-label>{{ field.label() }}</mat-label>\n }\n <iss-ctrl-toggle-button\n [formControlName]=\"field.name\"\n [options]=\"field.options()\"\n [multiple]=\"field.config.multiple()\"\n [readonly]=\"field.config.readonly() ?? false\"\n (onChange)=\"onChange($event)\"\n />\n <iss-validation-message-viewer [errors]=\"ctrl.errors\" [showMessage]=\"!ctrl.untouched\"/>\n } @else {\n <iss-field-viewer>\n @if (!field.config.hideLabel()) {\n <label>{{ field.label() }}</label>\n }\n <iss-viewer-toggle-button [field]=\"field\"/>\n </iss-field-viewer>\n }\n }\n `\n})\nexport class ToggleButtonField extends FieldBase {\n onChange($event: any) {\n this.field.ctrlJsonValue.set($event);\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAUA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AAqCG,MAAO,iBAAkB,SAAQ,SAAS,CAAA;AAC9C,IAAA,QAAQ,CAAC,MAAW,EAAA;QAClB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;IACtC;uGAHW,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzBlB;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA9BC,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,mBAAmB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,kBAAkB,EAAA,QAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,aAAA,EAPE,CAAC,aAAa,CAAC,EAAA,CAAA;;2FAkCnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBApC7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;oBACnC,aAAa,EAAE,CAAC,aAAa,CAAC;AAC9B,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,QAAQ;wBACR,mBAAmB;wBACnB,iBAAiB;wBACjB,kBAAkB;wBAClB;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA;AACF,iBAAA;;;;;"}
@@ -0,0 +1,156 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, signal, Component } from '@angular/core';
3
+ import * as i2 from '@angular/forms';
4
+ import { ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import * as i1 from '@angular/material/button-toggle';
6
+ import { MatButtonToggleModule } from '@angular/material/button-toggle';
7
+ import { ControlBase } from 'iss-ctrl/base';
8
+
9
+ /**
10
+ * `<iss-ctrl-toggle-button>` — options rendered as a button group instead of a dropdown.
11
+ *
12
+ * With `multiple` set, several buttons can be active at once.
13
+ *
14
+ * @example
15
+ * ```html
16
+ * <iss-ctrl-toggle-button formControlName="priority" [options]="priorities" [multiple]="false"/>
17
+ * ```
18
+ *
19
+ * ### Own inputs
20
+ * | Property | Type | Default | Description |
21
+ * | --- | --- | --- | --- |
22
+ * | `options` | `Option[]` | **required** | The selectable choices. |
23
+ *
24
+ * ### Inherited from {@link ControlBase}
25
+ * `formControlName` · `readonly` · `className` · `(onChange)` · `multiple`
26
+ *
27
+ * Does not project a label — the field label is rendered by the wrapping `iss-field-*`.
28
+ */
29
+ class ToggleButtonControl extends ControlBase {
30
+ /**
31
+ * Selectable choices, each a `{ value, label }` pair. Required.
32
+ */
33
+ options = input.required(...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
34
+ selectedOptions = signal(new Map(), ...(ngDevMode ? [{ debugName: "selectedOptions" }] : /* istanbul ignore next */ []));
35
+ writeValue(value) {
36
+ this.#reset();
37
+ if (!value) {
38
+ return;
39
+ }
40
+ const values = value.split(",").map((val) => val.trim());
41
+ const selectedOptions = this.options().filter((option) => values.includes(option.value));
42
+ if (!this.multiple()) {
43
+ // single selection mode, only the first matching option is honoured
44
+ const selectedOption = selectedOptions[0];
45
+ this.ctrl.setValue(selectedOption ? selectedOption.value : null, { emitEvent: false });
46
+ this.addToSelectedOptionsMap(this.#selectedOptionsMapFactory(selectedOption ? [selectedOption] : []));
47
+ return;
48
+ }
49
+ this.addToSelectedOptionsMap(this.#selectedOptionsMapFactory(selectedOptions));
50
+ this.ctrl.setValue(selectedOptions.map((option) => option.value), { emitEvent: false });
51
+ }
52
+ addToSelectedOptionsMap(option) {
53
+ if (option) {
54
+ this.selectedOptions.set(option);
55
+ }
56
+ }
57
+ onToggleButtonChange(checked, value) {
58
+ if (this.readonly()) {
59
+ return;
60
+ }
61
+ this.markAsTouched();
62
+ if (!this.multiple()) {
63
+ const selectedOption = this.options().find((o) => o.value === value);
64
+ this.addToSelectedOptionsMap(this.#selectedOptionsMapFactory(selectedOption ? [selectedOption] : []));
65
+ this.propagateValue(value);
66
+ this.emitOnChangeEvent(selectedOption ? [selectedOption] : null);
67
+ }
68
+ else {
69
+ const option = this.options().find((o) => o.value === value);
70
+ if (!option) {
71
+ return;
72
+ }
73
+ const options = new Map(this.selectedOptions());
74
+ if (checked)
75
+ options.set(option.value, option);
76
+ else
77
+ options.delete(option.value);
78
+ this.getEmissionValue(options);
79
+ }
80
+ }
81
+ stringifySelectedOptions() {
82
+ if (!this.selectedOptions()?.size) {
83
+ return null;
84
+ }
85
+ return Array.from(this.selectedOptions(), ([value]) => value).join();
86
+ }
87
+ getEmissionValue(options) {
88
+ this.addToSelectedOptionsMap(options);
89
+ // the form keeps the stringified values, while (onChange) consumers get the resolved options
90
+ this.propagateValue(this.stringifySelectedOptions());
91
+ this.emitOnChangeEvent(this.#convertSelectedMapToArray());
92
+ }
93
+ #convertSelectedMapToArray() {
94
+ const selectedOptions = Array.from(this.selectedOptions().values());
95
+ return selectedOptions.length ? selectedOptions : null;
96
+ }
97
+ #selectedOptionsMapFactory(selectedOptions) {
98
+ const selectedOptionsMap = new Map();
99
+ for (const option of selectedOptions) {
100
+ selectedOptionsMap.set(option.value, option);
101
+ }
102
+ return selectedOptionsMap;
103
+ }
104
+ #reset() {
105
+ this.selectedOptions.set(new Map());
106
+ this.ctrl.setValue(null, { emitEvent: false });
107
+ }
108
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ToggleButtonControl, deps: null, target: i0.ɵɵFactoryTarget.Component });
109
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ToggleButtonControl, isStandalone: true, selector: "iss-ctrl-toggle-button", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
110
+ { provide: NG_VALUE_ACCESSOR, useExisting: ToggleButtonControl, multi: true }
111
+ ], usesInheritance: true, ngImport: i0, template: `
112
+ <mat-button-toggle-group
113
+ [formControl]="ctrl"
114
+ [disabled]="readonly()"
115
+ [multiple]=multiple()
116
+ [hideMultipleSelectionIndicator]="true"
117
+ [hideSingleSelectionIndicator]="true"
118
+ >
119
+ @for (option of options(); track option.value) {
120
+ <mat-button-toggle class="d-block" [value]="option.value" (change)="onToggleButtonChange($event.source.checked,option.value)">
121
+ {{ option.label }}
122
+ </mat-button-toggle>
123
+ }
124
+ </mat-button-toggle-group>
125
+ `, isInline: true, styles: [".mat-button-toggle-group-appearance-standard{border-radius:unset!important}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i1.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i1.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
126
+ }
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ToggleButtonControl, decorators: [{
128
+ type: Component,
129
+ args: [{ selector: "iss-ctrl-toggle-button", imports: [MatButtonToggleModule, ReactiveFormsModule], template: `
130
+ <mat-button-toggle-group
131
+ [formControl]="ctrl"
132
+ [disabled]="readonly()"
133
+ [multiple]=multiple()
134
+ [hideMultipleSelectionIndicator]="true"
135
+ [hideSingleSelectionIndicator]="true"
136
+ >
137
+ @for (option of options(); track option.value) {
138
+ <mat-button-toggle class="d-block" [value]="option.value" (change)="onToggleButtonChange($event.source.checked,option.value)">
139
+ {{ option.label }}
140
+ </mat-button-toggle>
141
+ }
142
+ </mat-button-toggle-group>
143
+ `, providers: [
144
+ { provide: NG_VALUE_ACCESSOR, useExisting: ToggleButtonControl, multi: true }
145
+ ], styles: [".mat-button-toggle-group-appearance-standard{border-radius:unset!important}\n"] }]
146
+ }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }] } });
147
+
148
+ // The toggle-button control. Its field and viewer stay in the primary entry point and reach it
149
+ // from there, so the control ships only to an app that renders it or imports it directly.
150
+
151
+ /**
152
+ * Generated bundle index. Do not edit.
153
+ */
154
+
155
+ export { ToggleButtonControl };
156
+ //# sourceMappingURL=iss-ctrl-toggle-button.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iss-ctrl-toggle-button.mjs","sources":["../../../projects/iss/toggle-button/src/toggle-button.control.ts","../../../projects/iss/toggle-button/src/public-api.ts","../../../projects/iss/toggle-button/src/iss-ctrl-toggle-button.ts"],"sourcesContent":["import { Component, input, InputSignal, signal, WritableSignal } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButtonToggleModule } from \"@angular/material/button-toggle\";\nimport { Option } from \"iss-ctrl/base\";\nimport { ControlBase } from \"iss-ctrl/base\";\n\n/**\n * `<iss-ctrl-toggle-button>` — options rendered as a button group instead of a dropdown.\n *\n * With `multiple` set, several buttons can be active at once.\n *\n * @example\n * ```html\n * <iss-ctrl-toggle-button formControlName=\"priority\" [options]=\"priorities\" [multiple]=\"false\"/>\n * ```\n *\n * ### Own inputs\n * | Property | Type | Default | Description |\n * | --- | --- | --- | --- |\n * | `options` | `Option[]` | **required** | The selectable choices. |\n *\n * ### Inherited from {@link ControlBase}\n * `formControlName` · `readonly` · `className` · `(onChange)` · `multiple`\n *\n * Does not project a label — the field label is rendered by the wrapping `iss-field-*`.\n */\n@Component({\n selector: \"iss-ctrl-toggle-button\",\n imports: [MatButtonToggleModule, ReactiveFormsModule],\n template: `\n <mat-button-toggle-group\n [formControl]=\"ctrl\"\n [disabled]=\"readonly()\"\n [multiple]=multiple()\n [hideMultipleSelectionIndicator]=\"true\"\n [hideSingleSelectionIndicator]=\"true\"\n >\n @for (option of options(); track option.value) {\n <mat-button-toggle class=\"d-block\" [value]=\"option.value\" (change)=\"onToggleButtonChange($event.source.checked,option.value)\">\n {{ option.label }}\n </mat-button-toggle>\n }\n </mat-button-toggle-group>\n `,\n styles: `\n .mat-button-toggle-group-appearance-standard {\n border-radius: unset !important;\n }\n `,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: ToggleButtonControl, multi: true }\n ]\n})\nexport class ToggleButtonControl extends ControlBase {\n /**\n * Selectable choices, each a `{ value, label }` pair. Required.\n */\n options: InputSignal<Option[]> = input.required();\n selectedOptions: WritableSignal<Map<string, Option>> = signal(new Map<string, Option>());\n\n override writeValue(value: string | null) {\n this.#reset();\n if (!value) {\n return;\n }\n const values: string[] = value.split(\",\").map((val: string) => val.trim());\n const selectedOptions: Option[] = this.options().filter((option: Option) => values.includes(option.value));\n if (!this.multiple()) {\n // single selection mode, only the first matching option is honoured\n const selectedOption: Option | undefined = selectedOptions[0];\n this.ctrl.setValue(selectedOption ? selectedOption.value : null, { emitEvent: false });\n this.addToSelectedOptionsMap(this.#selectedOptionsMapFactory(selectedOption ? [selectedOption] : []));\n return;\n }\n this.addToSelectedOptionsMap(this.#selectedOptionsMapFactory(selectedOptions));\n this.ctrl.setValue(selectedOptions.map((option: Option) => option.value), { emitEvent: false });\n }\n\n addToSelectedOptionsMap(option: Map<string, Option>) {\n if (option) {\n this.selectedOptions.set(option);\n }\n }\n\n onToggleButtonChange(checked: boolean, value: string) {\n if (this.readonly()) {\n return;\n }\n this.markAsTouched();\n if (!this.multiple()) {\n const selectedOption: Option | undefined = this.options().find((o: Option) => o.value === value);\n this.addToSelectedOptionsMap(this.#selectedOptionsMapFactory(selectedOption ? [selectedOption] : []));\n this.propagateValue(value);\n this.emitOnChangeEvent(selectedOption ? [selectedOption] : null);\n } else {\n const option = this.options().find((o: Option) => o.value === value);\n if (!option) {\n return;\n }\n const options: Map<string, Option> = new Map(this.selectedOptions());\n if (checked) options.set(option.value, option);\n else options.delete(option.value);\n this.getEmissionValue(options);\n }\n }\n\n stringifySelectedOptions(): string | null {\n if (!this.selectedOptions()?.size) {\n return null;\n }\n return Array.from(this.selectedOptions(), ([value]) => value).join();\n }\n\n getEmissionValue(options: any) {\n this.addToSelectedOptionsMap(options);\n // the form keeps the stringified values, while (onChange) consumers get the resolved options\n this.propagateValue(this.stringifySelectedOptions());\n this.emitOnChangeEvent(this.#convertSelectedMapToArray());\n }\n\n #convertSelectedMapToArray(): Option[] | null {\n const selectedOptions: Option[] = Array.from(this.selectedOptions().values());\n return selectedOptions.length ? selectedOptions : null;\n }\n\n #selectedOptionsMapFactory(selectedOptions: Option[]) {\n const selectedOptionsMap: Map<string, Option> = new Map();\n for (const option of selectedOptions) {\n selectedOptionsMap.set(option.value, option);\n }\n return selectedOptionsMap;\n }\n\n #reset() {\n this.selectedOptions.set(new Map<string, Option>());\n this.ctrl.setValue(null, { emitEvent: false });\n }\n}\n","// The toggle-button control. Its field and viewer stay in the primary entry point and reach it\n// from there, so the control ships only to an app that renders it or imports it directly.\n\nexport * from \"./toggle-button.control\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Component } from '@angular/core';
3
+ import { ViewerBase } from 'iss-ctrl/base';
4
+
5
+ class ToggleButtonViewer extends ViewerBase {
6
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ToggleButtonViewer, deps: null, target: i0.ɵɵFactoryTarget.Component });
7
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ToggleButtonViewer, isStandalone: true, selector: "iss-viewer-toggle-button", usesInheritance: true, ngImport: i0, template: `
8
+ <p>
9
+ @for (item of field().ctrlJsonValue(); track item?.value; let last = $last) {
10
+ <span>{{ item.label }} {{ last ? '' : ', ' }}</span>
11
+ }
12
+ </p>
13
+ `, isInline: true });
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ToggleButtonViewer, decorators: [{
16
+ type: Component,
17
+ args: [{
18
+ selector: "iss-viewer-toggle-button",
19
+ template: `
20
+ <p>
21
+ @for (item of field().ctrlJsonValue(); track item?.value; let last = $last) {
22
+ <span>{{ item.label }} {{ last ? '' : ', ' }}</span>
23
+ }
24
+ </p>
25
+ `,
26
+ }]
27
+ }] });
28
+
29
+ export { ToggleButtonViewer };
30
+ //# sourceMappingURL=iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs","sources":["../../../projects/iss/src/components/controls/toggle-button/toggle-button.viewer.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\nimport { ViewerBase } from \"iss-ctrl/base\";\n\n@Component({\n selector: \"iss-viewer-toggle-button\",\n template: `\n <p>\n @for (item of field().ctrlJsonValue(); track item?.value; let last = $last) {\n <span>{{ item.label }} {{ last ? '' : ', ' }}</span>\n }\n </p>\n `,\n})\nexport class ToggleButtonViewer extends ViewerBase {}\n"],"names":[],"mappings":";;;;AAaM,MAAO,kBAAmB,SAAQ,UAAU,CAAA;uGAArC,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARnB;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAV9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA;;;;;"}
@@ -0,0 +1,25 @@
1
+ import { InjectionToken } from '@angular/core';
2
+
3
+ const ATTACHMENT_UPLOAD_URL = new InjectionToken("ATTACHMENT UPLOAD URL");
4
+ const ATTACHMENT_UPLOAD_RESPONSE_MAPPER = new InjectionToken("Map backend response to required response interface.");
5
+ const ATTACHMENT_DOWNLOAD_URL = new InjectionToken("Attachment download URL");
6
+
7
+ const HOST = new InjectionToken("Backend Host to call");
8
+
9
+ const UI_LANGUAGE = new InjectionToken("UI SELECTED LANGUAGE");
10
+
11
+ const USER_SEARCH_API = new InjectionToken("USER SEARCH URL");
12
+
13
+ // Configuration the host application provides to the library.
14
+ //
15
+ // This is a secondary entry point so an app can wire these up in its root providers
16
+ // without dragging the control/field/viewer graph — and libphonenumber-js behind it —
17
+ // into its initial bundle. Everything here must stay free of runtime dependencies on
18
+ // the primary entry point.
19
+
20
+ /**
21
+ * Generated bundle index. Do not edit.
22
+ */
23
+
24
+ export { ATTACHMENT_DOWNLOAD_URL, ATTACHMENT_UPLOAD_RESPONSE_MAPPER, ATTACHMENT_UPLOAD_URL, HOST, UI_LANGUAGE, USER_SEARCH_API };
25
+ //# sourceMappingURL=iss-ctrl-tokens.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iss-ctrl-tokens.mjs","sources":["../../../projects/iss/tokens/src/attachment.token.ts","../../../projects/iss/tokens/src/host.token.ts","../../../projects/iss/tokens/src/language.token.ts","../../../projects/iss/tokens/src/user-search-api.token.ts","../../../projects/iss/tokens/src/public-api.ts","../../../projects/iss/tokens/src/iss-ctrl-tokens.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport { IssAttachment } from \"./attachment\";\n\nexport const ATTACHMENT_UPLOAD_URL: InjectionToken<string> = new InjectionToken(\"ATTACHMENT UPLOAD URL\");\nexport const ATTACHMENT_UPLOAD_RESPONSE_MAPPER: InjectionToken<(res: any) => IssAttachment[]> = new InjectionToken(\"Map backend response to required response interface.\");\nexport const ATTACHMENT_DOWNLOAD_URL: InjectionToken<string> = new InjectionToken(\"Attachment download URL\");\n","import {InjectionToken} from \"@angular/core\";\r\n\r\nexport const HOST: InjectionToken<string> = new InjectionToken(\"Backend Host to call\");\r\n","import {InjectionToken} from \"@angular/core\";\r\n\r\nexport const UI_LANGUAGE: InjectionToken<string> = new InjectionToken(\"UI SELECTED LANGUAGE\");\r\n","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const USER_SEARCH_API: InjectionToken<string> = new InjectionToken(\"USER SEARCH URL\");\r\n","// Configuration the host application provides to the library.\n//\n// This is a secondary entry point so an app can wire these up in its root providers\n// without dragging the control/field/viewer graph — and libphonenumber-js behind it —\n// into its initial bundle. Everything here must stay free of runtime dependencies on\n// the primary entry point.\n\nexport type { IssAttachment } from \"./attachment\";\nexport * from \"./attachment.token\";\nexport * from \"./host.token\";\nexport * from \"./language.token\";\nexport * from \"./user-search-api.token\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAGa,qBAAqB,GAA2B,IAAI,cAAc,CAAC,uBAAuB;MAC1F,iCAAiC,GAAkD,IAAI,cAAc,CAAC,sDAAsD;MAC5J,uBAAuB,GAA2B,IAAI,cAAc,CAAC,yBAAyB;;MCH9F,IAAI,GAA2B,IAAI,cAAc,CAAC,sBAAsB;;MCAxE,WAAW,GAA2B,IAAI,cAAc,CAAC,sBAAsB;;MCA/E,eAAe,GAA2B,IAAI,cAAc,CAAC,iBAAiB;;ACF3F;AACA;AACA;AACA;AACA;AACA;;ACLA;;AAEG;;;;"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable } from '@angular/core';
3
- import { g as getPropertyByPath } from './iss-ctrl-iss-ctrl-BKu6a5HF.mjs';
3
+ import { g as getPropertyByPath } from './iss-ctrl-iss-ctrl-DvnkwSMG.mjs';
4
4
 
5
5
  class TriggerBasedOnJsonValue {
6
6
  isTriggered(field, change, action, masterField) {
@@ -21,4 +21,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
21
21
  }] });
22
22
 
23
23
  export { TriggerBasedOnJsonValue };
24
- //# sourceMappingURL=iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs.map
24
+ //# sourceMappingURL=iss-ctrl-trigger-based-on-json-value-D9rTXVD1.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs","sources":["../../../projects/iss/src/events/triggers/trigger-based-on-json-value.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { FieldEvent } from \"../../shared/classes/field-event\";\r\nimport { IssField } from \"../../shared/classes/iss-field\";\r\nimport { FieldChange } from \"../../shared/interfaces/event-strategy\";\r\nimport { ActionTriggerFn } from \"../../shared/interfaces/event-trigger-fn\";\r\nimport { getPropertyByPath } from \"../../shared/utilities/get-property-by-path.util\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class TriggerBasedOnJsonValue implements ActionTriggerFn {\r\n isTriggered(field: IssField, change: FieldChange, action: FieldEvent, masterField: IssField): boolean {\r\n if (masterField) {\r\n const actionTriggersOnAnyValue: boolean = action.value === \"*\" && (change.value !== null && change.value !== undefined);\r\n const triggerValue = getPropertyByPath(masterField.ctrlJsonValue(), action.config?.triggerFromJsonValue);\r\n const actionTriggersOnSpecificValue: boolean = triggerValue === action.value;\r\n return actionTriggersOnAnyValue || actionTriggersOnSpecificValue;\r\n }\r\n return false;\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;MAQa,uBAAuB,CAAA;AAClC,IAAA,WAAW,CAAC,KAAe,EAAE,MAAmB,EAAE,MAAkB,EAAE,WAAqB,EAAA;QACzF,IAAI,WAAW,EAAE;YACf,MAAM,wBAAwB,GAAY,MAAM,CAAC,KAAK,KAAK,GAAG,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC;AACvH,YAAA,MAAM,YAAY,GAAG,iBAAiB,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC;AACxG,YAAA,MAAM,6BAA6B,GAAY,YAAY,KAAK,MAAM,CAAC,KAAK;YAC5E,OAAO,wBAAwB,IAAI,6BAA6B;QAClE;AACA,QAAA,OAAO,KAAK;IACd;uGATW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADX,MAAM,EAAA,CAAA;;2FAClB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;;;"}
1
+ {"version":3,"file":"iss-ctrl-trigger-based-on-json-value-D9rTXVD1.mjs","sources":["../../../projects/iss/src/events/triggers/trigger-based-on-json-value.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\r\nimport { FieldEvent } from \"../../shared/classes/field-event\";\r\nimport { IssField } from \"../../shared/classes/iss-field\";\r\nimport { FieldChange } from \"../../shared/interfaces/event-strategy\";\r\nimport { ActionTriggerFn } from \"../../shared/interfaces/event-trigger-fn\";\r\nimport { getPropertyByPath } from \"../../shared/utilities/get-property-by-path.util\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class TriggerBasedOnJsonValue implements ActionTriggerFn {\r\n isTriggered(field: IssField, change: FieldChange, action: FieldEvent, masterField: IssField): boolean {\r\n if (masterField) {\r\n const actionTriggersOnAnyValue: boolean = action.value === \"*\" && (change.value !== null && change.value !== undefined);\r\n const triggerValue = getPropertyByPath(masterField.ctrlJsonValue(), action.config?.triggerFromJsonValue);\r\n const actionTriggersOnSpecificValue: boolean = triggerValue === action.value;\r\n return actionTriggersOnAnyValue || actionTriggersOnSpecificValue;\r\n }\r\n return false;\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;MAQa,uBAAuB,CAAA;AAClC,IAAA,WAAW,CAAC,KAAe,EAAE,MAAmB,EAAE,MAAkB,EAAE,WAAqB,EAAA;QACzF,IAAI,WAAW,EAAE;YACf,MAAM,wBAAwB,GAAY,MAAM,CAAC,KAAK,KAAK,GAAG,KAAK,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC;AACvH,YAAA,MAAM,YAAY,GAAG,iBAAiB,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC;AACxG,YAAA,MAAM,6BAA6B,GAAY,YAAY,KAAK,MAAM,CAAC,KAAK;YAC5E,OAAO,wBAAwB,IAAI,6BAA6B;QAClE;AACA,QAAA,OAAO,KAAK;IACd;uGATW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADX,MAAM,EAAA,CAAA;;2FAClB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;;;"}