@stemy/ngx-utils 19.9.41 → 19.9.43

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.
@@ -1,6 +1,6 @@
1
1
  import 'zone.js';
2
2
  import * as i0 from '@angular/core';
3
- import { InjectionToken, runInInjectionContext, PLATFORM_ID, Inject, Injectable, Optional, inject, Injector, untracked, computed, signal, DestroyRef, isDevMode, ErrorHandler, EventEmitter, createComponent, NgZone, Pipe, input, output, ChangeDetectorRef, ElementRef, effect, HostListener, Directive, Input, HostBinding, Output, TemplateRef, ViewEncapsulation, Component, ChangeDetectionStrategy, model, ViewChild, forwardRef, ContentChild, contentChild, contentChildren, Renderer2, ContentChildren, provideAppInitializer, makeEnvironmentProviders, NgModule } from '@angular/core';
3
+ import { InjectionToken, runInInjectionContext, PLATFORM_ID, Inject, Injectable, Optional, inject, Injector, untracked, computed, signal, DestroyRef, isDevMode, ErrorHandler, EventEmitter, createComponent, NgZone, Pipe, input, output, ChangeDetectorRef, ElementRef, effect, HostListener, Directive, Input, HostBinding, Output, TemplateRef, ViewEncapsulation, Component, ChangeDetectionStrategy, model, ViewChild, viewChild, forwardRef, ContentChild, contentChild, contentChildren, Renderer2, ContentChildren, provideAppInitializer, makeEnvironmentProviders, NgModule } from '@angular/core';
4
4
  import 'reflect-metadata';
5
5
  import * as i2 from '@angular/router';
6
6
  import { ActivatedRouteSnapshot, Scroll, NavigationEnd, UrlTree, Router, DefaultUrlSerializer, UrlSegmentGroup, UrlSegment, UrlSerializer, ROUTES } from '@angular/router';
