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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iss-ctrl-file-picker.mjs","sources":["../../../projects/iss/file-picker/src/droppable.ts","../../../projects/iss/file-picker/src/file-picker.control.ts","../../../projects/iss/file-picker/src/public-api.ts","../../../projects/iss/file-picker/src/iss-ctrl-file-picker.ts"],"sourcesContent":["import { Directive, HostListener, output, OutputEmitterRef } from \"@angular/core\";\r\n\r\n@Directive({selector: \"[droppable]\"})\r\nexport class Droppable {\r\n onDrop: OutputEmitterRef<FileList> = output();\r\n\r\n @HostListener(\"dragover\", [\"$event\"])\r\n onDragOver(evt: any) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n }\r\n\r\n @HostListener(\"dragleave\", [\"$event\"])\r\n onDragLeave(evt: any) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n }\r\n\r\n @HostListener(\"drop\", [\"$event\"])\r\n onDropped(evt: any) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n this.onDrop.emit(evt.dataTransfer.files);\r\n }\r\n}\r\n","import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, input, InputSignal, OnDestroy, Signal, signal, WritableSignal } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { Hints } from \"iss-ctrl/base\";\nimport { ControlBase } from \"iss-ctrl/base\";\nimport { IssAttachment } from \"iss-ctrl/tokens\";\nimport { Droppable } from \"./droppable\";\nimport { IssFile } from \"./file\";\n\n/**\n * `<iss-ctrl-file-picker>` — attachment upload with a per-file progress and error state.\n *\n * Uploading is done by the host: the control emits the picked files and renders whatever is\n * fed back through `uploadedFiles`, `uploading` and `uploadingError`.\n *\n * @example\n * ```html\n * <iss-ctrl-file-picker\n * formControlName=\"attachments\"\n * [multiple]=\"true\"\n * accept=\".pdf,.png\"\n * [uploading]=\"uploading()\"\n * [uploadedFiles]=\"uploaded()\"\n * />\n * ```\n *\n * ### Own inputs\n * | Property | Type | Default | Description |\n * | --- | --- | --- | --- |\n * | `accept` | `string \\| undefined` | `undefined` | Accepted extensions or MIME types for the native picker. |\n * | `showDownloadButton` | `boolean` | `true` | Shows the download action on each attachment. |\n * | `showDeleteButton` | `boolean` | `true` | Shows the remove action on each attachment. |\n * | `uploading` | `boolean` | `false` | Renders the in-progress state. |\n * | `uploadedFiles` | `IssAttachment[]` | `[]` | Files already stored on the server. |\n * | `uploadingError` | `string \\| undefined` | `undefined` | Error message attached to the failed upload. |\n *\n * ### Inherited from {@link ControlBase}\n * `formControlName` · `readonly` · `className` · `(onChange)` · `multiple` · `hints`\n *\n * Does not project a label — the field label is rendered by the wrapping `iss-field-*`.\n */\n@Component({\n selector: \"iss-ctrl-file-picker\",\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n imports: [\n ReactiveFormsModule,\n Droppable,\n Hints,\n ],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: FilePickerControl, multi: true }\n ],\n template: `\n <ds-file-picker (click)=\"openFilePicker(inputFile)\" (onDrop)=\"captureFile($event)\" droppable>\n <input\n #inputFile\n (change)=\"captureFile($any($event.target).files)\"\n (click)=\"$event.stopPropagation()\"\n [accept]=\"accept()\"\n [formControl]=\"ctrl\"\n [multiple]=\"multiple()\"\n [disabled]=\"readonly()\"\n [style.display]=\"'none'\"\n type=\"file\"\n />\n </ds-file-picker>\n\n <iss-ctrl-hints [hints]=\"hints()\" [touched]=\"touched()\"/>\n <!--<iss-viewer-attachment (deleteOut)=\"onDelete($event)\" [field]=\"filesValue()\" [uploading]=\"uploading()\"/>-->\n `,\n styles: `\n .file-uploader {\n --uploader-height: 150px;\n --uploader-width: 100%;\n --uploader-bg: var(--off-white);\n --uploader-border: 1px dashed var(--dark-gray);\n --uploader-radius: var(--box-radius);\n --uploader-padding: 1rem;\n\n height: var(--uploader-height);\n background-color: var(--uploader-bg);\n border: var(--uploader-border);\n border-radius: var(--uploader-radius);\n padding: var(--uploader-padding);\n text-align: center;\n cursor: pointer;\n\n & --input {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 0.75rem;\n }\n }`\n})\nexport class FilePickerControl extends ControlBase implements OnDestroy {\n /**\n * Accepted extensions or MIME types, passed straight to the native file input.\n */\n accept: InputSignal<string | undefined> = input();\n /**\n * Shows the download action on each listed attachment.\n */\n showDownloadButton: InputSignal<boolean> = input(true);\n /**\n * Shows the remove action on each listed attachment.\n */\n showDeleteButton: InputSignal<boolean> = input(true);\n /**\n * Renders the upload-in-progress state; set by the host that performs the upload.\n */\n uploading: InputSignal<boolean> = input(false);\n /**\n * Attachments already stored on the server, merged into the rendered list.\n */\n uploadedFiles: InputSignal<IssAttachment[]> = input<IssAttachment[]>([]);\n /**\n * Error message shown on the attachment whose upload failed.\n */\n uploadingError: InputSignal<string | undefined> = input<string | undefined>(undefined);\n readonly filesValue: Signal<any> = computed(() => this.#returnAttachmentViewObject());\n protected attachments: WritableSignal<IssFile[]> = signal([]);\n #uploadedFilesEffectRef = effect(() => {\n this.#markUploadedFiles();\n });\n\n /*todo needs review and refactor*/\n\n ngOnDestroy(): void {\n this.#uploadedFilesEffectRef.destroy();\n }\n\n override writeValue(val: FormData | string | null): void {\n if (typeof val === \"string\") {\n return;\n }\n this.#reset();\n if (val) {\n this.attachments.set([...this.attachments(), ...this.#convertFormDataToFiles(val)]);\n }\n }\n\n protected onDelete(files: IssFile[]): void {\n this.attachments.set(files);\n this.emitValue(this.#formDataFactory(this.attachments()));\n }\n\n protected captureFile($event: FileList) {\n if (this.readonly() || this.disabled()) {\n return;\n }\n if (!$event) {\n return;\n }\n if (!$event.length) {\n return;\n }\n this.markAsTouched();\n const files: File[] = Array.from($event);\n const issFiles: IssFile[] = files.map((file: File): IssFile => {\n return {\n name: file.name,\n size: file.size,\n type: file.type,\n selected: Date.now(),\n file: file,\n };\n });\n this.#updateAttachments(issFiles);\n // The field component uploads this output. Emit only the files selected in\n // this interaction: `attachments` also contains files selected earlier, so\n // serialising it would upload those files again whenever more are added.\n this.emitValue(this.#formDataFactory(issFiles));\n }\n\n protected openFilePicker(input: HTMLInputElement): void {\n if (this.readonly() || this.disabled()) {\n return;\n }\n input.click();\n this.markAsTouched();\n }\n\n #updateAttachments(selectedFiles: IssFile[]) {\n if (!this.multiple()) {\n this.attachments.set([selectedFiles[0]]);\n return;\n }\n this.attachments.update((files: IssFile[]) => {\n files = [...files, ...selectedFiles];\n return files;\n });\n }\n\n #formDataFactory(files: IssFile[]): FormData | null {\n if (files.length === 0) {\n return null;\n }\n const fd: FormData = new FormData();\n let formDataKey = \"file\";\n if (this.multiple()) {\n formDataKey = \"files\";\n }\n for (let i = 0; i < files.length; i++) {\n fd.append(formDataKey, (files[i].file as File));\n }\n return fd;\n }\n\n #reset() {\n this.attachments.set([]);\n }\n\n #convertFormDataToFiles(val: FormData): IssFile[] {\n if (!val || !(val instanceof FormData)) {\n return [];\n }\n const files: File[] = [];\n for (const pair of val.entries()) {\n if (pair[1] instanceof File) {\n files.push(pair[1]);\n }\n }\n return files;\n }\n\n #markUploadedFiles() {\n this.attachments.update((attachments: IssFile[]) => {\n return attachments.map((attachment: IssFile) => {\n // const uploadedFile = this.uploadedFiles().find((f) => f.selected === attachment.selected && f.name === attachment.name);\n if (this.uploadingError()) {\n attachment.errorMsg = this.uploadingError();\n }\n // if (uploadedFile) {\n // attachment.id = uploadedFile.id;\n // }\n return attachment;\n });\n });\n }\n\n #returnAttachmentViewObject() {\n return {\n config: {\n showDownloadButton: this.showDownloadButton(),\n showDeleteButton: this.showDeleteButton()\n },\n ctrlJsonValue: signal(this.attachments())\n };\n }\n}\n","// The file-picker control. Its field and viewer stay in the primary entry point and reach it\n// from there, so the control ships only to an app that renders it or imports it directly.\n\nexport * from \"./droppable\";\nexport * from \"./file-picker.control\";\nexport * from \"./file\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"iss-ctrl-file-picker.mjs","sources":["../../../projects/iss/file-picker/src/droppable.ts","../../../projects/iss/file-picker/src/file-picker.control.ts","../../../projects/iss/file-picker/src/public-api.ts","../../../projects/iss/file-picker/src/iss-ctrl-file-picker.ts"],"sourcesContent":["import { Directive, HostListener, output, OutputEmitterRef } from \"@angular/core\";\r\n\r\n@Directive({selector: \"[droppable]\"})\r\nexport class Droppable {\r\n onDrop: OutputEmitterRef<FileList> = output();\r\n\r\n @HostListener(\"dragover\", [\"$event\"])\r\n onDragOver(evt: any) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n }\r\n\r\n @HostListener(\"dragleave\", [\"$event\"])\r\n onDragLeave(evt: any) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n }\r\n\r\n @HostListener(\"drop\", [\"$event\"])\r\n onDropped(evt: any) {\r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n this.onDrop.emit(evt.dataTransfer.files);\r\n }\r\n}\r\n","import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, input, InputSignal, OnDestroy, Signal, signal, WritableSignal } from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, ReactiveFormsModule } from \"@angular/forms\";\nimport { Hints } from \"iss-ctrl/base\";\nimport { ControlBase } from \"iss-ctrl/base\";\nimport { IssAttachment } from \"iss-ctrl/tokens\";\nimport { Droppable } from \"./droppable\";\nimport { IssFile } from \"./file\";\n\n/**\n * `<iss-ctrl-file-picker>` — attachment upload with a per-file progress and error state.\n *\n * Uploading is done by the host: the control emits the picked files and renders whatever is\n * fed back through `uploadedFiles`, `uploading` and `uploadingError`.\n *\n * @example\n * ```html\n * <iss-ctrl-file-picker\n * formControlName=\"attachments\"\n * [multiple]=\"true\"\n * accept=\".pdf,.png\"\n * [uploading]=\"uploading()\"\n * [uploadedFiles]=\"uploaded()\"\n * />\n * ```\n *\n * ### Own inputs\n * | Property | Type | Default | Description |\n * | --- | --- | --- | --- |\n * | `accept` | `string \\| undefined` | `undefined` | Accepted extensions or MIME types for the native picker. |\n * | `showDownloadButton` | `boolean` | `true` | Shows the download action on each attachment. |\n * | `showDeleteButton` | `boolean` | `true` | Shows the remove action on each attachment. |\n * | `uploading` | `boolean` | `false` | Renders the in-progress state. |\n * | `uploadedFiles` | `IssAttachment[]` | `[]` | Files already stored on the server. |\n * | `uploadingError` | `string \\| undefined` | `undefined` | Error message attached to the failed upload. |\n *\n * ### Inherited from {@link ControlBase}\n * `formControlName` · `readonly` · `className` · `(onChange)` · `multiple` · `hints`\n *\n * Projects a `<label>` above the control — the wrapping `iss-field-*` passes the field label in that way.\n */\n@Component({\n selector: \"iss-ctrl-file-picker\",\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n imports: [\n ReactiveFormsModule,\n Droppable,\n Hints,\n ],\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: FilePickerControl, multi: true }\n ],\n template: `\n <ng-content select=\"label\"></ng-content>\n <ds-file-picker (click)=\"openFilePicker(inputFile)\" (onDrop)=\"captureFile($event)\" droppable>\n <input\n #inputFile\n (change)=\"captureFile($any($event.target).files)\"\n (click)=\"$event.stopPropagation()\"\n [accept]=\"accept()\"\n [formControl]=\"ctrl\"\n [multiple]=\"multiple()\"\n [disabled]=\"readonly()\"\n [style.display]=\"'none'\"\n type=\"file\"\n />\n </ds-file-picker>\n\n <iss-ctrl-hints [hints]=\"hints()\" [touched]=\"touched()\"/>\n <!--<iss-viewer-attachment (deleteOut)=\"onDelete($event)\" [field]=\"filesValue()\" [uploading]=\"uploading()\"/>-->\n `,\n styles: `\n .file-uploader {\n --uploader-height: 150px;\n --uploader-width: 100%;\n --uploader-bg: var(--off-white);\n --uploader-border: 1px dashed var(--dark-gray);\n --uploader-radius: var(--box-radius);\n --uploader-padding: 1rem;\n\n height: var(--uploader-height);\n background-color: var(--uploader-bg);\n border: var(--uploader-border);\n border-radius: var(--uploader-radius);\n padding: var(--uploader-padding);\n text-align: center;\n cursor: pointer;\n\n & --input {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 0.75rem;\n }\n }`\n})\nexport class FilePickerControl extends ControlBase implements OnDestroy {\n /**\n * Accepted extensions or MIME types, passed straight to the native file input.\n */\n accept: InputSignal<string | undefined> = input();\n /**\n * Shows the download action on each listed attachment.\n */\n showDownloadButton: InputSignal<boolean> = input(true);\n /**\n * Shows the remove action on each listed attachment.\n */\n showDeleteButton: InputSignal<boolean> = input(true);\n /**\n * Renders the upload-in-progress state; set by the host that performs the upload.\n */\n uploading: InputSignal<boolean> = input(false);\n /**\n * Attachments already stored on the server, merged into the rendered list.\n */\n uploadedFiles: InputSignal<IssAttachment[]> = input<IssAttachment[]>([]);\n /**\n * Error message shown on the attachment whose upload failed.\n */\n uploadingError: InputSignal<string | undefined> = input<string | undefined>(undefined);\n readonly filesValue: Signal<any> = computed(() => this.#returnAttachmentViewObject());\n protected attachments: WritableSignal<IssFile[]> = signal([]);\n #uploadedFilesEffectRef = effect(() => {\n this.#markUploadedFiles();\n });\n\n /*todo needs review and refactor*/\n\n ngOnDestroy(): void {\n this.#uploadedFilesEffectRef.destroy();\n }\n\n override writeValue(val: FormData | string | null): void {\n if (typeof val === \"string\") {\n return;\n }\n this.#reset();\n if (val) {\n this.attachments.set([...this.attachments(), ...this.#convertFormDataToFiles(val)]);\n }\n }\n\n protected onDelete(files: IssFile[]): void {\n this.attachments.set(files);\n this.emitValue(this.#formDataFactory(this.attachments()));\n }\n\n protected captureFile($event: FileList) {\n if (this.readonly() || this.disabled()) {\n return;\n }\n if (!$event) {\n return;\n }\n if (!$event.length) {\n return;\n }\n this.markAsTouched();\n const files: File[] = Array.from($event);\n const issFiles: IssFile[] = files.map((file: File): IssFile => {\n return {\n name: file.name,\n size: file.size,\n type: file.type,\n selected: Date.now(),\n file: file,\n };\n });\n this.#updateAttachments(issFiles);\n // The field component uploads this output. Emit only the files selected in\n // this interaction: `attachments` also contains files selected earlier, so\n // serialising it would upload those files again whenever more are added.\n this.emitValue(this.#formDataFactory(issFiles));\n }\n\n protected openFilePicker(input: HTMLInputElement): void {\n if (this.readonly() || this.disabled()) {\n return;\n }\n input.click();\n this.markAsTouched();\n }\n\n #updateAttachments(selectedFiles: IssFile[]) {\n if (!this.multiple()) {\n this.attachments.set([selectedFiles[0]]);\n return;\n }\n this.attachments.update((files: IssFile[]) => {\n files = [...files, ...selectedFiles];\n return files;\n });\n }\n\n #formDataFactory(files: IssFile[]): FormData | null {\n if (files.length === 0) {\n return null;\n }\n const fd: FormData = new FormData();\n let formDataKey = \"file\";\n if (this.multiple()) {\n formDataKey = \"files\";\n }\n for (let i = 0; i < files.length; i++) {\n fd.append(formDataKey, (files[i].file as File));\n }\n return fd;\n }\n\n #reset() {\n this.attachments.set([]);\n }\n\n #convertFormDataToFiles(val: FormData): IssFile[] {\n if (!val || !(val instanceof FormData)) {\n return [];\n }\n const files: File[] = [];\n for (const pair of val.entries()) {\n if (pair[1] instanceof File) {\n files.push(pair[1]);\n }\n }\n return files;\n }\n\n #markUploadedFiles() {\n this.attachments.update((attachments: IssFile[]) => {\n return attachments.map((attachment: IssFile) => {\n // const uploadedFile = this.uploadedFiles().find((f) => f.selected === attachment.selected && f.name === attachment.name);\n if (this.uploadingError()) {\n attachment.errorMsg = this.uploadingError();\n }\n // if (uploadedFile) {\n // attachment.id = uploadedFile.id;\n // }\n return attachment;\n });\n });\n }\n\n #returnAttachmentViewObject() {\n return {\n config: {\n showDownloadButton: this.showDownloadButton(),\n showDeleteButton: this.showDeleteButton()\n },\n ctrlJsonValue: signal(this.attachments())\n };\n }\n}\n","// The file-picker control. Its field and viewer stay in the primary entry point and reach it\n// from there, so the control ships only to an app that renders it or imports it directly.\n\nexport * from \"./droppable\";\nexport * from \"./file-picker.control\";\nexport * from \"./file\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { Component } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/forms';
|
|
4
4
|
import { ReactiveFormsModule } from '@angular/forms';
|
|
5
|
-
import { F as FieldBase, V as VIEW_PROVIDER, a as ValidationMessage, b as FieldViewer } from './iss-ctrl-iss-ctrl-
|
|
5
|
+
import { F as FieldBase, V as VIEW_PROVIDER, a as ValidationMessage, b as FieldViewer } from './iss-ctrl-iss-ctrl-BG-QWWdq.mjs';
|
|
6
6
|
import { InputControl } from 'iss-ctrl/input';
|
|
7
7
|
import { InputViewer } from './iss-ctrl-input.viewer-BOZnW0_e.mjs';
|
|
8
8
|
|
|
@@ -101,4 +101,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
101
101
|
}] });
|
|
102
102
|
|
|
103
103
|
export { InputField };
|
|
104
|
-
//# sourceMappingURL=iss-ctrl-input.field-
|
|
104
|
+
//# sourceMappingURL=iss-ctrl-input.field-BiwBFYx3.mjs.map
|
package/fesm2022/{iss-ctrl-input.field-Ctlf3OCN.mjs.map → iss-ctrl-input.field-BiwBFYx3.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iss-ctrl-input.field-
|
|
1
|
+
{"version":3,"file":"iss-ctrl-input.field-BiwBFYx3.mjs","sources":["../../../projects/iss/src/components/controls/input/input.field.ts"],"sourcesContent":["import { Component } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { VIEW_PROVIDER } from \"../../../shared/constants/view-provider.const\";\nimport { ValidationMessage } from \"../../shared/validation-message\";\nimport { FieldBase } from \"../base/field-base\";\nimport { InputControl } from \"iss-ctrl/input\";\nimport { InputViewer } from \"./input.viewer\";\nimport { FieldViewer } from \"../../shared/field-viewer\";\n\n/**\n * `<iss-field-input>` — single line text, number, email or password entry.\n *\n * Rendered by the outlet for fields of type `text_input`. In `edit` mode it renders\n * {@link InputControl} plus the validation message; in `view` mode the matching viewer.\n *\n * ### Supported `config` keys\n * | Key | Type | Description |\n * | --- | --- | --- |\n * | `type` | `string` | Native input type — `text`, `number`, `email`, `password`, … |\n * | `placeholder` | `string` | Placeholder shown while empty. |\n * | `min` | `number` | Minimum numeric value. |\n * | `max` | `number` | Maximum numeric value. |\n * | `minLength` | `number` | Minimum number of characters. |\n * | `maxLength` | `number` | Maximum number of characters. |\n * | `readonly` | `boolean` | Shows the value but blocks interaction. |\n *\n * ### Other field members used\n * `label()`\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\": \"email\", \"type\": \"text_input\", \"label\": \"Email\", \"config\": { \"type\": \"email\", \"maxLength\": 120 } }\n * ```\n */\n@Component({\n selector: \"iss-field-input\",\n viewProviders: [VIEW_PROVIDER],\n imports: [\n ReactiveFormsModule,\n InputControl,\n ValidationMessage,\n InputViewer,\n FieldViewer\n ],\n template: `\n @if (field.visible()) {\n @if (field.mode() === \"edit\") {\n <iss-ctrl-input\n [formControlName]=\"field.name\"\n [type]=\"field.config.type() ?? ''\"\n [placeholder]=\"field.config.placeholder() ?? ''\"\n [min]=\"field.config.min() ?? null\"\n [max]=\"field.config.max() ?? null\"\n [readonly]=\"field.config.readonly() ?? false\"\n [minLength]=\"field.config.minLength() ?? null\"\n [maxLength]=\"field.config.maxLength() ?? null\"\n >\n <label>{{ field.label() }}</label>\n </iss-ctrl-input>\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-input [field]=\"field\"/>\n </iss-field-viewer>\n }\n }\n `\n})\nexport class InputField extends FieldBase {}\n"],"names":[],"mappings":";;;;;;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AAoCG,MAAO,UAAW,SAAQ,SAAS,CAAA;uGAA5B,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,EAzBX;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA7BC,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,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,eAAA,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,EANE,CAAC,aAAa,CAAC,EAAA,CAAA;;2FAiCnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBAnCtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;oBAC3B,aAAa,EAAE,CAAC,aAAa,CAAC;AAC9B,oBAAA,OAAO,EAAE;wBACP,mBAAmB;wBACnB,YAAY;wBACZ,iBAAiB;wBACjB,WAAW;wBACX;AACD,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;AAuBT,EAAA;AACF,iBAAA;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DATETIME_FORMAT } from 'iss-ctrl/base';
|
|
2
|
-
import {
|
|
1
|
+
import { TranslatePipe, DATETIME_FORMAT } from 'iss-ctrl/base';
|
|
2
|
+
import { USER_SEARCH_API, ATTACHMENT_UPLOAD_URL, ATTACHMENT_DOWNLOAD_URL, ATTACHMENT_UPLOAD_RESPONSE_MAPPER } from 'iss-ctrl/tokens';
|
|
3
3
|
import { NgComponentOutlet, AsyncPipe, KeyValuePipe } from '@angular/common';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
5
|
import { signal, isSignal, Injectable, inject, Injector, InjectionToken, Pipe, output, input, DestroyRef, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
@@ -616,7 +616,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
616
616
|
* | --- | --- | --- | --- |
|
|
617
617
|
* | `text_input` | `InputField` | `iss-ctrl-input` | Single line text, number, email, password. |
|
|
618
618
|
* | `textarea` | `TextareaField` | `iss-ctrl-textarea` | Multi line free text. |
|
|
619
|
-
* | `dropdown_list` | `
|
|
619
|
+
* | `dropdown_list` | `DropdownlistField` | `iss-ctrl-dropdownlist` | Searchable single/multi select. |
|
|
620
620
|
* | `toggle_button` | `ToggleButtonField` | `iss-ctrl-toggle-button` | Options as a button group. |
|
|
621
621
|
* | `checkbox` | `CheckboxField` | `iss-ctrl-checkbox` | Multi choice checkbox list. |
|
|
622
622
|
* | `radio` | `RadioField` | `iss-ctrl-radio` | Single choice radio list. |
|
|
@@ -625,7 +625,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
625
625
|
* | `datetime` | `DatetimePickerField` | `iss-ctrl-datetime-picker` | Date and time together. |
|
|
626
626
|
* | `date_range` | `DateRangePickerField` | `iss-ctrl-date-range-picker` | A start/end date range. |
|
|
627
627
|
* | `attachment` | `FilePickerField` | `iss-ctrl-file-picker` | File upload. |
|
|
628
|
-
* | `userPicker` | `UserPickerField` | `iss-ctrl-
|
|
628
|
+
* | `userPicker` | `UserPickerField` | `iss-ctrl-dropdownlist` | Employee lookup. |
|
|
629
629
|
* | `vehicle_plate` | `PlateField` | `iss-ctrl-plate-number` | Saudi vehicle plate. |
|
|
630
630
|
* | `enrichment` | `NoteField` | — | Read-only explanatory text. |
|
|
631
631
|
* | `mobile` | `MobileField` | `iss-ctrl-mobile` | International phone number. |
|
|
@@ -634,33 +634,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
634
634
|
* | `switch` | `SlideToggleField` | `iss-ctrl-slide-toggle` | Boolean on/off switch. |
|
|
635
635
|
*/
|
|
636
636
|
const COMPONENTS = {
|
|
637
|
-
text_input: () => import('./iss-ctrl-input.field-
|
|
638
|
-
textarea: () => import('./iss-ctrl-textarea.field-
|
|
639
|
-
dropdown_list: () => import('./iss-ctrl-
|
|
640
|
-
toggle_button: () => import('./iss-ctrl-toggle-button.field-
|
|
641
|
-
checkbox: () => import('./iss-ctrl-checkbox.field-
|
|
642
|
-
radio: () => import('./iss-ctrl-radio.field-
|
|
643
|
-
date: () => import('./iss-ctrl-date-picker.field-
|
|
644
|
-
time: () => import('./iss-ctrl-time-picker.field-
|
|
645
|
-
datetime: () => import('./iss-ctrl-datetime-picker.field-
|
|
646
|
-
date_range: () => import('./iss-ctrl-date-range-picker.field-
|
|
647
|
-
attachment: () => import('./iss-ctrl-file-picker.field-
|
|
648
|
-
userPicker: () => import('./iss-ctrl-user-picker.field-
|
|
649
|
-
vehicle_plate: () => import('./iss-ctrl-plate.field-
|
|
650
|
-
enrichment: () => import('./iss-ctrl-note.field-
|
|
651
|
-
mobile: () => import('./iss-ctrl-mobile.field-
|
|
652
|
-
table: () => import('./iss-ctrl-table.field-
|
|
653
|
-
chips: () => import('./iss-ctrl-chips.field-
|
|
654
|
-
switch: () => import('./iss-ctrl-slide-toggle.field-
|
|
637
|
+
text_input: () => import('./iss-ctrl-input.field-BiwBFYx3.mjs').then((c) => c.InputField),
|
|
638
|
+
textarea: () => import('./iss-ctrl-textarea.field-Dqhhu2m4.mjs').then((c) => c.TextareaField),
|
|
639
|
+
dropdown_list: () => import('./iss-ctrl-dropdownlist.field-DikBAtc_.mjs').then((c) => c.DropdownlistField),
|
|
640
|
+
toggle_button: () => import('./iss-ctrl-toggle-button.field-rAT7dVFC.mjs').then((c) => c.ToggleButtonField),
|
|
641
|
+
checkbox: () => import('./iss-ctrl-checkbox.field-CILXADas.mjs').then((c) => c.CheckboxField),
|
|
642
|
+
radio: () => import('./iss-ctrl-radio.field-Dp5D-AXQ.mjs').then((c) => c.RadioField),
|
|
643
|
+
date: () => import('./iss-ctrl-date-picker.field-Djhh1FsR.mjs').then((c) => c.DatePickerField),
|
|
644
|
+
time: () => import('./iss-ctrl-time-picker.field-CdmxRiH8.mjs').then((c) => c.TimePickerField),
|
|
645
|
+
datetime: () => import('./iss-ctrl-datetime-picker.field-DldY8vke.mjs').then((c) => c.DatetimePickerField),
|
|
646
|
+
date_range: () => import('./iss-ctrl-date-range-picker.field-Dv636SAm.mjs').then((c) => c.DateRangePickerField),
|
|
647
|
+
attachment: () => import('./iss-ctrl-file-picker.field-BMZaJxvj.mjs').then((c) => c.FilePickerField),
|
|
648
|
+
userPicker: () => import('./iss-ctrl-user-picker.field-DpmYCfpD.mjs').then((c) => c.UserPickerField),
|
|
649
|
+
vehicle_plate: () => import('./iss-ctrl-plate.field-CQQY8rnE.mjs').then((c) => c.PlateField),
|
|
650
|
+
enrichment: () => import('./iss-ctrl-note.field-CT1wVmfF.mjs').then((c) => c.NoteField),
|
|
651
|
+
mobile: () => import('./iss-ctrl-mobile.field-DLccnWKX.mjs').then((c) => c.MobileField),
|
|
652
|
+
table: () => import('./iss-ctrl-table.field-DdFjH-D8.mjs').then((c) => c.TableField),
|
|
653
|
+
chips: () => import('./iss-ctrl-chips.field-445Ds3V7.mjs').then((c) => c.ChipsField),
|
|
654
|
+
switch: () => import('./iss-ctrl-slide-toggle.field-vCJHOiSG.mjs').then((c) => c.SlideToggleField),
|
|
655
655
|
};
|
|
656
656
|
|
|
657
657
|
const SERVICES = {
|
|
658
|
-
setValue: () => import('./iss-ctrl-set-value-event-
|
|
658
|
+
setValue: () => import('./iss-ctrl-set-value-event-D0-_qIyS.mjs').then((s) => s.SetValueEvent),
|
|
659
659
|
show: () => import('./iss-ctrl-show-event-BcRCwAfo.mjs').then((s) => s.ShowEvent),
|
|
660
|
-
load: () => import('./iss-ctrl-load-value-event
|
|
661
|
-
loadOptions: () => import('./iss-ctrl-load-options-event-
|
|
662
|
-
triggerBasedOnJsonValue: () => import('./iss-ctrl-trigger-based-on-json-value-
|
|
663
|
-
replaceApiKeyDefaultImpl: () => import('./iss-ctrl-replace-api-keys-
|
|
660
|
+
load: () => import('./iss-ctrl-load-value-event--7zt90Dl.mjs').then((s) => s.LoadValueEvent),
|
|
661
|
+
loadOptions: () => import('./iss-ctrl-load-options-event-tG258cbP.mjs').then((s) => s.LoadOptionsEvent),
|
|
662
|
+
triggerBasedOnJsonValue: () => import('./iss-ctrl-trigger-based-on-json-value-I92SNsv9.mjs').then((s) => s.TriggerBasedOnJsonValue),
|
|
663
|
+
replaceApiKeyDefaultImpl: () => import('./iss-ctrl-replace-api-keys-COUv4Kin.mjs').then((s) => s.ReplaceApiKeys),
|
|
664
664
|
};
|
|
665
665
|
|
|
666
666
|
// Read-only counterpart of COMPONENTS: the component used to render a field's value
|
|
@@ -670,7 +670,7 @@ const VIEWERS = {
|
|
|
670
670
|
datetime: () => import('./iss-ctrl-datetime-picker.viewer-BeUyEBKo.mjs').then((c) => c.DatePickerTimeViewer),
|
|
671
671
|
dateRange: () => import('./iss-ctrl-date-range-picker.viewer-tmTQGPFh.mjs').then((c) => c.DateRangePickerViewer),
|
|
672
672
|
date_range: () => import('./iss-ctrl-date-range-picker.viewer-tmTQGPFh.mjs').then((c) => c.DateRangePickerViewer),
|
|
673
|
-
|
|
673
|
+
dropdown_list: () => import('./iss-ctrl-dropdownlist.viewer-OWJxDpr8.mjs').then((c) => c.DropdownlistViewer),
|
|
674
674
|
input: () => import('./iss-ctrl-input.viewer-BOZnW0_e.mjs').then((c) => c.InputViewer),
|
|
675
675
|
text: () => import('./iss-ctrl-input.viewer-BOZnW0_e.mjs').then((c) => c.InputViewer),
|
|
676
676
|
checkbox: () => import('./iss-ctrl-checkbox.viewer-C3SEUszR.mjs').then((c) => c.CheckboxViewer),
|
|
@@ -1258,25 +1258,6 @@ const VALIDATION_MESSAGES = {
|
|
|
1258
1258
|
}
|
|
1259
1259
|
};
|
|
1260
1260
|
|
|
1261
|
-
class TranslatePipe {
|
|
1262
|
-
currentLanguage = inject(UI_LANGUAGE);
|
|
1263
|
-
transform(value, locale = "") {
|
|
1264
|
-
if (typeof value === "string") {
|
|
1265
|
-
return value; // Return the string as is, if it's a string
|
|
1266
|
-
}
|
|
1267
|
-
if (value && locale) {
|
|
1268
|
-
return value[locale];
|
|
1269
|
-
}
|
|
1270
|
-
return value?.[this.currentLanguage];
|
|
1271
|
-
}
|
|
1272
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TranslatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1273
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: TranslatePipe, isStandalone: true, name: "translate" });
|
|
1274
|
-
}
|
|
1275
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: TranslatePipe, decorators: [{
|
|
1276
|
-
type: Pipe,
|
|
1277
|
-
args: [{ name: "translate" }]
|
|
1278
|
-
}] });
|
|
1279
|
-
|
|
1280
1261
|
class ValidationMessage {
|
|
1281
1262
|
errors = input.required(...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
|
|
1282
1263
|
showMessage = input.required(...(ngDevMode ? [{ debugName: "showMessage" }] : /* istanbul ignore next */ []));
|
|
@@ -1289,16 +1270,16 @@ class ValidationMessage {
|
|
|
1289
1270
|
return errorMessageGenerator(error.value);
|
|
1290
1271
|
}
|
|
1291
1272
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ValidationMessage, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1292
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ValidationMessage, isStandalone: true, selector: "iss-validation-message-viewer", inputs: { errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: true, transformFunction: null }, showMessage: { classPropertyName: "showMessage", publicName: "showMessage", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
1293
|
-
@if (errors() !== null && showMessage()) {
|
|
1294
|
-
<div class="messages">
|
|
1295
|
-
@for (error of errors() ?? {} | keyvalue; track error) {
|
|
1296
|
-
<p>
|
|
1297
|
-
<mat-error>{{ getValidationMessage(error) | translate }}</mat-error>
|
|
1298
|
-
</p>
|
|
1299
|
-
}
|
|
1300
|
-
</div>
|
|
1301
|
-
}
|
|
1273
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: ValidationMessage, isStandalone: true, selector: "iss-validation-message-viewer", inputs: { errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: true, transformFunction: null }, showMessage: { classPropertyName: "showMessage", publicName: "showMessage", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
1274
|
+
@if (errors() !== null && showMessage()) {
|
|
1275
|
+
<div class="messages">
|
|
1276
|
+
@for (error of errors() ?? {} | keyvalue; track error) {
|
|
1277
|
+
<p>
|
|
1278
|
+
<mat-error>{{ getValidationMessage(error) | translate }}</mat-error>
|
|
1279
|
+
</p>
|
|
1280
|
+
}
|
|
1281
|
+
</div>
|
|
1282
|
+
}
|
|
1302
1283
|
`, isInline: true, styles: [":host{display:block;position:relative}.messages{position:absolute;inset-inline:0;top:0;z-index:1}p{margin:0}\n"], dependencies: [{ kind: "directive", type: MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
1303
1284
|
}
|
|
1304
1285
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ValidationMessage, decorators: [{
|
|
@@ -1307,16 +1288,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
1307
1288
|
KeyValuePipe,
|
|
1308
1289
|
TranslatePipe,
|
|
1309
1290
|
MatError
|
|
1310
|
-
], template: `
|
|
1311
|
-
@if (errors() !== null && showMessage()) {
|
|
1312
|
-
<div class="messages">
|
|
1313
|
-
@for (error of errors() ?? {} | keyvalue; track error) {
|
|
1314
|
-
<p>
|
|
1315
|
-
<mat-error>{{ getValidationMessage(error) | translate }}</mat-error>
|
|
1316
|
-
</p>
|
|
1317
|
-
}
|
|
1318
|
-
</div>
|
|
1319
|
-
}
|
|
1291
|
+
], template: `
|
|
1292
|
+
@if (errors() !== null && showMessage()) {
|
|
1293
|
+
<div class="messages">
|
|
1294
|
+
@for (error of errors() ?? {} | keyvalue; track error) {
|
|
1295
|
+
<p>
|
|
1296
|
+
<mat-error>{{ getValidationMessage(error) | translate }}</mat-error>
|
|
1297
|
+
</p>
|
|
1298
|
+
}
|
|
1299
|
+
</div>
|
|
1300
|
+
}
|
|
1320
1301
|
`, styles: [":host{display:block;position:relative}.messages{position:absolute;inset-inline:0;top:0;z-index:1}p{margin:0}\n"] }]
|
|
1321
1302
|
}], propDecorators: { errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: true }] }], showMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showMessage", required: true }] }] } });
|
|
1322
1303
|
|
|
@@ -1774,7 +1755,7 @@ var time_validator = /*#__PURE__*/Object.freeze({
|
|
|
1774
1755
|
// a host application needs to drive a form.
|
|
1775
1756
|
//
|
|
1776
1757
|
// Controls are NOT exported from here. Each one is its own entry point — `iss-ctrl/input`,
|
|
1777
|
-
// `iss-ctrl/
|
|
1758
|
+
// `iss-ctrl/dropdownlist`, `iss-ctrl/mobile`, … — because re-exporting a control statically makes
|
|
1778
1759
|
// the bundler inline it, and with it every control, back into whatever loads this file. The
|
|
1779
1760
|
// fields below reach their control through that entry point, so an app downloads only the
|
|
1780
1761
|
// controls it renders. `iss-ctrl/base` and `iss-ctrl/tokens` are re-exported for convenience;
|
|
@@ -1785,5 +1766,5 @@ var time_validator = /*#__PURE__*/Object.freeze({
|
|
|
1785
1766
|
* Generated bundle index. Do not edit.
|
|
1786
1767
|
*/
|
|
1787
1768
|
|
|
1788
|
-
export { ArabicNumberPipe as A, COMPONENTS as C, Employee as E, FieldBase as F, IssField as I, Loader as L, Outlet as O, PLACEHOLDER_REGEX as P, SERVICES as S,
|
|
1789
|
-
//# sourceMappingURL=iss-ctrl-iss-ctrl-
|
|
1769
|
+
export { ArabicNumberPipe as A, COMPONENTS as C, Employee as E, FieldBase as F, IssField as I, Loader as L, Outlet as O, PLACEHOLDER_REGEX as P, SERVICES as S, TimeValidator as T, VIEW_PROVIDER as V, ValidationMessage as a, FieldViewer as b, FileHandler as c, FormEngine as d, FieldDataInjector as e, VALIDATION_MESSAGES as f, getPropertyByPath as g, VALIDATORS as h, isActiveValidationRule as i, FIELD_DATA as j, PlateLetterPipe as k, arrayFrom as l, formatFileSize as m, IssValidators as n, FileValidators as o, replacePlaceholders as r };
|
|
1770
|
+
//# sourceMappingURL=iss-ctrl-iss-ctrl-BG-QWWdq.mjs.map
|