iss-ctrl 0.0.21 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -0
- package/fesm2022/iss-ctrl-attachment.viewer-DVUL39xd.mjs +110 -0
- package/fesm2022/iss-ctrl-attachment.viewer-DVUL39xd.mjs.map +1 -0
- package/fesm2022/iss-ctrl-base.mjs +682 -0
- package/fesm2022/iss-ctrl-base.mjs.map +1 -0
- package/fesm2022/iss-ctrl-checkbox.field-CILXADas.mjs +88 -0
- package/fesm2022/iss-ctrl-checkbox.field-CILXADas.mjs.map +1 -0
- package/fesm2022/iss-ctrl-checkbox.mjs +146 -0
- package/fesm2022/iss-ctrl-checkbox.mjs.map +1 -0
- package/fesm2022/iss-ctrl-checkbox.viewer-C3SEUszR.mjs +31 -0
- package/fesm2022/iss-ctrl-checkbox.viewer-C3SEUszR.mjs.map +1 -0
- package/fesm2022/iss-ctrl-chips.field-445Ds3V7.mjs +76 -0
- package/fesm2022/iss-ctrl-chips.field-445Ds3V7.mjs.map +1 -0
- package/fesm2022/iss-ctrl-chips.mjs +168 -0
- package/fesm2022/iss-ctrl-chips.mjs.map +1 -0
- package/fesm2022/iss-ctrl-chips.viewer-BcKT2hcq.mjs +38 -0
- package/fesm2022/iss-ctrl-chips.viewer-BcKT2hcq.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-picker.field-Djhh1FsR.mjs +98 -0
- package/fesm2022/iss-ctrl-date-picker.field-Djhh1FsR.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-picker.mjs +200 -0
- package/fesm2022/iss-ctrl-date-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-picker.viewer-Dsmsf91t.mjs +40 -0
- package/fesm2022/iss-ctrl-date-picker.viewer-Dsmsf91t.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-range-picker.field-Dv636SAm.mjs +97 -0
- package/fesm2022/iss-ctrl-date-range-picker.field-Dv636SAm.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-range-picker.mjs +307 -0
- package/fesm2022/iss-ctrl-date-range-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-date-range-picker.viewer-tmTQGPFh.mjs +41 -0
- package/fesm2022/iss-ctrl-date-range-picker.viewer-tmTQGPFh.mjs.map +1 -0
- package/fesm2022/iss-ctrl-datetime-picker.field-DldY8vke.mjs +98 -0
- package/fesm2022/iss-ctrl-datetime-picker.field-DldY8vke.mjs.map +1 -0
- package/fesm2022/iss-ctrl-datetime-picker.mjs +226 -0
- package/fesm2022/iss-ctrl-datetime-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-datetime-picker.viewer-BeUyEBKo.mjs +42 -0
- package/fesm2022/iss-ctrl-datetime-picker.viewer-BeUyEBKo.mjs.map +1 -0
- package/fesm2022/iss-ctrl-dropdownlist.field-DikBAtc_.mjs +87 -0
- package/fesm2022/iss-ctrl-dropdownlist.field-DikBAtc_.mjs.map +1 -0
- package/fesm2022/iss-ctrl-dropdownlist.mjs +398 -0
- package/fesm2022/iss-ctrl-dropdownlist.mjs.map +1 -0
- package/fesm2022/iss-ctrl-dropdownlist.viewer-OWJxDpr8.mjs +30 -0
- package/fesm2022/iss-ctrl-dropdownlist.viewer-OWJxDpr8.mjs.map +1 -0
- package/fesm2022/iss-ctrl-file-picker.field-BMZaJxvj.mjs +210 -0
- package/fesm2022/iss-ctrl-file-picker.field-BMZaJxvj.mjs.map +1 -0
- package/fesm2022/iss-ctrl-file-picker.mjs +274 -0
- package/fesm2022/iss-ctrl-file-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-input.field-BiwBFYx3.mjs +104 -0
- package/fesm2022/iss-ctrl-input.field-BiwBFYx3.mjs.map +1 -0
- package/fesm2022/iss-ctrl-input.mjs +204 -0
- package/fesm2022/iss-ctrl-input.mjs.map +1 -0
- package/fesm2022/iss-ctrl-input.viewer-BOZnW0_e.mjs +22 -0
- package/fesm2022/iss-ctrl-input.viewer-BOZnW0_e.mjs.map +1 -0
- package/fesm2022/iss-ctrl-iss-ctrl-BG-QWWdq.mjs +1770 -0
- package/fesm2022/iss-ctrl-iss-ctrl-BG-QWWdq.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-load-event-bOt6IlIo.mjs → iss-ctrl-load-event-T4L3k9XO.mjs} +4 -3
- package/fesm2022/iss-ctrl-load-event-T4L3k9XO.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-load-options-event-CxyAyNMe.mjs → iss-ctrl-load-options-event-tG258cbP.mjs} +3 -3
- package/fesm2022/{iss-ctrl-load-options-event-CxyAyNMe.mjs.map → iss-ctrl-load-options-event-tG258cbP.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-load-value-event-DJKJ5S3h.mjs → iss-ctrl-load-value-event--7zt90Dl.mjs} +3 -3
- package/fesm2022/{iss-ctrl-load-value-event-DJKJ5S3h.mjs.map → iss-ctrl-load-value-event--7zt90Dl.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-mobile.field-DLccnWKX.mjs +77 -0
- package/fesm2022/iss-ctrl-mobile.field-DLccnWKX.mjs.map +1 -0
- package/fesm2022/iss-ctrl-mobile.mjs +2465 -0
- package/fesm2022/iss-ctrl-mobile.mjs.map +1 -0
- package/fesm2022/iss-ctrl-mobile.viewer-DQgxAcR-.mjs +22 -0
- package/fesm2022/iss-ctrl-mobile.viewer-DQgxAcR-.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-note.field-B_Lbp28X.mjs → iss-ctrl-note.field-CT1wVmfF.mjs} +2 -2
- package/fesm2022/{iss-ctrl-note.field-B_Lbp28X.mjs.map → iss-ctrl-note.field-CT1wVmfF.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-plate.field-CQQY8rnE.mjs +92 -0
- package/fesm2022/iss-ctrl-plate.field-CQQY8rnE.mjs.map +1 -0
- package/fesm2022/iss-ctrl-plate.mjs +493 -0
- package/fesm2022/iss-ctrl-plate.mjs.map +1 -0
- package/fesm2022/iss-ctrl-plate.viewer-B8PUBLH8.mjs +179 -0
- package/fesm2022/iss-ctrl-plate.viewer-B8PUBLH8.mjs.map +1 -0
- package/fesm2022/iss-ctrl-radio.field-Dp5D-AXQ.mjs +88 -0
- package/fesm2022/iss-ctrl-radio.field-Dp5D-AXQ.mjs.map +1 -0
- package/fesm2022/iss-ctrl-radio.mjs +104 -0
- package/fesm2022/iss-ctrl-radio.mjs.map +1 -0
- package/fesm2022/iss-ctrl-radio.viewer-EiDliZro.mjs +30 -0
- package/fesm2022/iss-ctrl-radio.viewer-EiDliZro.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-replace-api-keys-C0XYQW4i.mjs → iss-ctrl-replace-api-keys-COUv4Kin.mjs} +2 -2
- package/fesm2022/{iss-ctrl-replace-api-keys-C0XYQW4i.mjs.map → iss-ctrl-replace-api-keys-COUv4Kin.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-set-value-event-CgXhi0Bv.mjs → iss-ctrl-set-value-event-D0-_qIyS.mjs} +2 -2
- package/fesm2022/{iss-ctrl-set-value-event-CgXhi0Bv.mjs.map → iss-ctrl-set-value-event-D0-_qIyS.mjs.map} +1 -1
- package/fesm2022/iss-ctrl-slide-toggle.field-vCJHOiSG.mjs +85 -0
- package/fesm2022/iss-ctrl-slide-toggle.field-vCJHOiSG.mjs.map +1 -0
- package/fesm2022/iss-ctrl-slide-toggle.mjs +66 -0
- package/fesm2022/iss-ctrl-slide-toggle.mjs.map +1 -0
- package/fesm2022/iss-ctrl-slide-toggle.viewer-hsIHwDj3.mjs +34 -0
- package/fesm2022/iss-ctrl-slide-toggle.viewer-hsIHwDj3.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-table.field-B5FxF6hn.mjs → iss-ctrl-table.field-DdFjH-D8.mjs} +142 -140
- package/fesm2022/iss-ctrl-table.field-DdFjH-D8.mjs.map +1 -0
- package/fesm2022/iss-ctrl-textarea.field-Dqhhu2m4.mjs +82 -0
- package/fesm2022/iss-ctrl-textarea.field-Dqhhu2m4.mjs.map +1 -0
- package/fesm2022/iss-ctrl-textarea.mjs +115 -0
- package/fesm2022/iss-ctrl-textarea.mjs.map +1 -0
- package/fesm2022/iss-ctrl-textarea.viewer-CpmLauik.mjs +22 -0
- package/fesm2022/iss-ctrl-textarea.viewer-CpmLauik.mjs.map +1 -0
- package/fesm2022/iss-ctrl-time-picker.field-CdmxRiH8.mjs +77 -0
- package/fesm2022/iss-ctrl-time-picker.field-CdmxRiH8.mjs.map +1 -0
- package/fesm2022/iss-ctrl-time-picker.mjs +170 -0
- package/fesm2022/iss-ctrl-time-picker.mjs.map +1 -0
- package/fesm2022/iss-ctrl-time-picker.viewer-CJeFLrdI.mjs +22 -0
- package/fesm2022/iss-ctrl-time-picker.viewer-CJeFLrdI.mjs.map +1 -0
- package/fesm2022/iss-ctrl-toggle-button.field-rAT7dVFC.mjs +101 -0
- package/fesm2022/iss-ctrl-toggle-button.field-rAT7dVFC.mjs.map +1 -0
- package/fesm2022/iss-ctrl-toggle-button.mjs +158 -0
- package/fesm2022/iss-ctrl-toggle-button.mjs.map +1 -0
- package/fesm2022/iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs +30 -0
- package/fesm2022/iss-ctrl-toggle-button.viewer-CC-8_Dy4.mjs.map +1 -0
- package/fesm2022/iss-ctrl-tokens.mjs +25 -0
- package/fesm2022/iss-ctrl-tokens.mjs.map +1 -0
- package/fesm2022/{iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs → iss-ctrl-trigger-based-on-json-value-I92SNsv9.mjs} +2 -2
- package/fesm2022/{iss-ctrl-trigger-based-on-json-value-2v1kLVHZ.mjs.map → iss-ctrl-trigger-based-on-json-value-I92SNsv9.mjs.map} +1 -1
- package/fesm2022/{iss-ctrl-user-picker.field-BH63sZ-X.mjs → iss-ctrl-user-picker.field-DpmYCfpD.mjs} +154 -153
- package/fesm2022/iss-ctrl-user-picker.field-DpmYCfpD.mjs.map +1 -0
- package/fesm2022/iss-ctrl.mjs +3 -1
- package/fesm2022/iss-ctrl.mjs.map +1 -1
- package/package.json +69 -1
- package/types/iss-ctrl-base.d.ts +318 -0
- package/types/iss-ctrl-checkbox.d.ts +46 -0
- package/types/iss-ctrl-chips.d.ts +41 -0
- package/types/iss-ctrl-date-picker.d.ts +75 -0
- package/types/iss-ctrl-date-range-picker.d.ts +95 -0
- package/types/iss-ctrl-datetime-picker.d.ts +77 -0
- package/types/iss-ctrl-dropdownlist.d.ts +78 -0
- package/types/iss-ctrl-file-picker.d.ts +95 -0
- package/types/iss-ctrl-input.d.ts +76 -0
- package/types/iss-ctrl-mobile.d.ts +91 -0
- package/types/iss-ctrl-plate.d.ts +54 -0
- package/types/iss-ctrl-radio.d.ts +34 -0
- package/types/iss-ctrl-slide-toggle.d.ts +26 -0
- package/types/iss-ctrl-textarea.d.ts +30 -0
- package/types/iss-ctrl-time-picker.d.ts +48 -0
- package/types/iss-ctrl-toggle-button.d.ts +41 -0
- package/types/iss-ctrl-tokens.d.ts +21 -0
- package/types/iss-ctrl.d.ts +303 -2005
- package/fesm2022/iss-ctrl-iss-ctrl-BKu6a5HF.mjs +0 -9683
- package/fesm2022/iss-ctrl-iss-ctrl-BKu6a5HF.mjs.map +0 -1
- package/fesm2022/iss-ctrl-load-event-bOt6IlIo.mjs.map +0 -1
- package/fesm2022/iss-ctrl-table.field-B5FxF6hn.mjs.map +0 -1
- package/fesm2022/iss-ctrl-user-picker.field-BH63sZ-X.mjs.map +0 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { OnDestroy, WritableSignal, InputSignal, Signal, OutputEmitterRef } from '@angular/core';
|
|
3
|
+
import { ControlBase, Option } from 'iss-ctrl/base';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `<iss-ctrl-dropdownlist>` — dropdown selection, single or multiple, with a search box.
|
|
7
|
+
*
|
|
8
|
+
* Typing in the search box emits `(onQueryChange)`, so options can be loaded remotely; set
|
|
9
|
+
* `loading` while that request is in flight.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```html
|
|
13
|
+
* <iss-ctrl-dropdownlist
|
|
14
|
+
* formControlName="city"
|
|
15
|
+
* [options]="cities()"
|
|
16
|
+
* [multiple]="false"
|
|
17
|
+
* [loading]="loading()"
|
|
18
|
+
* (onQueryChange)="search($event)"
|
|
19
|
+
* >
|
|
20
|
+
* <label>City</label>
|
|
21
|
+
* </iss-ctrl-dropdownlist>
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* ### Own inputs
|
|
25
|
+
* | Property | Type | Default | Description |
|
|
26
|
+
* | --- | --- | --- | --- |
|
|
27
|
+
* | `options` | `Option[]` | **required** | The selectable choices. |
|
|
28
|
+
* | `height` | `string` | `"150px"` | Max height of the open panel. |
|
|
29
|
+
* | `loading` | `boolean` | `false` | Shows the loading state inside the panel. |
|
|
30
|
+
*
|
|
31
|
+
* ### Inherited from {@link ControlBase}
|
|
32
|
+
* `formControlName` · `readonly` · `className` · `(onChange)` · `placeholder` · `multiple`
|
|
33
|
+
*
|
|
34
|
+
* ### Outputs
|
|
35
|
+
* - `(onQueryChange)` — `string`, the current search text.
|
|
36
|
+
*
|
|
37
|
+
* Projects `<label>` into the floating label; omit it to render the control without one.
|
|
38
|
+
*/
|
|
39
|
+
declare class DropdownlistControl extends ControlBase implements OnDestroy {
|
|
40
|
+
#private;
|
|
41
|
+
UI_LANGUAGE: string;
|
|
42
|
+
selectedOptions: WritableSignal<Map<string, Option>>;
|
|
43
|
+
/**
|
|
44
|
+
* Selectable choices, each a `{ value, title }` pair. Required.
|
|
45
|
+
*/
|
|
46
|
+
options: InputSignal<Option[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Maximum height of the open options panel, as a CSS length.
|
|
49
|
+
*/
|
|
50
|
+
height: InputSignal<string>;
|
|
51
|
+
query: Signal<string>;
|
|
52
|
+
readonly filteredOptions: Signal<Option[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Shows the loading state inside the panel while options are being fetched.
|
|
55
|
+
*/
|
|
56
|
+
loading: InputSignal<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* Emits the search text so the host can load matching options.
|
|
59
|
+
*/
|
|
60
|
+
onQueryChange: OutputEmitterRef<string>;
|
|
61
|
+
protected optionTemplate: any;
|
|
62
|
+
protected cardViewerTemplate: any;
|
|
63
|
+
protected allSelected: WritableSignal<boolean>;
|
|
64
|
+
displayFn: (options: Option | Option[]) => string;
|
|
65
|
+
/** Resolves an option title to plain text for the active UI language. */
|
|
66
|
+
titleOf(option: Option | undefined): string;
|
|
67
|
+
writeValue(value: string | null): void;
|
|
68
|
+
captureValue($event: any): void;
|
|
69
|
+
removeFromSelectedOptionsMap(option: Option): void;
|
|
70
|
+
clearSelection(): void;
|
|
71
|
+
toggleAllSelection(): void;
|
|
72
|
+
ngOnDestroy(): void;
|
|
73
|
+
protected isEmpty(): boolean;
|
|
74
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DropdownlistControl, never>;
|
|
75
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DropdownlistControl, "iss-ctrl-dropdownlist", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "onQueryChange": "onQueryChange"; }, ["optionTemplate", "cardViewerTemplate"], ["label"], true, never>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { DropdownlistControl };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { OutputEmitterRef, OnDestroy, InputSignal, Signal, WritableSignal } from '@angular/core';
|
|
3
|
+
import { ControlBase } from 'iss-ctrl/base';
|
|
4
|
+
import { IssAttachment } from 'iss-ctrl/tokens';
|
|
5
|
+
|
|
6
|
+
declare class Droppable {
|
|
7
|
+
onDrop: OutputEmitterRef<FileList>;
|
|
8
|
+
onDragOver(evt: any): void;
|
|
9
|
+
onDragLeave(evt: any): void;
|
|
10
|
+
onDropped(evt: any): void;
|
|
11
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<Droppable, never>;
|
|
12
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<Droppable, "[droppable]", never, {}, { "onDrop": "onDrop"; }, never, never, true, never>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface IssFile {
|
|
16
|
+
id?: string;
|
|
17
|
+
name: string;
|
|
18
|
+
size: string | number;
|
|
19
|
+
type: string;
|
|
20
|
+
selected?: number;
|
|
21
|
+
errorMsg?: string;
|
|
22
|
+
file?: File;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* `<iss-ctrl-file-picker>` — attachment upload with a per-file progress and error state.
|
|
27
|
+
*
|
|
28
|
+
* Uploading is done by the host: the control emits the picked files and renders whatever is
|
|
29
|
+
* fed back through `uploadedFiles`, `uploading` and `uploadingError`.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```html
|
|
33
|
+
* <iss-ctrl-file-picker
|
|
34
|
+
* formControlName="attachments"
|
|
35
|
+
* [multiple]="true"
|
|
36
|
+
* accept=".pdf,.png"
|
|
37
|
+
* [uploading]="uploading()"
|
|
38
|
+
* [uploadedFiles]="uploaded()"
|
|
39
|
+
* />
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* ### Own inputs
|
|
43
|
+
* | Property | Type | Default | Description |
|
|
44
|
+
* | --- | --- | --- | --- |
|
|
45
|
+
* | `accept` | `string \| undefined` | `undefined` | Accepted extensions or MIME types for the native picker. |
|
|
46
|
+
* | `showDownloadButton` | `boolean` | `true` | Shows the download action on each attachment. |
|
|
47
|
+
* | `showDeleteButton` | `boolean` | `true` | Shows the remove action on each attachment. |
|
|
48
|
+
* | `uploading` | `boolean` | `false` | Renders the in-progress state. |
|
|
49
|
+
* | `uploadedFiles` | `IssAttachment[]` | `[]` | Files already stored on the server. |
|
|
50
|
+
* | `uploadingError` | `string \| undefined` | `undefined` | Error message attached to the failed upload. |
|
|
51
|
+
*
|
|
52
|
+
* ### Inherited from {@link ControlBase}
|
|
53
|
+
* `formControlName` · `readonly` · `className` · `(onChange)` · `multiple` · `hints`
|
|
54
|
+
*
|
|
55
|
+
* Projects a `<label>` above the control — the wrapping `iss-field-*` passes the field label in that way.
|
|
56
|
+
*/
|
|
57
|
+
declare class FilePickerControl extends ControlBase implements OnDestroy {
|
|
58
|
+
#private;
|
|
59
|
+
/**
|
|
60
|
+
* Accepted extensions or MIME types, passed straight to the native file input.
|
|
61
|
+
*/
|
|
62
|
+
accept: InputSignal<string | undefined>;
|
|
63
|
+
/**
|
|
64
|
+
* Shows the download action on each listed attachment.
|
|
65
|
+
*/
|
|
66
|
+
showDownloadButton: InputSignal<boolean>;
|
|
67
|
+
/**
|
|
68
|
+
* Shows the remove action on each listed attachment.
|
|
69
|
+
*/
|
|
70
|
+
showDeleteButton: InputSignal<boolean>;
|
|
71
|
+
/**
|
|
72
|
+
* Renders the upload-in-progress state; set by the host that performs the upload.
|
|
73
|
+
*/
|
|
74
|
+
uploading: InputSignal<boolean>;
|
|
75
|
+
/**
|
|
76
|
+
* Attachments already stored on the server, merged into the rendered list.
|
|
77
|
+
*/
|
|
78
|
+
uploadedFiles: InputSignal<IssAttachment[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Error message shown on the attachment whose upload failed.
|
|
81
|
+
*/
|
|
82
|
+
uploadingError: InputSignal<string | undefined>;
|
|
83
|
+
readonly filesValue: Signal<any>;
|
|
84
|
+
protected attachments: WritableSignal<IssFile[]>;
|
|
85
|
+
ngOnDestroy(): void;
|
|
86
|
+
writeValue(val: FormData | string | null): void;
|
|
87
|
+
protected onDelete(files: IssFile[]): void;
|
|
88
|
+
protected captureFile($event: FileList): void;
|
|
89
|
+
protected openFilePicker(input: HTMLInputElement): void;
|
|
90
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FilePickerControl, never>;
|
|
91
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<FilePickerControl, "iss-ctrl-file-picker", never, { "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "showDownloadButton": { "alias": "showDownloadButton"; "required": false; "isSignal": true; }; "showDeleteButton": { "alias": "showDeleteButton"; "required": false; "isSignal": true; }; "uploading": { "alias": "uploading"; "required": false; "isSignal": true; }; "uploadedFiles": { "alias": "uploadedFiles"; "required": false; "isSignal": true; }; "uploadingError": { "alias": "uploadingError"; "required": false; "isSignal": true; }; }, {}, never, ["label"], true, never>;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export { Droppable, FilePickerControl };
|
|
95
|
+
export type { IssFile };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { OnDestroy, InputSignal, OutputEmitterRef } from '@angular/core';
|
|
3
|
+
import { Validator } from '@angular/forms';
|
|
4
|
+
import { ControlBase } from 'iss-ctrl/base';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* `<iss-ctrl-input>` — single line text input, the base for every scalar text field.
|
|
8
|
+
*
|
|
9
|
+
* `type` is forwarded to the native input, so `number`, `email` and `password` variants all
|
|
10
|
+
* come from this one control.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```html
|
|
14
|
+
* <iss-ctrl-input formControlName="amount" type="number" [min]="0" suffixText="SAR">
|
|
15
|
+
* <label>Amount</label>
|
|
16
|
+
* </iss-ctrl-input>
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* ### Own inputs
|
|
20
|
+
* | Property | Type | Default | Description |
|
|
21
|
+
* | --- | --- | --- | --- |
|
|
22
|
+
* | `type` | `string` | `"text"` | Native input type: `text`, `number`, `email`, `password`, … |
|
|
23
|
+
* | `prefixIcon` | `string` | `""` | Icon rendered before the value. |
|
|
24
|
+
* | `prefixText` | `string` | `""` | Text rendered before the value. |
|
|
25
|
+
* | `suffixIcon` | `string` | `""` | Icon rendered after the value. |
|
|
26
|
+
* | `suffixText` | `string` | `""` | Text rendered after the value. |
|
|
27
|
+
*
|
|
28
|
+
* ### Inherited from {@link ControlBase}
|
|
29
|
+
* `formControlName` · `readonly` · `className` · `(onChange)` · `placeholder` · `min` · `max` · `minLength` · `maxLength` · `hints`
|
|
30
|
+
*
|
|
31
|
+
* ### Outputs
|
|
32
|
+
* - `(onPrefixClick)` — `string`, the prefix affix was clicked.
|
|
33
|
+
* - `(onSuffixClick)` — `string`, the suffix affix was clicked.
|
|
34
|
+
*
|
|
35
|
+
* Projects `<label>` into the floating label; omit it to render the control without one.
|
|
36
|
+
*
|
|
37
|
+
* Also projects `[issPrefix]` and `[issSuffix]` for fully custom affixes.
|
|
38
|
+
*/
|
|
39
|
+
declare class InputControl extends ControlBase implements Validator, OnDestroy {
|
|
40
|
+
#private;
|
|
41
|
+
/**
|
|
42
|
+
* Native input type — `text`, `number`, `email`, `password`, and so on.
|
|
43
|
+
*/
|
|
44
|
+
type: InputSignal<string>;
|
|
45
|
+
/**
|
|
46
|
+
* Icon name rendered before the value.
|
|
47
|
+
*/
|
|
48
|
+
prefixIcon: InputSignal<string>;
|
|
49
|
+
/**
|
|
50
|
+
* Static text rendered before the value.
|
|
51
|
+
*/
|
|
52
|
+
prefixText: InputSignal<string>;
|
|
53
|
+
/**
|
|
54
|
+
* Icon name rendered after the value.
|
|
55
|
+
*/
|
|
56
|
+
suffixIcon: InputSignal<string>;
|
|
57
|
+
/**
|
|
58
|
+
* Static text rendered after the value, a unit or currency for example.
|
|
59
|
+
*/
|
|
60
|
+
suffixText: InputSignal<string>;
|
|
61
|
+
/**
|
|
62
|
+
* Emits when the prefix affix is clicked.
|
|
63
|
+
*/
|
|
64
|
+
onPrefixClick: OutputEmitterRef<string>;
|
|
65
|
+
/**
|
|
66
|
+
* Emits when the suffix affix is clicked.
|
|
67
|
+
*/
|
|
68
|
+
onSuffixClick: OutputEmitterRef<string>;
|
|
69
|
+
emitSuffixClick(): void;
|
|
70
|
+
emitPrefixClick(): void;
|
|
71
|
+
ngOnDestroy(): void;
|
|
72
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<InputControl, never>;
|
|
73
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<InputControl, "iss-ctrl-input", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; "isSignal": true; }; "prefixText": { "alias": "prefixText"; "required": false; "isSignal": true; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; "isSignal": true; }; "suffixText": { "alias": "suffixText"; "required": false; "isSignal": true; }; }, { "onPrefixClick": "onPrefixClick"; "onSuffixClick": "onSuffixClick"; }, never, ["label", "[issPrefix]", "[issSuffix]"], true, never>;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export { InputControl };
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { OnDestroy, WritableSignal, InputSignal, Signal } from '@angular/core';
|
|
3
|
+
import { Validator, FormControl, AbstractControl, ValidationErrors } from '@angular/forms';
|
|
4
|
+
import { ControlBase } from 'iss-ctrl/base';
|
|
5
|
+
import { PhoneNumber } from 'libphonenumber-js/mobile';
|
|
6
|
+
|
|
7
|
+
type ISO2 = "AF" | "AL" | "DZ" | "AS" | "AD" | "AO" | "AI" | "AG" | "AR" | "AM" | "AW" | "AU" | "AT" | "AZ" | "BS" | "BH" | "BD" | "BB" | "BY" | "BE" | "BZ" | "BJ" | "BM" | "BT" | "BO" | "BA" | "BW" | "BR" | "IO" | "VG" | "BN" | "BG" | "BF" | "BI" | "KH" | "CM" | "CA" | "CV" | "BQ" | "KY" | "CF" | "TD" | "CL" | "CN" | "CX" | "CC" | "CO" | "KM" | "CD" | "CG" | "CK" | "CR" | "CI" | "HR" | "CU" | "CW" | "CY" | "CZ" | "DK" | "DJ" | "DM" | "DO" | "EC" | "EG" | "SV" | "GQ" | "ER" | "EE" | "ET" | "FK" | "FO" | "FJ" | "FI" | "FR" | "GF" | "PF" | "GA" | "GM" | "GE" | "DE" | "GH" | "GI" | "GR" | "GL" | "GD" | "GP" | "GU" | "GT" | "GG" | "GN" | "GW" | "GY" | "HT" | "HN" | "HK" | "HU" | "IS" | "IN" | "ID" | "IR" | "IQ" | "IE" | "IM" | "IL" | "IT" | "JM" | "JP" | "JE" | "JO" | "KZ" | "KE" | "KI" | "XK" | "KW" | "KG" | "LA" | "LV" | "LB" | "LS" | "LR" | "LY" | "LI" | "LT" | "LU" | "MO" | "MK" | "MG" | "MW" | "MY" | "MV" | "ML" | "MT" | "MH" | "MQ" | "MR" | "MU" | "YT" | "MX" | "FM" | "MD" | "MC" | "MN" | "ME" | "MS" | "MA" | "MZ" | "MM" | "NA" | "NR" | "NP" | "NL" | "NC" | "NZ" | "NI" | "NE" | "NG" | "NU" | "NF" | "KP" | "MP" | "NO" | "OM" | "PK" | "PW" | "PS" | "PA" | "PG" | "PY" | "PE" | "PH" | "PL" | "PT" | "PR" | "QA" | "RE" | "RO" | "RU" | "RW" | "BL" | "SH" | "KN" | "LC" | "MF" | "PM" | "VC" | "WS" | "SM" | "ST" | "SA" | "SN" | "RS" | "SC" | "SL" | "SG" | "SX" | "SK" | "SI" | "SB" | "SO" | "ZA" | "KR" | "SS" | "ES" | "LK" | "SD" | "SR" | "SJ" | "SZ" | "SE" | "CH" | "SY" | "TW" | "TJ" | "TZ" | "TH" | "TL" | "TG" | "TK" | "TO" | "TT" | "TN" | "TR" | "TM" | "TC" | "TV" | "VI" | "UG" | "UA" | "AE" | "GB" | "US" | "UY" | "UZ" | "VU" | "VA" | "VE" | "VN" | "WF" | "EH" | "YE" | "ZM" | "ZW" | "AX";
|
|
8
|
+
|
|
9
|
+
interface Country {
|
|
10
|
+
name: string;
|
|
11
|
+
code: ISO2;
|
|
12
|
+
dailCode: string;
|
|
13
|
+
areaCodes?: string[];
|
|
14
|
+
priority: number;
|
|
15
|
+
order: number;
|
|
16
|
+
placeholder: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
declare const DEFAULT_COUNTRY: Country;
|
|
20
|
+
declare const COUNTRIES: Country[];
|
|
21
|
+
|
|
22
|
+
interface Mobile {
|
|
23
|
+
dailCode: string;
|
|
24
|
+
code: ISO2;
|
|
25
|
+
nationalNumber: string;
|
|
26
|
+
internationalNumber: string;
|
|
27
|
+
placeholder: string;
|
|
28
|
+
name: string;
|
|
29
|
+
priority: 0;
|
|
30
|
+
order: 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
declare class Phone {
|
|
34
|
+
parse(phoneNumber: string, countryCode?: ISO2): PhoneNumber | undefined;
|
|
35
|
+
getPhoneNumberObject(number: string): Mobile | undefined;
|
|
36
|
+
format(phoneNumber: string, countryCode: ISO2, numberFormat: "E.164" | "INTERNATIONAL" | "NATIONAL"): string;
|
|
37
|
+
validate(number: string): boolean;
|
|
38
|
+
getPlaceholder(countryCode: ISO2): string;
|
|
39
|
+
getCountryIsoCode(dailCode: string, number: PhoneNumber): string;
|
|
40
|
+
getCountryByDailCode(dailCode: string | undefined, number: PhoneNumber): Country | undefined;
|
|
41
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<Phone, never>;
|
|
42
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<Phone>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* `<iss-ctrl-mobile>` — international phone number with a country selector.
|
|
47
|
+
*
|
|
48
|
+
* The number is validated against the selected country and stored in its international form.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```html
|
|
52
|
+
* <iss-ctrl-mobile formControlName="mobile" [preferredCountries]="['SA', 'AE']">
|
|
53
|
+
* <label>Mobile</label>
|
|
54
|
+
* </iss-ctrl-mobile>
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* ### Own inputs
|
|
58
|
+
* | Property | Type | Default | Description |
|
|
59
|
+
* | --- | --- | --- | --- |
|
|
60
|
+
* | `preferredCountries` | `ISO2[]` | `["SA"]` | Countries pinned to the top of the country list. |
|
|
61
|
+
*
|
|
62
|
+
* ### Inherited from {@link ControlBase}
|
|
63
|
+
* `formControlName` · `readonly` · `className` · `(onChange)`
|
|
64
|
+
*
|
|
65
|
+
* Projects `<label>` into the floating label; omit it to render the control without one.
|
|
66
|
+
*/
|
|
67
|
+
declare class MobileControl extends ControlBase implements OnDestroy, Validator {
|
|
68
|
+
#private;
|
|
69
|
+
phoneService: Phone;
|
|
70
|
+
isOpen: WritableSignal<boolean>;
|
|
71
|
+
selectedCountry: WritableSignal<Country>;
|
|
72
|
+
/**
|
|
73
|
+
* ISO-2 country codes pinned to the top of the country list; the first one is preselected.
|
|
74
|
+
*/
|
|
75
|
+
preferredCountries: InputSignal<ISO2[]>;
|
|
76
|
+
searchInput: FormControl;
|
|
77
|
+
filteredCountries: Signal<Country[]>;
|
|
78
|
+
writeValue(value: string | null): void;
|
|
79
|
+
emit(): void;
|
|
80
|
+
validate(control: AbstractControl): ValidationErrors | null;
|
|
81
|
+
ngOnDestroy(): void;
|
|
82
|
+
protected onInput(event: KeyboardEvent): void;
|
|
83
|
+
protected onSelectCountry(country: Country): void;
|
|
84
|
+
protected closeCountryCodeMenu(): void;
|
|
85
|
+
protected toggleCountryCodeMenu(): void;
|
|
86
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MobileControl, never>;
|
|
87
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MobileControl, "iss-ctrl-mobile", never, { "preferredCountries": { "alias": "preferredCountries"; "required": false; "isSignal": true; }; }, {}, never, ["label"], true, never>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export { COUNTRIES, DEFAULT_COUNTRY, MobileControl, Phone };
|
|
91
|
+
export type { Country, ISO2, Mobile };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ControlBase } from 'iss-ctrl/base';
|
|
3
|
+
|
|
4
|
+
interface PlateLetter {
|
|
5
|
+
label: {
|
|
6
|
+
ar: string;
|
|
7
|
+
en: string;
|
|
8
|
+
};
|
|
9
|
+
value: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
declare const PLATE_LETTERS: PlateLetter[];
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* `<iss-ctrl-plate-number>` — Saudi vehicle plate, entered as digits and letters in both
|
|
16
|
+
* Arabic and English.
|
|
17
|
+
*
|
|
18
|
+
* Typing into one script fills the matching cell in the other automatically, and letters are
|
|
19
|
+
* validated against the allowed plate alphabet.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```html
|
|
23
|
+
* <iss-ctrl-plate-number formControlName="plate" [readonly]="false"/>
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* ### Own inputs
|
|
27
|
+
* None — the control is configured entirely through the inherited properties.
|
|
28
|
+
*
|
|
29
|
+
* ### Inherited from {@link ControlBase}
|
|
30
|
+
* `formControlName` · `readonly` · `className` · `(onChange)`
|
|
31
|
+
*
|
|
32
|
+
* Projects a `<label>` above the control — the wrapping `iss-field-*` passes the field label in that way.
|
|
33
|
+
*/
|
|
34
|
+
declare class PlateControl extends ControlBase {
|
|
35
|
+
#private;
|
|
36
|
+
numbersAr: _angular_core.WritableSignal<string[]>;
|
|
37
|
+
numbersEn: _angular_core.WritableSignal<string[]>;
|
|
38
|
+
lettersAr: _angular_core.WritableSignal<string[]>;
|
|
39
|
+
lettersEn: _angular_core.WritableSignal<string[]>;
|
|
40
|
+
letterErrors: _angular_core.WritableSignal<boolean[]>;
|
|
41
|
+
writeValue(value: string | null): void;
|
|
42
|
+
onNumberInput(index: number, event: Event, lang: "ar" | "en"): void;
|
|
43
|
+
onLetterInput(index: number, event: Event, lang: "ar" | "en"): void;
|
|
44
|
+
protected preventNonDigits($event: KeyboardEvent, ar: string): void;
|
|
45
|
+
private emitPlate;
|
|
46
|
+
private stringifyPlate;
|
|
47
|
+
private focusInput;
|
|
48
|
+
private convertDigit;
|
|
49
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PlateControl, never>;
|
|
50
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PlateControl, "iss-ctrl-plate-number", never, {}, {}, never, ["label"], true, never>;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export { PLATE_LETTERS, PlateControl };
|
|
54
|
+
export type { PlateLetter };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InputSignal } from '@angular/core';
|
|
3
|
+
import { ControlBase, Option } from 'iss-ctrl/base';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `<iss-ctrl-radio>` — one choice out of a fixed set of options.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```html
|
|
10
|
+
* <iss-ctrl-radio formControlName="gender" [options]="genders"/>
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* ### Own inputs
|
|
14
|
+
* | Property | Type | Default | Description |
|
|
15
|
+
* | --- | --- | --- | --- |
|
|
16
|
+
* | `options` | `Option[]` | **required** | The selectable choices. |
|
|
17
|
+
*
|
|
18
|
+
* ### Inherited from {@link ControlBase}
|
|
19
|
+
* `formControlName` · `readonly` · `className` · `(onChange)`
|
|
20
|
+
*
|
|
21
|
+
* Projects a `<label>` above the control — the wrapping `iss-field-*` passes the field label in that way.
|
|
22
|
+
*/
|
|
23
|
+
declare class RadioControl extends ControlBase {
|
|
24
|
+
/**
|
|
25
|
+
* Selectable choices, each a `{ value, title }` pair. Required.
|
|
26
|
+
*/
|
|
27
|
+
options: InputSignal<Option[]>;
|
|
28
|
+
writeValue(value: string | null): void;
|
|
29
|
+
onRadioChange(value: string): void;
|
|
30
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RadioControl, never>;
|
|
31
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RadioControl, "iss-ctrl-radio", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; }, {}, never, ["label"], true, never>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { RadioControl };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ControlBase } from 'iss-ctrl/base';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `<iss-ctrl-slide-toggle>` — an on/off switch for a boolean value.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```html
|
|
9
|
+
* <iss-ctrl-slide-toggle formControlName="active" (onChange)="save($event)"/>
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* ### Own inputs
|
|
13
|
+
* None — the control is configured entirely through the inherited properties.
|
|
14
|
+
*
|
|
15
|
+
* ### Inherited from {@link ControlBase}
|
|
16
|
+
* `formControlName` · `readonly` · `className` · `(onChange)`
|
|
17
|
+
*
|
|
18
|
+
* Projects a `<label>` above the control — the wrapping `iss-field-*` passes the field label in that way.
|
|
19
|
+
*/
|
|
20
|
+
declare class SlideToggleControl extends ControlBase {
|
|
21
|
+
onSlideToggleChange(checked: boolean): void;
|
|
22
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SlideToggleControl, never>;
|
|
23
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SlideToggleControl, "iss-ctrl-slide-toggle", never, {}, {}, never, ["label"], true, never>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { SlideToggleControl };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { OnDestroy } from '@angular/core';
|
|
3
|
+
import { ControlBase } from 'iss-ctrl/base';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `<iss-ctrl-textarea>` — multi line free text.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```html
|
|
10
|
+
* <iss-ctrl-textarea formControlName="notes" [maxLength]="500" placeholder="Add a note">
|
|
11
|
+
* <label>Notes</label>
|
|
12
|
+
* </iss-ctrl-textarea>
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* ### Own inputs
|
|
16
|
+
* None — the control is configured entirely through the inherited properties.
|
|
17
|
+
*
|
|
18
|
+
* ### Inherited from {@link ControlBase}
|
|
19
|
+
* `formControlName` · `readonly` · `className` · `(onChange)` · `placeholder` · `minLength` · `maxLength` · `hints`
|
|
20
|
+
*
|
|
21
|
+
* Projects `<label>` into the floating label; omit it to render the control without one.
|
|
22
|
+
*/
|
|
23
|
+
declare class TextareaControl extends ControlBase implements OnDestroy {
|
|
24
|
+
#private;
|
|
25
|
+
ngOnDestroy(): void;
|
|
26
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TextareaControl, never>;
|
|
27
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TextareaControl, "iss-ctrl-textarea", never, {}, {}, never, ["label"], true, never>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { TextareaControl };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InputSignal } from '@angular/core';
|
|
3
|
+
import { ControlBase } from 'iss-ctrl/base';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `<iss-ctrl-time-picker>` — time of day, picked from a list generated at a fixed interval.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```html
|
|
10
|
+
* <iss-ctrl-time-picker formControlName="startsAt" interval="15min" minTime="08:00" maxTime="17:00">
|
|
11
|
+
* <label>Starts at</label>
|
|
12
|
+
* </iss-ctrl-time-picker>
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* ### Own inputs
|
|
16
|
+
* | Property | Type | Default | Description |
|
|
17
|
+
* | --- | --- | --- | --- |
|
|
18
|
+
* | `interval` | `string` | `"30min"` | Step between the offered times. |
|
|
19
|
+
* | `minTime` | `string \| null` | `null` | Earliest offered time, `HH:mm`. |
|
|
20
|
+
* | `maxTime` | `string \| null` | `null` | Latest offered time, `HH:mm`. |
|
|
21
|
+
*
|
|
22
|
+
* ### Inherited from {@link ControlBase}
|
|
23
|
+
* `formControlName` · `readonly` · `className` · `(onChange)`
|
|
24
|
+
*
|
|
25
|
+
* Projects `<label>` into the floating label; omit it to render the control without one.
|
|
26
|
+
*/
|
|
27
|
+
declare class TimePickerControl extends ControlBase {
|
|
28
|
+
#private;
|
|
29
|
+
/**
|
|
30
|
+
* Step between the offered times, for example `"15min"` or `"30min"`.
|
|
31
|
+
*/
|
|
32
|
+
interval: InputSignal<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Earliest offered time of day, as `HH:mm`.
|
|
35
|
+
*/
|
|
36
|
+
minTime: InputSignal<string | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Latest offered time of day, as `HH:mm`.
|
|
39
|
+
*/
|
|
40
|
+
maxTime: InputSignal<string | null>;
|
|
41
|
+
emit(evt: any): void;
|
|
42
|
+
clear(event: MouseEvent): void;
|
|
43
|
+
writeValue(value: any): void;
|
|
44
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TimePickerControl, never>;
|
|
45
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TimePickerControl, "iss-ctrl-time-picker", never, { "interval": { "alias": "interval"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; "isSignal": true; }; "maxTime": { "alias": "maxTime"; "required": false; "isSignal": true; }; }, {}, never, ["label"], true, never>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { TimePickerControl };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InputSignal, WritableSignal } from '@angular/core';
|
|
3
|
+
import { ControlBase, Option } from 'iss-ctrl/base';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `<iss-ctrl-toggle-button>` — options rendered as a button group instead of a dropdown.
|
|
7
|
+
*
|
|
8
|
+
* With `multiple` set, several buttons can be active at once.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```html
|
|
12
|
+
* <iss-ctrl-toggle-button formControlName="priority" [options]="priorities" [multiple]="false"/>
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* ### Own inputs
|
|
16
|
+
* | Property | Type | Default | Description |
|
|
17
|
+
* | --- | --- | --- | --- |
|
|
18
|
+
* | `options` | `Option[]` | **required** | The selectable choices. |
|
|
19
|
+
*
|
|
20
|
+
* ### Inherited from {@link ControlBase}
|
|
21
|
+
* `formControlName` · `readonly` · `className` · `(onChange)` · `multiple`
|
|
22
|
+
*
|
|
23
|
+
* Projects a `<label>` above the control — the wrapping `iss-field-*` passes the field label in that way.
|
|
24
|
+
*/
|
|
25
|
+
declare class ToggleButtonControl extends ControlBase {
|
|
26
|
+
#private;
|
|
27
|
+
/**
|
|
28
|
+
* Selectable choices, each a `{ value, title }` pair. Required.
|
|
29
|
+
*/
|
|
30
|
+
options: InputSignal<Option[]>;
|
|
31
|
+
selectedOptions: WritableSignal<Map<string, Option>>;
|
|
32
|
+
writeValue(value: string | null): void;
|
|
33
|
+
addToSelectedOptionsMap(option: Map<string, Option>): void;
|
|
34
|
+
onToggleButtonChange(checked: boolean, value: string): void;
|
|
35
|
+
stringifySelectedOptions(): string | null;
|
|
36
|
+
getEmissionValue(options: any): void;
|
|
37
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ToggleButtonControl, never>;
|
|
38
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ToggleButtonControl, "iss-ctrl-toggle-button", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; }, {}, never, ["label"], true, never>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { ToggleButtonControl };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
|
|
3
|
+
interface IssAttachment {
|
|
4
|
+
id: string;
|
|
5
|
+
name: string;
|
|
6
|
+
type: string;
|
|
7
|
+
size: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
declare const ATTACHMENT_UPLOAD_URL: InjectionToken<string>;
|
|
11
|
+
declare const ATTACHMENT_UPLOAD_RESPONSE_MAPPER: InjectionToken<(res: any) => IssAttachment[]>;
|
|
12
|
+
declare const ATTACHMENT_DOWNLOAD_URL: InjectionToken<string>;
|
|
13
|
+
|
|
14
|
+
declare const HOST: InjectionToken<string>;
|
|
15
|
+
|
|
16
|
+
declare const UI_LANGUAGE: InjectionToken<string>;
|
|
17
|
+
|
|
18
|
+
declare const USER_SEARCH_API: InjectionToken<string>;
|
|
19
|
+
|
|
20
|
+
export { ATTACHMENT_DOWNLOAD_URL, ATTACHMENT_UPLOAD_RESPONSE_MAPPER, ATTACHMENT_UPLOAD_URL, HOST, UI_LANGUAGE, USER_SEARCH_API };
|
|
21
|
+
export type { IssAttachment };
|