iss-ctrl 0.0.13 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/fesm2022/{iss-ctrl-iss-ctrl-BN9rcLt2.mjs → iss-ctrl-iss-ctrl-CDk4_RVA.mjs} +707 -148
  2. package/fesm2022/iss-ctrl-iss-ctrl-CDk4_RVA.mjs.map +1 -0
  3. package/fesm2022/{iss-ctrl-load-event-AgBohfHa.mjs → iss-ctrl-load-event-5MIEPp-j.mjs} +3 -3
  4. package/fesm2022/{iss-ctrl-load-event-AgBohfHa.mjs.map → iss-ctrl-load-event-5MIEPp-j.mjs.map} +1 -1
  5. package/fesm2022/{iss-ctrl-load-options-event-ClQPHNBO.mjs → iss-ctrl-load-options-event-D4gOR-3h.mjs} +3 -3
  6. package/fesm2022/{iss-ctrl-load-options-event-CBejHpME.mjs.map → iss-ctrl-load-options-event-D4gOR-3h.mjs.map} +1 -1
  7. package/fesm2022/{iss-ctrl-load-value-event-CDAKsE_O.mjs → iss-ctrl-load-value-event-a_CrlH07.mjs} +3 -3
  8. package/fesm2022/{iss-ctrl-load-value-event-CDAKsE_O.mjs.map → iss-ctrl-load-value-event-a_CrlH07.mjs.map} +1 -1
  9. package/fesm2022/{iss-ctrl-note.field-C9cVaAz0.mjs → iss-ctrl-note.field-DIU49W4s.mjs} +2 -2
  10. package/fesm2022/{iss-ctrl-note.field-C9cVaAz0.mjs.map → iss-ctrl-note.field-DIU49W4s.mjs.map} +1 -1
  11. package/fesm2022/{iss-ctrl-replace-api-keys-Chwe42Nu.mjs → iss-ctrl-replace-api-keys-8o7-XCdX.mjs} +2 -2
  12. package/fesm2022/{iss-ctrl-replace-api-keys-CLP4wBYu.mjs.map → iss-ctrl-replace-api-keys-8o7-XCdX.mjs.map} +1 -1
  13. package/fesm2022/{iss-ctrl-set-value-event-CrpzRR6X.mjs → iss-ctrl-set-value-event-BJGXPwPV.mjs} +2 -2
  14. package/fesm2022/{iss-ctrl-set-value-event-C7YYwHZV.mjs.map → iss-ctrl-set-value-event-BJGXPwPV.mjs.map} +1 -1
  15. package/fesm2022/{iss-ctrl-table.field-BP-HMKO3.mjs → iss-ctrl-table.field-Ca6d7LvU.mjs} +2 -2
  16. package/fesm2022/{iss-ctrl-table.field-BP-HMKO3.mjs.map → iss-ctrl-table.field-Ca6d7LvU.mjs.map} +1 -1
  17. package/fesm2022/{iss-ctrl-trigger-based-on-json-value-DS4TR38v.mjs → iss-ctrl-trigger-based-on-json-value-Jp6lQkIa.mjs} +2 -2
  18. package/fesm2022/{iss-ctrl-trigger-based-on-json-value-CprcFCWi.mjs.map → iss-ctrl-trigger-based-on-json-value-Jp6lQkIa.mjs.map} +1 -1
  19. package/fesm2022/{iss-ctrl-user-picker.field-8Jb1325c.mjs → iss-ctrl-user-picker.field-CFK871y8.mjs} +2 -2
  20. package/fesm2022/{iss-ctrl-user-picker.field-8Jb1325c.mjs.map → iss-ctrl-user-picker.field-CFK871y8.mjs.map} +1 -1
  21. package/fesm2022/iss-ctrl.mjs +1 -1
  22. package/package.json +1 -1
  23. package/types/iss-ctrl.d.ts +210 -9
  24. package/fesm2022/iss-ctrl-iss-ctrl-BN9rcLt2.mjs.map +0 -1
  25. package/fesm2022/iss-ctrl-iss-ctrl-DOmgkxUv.mjs +0 -8924
  26. package/fesm2022/iss-ctrl-iss-ctrl-DOmgkxUv.mjs.map +0 -1
  27. package/fesm2022/iss-ctrl-iss-ctrl-WfIqBEcL.mjs +0 -8913
  28. package/fesm2022/iss-ctrl-iss-ctrl-WfIqBEcL.mjs.map +0 -1
  29. package/fesm2022/iss-ctrl-load-event-D70VZuyD.mjs +0 -60
  30. package/fesm2022/iss-ctrl-load-event-D70VZuyD.mjs.map +0 -1
  31. package/fesm2022/iss-ctrl-load-event-SlQmVmyf.mjs +0 -60
  32. package/fesm2022/iss-ctrl-load-event-SlQmVmyf.mjs.map +0 -1
  33. package/fesm2022/iss-ctrl-load-options-event-CBejHpME.mjs +0 -50
  34. package/fesm2022/iss-ctrl-load-options-event-ClQPHNBO.mjs.map +0 -1
  35. package/fesm2022/iss-ctrl-load-options-event-DHmaMAOb.mjs +0 -50
  36. package/fesm2022/iss-ctrl-load-options-event-DHmaMAOb.mjs.map +0 -1
  37. package/fesm2022/iss-ctrl-load-value-event-Bu9-rZ6T.mjs +0 -52
  38. package/fesm2022/iss-ctrl-load-value-event-Bu9-rZ6T.mjs.map +0 -1
  39. package/fesm2022/iss-ctrl-load-value-event-Cpuy1og1.mjs +0 -52
  40. package/fesm2022/iss-ctrl-load-value-event-Cpuy1og1.mjs.map +0 -1
  41. package/fesm2022/iss-ctrl-note.field-IM4x1O3b.mjs +0 -65
  42. package/fesm2022/iss-ctrl-note.field-IM4x1O3b.mjs.map +0 -1
  43. package/fesm2022/iss-ctrl-note.field-onDjqI_X.mjs +0 -65
  44. package/fesm2022/iss-ctrl-note.field-onDjqI_X.mjs.map +0 -1
  45. package/fesm2022/iss-ctrl-replace-api-keys-CLP4wBYu.mjs +0 -57
  46. package/fesm2022/iss-ctrl-replace-api-keys-Chwe42Nu.mjs.map +0 -1
  47. package/fesm2022/iss-ctrl-replace-api-keys-CvhCKvNB.mjs +0 -57
  48. package/fesm2022/iss-ctrl-replace-api-keys-CvhCKvNB.mjs.map +0 -1
  49. package/fesm2022/iss-ctrl-set-value-event-C7YYwHZV.mjs +0 -61
  50. package/fesm2022/iss-ctrl-set-value-event-CrpzRR6X.mjs.map +0 -1
  51. package/fesm2022/iss-ctrl-set-value-event-DiHESiPT.mjs +0 -61
  52. package/fesm2022/iss-ctrl-set-value-event-DiHESiPT.mjs.map +0 -1
  53. package/fesm2022/iss-ctrl-table.field-CDSVakji.mjs +0 -592
  54. package/fesm2022/iss-ctrl-table.field-CDSVakji.mjs.map +0 -1
  55. package/fesm2022/iss-ctrl-table.field-DxwfNXNc.mjs +0 -592
  56. package/fesm2022/iss-ctrl-table.field-DxwfNXNc.mjs.map +0 -1
  57. package/fesm2022/iss-ctrl-trigger-based-on-json-value-CprcFCWi.mjs +0 -24
  58. package/fesm2022/iss-ctrl-trigger-based-on-json-value-DS4TR38v.mjs.map +0 -1
  59. package/fesm2022/iss-ctrl-trigger-based-on-json-value-Dp0EhVLA.mjs +0 -24
  60. package/fesm2022/iss-ctrl-trigger-based-on-json-value-Dp0EhVLA.mjs.map +0 -1
  61. package/fesm2022/iss-ctrl-user-picker.field-Mqi37i7D.mjs +0 -225
  62. package/fesm2022/iss-ctrl-user-picker.field-Mqi37i7D.mjs.map +0 -1
  63. package/fesm2022/iss-ctrl-user-picker.field-PxT_dZ_O.mjs +0 -225
  64. package/fesm2022/iss-ctrl-user-picker.field-PxT_dZ_O.mjs.map +0 -1
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InputSignal, WritableSignal, OutputEmitterRef, OnInit, OnDestroy, Signal, Type, DestroyRef, StaticProvider, InjectionToken, PipeTransform, Injector } from '@angular/core';
2
+ import { InputSignal, WritableSignal, OutputEmitterRef, OnInit, OnDestroy, Signal, Type, DestroyRef, StaticProvider, InjectionToken, PipeTransform, Injector, Provider } from '@angular/core';
3
3
  import { ControlValueAccessor, Validator, FormControl, AbstractControl, ValidationErrors, FormGroup, ValidatorFn, AsyncValidatorFn, ControlContainer } from '@angular/forms';
