iss-ctrl 0.0.22 → 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 +1 -1
- package/fesm2022/iss-ctrl-base.mjs +20 -1
- package/fesm2022/iss-ctrl-base.mjs.map +1 -1
- package/fesm2022/{iss-ctrl-checkbox.field-Dj5EGLUr.mjs → iss-ctrl-checkbox.field-CILXADas.mjs} +25 -29
- package/fesm2022/iss-ctrl-checkbox.field-CILXADas.mjs.map +1 -0
- package/fesm2022/iss-ctrl-checkbox.mjs +10 -7
- package/fesm2022/iss-ctrl-checkbox.mjs.map +1 -1
- package/fesm2022/{iss-ctrl-chips.field-BLLAjBbP.mjs → iss-ctrl-chips.field-445Ds3V7.mjs} +2 -2
- package/fesm2022/{iss-ctrl-chips.field-BLLAjBbP.mjs.map → iss-ctrl-chips.field-445Ds3V7.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-date-picker.field-BSpXukpO.mjs → iss-ctrl-date-picker.field-Djhh1FsR.mjs} +2 -2
- package/fesm2022/{iss-ctrl-date-picker.field-BSpXukpO.mjs.map → iss-ctrl-date-picker.field-Djhh1FsR.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-date-range-picker.field-CjNHU1RW.mjs → iss-ctrl-date-range-picker.field-Dv636SAm.mjs} +2 -2
- package/fesm2022/{iss-ctrl-date-range-picker.field-CjNHU1RW.mjs.map → iss-ctrl-date-range-picker.field-Dv636SAm.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-datetime-picker.field-DGMY9PaU.mjs → iss-ctrl-datetime-picker.field-DldY8vke.mjs} +2 -2
- package/fesm2022/{iss-ctrl-datetime-picker.field-DGMY9PaU.mjs.map → iss-ctrl-datetime-picker.field-DldY8vke.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-select.field-DoU4G_8t.mjs → iss-ctrl-dropdownlist.field-DikBAtc_.mjs} +21 -21
- package/fesm2022/iss-ctrl-dropdownlist.field-DikBAtc_.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-select.mjs → iss-ctrl-dropdownlist.mjs} +36 -25
- package/fesm2022/iss-ctrl-dropdownlist.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-select.viewer-Dv9M-lG-.mjs → iss-ctrl-dropdownlist.viewer-OWJxDpr8.mjs} +7 -7
- package/fesm2022/iss-ctrl-dropdownlist.viewer-OWJxDpr8.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-file-picker.field-CbepZaX6.mjs → iss-ctrl-file-picker.field-BMZaJxvj.mjs} +2 -2
- package/fesm2022/{iss-ctrl-file-picker.field-CbepZaX6.mjs.map → iss-ctrl-file-picker.field-BMZaJxvj.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-file-picker.mjs +3 -1
- package/fesm2022/iss-ctrl-file-picker.mjs.map +1 -1
- package/fesm2022/{iss-ctrl-input.field-Ctlf3OCN.mjs → iss-ctrl-input.field-BiwBFYx3.mjs} +2 -2
- package/fesm2022/{iss-ctrl-input.field-Ctlf3OCN.mjs.map → iss-ctrl-input.field-BiwBFYx3.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-iss-ctrl-DvnkwSMG.mjs → iss-ctrl-iss-ctrl-BG-QWWdq.mjs} +51 -70
- package/fesm2022/iss-ctrl-iss-ctrl-BG-QWWdq.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-load-event-CuZ7pMjk.mjs → iss-ctrl-load-event-T4L3k9XO.mjs} +3 -3
- package/fesm2022/{iss-ctrl-load-event-CuZ7pMjk.mjs.map → iss-ctrl-load-event-T4L3k9XO.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-load-options-event-B10rhdqh.mjs → iss-ctrl-load-options-event-tG258cbP.mjs} +3 -3
- package/fesm2022/{iss-ctrl-load-options-event-B10rhdqh.mjs.map → iss-ctrl-load-options-event-tG258cbP.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-load-value-event-C-aRgKLx.mjs → iss-ctrl-load-value-event--7zt90Dl.mjs} +3 -3
- package/fesm2022/{iss-ctrl-load-value-event-C-aRgKLx.mjs.map → iss-ctrl-load-value-event--7zt90Dl.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-mobile.field-DXVYT3q-.mjs → iss-ctrl-mobile.field-DLccnWKX.mjs} +2 -2
- package/fesm2022/{iss-ctrl-mobile.field-DXVYT3q-.mjs.map → iss-ctrl-mobile.field-DLccnWKX.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-note.field-C8X9-mgD.mjs → iss-ctrl-note.field-CT1wVmfF.mjs} +2 -2
- package/fesm2022/{iss-ctrl-note.field-C8X9-mgD.mjs.map → iss-ctrl-note.field-CT1wVmfF.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-plate.field-aI81tAOV.mjs → iss-ctrl-plate.field-CQQY8rnE.mjs} +2 -2
- package/fesm2022/{iss-ctrl-plate.field-aI81tAOV.mjs.map → iss-ctrl-plate.field-CQQY8rnE.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-plate.mjs +3 -1
- package/fesm2022/iss-ctrl-plate.mjs.map +1 -1
- package/fesm2022/{iss-ctrl-radio.field-B_JjPIlb.mjs → iss-ctrl-radio.field-Dp5D-AXQ.mjs} +11 -19
- package/fesm2022/iss-ctrl-radio.field-Dp5D-AXQ.mjs.map +1 -0
- package/fesm2022/iss-ctrl-radio.mjs +9 -6
- package/fesm2022/iss-ctrl-radio.mjs.map +1 -1
- package/fesm2022/{iss-ctrl-replace-api-keys-DLnagkOr.mjs → iss-ctrl-replace-api-keys-COUv4Kin.mjs} +2 -2
- package/fesm2022/{iss-ctrl-replace-api-keys-DLnagkOr.mjs.map → iss-ctrl-replace-api-keys-COUv4Kin.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-set-value-event-Dhw0Vj5J.mjs → iss-ctrl-set-value-event-D0-_qIyS.mjs} +2 -2
- package/fesm2022/{iss-ctrl-set-value-event-Dhw0Vj5J.mjs.map → iss-ctrl-set-value-event-D0-_qIyS.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-slide-toggle.field-TVVbAr6p.mjs → iss-ctrl-slide-toggle.field-vCJHOiSG.mjs} +2 -2
- package/fesm2022/{iss-ctrl-slide-toggle.field-TVVbAr6p.mjs.map → iss-ctrl-slide-toggle.field-vCJHOiSG.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-slide-toggle.mjs +5 -11
- package/fesm2022/iss-ctrl-slide-toggle.mjs.map +1 -1
- package/fesm2022/{iss-ctrl-table.field-E0r9w0os.mjs → iss-ctrl-table.field-DdFjH-D8.mjs} +2 -2
- package/fesm2022/{iss-ctrl-table.field-E0r9w0os.mjs.map → iss-ctrl-table.field-DdFjH-D8.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-textarea.field-CmHPDpk-.mjs → iss-ctrl-textarea.field-Dqhhu2m4.mjs} +2 -2
- package/fesm2022/{iss-ctrl-textarea.field-CmHPDpk-.mjs.map → iss-ctrl-textarea.field-Dqhhu2m4.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-time-picker.field-Cb0I5Ut1.mjs → iss-ctrl-time-picker.field-CdmxRiH8.mjs} +2 -2
- package/fesm2022/{iss-ctrl-time-picker.field-Cb0I5Ut1.mjs.map → iss-ctrl-time-picker.field-CdmxRiH8.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-toggle-button.field-Bj8WrkB-.mjs → iss-ctrl-toggle-button.field-rAT7dVFC.mjs} +39 -43
- package/fesm2022/iss-ctrl-toggle-button.field-rAT7dVFC.mjs.map +1 -0
- package/fesm2022/iss-ctrl-toggle-button.mjs +9 -7
- package/fesm2022/iss-ctrl-toggle-button.mjs.map +1 -1
- package/fesm2022/{iss-ctrl-trigger-based-on-json-value-D9rTXVD1.mjs → iss-ctrl-trigger-based-on-json-value-I92SNsv9.mjs} +2 -2
- package/fesm2022/{iss-ctrl-trigger-based-on-json-value-D9rTXVD1.mjs.map → iss-ctrl-trigger-based-on-json-value-I92SNsv9.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-user-picker.field-BIzB5ZX6.mjs → iss-ctrl-user-picker.field-DpmYCfpD.mjs} +10 -10
- package/fesm2022/iss-ctrl-user-picker.field-DpmYCfpD.mjs.map +1 -0
- package/fesm2022/iss-ctrl.mjs +1 -1
- package/package.json +5 -5
- package/types/iss-ctrl-base.d.ts +15 -3
- package/types/iss-ctrl-checkbox.d.ts +4 -3
- package/types/{iss-ctrl-select.d.ts → iss-ctrl-dropdownlist.d.ts} +11 -8
- package/types/iss-ctrl-file-picker.d.ts +2 -2
- package/types/iss-ctrl-plate.d.ts +2 -2
- package/types/iss-ctrl-radio.d.ts +3 -3
- package/types/iss-ctrl-slide-toggle.d.ts +2 -2
- package/types/iss-ctrl-toggle-button.d.ts +3 -3
- package/types/iss-ctrl.d.ts +5 -17
- package/fesm2022/iss-ctrl-checkbox.field-Dj5EGLUr.mjs.map +0 -1
- package/fesm2022/iss-ctrl-iss-ctrl-DvnkwSMG.mjs.map +0 -1
- package/fesm2022/iss-ctrl-radio.field-B_JjPIlb.mjs.map +0 -1
- package/fesm2022/iss-ctrl-select.field-DoU4G_8t.mjs.map +0 -1
- package/fesm2022/iss-ctrl-select.mjs.map +0 -1
- package/fesm2022/iss-ctrl-select.viewer-Dv9M-lG-.mjs.map +0 -1
- package/fesm2022/iss-ctrl-toggle-button.field-Bj8WrkB-.mjs.map +0 -1
- package/fesm2022/iss-ctrl-user-picker.field-BIzB5ZX6.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"iss-ctrl-iss-ctrl-DvnkwSMG.mjs","sources":["../../../projects/iss/src/shared/classes/field-async-validation.ts","../../../projects/iss/src/shared/classes/field-config.ts","../../../projects/iss/src/shared/classes/field-action-config.ts","../../../projects/iss/src/shared/classes/field-event.ts","../../../projects/iss/src/shared/classes/iss-field.ts","../../../projects/iss/src/shared/indexes/validators.index.ts","../../../projects/iss/src/shared/services/form-engine.ts","../../../projects/iss/src/shared/indexes/components.index.ts","../../../projects/iss/src/shared/indexes/services.index.ts","../../../projects/iss/src/shared/indexes/viewers.index.ts","../../../projects/iss/src/shared/services/loader.ts","../../../projects/iss/src/shared/tokens/field.token.ts","../../../projects/iss/src/components/outlet/field-data-injector.ts","../../../projects/iss/src/components/outlet/outlet.ts","../../../projects/iss/src/events/triggers/event-trigger.ts","../../../projects/iss/src/events/triggers/event-trigger-manager.ts","../../../projects/iss/src/events/event-handler.ts","../../../projects/iss/src/components/controls/base/field-base.ts","../../../projects/iss/src/shared/constants/view-provider.const.ts","../../../projects/iss/src/shared/constants/placeholder-regex.const.ts","../../../projects/iss/src/shared/constants/validation.const.ts","../../../projects/iss/src/shared/pipes/translate.pipe.ts","../../../projects/iss/src/components/shared/validation-message.ts","../../../projects/iss/src/components/shared/field-viewer.ts","../../../projects/iss/src/shared/pipes/arabic-number.pipe.ts","../../../projects/iss/src/components/controls/plate/plate-letter.pipe.ts","../../../projects/iss/src/components/controls/user-picker/employee.ts","../../../projects/iss/src/shared/utilities/replace-placeholder.util.ts","../../../projects/iss/src/components/controls/file-picker/file-handler.ts","../../../projects/iss/src/shared/utilities/array-from.util.ts","../../../projects/iss/src/shared/utilities/get-property-by-path.util.ts","../../../projects/iss/src/components/controls/file-picker/format-file-size.util.ts","../../../projects/iss/src/validators/core.validator.ts","../../../projects/iss/src/validators/file.validator.ts","../../../projects/iss/src/validators/time.validator.ts","../../../projects/iss/src/public-api.ts","../../../projects/iss/src/iss-ctrl.ts"],"sourcesContent":["export class FieldAsyncValidation {\r\n alreadyExists: string | undefined;\r\n\r\n constructor(asyncValidation: any) {\r\n this.alreadyExists = asyncValidation?.alreadyExists;\r\n }\r\n}\r\n","import { signal, WritableSignal } from \"@angular/core\";\r\n\r\n/**\r\n * Per-field configuration, reachable as `field.config` and consumed by the `iss-field-*`\r\n * components. Every entry is a signal, so it can be changed at runtime by field events.\r\n *\r\n * Not every key applies to every field — the class doc of each `iss-field-*` component\r\n * lists exactly which of these it reads.\r\n *\r\n * ### Keys by area\r\n * - **Common:** `type` · `disabled` · `readonly` · `placeholder` · `suffix` · `hideLabel` · `multiple`\r\n * - **Bounds:** `min` · `max` · `minLength` · `maxLength`\r\n * - **Dates:** `minDate` · `maxDate` · `dateFilter` · `hijriCalendar` · `emitHijri`\r\n * - **Attachments:** `allowedFileSize` · `allowedFileTypes` · `minFilesCount` · `maxFilesCount` · `templateId` · `templateUrl`\r\n * - **Users:** `minUsersCount` · `maxUsersCount`\r\n * - **Table:** `showInTableColumns` · `tableWithFilter` · `tableWithSort` · `tableWithPagination`\r\n *\r\n * @example\r\n * ```json\r\n * { \"name\": \"email\", \"type\": \"text_input\", \"config\": { \"type\": \"email\", \"maxLength\": 120 } }\r\n * ```\r\n */\r\nexport class FieldConfig {\r\n /**\r\n * Native input type for `text_input` (`text`, `email`, `number`, `password`, …).\r\n */\r\n type: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Disables the control; the underlying `FormControl` is disabled on init.\r\n */\r\n disabled: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Shows the value but blocks interaction. Unlike `disabled`, the value is still submitted.\r\n */\r\n readonly: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Placeholder text shown while the field is empty.\r\n */\r\n placeholder: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Text rendered after the value (a unit or currency, for example).\r\n */\r\n suffix: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Hides the field label without removing it from the accessibility tree.\r\n */\r\n hideLabel: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Allows more than one value — multi select, multi file upload, multi toggle.\r\n */\r\n multiple: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Minimum number of characters. Source: `config.minLength`.\r\n */\r\n minLength: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Maximum number of characters. Source: `config.maxLength`.\r\n */\r\n maxLength: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Minimum numeric value (also the minimum user count for the user picker).\r\n */\r\n min: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Maximum numeric value (also the maximum user count for the user picker).\r\n */\r\n max: WritableSignal<number | undefined> = signal(undefined);\r\n\r\n /**\r\n * Earliest selectable date for date, datetime and date-range fields.\r\n */\r\n minDate: WritableSignal<Date | undefined> = signal(undefined);\r\n /**\r\n * Latest selectable date for date, datetime and date-range fields.\r\n */\r\n maxDate: WritableSignal<Date | undefined> = signal(undefined);\r\n /**\r\n * Restricts the calendar to working days. Source: `config.acceptWorkDaysOnly`.\r\n */\r\n dateFilter: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Renders the calendar as an Umm al-Qura Hijri calendar. The emitted value stays Gregorian\r\n * unless {@link FieldConfig.emitHijri} is also on. Source: `config.hijriCalendar`, also\r\n * accepted as `config.HijriCalendar`.\r\n */\r\n hijriCalendar: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Emits the picked date as a Hijri date instead of a Gregorian one — the same day emitted\r\n * as `1447-03-16` rather than `2025-09-08`. Implies {@link FieldConfig.hijriCalendar}: a\r\n * Hijri value is always picked from a Hijri calendar.\r\n */\r\n emitHijri: WritableSignal<boolean | undefined> = signal(undefined);\r\n\r\n /**\r\n * Id of a downloadable template offered next to an attachment field.\r\n */\r\n templateId: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Direct URL of the downloadable template for an attachment field.\r\n */\r\n templateUrl: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Maximum size per uploaded file. Source: `config.allowedSize`.\r\n */\r\n allowedFileSize: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Comma separated list of accepted file extensions or MIME types.\r\n */\r\n allowedFileTypes: WritableSignal<string | undefined> = signal(undefined);\r\n /**\r\n * Maximum number of files that may be attached.\r\n */\r\n maxFilesCount: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Minimum number of files required.\r\n */\r\n minFilesCount: WritableSignal<number | undefined> = signal(undefined);\r\n\r\n /**\r\n * Maximum number of users selectable in a user picker.\r\n */\r\n maxUsersCount: WritableSignal<number | undefined> = signal(undefined);\r\n /**\r\n * Minimum number of users required in a user picker.\r\n */\r\n minUsersCount: WritableSignal<number | undefined> = signal(undefined);\r\n\r\n /**\r\n * Parsed from the field definition but not consumed yet — table columns currently come\r\n * from `field.children`.\r\n */\r\n showInTableColumns: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Enables the filter row on a `table` field.\r\n */\r\n tableWithFilter: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Enables column sorting on a `table` field.\r\n */\r\n tableWithSort: WritableSignal<boolean | undefined> = signal(undefined);\r\n /**\r\n * Enables the paginator on a `table` field.\r\n */\r\n tableWithPagination: WritableSignal<boolean | undefined> = signal(undefined);\r\n\r\n constructor(config: any) {\r\n this.type.set(config?.type);\r\n this.suffix.set(config?.suffix);\r\n this.placeholder.set(config?.placeholder);\r\n this.readonly.set(config?.readonly);\r\n this.disabled.set(config?.disabled);\r\n this.multiple.set(config?.multiple);\r\n this.hideLabel.set(config?.hideLabel);\r\n this.min.set(config?.min);\r\n this.max.set(config?.max);\r\n this.minDate.set(config?.minDate);\r\n this.maxDate.set(config?.maxDate);\r\n this.dateFilter.set(config?.acceptWorkDaysOnly);\r\n this.hijriCalendar.set(config?.hijriCalendar ?? config?.HijriCalendar);\r\n this.emitHijri.set(config?.emitHijri);\r\n this.minLength.set(config?.minLength);\r\n this.maxLength.set(config?.maxLength);\r\n this.allowedFileSize.set(config?.allowedSize);\r\n this.allowedFileTypes.set(config?.allowedFileTypes);\r\n this.maxFilesCount.set(config?.maxFilesCount);\r\n this.minFilesCount.set(config?.minFilesCount);\r\n this.templateId.set(config?.templateId);\r\n this.templateUrl.set(config?.templateUrl);\r\n this.maxUsersCount.set(config?.maxUsersCount);\r\n this.minUsersCount.set(config?.minUsersCount);\r\n this.showInTableColumns.set(config?.showInTableColumns);\r\n this.tableWithFilter.set(config?.tableWithFilter);\r\n this.tableWithSort.set(config?.tableWithSort);\r\n this.tableWithPagination.set(config?.tableWithPagination);\r\n }\r\n}\r\n","import { EventConfigFn } from \"../interfaces/event-strategy\";\r\nimport { ActionTriggerFn } from \"../interfaces/event-trigger-fn\";\r\nimport { Loader } from \"../services/loader\";\r\n\r\nexport class FieldActionConfig {\r\n operator: \"or\" | \"and\" | undefined;\r\n setValueFromApiResponse: string | undefined;\r\n setValueFromRequestDto: string | undefined;\r\n setValueFromLoggedInUser: string | undefined;\r\n setValueFromJsonValue: string | undefined;\r\n triggerFromApiResponse: string | undefined;\r\n triggerFromJsonValue: string | undefined;\r\n replaceApiKeyFromField: string | undefined;\r\n fn: EventConfigFn | undefined = undefined;\r\n fnPromise: Promise<EventConfigFn> | undefined = undefined;\r\n afterFetchFn: EventConfigFn | undefined = undefined;\r\n afterFetchFnPromise: Promise<EventConfigFn> | undefined = undefined;\r\n triggerFn!: ActionTriggerFn;\r\n triggerFnPromise: Promise<ActionTriggerFn> | undefined = undefined;\r\n disableAfterFetching: boolean | undefined = false;\r\n disableAfterSetValue: boolean | undefined = false;\r\n\r\n constructor(action: any, loader: Loader) {\r\n this.operator = action.config?.operator;\r\n this.setValueFromApiResponse = action.config?.setValueFromApiResponse;\r\n this.setValueFromRequestDto = action.config?.setValueFromRequestDto;\r\n this.setValueFromLoggedInUser = action.config?.setValueFromLoggedInUser;\r\n this.setValueFromJsonValue = action.config?.setValueFromJsonValue;\r\n this.triggerFromApiResponse = action.config?.fromApiResponse;\r\n this.triggerFromJsonValue = action.config?.fromApiResponse;\r\n this.replaceApiKeyFromField = action.config?.replaceApiKeyFromField;\r\n this.disableAfterFetching = action.config?.disableAfterFetching ?? false;\r\n this.disableAfterSetValue = action.config?.disableAfterSetValue ?? false;\r\n\r\n if (action.config?.fn) {\r\n const fn = loader.loadService<EventConfigFn>(action.config.fn);\r\n if (fn) {\r\n this.fnPromise = fn();\r\n }\r\n }\r\n\r\n if (action.config?.afterFetchFn) {\r\n const fn = loader.loadService<EventConfigFn>(action.config.afterFetchFn);\r\n if (fn) {\r\n this.afterFetchFnPromise = fn();\r\n }\r\n }\r\n\r\n if (action.config?.triggerFn) {\r\n const fn = loader.loadService<ActionTriggerFn>(action.config.triggerFn);\r\n if (fn) {\r\n this.triggerFnPromise = fn();\r\n }\r\n }\r\n }\r\n}\r\n","import { EventStrategy } from \"../interfaces/event-strategy\";\r\nimport { Loader } from \"../services/loader\";\r\nimport { FieldActionConfig } from \"./field-action-config\";\r\n\r\nexport class FieldEvent {\r\n id: number;\r\n name: string;\r\n value: string;\r\n trackedFieldName: string;\r\n triggered: boolean;\r\n config: FieldActionConfig;\r\n fn: EventStrategy | undefined;\r\n fnPromise: Promise<EventStrategy> | undefined = undefined;\r\n\r\n constructor(action: any, loader: Loader) {\r\n this.id = action.id;\r\n this.name = action.name;\r\n this.value = action.value;\r\n this.trackedFieldName = action.eventSourceName;\r\n this.triggered = false;\r\n this.config = new FieldActionConfig(action, loader);\r\n const actionFn = loader.loadService<EventStrategy>(action.name);\r\n if (actionFn) {\r\n this.fnPromise = actionFn();\r\n }\r\n this.fn = undefined;\r\n }\r\n}\r\n","import { isSignal, signal, WritableSignal } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { Option } from \"iss-ctrl/base\";\nimport { Loader } from \"../services/loader\";\nimport { FieldAsyncValidation } from \"./field-async-validation\";\nimport { FieldConfig } from \"./field-config\";\nimport { FieldEvent } from \"./field-event\";\n\n/**\n * Runtime model of a single form field, built from the JSON definition returned by the API.\n *\n * It is what `iss-field-*` components inject through the `FIELD_DATA` token, and the object\n * field events read from and write to. Signal-valued members can be changed at runtime and\n * the rendered field reacts immediately.\n *\n * ### Properties\n * | Property | Type | Description |\n * | --- | --- | --- |\n * | `id` | `number` | Unique field id. |\n * | `name` | `string` | Control name inside the form group. |\n * | `type` | `string` | Key into the `COMPONENTS` index (`text_input`, `dropdown_list`, …). |\n * | `base` | `string` | Underlying data type of the field. |\n * | `label()` | `string` | Visible label. |\n * | `hint()` | `string` | Helper text under the field. |\n * | `options()` | `Option[]` | Choices for select, radio, checkbox and toggle fields. |\n * | `api()` | `string` | Endpoint used to load options or lookups. |\n * | `mode()` | `\"edit\" \\| \"view\"` | Renders the control or the read-only viewer. |\n * | `visible()` | `boolean` | Whether the field is rendered at all. |\n * | `loading()` | `boolean` | Shows the field's own loading state. |\n * | `config` | `FieldConfig` | Per-type configuration — see {@link FieldConfig}. |\n * | `validation` | `any` | Synchronous validation rules, exactly as the JSON declared them. |\n * | `validationFns` | `Record<string, Function>` | Validator factory behind each active rule, resolved by the outlet. |\n * | `asyncValidation` | `FieldAsyncValidation` | Remote validation rules. |\n * | `events` | `FieldEvent[]` | Cross-field reactions (show, hide, set value, …). |\n * | `children` | `IssField[]` | Nested fields, used by table and group fields. |\n * | `value` / `defaultValue` | `string` | Initial and fallback raw values. |\n * | `jsonValue` | `any` | Initial resolved value for controls with a rich payload. |\n * | `ctrlValue()` | `string \\| null` | Live raw value of the control. |\n * | `ctrlJsonValue()` | `any` | Live resolved value (selected options, files, users, …). |\n * | `response()` / `apiResponse` | `any` | Latest payload returned for this field. |\n */\nexport class IssField {\n id: number;\n name: string;\n type: string;\n base: string;\n label: WritableSignal<string> = signal(\"\");\n hint: WritableSignal<string> = signal(\"\");\n options: WritableSignal<Option[]> = signal([]);\n api: WritableSignal<string> = signal(\"\");\n mode: WritableSignal<\"edit\" | \"view\"> = signal(\"edit\");\n visible: WritableSignal<boolean>;\n wasVisible: WritableSignal<boolean> = signal(true);\n events: FieldEvent[];\n validation: any;\n // The lazily imported factory behind each active rule in `validation`, keyed by rule name.\n // The factories are kept beside the rules instead of inside them so `validation` stays the\n // object the JSON declared: what a rule says is the API's, how it is applied is ours.\n validationFns: Record<string, Function> = {};\n asyncValidation: FieldAsyncValidation;\n children: IssField[];\n apiResponse: BehaviorSubject<any> = new BehaviorSubject(null);\n response: WritableSignal<any> = signal(null);\n config: FieldConfig;\n value: string;\n jsonValue: any;\n defaultValue: string;\n ctrlValue: WritableSignal<string | null> = signal(null);\n ctrlJsonValue: WritableSignal<any> = signal(null);\n loading: WritableSignal<boolean> = signal(false);\n\n constructor(field: any, loader: Loader) {\n this.id = field.id;\n this.name = field.name;\n this.type = field.type;\n this.base = field.base;\n\n if (isSignal(field.label)) {\n this.label = field.label;\n } else {\n this.label = signal(field.label ?? field.title);\n }\n\n if (isSignal(field.hint)) {\n this.hint = field.hint;\n } else {\n this.hint = signal(field.hint);\n }\n\n if (isSignal(field.options)) {\n this.options = field.options ?? [];\n } else {\n this.options = signal(field.options ?? []);\n }\n\n if (isSignal(field.api)) {\n this.api = field.api;\n } else {\n this.api = signal(field.api);\n }\n\n field.mode = field.mode ?? \"edit\";\n if (isSignal(field.mode)) {\n this.mode = field.mode;\n } else {\n this.mode = signal(field.mode);\n }\n\n if (!field.events) {\n field.events = [];\n }\n\n // this.mode() and not field.mode: the caller may have passed a signal\n this.visible = signal(!field.events.some((obj: any) => obj.name === \"show\" && this.mode() === \"edit\"));\n this.events = field.events.map((action: any) => new FieldEvent(action, loader));\n this.validation = field.validation;\n this.asyncValidation = new FieldAsyncValidation(field.asyncValidation);\n this.children = field.children;\n this.config = new FieldConfig(field.config);\n this.value = field?.value;\n this.ctrlValue.set(field.value);\n this.ctrlJsonValue.set(field?.jsonValue);\n this.loading.set(field?.loading ?? false);\n this.defaultValue = field?.defaultValue;\n this.jsonValue = field?.jsonValue;\n this.apiResponse = new BehaviorSubject(null);\n }\n\n updateVisibility(value: boolean) {\n this.wasVisible.set(this.visible());\n this.visible.set(value);\n }\n}\n","import { DynamicImport } from \"../interfaces/import\";\r\n\r\nexport const VALIDATORS: DynamicImport<Function> = {\r\n required: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.required),\r\n max: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.max),\r\n min: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.min),\r\n requiredTrue: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.requiredTrue),\r\n email: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.email),\r\n minLength: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.minLength),\r\n maxLength: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.maxLength),\r\n pattern: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.pattern),\r\n regExp: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.pattern),\r\n nullValidator: () => import(\"../../validators/core.validator\").then((c) => c.IssValidators.null),\r\n beforeDate: () => import(\"../../validators/time.validator\").then((c) => c.TimeValidator.beforeDate),\r\n afterDate: () => import(\"../../validators/time.validator\").then((c) => c.TimeValidator.afterDate),\r\n within: () => import(\"../../validators/time.validator\").then((c) => c.TimeValidator.afterDate),\r\n maxFilesCount: () => import(\"../../validators/file.validator\").then((c) => c.FileValidators.maxCount),\r\n minFilesCount: () => import(\"../../validators/file.validator\").then((c) => c.FileValidators.minCount),\r\n fileSize: () => import(\"../../validators/file.validator\").then((c) => c.FileValidators.size),\r\n fileType: () => import(\"../../validators/file.validator\").then((c) => c.FileValidators.type),\r\n};\r\n\r\n/**\r\n * Whether a rule in a field's `validation` is switched on.\r\n *\r\n * The rule's value is the argument its validator is built with, so it is also what says\r\n * whether the rule applies at all: `{ \"required\": false }` is an optional field, not a\r\n * required one, and a rule the API left out or sent as null is off the same way. Values\r\n * that are falsy but meaningful — `0`, `\"\"` — are rules, so only the three off states are\r\n * rejected here.\r\n */\r\nexport function isActiveValidationRule(value: unknown): boolean {\r\n return value !== undefined && value !== null && value !== false;\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { AbstractControl, AsyncValidatorFn, FormGroup, ValidatorFn, Validators } from \"@angular/forms\";\r\nimport { map, merge, Observable, of } from \"rxjs\";\r\nimport { FieldAsyncValidation } from \"../classes/field-async-validation\";\r\nimport { FieldEvent } from \"../classes/field-event\";\r\nimport { IssField } from \"../classes/iss-field\";\r\nimport { isActiveValidationRule } from \"../indexes/validators.index\";\r\nimport { FieldChange } from \"../interfaces/event-strategy\";\r\n\r\ninterface OutletRegistration {\r\n fields: IssField[];\r\n expectedFieldNames: string[];\r\n}\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class FormEngine {\r\n // Fields are stored per host FormGroup, never on the service itself: a single root\r\n // FormEngine serves every form on the page, including the nested outlet that\r\n // iss-field-table renders against its own tableOutletForm.\r\n // The outer WeakMap lets a form's entry be collected with the form. The inner Map is\r\n // keyed by the outlet that registered them, so several outlets can share one host form\r\n // without overwriting each other, and re-registering the same outlet replaces its own\r\n // contribution instead of accumulating stale entries.\r\n readonly #registry: WeakMap<FormGroup, Map<object, OutletRegistration>> = new WeakMap<FormGroup, Map<object, OutletRegistration>>();\r\n\r\n registerFields(form: FormGroup, owner: object, fields: IssField[]): void {\r\n this.#registration(form, owner).fields = fields;\r\n }\r\n\r\n // The names an outlet expects to see as controls on the host form. An outlet is ready\r\n // once every one of them has been added, so this is registered up front in ngOnInit,\r\n // before the fields themselves resolve.\r\n registerExpectedFieldNames(form: FormGroup, owner: object, names: string[]): void {\r\n this.#registration(form, owner).expectedFieldNames = names;\r\n }\r\n\r\n unregisterOutlet(form: FormGroup, owner: object): void {\r\n const owners: Map<object, OutletRegistration> | undefined = this.#registry.get(form);\r\n if (!owners) {\r\n return;\r\n }\r\n owners.delete(owner);\r\n if (!owners.size) {\r\n this.#registry.delete(form);\r\n }\r\n }\r\n\r\n getFields(form: FormGroup): IssField[] {\r\n return this.#registrations(form).map((registration: OutletRegistration) => registration.fields).flat();\r\n }\r\n\r\n getExpectedFieldNames(form: FormGroup): string[] {\r\n const names: string[] = this.#registrations(form).map((registration: OutletRegistration) => registration.expectedFieldNames).flat();\r\n return Array.from(new Set(names));\r\n }\r\n\r\n // Searches nested children too, so a field inside a table can be found from the form\r\n // that hosts the table.\r\n getField(form: FormGroup, name: string, fields: IssField[] = this.getFields(form)): IssField | undefined {\r\n const match: IssField | undefined = fields.find((field: IssField) => field.name === name);\r\n if (match) {\r\n return match;\r\n }\r\n return fields\r\n .filter((field: IssField) => field.children?.length)\r\n .reduce((found: IssField | undefined, field: IssField) => found ?? this.getField(form, name, field.children), undefined);\r\n }\r\n\r\n getControlValue(form: FormGroup, name: string) {\r\n const ctrlValue = form.get(name)?.getRawValue();\r\n if (ctrlValue !== null && ctrlValue !== undefined && ctrlValue !== \"\") {\r\n return ctrlValue;\r\n }\r\n return this.getField(form, name)?.value;\r\n }\r\n\r\n createValidators(field: IssField): ValidatorFn[] {\r\n if (!this.fieldHasValidation(field)) {\r\n return [Validators.nullValidator];\r\n }\r\n return this.#validatorsToNgValidators(field);\r\n }\r\n\r\n createAsyncValidators(field: IssField): AsyncValidatorFn[] {\r\n if (!(field && field.asyncValidation)) {\r\n return [];\r\n }\r\n return this.#asyncValidatorsToNgValidators(field) as AsyncValidatorFn[];\r\n }\r\n\r\n getFieldValue(field: IssField) {\r\n let fieldValue = field.value;\r\n if (field.value === undefined && field.defaultValue) {\r\n fieldValue = field.defaultValue;\r\n }\r\n return fieldValue ?? null;\r\n }\r\n\r\n trackChangesEvents(field: IssField, form: FormGroup): Observable<FieldChange> {\r\n const changes$: Observable<FieldChange>[] = [];\r\n const masterNames: Set<string> = new Set();\r\n field.events.forEach((action: FieldEvent) => {\r\n this.processTrackChanges(action.trackedFieldName, masterNames, changes$, field, form);\r\n });\r\n return merge(...changes$);\r\n }\r\n\r\n trackChangesValidations(field: IssField, form: FormGroup): Observable<FieldChange> {\r\n const changes$: Observable<FieldChange>[] = [];\r\n const masterNames: Set<string> = new Set();\r\n // A rule that names another field — `beforeDate`, say — carries that name as its value, and\r\n // `processTrackChanges` ignores every value that is not a string.\r\n const iterateOn = Object.entries(field.validation ?? {});\r\n iterateOn.forEach((validationObj: any) => {\r\n this.processTrackChanges(validationObj[1], masterNames, changes$, field, form);\r\n });\r\n return merge(...changes$);\r\n }\r\n\r\n processTrackChanges(masterName: any, masterNames: Set<string>, changes$: Observable<FieldChange>[], field: IssField, form: FormGroup) {\r\n if (typeof masterName !== \"string\") {\r\n return;\r\n }\r\n\r\n const masterCtrl: AbstractControl | null = form.get(masterName);\r\n const masterField: IssField | undefined = this.getField(form, masterName);\r\n\r\n if (!masterField) {\r\n return;\r\n }\r\n\r\n if (!masterCtrl) {\r\n return;\r\n }\r\n\r\n if (masterNames.has(masterName)) {\r\n return;\r\n }\r\n\r\n masterNames.add(masterName);\r\n // if the field tracks itself, will not subscribe to value changes, it avoids infinite loops\r\n if (field.name === masterName) {\r\n changes$.push(of({\r\n trackedField: masterField,\r\n trackedControl: masterCtrl,\r\n value: masterCtrl.value\r\n }));\r\n } else {\r\n changes$.push(this.#mapMasterFieldValueChangesToFieldChanges(masterField, masterCtrl));\r\n }\r\n }\r\n\r\n // A field carries validation only where a rule is actually switched on: one sent as `false`\r\n // or `null` says the field is free of it, so it counts for nothing here.\r\n fieldHasValidation(field: IssField): boolean {\r\n return !!field.validation && Object.values(field.validation).some(isActiveValidationRule);\r\n }\r\n\r\n fieldHasAsyncValidation(field: IssField): boolean {\r\n return !!(field.asyncValidation && Object.values(field.asyncValidation).filter((v) => v).length);\r\n }\r\n\r\n isFormValid(form: FormGroup, fields: IssField[]) {\r\n return fields.map((childField: IssField) => {\r\n const currentCtrl = form.get(childField.name);\r\n if (isActiveValidationRule(childField.validation?.required) && childField.visible() && childField.mode() === \"edit\" && currentCtrl?.status !== \"DISABLED\") {\r\n return currentCtrl?.valid;\r\n }\r\n return true;\r\n }).every((status) => status);\r\n }\r\n\r\n #registrations(form: FormGroup): OutletRegistration[] {\r\n const owners: Map<object, OutletRegistration> | undefined = this.#registry.get(form);\r\n if (!owners) {\r\n return [];\r\n }\r\n return Array.from(owners.values());\r\n }\r\n\r\n #registration(form: FormGroup, owner: object): OutletRegistration {\r\n let owners: Map<object, OutletRegistration> | undefined = this.#registry.get(form);\r\n if (!owners) {\r\n owners = new Map<object, OutletRegistration>();\r\n this.#registry.set(form, owners);\r\n }\r\n let registration: OutletRegistration | undefined = owners.get(owner);\r\n if (!registration) {\r\n registration = { fields: [], expectedFieldNames: [] };\r\n owners.set(owner, registration);\r\n }\r\n return registration;\r\n }\r\n\r\n // Builds each switched-on rule into its validator, out of the value the rule was given:\r\n // `{ \"minLength\": 3 }` is what makes the validator refuse two characters, and `{ \"required\":\r\n // false }` builds nothing at all. The field rides along as the second argument for the rules\r\n // that need their neighbours — `beforeDate` and friends — and is ignored by the rest.\r\n // A rule whose factory never resolved is skipped rather than called.\r\n #validatorsToNgValidators(field: IssField): ValidatorFn[] {\r\n return Object.entries(field.validation ?? {})\r\n .filter(([key, value]) => isActiveValidationRule(value) && typeof field.validationFns?.[key] === \"function\")\r\n .map(([key, value]): ValidatorFn => field.validationFns[key](value, field));\r\n }\r\n\r\n #mapNgValidators(validationObj: FieldAsyncValidation | any): ValidatorFn[] {\r\n return Object.entries((validationObj ? validationObj : {}))\r\n .filter((validationObj) => validationObj[1] !== undefined)\r\n .map((validationObj): ValidatorFn => <ValidatorFn>validationObj[1]);\r\n }\r\n\r\n #asyncValidatorsToNgValidators(field: IssField): AsyncValidatorFn[] {\r\n return this.#mapNgValidators(field.asyncValidation).map((validatorValue: any) => validatorValue?.fn(field));\r\n }\r\n\r\n #mapMasterFieldValueChangesToFieldChanges(masterField: IssField, masterCtrl: AbstractControl): Observable<FieldChange> {\r\n return masterCtrl.valueChanges.pipe(\r\n map((value: string): FieldChange => {\r\n return {\r\n trackedField: masterField,\r\n trackedControl: masterCtrl,\r\n value: value,\r\n };\r\n })\r\n );\r\n }\r\n}\r\n","import { Type } from \"@angular/core\";\nimport { DynamicImport } from \"../interfaces/import\";\n\n/**\n * Maps a field's `type` to the `iss-field-*` component that renders it.\n *\n * The outlet looks the field up here and lazy-loads the component, so a `type` that is not\n * a key of this object renders nothing. Hover a field class for the `config` keys it reads.\n *\n * | `type` | Component | Control | Renders |\n * | --- | --- | --- | --- |\n * | `text_input` | `InputField` | `iss-ctrl-input` | Single line text, number, email, password. |\n * | `textarea` | `TextareaField` | `iss-ctrl-textarea` | Multi line free text. |\n * | `dropdown_list` | `SelectField` | `iss-ctrl-select` | Searchable single/multi select. |\n * | `toggle_button` | `ToggleButtonField` | `iss-ctrl-toggle-button` | Options as a button group. |\n * | `checkbox` | `CheckboxField` | `iss-ctrl-checkbox` | Multi choice checkbox list. |\n * | `radio` | `RadioField` | `iss-ctrl-radio` | Single choice radio list. |\n * | `date` | `DatePickerField` | `iss-ctrl-date-picker` | A single date. |\n * | `time` | `TimePickerField` | `iss-ctrl-time-picker` | A time of day. |\n * | `datetime` | `DatetimePickerField` | `iss-ctrl-datetime-picker` | Date and time together. |\n * | `date_range` | `DateRangePickerField` | `iss-ctrl-date-range-picker` | A start/end date range. |\n * | `attachment` | `FilePickerField` | `iss-ctrl-file-picker` | File upload. |\n * | `userPicker` | `UserPickerField` | `iss-ctrl-select` | Employee lookup. |\n * | `vehicle_plate` | `PlateField` | `iss-ctrl-plate-number` | Saudi vehicle plate. |\n * | `enrichment` | `NoteField` | — | Read-only explanatory text. |\n * | `mobile` | `MobileField` | `iss-ctrl-mobile` | International phone number. |\n * | `table` | `TableField` | `iss-ctrl-table` | Repeatable rows built from `children`. |\n * | `chips` | `ChipsField` | `iss-ctrl-chips` | Free text as removable chips. |\n * | `switch` | `SlideToggleField` | `iss-ctrl-slide-toggle` | Boolean on/off switch. |\n */\nexport const COMPONENTS: DynamicImport<Type<any>> = {\n text_input: () => import(\"../../components/controls/input/input.field\").then((c) => c.InputField),\n textarea: () => import(\"../../components/controls/textarea/textarea.field\").then((c) => c.TextareaField),\n\n dropdown_list: () => import(\"../../components/controls/select/select.field\").then((c) => c.SelectField),\n toggle_button: () => import(\"../../components/controls/toggle-button/toggle-button.field\").then((c) => c.ToggleButtonField),\n checkbox: () => import(\"../../components/controls/checkbox/checkbox.field\").then((c) => c.CheckboxField),\n radio: () => import(\"../../components/controls/radio/radio.field\").then((c) => c.RadioField),\n\n date: () => import(\"../../components/controls/date-picker/date-picker.field\").then((c) => c.DatePickerField),\n time: () => import(\"../../components/controls/time-picker/time-picker.field\").then((c) => c.TimePickerField),\n datetime: () => import(\"../../components/controls/datetime-picker/datetime-picker.field\").then((c) => c.DatetimePickerField),\n date_range: () => import(\"../../components/controls/date-range-picker/date-range-picker.field\").then((c) => c.DateRangePickerField),\n\n attachment: () => import(\"../../components/controls/file-picker/file-picker.field\").then((c) => c.FilePickerField),\n\n userPicker: () => import(\"../../components/controls/user-picker/user-picker.field\").then((c) => c.UserPickerField),\n\n vehicle_plate: () => import(\"../../components/controls/plate/plate.field\").then((c) => c.PlateField),\n\n enrichment: () => import(\"../../components/controls/note/note.field\").then((c) => c.NoteField),\n\n mobile: () => import(\"../../components/controls/mobile/mobile.field\").then((c) => c.MobileField),\n\n table: () => import(\"../../components/controls/table/table.field\").then((c) => c.TableField),\n\n chips: () => import(\"../../components/controls/chips/chips.field\").then((c) => c.ChipsField),\n\n switch: () => import(\"../../components/controls/slide-toggle/slide-toggle.field\").then((c) => c.SlideToggleField),\n};\n","import { Type } from \"@angular/core\";\r\nimport { DynamicImport } from \"../interfaces/import\";\r\n\r\nexport const SERVICES: DynamicImport<Type<any>> = {\r\n setValue: () => import(\"../../events/set-value/set-value-event\").then((s) => s.SetValueEvent),\r\n show: () => import(\"../../events/show/show-event\").then((s) => s.ShowEvent),\r\n load: () => import(\"../../events/load/load-value-event\").then((s) => s.LoadValueEvent),\r\n loadOptions: () => import(\"../../events/load/load-options-event\").then((s) => s.LoadOptionsEvent),\r\n triggerBasedOnJsonValue: () => import(\"../../events/triggers/trigger-based-on-json-value\").then((s) => s.TriggerBasedOnJsonValue),\r\n replaceApiKeyDefaultImpl: () => import(\"../../events/load/replace-api-keys\").then((s) => s.ReplaceApiKeys),\r\n};\r\n","import { Type } from \"@angular/core\";\nimport { DynamicImport } from \"../interfaces/import\";\n\n// Read-only counterpart of COMPONENTS: the component used to render a field's value\n// without an editable control, keyed by the same field types.\nexport const VIEWERS: DynamicImport<Type<any>> = {\n date: () => import(\"../../components/controls/date-picker/date-picker.viewer\").then((c) => c.DatePickerViewer),\n datetime: () => import(\"../../components/controls/datetime-picker/datetime-picker.viewer\").then((c) => c.DatePickerTimeViewer),\n dateRange: () => import(\"../../components/controls/date-range-picker/date-range-picker.viewer\").then((c) => c.DateRangePickerViewer),\n date_range: () => import(\"../../components/controls/date-range-picker/date-range-picker.viewer\").then((c) => c.DateRangePickerViewer),\n select: () => import(\"../../components/controls/select/select.viewer\").then((c) => c.SelectViewer),\n input: () => import(\"../../components/controls/input/input.viewer\").then((c) => c.InputViewer),\n text: () => import(\"../../components/controls/input/input.viewer\").then((c) => c.InputViewer),\n checkbox: () => import(\"../../components/controls/checkbox/checkbox.viewer\").then((c) => c.CheckboxViewer),\n file: () => import(\"../../components/controls/file-picker/attachment.viewer\").then((c) => c.AttachmentViewer),\n file2: () => import(\"../../components/controls/file-picker/attachment.viewer\").then((c) => c.AttachmentViewer),\n radio: () => import(\"../../components/controls/radio/radio.viewer\").then((c) => c.RadioViewer),\n textarea: () => import(\"../../components/controls/textarea/textarea.viewer\").then((c) => c.TextareaViewer),\n chips: () => import(\"../../components/controls/chips/chips.viewer\").then((c) => c.ChipsViewer),\n plate: () => import(\"../../components/controls/plate/plate.viewer\").then((c) => c.PlateViewer),\n slideToggle: () => import(\"../../components/controls/slide-toggle/slide-toggle.viewer\").then((c) => c.SlideToggleViewer),\n toggle: () => import(\"../../components/controls/toggle-button/toggle-button.viewer\").then((c) => c.ToggleButtonViewer),\n time: () => import(\"../../components/controls/time-picker/time-picker.viewer\").then((c) => c.TimePickerViewer),\n mobile: () => import(\"../../components/controls/mobile/mobile.viewer\").then((c) => c.MobileViewer),\n};\n","import { inject, Injectable, Injector, Type } from \"@angular/core\";\r\nimport { from, Observable, of, tap } from \"rxjs\";\r\nimport { IssField } from \"../classes/iss-field\";\r\nimport { COMPONENTS } from \"../indexes/components.index\";\r\nimport { SERVICES } from \"../indexes/services.index\";\r\nimport { VIEWERS } from \"../indexes/viewers.index\";\r\n\r\n@Injectable({ providedIn: \"root\" })\r\nexport class Loader {\r\n #injector: Injector = inject(Injector);\r\n #loadedComponents: Map<string, Type<any>> = new Map();\r\n #loadedViewers: Map<string, Type<any>> = new Map();\r\n #loadedServices: Map<string, <T>() => Promise<T>> = new Map();\r\n\r\n loadComponent(field: IssField): Observable<Type<any> | null> {\r\n const loadedComponent: Type<any> | undefined = this.#loadedComponents.get(field.type);\r\n if (loadedComponent) {\r\n return of(loadedComponent);\r\n }\r\n\r\n const componentImportFn = COMPONENTS[field.type];\r\n if (!componentImportFn) {\r\n return of(null);\r\n }\r\n\r\n return this.#createObservableFromPromise(componentImportFn, field.type, this.#loadedComponents);\r\n }\r\n\r\n loadViewer(type: string): Observable<Type<any> | null> {\r\n const loadedViewer: Type<any> | undefined = this.#loadedViewers.get(type);\r\n if (loadedViewer) {\r\n return of(loadedViewer);\r\n }\r\n\r\n const viewerImportFn = VIEWERS[type];\r\n if (!viewerImportFn) {\r\n return of(null);\r\n }\r\n\r\n return this.#createObservableFromPromise(viewerImportFn, type, this.#loadedViewers);\r\n }\r\n\r\n loadService<T>(serviceName: string): undefined | (() => Promise<T>) {\r\n const loadedService: (<T>() => Promise<T>) | undefined = this.#loadedServices.get(serviceName);\r\n if (loadedService) {\r\n return loadedService;\r\n }\r\n if (!SERVICES[serviceName]) {\r\n // throw new Error(`Service ${serviceName} not found`);\r\n return undefined;\r\n }\r\n return () => SERVICES[serviceName]()\r\n .then((serviceClass: Type<any>) => this.#injector.get(serviceClass))\r\n .then((loadedService) => {\r\n this.#loadedServices.set(serviceName, () => loadedService);\r\n return loadedService;\r\n });\r\n }\r\n\r\n #createObservableFromPromise(componentImportFn: () => Promise<Type<any>>, type: string, cache: Map<string, Type<any>>): Observable<Type<any>> {\r\n return from(componentImportFn()).pipe(\r\n tap((component: Type<any>) => {\r\n cache.set(type, component);\r\n })\r\n );\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { IssField } from \"../classes/iss-field\";\r\n\r\nexport const FIELD_DATA: InjectionToken<IssField> = new InjectionToken(\"Form Field Data\");\r\n","import { inject, Injector, Pipe, PipeTransform } from \"@angular/core\";\r\nimport { IssField } from \"../../shared/classes/iss-field\";\r\nimport { FIELD_DATA } from \"../../shared/tokens/field.token\";\r\n\r\n@Pipe({name: \"FieldDataInjector\"})\r\nexport class FieldDataInjector implements PipeTransform {\r\n injector: Injector = inject(Injector);\r\n\r\n transform(field: IssField | null): Injector {\r\n return Injector.create({\r\n parent: this.injector,\r\n providers: [\r\n {\r\n provide: FIELD_DATA,\r\n useValue: field,\r\n },\r\n ],\r\n });\r\n }\r\n}\r\n","import { AsyncPipe, NgComponentOutlet } from \"@angular/common\";\r\nimport { ChangeDetectionStrategy, Component, DestroyRef, effect, EffectRef, inject, input, InputSignal, OnDestroy, OnInit, output, OutputEmitterRef, signal, WritableSignal } from \"@angular/core\";\r\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\r\nimport { ControlContainer, FormGroup } from \"@angular/forms\";\r\nimport { debounceTime, first, map } from \"rxjs\";\r\nimport { IssField } from \"../../shared/classes/iss-field\";\r\nimport { isActiveValidationRule, VALIDATORS } from \"../../shared/indexes/validators.index\";\r\nimport { FormEngine } from \"../../shared/services/form-engine\";\r\nimport { Loader } from \"../../shared/services/loader\";\r\nimport { ComponentOutlet } from \"./component-outlet\";\r\nimport { FieldDataInjector } from \"./field-data-injector\";\r\n\r\n@Component({\r\n selector: \"iss-form-outlet\",\r\n imports: [\r\n NgComponentOutlet,\r\n FieldDataInjector,\r\n AsyncPipe,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n @if (components() && components()?.length) {\r\n @for (component of components(); track $index) {\r\n <ng-container\r\n [ngComponentOutlet]=\"component.self$ | async\"\r\n [ngComponentOutletInjector]=\"component.data | FieldDataInjector\"\r\n [ngComponentOutletInputs]=\"{formReady: formReady(), issField: component.data | FieldDataInjector}\"\r\n />\r\n }\r\n }\r\n `,\r\n styles: `\r\n :host {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 2rem;\r\n }\r\n `\r\n})\r\nexport class Outlet implements OnInit, OnDestroy {\r\n ready: OutputEmitterRef<boolean> = output();\r\n formReady: WritableSignal<boolean> = signal(false);\r\n fields: InputSignal<IssField[]> = input.required<IssField[]>();\r\n components: WritableSignal<ComponentOutlet[] | null> = signal(null);\r\n #controlContainer: ControlContainer = inject(ControlContainer);\r\n #destroyRef: DestroyRef = inject(DestroyRef);\r\n #formEngine: FormEngine = inject(FormEngine);\r\n #loader: Loader = inject(Loader);\r\n #effectRef: EffectRef = effect((onCleanup) => {\r\n // Dynamic imports cannot be canceled, but an old result must never replace\r\n // the components produced for a newer fields input (or a destroyed outlet).\r\n let active: boolean = true;\r\n onCleanup(() => {\r\n active = false;\r\n });\r\n\r\n // Remove the previous outlet immediately. This destroys its field components\r\n // (which remove their controls in ngOnDestroy) and prevents A's metadata from\r\n // being returned while B is still loading.\r\n this.components.set(null);\r\n this.#formEngine.registerFields(this.hostFormGroup, this, []);\r\n\r\n void this.#componentsFactory(this.fields()).then((components: ComponentOutlet[]) => {\r\n if (!active) {\r\n return;\r\n }\r\n this.components.set(components);\r\n this.#formEngine.registerFields(this.hostFormGroup, this, components.map((component: ComponentOutlet) => component.data));\r\n });\r\n });\r\n\r\n get hostFormGroup(): FormGroup {\r\n return this.#controlContainer.control as FormGroup;\r\n }\r\n\r\n ngOnInit() {\r\n const expectedFieldNames: string[] = this.fields()\r\n .filter((f: IssField) => f.mode() === \"edit\" || (f.mode() === \"view\" && f.value))\r\n .map((f: IssField) => f.name);\r\n this.#formEngine.registerExpectedFieldNames(this.hostFormGroup, this, expectedFieldNames);\r\n\r\n this.#listenToHostFormGroupChanges().pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((isReady) => {\r\n if (isReady) {\r\n this.formReady.set(true);\r\n this.ready.emit(true);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#effectRef.destroy();\r\n this.#formEngine.unregisterOutlet(this.hostFormGroup, this);\r\n }\r\n\r\n async #componentsFactory(fields: IssField[]): Promise<ComponentOutlet[]> {\r\n const fieldsComponentPromise = fields.map(async (field: IssField): Promise<ComponentOutlet> => {\r\n return {\r\n self$: this.#loader.loadComponent(field),\r\n data: await this.#initField(field)\r\n };\r\n });\r\n return await Promise.all(fieldsComponentPromise);\r\n }\r\n\r\n /*todo needs refactoring to be in the issField class*/\r\n\r\n async #initField(field: any): Promise<IssField> {\r\n const f: IssField = new IssField(field, this.#loader);\r\n\r\n await Promise.all([\r\n this.#loadFieldEvents(f),\r\n this.#loadFieldValidation(f)\r\n ]);\r\n\r\n return f;\r\n }\r\n\r\n async #loadFieldEvents(f: IssField): Promise<void> {\r\n if (!f.events?.length) return;\r\n\r\n await Promise.all(\r\n f.events.map(async (action) => {\r\n const [fn, triggerFn, configFn] = await Promise.all([\r\n action.fnPromise,\r\n action.config.triggerFnPromise,\r\n action.config.fnPromise\r\n ]);\r\n\r\n action.fn = fn;\r\n if (triggerFn) {\r\n action.config.triggerFn = triggerFn;\r\n }\r\n action.config.fn = configFn;\r\n })\r\n );\r\n }\r\n\r\n // Resolves the validator behind every rule the field switched on. `validation` itself is left\r\n // exactly as it arrived — the caller's own object, which it may still read and re-render — so\r\n // the factories land in `validationFns` and the rules keep the values they were given.\r\n // A rule that is off carries no validator: nothing is imported for it and nothing is built\r\n // from it, which is what makes `{ \"required\": false }` an optional field.\r\n async #loadFieldValidation(f: IssField): Promise<void> {\r\n if (!f.validation) return;\r\n\r\n const validationEntries = Object.entries(f.validation).filter(\r\n ([key, validation]) => {\r\n if (VALIDATORS[key] === undefined) {\r\n console.error(`${key} not found`);\r\n return false;\r\n }\r\n return isActiveValidationRule(validation);\r\n }\r\n );\r\n\r\n await Promise.all(\r\n validationEntries.map(async ([key]) => {\r\n f.validationFns[key] = await VALIDATORS[key]();\r\n })\r\n );\r\n }\r\n\r\n #listenToHostFormGroupChanges() {\r\n return this.hostFormGroup.valueChanges.pipe(\r\n debounceTime(500),\r\n map(() => {\r\n const controlNames = Object.keys(this.hostFormGroup.getRawValue());\r\n const fieldNames: string[] = this.#formEngine.getExpectedFieldNames(this.hostFormGroup);\r\n const diff = fieldNames.filter((x: string) => !controlNames.includes(x));\r\n return diff.length === 0;\r\n }),\r\n first((v) => v)\r\n );\r\n }\r\n}\r\n","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\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class EventTrigger implements ActionTriggerFn {\r\n isTriggered(field: IssField, change: FieldChange, action: FieldEvent, masterField?: IssField): boolean {\r\n if (field.name === action.trackedFieldName) {\r\n return true;\r\n }\r\n return action.value.split(\",\").some((actionValue: string) => {\r\n if (actionValue === \"*\" && change.value !== null && change.value !== undefined) {\r\n return true;\r\n }\r\n\r\n if (!change) {\r\n return false;\r\n }\r\n\r\n if (change.value === null || change.value === undefined) {\r\n return false;\r\n }\r\n\r\n const changeValueArray: string[] = change?.value.toString().split(\",\").map((val) => val.trim());\r\n return (changeValueArray?.includes(actionValue.trim()));\r\n });\r\n }\r\n}\r\n","import { inject, 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 { EventTrigger } from \"./event-trigger\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class EventTriggerManager {\r\n actionTriggerService = inject(EventTrigger);\r\n\r\n async getActionsToBeTriggered(field: IssField, change: FieldChange): Promise<FieldEvent[]> {\r\n const actionsToBeTriggered: FieldEvent[] = [];\r\n for (const action of field.events) {\r\n /* todo remove await from array and use allSettle instead or any other solution */\r\n const isTruthy = await this.#filterCondition(field, action, change);\r\n if (isTruthy) {\r\n actionsToBeTriggered.push(action);\r\n }\r\n }\r\n return actionsToBeTriggered;\r\n }\r\n\r\n async getActionsToBeReverted(field: IssField, change: FieldChange): Promise<FieldEvent[]> {\r\n const actionsToBeReverted: FieldEvent[] = [];\r\n for (const action of field.events) {\r\n if (action.trackedFieldName !== change.trackedField.name) {\r\n /* todo remove await from array and use allSettle instead or any other solution */\r\n const isTruthy = await this.#filterCondition(field, action, change);\r\n\r\n if (!isTruthy && action.triggered) {\r\n actionsToBeReverted.push(action);\r\n }\r\n }\r\n }\r\n return actionsToBeReverted;\r\n }\r\n\r\n async #filterCondition(field: IssField, action: FieldEvent, change: FieldChange) {\r\n let triggerFn: ActionTriggerFn = action.config.triggerFn;\r\n if (!triggerFn && action.config.triggerFnPromise) {\r\n triggerFn = await action.config.triggerFnPromise;\r\n }\r\n\r\n if (triggerFn) {\r\n return triggerFn.isTriggered(field, change, action);\r\n }\r\n\r\n return this.actionTriggerService.isTriggered(field, change, action);\r\n }\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { AbstractControl, FormGroup } from \"@angular/forms\";\r\nimport { FieldEvent } from \"../shared/classes/field-event\";\r\nimport { IssField } from \"../shared/classes/iss-field\";\r\nimport { EventArgument, EventStrategy, FieldChange } from \"../shared/interfaces/event-strategy\";\r\nimport { EventTriggerManager } from \"./triggers/event-trigger-manager\";\r\n\r\n@Injectable({providedIn: \"root\"})\r\nexport class EventHandler {\r\n #actionTriggerManager: EventTriggerManager = inject(EventTriggerManager);\r\n\r\n async fire(control: AbstractControl, form: FormGroup, field: IssField, change: FieldChange) {\r\n let actions: FieldEvent[] = await this.#actionTriggerManager.getActionsToBeTriggered(field, change);\r\n /* todo need to follow up on actions on this field (self) */\r\n for (let i = 0; i < actions.length; i++) {\r\n let evt: EventStrategy | undefined = actions[i].fn;\r\n if (!evt) {\r\n /* todo remove await from array and use allSettle instead or any other solution */\r\n evt = await actions[i].fnPromise;\r\n }\r\n const args: EventArgument = this.#fieldEventArgumentFactory(control, form, field, change, actions[i]);\r\n evt?.fire(args);\r\n }\r\n }\r\n\r\n async revert(control: AbstractControl, form: FormGroup, field: IssField, change: FieldChange) {\r\n const actions: FieldEvent[] = await this.#actionTriggerManager.getActionsToBeReverted(field, change);\r\n for (let i = 0; i < actions.length; i++) {\r\n let evt: EventStrategy | undefined = actions[i].fn;\r\n if (!evt) {\r\n evt = await actions[i].fnPromise;\r\n }\r\n const args: EventArgument = this.#fieldEventArgumentFactory(control, form, field, change, actions[i]);\r\n evt?.revert(args);\r\n }\r\n }\r\n\r\n #fieldEventArgumentFactory(control: AbstractControl, form: FormGroup, field: IssField, change: FieldChange, action: FieldEvent): EventArgument {\r\n return {\r\n action,\r\n change,\r\n control,\r\n field,\r\n form\r\n };\r\n }\r\n}\r\n","import { Component, DestroyRef, effect, EffectRef, inject, input, InputSignal, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { takeUntilDestroyed, toSignal } from \"@angular/core/rxjs-interop\";\r\nimport { ControlContainer, FormControl, FormGroup, ReactiveFormsModule } from \"@angular/forms\";\r\nimport { EventHandler } from \"../../../events/event-handler\";\r\nimport { IssField } from \"../../../shared/classes/iss-field\";\r\nimport { FieldChange } from \"../../../shared/interfaces/event-strategy\";\r\nimport { FormEngine } from \"../../../shared/services/form-engine\";\r\nimport { FIELD_DATA } from \"../../../shared/tokens/field.token\";\r\n\r\n/**\r\n * Base class for every `iss-field-*` field.\r\n *\r\n * A field is the form-engine layer around a control: it reads its whole configuration from\r\n * the injected {@link IssField} (label, options, config, validation, events), registers its\r\n * `FormControl` on the parent `FormGroup` on init and removes it again on destroy, and\r\n * switches between the control (`mode() === \"edit\"`) and the viewer (`mode() === \"view\"`).\r\n *\r\n * ### Inputs\r\n * | Property | Type | Description |\r\n * | --- | --- | --- |\r\n * | `issField` | `IssField` | **Required.** The field definition; also provided through the `FIELD_DATA` token. |\r\n * | `formReady` | `boolean \\| undefined` | Set by the outlet once the whole form exists; gates event wiring. |\r\n *\r\n * ### Properties available on `field`\r\n * `name` · `type` · `base` · `label()` · `hint()` · `options()` · `api()` · `mode()` ·\r\n * `visible()` · `loading()` · `value` · `jsonValue` · `defaultValue` · `ctrlValue()` ·\r\n * `ctrlJsonValue()` · `events` · `validation` · `asyncValidation` · `children` ·\r\n * `response()` · `config` — see {@link IssField} and {@link FieldConfig}.\r\n *\r\n * Fields are not used directly in templates; the outlet resolves them from the field `type`\r\n * through the `COMPONENTS` index.\r\n */\r\n@Component({\r\n template: ``,\r\n imports: [ReactiveFormsModule]\r\n})\r\nexport class FieldBase implements OnInit, OnDestroy {\r\n /**\r\n * The field definition rendered by this component. Required.\r\n */\r\n issField: InputSignal<IssField> = input.required<IssField>();\r\n /**\r\n * Set by the outlet once every field is registered; field events start only after it turns true.\r\n */\r\n formReady = input<boolean>();\r\n /**\r\n * The {@link IssField} for this instance, injected through the `FIELD_DATA` token.\r\n */\r\n field: IssField = inject(FIELD_DATA);\r\n parentFormGroup: ControlContainer = inject(ControlContainer);\r\n formEngine: FormEngine = inject(FormEngine);\r\n eventHandler: EventHandler = inject(EventHandler);\r\n destroyRef: DestroyRef = inject(DestroyRef);\r\n /**\r\n * The `FormControl` this field registers on the parent form under `field.name`.\r\n */\r\n ctrl: FormControl = new FormControl(null);\r\n ctrlValueChange = toSignal(this.ctrl.valueChanges, { initialValue: this.ctrl.getRawValue() });\r\n #valueChangeEffectRef = effect(() => {\r\n this.field.ctrlValue.set(this.ctrlValueChange());\r\n });\r\n #eventEffectRef: EffectRef = effect(() => {\r\n if (this.formReady()) {\r\n this.#initiateEvents();\r\n }\r\n });\r\n\r\n get form() {\r\n return this.parentFormGroup.control as FormGroup;\r\n }\r\n\r\n ngOnInit() {\r\n this.#addControlToForm();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#valueChangeEffectRef.destroy();\r\n this.#eventEffectRef.destroy();\r\n this.#removeControlFromForm();\r\n }\r\n\r\n #addControlToForm(): void {\r\n this.ctrl.setValue(this.formEngine.getFieldValue(this.field));\r\n this.ctrl.setValidators(this.formEngine.createValidators(this.field));\r\n this.ctrl.setAsyncValidators(this.formEngine.createAsyncValidators(this.field));\r\n if (this.field.config.disabled() === true) {\r\n this.ctrl.disable({ emitEvent: false });\r\n }\r\n this.form.addControl(this.field.name, this.ctrl);\r\n\r\n if (this.ctrl.getRawValue()) {\r\n this.ctrl.markAsTouched();\r\n }\r\n }\r\n\r\n // a conditionally rendered field would otherwise leave its control behind on the host\r\n // form, keeping it in the form value and in the outlet's readiness diff forever\r\n #removeControlFromForm(): void {\r\n if (this.form?.get(this.field.name) === this.ctrl) {\r\n this.form.removeControl(this.field.name);\r\n }\r\n }\r\n\r\n #initiateEvents(): void {\r\n // todo don't start events in view mode, just set value\r\n if (this.field.events && this.field.events.length) {\r\n this.#startEvents();\r\n }\r\n\r\n if (this.field.validation) {\r\n this.#updateValidityOnMasterChanges();\r\n }\r\n }\r\n\r\n #startEvents(): void {\r\n this.formEngine.trackChangesEvents(this.field, this.form)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe((change: FieldChange) => {\r\n this.eventHandler.revert(this.ctrl, this.form, this.field, change).then();\r\n this.eventHandler.fire(this.ctrl, this.form, this.field, change).then();\r\n });\r\n }\r\n\r\n #updateValidityOnMasterChanges() {\r\n this.formEngine.trackChangesValidations(this.field, this.form)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n this.ctrl.updateValueAndValidity({ emitEvent: false });\r\n });\r\n }\r\n}\r\n","import { inject, StaticProvider } from \"@angular/core\";\r\nimport { ControlContainer } from \"@angular/forms\";\r\n\r\nexport const VIEW_PROVIDER: StaticProvider = {\r\n provide: ControlContainer,\r\n useFactory: () => inject(ControlContainer, {skipSelf: true}),\r\n};\r\n","export const PLACEHOLDER_REGEX: RegExp = /\\{((\\w+).)*(\\w+)}/gi;\r\n","import { IssValidator } from \"../interfaces/validation\";\r\n\r\nexport const VALIDATION_MESSAGES: IssValidator = {\r\n required: () => {\r\n return {\r\n en: \"Mandatory Field\",\r\n ar: \"حقل إجباري\",\r\n };\r\n },\r\n requiredTrue: () => {\r\n return {\r\n en: \"Please Choose\",\r\n ar: \"يُرجى الموافقة\",\r\n };\r\n },\r\n email: () => {\r\n return {\r\n en: \"Please enter a valid email address\",\r\n ar: \"يرجى كتابة عنوان بريد إلكتروني صحيح\",\r\n };\r\n },\r\n minlength: ({ requiredLength }: { requiredLength: number }) => {\r\n return {\r\n en: `Please enter at least ${requiredLength} characters`,\r\n ar: `يُرجى إدخال ${requiredLength} على الأقل`,\r\n };\r\n },\r\n maxlength: ({ requiredLength }: { requiredLength: number }) => {\r\n return {\r\n en: `Please enter at most ${requiredLength} characters`,\r\n ar: `يُرجى إدخال ${requiredLength} على الأكثر`,\r\n };\r\n },\r\n maxAllowedUsers: (max: number) => {\r\n return {\r\n en: `Please enter at most ${max} users`,\r\n ar: `يُرجى اختيار ${max} مستخدم على الأكثر `,\r\n };\r\n },\r\n minAllowedUsers: (min: number) => {\r\n return {\r\n en: `Please enter at least ${min} users`,\r\n ar: `يُرجى اختيار ${min} مستخدم على الأقل `,\r\n };\r\n },\r\n min: ({ min }: { min: number }) => {\r\n return {\r\n en: `Please enter at least ${min}`,\r\n ar: `يُرجى إدخال ${min} على الأقل`,\r\n };\r\n },\r\n max: ({ max }: { max: number }) => {\r\n return {\r\n en: `Please enter at most ${max}`,\r\n ar: `يُرجى إدخال ${max} على الأكثر`,\r\n };\r\n },\r\n pattern: () => {\r\n return {\r\n en: \"Please enter a valid value\",\r\n ar: \"يرجى إدخال قيم صحيحة\",\r\n };\r\n },\r\n wrongTimeSelected: (wrongTimeSelected: string) => {\r\n return {\r\n en: `Selected time should be after ${wrongTimeSelected} hours from now.`,\r\n ar: `الوقت المختار يجب أن يكون بعد ${wrongTimeSelected} من الآن. `,\r\n };\r\n },\r\n relativeTimeValidation_after: (relativeTimeValidation: string) => {\r\n return {\r\n en: `The selected end date should be greater than the ${relativeTimeValidation}.`,\r\n ar: ` تاريخ الانتهاء يجب ان يكون اكبر من ${relativeTimeValidation}.`,\r\n };\r\n },\r\n relativeTimeValidation_before: (relativeTimeValidation: string) => {\r\n return {\r\n en: `Selected time should be before ${relativeTimeValidation}.`,\r\n ar: `الوقت المختار يجب أن يكون قبل ${relativeTimeValidation}.`,\r\n };\r\n },\r\n\r\n relativeTimeValidation_before_noOfDays: (relativeTimeValidation: string) => {\r\n return {\r\n en: `Selected time should be before ${relativeTimeValidation} .`,\r\n ar: `الوقت المختار يجب أن يكون قبل ${relativeTimeValidation} .`,\r\n };\r\n },\r\n relativeTimeValidation_within: (relativeTimeValidation: string) => {\r\n return {\r\n en: `Selected time should be within ${relativeTimeValidation}.`,\r\n ar: ` يجب أن يكون الوقت المحدد ضمن ${relativeTimeValidation}.`,\r\n };\r\n },\r\n fileType: ({ validFileExtensions, inValidFileName }: { validFileExtensions: string, inValidFileName: string }) => ({\r\n en: `${inValidFileName} should be ${validFileExtensions}`,\r\n ar: `يجب أن يكون ${inValidFileName} بصيغة ${validFileExtensions}`,\r\n }),\r\n fileSize: ({ limitSize, inValidFileName }: { limitSize: string, inValidFileName: string }) => ({\r\n en: `${inValidFileName} size should not exceed ${limitSize}.`,\r\n ar: `يجب ألا يزيد حجم ${inValidFileName}} عن ${limitSize}`,\r\n }),\r\n minFileCount: ({ minCount, fileCount }: { minCount: number, fileCount: number }) => {\r\n return {\r\n en: `At least ${minCount} file(s) required, but only ${fileCount} selected.`,\r\n ar: `تتطلب العملية على الأقل ${minCount} ملف(ات)، لكن تم اختيار ${fileCount} فقط.`,\r\n };\r\n },\r\n maxFileCount: ({ maxCount, fileCount }: { maxCount: number, fileCount: number }) => {\r\n return {\r\n en: `You can upload a maximum of ${maxCount} file(s). You have selected ${fileCount} file(s).`,\r\n ar: `يمكنك تحميل حد أقصى من ${maxCount} ملف(ات). لقد قمت باختيار ${fileCount} ملف(ات).`\r\n };\r\n }\r\n};\r\n","import { inject, Pipe, PipeTransform } from \"@angular/core\";\nimport { I18n } from \"../interfaces/i18n\";\nimport { UI_LANGUAGE } from \"iss-ctrl/tokens\";\n\n@Pipe({name: \"translate\"})\nexport class TranslatePipe implements PipeTransform {\n currentLanguage = inject(UI_LANGUAGE);\n\n transform(value: I18n | string, locale: string = \"\"): string {\n if (typeof value === \"string\") {\n return value; // Return the string as is, if it's a string\n }\n\n if (value && locale) {\n return value[locale as keyof I18n];\n }\n\n return value?.[this.currentLanguage as keyof I18n];\n }\n}\n","import { KeyValuePipe } from \"@angular/common\";\r\nimport { Component, input, InputSignal } from \"@angular/core\";\r\nimport { ValidationErrors } from \"@angular/forms\";\r\nimport { MatError } from \"@angular/material/form-field\";\r\nimport { VALIDATION_MESSAGES } from \"../../shared/constants/validation.const\";\r\nimport { TranslatePipe } from \"../../shared/pipes/translate.pipe\";\r\n\r\n@Component({\r\n selector: \"iss-validation-message-viewer\",\r\n imports: [\r\n KeyValuePipe,\r\n TranslatePipe,\r\n MatError\r\n ],\r\n template: `\r\n @if (errors() !== null && showMessage()) {\r\n <div class=\"messages\">\r\n @for (error of errors() ?? {} | keyvalue; track error) {\r\n <p>\r\n <mat-error>{{ getValidationMessage(error) | translate }}</mat-error>\r\n </p>\r\n }\r\n </div>\r\n }\r\n `,\r\n styles: `\r\n /* The host keeps no height of its own, so showing or hiding a message never\r\n reflows the fields below it — the messages overlay the outlet gap instead. */\r\n :host {\r\n display: block;\r\n position: relative;\r\n }\r\n\r\n .messages {\r\n position: absolute;\r\n inset-inline: 0;\r\n top: 0;\r\n z-index: 1;\r\n }\r\n\r\n p {\r\n margin: 0;\r\n }\r\n `,\r\n})\r\nexport class ValidationMessage {\r\n errors: InputSignal<ValidationErrors | null> = input.required();\r\n showMessage: InputSignal<boolean> = input.required();\r\n\r\n getValidationMessage(error: { key: string, value: any }): any {\r\n const errorMessageGenerator = VALIDATION_MESSAGES[error.key];\r\n if (!errorMessageGenerator) {\r\n console.warn(`THERE IS NO VALIDATION MESSAGE FOR KEY \"${error.key}\"`);\r\n return error.key;\r\n }\r\n return errorMessageGenerator(error.value);\r\n }\r\n}\r\n","import { Component } from \"@angular/core\";\r\n\r\n/**\r\n * `<iss-field-viewer>` — read-only presentation of a single field as a\r\n * label / value row.\r\n *\r\n * Project the caption into the `label` slot and the rendered value into any\r\n * element carrying a `value` attribute:\r\n *\r\n * ```html\r\n * <iss-field-viewer>\r\n * <label>Request Type</label>\r\n * <span>value</span>\r\n * </iss-field-viewer>\r\n * ```\r\n *\r\n * The label sits in a fixed-width column, so every value in a stack of viewers\r\n * starts on the same vertical line. Override that column with the\r\n * `--field-viewer-label-width` custom property on any ancestor.\r\n * When no label is projected, the value spans the full width of the row.\r\n */\r\n@Component({\r\n selector: \"iss-field-viewer\",\r\n imports: [],\r\n template: `\r\n <div class=\"field-viewer w-100\">\r\n <span class=\"field-viewer__label\"><ng-content select=\"label\"></ng-content></span>\r\n <span class=\"field-viewer__value\"><ng-content></ng-content></span>\r\n </div>\r\n `,\r\n styles: `\r\n :host {\r\n --field-viewer-label-width: 14rem;\r\n --field-viewer-gap: 1.5rem;\r\n --field-viewer-padding: .75rem 1rem;\r\n --field-viewer-label-fc: var(--dark-gray);\r\n --field-viewer-value-fc: var(--black);\r\n\r\n display: block;\r\n width: 100%;\r\n }\r\n\r\n .field-viewer {\r\n display: grid;\r\n grid-template-columns: var(--field-viewer-label-width) minmax(0, 1fr);\r\n align-items: baseline;\r\n column-gap: var(--field-viewer-gap);\r\n padding: var(--field-viewer-padding);\r\n border-radius: var(--box-radius);\r\n font-size: .875rem;\r\n line-height: var(--default-line-height);\r\n }\r\n\r\n .field-viewer__label {\r\n color: var(--field-viewer-label-fc);\r\n font-weight: var(--font-regular);\r\n overflow-wrap: anywhere;\r\n }\r\n\r\n .field-viewer__value {\r\n min-width: 0;\r\n color: var(--field-viewer-value-fc);\r\n font-weight: var(--font-bold);\r\n overflow-wrap: anywhere;\r\n }\r\n\r\n /* The projected label keeps the slot's typography instead of its own defaults. */\r\n .field-viewer__label ::ng-deep label {\r\n display: block;\r\n margin: 0;\r\n color: inherit;\r\n font: inherit;\r\n }\r\n\r\n /* No label projected — the value takes the whole row. */\r\n .field-viewer:not(:has(.field-viewer__label > *)) {\r\n grid-template-columns: minmax(0, 1fr);\r\n }\r\n\r\n .field-viewer:not(:has(.field-viewer__label > *)) .field-viewer__label {\r\n display: none;\r\n }\r\n\r\n @media (max-width: 575.98px) {\r\n .field-viewer {\r\n grid-template-columns: minmax(0, 1fr);\r\n row-gap: .25rem;\r\n }\r\n }\r\n `,\r\n})\r\nexport class FieldViewer {\r\n}\r\n","import {Pipe, PipeTransform} from \"@angular/core\";\r\n\r\n@Pipe({name: \"arabicNumber\"})\r\nexport class ArabicNumberPipe implements PipeTransform {\r\n transform(n: string): string {\r\n if (n === null || n === undefined) {\r\n return \"\";\r\n }\r\n if (Number.isNaN(+n)) {\r\n return n;\r\n }\r\n return new Intl.NumberFormat(\"ar-SA\", {}).format(+n);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { PlateLetter } from \"iss-ctrl/plate\";\nimport { PLATE_LETTERS } from \"iss-ctrl/plate\";\n\n@Pipe({name: \"plateLetter\"})\nexport class PlateLetterPipe implements PipeTransform {\n transform(value: string): unknown {\n const letter: PlateLetter | undefined = PLATE_LETTERS.find((l: PlateLetter) => l.value === value);\n if (letter) {\n return letter.label.ar;\n }\n return value;\n }\n}\n","import { HttpClient } from \"@angular/common/http\";\nimport { inject, Injectable } from \"@angular/core\";\nimport { map, Observable, tap } from \"rxjs\";\nimport { PLACEHOLDER_REGEX } from \"../../../shared/constants/placeholder-regex.const\";\nimport { USER_SEARCH_API } from \"iss-ctrl/tokens\";\n\n@Injectable({providedIn: \"root\"})\nexport class Employee {\n loggedInUserProfile: any;\n USER_SEARCH_URL: string = inject(USER_SEARCH_API);\n userImageHost = \"https://igateapp.stc.com.sa\";\n #http: HttpClient = inject(HttpClient);\n\n getProfile(email: string): Observable<any> {\n const url = this.replacePlaceholders(this.USER_SEARCH_URL, {email: email});\n\n return this.#http.get(url).pipe(\n map((dto: any) => {\n dto.data.profileImageUrl = this.getProfileImageUrl(dto.data);\n return dto.data;\n }),\n tap((user: any) => {\n localStorage.setItem(\"user\", JSON.stringify(user));\n this.loggedInUserProfile = user;\n })\n );\n }\n\n search(username: string, endpoint?: string): Observable<any[]> {\n let url = this.replacePlaceholders(this.USER_SEARCH_URL, {username});\n if (endpoint) {\n if (!endpoint.includes(\"{username}\")) {\n throw \"endpoint should have this string {username} as a placeholder to be able to replace it\";\n }\n }\n\n if (endpoint) {\n url = this.replacePlaceholders(endpoint, {username});\n }\n\n return this.#http.get<any>(url).pipe(\n map((employees: any) => {\n employees.data = employees.data.map((emp: any) => {\n emp.image = this.getProfileImageUrl(emp);\n return emp;\n });\n return employees.data;\n })\n );\n }\n\n getProfileImageUrl(user: any): string {\n if (user.image && this.#checkIfImageHasValue(user.image)) {\n return this.userImageHost + user.image;\n }\n return \"\";\n }\n\n replacePlaceholders(str: string, values: any) {\n /*TODO check if placeholders passed in values object*/\n if (!str) {\n return \"\";\n }\n return str.replace(PLACEHOLDER_REGEX, (match: any) => {\n return values[match.replace(\"{\", \"\").replace(\"}\", \"\")] ?? match;\n });\n }\n\n #checkIfImageHasValue(imageUri: any) {\n const splitResult = imageUri.split(\"/\");\n return !!(splitResult[splitResult.length - 1] && splitResult[splitResult.length - 1] !== \".jpg\");\n }\n}\n","import { PLACEHOLDER_REGEX } from \"../constants/placeholder-regex.const\";\r\n\r\nexport function replacePlaceholders(str: string, values: any) {\r\n /*TODO check if placeholders passed in values object*/\r\n if (!str) {\r\n return \"\";\r\n }\r\n return str.replace(PLACEHOLDER_REGEX, (match: any) => {\r\n const key = match.replace(\"{\", \"\").replace(\"}\", \"\");\r\n return values[key] ?? match;\r\n });\r\n}\r\n","import { HttpClient } from \"@angular/common/http\";\nimport { inject, Injectable } from \"@angular/core\";\nimport { EMPTY, forkJoin, map, Observable } from \"rxjs\";\nimport { ATTACHMENT_DOWNLOAD_URL, ATTACHMENT_UPLOAD_RESPONSE_MAPPER, ATTACHMENT_UPLOAD_URL, IssAttachment } from \"iss-ctrl/tokens\";\nimport { replacePlaceholders } from \"../../../shared/utilities/replace-placeholder.util\";\nimport { IssFile } from \"iss-ctrl/file-picker\";\n\n@Injectable({ providedIn: \"root\" })\nexport class FileHandler {\n ATTACHMENT_UPLOAD_URL = inject(ATTACHMENT_UPLOAD_URL);\n ATTACHMENT_DOWNLOAD_URL: string = inject(ATTACHMENT_DOWNLOAD_URL);\n attachmentAdapter = inject(ATTACHMENT_UPLOAD_RESPONSE_MAPPER);\n #http: HttpClient = inject(HttpClient);\n readonly #units: string[] = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\n\n upload(data: FormData) {\n const url = this.ATTACHMENT_UPLOAD_URL;\n // no Content-Type header: the browser adds it with the FormData boundary\n return this.#http.post(url, data).pipe(\n map((res: any): IssAttachment[] => this.attachmentAdapter(res)),\n );\n }\n\n formDataFactory(files: IssFile[], multiple: boolean): FormData | null {\n if (files.length === 0) {\n return null;\n }\n const fd: FormData = new FormData();\n let formDataKey = \"file\";\n if (multiple) {\n formDataKey = \"files\";\n }\n for (let i = 0; i < files.length; i++) {\n // @ts-ignore\n fd.append(formDataKey, files[i]);\n }\n return fd;\n }\n\n formDataHasValue(formData: FormData) {\n if (formData) {\n for (const key of formData.keys()) {\n if (formData.get(key)) {\n return true;\n }\n }\n }\n return false;\n }\n\n getFileFromFormData(formData: FormData, name: string): IssFile[] {\n if (!formData) {\n return [];\n }\n const fileFD: IssFile[] = formData.getAll(\"file\") as unknown as IssFile[];\n const filesFD: IssFile[] = formData.getAll(\"files\") as unknown as IssFile[];\n if (filesFD.length) {\n return filesFD.filter((f) => f.name === name);\n }\n if (fileFD.length) {\n return fileFD.filter((f) => f.name === name);\n }\n return [];\n }\n\n formatFileSize(x: string | number) {\n let l: number = 0;\n let n: number = parseInt(x.toString(), 10) || 0;\n\n while (n >= 1024 && ++l) {\n n /= 1024;\n }\n return Math.floor(n) + \" \" + this.#units[l];\n }\n\n fetchFileInfo(id: string): Observable<IssFile> {\n const url: string = replacePlaceholders(this.ATTACHMENT_DOWNLOAD_URL, { fileId: id });\n const httpRequestOptions: any = { observe: \"response\", responseType: \"blob\" };\n return this.#http.get(url, httpRequestOptions).pipe(map((res: any) => this.#processFileBinaryStream(res, id)));\n }\n\n fetchFiles(ids: string) {\n if (ids) {\n return forkJoin(ids.split(\",\").map((id: string) => {\n return this.fetchFileInfo(id);\n }));\n }\n return EMPTY;\n }\n\n #processFileBinaryStream(res: any, fileId: string): any {\n const fileNameHeader = res.headers.get(\"content-disposition\");\n const typeHeader = res.headers.get(\"content-type\");\n let fileName = \"\";\n if (fileNameHeader) {\n fileName = decodeURIComponent(fileNameHeader.split(\";\")[1].split(\"=\")[1].replaceAll(\"\\\"\", \"\"));\n }\n const file: File = new File([res.body], fileName, { type: typeHeader });\n return {\n id: fileId,\n name: file.name,\n type: file.type,\n size: this.formatFileSize(file.size),\n file: file,\n };\n }\n}\n","export function arrayFrom<T>(length: number, valueFunction: (index: number) => T): T[] {\r\n const valuesArray = Array(length);\r\n for (let i = 0; i < length; i++) {\r\n valuesArray[i] = valueFunction(i);\r\n }\r\n return valuesArray;\r\n}\r\n","export function getPropertyByPath(obj: any, path: string | undefined) {\r\n if (obj && path) {\r\n let currentProp: any;\r\n const props = path.split(\".\");\r\n for (let i = 0; i < props.length; i++) {\r\n const propKey = props[i];\r\n if (!currentProp) {\r\n const target = obj[propKey];\r\n if (typeof target === \"function\") {\r\n currentProp = target();\r\n } else {\r\n currentProp = target;\r\n }\r\n } else {\r\n const target = currentProp[propKey];\r\n\r\n if (typeof target === \"function\") {\r\n currentProp = target();\r\n } else {\r\n currentProp = target;\r\n }\r\n }\r\n if (currentProp === undefined) {\r\n break;\r\n }\r\n }\r\n return currentProp;\r\n }\r\n return undefined;\r\n}\r\n","export function formatFileSize(x: string | number) {\r\n const units: string[] = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\r\n let l = 0;\r\n let n = parseInt(x.toString(), 10) || 0;\r\n while (n >= 1024 && ++l) {\r\n n /= 1024;\r\n }\r\n return `${Math.floor(n)}${units[l]}`;\r\n}\r\n","import {ValidatorFn, Validators} from \"@angular/forms\";\n\nexport abstract class IssValidators {\n static required(): ValidatorFn {\n return Validators.required;\n }\n\n static max(maxValue: number): ValidatorFn {\n return Validators.max(maxValue);\n }\n\n static min(minValue: number): ValidatorFn {\n return Validators.min(minValue);\n }\n\n static requiredTrue(): ValidatorFn {\n return Validators.requiredTrue;\n }\n\n static email(): ValidatorFn {\n return Validators.email;\n }\n\n static minLength(minLength: number): ValidatorFn {\n return Validators.minLength(minLength);\n }\n\n static maxLength(maxLength: number): ValidatorFn {\n return Validators.maxLength(maxLength);\n }\n\n static pattern(pattern: string | RegExp): ValidatorFn {\n return Validators.pattern(pattern);\n }\n\n static null(): ValidatorFn {\n return Validators.nullValidator;\n }\n}\n","import { AbstractControl, ValidatorFn } from \"@angular/forms\";\r\nimport { formatFileSize } from \"../components/controls/file-picker/format-file-size.util\";\r\n\r\nexport abstract class FileValidators {\r\n static size(limitSize: number): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n const formData: FormData = control.value;\r\n if (!formData || !(formData instanceof FormData)) {\r\n return null; // No validation errors if there's no form data or the value is not FormData\r\n }\r\n\r\n const filesValidity: any[] = [];\r\n const inValidFileName: string [] = [];\r\n formData.forEach((value: FormDataEntryValue) => {\r\n if (value instanceof File) {\r\n if (value.size > limitSize) {\r\n inValidFileName.push(value.name);\r\n filesValidity.push(false);\r\n } else {\r\n filesValidity.push(true);\r\n }\r\n }\r\n });\r\n\r\n return filesValidity.every((v: any) => v) ? null : {\r\n fileSize: {\r\n limitSize: formatFileSize(limitSize),\r\n inValidFileName: inValidFileName.join()\r\n }\r\n };\r\n };\r\n }\r\n\r\n static type(validFileExtensions: string[]): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n const formData: FormData = control.value;\r\n if (!formData || !(formData instanceof FormData) || validFileExtensions.length === 0) {\r\n return null; // No validation errors if there's no form data or the value is not FormData\r\n }\r\n\r\n const filesValidity: boolean[] = [];\r\n const inValidFileName: string[] = [];\r\n\r\n formData.forEach((value: FormDataEntryValue) => {\r\n if (value instanceof File) {\r\n const uploadedFileExt = value.name.split(\".\").pop()?.toLowerCase();\r\n const isValidExtension = validFileExtensions.some((ext: string) => ext.toLowerCase() === uploadedFileExt);\r\n\r\n if (!isValidExtension) {\r\n inValidFileName.push(value.name);\r\n filesValidity.push(false);\r\n } else {\r\n filesValidity.push(true);\r\n }\r\n }\r\n });\r\n return filesValidity.every((v: boolean) => v) ? null : {\r\n fileType: {\r\n validFileExtensions: validFileExtensions.join(\", \"),\r\n inValidFileName: inValidFileName.join(\", \")\r\n }\r\n };\r\n };\r\n }\r\n\r\n static maxCount(maxCount: number): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n const formData: FormData = control.value;\r\n if (!formData || !(formData instanceof FormData)) {\r\n return null; // No validation errors if there's no form data or the value is not FormData\r\n }\r\n\r\n let fileCount = 0;\r\n formData.forEach((value) => {\r\n if (value instanceof File) {\r\n fileCount++;\r\n }\r\n });\r\n\r\n return fileCount <= maxCount ? null : {maxFileCount: {maxCount, fileCount}};\r\n };\r\n }\r\n\r\n static minCount(minCount: number): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n const formData: FormData = control.value;\r\n if (!formData || !(formData instanceof FormData)) {\r\n return null; // No validation errors if there's no form data or the value is not FormData\r\n }\r\n\r\n let fileCount = 0;\r\n formData.forEach((value) => {\r\n if (value instanceof File) {\r\n fileCount++;\r\n }\r\n });\r\n return fileCount >= minCount ? null : {minFileCount: {minCount, fileCount}};\r\n };\r\n }\r\n}\r\n","import { inject } from \"@angular/core\";\nimport { AbstractControl, ControlContainer, FormGroup, ValidationErrors, ValidatorFn } from \"@angular/forms\";\nimport { format } from \"date-fns\";\nimport { DATETIME_FORMAT } from \"iss-ctrl/base\";\n\nexport abstract class TimeValidator {\n // The rule's value is the name of the field this one must not run past, so it arrives here\n // rather than being read back off the field.\n static beforeDate(otherFieldName: string): ValidatorFn {\n const controlContainer = inject(ControlContainer);\n const parentForm = controlContainer.control as FormGroup;\n return (control: AbstractControl): ValidationErrors | null => {\n const anotherControl = parentForm.get(otherFieldName);\n if (anotherControl) {\n const anotherControlValue = anotherControl.getRawValue();\n const controlValue = control.getRawValue();\n if (new Date(anotherControlValue) < new Date(controlValue)) {\n return {\n relativeTimeValidation_before: format(anotherControlValue.replace(\"Z\", \"\"), DATETIME_FORMAT)\n };\n }\n }\n return null;\n };\n }\n\n static afterDate(otherFieldName: string): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n return null;\n };\n }\n}\n","// The form engine: the outlet, the field/viewer indexes it resolves through, and everything\n// a host application needs to drive a form.\n//\n// Controls are NOT exported from here. Each one is its own entry point — `iss-ctrl/input`,\n// `iss-ctrl/select`, `iss-ctrl/mobile`, … — because re-exporting a control statically makes\n// the bundler inline it, and with it every control, back into whatever loads this file. The\n// fields below reach their control through that entry point, so an app downloads only the\n// controls it renders. `iss-ctrl/base` and `iss-ctrl/tokens` are re-exported for convenience;\n// an app configuring the tokens in its root providers should still import them directly from\n// `iss-ctrl/tokens` so the engine stays out of its initial bundle.\n\nexport * from \"iss-ctrl/base\";\nexport * from \"iss-ctrl/tokens\";\n\n// outlet\nexport * from \"./components/outlet/outlet\";\nexport * from \"./components/outlet/component-outlet\";\nexport * from \"./components/outlet/field-data-injector\";\n\n// fields\nexport * from \"./components/controls/base/field-base\";\n\n// constants\nexport * from \"./shared/constants/view-provider.const\";\nexport * from \"./shared/constants/placeholder-regex.const\";\nexport * from \"./shared/constants/validation.const\";\n\n// indexes\nexport * from \"./shared/indexes/components.index\";\nexport * from \"./shared/indexes/services.index\";\nexport * from \"./shared/indexes/validators.index\";\n\n// interfaces\nexport * from \"./shared/interfaces/event-trigger-fn\";\nexport * from \"./shared/interfaces/event-strategy\";\nexport * from \"./shared/interfaces/i18n\";\nexport * from \"./shared/interfaces/import\";\nexport * from \"./shared/interfaces/validation\";\n\n// tokens\nexport * from \"./shared/tokens/field.token\";\n\n// types\nexport * from \"./shared/types/validation.type\";\n\n// components\nexport * from \"./components/shared/validation-message\";\nexport * from \"./components/shared/field-viewer\";\n\n// pipes\nexport * from \"./shared/pipes/arabic-number.pipe\";\nexport * from \"./shared/pipes/translate.pipe\";\nexport * from \"./components/controls/plate/plate-letter.pipe\";\n\n// services\nexport * from \"./components/controls/user-picker/employee\";\nexport * from \"./components/controls/file-picker/file-handler\";\nexport * from \"./shared/services/form-engine\";\nexport * from \"./shared/services/loader\";\n\n// utilities\nexport * from \"./shared/utilities/array-from.util\";\nexport * from \"./shared/utilities/get-property-by-path.util\";\nexport * from \"./shared/utilities/replace-placeholder.util\";\nexport * from \"./components/controls/file-picker/format-file-size.util\";\n\n// validators\nexport * from \"./validators/core.validator\";\nexport * from \"./validators/file.validator\";\nexport * from \"./validators/time.validator\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"iss-ctrl-radio.field-B_JjPIlb.mjs","sources":["../../../projects/iss/src/components/controls/radio/radio.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 { RadioControl } from \"iss-ctrl/radio\";\nimport { RadioViewer } from \"./radio.viewer\";\n\n/**\n * `<iss-field-radio>` — one choice out of a fixed set of options.\n *\n * Rendered by the outlet for fields of type `radio`. In `edit` mode it renders\n * {@link RadioControl} plus the validation message; in `view` mode the matching viewer.\n *\n * ### Supported `config` keys\n * | Key | Type | Description |\n * | --- | --- | --- |\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\": \"gender\", \"type\": \"radio\", \"label\": \"Gender\", \"options\": [{ \"value\": \"m\", \"label\": \"Male\" }] }\n * ```\n */\n@Component({\n selector: \"iss-field-radio\",\n viewProviders: [VIEW_PROVIDER],\n imports: [\n ReactiveFormsModule,\n MatLabel,\n RadioControl,\n ValidationMessage,\n RadioViewer,\n FieldViewer\n ],\n template: `\n @if (field.visible()) {\n <div style=\"display: flex; flex-direction: column\">\n @if (field.mode() === \"edit\") {\n @if (!field.config.hideLabel()) {\n <mat-label>{{ field.label() }}</mat-label>\n }\n <iss-ctrl-radio [formControlName]=\"field.name\" [options]=\"field.options()\" [readonly]=\"field.config.readonly() ?? false\" (onChange)=\"onChange($event)\"/>\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-radio [field]=\"field\"/>\n </iss-field-viewer>\n }\n </div>\n }\n `\n})\nexport class RadioField extends FieldBase {\n onChange($event: any) {\n this.field.ctrlJsonValue.set($event);\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAUA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AAiCG,MAAO,UAAW,SAAQ,SAAS,CAAA;AACvC,IAAA,QAAQ,CAAC,MAAW,EAAA;QAClB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;IACtC;uGAHW,UAAU,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBX;;;;;;;;;;;;;;;;;;;AAmBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA1BC,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,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,aAAA,EAPE,CAAC,aAAa,CAAC,EAAA,CAAA;;2FA8BnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBAhCtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,aAAa,EAAE,CAAC,aAAa,CAAC;AAC9B,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,QAAQ;wBACR,YAAY;wBACZ,iBAAiB;wBACjB,WAAW;wBACX;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;AAmBT,EAAA;AACF,iBAAA;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"iss-ctrl-select.field-DoU4G_8t.mjs","sources":["../../../projects/iss/src/components/controls/select/select.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 { SelectControl } from \"iss-ctrl/select\";\nimport { SelectViewer } from \"./select.viewer\";\n\n/**\n * `<iss-field-select>` — single or multiple selection from a dropdown.\n *\n * Rendered by the outlet for fields of type `dropdown_list`. In `edit` mode it renders\n * {@link SelectControl} plus the validation message; in `view` mode the matching viewer.\n *\n * ### Supported `config` keys\n * | Key | Type | Description |\n * | --- | --- | --- |\n * | `multiple` | `boolean` | Allows selecting more than one option. |\n * | `readonly` | `boolean` | Shows the value but blocks interaction. |\n *\n * ### Other field members used\n * `label()` · `options()` · `ctrlJsonValue()`\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 * The raw form value holds the selected option values; the resolved options are written\n * back to `field.ctrlJsonValue`.\n *\n * @example\n * ```json\n * { \"name\": \"city\", \"type\": \"dropdown_list\", \"label\": \"City\", \"options\": [{ \"value\": \"1\", \"label\": \"Riyadh\" }] }\n * ```\n */\n@Component({\n selector: \"iss-field-select\",\n viewProviders: [VIEW_PROVIDER],\n imports: [\n ReactiveFormsModule,\n SelectControl,\n ValidationMessage,\n SelectViewer,\n FieldViewer\n ],\n template: `\n @if (field.visible()) {\n @if (field.mode() === \"edit\") {\n <iss-ctrl-select [formControlName]=\"field.name\" [options]=\"field.options()\" [multiple]=\"field.config.multiple()\" [readonly]=\"field.config.readonly() ?? false\" (onChange)=\"onChange($event)\">\n <label>{{ field.label() }}</label>\n </iss-ctrl-select>\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-select [field]=\"field\"/>\n </iss-field-viewer>\n }\n }\n `\n})\nexport class SelectField extends FieldBase {\n onChange($event: string | FormData) {\n this.field.ctrlJsonValue.set($event);\n }\n}\n"],"names":[],"mappings":";;;;;;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AA2BG,MAAO,WAAY,SAAQ,SAAS,CAAA;AACxC,IAAA,QAAQ,CAAC,MAAyB,EAAA;QAChC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;IACtC;uGAHW,WAAW,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhBZ;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EApBC,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,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,YAAY,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,CAAA,EAAA,aAAA,EANE,CAAC,aAAa,CAAC,EAAA,CAAA;;2FAwBnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBA1BvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;oBAC5B,aAAa,EAAE,CAAC,aAAa,CAAC;AAC9B,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,aAAa;wBACb,iBAAiB;wBACjB,YAAY;wBACZ;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;AAcT,EAAA;AACF,iBAAA;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"iss-ctrl-select.mjs","sources":["../../../projects/iss/select/src/select.control.ts","../../../projects/iss/select/src/public-api.ts","../../../projects/iss/select/src/iss-ctrl-select.ts"],"sourcesContent":["import { CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport } from \"@angular/cdk/scrolling\";\nimport { NgClass, NgStyle, NgTemplateOutlet } from \"@angular/common\";\nimport { Component, computed, contentChild, CUSTOM_ELEMENTS_SCHEMA, effect, input, InputSignal, OnDestroy, output, OutputEmitterRef, signal, Signal, WritableSignal } from \"@angular/core\";\nimport { toSignal } from \"@angular/core/rxjs-interop\";\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\nimport { MatChipsModule } from \"@angular/material/chips\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { Option } from \"iss-ctrl/base\";\nimport { SelectStatusPipe } from \"iss-ctrl/base\";\nimport { ControlBase } from \"iss-ctrl/base\";\n\n/**\n * `<iss-ctrl-select>` — dropdown selection, single or multiple, with a search box.\n *\n * Typing in the search box emits `(onQueryChange)`, so options can be loaded remotely; set\n * `loading` while that request is in flight.\n *\n * @example\n * ```html\n * <iss-ctrl-select\n * formControlName=\"city\"\n * [options]=\"cities()\"\n * [multiple]=\"false\"\n * [loading]=\"loading()\"\n * (onQueryChange)=\"search($event)\"\n * >\n * <label>City</label>\n * </iss-ctrl-select>\n * ```\n *\n * ### Own inputs\n * | Property | Type | Default | Description |\n * | --- | --- | --- | --- |\n * | `options` | `Option[]` | **required** | The selectable choices. |\n * | `height` | `string` | `\"150px\"` | Max height of the open panel. |\n * | `loading` | `boolean` | `false` | Shows the loading state inside the panel. |\n *\n * ### Inherited from {@link ControlBase}\n * `formControlName` · `readonly` · `className` · `(onChange)` · `placeholder` · `multiple`\n *\n * ### Outputs\n * - `(onQueryChange)` — `string`, the current search text.\n *\n * Projects `<label>` into the floating label; omit it to render the control without one.\n */\n@Component({\n selector: \"iss-ctrl-select\",\n imports: [\n ReactiveFormsModule,\n MatAutocompleteModule,\n MatInputModule,\n MatChipsModule,\n MatIconModule,\n NgClass,\n SelectStatusPipe,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n NgStyle,\n NgTemplateOutlet,\n ],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: SelectControl, 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 [formControl]=\"ctrl\"\n [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"chipGrid\"\n [placeholder]=\"placeholder()\"\n [readonly]=\"readonly()\"\n [errorStateMatcher]=\"errorStateMatcher\"\n (blur)=\"markAsTouched()\"\n class=\"m-0\"\n matInput\n />\n @if (!disabled()) {\n @if (selectedOptions().size) {\n <span matSuffix class=\"sfi sfi-close fs-18 fc-black cursor-pointer\" (click)=\"clearSelection()\"></span>\n } @else {\n <span matSuffix class=\"sfi sfi-arrow-down fs-18 fc-black cursor-pointer\"></span>\n }\n }\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"captureValue($event)\" [displayWith]=\"displayFn\" autoActiveFirstOption hideSingleSelectionIndicator>\n @if (loading()) {\n <mat-option disabled=\"true\">\n <ds-icon icon=\"spinner\" class=\"spin fc-coral fs-20\"></ds-icon>\n </mat-option>\n } @else {\n @if (filteredOptions().length) {\n @if (multiple()) {\n <mat-option (click)=\"toggleAllSelection()\" value=\"_SELECT_ALL_OPTIONS_\">\n {{ allSelected() ? \"deselect all\" : \"Select All\" }}\n </mat-option>\n }\n <cdk-virtual-scroll-viewport itemSize=\"5\" [ngStyle]=\"{'height': height()}\">\n <mat-option *cdkVirtualFor=\"let option of filteredOptions()\" [value]=\"option\" [ngClass]=\"{'mdc-list-item__selected': option | selectStatus: selectedOptions()}\">\n @if (optionTemplate()) {\n <ng-container *ngTemplateOutlet=\"optionTemplate(); context: { $implicit: option}\"/>\n } @else {\n {{ option.label }}\n }\n </mat-option>\n </cdk-virtual-scroll-viewport>\n } @else {\n <mat-option disabled=\"true\">No Result Found</mat-option>\n }\n }\n </mat-autocomplete>\n </mat-form-field>\n\n <mat-chip-grid #chipGrid>\n @if (multiple()) {\n @for (chip of selectedOptions(); track chip[0]) {\n <mat-chip-row (removed)=\"removeFromSelectedOptionsMap(chip[1])\">\n @if (cardViewerTemplate()) {\n <ng-container\n *ngTemplateOutlet=\"cardViewerTemplate(); context: { $implicit: chip[1]}\"\n />\n } @else {\n {{ chip[1].label }}\n }\n <button matChipRemove [disabled]=\"readonly()\" [attr.aria-label]=\"'remove ' + chip[1].label\">\n <ds-icon icon=\"trash\" class=\"fc-red\"></ds-icon>\n </button>\n </mat-chip-row>\n }\n }\n </mat-chip-grid>\n `,\n styles: `\n ::ng-deep {\n .mat-mdc-option.mdc-list-item__selected:not(.mdc-list-item--disabled) .mdc-list-item__primary-text {\n --mat-option-selected-state-label-text-color: var(--green);\n color: var(--green);\n }\n }\n `,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class SelectControl extends ControlBase implements OnDestroy {\n selectedOptions: WritableSignal<Map<string, Option>> = signal(new Map<string, Option>());\n /**\n * Selectable choices, each a `{ value, label }` pair. Required.\n */\n options: InputSignal<Option[]> = input.required();\n /**\n * Maximum height of the open options panel, as a CSS length.\n */\n height: InputSignal<string> = input(\"150px\");\n query: Signal<string> = toSignal(this.ctrl.valueChanges);\n readonly filteredOptions: Signal<Option[]> = computed(() => this.#filter(this.query()));\n /**\n * Shows the loading state inside the panel while options are being fetched.\n */\n loading: InputSignal<boolean> = input(false);\n /**\n * Emits the search text so the host can load matching options.\n */\n onQueryChange: OutputEmitterRef<string> = output();\n protected optionTemplate: any = contentChild(\"optionTemplate\");\n protected cardViewerTemplate: any = contentChild(\"cardViewerTemplate\");\n protected allSelected: WritableSignal<boolean> = signal(false);\n #queryEffectRef = effect(() => {\n if (typeof this.query() === \"string\") {\n this.onQueryChange.emit(this.query());\n }\n });\n #disabledEffectRef = effect(() => {\n if (this.disabled()) {\n this.ctrl.disable();\n } else {\n this.ctrl.enable();\n }\n });\n\n displayFn = (options: Option | Option[]): string => {\n if (Array.isArray(options) && !this.multiple()) {\n return options[0]?.label;\n }\n return \"\";\n };\n\n /*todo: add pagination for async options*/\n\n override writeValue(value: string | null) {\n this.#reset();\n if (value === null || value === undefined) {\n return;\n }\n const values: string[] = value.split(\",\").map(val => val.trim());\n let 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 selectedOptions = selectedOptions.slice(0, 1);\n }\n const next: Map<string, Option> = new Map<string, Option>();\n for (let i = 0; i < selectedOptions.length; i++) {\n const val: Option = selectedOptions[i];\n next.set(val.value, val);\n }\n this.selectedOptions.set(next);\n this.ctrl.setValue(selectedOptions);\n }\n\n captureValue($event: any) {\n if (this.readonly()) {\n return;\n }\n if ($event?.option.value === \"_SELECT_ALL_OPTIONS_\") {\n return;\n }\n this.#addToSelectedOptionsMap($event?.option.value);\n this.#emit();\n }\n\n removeFromSelectedOptionsMap(option: Option) {\n if (this.readonly()) {\n return;\n }\n this.selectedOptions.update((selected: Map<string, Option>) => {\n const next: Map<string, Option> = new Map(selected);\n next.delete(option.value);\n return next;\n });\n this.allSelected.set(false);\n this.#emit();\n }\n\n clearSelection() {\n if (this.readonly()) {\n return;\n }\n this.#reset();\n this.allSelected.set(false);\n this.#emit();\n }\n\n toggleAllSelection() {\n if (this.readonly()) {\n return;\n }\n if (this.selectedOptions().size === this.options().length) {\n this.#reset();\n this.#emit();\n this.allSelected.set(false);\n return;\n }\n const next: Map<string, Option> = new Map<string, Option>();\n for (let i = 0; i < this.options().length; i++) {\n const option: Option = this.options()[i];\n next.set(option.value, option);\n }\n this.selectedOptions.set(next);\n this.ctrl.setValue(this.#convertSelectedMapToArray());\n this.allSelected.set(true);\n this.#emit();\n }\n\n ngOnDestroy(): void {\n this.#queryEffectRef.destroy();\n this.#disabledEffectRef.destroy();\n }\n\n // the selection is the value here; `ctrl` doubles as the autocomplete's search box, so while\n // the user is typing a query it holds that string rather than the chosen options.\n protected override isEmpty(): boolean {\n return this.selectedOptions().size === 0;\n }\n\n #addToSelectedOptionsMap(option: any) {\n if (option) {\n const selectedOption = option;\n this.selectedOptions.update((selected: Map<string, Option>) => {\n // single selection replaces the map instead of adding to it\n const next: Map<string, Option> = this.multiple() ? new Map(selected) : new Map<string, Option>();\n next.set(selectedOption.value, selectedOption);\n return next;\n });\n this.ctrl.setValue(this.#convertSelectedMapToArray());\n }\n }\n\n #stringifySelectedOptions(): string | null {\n const selectedOptionsArr: Option[] | null = this.#convertSelectedMapToArray();\n if (selectedOptionsArr) {\n return selectedOptionsArr.map((o) => o.value).join();\n }\n return null;\n }\n\n #filter(queryString: string | Option): Option[] {\n if (queryString === null || queryString === undefined || typeof queryString !== \"string\") {\n return this.options();\n }\n const query: string = queryString.toLowerCase();\n return this.options().filter((option: Option) => {\n return (option.value.toLowerCase().includes(query) || option.label.toLowerCase().includes(query));\n });\n }\n\n #emit() {\n this.propagateValue(this.#stringifySelectedOptions());\n this.emitOnChangeEvent(this.#convertSelectedMapToArray());\n }\n\n #reset() {\n this.selectedOptions.set(new Map<string, Option>());\n this.ctrl.setValue(null);\n }\n\n #convertSelectedMapToArray(): Option[] | null {\n const selectedOptionsArr: Option[] = Array.from(this.selectedOptions(), ([_, option]) => option);\n return selectedOptionsArr.length ? selectedOptionsArr : null;\n }\n}\n","// The select 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 \"./select.control\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"iss-ctrl-select.viewer-Dv9M-lG-.mjs","sources":["../../../projects/iss/src/components/controls/select/select.viewer.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\nimport { ViewerBase } from \"iss-ctrl/base\";\n\n@Component({\n selector: \"iss-viewer-select\",\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 SelectViewer extends ViewerBase {}\n"],"names":[],"mappings":";;;;AAaM,MAAO,YAAa,SAAQ,UAAU,CAAA;uGAA/B,YAAY,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARb;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAEU,YAAY,EAAA,UAAA,EAAA,CAAA;kBAVxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
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;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"iss-ctrl-user-picker.field-BIzB5ZX6.mjs","sources":["../../../projects/iss/src/components/controls/user-picker/user-picker.field.ts"],"sourcesContent":["import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, signal } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { MatSidenav, MatSidenavContainer } from \"@angular/material/sidenav\";\nimport { debounceTime, distinctUntilChanged, map, Subject, switchMap } from \"rxjs\";\nimport { FieldViewer } from \"../../shared/field-viewer\";\nimport { ValidationMessage } from \"../../shared/validation-message\";\nimport { FieldBase } from \"../base/field-base\";\nimport { SelectControl } from \"iss-ctrl/select\";\nimport { Employee } from \"./employee\";\nimport { VIEW_PROVIDER } from \"../../../shared/constants/view-provider.const\";\n\n/**\n * `<iss-user-picker>` — employee lookup, searched against the directory API.\n *\n * Rendered by the outlet for fields of type `userPicker`. In `edit` mode it renders\n * {@link SelectControl} — always multi-select — over the employees returned by the search;\n * in `view` mode the stored value as plain text. Selecting a user opens a details drawer.\n *\n * ### Supported `config` keys\n * | Key | Type | Description |\n * | --- | --- | --- |\n * | `min` | `number` | Minimum number of users required. |\n * | `max` | `number` | Maximum number of users allowed. |\n * | `readonly` | `boolean` | Shows the value but blocks interaction. |\n *\n * ### Other field members used\n * `label()` · `value` · `ctrlJsonValue()`\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\": \"approvers\", \"type\": \"userPicker\", \"label\": \"Approvers\", \"config\": { \"max\": 3 } }\n * ```\n */\n@Component({\n selector: \"iss-user-picker\",\n viewProviders: [VIEW_PROVIDER],\n imports: [\n SelectControl,\n ValidationMessage,\n MatSidenav,\n MatSidenavContainer,\n FieldViewer\n ],\n template: `\n @if (field.visible()) {\n @if (field.mode() === \"edit\") {\n <iss-ctrl-select\n [formControlName]=\"field.name\"\n [min]=\"field.config.min() ?? null\"\n [max]=\"field.config.max() ?? null\"\n [options]=\"options()\"\n [multiple]=\"true\"\n [readonly]=\"field.config.readonly() ?? false\"\n (onQueryChange)=\"search($event)\"\n (onChange)=\"updateField($event)\"\n >\n <label>{{ field.label() }}</label>\n <ng-template let-item #optionTemplate>\n <div class=\"d-flex align-items-center gap-2\">\n <ds-avatar size=\"x-small\" [attr.image]=\"item.image\"></ds-avatar>\n <span class=\"fs-14 fw-medium fc-black\">{{ item.name }}</span>\n </div>\n </ng-template>\n <ng-template let-item #cardViewerTemplate>\n <div (click)=\"showUserData(item);drawer.open()\">\n {{ item.name }}\n </div>\n </ng-template>\n </iss-ctrl-select>\n <iss-validation-message-viewer [errors]=\"ctrl.errors\" [showMessage]=\"!ctrl.untouched\"/>\n } @else {\n <iss-field-viewer>\n <label>{{ field.label() }}</label>\n <p>{{ field.value }}</p>\n </iss-field-viewer>\n }\n }\n <mat-sidenav-container [hasBackdrop]=\"true\">\n <mat-sidenav #drawer [mode]=\"'over'\" [position]=\"'start'\" [autoFocus]=\"false\">\n <div class=\"main-sidenav\">\n <div class=\"sidenav-title bc-white\">\n <h3> Employee Information </h3>\n <ds-icon icon=\"close\" class=\"fc-black fs-20 p-3 cursor-pointer\" (click)=\"drawer.close()\"></ds-icon>\n </div>\n <div class=\"sidenav-body p-0\">\n <div class=\"d-flex flex-column align-items-center gap-3 sidenav-user bc-off-white text-center\">\n <ds-avatar [attr.image]=\"userImage()\" [attr.label]=\"userData?.name\"></ds-avatar>\n @if (userData?.employeeNumber) {\n <div class=\"d-flex flex-column gap-1\">\n <h4 class=\"fs-16 fc-black fw-medium mb-0\">{{ userData?.name }}</h4>\n @if (!userData?.job?.name) {\n <h6 class=\"fs-12 fc-dark-gray fw-normal mb-0\">{{ userData?.position?.name }}</h6>\n }\n @if (!userData?.position?.name) {\n <h6 class=\"fs-12 fc-dark-gray fw-normal mb-0\">{{ userData?.job?.name }}</h6>\n }\n </div>\n }\n <div class=\"d-flex flex-wrap gap-2\">\n <div class=\"fs-12 fc-black d-flex align-items-center gap-2 box-shadow bc-white radius-4 p-2 profile-box\">\n <ds-icon icon=\"mail-o\" class=\"fc-coral fs-20\"></ds-icon>\n <a [href]=\"'mailTo:' + userData?.email\" class=\"fc-black\">{{ userData?.email }}</a>\n </div>\n @if (userData?.contact?.mobile) {\n <div class=\"fs-12 fc-black d-flex align-items-center gap-2 box-shadow bc-white radius-4 p-2 profile-box\">\n <ds-icon icon=\"phone\" class=\"fc-coral fs-20\"></ds-icon>\n <a [href]=\"'tel:' + userData?.contact?.mobile\" class=\"fc-black\">\n <bdi>{{ userData?.contact?.mobile }}</bdi>\n </a>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </mat-sidenav>\n </mat-sidenav-container>\n `,\n styles: `\n .mat-drawer {\n position: fixed;\n left: 0;\n }`,\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class UserPickerField extends FieldBase {\n userImageHost = \"https://igateapp.stc.com.sa\";\n employeeService = inject(Employee);\n options: any = signal([]);\n userData: any;\n #query: Subject<string> = new Subject<string>();\n\n constructor() {\n super();\n this.#query.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n // a new query cancels the request still in flight\n switchMap((query: string) => this.employeeService.search(query)),\n map((res: any) => {\n return res.map((user: any) => {\n user.value = user.email;\n user.label = user.name;\n return user;\n });\n }),\n takeUntilDestroyed(this.destroyRef)\n ).subscribe((res: any) => {\n this.options.set(res);\n });\n }\n\n userImage(): string | null {\n const image: string | undefined = this.userData?.profileImage ?? this.userData?.profileImageUrl;\n if (!image) {\n return null;\n }\n return image.startsWith(\"http\") ? image : this.userImageHost + image;\n }\n\n search(event: string) {\n this.#query.next(event);\n }\n\n updateField($event: string | FormData) {\n this.options.set([]);\n }\n\n showUserData(item: any) {\n this.userData = item;\n }\n}\n"],"names":[],"mappings":"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"}
|