@@ -172,6 +172,12 @@ function getType(obj) {
172
172
  function isObject(value) {
173
173
  return getType(value) === "object";
174
174
  }
175
+ function isDefined(value) {
176
+ return typeof value !== "undefined" && value !== null;
177
+ }
178
+ function isDate(value) {
179
+ return null !== value && !isNaN(value) && "undefined" !== typeof value.getDate;
180
+ }
175
181
  function isString(value) {
176
182
  return typeof value === "string";
177
183
  }
@@ -308,7 +314,7 @@ class ObjectUtils {
308
314
  let curKey = "";
309
315
  do {
310
316
  curKey += keys.shift();
311
- if (ObjectUtils.isDefined(obj) && ObjectUtils.isDefined(obj[curKey]) && (typeof obj[curKey] === "object" || !keys.length)) {
317
+ if (isDefined(obj) && isDefined(obj[curKey]) && (typeof obj[curKey] === "object" || !keys.length)) {
312
318
  obj = obj[curKey];
313
319
  curKey = "";
314
320
  }
@@ -369,7 +375,7 @@ class ObjectUtils {
369
375
  return isObject(value);
370
376
  }
371
377
  static isDefined(value) {
372
- return typeof value !== "undefined" && value !== null;
378
+ return isDefined(value);
373
379
  }
374
380
  static isNullOrUndefined(value) {
375
381
  return typeof value == "undefined" || value == null;
@@ -384,7 +390,7 @@ class ObjectUtils {
384
390
  return isFunction(value);
385
391
  }
386
392
  static isDate(value) {
387
- return null !== value && !isNaN(value) && "undefined" !== typeof value.getDate;
393
+ return isDate(value);
388
394
  }
389
395
  static isBlob(value) {
390
396
  return (hasBlob && value instanceof Blob) || (hasFile && value instanceof File);
@@ -433,7 +439,7 @@ class ObjectUtils {
433
439
  return true;
434
440
  }
435
441
  static pad(obj, width, chr = "0") {
436
- const str = ObjectUtils.isDefined(obj) ? obj.toString() : "";
442
+ const str = isDefined(obj) ? obj.toString() : "";
437
443
  return str.length >= width ? str : new Array(width - str.length + 1).join(chr) + str;
438
444
  }
439
445
  static copyRecursive(target, source, predicate, copies) {
@@ -1660,6 +1666,71 @@ function getISOWeekNumber(date) {
1660
1666
  }
1661
1667
  return 1 + Math.ceil((firstThursday - target.valueOf()) / 604800000);
1662
1668
  }
1669
+ /**
1670
+ * Convert value to a string with corrected date format (date, date-time)
1671
+ * @param value Value to convert to date string
1672
+ * @param format Expected date format (date, date-time)
1673
+ */
1674
+ function convertToDateFormat(value, format = "date") {
1675
+ if (!isDefined(value) || !format?.includes("date"))
1676
+ return value;
1677
+ value = isDate(value) ? value : new Date(value);
1678
+ const date = isNaN(value) ? new Date() : value;
1679
+ const target = new Date(date.getTime() - date.getTimezoneOffset() * 60000).toISOString();
1680
+ return format === "datetime-local" || format === "date-time"
1681
+ ? target.slice(0, 16)
1682
+ : target.slice(0, 10);
1683
+ }
1684
+ /**
1685
+ * Returns if the day of the week is in the provided date is disabled
1686
+ * @param date Checked date
1687
+ * @param disabledDays An array of disabled days of the week (0-7, where 0 and 7 both means saturday)
1688
+ */
1689
+ function isDayOfWeekDisabled(date, disabledDays = []) {
1690
+ if (!Array.isArray(disabledDays))
1691
+ return false;
1692
+ const day = date.getDay();
1693
+ return disabledDays.some(d => (d === 7 ? 0 : d) === day);
1694
+ }
1695
+ /**
1696
+ * Finds the closest valid date in between the specified conditions
1697
+ * @param base Target date
1698
+ * @param min Minimum date
1699
+ * @param max Maximum date
1700
+ * @param disabledTimes An array of disabled dates (midnight timestamps)
1701
+ * @param disabledDays An array of disabled days of the week (0-7, where 0 and 7 both means saturday)
1702
+ */
1703
+ function findClosestValidDate(base, min, max, disabledTimes, disabledDays) {
1704
+ const midnightBase = toMidnight(base);
1705
+ let direction = 1;
1706
+ let testDate = new Date(midnightBase.getTime());
1707
+ if (min && midnightBase < toMidnight(min)) {
1708
+ testDate = new Date(toMidnight(min).getTime());
1709
+ direction = 1;
1710
+ }
1711
+ else if (max && midnightBase > toMidnight(max)) {
1712
+ testDate = new Date(toMidnight(max).getTime());
1713
+ direction = -1;
1714
+ }
1715
+ let iterations = 0;
1716
+ while (iterations < 365) {
1717
+ const currentT = testDate.getTime();
1718
+ let isInvalid = false;
1719
+ if (min && testDate < toMidnight(min))
1720
+ isInvalid = true;
1721
+ if (max && testDate > toMidnight(max))
1722
+ isInvalid = true;
1723
+ if (disabledTimes.includes(currentT))
1724
+ isInvalid = true;
1725
+ if (isDayOfWeekDisabled(testDate, disabledDays))
1726
+ isInvalid = true;
1727
+ if (!isInvalid)
1728
+ return testDate;
1729
+ testDate.setDate(testDate.getDate() + direction);
1730
+ iterations++;
1731
+ }
1732
+ return min ? min : (max ? max : new Date());
1733
+ }
1663
1734
  /**
1664
1735
  * Adds an amount of units to the specified date
1665
1736
  * @param date
@@ -7526,7 +7597,7 @@ class DropdownDirective {
7526
7597
  parents.push(this.nativeElement);
7527
7598
  }
7528
7599
  // If one of the parents contains the target then we clicked inside
7529
- if (parents.some(child => child.contains(target)))
7600
+ if (!document.contains(target) || parents.some(child => child.contains(target)))
7530
7601
  return;
7531
7602
  }
7532
7603
  setTimeout(() => this.hide(), event.type == "touchend" ? 250 : 100);
@@ -7788,6 +7859,7 @@ class DropdownContentDirective {
7788
7859
  arrow.classList.add(`dropdown-content-arrow`);
7789
7860
  arrow.style.position = `absolute`;
7790
7861
  wrapper.appendChild(arrow);
7862
+ wrapper.popover = "manual";
7791
7863
  const ref = this.vcr.createEmbeddedView(this.templateRef);
7792
7864
  ref.rootNodes.forEach(node => wrapper.appendChild(node));
7793
7865
  ref.detectChanges();
@@ -7819,6 +7891,10 @@ class DropdownContentDirective {
7819
7891
  }
7820
7892
  }
7821
7893
  wrapper.classList.add("dropdown-content-wrap");
7894
+ wrapper.style.margin = "0";
7895
+ wrapper.style.padding = "0";
7896
+ wrapper.style.border = "none";
7897
+ wrapper.showPopover();
7822
7898
  return [wrapper, arrow];
7823
7899
  }
7824
7900
  initialize() {
@@ -8103,23 +8179,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
8103
8179
  type: Input
8104
8180
  }] } });
8105
8181
 
8106
- class CalendarComponent {
8182
+ class CalendarInputs {
8107
8183
  constructor() {
8108
- this.months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
8109
- this.daysOfWeek = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"];
8110
8184
  this.value = model(null);
8111
8185
  this.min = input(null);
8112
8186
  this.max = input(null);
8113
8187
  this.disabledDates = input([]);
8114
8188
  this.disabledDays = input([]);
8115
- this.currentMonth = signal(new Date().getMonth());
8116
- this.currentYear = signal(new Date().getFullYear());
8117
- this.isDragging = signal(false);
8118
- this.dragStartCellDate = signal(null);
8119
- this.dragCurrentCellDate = signal(null);
8120
- this.initialSelectedStateBeforeDrag = signal(new Map());
8121
- this.dragTargetState = signal(true);
8122
- this.isInitialized = false;
8189
+ this.disabled = model(false);
8190
+ this.strict = input(true);
8191
+ this.testId = input("calendar", {
8192
+ transform: value => String(value || "calendar")
8193
+ });
8123
8194
  this.minDate = computed(() => parseValidDate(this.min()));
8124
8195
  this.maxDate = computed(() => parseValidDate(this.max()));
8125
8196
  this.disabledTimestamps = computed(() => {
@@ -8128,18 +8199,16 @@ class CalendarComponent {
8128
8199
  .filter((d) => d !== null)
8129
8200
  .map(d => toMidnight(d).getTime());
8130
8201
  });
8131
- this.isMultiSelect = computed(() => Array.isArray(this.value()));
8132
- // Common Day Validator mapping strategy shared across computed environments
8133
- this.isDayOfWeekDisabledFn = computed(() => {
8134
- const disDays = this.disabledDays();
8135
- return (jsDay) => disDays.some(d => (d === 7 ? 0 : d) === jsDay);
8202
+ this.parsedValue = computed(() => {
8203
+ const value = this.value();
8204
+ return isString(value) ? parseValidDate(value) : value;
8136
8205
  });
8137
8206
  this.validatedValue = computed(() => {
8138
- const val = this.value();
8207
+ const value = this.parsedValue();
8139
8208
  const min = this.minDate();
8140
8209
  const max = this.maxDate();
8141
8210
  const disabledTimes = this.disabledTimestamps();
8142
- const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8211
+ const disabledDays = this.disabledDays();
8143
8212
  const checkInvalid = (d) => {
8144
8213
  const midnight = toMidnight(d);
8145
8214
  if (min && midnight < toMidnight(min))
@@ -8148,19 +8217,55 @@ class CalendarComponent {
8148
8217
  return true;
8149
8218
  if (disabledTimes.includes(midnight.getTime()))
8150
8219
  return true;
8151
- return isDayOfWeekDisabled(midnight.getDay());
8220
+ return isDayOfWeekDisabled(midnight, disabledDays);
8152
8221
  };
8153
- if (Array.isArray(val)) {
8154
- return val.filter(d => d instanceof Date && !isNaN(d.getTime()) && !checkInvalid(d));
8222
+ if (Array.isArray(value)) {
8223
+ const filtered = value.filter(d => d instanceof Date && !isNaN(d.getTime()) && !checkInvalid(d));
8224
+ return (value.length !== filtered.length) ? filtered : value;
8155
8225
  }
8156
- else if (val instanceof Date && !isNaN(val.getTime())) {
8157
- if (checkInvalid(val)) {
8158
- return this.findClosestValidDate(val, min, max, disabledTimes, isDayOfWeekDisabled);
8226
+ else if (value instanceof Date && !isNaN(value.getTime())) {
8227
+ if (checkInvalid(value)) {
8228
+ return findClosestValidDate(value, min, max, disabledTimes, disabledDays);
8159
8229
  }
8160
- return val;
8230
+ return value;
8161
8231
  }
8162
8232
  return null;
8163
8233
  });
8234
+ effect(() => {
8235
+ const strict = this.strict();
8236
+ const value = this.value();
8237
+ const parsed = this.parsedValue();
8238
+ const valid = this.validatedValue();
8239
+ // Force select a valid value based on preferences
8240
+ if (valid !== parsed || (strict && valid !== value)) {
8241
+ this.value.set(valid);
8242
+ }
8243
+ });
8244
+ }
8245
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: CalendarInputs, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8246
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.22", type: CalendarInputs, isStandalone: true, selector: "ng-component", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, disabledDates: { classPropertyName: "disabledDates", publicName: "disabledDates", isSignal: true, isRequired: false, transformFunction: null }, disabledDays: { classPropertyName: "disabledDays", publicName: "disabledDays", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, strict: { classPropertyName: "strict", publicName: "strict", isSignal: true, isRequired: false, transformFunction: null }, testId: { classPropertyName: "testId", publicName: "testId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", disabled: "disabledChange" }, ngImport: i0, template: ``, isInline: true }); }
8247
+ }
8248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: CalendarInputs, decorators: [{
8249
+ type: Component,
8250
+ args: [{
8251
+ template: ``
8252
+ }]
8253
+ }], ctorParameters: () => [] });
8254
+
8255
+ class CalendarComponent extends CalendarInputs {
8256
+ constructor() {
8257
+ super();
8258
+ this.months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
8259
+ this.daysOfWeek = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"];
8260
+ this.currentMonth = signal(new Date().getMonth());
8261
+ this.currentYear = signal(new Date().getFullYear());
8262
+ this.isDragging = signal(false);
8263
+ this.dragStartCellDate = signal(null);
8264
+ this.dragCurrentCellDate = signal(null);
8265
+ this.initialSelectedStateBeforeDrag = signal(new Map());
8266
+ this.dragTargetState = signal(true);
8267
+ this.isInitialized = false;
8268
+ this.isMultiSelect = computed(() => Array.isArray(this.value()));
8164
8269
  // --- Computed Navigation States ---
8165
8270
  this.canGoPrev = computed(() => {
8166
8271
  const min = this.minDate();
@@ -8220,20 +8325,21 @@ class CalendarComponent {
8220
8325
  return false;
8221
8326
  });
8222
8327
  this.calendarCells = computed(() => {
8223
- const year = this.currentYear();
8224
- const month = this.currentMonth();
8225
- const firstDayOfMonth = new Date(year, month, 1);
8328
+ const curYear = this.currentYear();
8329
+ const curMonth = this.currentMonth();
8330
+ const firstDayOfMonth = new Date(curYear, curMonth, 1);
8226
8331
  let startOffset = firstDayOfMonth.getDay() - 1;
8227
8332
  if (startOffset === -1)
8228
8333
  startOffset = 6;
8229
8334
  if (startOffset === 0)
8230
8335
  startOffset = 7;
8231
- const gridStartDate = new Date(year, month, 1 - startOffset);
8336
+ const gridStartDate = new Date(curYear, curMonth, 1 - startOffset);
8232
8337
  const rawCells = [];
8338
+ const id = this.testId();
8233
8339
  const min = this.minDate();
8234
8340
  const max = this.maxDate();
8235
8341
  const disabledTimes = this.disabledTimestamps();
8236
- const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8342
+ const disabledDays = this.disabledDays();
8237
8343
  const currentValue = this.validatedValue();
8238
8344
  const startDrag = this.dragStartCellDate();
8239
8345
  const currentDrag = this.dragCurrentCellDate();
@@ -8250,14 +8356,14 @@ class CalendarComponent {
8250
8356
  dragMinT = Math.min(startT, endT);
8251
8357
  dragMaxT = Math.max(startT, endT);
8252
8358
  }
8253
- const prevMonthLastDayT = toMidnight(new Date(year, month, 0)).getTime();
8254
- const nextMonthFirstDayT = toMidnight(new Date(year, month + 1, 1)).getTime();
8359
+ const prevMonthLastDayT = toMidnight(new Date(curYear, curMonth, 0)).getTime();
8360
+ const nextMonthFirstDayT = toMidnight(new Date(curYear, curMonth + 1, 1)).getTime();
8255
8361
  for (let row = 0; row < 6; row++) {
8256
8362
  const firstDateOfRow = new Date(gridStartDate.getFullYear(), gridStartDate.getMonth(), gridStartDate.getDate() + (row * 7));
8257
8363
  rawCells.push({
8258
- id: `week-${row}-${firstDateOfRow.getTime()}`,
8364
+ id: `${id}-week-${row}`,
8259
8365
  date: null, isCurrentMonth: false, isDisabled: true, isSelected: false, isInDragRange: false,
8260
- isWeekNum: true, weekNumber: getISOWeekNumber(firstDateOfRow), isRangeStart: false, isRangeEnd: false,
8366
+ isWeekNum: true, numValue: getISOWeekNumber(firstDateOfRow), isRangeStart: false, isRangeEnd: false,
8261
8367
  isFillerStart: false, isFillerEnd: false
8262
8368
  });
8263
8369
  for (let col = 0; col < 7; col++) {
@@ -8271,7 +8377,7 @@ class CalendarComponent {
8271
8377
  isDisabled = true;
8272
8378
  if (disabledTimes.includes(timestamp))
8273
8379
  isDisabled = true;
8274
- if (isDayOfWeekDisabled(cellMidnight.getDay()))
8380
+ if (isDayOfWeekDisabled(cellMidnight, disabledDays))
8275
8381
  isDisabled = true;
8276
8382
  let isSelected = false;
8277
8383
  if (!multiSelectMode) {
@@ -8306,10 +8412,19 @@ class CalendarComponent {
8306
8412
  isRangeEnd = true;
8307
8413
  }
8308
8414
  }
8415
+ const date = cellDate.getDate();
8416
+ const month = cellDate.getMonth();
8309
8417
  rawCells.push({
8310
- id: String(timestamp), date: cellDate, isCurrentMonth: cellDate.getMonth() === month,
8311
- isDisabled, isSelected, isInDragRange, isWeekNum: false, weekNumber: null,
8312
- isRangeStart, isRangeEnd,
8418
+ id: `${id}-day-${month}-${date}`,
8419
+ date: cellDate,
8420
+ isCurrentMonth: month === curMonth,
8421
+ isDisabled,
8422
+ isSelected,
8423
+ isInDragRange,
8424
+ isWeekNum: false,
8425
+ numValue: date,
8426
+ isRangeStart,
8427
+ isRangeEnd,
8313
8428
  isFillerStart: timestamp === nextMonthFirstDayT,
8314
8429
  isFillerEnd: timestamp === prevMonthLastDayT
8315
8430
  });
@@ -8319,22 +8434,31 @@ class CalendarComponent {
8319
8434
  });
8320
8435
  effect(() => {
8321
8436
  const val = this.validatedValue();
8322
- if (val && !this.isInitialized) {
8323
- untracked(() => {
8324
- let referenceDate = null;
8325
- if (Array.isArray(val) && val.length > 0) {
8326
- referenceDate = new Date(Math.max(...val.map(d => d.getTime())));
8327
- }
8328
- else if (val instanceof Date) {
8329
- referenceDate = val;
8330
- }
8331
- if (referenceDate && !isNaN(referenceDate.getTime())) {
8332
- this.currentMonth.set(referenceDate.getMonth());
8333
- this.currentYear.set(referenceDate.getFullYear());
8334
- this.isInitialized = true;
8335
- }
8336
- });
8337
- }
8437
+ untracked(() => {
8438
+ let referenceDate = null;
8439
+ // 1. If a valid selection exists, use the latest date as the reference view anchor
8440
+ if (Array.isArray(val) && val.length > 0) {
8441
+ referenceDate = new Date(Math.max(...val.map(d => d.getTime())));
8442
+ }
8443
+ else if (val instanceof Date) {
8444
+ referenceDate = val;
8445
+ }
8446
+ // 2. FALLBACK: If no selection exists, dynamically look up the first allowed calendar date
8447
+ if (!referenceDate || isNaN(referenceDate.getTime())) {
8448
+ const min = this.minDate();
8449
+ const max = this.maxDate();
8450
+ const disabledTimes = this.disabledTimestamps();
8451
+ const disabledDays = this.disabledDays();
8452
+ // Start searching from today
8453
+ referenceDate = findClosestValidDate(new Date(), min, max, disabledTimes, disabledDays);
8454
+ }
8455
+ // 3. Update the view tracking states cleanly
8456
+ if (referenceDate && !isNaN(referenceDate.getTime())) {
8457
+ this.currentMonth.set(referenceDate.getMonth());
8458
+ this.currentYear.set(referenceDate.getFullYear());
8459
+ this.isInitialized = true;
8460
+ }
8461
+ });
8338
8462
  });
8339
8463
  }
8340
8464
  // --- Dynamic Month Verification Engine ---
@@ -8342,7 +8466,7 @@ class CalendarComponent {
8342
8466
  const min = this.minDate();
8343
8467
  const max = this.maxDate();
8344
8468
  const disabledTimes = this.disabledTimestamps();
8345
- const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8469
+ const disabledDays = this.disabledDays();
8346
8470
  const loopDate = new Date(year, month, 1);
8347
8471
  const minMidnight = min ? toMidnight(min).getTime() : -Infinity;
8348
8472
  const maxMidnight = max ? toMidnight(max).getTime() : Infinity;
@@ -8351,7 +8475,7 @@ class CalendarComponent {
8351
8475
  const currentMidnight = toMidnight(loopDate);
8352
8476
  const currentT = currentMidnight.getTime();
8353
8477
  if (currentT >= minMidnight && currentT <= maxMidnight) {
8354
- if (!disabledTimes.includes(currentT) && !isDayOfWeekDisabled(currentMidnight.getDay())) {
8478
+ if (!disabledTimes.includes(currentT) && !isDayOfWeekDisabled(currentMidnight, disabledDays)) {
8355
8479
  return true; // Found a valid date slot
8356
8480
  }
8357
8481
  }
@@ -8423,7 +8547,8 @@ class CalendarComponent {
8423
8547
  return;
8424
8548
  this.dragCurrentCellDate.set(cell.date);
8425
8549
  }
8426
- onGridMouseLeave() { }
8550
+ onGridMouseLeave() {
8551
+ }
8427
8552
  onMouseUpGlobal() {
8428
8553
  if (!this.isDragging())
8429
8554
  return;
@@ -8436,8 +8561,6 @@ class CalendarComponent {
8436
8561
  const hoveredCell = cellCells.find(c => c.date && isSameDay(c.date, currentDrag));
8437
8562
  if (hoveredCell && !hoveredCell.isDisabled) {
8438
8563
  this.value.set(currentDrag);
8439
- this.currentMonth.set(currentDrag.getMonth());
8440
- this.currentYear.set(currentDrag.getFullYear());
8441
8564
  }
8442
8565
  }
8443
8566
  else {
@@ -8456,7 +8579,7 @@ class CalendarComponent {
8456
8579
  const min = this.minDate();
8457
8580
  const max = this.maxDate();
8458
8581
  const disabledTimes = this.disabledTimestamps();
8459
- const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8582
+ const disabledDays = this.disabledDays();
8460
8583
  const dynamicDateCursor = new Date(minT);
8461
8584
  const loopEndMidnight = new Date(maxT);
8462
8585
  while (dynamicDateCursor <= loopEndMidnight) {
@@ -8468,7 +8591,7 @@ class CalendarComponent {
8468
8591
  isDayRestricted = true;
8469
8592
  if (disabledTimes.includes(currentT))
8470
8593
  isDayRestricted = true;
8471
- if (isDayOfWeekDisabled(dynamicDateCursor.getDay()))
8594
+ if (isDayOfWeekDisabled(dynamicDateCursor, disabledDays))
8472
8595
  isDayRestricted = true;
8473
8596
  if (!isDayRestricted) {
8474
8597
  if (targetState) {
@@ -8481,8 +8604,6 @@ class CalendarComponent {
8481
8604
  dynamicDateCursor.setDate(dynamicDateCursor.getDate() + 1);
8482
8605
  }
8483
8606
  this.value.set(Array.from(updatedSelectionMap.values()));
8484
- this.currentMonth.set(currentDrag.getMonth());
8485
- this.currentYear.set(currentDrag.getFullYear());
8486
8607
  }
8487
8608
  }
8488
8609
  });
@@ -8491,43 +8612,12 @@ class CalendarComponent {
8491
8612
  this.dragCurrentCellDate.set(null);
8492
8613
  this.initialSelectedStateBeforeDrag.set(new Map());
8493
8614
  }
8494
- findClosestValidDate(baseDate, min, max, disabledTimes, isDayOfWeekDisabled = (jsDay) => false) {
8495
- const midnightBase = toMidnight(baseDate);
8496
- let direction = 1;
8497
- let testDate = new Date(midnightBase.getTime());
8498
- if (min && midnightBase < toMidnight(min)) {
8499
- testDate = new Date(toMidnight(min).getTime());
8500
- direction = 1;
8501
- }
8502
- else if (max && midnightBase > toMidnight(max)) {
8503
- testDate = new Date(toMidnight(max).getTime());
8504
- direction = -1;
8505
- }
8506
- let iterations = 0;
8507
- while (iterations < 365) {
8508
- const currentT = testDate.getTime();
8509
- let isInvalid = false;
8510
- if (min && testDate < toMidnight(min))
8511
- isInvalid = true;
8512
- if (max && testDate > toMidnight(max))
8513
- isInvalid = true;
8514
- if (disabledTimes.includes(currentT))
8515
- isInvalid = true;
8516
- if (isDayOfWeekDisabled(testDate.getDay()))
8517
- isInvalid = true;
8518
- if (!isInvalid)
8519
- return testDate;
8520
- testDate.setDate(testDate.getDate() + direction);
8521
- iterations++;
8522
- }
8523
- return min ? min : (max ? max : new Date());
8524
- }
8525
8615
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: CalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8526
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.22", type: CalendarComponent, isStandalone: false, selector: "calendar", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, disabledDates: { classPropertyName: "disabledDates", publicName: "disabledDates", isSignal: true, isRequired: false, transformFunction: null }, disabledDays: { classPropertyName: "disabledDays", publicName: "disabledDays", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { listeners: { "window:mouseup": "onMouseUpGlobal($event)" } }, ngImport: i0, template: "<div class=\"calendar-container\">\r\n <div class=\"calendar-header\">\r\n <div class=\"prev\">\r\n @if (canGoPrev()) {\r\n <btn (click)=\"prevMonth()\" icon=\"chevron-left\"></btn>\r\n }\r\n </div>\r\n <div class=\"header-label\">\r\n {{ \"month.\" + months[currentMonth()] | translate }} {{ currentYear() }}\r\n </div>\r\n <div class=\"next\">\r\n @if (canGoNext()) {\r\n <btn (click)=\"nextMonth()\" icon=\"chevron-right\"></btn>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"calendar-grid days-header\">\r\n <div class=\"day-label\"></div>\r\n @for (day of daysOfWeek; track day) {\r\n <div class=\"day-label\">{{ \"day.\" + day | translate }}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"calendar-grid days-grid\" (mouseleave)=\"onGridMouseLeave()\">\r\n @for (cell of calendarCells(); track cell.id) {\r\n @if (cell.isWeekNum) {\r\n <div class=\"calendar-cell week-number-cell\">\r\n {{ cell.weekNumber }}\r\n </div>\r\n }\r\n\r\n @else {\r\n <div\r\n class=\"calendar-cell\"\r\n [class.filler]=\"!cell.isCurrentMonth\"\r\n [class.filler-start]=\"cell.isFillerStart\"\r\n [class.filler-end]=\"cell.isFillerEnd\"\r\n [class.disabled]=\"cell.isDisabled\"\r\n [class.in-range]=\"cell.isInDragRange\"\r\n [class.range-start]=\"cell.isRangeStart\"\r\n [class.range-end]=\"cell.isRangeEnd\"\r\n [class.active]=\"cell.isSelected\"\r\n (mousedown)=\"onMouseDown(cell, $event)\"\r\n (mouseenter)=\"onMouseEnter(cell)\"\r\n >\r\n <span class=\"cell-number\">{{ cell.date?.getDate() }}</span>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", styles: [".calendar-container{--calendar-color: var(--primary-color, var(--bs-primary, var(--mat-sys-primary, #666666)));--calendar-secondary-color: #686868;--calendar-padding: 4px;--calendar-cell-padding: 3px;--calendar-num-size: 30px;--calendar-num-radius: calc(var(--calendar-num-size) / 2 + var(--calendar-cell-padding));min-width:300px;margin-bottom:5px;border:1px solid #e0e0e0;padding:var(--calendar-padding);-webkit-user-select:none;user-select:none;background:#fff}.calendar-container *{box-sizing:border-box}.calendar-container .calendar-header{display:grid;grid-template-columns:50px 1fr 50px;justify-content:space-between;align-items:center;background-color:var(--calendar-color);color:#fff;padding:var(--calendar-padding);border-radius:3px;font-weight:700}.calendar-container .calendar-header .header-label{text-align:center}.calendar-container .calendar-header .prev{display:flex;justify-content:flex-start}.calendar-container .calendar-header .next{display:flex;justify-content:flex-end}.calendar-container .calendar-grid{display:grid;gap:5px 0;grid-template-columns:repeat(8,1fr);text-align:center}.calendar-container .days-header{margin-top:12px;font-weight:500;color:#757575;font-size:14px}.calendar-container .day-label{padding:8px 0}.calendar-container .days-grid{margin-top:8px}.calendar-container .calendar-cell{position:relative;padding:var(--calendar-cell-padding);font-size:14px;color:#333;cursor:pointer;display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.week-number-cell{color:var(--calendar-color);font-weight:700;cursor:default;pointer-events:none}.calendar-container .calendar-cell.filler{color:#666;background-color:#f6f6f6}.calendar-container .calendar-cell.filler.filler-start{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.filler.filler-end{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range:before{opacity:.5;inset:0;content:\" \";position:absolute;background:var(--calendar-color)}.calendar-container .calendar-cell.in-range.range-start:before{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range.range-end:before{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.disabled{color:#7e7e7e;opacity:.75;cursor:default}.calendar-container .cell-number{position:relative;border-radius:50%;width:var(--calendar-num-size);height:var(--calendar-num-size);display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.active .cell-number{background-color:var(--calendar-color);color:#fff}\n"], dependencies: [{ kind: "component", type: BtnComponent, selector: "btn", inputs: ["label", "tooltip", "icon", "disabled", "path", "type", "size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
8616
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.22", type: CalendarComponent, isStandalone: false, selector: "calendar", host: { listeners: { "window:mouseup": "onMouseUpGlobal($event)" } }, usesInheritance: true, ngImport: i0, template: "@let id = testId();\r\n<div class=\"calendar-container\">\r\n <div class=\"calendar-header\">\r\n <div class=\"prev\">\r\n @if (canGoPrev()) {\r\n <btn icon=\"chevron-left\"\r\n [attr.data-testid]=\"id + '-prev-month'\"\r\n (click)=\"prevMonth()\"></btn>\r\n }\r\n </div>\r\n <div class=\"header-label\">\r\n @let month = currentMonth();\r\n <span [attr.data-testid]=\"id + '-month'\"\r\n [attr.data-value]=\"month\">\r\n {{ \"month.\" + months[month] | translate }}\r\n </span>\r\n @let year = currentYear();\r\n <span [attr.data-testid]=\"id + '-year'\"\r\n [attr.data-value]=\"year\">\r\n {{ year }}\r\n </span>\r\n </div>\r\n <div class=\"next\">\r\n @if (canGoNext()) {\r\n <btn icon=\"chevron-right\"\r\n [attr.data-testid]=\"id + '-next-month'\"\r\n (click)=\"nextMonth()\"></btn>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"calendar-grid days-header\">\r\n <div class=\"day-label\"></div>\r\n @for (day of daysOfWeek; track day) {\r\n <div class=\"day-label\">{{ \"day.\" + day | translate }}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"calendar-grid days-grid\" (mouseleave)=\"onGridMouseLeave()\">\r\n @for (cell of calendarCells(); track cell.id) {\r\n @if (cell.isWeekNum) {\r\n <div class=\"calendar-cell week-number-cell\"\r\n [attr.data-testid]=\"cell.id\">\r\n {{ cell.numValue }}\r\n </div>\r\n }\r\n @else {\r\n <div\r\n class=\"calendar-cell\"\r\n [class.filler]=\"!cell.isCurrentMonth\"\r\n [class.filler-start]=\"cell.isFillerStart\"\r\n [class.filler-end]=\"cell.isFillerEnd\"\r\n [class.disabled]=\"cell.isDisabled\"\r\n [class.in-range]=\"cell.isInDragRange\"\r\n [class.range-start]=\"cell.isRangeStart\"\r\n [class.range-end]=\"cell.isRangeEnd\"\r\n [class.active]=\"cell.isSelected\"\r\n [attr.data-testid]=\"cell.id\"\r\n (mousedown)=\"onMouseDown(cell, $event)\"\r\n (mouseenter)=\"onMouseEnter(cell)\"\r\n >\r\n <span class=\"cell-number\">{{ cell.numValue }}</span>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", styles: [".calendar-container{--calendar-color: var(--primary-color, var(--bs-primary, var(--mat-sys-primary, #666666)));--calendar-secondary-color: #686868;--calendar-padding: 4px;--calendar-cell-padding: 3px;--calendar-num-size: 30px;--calendar-num-radius: calc(var(--calendar-num-size) / 2 + var(--calendar-cell-padding));min-width:300px;border:1px solid #e0e0e0;padding:var(--calendar-padding);-webkit-user-select:none;user-select:none;background:#fff}.calendar-container *{box-sizing:border-box}.calendar-container .calendar-header{display:grid;grid-template-columns:50px 1fr 50px;justify-content:space-between;align-items:center;background-color:var(--calendar-color);color:#fff;padding:var(--calendar-padding);border-radius:3px;font-weight:700}.calendar-container .calendar-header .header-label{text-align:center}.calendar-container .calendar-header .prev{display:flex;justify-content:flex-start}.calendar-container .calendar-header .next{display:flex;justify-content:flex-end}.calendar-container .calendar-grid{display:grid;gap:5px 0;grid-template-columns:repeat(8,1fr);text-align:center}.calendar-container .days-header{margin-top:12px;font-weight:500;color:#757575;font-size:14px}.calendar-container .day-label{padding:8px 0}.calendar-container .days-grid{margin-top:8px}.calendar-container .calendar-cell{position:relative;padding:var(--calendar-cell-padding);font-size:14px;color:#333;cursor:pointer;display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.week-number-cell{color:var(--calendar-color);font-weight:700;cursor:default;pointer-events:none}.calendar-container .calendar-cell.filler{color:#666;background-color:#f6f6f6}.calendar-container .calendar-cell.filler.filler-start{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.filler.filler-end{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range:before{opacity:.5;inset:0;content:\" \";position:absolute;background:var(--calendar-color)}.calendar-container .calendar-cell.in-range.range-start:before{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range.range-end:before{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.disabled{color:#7e7e7e;opacity:.75;cursor:default}.calendar-container .cell-number{position:relative;border-radius:50%;width:var(--calendar-num-size);height:var(--calendar-num-size);display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.active .cell-number{background-color:var(--calendar-color);color:#fff}\n"], dependencies: [{ kind: "component", type: BtnComponent, selector: "btn", inputs: ["label", "tooltip", "icon", "disabled", "path", "type", "size"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
8527
8617
  }
8528
8618
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: CalendarComponent, decorators: [{
8529
8619
  type: Component,
8530
- args: [{ standalone: false, encapsulation: ViewEncapsulation.None, selector: "calendar", template: "<div class=\"calendar-container\">\r\n <div class=\"calendar-header\">\r\n <div class=\"prev\">\r\n @if (canGoPrev()) {\r\n <btn (click)=\"prevMonth()\" icon=\"chevron-left\"></btn>\r\n }\r\n </div>\r\n <div class=\"header-label\">\r\n {{ \"month.\" + months[currentMonth()] | translate }} {{ currentYear() }}\r\n </div>\r\n <div class=\"next\">\r\n @if (canGoNext()) {\r\n <btn (click)=\"nextMonth()\" icon=\"chevron-right\"></btn>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"calendar-grid days-header\">\r\n <div class=\"day-label\"></div>\r\n @for (day of daysOfWeek; track day) {\r\n <div class=\"day-label\">{{ \"day.\" + day | translate }}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"calendar-grid days-grid\" (mouseleave)=\"onGridMouseLeave()\">\r\n @for (cell of calendarCells(); track cell.id) {\r\n @if (cell.isWeekNum) {\r\n <div class=\"calendar-cell week-number-cell\">\r\n {{ cell.weekNumber }}\r\n </div>\r\n }\r\n\r\n @else {\r\n <div\r\n class=\"calendar-cell\"\r\n [class.filler]=\"!cell.isCurrentMonth\"\r\n [class.filler-start]=\"cell.isFillerStart\"\r\n [class.filler-end]=\"cell.isFillerEnd\"\r\n [class.disabled]=\"cell.isDisabled\"\r\n [class.in-range]=\"cell.isInDragRange\"\r\n [class.range-start]=\"cell.isRangeStart\"\r\n [class.range-end]=\"cell.isRangeEnd\"\r\n [class.active]=\"cell.isSelected\"\r\n (mousedown)=\"onMouseDown(cell, $event)\"\r\n (mouseenter)=\"onMouseEnter(cell)\"\r\n >\r\n <span class=\"cell-number\">{{ cell.date?.getDate() }}</span>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", styles: [".calendar-container{--calendar-color: var(--primary-color, var(--bs-primary, var(--mat-sys-primary, #666666)));--calendar-secondary-color: #686868;--calendar-padding: 4px;--calendar-cell-padding: 3px;--calendar-num-size: 30px;--calendar-num-radius: calc(var(--calendar-num-size) / 2 + var(--calendar-cell-padding));min-width:300px;margin-bottom:5px;border:1px solid #e0e0e0;padding:var(--calendar-padding);-webkit-user-select:none;user-select:none;background:#fff}.calendar-container *{box-sizing:border-box}.calendar-container .calendar-header{display:grid;grid-template-columns:50px 1fr 50px;justify-content:space-between;align-items:center;background-color:var(--calendar-color);color:#fff;padding:var(--calendar-padding);border-radius:3px;font-weight:700}.calendar-container .calendar-header .header-label{text-align:center}.calendar-container .calendar-header .prev{display:flex;justify-content:flex-start}.calendar-container .calendar-header .next{display:flex;justify-content:flex-end}.calendar-container .calendar-grid{display:grid;gap:5px 0;grid-template-columns:repeat(8,1fr);text-align:center}.calendar-container .days-header{margin-top:12px;font-weight:500;color:#757575;font-size:14px}.calendar-container .day-label{padding:8px 0}.calendar-container .days-grid{margin-top:8px}.calendar-container .calendar-cell{position:relative;padding:var(--calendar-cell-padding);font-size:14px;color:#333;cursor:pointer;display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.week-number-cell{color:var(--calendar-color);font-weight:700;cursor:default;pointer-events:none}.calendar-container .calendar-cell.filler{color:#666;background-color:#f6f6f6}.calendar-container .calendar-cell.filler.filler-start{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.filler.filler-end{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range:before{opacity:.5;inset:0;content:\" \";position:absolute;background:var(--calendar-color)}.calendar-container .calendar-cell.in-range.range-start:before{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range.range-end:before{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.disabled{color:#7e7e7e;opacity:.75;cursor:default}.calendar-container .cell-number{position:relative;border-radius:50%;width:var(--calendar-num-size);height:var(--calendar-num-size);display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.active .cell-number{background-color:var(--calendar-color);color:#fff}\n"] }]
8620
+ args: [{ standalone: false, encapsulation: ViewEncapsulation.None, selector: "calendar", template: "@let id = testId();\r\n<div class=\"calendar-container\">\r\n <div class=\"calendar-header\">\r\n <div class=\"prev\">\r\n @if (canGoPrev()) {\r\n <btn icon=\"chevron-left\"\r\n [attr.data-testid]=\"id + '-prev-month'\"\r\n (click)=\"prevMonth()\"></btn>\r\n }\r\n </div>\r\n <div class=\"header-label\">\r\n @let month = currentMonth();\r\n <span [attr.data-testid]=\"id + '-month'\"\r\n [attr.data-value]=\"month\">\r\n {{ \"month.\" + months[month] | translate }}\r\n </span>\r\n @let year = currentYear();\r\n <span [attr.data-testid]=\"id + '-year'\"\r\n [attr.data-value]=\"year\">\r\n {{ year }}\r\n </span>\r\n </div>\r\n <div class=\"next\">\r\n @if (canGoNext()) {\r\n <btn icon=\"chevron-right\"\r\n [attr.data-testid]=\"id + '-next-month'\"\r\n (click)=\"nextMonth()\"></btn>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"calendar-grid days-header\">\r\n <div class=\"day-label\"></div>\r\n @for (day of daysOfWeek; track day) {\r\n <div class=\"day-label\">{{ \"day.\" + day | translate }}</div>\r\n }\r\n </div>\r\n\r\n <div class=\"calendar-grid days-grid\" (mouseleave)=\"onGridMouseLeave()\">\r\n @for (cell of calendarCells(); track cell.id) {\r\n @if (cell.isWeekNum) {\r\n <div class=\"calendar-cell week-number-cell\"\r\n [attr.data-testid]=\"cell.id\">\r\n {{ cell.numValue }}\r\n </div>\r\n }\r\n @else {\r\n <div\r\n class=\"calendar-cell\"\r\n [class.filler]=\"!cell.isCurrentMonth\"\r\n [class.filler-start]=\"cell.isFillerStart\"\r\n [class.filler-end]=\"cell.isFillerEnd\"\r\n [class.disabled]=\"cell.isDisabled\"\r\n [class.in-range]=\"cell.isInDragRange\"\r\n [class.range-start]=\"cell.isRangeStart\"\r\n [class.range-end]=\"cell.isRangeEnd\"\r\n [class.active]=\"cell.isSelected\"\r\n [attr.data-testid]=\"cell.id\"\r\n (mousedown)=\"onMouseDown(cell, $event)\"\r\n (mouseenter)=\"onMouseEnter(cell)\"\r\n >\r\n <span class=\"cell-number\">{{ cell.numValue }}</span>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n", styles: [".calendar-container{--calendar-color: var(--primary-color, var(--bs-primary, var(--mat-sys-primary, #666666)));--calendar-secondary-color: #686868;--calendar-padding: 4px;--calendar-cell-padding: 3px;--calendar-num-size: 30px;--calendar-num-radius: calc(var(--calendar-num-size) / 2 + var(--calendar-cell-padding));min-width:300px;border:1px solid #e0e0e0;padding:var(--calendar-padding);-webkit-user-select:none;user-select:none;background:#fff}.calendar-container *{box-sizing:border-box}.calendar-container .calendar-header{display:grid;grid-template-columns:50px 1fr 50px;justify-content:space-between;align-items:center;background-color:var(--calendar-color);color:#fff;padding:var(--calendar-padding);border-radius:3px;font-weight:700}.calendar-container .calendar-header .header-label{text-align:center}.calendar-container .calendar-header .prev{display:flex;justify-content:flex-start}.calendar-container .calendar-header .next{display:flex;justify-content:flex-end}.calendar-container .calendar-grid{display:grid;gap:5px 0;grid-template-columns:repeat(8,1fr);text-align:center}.calendar-container .days-header{margin-top:12px;font-weight:500;color:#757575;font-size:14px}.calendar-container .day-label{padding:8px 0}.calendar-container .days-grid{margin-top:8px}.calendar-container .calendar-cell{position:relative;padding:var(--calendar-cell-padding);font-size:14px;color:#333;cursor:pointer;display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.week-number-cell{color:var(--calendar-color);font-weight:700;cursor:default;pointer-events:none}.calendar-container .calendar-cell.filler{color:#666;background-color:#f6f6f6}.calendar-container .calendar-cell.filler.filler-start{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.filler.filler-end{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range:before{opacity:.5;inset:0;content:\" \";position:absolute;background:var(--calendar-color)}.calendar-container .calendar-cell.in-range.range-start:before{border-top-left-radius:var(--calendar-num-radius);border-bottom-left-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.in-range.range-end:before{border-top-right-radius:var(--calendar-num-radius);border-bottom-right-radius:var(--calendar-num-radius)}.calendar-container .calendar-cell.disabled{color:#7e7e7e;opacity:.75;cursor:default}.calendar-container .cell-number{position:relative;border-radius:50%;width:var(--calendar-num-size);height:var(--calendar-num-size);display:flex;align-items:center;justify-content:center}.calendar-container .calendar-cell.active .cell-number{background-color:var(--calendar-color);color:#fff}\n"] }]
8531
8621
  }], ctorParameters: () => [], propDecorators: { onMouseUpGlobal: [{
8532
8622
  type: HostListener,
8533
8623
  args: ["window:mouseup", ["$event"]]
@@ -8935,6 +9025,89 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
8935
9025
  args: ["editor"]
8936
9026
  }] } });
8937
9027
 
9028
+ class DatePickerComponent extends CalendarInputs {
9029
+ constructor() {
9030
+ super(...arguments);
9031
+ this.autoPlacement = {
9032
+ autoAlignment: true,
9033
+ allowedPlacements: ["top-end", "bottom-end"]
9034
+ };
9035
+ this.inputValue = computed(() => {
9036
+ const value = this.validatedValue();
9037
+ return isDate(value) ? convertToDateFormat(value, "date") : String(this.value() || "");
9038
+ });
9039
+ this.pickerDropdown = viewChild("pickerDropdown");
9040
+ this.onChange = () => {
9041
+ };
9042
+ this.onTouched = () => {
9043
+ };
9044
+ }
9045
+ registerOnChange(fn) {
9046
+ this.onChange = fn;
9047
+ }
9048
+ registerOnTouched(fn) {
9049
+ this.onTouched = fn;
9050
+ }
9051
+ writeValue(value) {
9052
+ this.value.set(value);
9053
+ }
9054
+ setDisabledState(isDisabled) {
9055
+ this.disabled.set(isDisabled);
9056
+ }
9057
+ onPickerChange(date) {
9058
+ this.value.set(date);
9059
+ untracked(() => {
9060
+ this.pickerDropdown()?.hide();
9061
+ });
9062
+ this.onChange(date);
9063
+ this.onTouched();
9064
+ }
9065
+ onFocus() {
9066
+ untracked(() => {
9067
+ this.pickerDropdown()?.hide();
9068
+ });
9069
+ }
9070
+ onBlur(ev) {
9071
+ const target = ev.target;
9072
+ let date = parseValidDate(target.value);
9073
+ let value = date;
9074
+ untracked(() => {
9075
+ const strict = this.strict();
9076
+ const min = this.minDate();
9077
+ const max = this.maxDate();
9078
+ const disabledTimes = this.disabledTimestamps();
9079
+ const disabledDays = this.disabledDays();
9080
+ date = date
9081
+ ? findClosestValidDate(date, min, max, disabledTimes, disabledDays)
9082
+ : null;
9083
+ target.value = isDate(date)
9084
+ ? convertToDateFormat(date, "date")
9085
+ : (strict ? null : target.value);
9086
+ value = isDate(date)
9087
+ ? date
9088
+ : (strict ? null : target.value);
9089
+ });
9090
+ this.value.set(value);
9091
+ this.onChange(value);
9092
+ this.onTouched();
9093
+ }
9094
+ clear() {
9095
+ this.value.set(null);
9096
+ this.onChange(null);
9097
+ this.onTouched();
9098
+ }
9099
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: DatePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
9100
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.22", type: DatePickerComponent, isStandalone: false, selector: "date-picker", providers: [
9101
+ { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerComponent, multi: true }
9102
+ ], viewQueries: [{ propertyName: "pickerDropdown", first: true, predicate: ["pickerDropdown"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@let id = testId();\r\n<div class=\"date-picker\"\r\n drop-down\r\n [closeInside]=\"false\"\r\n [autoPlacement]=\"autoPlacement\"\r\n [ngClass]=\"{disabled: disabled()}\"\r\n #pickerDropdown=\"dropdown\">\r\n <input class=\"date-picker-input\"\r\n [attr.data-testid]=\"id\"\r\n [type]=\"strict() ? 'date' : 'text'\"\r\n [value]=\"inputValue()\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur($event)\"/>\r\n <div class=\"date-picker-buttons\">\r\n @if (value()) {\r\n <btn [attr.data-testid]=\"id + '-clear'\"\r\n type=\"transparent\"\r\n icon=\"close\" (click)=\"clear()\"></btn>\r\n }\r\n <btn [attr.data-testid]=\"id + '-open-picker'\"\r\n type=\"transparent\"\r\n icon=\"calendar-days\" dropdownToggle></btn>\r\n </div>\r\n <div *dropdownContent>\r\n <calendar [testId]=\"id + '-picker'\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [disabledDates]=\"disabledDates()\"\r\n [disabledDays]=\"disabledDays()\"\r\n [disabled]=\"disabled()\"\r\n [strict]=\"strict()\"\r\n [value]=\"value()\"\r\n (valueChange)=\"onPickerChange($event)\"></calendar>\r\n </div>\r\n</div>\r\n", styles: [".date-picker{--date-picker-border-size: var(--border-size, 1px);--date-picker-border-radius: var(--border-radius, 5px);--date-picker-bg-color: var(--bg-color, #ffffff);--date-picker-border-color: var(--border-color, #ced4da);--date-picker-highlight-color: var(--highlight-color, var(--primary-color, #888888));--date-picker-highlight-text-color: var(--highlight-text-color, #ffffff);--date-picker-text-color: var(--text-color, #151515);--date-picker-text-size: var(--text-size, 16px);--date-picker-padding-vertical: 6px;--date-picker-padding-horizontal: 12px;--date-picker-padding: var(--date-picker-padding-vertical) var(--date-picker-padding-horizontal);--date-picker-btn-padding: 12px;--date-picker-btn-gap: calc(var(--date-picker-btn-padding) / 2);--date-picker-btn-color: white;--date-picker-btn-valid-color: rgba(200, 255, 200, .7);--date-picker-btn-invalid-color: rgba(255, 200, 200, .7);position:relative;margin:5px 0;font-size:var(--date-picker-text-size);padding:var(--date-picker-padding);background:var(--date-picker-bg-color);color:var(--date-picker-text-color);border:var(--date-picker-border-size) solid var(--date-picker-border-color);border-radius:var(--date-picker-border-radius)}.date-picker *{box-sizing:border-box}.date-picker .date-picker-input{background:var(--date-picker-bg-color);font-size:var(--date-picker-text-size);outline:none;border:none;width:100%;-webkit-user-select:none;user-select:none;font-weight:400}.date-picker .date-picker-input::-webkit-calendar-picker-indicator{display:none!important;-webkit-appearance:none!important}.date-picker .date-picker-input::-webkit-clear-button{display:none!important;-webkit-appearance:none!important}.date-picker .date-picker-input::-webkit-inner-spin-button{display:none!important;-webkit-appearance:none!important}.date-picker .date-picker-buttons{display:flex;justify-content:flex-end;position:absolute;aspect-ratio:2/1;top:0;bottom:0;right:0}.date-picker.disabled{opacity:.75}.date-picker.disabled .chips-button{padding-right:var(--date-picker-btn-padding)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: DropdownDirective, selector: "[dd],[drop-down]", inputs: ["closeInside", "attachTo", "boundary", "placement", "autoPlacement", "mobileViewUnder", "fixed", "keyboardHandler", "isDisabled"], outputs: ["onShown", "onHidden", "onKeyboard"], exportAs: ["dropdown"] }, { kind: "directive", type: DropdownContentDirective, selector: "[dropdownContent]", exportAs: ["dropdown-content"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[dropdownToggle]", inputs: ["beforeOpen", "switch"], exportAs: ["dropdown-toggle"] }, { kind: "component", type: BtnComponent, selector: "btn", inputs: ["label", "tooltip", "icon", "disabled", "path", "type", "size"] }, { kind: "component", type: CalendarComponent, selector: "calendar" }], encapsulation: i0.ViewEncapsulation.None }); }
9103
+ }
9104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: DatePickerComponent, decorators: [{
9105
+ type: Component,
9106
+ args: [{ standalone: false, encapsulation: ViewEncapsulation.None, selector: "date-picker", providers: [
9107
+ { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerComponent, multi: true }
9108
+ ], template: "@let id = testId();\r\n<div class=\"date-picker\"\r\n drop-down\r\n [closeInside]=\"false\"\r\n [autoPlacement]=\"autoPlacement\"\r\n [ngClass]=\"{disabled: disabled()}\"\r\n #pickerDropdown=\"dropdown\">\r\n <input class=\"date-picker-input\"\r\n [attr.data-testid]=\"id\"\r\n [type]=\"strict() ? 'date' : 'text'\"\r\n [value]=\"inputValue()\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur($event)\"/>\r\n <div class=\"date-picker-buttons\">\r\n @if (value()) {\r\n <btn [attr.data-testid]=\"id + '-clear'\"\r\n type=\"transparent\"\r\n icon=\"close\" (click)=\"clear()\"></btn>\r\n }\r\n <btn [attr.data-testid]=\"id + '-open-picker'\"\r\n type=\"transparent\"\r\n icon=\"calendar-days\" dropdownToggle></btn>\r\n </div>\r\n <div *dropdownContent>\r\n <calendar [testId]=\"id + '-picker'\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [disabledDates]=\"disabledDates()\"\r\n [disabledDays]=\"disabledDays()\"\r\n [disabled]=\"disabled()\"\r\n [strict]=\"strict()\"\r\n [value]=\"value()\"\r\n (valueChange)=\"onPickerChange($event)\"></calendar>\r\n </div>\r\n</div>\r\n", styles: [".date-picker{--date-picker-border-size: var(--border-size, 1px);--date-picker-border-radius: var(--border-radius, 5px);--date-picker-bg-color: var(--bg-color, #ffffff);--date-picker-border-color: var(--border-color, #ced4da);--date-picker-highlight-color: var(--highlight-color, var(--primary-color, #888888));--date-picker-highlight-text-color: var(--highlight-text-color, #ffffff);--date-picker-text-color: var(--text-color, #151515);--date-picker-text-size: var(--text-size, 16px);--date-picker-padding-vertical: 6px;--date-picker-padding-horizontal: 12px;--date-picker-padding: var(--date-picker-padding-vertical) var(--date-picker-padding-horizontal);--date-picker-btn-padding: 12px;--date-picker-btn-gap: calc(var(--date-picker-btn-padding) / 2);--date-picker-btn-color: white;--date-picker-btn-valid-color: rgba(200, 255, 200, .7);--date-picker-btn-invalid-color: rgba(255, 200, 200, .7);position:relative;margin:5px 0;font-size:var(--date-picker-text-size);padding:var(--date-picker-padding);background:var(--date-picker-bg-color);color:var(--date-picker-text-color);border:var(--date-picker-border-size) solid var(--date-picker-border-color);border-radius:var(--date-picker-border-radius)}.date-picker *{box-sizing:border-box}.date-picker .date-picker-input{background:var(--date-picker-bg-color);font-size:var(--date-picker-text-size);outline:none;border:none;width:100%;-webkit-user-select:none;user-select:none;font-weight:400}.date-picker .date-picker-input::-webkit-calendar-picker-indicator{display:none!important;-webkit-appearance:none!important}.date-picker .date-picker-input::-webkit-clear-button{display:none!important;-webkit-appearance:none!important}.date-picker .date-picker-input::-webkit-inner-spin-button{display:none!important;-webkit-appearance:none!important}.date-picker .date-picker-buttons{display:flex;justify-content:flex-end;position:absolute;aspect-ratio:2/1;top:0;bottom:0;right:0}.date-picker.disabled{opacity:.75}.date-picker.disabled .chips-button{padding-right:var(--date-picker-btn-padding)}\n"] }]
9109
+ }] });
9110
+
8938
9111
  class DropListComponent {
8939
9112
  constructor(cdr) {
8940
9113
  this.cdr = cdr;
@@ -10816,6 +10989,7 @@ const components = [
10816
10989
  ChipsComponent,
10817
10990
  CloseBtnComponent,
10818
10991
  CodeEditorComponent,
10992
+ DatePickerComponent,
10819
10993
  DropListComponent,
10820
10994
  DropdownBoxComponent,
10821
10995
  DynamicTableComponent,
@@ -11058,8 +11232,8 @@ class NgxUtilsModule {
11058
11232
  };
11059
11233
  }
11060
11234
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: NgxUtilsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11061
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.22", ngImport: i0, type: NgxUtilsModule, declarations: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IncludesPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, SyncAsyncPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, BackgroundDirective, ComponentLoaderDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownContentDirective, DropdownToggleDirective, TabsItemDirective, TabsTemplateDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, BtnComponent, BtnDefaultComponent, CalendarComponent, ChipsComponent, CloseBtnComponent, CodeEditorComponent, DropListComponent, DropdownBoxComponent, DynamicTableComponent, DynamicTableCellComponent, FakeModuleComponent, PaginationMenuComponent, IconComponent, IconDefaultComponent, InteractiveCanvasComponent, InteractiveItemComponent, InteractiveCircleComponent, InteractiveRectComponent, TabsComponent, UnorderedListComponent, UploadComponent, WysiwygComponent], imports: [CommonModule,
11062
- FormsModule], exports: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IncludesPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, SyncAsyncPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, BackgroundDirective, ComponentLoaderDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownContentDirective, DropdownToggleDirective, TabsItemDirective, TabsTemplateDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, BtnComponent, BtnDefaultComponent, CalendarComponent, ChipsComponent, CloseBtnComponent, CodeEditorComponent, DropListComponent, DropdownBoxComponent, DynamicTableComponent, DynamicTableCellComponent, FakeModuleComponent, PaginationMenuComponent, IconComponent, IconDefaultComponent, InteractiveCanvasComponent, InteractiveItemComponent, InteractiveCircleComponent, InteractiveRectComponent, TabsComponent, UnorderedListComponent, UploadComponent, WysiwygComponent, FormsModule] }); }
11235
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.22", ngImport: i0, type: NgxUtilsModule, declarations: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IncludesPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, SyncAsyncPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, BackgroundDirective, ComponentLoaderDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownContentDirective, DropdownToggleDirective, TabsItemDirective, TabsTemplateDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, BtnComponent, BtnDefaultComponent, CalendarComponent, ChipsComponent, CloseBtnComponent, CodeEditorComponent, DatePickerComponent, DropListComponent, DropdownBoxComponent, DynamicTableComponent, DynamicTableCellComponent, FakeModuleComponent, PaginationMenuComponent, IconComponent, IconDefaultComponent, InteractiveCanvasComponent, InteractiveItemComponent, InteractiveCircleComponent, InteractiveRectComponent, TabsComponent, UnorderedListComponent, UploadComponent, WysiwygComponent], imports: [CommonModule,
11236
+ FormsModule], exports: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IncludesPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, SyncAsyncPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, BackgroundDirective, ComponentLoaderDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownContentDirective, DropdownToggleDirective, TabsItemDirective, TabsTemplateDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, BtnComponent, BtnDefaultComponent, CalendarComponent, ChipsComponent, CloseBtnComponent, CodeEditorComponent, DatePickerComponent, DropListComponent, DropdownBoxComponent, DynamicTableComponent, DynamicTableCellComponent, FakeModuleComponent, PaginationMenuComponent, IconComponent, IconDefaultComponent, InteractiveCanvasComponent, InteractiveItemComponent, InteractiveCircleComponent, InteractiveRectComponent, TabsComponent, UnorderedListComponent, UploadComponent, WysiwygComponent, FormsModule] }); }
11063
11237
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: NgxUtilsModule, providers: pipes, imports: [CommonModule,
11064
11238
  FormsModule, FormsModule] }); }
11065
11239
  }
@@ -11089,5 +11263,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
11089
11263
  * Generated bundle index. Do not edit.
11090
11264
  */
11091
11265
 
11092
- export { API_SERVICE, APP_BASE_URL, AUTH_SERVICE, AclService, AjaxRequestHandler, ApiService, ArrayUtils, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, AuthGuard, BASE_CONFIG, BUTTON_TYPE, BackgroundDirective, BaseDialogService, BaseHttpClient, BaseHttpService, BaseToasterService, BtnComponent, BtnDefaultComponent, CONFIG_SERVICE, CacheService, CalendarComponent, CanvasColor, CanvasUtils, ChipsComponent, ChunkPipe, Circle, CloseBtnComponent, CodeEditorComponent, ComponentLoaderDirective, ComponentLoaderService, ConfigService, DIALOG_SERVICE, DateUtils, DragDropEventPlugin, DropListComponent, DropdownBoxComponent, DropdownContentDirective, DropdownDirective, DropdownToggleDirective, DynamicTableCellComponent, DynamicTableComponent, DynamicTableTemplateDirective, EDITOR_TYPES, EPSILON, ERROR_HANDLER, EXPRESS_REQUEST, EntriesPipe, Enum, ErrorHandlerService, EventsService, ExclusionsRenderer, ExtraItemPropertiesPipe, FactoryDependencies, FakeModuleComponent, FileSystemEntry, FileUtils, FilterPipe, FindPipe, ForbiddenZone, FormatNumberPipe, FormatterService, GenericValue, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplateDirective, GlobalTemplatePipe, GlobalTemplateService, GroupByPipe, HitZoneRenderer, HrefSerializer, ICON_MAP, ICON_SERVICE, ICON_TYPE, IConfiguration, IconComponent, IconDefaultComponent, IconDirective, IconService, IncludesPipe, Initializer, InteractiveCanvasComponent, InteractiveCircleComponent, InteractiveItemComponent, InteractiveRectComponent, IsTypePipe, JoinPipe, KeysPipe, LANGUAGE_SERVICE, LanguageService, LoaderUtils, LocalHttpService, MapPipe, MathUtils, MaxPipe, MinPipe, NgxTemplateOutletDirective, NgxUtilsModule, OPTIONS_TOKEN, ObjectType, ObjectUtils, ObservableUtils, OpenApiService, Oval, PROMISE_SERVICE, PaginationDirective, PaginationItemContext, PaginationItemDirective, PaginationMenuComponent, Point, PopPipe, PromiseService, RESIZE_DELAY, RESIZE_STRATEGY, ROOT_ELEMENT, Rect, ReducePipe, ReflectUtils, RemapPipe, ReplacePipe, RequestBag, ResizeEventPlugin, ResourceIfContext, ResourceIfDirective, ReversePipe, RoundPipe, RulerCanvasRenderer, SCHEMA_SELECTOR, SCRIPT_PARAMS, STATIC_SCHEMAS, SafeHtmlPipe, ScrollEventPlugin, SetUtils, ShapeGroup, ShiftPipe, SocketClient, SocketService, SplitPipe, StateService, StaticAuthService, StaticLanguageService, StickyClassDirective, StickyDirective, StorageMode, StorageService, StringUtils, SyncAsyncPipe, TOASTER_SERVICE, TabsComponent, TabsItemDirective, TabsTemplateDirective, TimerUtils, TranslatePipe, TranslatedUrlSerializer, UniqueUtils, UniversalService, UnorderedListComponent, UnorderedListItemDirective, UnorderedListTemplateDirective, UploadComponent, ValuedPromise, ValuesPipe, WysiwygComponent, addDate, addPts, cachedFactory, cancelablePromise, checkTransitions, clamp, computedPrevious, createTypedProvider, cssStyles, cssVariables, diffEntities, distance, distanceSq, dividePts, dotProduct, ensurePoint, eqPts, getComponentDef, getCssVariables, getISOWeekNumber, getRoot, getType, impatientPromise, injectOptions, isBrowser, isEqual, isFunction, isObject, isPoint, isSameDay, isString, isStringWithValue, isZero, lengthOfPt, lengthSq, lerpPts, md5, multiplyPts, negatePt, normalizePt, normalizeRange, overflow, parseSelector, parseValidDate, perpendicular, promiseTimeout, provideEntryComponents, provideOptions, provideWithOptions, rotateDeg, rotateRad, scalePt, selectorMatchesList, stringify, subPts, svgToDataUri, switchClass, toDegrees, toMidnight, toRadians, toStringArray, tripleProduct };
11266
+ export { API_SERVICE, APP_BASE_URL, AUTH_SERVICE, AclService, AjaxRequestHandler, ApiService, ArrayUtils, AsyncMethodBase, AsyncMethodDirective, AsyncMethodTargetDirective, AuthGuard, BASE_CONFIG, BUTTON_TYPE, BackgroundDirective, BaseDialogService, BaseHttpClient, BaseHttpService, BaseToasterService, BtnComponent, BtnDefaultComponent, CONFIG_SERVICE, CacheService, CalendarComponent, CanvasColor, CanvasUtils, ChipsComponent, ChunkPipe, Circle, CloseBtnComponent, CodeEditorComponent, ComponentLoaderDirective, ComponentLoaderService, ConfigService, DIALOG_SERVICE, DatePickerComponent, DateUtils, DragDropEventPlugin, DropListComponent, DropdownBoxComponent, DropdownContentDirective, DropdownDirective, DropdownToggleDirective, DynamicTableCellComponent, DynamicTableComponent, DynamicTableTemplateDirective, EDITOR_TYPES, EPSILON, ERROR_HANDLER, EXPRESS_REQUEST, EntriesPipe, Enum, ErrorHandlerService, EventsService, ExclusionsRenderer, ExtraItemPropertiesPipe, FactoryDependencies, FakeModuleComponent, FileSystemEntry, FileUtils, FilterPipe, FindPipe, ForbiddenZone, FormatNumberPipe, FormatterService, GenericValue, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplateDirective, GlobalTemplatePipe, GlobalTemplateService, GroupByPipe, HitZoneRenderer, HrefSerializer, ICON_MAP, ICON_SERVICE, ICON_TYPE, IConfiguration, IconComponent, IconDefaultComponent, IconDirective, IconService, IncludesPipe, Initializer, InteractiveCanvasComponent, InteractiveCircleComponent, InteractiveItemComponent, InteractiveRectComponent, IsTypePipe, JoinPipe, KeysPipe, LANGUAGE_SERVICE, LanguageService, LoaderUtils, LocalHttpService, MapPipe, MathUtils, MaxPipe, MinPipe, NgxTemplateOutletDirective, NgxUtilsModule, OPTIONS_TOKEN, ObjectType, ObjectUtils, ObservableUtils, OpenApiService, Oval, PROMISE_SERVICE, PaginationDirective, PaginationItemContext, PaginationItemDirective, PaginationMenuComponent, Point, PopPipe, PromiseService, RESIZE_DELAY, RESIZE_STRATEGY, ROOT_ELEMENT, Rect, ReducePipe, ReflectUtils, RemapPipe, ReplacePipe, RequestBag, ResizeEventPlugin, ResourceIfContext, ResourceIfDirective, ReversePipe, RoundPipe, RulerCanvasRenderer, SCHEMA_SELECTOR, SCRIPT_PARAMS, STATIC_SCHEMAS, SafeHtmlPipe, ScrollEventPlugin, SetUtils, ShapeGroup, ShiftPipe, SocketClient, SocketService, SplitPipe, StateService, StaticAuthService, StaticLanguageService, StickyClassDirective, StickyDirective, StorageMode, StorageService, StringUtils, SyncAsyncPipe, TOASTER_SERVICE, TabsComponent, TabsItemDirective, TabsTemplateDirective, TimerUtils, TranslatePipe, TranslatedUrlSerializer, UniqueUtils, UniversalService, UnorderedListComponent, UnorderedListItemDirective, UnorderedListTemplateDirective, UploadComponent, ValuedPromise, ValuesPipe, WysiwygComponent, addDate, addPts, cachedFactory, cancelablePromise, checkTransitions, clamp, computedPrevious, convertToDateFormat, createTypedProvider, cssStyles, cssVariables, diffEntities, distance, distanceSq, dividePts, dotProduct, ensurePoint, eqPts, findClosestValidDate, getComponentDef, getCssVariables, getISOWeekNumber, getRoot, getType, impatientPromise, injectOptions, isBrowser, isDate, isDayOfWeekDisabled, isDefined, isEqual, isFunction, isObject, isPoint, isSameDay, isString, isStringWithValue, isZero, lengthOfPt, lengthSq, lerpPts, md5, multiplyPts, negatePt, normalizePt, normalizeRange, overflow, parseSelector, parseValidDate, perpendicular, promiseTimeout, provideEntryComponents, provideOptions, provideWithOptions, rotateDeg, rotateRad, scalePt, selectorMatchesList, stringify, subPts, svgToDataUri, switchClass, toDegrees, toMidnight, toRadians, toStringArray, tripleProduct };
11093
11267
  //# sourceMappingURL=stemy-ngx-utils.mjs.map