4
4
  import { MatChipInputEvent } from '@angular/material/chips';
5
5
  import { MatDatepickerInputEvent } from '@angular/material/datepicker';
6
6
  import { PhoneNumber } from 'libphonenumber-js/mobile';
7
7
  import { Observable, BehaviorSubject } from 'rxjs';
8
- import { MatDateFormats } from '@angular/material/core';
8
+ import { MatDateFormats, NativeDateAdapter } from '@angular/material/core';
9
9
 
10
10
  interface Option {
11
11
  value: string;
@@ -226,6 +226,14 @@ declare class ChipsControl extends ControlBase {
226
226
  * | `minDate` | `Date \| null` | `null` | Earliest selectable date. |
227
227
  * | `maxDate` | `Date \| null` | `null` | Latest selectable date. |
228
228
  * | `disabledDays` | `number[]` | `[]` | Week days to block, `0` = Sunday … `6` = Saturday. |
229
+ * | `hijriCalendar` | `boolean` | `false` | Shows an Umm al-Qura Hijri calendar; the value stays Gregorian. |
230
+ * | `emitHijri` | `boolean` | `false` | Emits the Hijri date instead of the Gregorian one. Implies `hijriCalendar`. |
231
+ *
232
+ * ### Hijri dates
233
+ * `hijriCalendar` only changes what the user sees: the calendar is Hijri, the input reads
234
+ * `dd/MM/yyyy` in Hijri, and a day shown as `16/03/1447` is still emitted as `2025-09-08`.
235
+ * Turn on `emitHijri` as well when the form value itself has to be the Hijri date. `minDate` and
236
+ * `maxDate` stay Gregorian in both cases — they are bounds on a day, not on a notation.
229
237
  *
230
238
  * ### Inherited from {@link ControlBase}
231
239
  * `formControlName` · `readonly` · `className` · `(onChange)`
@@ -233,6 +241,7 @@ declare class ChipsControl extends ControlBase {
233
241
  * Projects `<label>` into the floating label; omit it to render the control without one.
234
242
  */
235
243
  declare class DatePickerControl extends ControlBase implements Validator {
244
+ #private;
236
245
  /**
237
246
  * Week days that cannot be selected — `0` is Sunday through `6` for Saturday.
238
247
  */
@@ -245,12 +254,25 @@ declare class DatePickerControl extends ControlBase implements Validator {
245
254
  * Latest selectable date.
246
255
  */
247
256
  maxDate: InputSignal<Date | null>;
257
+ /**
258
+ * Renders the calendar as an Umm al-Qura Hijri calendar, leaving the emitted value Gregorian.
259
+ */
260
+ hijriCalendar: InputSignal<boolean>;
261
+ /**
262
+ * Emits the picked date as a Hijri `yyyy-MM-dd` string. Implies {@link hijriCalendar}.
263
+ */
264
+ emitHijri: InputSignal<boolean>;
265
+ /**
266
+ * Whether this picker is currently showing the Hijri calendar.
267
+ */
268
+ isHijri(): boolean;
269
+ writeValue(value: string | Date | null): void;
248
270
  clear(event: MouseEvent): void;
249
271
  protected calendarDaysFilter: (d: Date | null) => boolean;
250
272
  protected emit($event: MatDatepickerInputEvent<any>): void;
251
273
  protected openPicker(picker: any): void;
252
274
  static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerControl, never>;
253
- static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerControl, "iss-ctrl-date-picker", never, { "disabledDays": { "alias": "disabledDays"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, {}, never, ["label"], true, never>;
275
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerControl, "iss-ctrl-date-picker", never, { "disabledDays": { "alias": "disabledDays"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "hijriCalendar": { "alias": "hijriCalendar"; "required": false; "isSignal": true; }; "emitHijri": { "alias": "emitHijri"; "required": false; "isSignal": true; }; }, {}, never, ["label"], true, never>;
254
276
  }
255
277
 
256
278
  interface DateRangeEmission {
@@ -279,6 +301,13 @@ interface DateRangeEmission {
279
301
  * | `minDate` | `Date \| null` | `null` | Earliest selectable date. |
280
302
  * | `maxDate` | `Date \| null` | `null` | Latest selectable date. |
281
303
  * | `disabledDays` | `number[]` | `[]` | Week days to block, `0` = Sunday … `6` = Saturday. |
304
+ * | `hijriCalendar` | `boolean` | `false` | Shows an Umm al-Qura Hijri calendar; the value stays Gregorian. |
305
+ * | `emitHijri` | `boolean` | `false` | Emits both endpoints as Hijri dates. Implies `hijriCalendar`. |
306
+ *
307
+ * ### Hijri dates
308
+ * `hijriCalendar` only changes what the user sees; the emitted range stays Gregorian until
309
+ * `emitHijri` is on as well, at which point both endpoints carry Hijri dates. `duration` is
310
+ * a count of days either way, and `minDate`/`maxDate` stay Gregorian.
282
311
  *
283
312
  * ### Inherited from {@link ControlBase}
284
313
  * `formControlName` · `readonly` · `className` · `(onChange)`
@@ -302,6 +331,14 @@ declare class DateRangePickerControl extends ControlBase implements OnInit, OnDe
302
331
  * Latest selectable date.
303
332
  */
304
333
  maxDate: InputSignal<Date | null>;
334
+ /**
335
+ * Renders the calendar as an Umm al-Qura Hijri calendar, leaving the emitted range Gregorian.
336
+ */
337
+ hijriCalendar: InputSignal<boolean>;
338
+ /**
339
+ * Emits both endpoints as Hijri dates. Implies {@link hijriCalendar}.
340
+ */
341
+ emitHijri: InputSignal<boolean>;
305
342
  /**
306
343
  * Emits the selected range as an object, or `null` while the range is incomplete.
307
344
  */
@@ -310,15 +347,19 @@ declare class DateRangePickerControl extends ControlBase implements OnInit, OnDe
310
347
  * The `start`/`end` form group backing the range input. Internal state.
311
348
  */
312
349
  readonly range: FormGroup;
350
+ /**
351
+ * Whether this picker is currently showing the Hijri calendar.
352
+ */
353
+ isHijri(): boolean;
313
354
  ngOnInit(): void;
314
355
  setDisabledState(isDisabled: boolean): void;
315
356
  clear(event: MouseEvent): void;
316
- protected openPicker(picker: any): void;
317
357
  writeValue(value: string | FormData | null): void;
318
358
  ngOnDestroy(): void;
359
+ protected openPicker(picker: any): void;
319
360
  protected calendarDaysFilter: (d: Date | null) => boolean;
320
361
  static ɵfac: i0.ɵɵFactoryDeclaration<DateRangePickerControl, never>;
321
- static ɵcmp: i0.ɵɵComponentDeclaration<DateRangePickerControl, "iss-ctrl-date-range-picker", never, { "disabledDays": { "alias": "disabledDays"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, { "onDateRangeObjectChange": "onDateRangeObjectChange"; }, never, ["label"], true, never>;
362
+ static ɵcmp: i0.ɵɵComponentDeclaration<DateRangePickerControl, "iss-ctrl-date-range-picker", never, { "disabledDays": { "alias": "disabledDays"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "hijriCalendar": { "alias": "hijriCalendar"; "required": false; "isSignal": true; }; "emitHijri": { "alias": "emitHijri"; "required": false; "isSignal": true; }; }, { "onDateRangeObjectChange": "onDateRangeObjectChange"; }, never, ["label"], true, never>;
322
363
  }
323
364
 
324
365
  /**
@@ -342,6 +383,12 @@ declare class DateRangePickerControl extends ControlBase implements OnInit, OnDe
342
383
  * | `minTime` | `string \| null` | `null` | Earliest selectable time, `HH:mm`. |
343
384
  * | `maxTime` | `string \| null` | `null` | Latest selectable time, `HH:mm`. |
344
385
  * | `disabledDays` | `number[]` | `[]` | Week days to block, `0` = Sunday … `6` = Saturday. |
386
+ * | `hijriCalendar` | `boolean` | `false` | Shows an Umm al-Qura Hijri calendar; the value stays Gregorian. |
387
+ * | `emitHijri` | `boolean` | `false` | Emits the date half as a Hijri date. Implies `hijriCalendar`. |
388
+ *
389
+ * ### Hijri dates
390
+ * Both flags are handed straight to the inner date picker; the time half is untouched, so a
391
+ * Hijri value reads `1447-03-15T09:30:00`.
345
392
  *
346
393
  * ### Inherited from {@link ControlBase}
347
394
  * `formControlName` · `readonly` · `className` · `(onChange)`
@@ -371,11 +418,19 @@ declare class DatetimePickerControl extends ControlBase {
371
418
  * Latest selectable time of day, as `HH:mm`.
372
419
  */
373
420
  maxTime: InputSignal<string | null>;
421
+ /**
422
+ * Renders the calendar as an Umm al-Qura Hijri calendar, leaving the emitted date Gregorian.
423
+ */
424
+ hijriCalendar: InputSignal<boolean>;
425
+ /**
426
+ * Emits the date half of the value as a Hijri date. Implies {@link hijriCalendar}.
427
+ */
428
+ emitHijri: InputSignal<boolean>;
374
429
  setDisabledState(isDisabled: boolean): void;
375
430
  emit(): void;
376
431
  writeValue(value: string | Date | null): void;
377
432
  static ɵfac: i0.ɵɵFactoryDeclaration<DatetimePickerControl, never>;
378
- static ɵcmp: i0.ɵɵComponentDeclaration<DatetimePickerControl, "iss-ctrl-datetime-picker", never, { "disabledDays": { "alias": "disabledDays"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; "isSignal": true; }; "maxTime": { "alias": "maxTime"; "required": false; "isSignal": true; }; }, {}, never, ["label"], true, never>;
433
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatetimePickerControl, "iss-ctrl-datetime-picker", never, { "disabledDays": { "alias": "disabledDays"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; "isSignal": true; }; "maxTime": { "alias": "maxTime"; "required": false; "isSignal": true; }; "hijriCalendar": { "alias": "hijriCalendar"; "required": false; "isSignal": true; }; "emitHijri": { "alias": "emitHijri"; "required": false; "isSignal": true; }; }, {}, never, ["label"], true, never>;
379
434
  }
380
435
 
381
436
  interface IssAttachment {
@@ -901,7 +956,7 @@ declare class FieldAsyncValidation {
901
956
  * ### Keys by area
902
957
  * - **Common:** `type` · `disabled` · `readonly` · `placeholder` · `suffix` · `hideLabel` · `multiple`
903
958
  * - **Bounds:** `min` · `max` · `minLength` · `maxLength`
904
- * - **Dates:** `minDate` · `maxDate` · `dateFilter`
959
+ * - **Dates:** `minDate` · `maxDate` · `dateFilter` · `hijriCalendar` · `emitHijri`
905
960
  * - **Attachments:** `allowedFileSize` · `allowedFileTypes` · `minFilesCount` · `maxFilesCount` · `templateId` · `templateUrl`
906
961
  * - **Users:** `minUsersCount` · `maxUsersCount`
907
962
  * - **Table:** `showInTableColumns` · `tableWithFilter` · `tableWithSort` · `tableWithPagination`
@@ -968,6 +1023,18 @@ declare class FieldConfig {
968
1023
  * Restricts the calendar to working days. Source: `config.acceptWorkDaysOnly`.
969
1024
  */
970
1025
  dateFilter: WritableSignal<boolean | undefined>;
1026
+ /**
1027
+ * Renders the calendar as an Umm al-Qura Hijri calendar. The emitted value stays Gregorian
1028
+ * unless {@link FieldConfig.emitHijri} is also on. Source: `config.hijriCalendar`, also
1029
+ * accepted as `config.HijriCalendar`.
1030
+ */
1031
+ hijriCalendar: WritableSignal<boolean | undefined>;
1032
+ /**
1033
+ * Emits the picked date as a Hijri date instead of a Gregorian one — the same day emitted
1034
+ * as `1447-03-16` rather than `2025-09-08`. Implies {@link FieldConfig.hijriCalendar}: a
1035
+ * Hijri value is always picked from a Hijri calendar.
1036
+ */
1037
+ emitHijri: WritableSignal<boolean | undefined>;
971
1038
  /**
972
1039
  * Id of a downloadable template offered next to an attachment field.
973
1040
  */
@@ -1633,6 +1700,8 @@ declare class TimePickerField extends FieldBase {
1633
1700
  * | `minDate` | `Date` | Earliest selectable date. |
1634
1701
  * | `maxDate` | `Date` | Latest selectable date. |
1635
1702
  * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1703
+ * | `hijriCalendar` | `boolean` | Renders an Umm al-Qura Hijri calendar while the emitted value stays Gregorian. |
1704
+ * | `emitHijri` | `boolean` | Emits the Hijri date instead of the Gregorian one. Implies `hijriCalendar`. |
1636
1705
  *
1637
1706
  * ### Other field members used
1638
1707
  * `label()`
@@ -1662,6 +1731,8 @@ declare class DatePickerField extends FieldBase {
1662
1731
  * | `minDate` | `Date` | Earliest selectable date. |
1663
1732
  * | `maxDate` | `Date` | Latest selectable date. |
1664
1733
  * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1734
+ * | `hijriCalendar` | `boolean` | Renders an Umm al-Qura Hijri calendar while the emitted value stays Gregorian. |
1735
+ * | `emitHijri` | `boolean` | Emits the Hijri date instead of the Gregorian one. Implies `hijriCalendar`. |
1665
1736
  *
1666
1737
  * ### Other field members used
1667
1738
  * `label()`
@@ -1691,6 +1762,8 @@ declare class DatetimePickerField extends FieldBase {
1691
1762
  * | `minDate` | `Date` | Earliest selectable date. |
1692
1763
  * | `maxDate` | `Date` | Latest selectable date. |
1693
1764
  * | `readonly` | `boolean` | Shows the value but blocks interaction. |
1765
+ * | `hijriCalendar` | `boolean` | Renders an Umm al-Qura Hijri calendar while the emitted value stays Gregorian. |
1766
+ * | `emitHijri` | `boolean` | Emits the Hijri date instead of the Gregorian one. Implies `hijriCalendar`. |
1694
1767
  *
1695
1768
  * ### Other field members used
1696
1769
  * `label()`
@@ -1792,18 +1865,21 @@ declare class TimePickerViewer extends ViewerBase {
1792
1865
  }
1793
1866
 
1794
1867
  declare class DatePickerViewer extends ViewerBase {
1868
+ protected hijriDate: Signal<string | null>;
1795
1869
  static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerViewer, never>;
1796
1870
  static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerViewer, "iss-viewer-date-picker", never, {}, {}, never, never, true, never>;
1797
1871
  }
1798
1872
 
1799
1873
  declare class DatePickerTimeViewer extends ViewerBase {
1800
1874
  protected readonly DATETIME_FORMAT = "dd/MM/yyyy hh:mm a";
1875
+ protected hijriDatetime: Signal<string | null>;
1801
1876
  static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerTimeViewer, never>;
1802
1877
  static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerTimeViewer, "iss-viewer-datetime-picker", never, {}, {}, never, never, true, never>;
1803
1878
  }
1804
1879
 
1805
1880
  declare class DateRangePickerViewer extends ViewerBase implements OnInit {
1806
1881
  dateRange: string[];
1882
+ hijriDates: (string | null)[];
1807
1883
  ngOnInit(): void;
1808
1884
  static ɵfac: i0.ɵɵFactoryDeclaration<DateRangePickerViewer, never>;
1809
1885
  static ɵcmp: i0.ɵɵComponentDeclaration<DateRangePickerViewer, "iss-viewer-date-range-picker", never, {}, {}, never, never, true, never>;
@@ -1963,12 +2039,137 @@ declare class Employee {
1963
2039
  static ɵprov: i0.ɵɵInjectableDeclaration<Employee>;
1964
2040
  }
1965
2041
 
2042
+ /**
2043
+ * The single date adapter behind every `iss-ctrl-*` picker.
2044
+ *
2045
+ * It behaves as a plain Gregorian adapter — `dd/MM/yyyy` in and out — until its locale is
2046
+ * switched to {@link HIJRI_LOCALE}, at which point the whole calendar grid becomes Umm
2047
+ * al-Qura Hijri: the month lengths, the year and month labels and the day numbers all come
2048
+ * from the Hijri calendar.
2049
+ *
2050
+ * The value never changes shape. The adapter always works on a `Date`, so a Hijri calendar
2051
+ * still hands the control an ordinary `Date`, and it stays the control's decision whether to
2052
+ * emit that as a Gregorian or a Hijri string.
2053
+ *
2054
+ * Switch modes through {@link setHijri}, never by assigning `locale` — `setLocale` is what
2055
+ * tells an open calendar to re-render.
2056
+ */
2057
+ declare class IssDateAdapter extends NativeDateAdapter {
2058
+ #private;
2059
+ /** The Gregorian locale to fall back to when the Hijri calendar is turned off. */
2060
+ gregorianLocale: string;
2061
+ /** Whether the adapter is currently presenting the Hijri calendar. */
2062
+ get isHijri(): boolean;
2063
+ /**
2064
+ * Turns the Hijri calendar on or off. Goes through `setLocale` so that a calendar that is
2065
+ * already open redraws itself.
2066
+ */
2067
+ setHijri(hijri: boolean): void;
2068
+ getYear(date: Date): number;
2069
+ getMonth(date: Date): number;
2070
+ getDate(date: Date): number;
2071
+ getMonthNames(style: "long" | "short" | "narrow"): string[];
2072
+ getDateNames(): string[];
2073
+ getDayOfWeekNames(style: "long" | "short" | "narrow"): string[];
2074
+ getYearName(date: Date): string;
2075
+ getFirstDayOfWeek(): number;
2076
+ getNumDaysInMonth(date: Date): number;
2077
+ createDate(year: number, month: number, date: number): Date;
2078
+ addCalendarYears(date: Date, years: number): Date;
2079
+ addCalendarMonths(date: Date, months: number): Date;
2080
+ addCalendarDays(date: Date, days: number): Date;
2081
+ parse(value: any, parseFormat?: any): Date | null;
2082
+ format(date: Date, displayFormat: string): string;
2083
+ deserialize(value: any): Date | null;
2084
+ toIso8601(date: Date): string;
2085
+ static ɵfac: i0.ɵɵFactoryDeclaration<IssDateAdapter, never>;
2086
+ static ɵprov: i0.ɵɵInjectableDeclaration<IssDateAdapter>;
2087
+ }
2088
+ /**
2089
+ * Providers every date-based control needs: the {@link IssDateAdapter} itself, the Gregorian
2090
+ * locale it falls back to, and the `dd/MM/yyyy` formats both of its calendars are rendered in.
2091
+ *
2092
+ * Declared per component, so each picker owns its adapter instance and one field switching to
2093
+ * the Hijri calendar leaves every other field on the form alone.
2094
+ */
2095
+ declare function provideIssDateAdapter(): Provider[];
2096
+
1966
2097
  declare function arrayFrom<T>(length: number, valueFunction: (index: number) => T): T[];
1967
2098
 
1968
2099
  declare function formatFileSize(x: string | number): string;
1969
2100
 
1970
2101
  declare function getPropertyByPath(obj: any, path: string | undefined): any;
1971
2102
 
2103
+ /**
2104
+ * Umm al-Qura Hijri calendar helpers.
2105
+ *
2106
+ * Every function here works on a plain `Date`: a `Date` is an instant, and the Hijri
2107
+ * calendar is only another way of naming that instant. Nothing stores Hijri numbers on the
2108
+ * date itself, so a value converted to Hijri for display or emission is still the same day.
2109
+ *
2110
+ * The conversion is done by `Intl` with the `islamic-umalqura` calendar, which is the
2111
+ * calendar used officially in Saudi Arabia.
2112
+ */
2113
+ /** Locale used by the calendar UI when the Hijri calendar is on. */
2114
+ declare const HIJRI_LOCALE = "ar-SA-u-ca-islamic-umalqura";
2115
+ declare const HIJRI_MONTH_NAMES: {
2116
+ ar: string[];
2117
+ en: string[];
2118
+ enShort: string[];
2119
+ };
2120
+ interface HijriParts {
2121
+ /** Hijri year, for example `1447`. */
2122
+ year: number;
2123
+ /** Hijri month, **zero based** like `Date.getMonth()` — `0` is Muharram. */
2124
+ month: number;
2125
+ /** Hijri day of month, starting at `1`. */
2126
+ day: number;
2127
+ }
2128
+ /**
2129
+ * Reads the Hijri year, month and day a `Date` falls on.
2130
+ */
2131
+ declare function getHijriParts(date: Date): HijriParts;
2132
+ /**
2133
+ * The Gregorian `Date` of the first day of the Hijri month `date` falls in, at midday.
2134
+ *
2135
+ * Midday, not midnight, so a daylight-saving shift can never push the result into the
2136
+ * previous day while the month is being walked.
2137
+ */
2138
+ declare function startOfHijriMonth(date: Date): Date;
2139
+ /**
2140
+ * Number of days in the Hijri month `date` falls in — 29 or 30, decided by Umm al-Qura.
2141
+ */
2142
+ declare function getHijriDaysInMonth(date: Date): number;
2143
+ /**
2144
+ * Builds the `Date` for a Hijri year/month/day. The month is zero based, and a day past the
2145
+ * end of the month is clamped to the last day of that month.
2146
+ */
2147
+ declare function createHijriDate(year: number, month: number, day: number): Date;
2148
+ /**
2149
+ * Formats a date as a Hijri `yyyy-MM-dd` string — the shape the form emits when
2150
+ * `emitHijri` is on.
2151
+ */
2152
+ declare function formatHijriDate(date: Date): string;
2153
+ /**
2154
+ * Reads a Hijri date back into a `Date`, accepting both the emitted `yyyy-MM-dd` shape and
2155
+ * the `dd/MM/yyyy` shape shown in the input. Returns `null` for anything else.
2156
+ */
2157
+ declare function parseHijriDate(value: string | null | undefined): Date | null;
2158
+ /**
2159
+ * Renders a stored form value as a Hijri `dd/MM/yyyy` string for the read-only viewers, or
2160
+ * returns `null` when the field is not on the Hijri calendar and the value should be shown
2161
+ * as an ordinary Gregorian date.
2162
+ *
2163
+ * The two Hijri modes store different things, so they are read differently: with `emitHijri`
2164
+ * the value already carries Hijri numbers and only its notation changes, while with
2165
+ * `hijriCalendar` alone the value is Gregorian and has to be converted.
2166
+ */
2167
+ declare function toHijriDisplay(value: string | null | undefined, options: {
2168
+ hijriCalendar?: boolean;
2169
+ emitHijri?: boolean;
2170
+ withTime?: boolean;
2171
+ }): string | null;
2172
+
1972
2173
  declare function replacePlaceholders(str: string, values: any): string;
1973
2174
 
1974
2175
  declare abstract class IssValidators {
@@ -1995,5 +2196,5 @@ declare abstract class TimeValidator {
1995
2196
  static afterDate(field: IssField): ValidatorFn;
1996
2197
  }
1997
2198
 
1998
- export { ATTACHMENT_DOWNLOAD_URL, ATTACHMENT_UPLOAD_RESPONSE_MAPPER, ATTACHMENT_UPLOAD_URL, ArabicNumberPipe, AttachmentViewer, COMPONENTS, COUNTRIES, CheckboxControl, CheckboxField, CheckboxViewer, ChipsControl, ChipsField, ChipsViewer, ControlBase, DATETIME_FORMAT, DATE_FORMAT_ADAPTER, DEFAULT_COUNTRY, DatePickerControl, DatePickerField, DatePickerTimeViewer, DatePickerViewer, DateRangePickerControl, DateRangePickerField, DateRangePickerViewer, DatetimePickerControl, DatetimePickerField, Droppable, Employee, FIELD_DATA, FieldBase, FieldDataInjector, FileHandler, FilePickerControl, FilePickerField, FileValidators, FormEngine, HOST, HintsComponent, InputControl, InputField, InputViewer, IssValidators, Loader, MobileControl, MobileField, MobileViewer, Outlet, PLACEHOLDER_REGEX, PLATE_LETTERS, Phone, PlateControl, PlateField, PlateLetterPipe, PlateViewer, RadioControl, RadioField, RadioViewer, SERVICES, SelectControl, SelectField, SelectStatusPipe, SelectViewer, SlideToggleControl, SlideToggleField, SlideToggleViewer, TextareaControl, TextareaField, TextareaViewer, TimePickerControl, TimePickerField, TimePickerViewer, TimeValidator, ToggleButtonControl, ToggleButtonField, ToggleButtonViewer, TranslatePipe, UI_LANGUAGE, USER_SEARCH_API, VALIDATION_MESSAGES, VALIDATORS, VIEW_PROVIDER, ValidationMessageComponent, arrayFrom, formatFileSize, getPropertyByPath, replacePlaceholders };
1999
- export type { ActionTriggerFn, ComponentOutlet, Country, DateRangeEmission, DynamicImport, EventArgument, EventConfigFn, EventStrategy, FieldChange, Hint, HintAlignment, I18n, ISO2, IssAttachment, IssFile, Mobile, Option, PlateLetter, ValidationMessage, ValidationMessageFn };
2199
+ export { ATTACHMENT_DOWNLOAD_URL, ATTACHMENT_UPLOAD_RESPONSE_MAPPER, ATTACHMENT_UPLOAD_URL, ArabicNumberPipe, AttachmentViewer, COMPONENTS, COUNTRIES, CheckboxControl, CheckboxField, CheckboxViewer, ChipsControl, ChipsField, ChipsViewer, ControlBase, DATETIME_FORMAT, DATE_FORMAT_ADAPTER, DEFAULT_COUNTRY, DatePickerControl, DatePickerField, DatePickerTimeViewer, DatePickerViewer, DateRangePickerControl, DateRangePickerField, DateRangePickerViewer, DatetimePickerControl, DatetimePickerField, Droppable, Employee, FIELD_DATA, FieldBase, FieldDataInjector, FileHandler, FilePickerControl, FilePickerField, FileValidators, FormEngine, HIJRI_LOCALE, HIJRI_MONTH_NAMES, HOST, HintsComponent, InputControl, InputField, InputViewer, IssDateAdapter, IssValidators, Loader, MobileControl, MobileField, MobileViewer, Outlet, PLACEHOLDER_REGEX, PLATE_LETTERS, Phone, PlateControl, PlateField, PlateLetterPipe, PlateViewer, RadioControl, RadioField, RadioViewer, SERVICES, SelectControl, SelectField, SelectStatusPipe, SelectViewer, SlideToggleControl, SlideToggleField, SlideToggleViewer, TextareaControl, TextareaField, TextareaViewer, TimePickerControl, TimePickerField, TimePickerViewer, TimeValidator, ToggleButtonControl, ToggleButtonField, ToggleButtonViewer, TranslatePipe, UI_LANGUAGE, USER_SEARCH_API, VALIDATION_MESSAGES, VALIDATORS, VIEW_PROVIDER, ValidationMessageComponent, arrayFrom, createHijriDate, formatFileSize, formatHijriDate, getHijriDaysInMonth, getHijriParts, getPropertyByPath, parseHijriDate, provideIssDateAdapter, replacePlaceholders, startOfHijriMonth, toHijriDisplay };
2200
+ export type { ActionTriggerFn, ComponentOutlet, Country, DateRangeEmission, DynamicImport, EventArgument, EventConfigFn, EventStrategy, FieldChange, HijriParts, Hint, HintAlignment, I18n, ISO2, IssAttachment, IssFile, Mobile, Option, PlateLetter, ValidationMessage, ValidationMessageFn };