iss-ctrl 0.0.21 → 0.0.23
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.
- package/README.md +33 -0
- package/fesm2022/iss-ctrl-attachment.viewer-DVUL39xd.mjs +110 -0
- package/fesm2022/iss-ctrl-attachment.viewer-DVUL39xd.mjs.map +1 -0
- package/fesm2022/iss-ctrl-base.mjs +682 -0
- package/fesm2022/iss-ctrl-base.mjs.map +1 -0
- package/fesm2022/iss-ctrl-checkbox.field-CILXADas.mjs +88 -0
- package/fesm2022/iss-ctrl-checkbox.field-CILXADas.mjs.map +1 -0
- package/fesm2022/iss-ctrl-checkbox.mjs +146 -0
- package/fesm2022/iss-ctrl-checkbox.mjs.map +1 -0
- package/fesm2022/iss-ctrl-checkbox.viewer-C3SEUszR.mjs +31 -0
- package/fesm2022/iss-ctrl-checkbox.viewer-C3SEUszR.mjs.map +1 -0
- package/fesm2022/iss-ctrl-chips.field-445Ds3V7.mjs +76 -0
- package/fesm2022/iss-ctrl-chips.field-445Ds3V7.mjs.map +1 -0
- package/fesm2022/iss-ctrl-chips.mjs +168 -0
- package/fesm2022/iss-ctrl-chips.mjs.map +1 -0
- package/fesm2022/iss-ctrl-chips.viewer-BcKT2hcq.mjs +38 -0
- package/fesm2022/iss-ctrl-chips.viewer-BcKT2hcq.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-picker.field-Djhh1FsR.mjs +98 -0
- package/fesm2022/iss-ctrl-date-picker.field-Djhh1FsR.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-picker.mjs +200 -0
- package/fesm2022/iss-ctrl-date-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-picker.viewer-Dsmsf91t.mjs +40 -0
- package/fesm2022/iss-ctrl-date-picker.viewer-Dsmsf91t.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-range-picker.field-Dv636SAm.mjs +97 -0
- package/fesm2022/iss-ctrl-date-range-picker.field-Dv636SAm.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-range-picker.mjs +307 -0
- package/fesm2022/iss-ctrl-date-range-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-range-picker.viewer-tmTQGPFh.mjs +41 -0
- package/fesm2022/iss-ctrl-date-range-picker.viewer-tmTQGPFh.mjs.map +1 -0
- package/fesm2022/iss-ctrl-datetime-picker.field-DldY8vke.mjs +98 -0
- package/fesm2022/iss-ctrl-datetime-picker.field-DldY8vke.mjs.map +1 -0
- package/fesm2022/iss-ctrl-datetime-picker.mjs +226 -0
- package/fesm2022/iss-ctrl-datetime-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-datetime-picker.viewer-BeUyEBKo.mjs +42 -0
- package/fesm2022/iss-ctrl-datetime-picker.viewer-BeUyEBKo.mjs.map +1 -0
- package/fesm2022/iss-ctrl-dropdownlist.field-DikBAtc_.mjs +87 -0
- package/fesm2022/iss-ctrl-dropdownlist.field-DikBAtc_.mjs.map +1 -0
- package/fesm2022/iss-ctrl-dropdownlist.mjs +398 -0
- package/fesm2022/iss-ctrl-dropdownlist.mjs.map +1 -0
- package/fesm2022/iss-ctrl-dropdownlist.viewer-OWJxDpr8.mjs +30 -0
- package/fesm2022/iss-ctrl-dropdownlist.viewer-OWJxDpr8.mjs.map +1 -0
- package/fesm2022/iss-ctrl-file-picker.field-BMZaJxvj.mjs +210 -0
- package/fesm2022/iss-ctrl-file-picker.field-BMZaJxvj.mjs.map +1 -0
- package/fesm2022/iss-ctrl-file-picker.mjs +274 -0
- package/fesm2022/iss-ctrl-file-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-input.field-BiwBFYx3.mjs +104 -0
- package/fesm2022/iss-ctrl-input.field-BiwBFYx3.mjs.map +1 -0
- package/fesm2022/iss-ctrl-input.mjs +204 -0
- package/fesm2022/iss-ctrl-input.mjs.map +1 -0
- package/fesm2022/iss-ctrl-input.viewer-BOZnW0_e.mjs +22 -0
- package/fesm2022/iss-ctrl-input.viewer-BOZnW0_e.mjs.map +1 -0
- package/fesm2022/iss-ctrl-iss-ctrl-BG-QWWdq.mjs +1770 -0
- package/fesm2022/iss-ctrl-iss-ctrl-BG-QWWdq.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-load-event-bOt6IlIo.mjs → iss-ctrl-load-event-T4L3k9XO.mjs} +4 -3
- package/fesm2022/iss-ctrl-load-event-T4L3k9XO.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-load-options-event-CxyAyNMe.mjs → iss-ctrl-load-options-event-tG258cbP.mjs} +3 -3
- package/fesm2022/{iss-ctrl-load-options-event-CxyAyNMe.mjs.map → iss-ctrl-load-options-event-tG258cbP.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-load-value-event-DJKJ5S3h.mjs → iss-ctrl-load-value-event--7zt90Dl.mjs} +3 -3
- package/fesm2022/{iss-ctrl-load-value-event-DJKJ5S3h.mjs.map → iss-ctrl-load-value-event--7zt90Dl.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-mobile.field-DLccnWKX.mjs +77 -0
- package/fesm2022/iss-ctrl-mobile.field-DLccnWKX.mjs.map +1 -0
- package/fesm2022/iss-ctrl-mobile.mjs +2465 -0
- package/fesm2022/iss-ctrl-mobile.mjs.map +1 -0
- package/fesm2022/iss-ctrl-mobile.viewer-DQgxAcR-.mjs +22 -0
- package/fesm2022/iss-ctrl-mobile.viewer-DQgxAcR-.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-note.field-B_Lbp28X.mjs → iss-ctrl-note.field-CT1wVmfF.mjs} +2 -2
- package/fesm2022/{iss-ctrl-note.field-B_Lbp28X.mjs.map → iss-ctrl-note.field-CT1wVmfF.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-plate.field-CQQY8rnE.mjs +92 -0
- package/fesm2022/iss-ctrl-plate.field-CQQY8rnE.mjs.map +1 -0
- package/fesm2022/iss-ctrl-plate.mjs +493 -0
- package/fesm2022/iss-ctrl-plate.mjs.map +1 -0
- package/fesm2022/iss-ctrl-plate.viewer-B8PUBLH8.mjs +179 -0
- package/fesm2022/iss-ctrl-plate.viewer-B8PUBLH8.mjs.map +1 -0
- package/fesm2022/iss-ctrl-radio.field-Dp5D-AXQ.mjs +88 -0
- package/fesm2022/iss-ctrl-radio.field-Dp5D-AXQ.mjs.map +1 -0
- package/fesm2022/iss-ctrl-radio.mjs +104 -0
- package/fesm2022/iss-ctrl-radio.mjs.map +1 -0
- package/fesm2022/iss-ctrl-radio.viewer-EiDliZro.mjs +30 -0
- package/fesm2022/iss-ctrl-radio.viewer-EiDliZro.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-replace-api-keys-C0XYQW4i.mjs → iss-ctrl-replace-api-keys-COUv4Kin.mjs} +2 -2
- package/fesm2022/{iss-ctrl-replace-api-keys-C0XYQW4i.mjs.map → iss-ctrl-replace-api-keys-COUv4Kin.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-set-value-event-CgXhi0Bv.mjs → iss-ctrl-set-value-event-D0-_qIyS.mjs} +2 -2
- package/fesm2022/{iss-ctrl-set-value-event-CgXhi0Bv.mjs.map → iss-ctrl-set-value-event-D0-_qIyS.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-slide-toggle.field-vCJHOiSG.mjs +85 -0
- package/fesm2022/iss-ctrl-slide-toggle.field-vCJHOiSG.mjs.map +1 -0
- package/fesm2022/iss-ctrl-slide-toggle.mjs +66 -0
- package/fesm2022/iss-ctrl-slide-toggle.mjs.map +1 -0
- package/fesm2022/iss-ctrl-slide-toggle.viewer-hsIHwDj3.mjs +34 -0
- package/fesm2022/iss-ctrl-slide-toggle.viewer-hsIHwDj3.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-table.field-B5FxF6hn.mjs → iss-ctrl-table.field-DdFjH-D8.mjs} +142 -140
- package/fesm2022/iss-ctrl-table.field-DdFjH-D8.mjs.map +1 -0
- package/fesm2022/iss-ctrl-textarea.field-Dqhhu2m4.mjs +82 -0
- package/fesm2022/iss-ctrl-textarea.field-Dqhhu2m4.mjs.map +1 -0
- package/fesm2022/iss-ctrl-textarea.mjs +115 -0
- package/fesm2022/iss-ctrl-textarea.mjs.map +1 -0
- package/fesm2022/iss-ctrl-textarea.viewer-CpmLauik.mjs +22 -0
- package/fesm2022/iss-ctrl-textarea.viewer-CpmLauik.mjs.map +1 -0
- package/fesm2022/iss-ctrl-time-picker.field-CdmxRiH8.mjs +77 -0
- package/fesm2022/iss-ctrl-time-picker.field-CdmxRiH8.mjs.map +1 -0
- package/fesm2022/iss-ctrl-time-picker.mjs +170 -0
- package/fesm2022/iss-ctrl-time-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-time-picker.viewer-CJeFLrdI.mjs +22 -0
- package/fesm2022/iss-ctrl-time-picker.viewer-CJeFLrdI.mjs.map +1 -0
- package/fesm2022/iss-ctrl-toggle-button.field-rAT7dVFC.mjs +101 -0
- package/fesm2022/iss-ctrl-toggle-button.field-rAT7dVFC.mjs.map +1 -0
- package/fesm2022/iss-ctrl-toggle-button.mjs +158 -0
- package/fesm2022/iss-ctrl-toggle-button.mjs.map +1 -0
- package/fesm2022/iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs +30 -0
- package/fesm2022/iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs.map +1 -0
- package/fesm2022/iss-ctrl-tokens.mjs +25 -0
- package/fesm2022/iss-ctrl-tokens.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs → iss-ctrl-trigger-based-on-json-value-I92SNsv9.mjs} +2 -2
- package/fesm2022/{iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs.map → iss-ctrl-trigger-based-on-json-value-I92SNsv9.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-user-picker.field-BH63sZ-X.mjs → iss-ctrl-user-picker.field-DpmYCfpD.mjs} +154 -153
- package/fesm2022/iss-ctrl-user-picker.field-DpmYCfpD.mjs.map +1 -0
- package/fesm2022/iss-ctrl.mjs +3 -1
- package/fesm2022/iss-ctrl.mjs.map +1 -1
- package/package.json +69 -1
- package/types/iss-ctrl-base.d.ts +318 -0
- package/types/iss-ctrl-checkbox.d.ts +46 -0
- package/types/iss-ctrl-chips.d.ts +41 -0
- package/types/iss-ctrl-date-picker.d.ts +75 -0
- package/types/iss-ctrl-date-range-picker.d.ts +95 -0
- package/types/iss-ctrl-datetime-picker.d.ts +77 -0
- package/types/iss-ctrl-dropdownlist.d.ts +78 -0
- package/types/iss-ctrl-file-picker.d.ts +95 -0
- package/types/iss-ctrl-input.d.ts +76 -0
- package/types/iss-ctrl-mobile.d.ts +91 -0
- package/types/iss-ctrl-plate.d.ts +54 -0
- package/types/iss-ctrl-radio.d.ts +34 -0
- package/types/iss-ctrl-slide-toggle.d.ts +26 -0
- package/types/iss-ctrl-textarea.d.ts +30 -0
- package/types/iss-ctrl-time-picker.d.ts +48 -0
- package/types/iss-ctrl-toggle-button.d.ts +41 -0
- package/types/iss-ctrl-tokens.d.ts +21 -0
- package/types/iss-ctrl.d.ts +303 -2005
- package/fesm2022/iss-ctrl-iss-ctrl-BKu6a5HF.mjs +0 -9683
- package/fesm2022/iss-ctrl-iss-ctrl-BKu6a5HF.mjs.map +0 -1
- package/fesm2022/iss-ctrl-load-event-bOt6IlIo.mjs.map +0 -1
- package/fesm2022/iss-ctrl-table.field-B5FxF6hn.mjs.map +0 -1
- package/fesm2022/iss-ctrl-user-picker.field-BH63sZ-X.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iss-ctrl-time-picker.mjs","sources":["../../../projects/iss/time-picker/src/time-picker.control.ts","../../../projects/iss/time-picker/src/public-api.ts","../../../projects/iss/time-picker/src/iss-ctrl-time-picker.ts"],"sourcesContent":["import { Component, CUSTOM_ELEMENTS_SCHEMA, input, InputSignal } from \"@angular/core\";\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { provideNativeDateAdapter } from \"@angular/material/core\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIcon } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatTimepickerModule } from \"@angular/material/timepicker\";\nimport { format } from \"date-fns\";\nimport { ControlBase } from \"iss-ctrl/base\";\n\n/**\n * `<iss-ctrl-time-picker>` — time of day, picked from a list generated at a fixed interval.\n *\n * @example\n * ```html\n * <iss-ctrl-time-picker formControlName=\"startsAt\" interval=\"15min\" minTime=\"08:00\" maxTime=\"17:00\">\n * <label>Starts at</label>\n * </iss-ctrl-time-picker>\n * ```\n *\n * ### Own inputs\n * | Property | Type | Default | Description |\n * | --- | --- | --- | --- |\n * | `interval` | `string` | `\"30min\"` | Step between the offered times. |\n * | `minTime` | `string \\| null` | `null` | Earliest offered time, `HH:mm`. |\n * | `maxTime` | `string \\| null` | `null` | Latest offered time, `HH:mm`. |\n *\n * ### Inherited from {@link ControlBase}\n * `formControlName` · `readonly` · `className` · `(onChange)`\n *\n * Projects `<label>` into the floating label; omit it to render the control without one.\n */\n@Component({\n selector: \"iss-ctrl-time-picker\",\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n imports: [\n MatFormFieldModule, MatInputModule, MatTimepickerModule, ReactiveFormsModule, MatIcon,\n ],\n providers: [\n provideNativeDateAdapter(),\n { provide: NG_VALUE_ACCESSOR, useExisting: TimePickerControl, multi: true },\n { provide: NG_VALIDATORS, useExisting: TimePickerControl, multi: true },\n ],\n template: `\n <mat-form-field floatLabel=\"auto\" class=\"\">\n <!-- Always rendered: upgrade.scss shows the floating label only while the projected <label> carries text, so an omitted or empty one collapses on its own. -->\n <mat-label class=\"fs-16 fc-dark-gray\">\n <ng-content select=\"label\"></ng-content>\n </mat-label>\n <input\n matInput\n [errorStateMatcher]=\"errorStateMatcher\"\n [formControl]=\"ctrl\"\n [matTimepicker]=\"picker\"\n [matTimepickerMin]=\"minTime()\"\n [matTimepickerMax]=\"maxTime()\"\n [readonly]=\"readonly()\"\n readonly\n />\n @if (ctrl.getRawValue()) {\n <mat-icon matSuffix style=\"cursor: pointer\" (click)=\"clear($event)\">close</mat-icon>\n }\n <mat-timepicker-toggle matIconSuffix [for]=\"picker\" [disabled]=\"readonly()\"/>\n <mat-timepicker (selected)=\"emit($event)\" [interval]=\"interval()\" #picker/>\n\n </mat-form-field>\n `,\n})\nexport class TimePickerControl extends ControlBase {\n /**\n * Step between the offered times, for example `\"15min\"` or `\"30min\"`.\n */\n interval: InputSignal<string> = input(\"30min\");\n /**\n * Earliest offered time of day, as `HH:mm`.\n */\n minTime: InputSignal<string | null> = input<string | null>(null);\n /**\n * Latest offered time of day, as `HH:mm`.\n */\n maxTime: InputSignal<string | null> = input<string | null>(null);\n\n emit(evt: any) {\n if (this.readonly()) {\n return;\n }\n this.propagateValue(this.#stringifyTime(evt.value));\n this.emitOnChangeEvent(this.#stringifyTime(evt.value));\n }\n\n clear(event: MouseEvent) {\n if (this.readonly()) {\n return;\n }\n event.stopImmediatePropagation();\n this.ctrl.setValue(null);\n\n this.propagateValue(null);\n this.emitOnChangeEvent(null);\n }\n\n override writeValue(value: any) {\n if (!value) {\n this.ctrl.setValue(null, { emitEvent: false });\n return;\n }\n\n const parts: string[] = String(value).split(\":\");\n const d = new Date();\n d.setHours(Number(parts[0]));\n d.setMinutes(Number(parts[1]));\n d.setSeconds(Number(parts[2] ?? \"00\"));\n this.ctrl.setValue(d, { emitEvent: false });\n }\n\n #stringifyTime(value: any) {\n let formatedTime;\n try {\n formatedTime = format(new Date(value), \"HH:mm:ss\");\n } catch (e) {\n formatedTime = value;\n }\n\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n return formatedTime;\n }\n\n return null;\n }\n}\n","// The time-picker 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 \"./time-picker.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,22 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { ViewerBase } from 'iss-ctrl/base';
|
|
4
|
+
|
|
5
|
+
class TimePickerViewer extends ViewerBase {
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TimePickerViewer, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
7
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: TimePickerViewer, isStandalone: true, selector: "iss-viewer-time-picker", usesInheritance: true, ngImport: i0, template: `
|
|
8
|
+
{{ field().ctrlValue() }}
|
|
9
|
+
`, isInline: true });
|
|
10
|
+
}
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TimePickerViewer, decorators: [{
|
|
12
|
+
type: Component,
|
|
13
|
+
args: [{
|
|
14
|
+
selector: "iss-viewer-time-picker",
|
|
15
|
+
template: `
|
|
16
|
+
{{ field().ctrlValue() }}
|
|
17
|
+
`,
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
|
|
21
|
+
export { TimePickerViewer };
|
|
22
|
+
//# sourceMappingURL=iss-ctrl-time-picker.viewer-CJeFLrdI.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iss-ctrl-time-picker.viewer-CJeFLrdI.mjs","sources":["../../../projects/iss/src/components/controls/time-picker/time-picker.viewer.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\nimport { ViewerBase } from \"iss-ctrl/base\";\n\n@Component({\n selector: \"iss-viewer-time-picker\",\n template: `\n {{ field().ctrlValue() }}\n `,\n})\nexport class TimePickerViewer extends ViewerBase {}\n"],"names":[],"mappings":";;;;AASM,MAAO,gBAAiB,SAAQ,UAAU,CAAA;uGAAnC,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAJjB;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAEU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;AACF,iBAAA;;;;;"}
|
|
@@ -0,0 +1,101 @@
|
|
|
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 { F as FieldBase, V as VIEW_PROVIDER, a as ValidationMessage, b as FieldViewer } from './iss-ctrl-iss-ctrl-BG-QWWdq.mjs';
|
|
6
|
+
import { ToggleButtonControl } from 'iss-ctrl/toggle-button';
|
|
7
|
+
import { ToggleButtonViewer } from './iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* `<iss-field-toggle-button>` — options rendered as a button group.
|
|
11
|
+
*
|
|
12
|
+
* Rendered by the outlet for fields of type `toggle_button`. In `edit` mode it renders
|
|
13
|
+
* {@link ToggleButtonControl} plus the validation message; in `view` mode the matching viewer.
|
|
14
|
+
*
|
|
15
|
+
* ### Supported `config` keys
|
|
16
|
+
* | Key | Type | Description |
|
|
17
|
+
* | --- | --- | --- |
|
|
18
|
+
* | `multiple` | `boolean` | Allows more than one active button. |
|
|
19
|
+
* | `hideLabel` | `boolean` | Hides the field label. |
|
|
20
|
+
* | `readonly` | `boolean` | Shows the value but blocks interaction. |
|
|
21
|
+
*
|
|
22
|
+
* ### Other field members used
|
|
23
|
+
* `label()` · `options()`
|
|
24
|
+
*
|
|
25
|
+
* Every field also honours `visible`, `mode`, `validation`, `asyncValidation` and
|
|
26
|
+
* `events` — see {@link IssField} for the full model and {@link FieldConfig} for all keys.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```json
|
|
30
|
+
* { "name": "priority", "type": "toggle_button", "label": "Priority", "options": [{ "value": "high", "label": "High" }] }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
class ToggleButtonField extends FieldBase {
|
|
34
|
+
onChange($event) {
|
|
35
|
+
this.field.ctrlJsonValue.set($event);
|
|
36
|
+
}
|
|
37
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ToggleButtonField, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
38
|
+
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: `
|
|
39
|
+
@if (field.visible()) {
|
|
40
|
+
<div style="display: flex; flex-direction: column">
|
|
41
|
+
@if (field.mode() === "edit") {
|
|
42
|
+
<iss-ctrl-toggle-button
|
|
43
|
+
[formControlName]="field.name"
|
|
44
|
+
[options]="field.options()"
|
|
45
|
+
[multiple]="field.config.multiple()"
|
|
46
|
+
[readonly]="field.config.readonly() ?? false"
|
|
47
|
+
(onChange)="onChange($event)"
|
|
48
|
+
>
|
|
49
|
+
<label>{{ field.label() }}</label>
|
|
50
|
+
</iss-ctrl-toggle-button>
|
|
51
|
+
<iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
|
|
52
|
+
} @else {
|
|
53
|
+
<iss-field-viewer>
|
|
54
|
+
<label>{{ field.label() }}</label>
|
|
55
|
+
<iss-viewer-toggle-button [field]="field"/>
|
|
56
|
+
</iss-field-viewer>
|
|
57
|
+
}
|
|
58
|
+
</div>
|
|
59
|
+
}
|
|
60
|
+
`, 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: "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] });
|
|
61
|
+
}
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ToggleButtonField, decorators: [{
|
|
63
|
+
type: Component,
|
|
64
|
+
args: [{
|
|
65
|
+
selector: "iss-field-toggle-button",
|
|
66
|
+
viewProviders: [VIEW_PROVIDER],
|
|
67
|
+
imports: [
|
|
68
|
+
ReactiveFormsModule,
|
|
69
|
+
ToggleButtonControl,
|
|
70
|
+
ValidationMessage,
|
|
71
|
+
ToggleButtonViewer,
|
|
72
|
+
FieldViewer
|
|
73
|
+
],
|
|
74
|
+
template: `
|
|
75
|
+
@if (field.visible()) {
|
|
76
|
+
<div style="display: flex; flex-direction: column">
|
|
77
|
+
@if (field.mode() === "edit") {
|
|
78
|
+
<iss-ctrl-toggle-button
|
|
79
|
+
[formControlName]="field.name"
|
|
80
|
+
[options]="field.options()"
|
|
81
|
+
[multiple]="field.config.multiple()"
|
|
82
|
+
[readonly]="field.config.readonly() ?? false"
|
|
83
|
+
(onChange)="onChange($event)"
|
|
84
|
+
>
|
|
85
|
+
<label>{{ field.label() }}</label>
|
|
86
|
+
</iss-ctrl-toggle-button>
|
|
87
|
+
<iss-validation-message-viewer [errors]="ctrl.errors" [showMessage]="!ctrl.untouched"/>
|
|
88
|
+
} @else {
|
|
89
|
+
<iss-field-viewer>
|
|
90
|
+
<label>{{ field.label() }}</label>
|
|
91
|
+
<iss-viewer-toggle-button [field]="field"/>
|
|
92
|
+
</iss-field-viewer>
|
|
93
|
+
}
|
|
94
|
+
</div>
|
|
95
|
+
}
|
|
96
|
+
`
|
|
97
|
+
}]
|
|
98
|
+
}] });
|
|
99
|
+
|
|
100
|
+
export { ToggleButtonField };
|
|
101
|
+
//# sourceMappingURL=iss-ctrl-toggle-button.field-rAT7dVFC.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iss-ctrl-toggle-button.field-rAT7dVFC.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 { 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 ToggleButtonControl,\n ValidationMessage,\n ToggleButtonViewer,\n FieldViewer\n ],\n template: `\n @if (field.visible()) {\n <div style=\"display: flex; flex-direction: column\">\n @if (field.mode() === \"edit\") {\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 <label>{{ field.label() }}</label>\n </iss-ctrl-toggle-button>\n <iss-validation-message-viewer [errors]=\"ctrl.errors\" [showMessage]=\"!ctrl.untouched\"/>\n } @else {\n <iss-field-viewer>\n <label>{{ field.label() }}</label>\n <iss-viewer-toggle-button [field]=\"field\"/>\n </iss-field-viewer>\n }\n </div>\n }\n `\n})\nexport class ToggleButtonField extends FieldBase {\n onChange($event: any) {\n this.field.ctrlJsonValue.set($event);\n }\n}\n"],"names":[],"mappings":";;;;;;;;AASA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AAmCG,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,EAxBlB;;;;;;;;;;;;;;;;;;;;;;AAsBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA5BC,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,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,EANE,CAAC,aAAa,CAAC,EAAA,CAAA;;2FAgCnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlC7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,yBAAyB;oBACnC,aAAa,EAAE,CAAC,aAAa,CAAC;AAC9B,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,mBAAmB;wBACnB,iBAAiB;wBACjB,kBAAkB;wBAClB;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;AAsBT,EAAA;AACF,iBAAA;;;;;"}
|
|
@@ -0,0 +1,158 @@
|
|
|
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, TranslatePipe } 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
|
+
* Projects a `<label>` above the control — the wrapping `iss-field-*` passes the field label in that way.
|
|
28
|
+
*/
|
|
29
|
+
class ToggleButtonControl extends ControlBase {
|
|
30
|
+
/**
|
|
31
|
+
* Selectable choices, each a `{ value, title }` 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
|
+
<ng-content select="label"></ng-content>
|
|
113
|
+
<mat-button-toggle-group
|
|
114
|
+
[formControl]="ctrl"
|
|
115
|
+
[disabled]="readonly()"
|
|
116
|
+
[multiple]=multiple()
|
|
117
|
+
[hideMultipleSelectionIndicator]="true"
|
|
118
|
+
[hideSingleSelectionIndicator]="true"
|
|
119
|
+
>
|
|
120
|
+
@for (option of options(); track option.value) {
|
|
121
|
+
<mat-button-toggle class="d-block" [value]="option.value" (change)="onToggleButtonChange($event.source.checked,option.value)">
|
|
122
|
+
{{ option?.title | translate }}
|
|
123
|
+
</mat-button-toggle>
|
|
124
|
+
}
|
|
125
|
+
</mat-button-toggle-group>
|
|
126
|
+
`, 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"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
127
|
+
}
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ToggleButtonControl, decorators: [{
|
|
129
|
+
type: Component,
|
|
130
|
+
args: [{ selector: "iss-ctrl-toggle-button", imports: [MatButtonToggleModule, ReactiveFormsModule, TranslatePipe], template: `
|
|
131
|
+
<ng-content select="label"></ng-content>
|
|
132
|
+
<mat-button-toggle-group
|
|
133
|
+
[formControl]="ctrl"
|
|
134
|
+
[disabled]="readonly()"
|
|
135
|
+
[multiple]=multiple()
|
|
136
|
+
[hideMultipleSelectionIndicator]="true"
|
|
137
|
+
[hideSingleSelectionIndicator]="true"
|
|
138
|
+
>
|
|
139
|
+
@for (option of options(); track option.value) {
|
|
140
|
+
<mat-button-toggle class="d-block" [value]="option.value" (change)="onToggleButtonChange($event.source.checked,option.value)">
|
|
141
|
+
{{ option?.title | translate }}
|
|
142
|
+
</mat-button-toggle>
|
|
143
|
+
}
|
|
144
|
+
</mat-button-toggle-group>
|
|
145
|
+
`, providers: [
|
|
146
|
+
{ provide: NG_VALUE_ACCESSOR, useExisting: ToggleButtonControl, multi: true }
|
|
147
|
+
], styles: [".mat-button-toggle-group-appearance-standard{border-radius:unset!important}\n"] }]
|
|
148
|
+
}], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }] } });
|
|
149
|
+
|
|
150
|
+
// The toggle-button control. Its field and viewer stay in the primary entry point and reach it
|
|
151
|
+
// from there, so the control ships only to an app that renders it or imports it directly.
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Generated bundle index. Do not edit.
|
|
155
|
+
*/
|
|
156
|
+
|
|
157
|
+
export { ToggleButtonControl };
|
|
158
|
+
//# 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 { ControlBase, Option, TranslatePipe } 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 * Projects a `<label>` above the control — the wrapping `iss-field-*` passes the field label in that way.\n */\n@Component({\n selector: \"iss-ctrl-toggle-button\",\n imports: [MatButtonToggleModule, ReactiveFormsModule, TranslatePipe],\n template: `\n <ng-content select=\"label\"></ng-content>\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?.title | translate }}\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, title }` 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":";;;;;;;;AAKA;;;;;;;;;;;;;;;;;;;AAmBG;AA6BG,MAAO,mBAAoB,SAAQ,WAAW,CAAA;AAClD;;AAEG;AACH,IAAA,OAAO,GAA0B,KAAK,CAAC,QAAQ,6EAAE;AACjD,IAAA,eAAe,GAAwC,MAAM,CAAC,IAAI,GAAG,EAAkB,sFAAC;AAE/E,IAAA,UAAU,CAAC,KAAoB,EAAA;QACtC,IAAI,CAAC,MAAM,EAAE;QACb,IAAI,CAAC,KAAK,EAAE;YACV;QACF;QACA,MAAM,MAAM,GAAa,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAW,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1E,MAAM,eAAe,GAAa,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,MAAc,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1G,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;;AAEpB,YAAA,MAAM,cAAc,GAAuB,eAAe,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC,KAAK,GAAG,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACtF,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,0BAA0B,CAAC,cAAc,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC;YACrG;QACF;QACA,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,MAAc,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACjG;AAEA,IAAA,uBAAuB,CAAC,MAA2B,EAAA;QACjD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;QAClC;IACF;IAEA,oBAAoB,CAAC,OAAgB,EAAE,KAAa,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB;QACF;QACA,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YACpB,MAAM,cAAc,GAAuB,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;YAChG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,0BAA0B,CAAC,cAAc,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC;AACrG,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,GAAG,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;QAClE;aAAO;YACL,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAS,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;YACpE,IAAI,CAAC,MAAM,EAAE;gBACX;YACF;YACA,MAAM,OAAO,GAAwB,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AACpE,YAAA,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;;AACzC,gBAAA,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAChC;IACF;IAEA,wBAAwB,GAAA;QACtB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE;AACjC,YAAA,OAAO,IAAI;QACb;QACA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,EAAE;IACtE;AAEA,IAAA,gBAAgB,CAAC,OAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC;;QAErC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC;QACpD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAC3D;IAEA,0BAA0B,GAAA;AACxB,QAAA,MAAM,eAAe,GAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,CAAC;QAC7E,OAAO,eAAe,CAAC,MAAM,GAAG,eAAe,GAAG,IAAI;IACxD;AAEA,IAAA,0BAA0B,CAAC,eAAyB,EAAA;AAClD,QAAA,MAAM,kBAAkB,GAAwB,IAAI,GAAG,EAAE;AACzD,QAAA,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE;YACpC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;QAC9C;AACA,QAAA,OAAO,kBAAkB;IAC3B;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,EAAkB,CAAC;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAChD;uGAnFW,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAJnB;YACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI;SAC5E,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvBS;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAhBS,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,8BAAA,EAAA,gCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,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,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FA0BxD,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA5B/B,SAAS;+BACE,wBAAwB,EAAA,OAAA,EACzB,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAA,QAAA,EAC1D;;;;;;;;;;;;;;;GAeT,EAAA,SAAA,EAMU;wBACT,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,qBAAqB,EAAE,KAAK,EAAE,IAAI;AAC5E,qBAAA,EAAA,MAAA,EAAA,CAAA,+EAAA,CAAA,EAAA;;;ACnDH;AACA;;ACDA;;AAEG;;;;"}
|
|
@@ -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-
|
|
3
|
+
import { g as getPropertyByPath } from './iss-ctrl-iss-ctrl-BG-QWWdq.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-
|
|
24
|
+
//# sourceMappingURL=iss-ctrl-trigger-based-on-json-value-I92SNsv9.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iss-ctrl-trigger-based-on-json-value-
|
|
1
|
+
{"version":3,"file":"iss-ctrl-trigger-based-on-json-value-I92SNsv9.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;;;;;"}
|