@stemy/ngx-utils 19.9.41 → 19.9.42

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);
@@ -8103,23 +8174,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
8103
8174
  type: Input
8104
8175
  }] } });
8105
8176
 
8106
- class CalendarComponent {
8177
+ class CalendarInputs {
8107
8178
  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
8179
  this.value = model(null);
8111
8180
  this.min = input(null);
8112
8181
  this.max = input(null);
8113
8182
  this.disabledDates = input([]);
8114
8183
  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;
8184
+ this.disabled = model(false);
8185
+ this.strict = input(true);
8186
+ this.testId = input("calendar", {
8187
+ transform: value => String(value || "calendar")
8188
+ });
8123
8189
  this.minDate = computed(() => parseValidDate(this.min()));
8124
8190
  this.maxDate = computed(() => parseValidDate(this.max()));
8125
8191
  this.disabledTimestamps = computed(() => {
@@ -8128,18 +8194,16 @@ class CalendarComponent {
8128
8194
  .filter((d) => d !== null)
8129
8195
  .map(d => toMidnight(d).getTime());
8130
8196
  });
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);
8197
+ this.parsedValue = computed(() => {
8198
+ const value = this.value();
8199
+ return isString(value) ? parseValidDate(value) : value;
8136
8200
  });
8137
8201
  this.validatedValue = computed(() => {
8138
- const val = this.value();
8202
+ const value = this.parsedValue();
8139
8203
  const min = this.minDate();
8140
8204
  const max = this.maxDate();
8141
8205
  const disabledTimes = this.disabledTimestamps();
8142
- const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8206
+ const disabledDays = this.disabledDays();
8143
8207
  const checkInvalid = (d) => {
8144
8208
  const midnight = toMidnight(d);
8145
8209
  if (min && midnight < toMidnight(min))
@@ -8148,19 +8212,55 @@ class CalendarComponent {
8148
8212
  return true;
8149
8213
  if (disabledTimes.includes(midnight.getTime()))
8150
8214
  return true;
8151
- return isDayOfWeekDisabled(midnight.getDay());
8215
+ return isDayOfWeekDisabled(midnight, disabledDays);
8152
8216
  };
8153
- if (Array.isArray(val)) {
8154
- return val.filter(d => d instanceof Date && !isNaN(d.getTime()) && !checkInvalid(d));
8217
+ if (Array.isArray(value)) {
8218
+ const filtered = value.filter(d => d instanceof Date && !isNaN(d.getTime()) && !checkInvalid(d));
8219
+ return (value.length !== filtered.length) ? filtered : value;
8155
8220
  }
8156
- else if (val instanceof Date && !isNaN(val.getTime())) {
8157
- if (checkInvalid(val)) {
8158
- return this.findClosestValidDate(val, min, max, disabledTimes, isDayOfWeekDisabled);
8221
+ else if (value instanceof Date && !isNaN(value.getTime())) {
8222
+ if (checkInvalid(value)) {
8223
+ return findClosestValidDate(value, min, max, disabledTimes, disabledDays);
8159
8224
  }
8160
- return val;
8225
+ return value;
8161
8226
  }
8162
8227
  return null;
8163
8228
  });
8229
+ effect(() => {
8230
+ const strict = this.strict();
8231
+ const value = this.value();
8232
+ const parsed = this.parsedValue();
8233
+ const valid = this.validatedValue();
8234
+ // Force select a valid value based on preferences
8235
+ if (valid !== parsed || (strict && valid !== value)) {
8236
+ this.value.set(valid);
8237
+ }
8238
+ });
8239
+ }
8240
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: CalendarInputs, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8241
+ 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 }); }
8242
+ }
8243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: CalendarInputs, decorators: [{
8244
+ type: Component,
8245
+ args: [{
8246
+ template: ``
8247
+ }]
8248
+ }], ctorParameters: () => [] });
8249
+
8250
+ class CalendarComponent extends CalendarInputs {
8251
+ constructor() {
8252
+ super();
8253
+ this.months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"];
8254
+ this.daysOfWeek = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"];
8255
+ this.currentMonth = signal(new Date().getMonth());
8256
+ this.currentYear = signal(new Date().getFullYear());
8257
+ this.isDragging = signal(false);
8258
+ this.dragStartCellDate = signal(null);
8259
+ this.dragCurrentCellDate = signal(null);
8260
+ this.initialSelectedStateBeforeDrag = signal(new Map());
8261
+ this.dragTargetState = signal(true);
8262
+ this.isInitialized = false;
8263
+ this.isMultiSelect = computed(() => Array.isArray(this.value()));
8164
8264
  // --- Computed Navigation States ---
8165
8265
  this.canGoPrev = computed(() => {
8166
8266
  const min = this.minDate();
@@ -8220,20 +8320,21 @@ class CalendarComponent {
8220
8320
  return false;
8221
8321
  });
8222
8322
  this.calendarCells = computed(() => {
8223
- const year = this.currentYear();
8224
- const month = this.currentMonth();
8225
- const firstDayOfMonth = new Date(year, month, 1);
8323
+ const curYear = this.currentYear();
8324
+ const curMonth = this.currentMonth();
8325
+ const firstDayOfMonth = new Date(curYear, curMonth, 1);
8226
8326
  let startOffset = firstDayOfMonth.getDay() - 1;
8227
8327
  if (startOffset === -1)
8228
8328
  startOffset = 6;
8229
8329
  if (startOffset === 0)
8230
8330
  startOffset = 7;
8231
- const gridStartDate = new Date(year, month, 1 - startOffset);
8331
+ const gridStartDate = new Date(curYear, curMonth, 1 - startOffset);
8232
8332
  const rawCells = [];
8333
+ const id = this.testId();
8233
8334
  const min = this.minDate();
8234
8335
  const max = this.maxDate();
8235
8336
  const disabledTimes = this.disabledTimestamps();
8236
- const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8337
+ const disabledDays = this.disabledDays();
8237
8338
  const currentValue = this.validatedValue();
8238
8339
  const startDrag = this.dragStartCellDate();
8239
8340
  const currentDrag = this.dragCurrentCellDate();
@@ -8250,14 +8351,14 @@ class CalendarComponent {
8250
8351
  dragMinT = Math.min(startT, endT);
8251
8352
  dragMaxT = Math.max(startT, endT);
8252
8353
  }
8253
- const prevMonthLastDayT = toMidnight(new Date(year, month, 0)).getTime();
8254
- const nextMonthFirstDayT = toMidnight(new Date(year, month + 1, 1)).getTime();
8354
+ const prevMonthLastDayT = toMidnight(new Date(curYear, curMonth, 0)).getTime();
8355
+ const nextMonthFirstDayT = toMidnight(new Date(curYear, curMonth + 1, 1)).getTime();
8255
8356
  for (let row = 0; row < 6; row++) {
8256
8357
  const firstDateOfRow = new Date(gridStartDate.getFullYear(), gridStartDate.getMonth(), gridStartDate.getDate() + (row * 7));
8257
8358
  rawCells.push({
8258
- id: `week-${row}-${firstDateOfRow.getTime()}`,
8359
+ id: `${id}-week-${row}`,
8259
8360
  date: null, isCurrentMonth: false, isDisabled: true, isSelected: false, isInDragRange: false,
8260
- isWeekNum: true, weekNumber: getISOWeekNumber(firstDateOfRow), isRangeStart: false, isRangeEnd: false,
8361
+ isWeekNum: true, numValue: getISOWeekNumber(firstDateOfRow), isRangeStart: false, isRangeEnd: false,
8261
8362
  isFillerStart: false, isFillerEnd: false
8262
8363
  });
8263
8364
  for (let col = 0; col < 7; col++) {
@@ -8271,7 +8372,7 @@ class CalendarComponent {
8271
8372
  isDisabled = true;
8272
8373
  if (disabledTimes.includes(timestamp))
8273
8374
  isDisabled = true;
8274
- if (isDayOfWeekDisabled(cellMidnight.getDay()))
8375
+ if (isDayOfWeekDisabled(cellMidnight, disabledDays))
8275
8376
  isDisabled = true;
8276
8377
  let isSelected = false;
8277
8378
  if (!multiSelectMode) {
@@ -8306,10 +8407,19 @@ class CalendarComponent {
8306
8407
  isRangeEnd = true;
8307
8408
  }
8308
8409
  }
8410
+ const date = cellDate.getDate();
8411
+ const month = cellDate.getMonth();
8309
8412
  rawCells.push({
8310
- id: String(timestamp), date: cellDate, isCurrentMonth: cellDate.getMonth() === month,
8311
- isDisabled, isSelected, isInDragRange, isWeekNum: false, weekNumber: null,
8312
- isRangeStart, isRangeEnd,
8413
+ id: `${id}-day-${month}-${date}`,
8414
+ date: cellDate,
8415
+ isCurrentMonth: month === curMonth,
8416
+ isDisabled,
8417
+ isSelected,
8418
+ isInDragRange,
8419
+ isWeekNum: false,
8420
+ numValue: date,
8421
+ isRangeStart,
8422
+ isRangeEnd,
8313
8423
  isFillerStart: timestamp === nextMonthFirstDayT,
8314
8424
  isFillerEnd: timestamp === prevMonthLastDayT
8315
8425
  });
@@ -8319,22 +8429,31 @@ class CalendarComponent {
8319
8429
  });
8320
8430
  effect(() => {
8321
8431
  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
- }
8432
+ untracked(() => {
8433
+ let referenceDate = null;
8434
+ // 1. If a valid selection exists, use the latest date as the reference view anchor
8435
+ if (Array.isArray(val) && val.length > 0) {
8436
+ referenceDate = new Date(Math.max(...val.map(d => d.getTime())));
8437
+ }
8438
+ else if (val instanceof Date) {
8439
+ referenceDate = val;
8440
+ }
8441
+ // 2. FALLBACK: If no selection exists, dynamically look up the first allowed calendar date
8442
+ if (!referenceDate || isNaN(referenceDate.getTime())) {
8443
+ const min = this.minDate();
8444
+ const max = this.maxDate();
8445
+ const disabledTimes = this.disabledTimestamps();
8446
+ const disabledDays = this.disabledDays();
8447
+ // Start searching from today
8448
+ referenceDate = findClosestValidDate(new Date(), min, max, disabledTimes, disabledDays);
8449
+ }
8450
+ // 3. Update the view tracking states cleanly
8451
+ if (referenceDate && !isNaN(referenceDate.getTime())) {
8452
+ this.currentMonth.set(referenceDate.getMonth());
8453
+ this.currentYear.set(referenceDate.getFullYear());
8454
+ this.isInitialized = true;
8455
+ }
8456
+ });
8338
8457
  });
8339
8458
  }
8340
8459
  // --- Dynamic Month Verification Engine ---
@@ -8342,7 +8461,7 @@ class CalendarComponent {
8342
8461
  const min = this.minDate();
8343
8462
  const max = this.maxDate();
8344
8463
  const disabledTimes = this.disabledTimestamps();
8345
- const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8464
+ const disabledDays = this.disabledDays();
8346
8465
  const loopDate = new Date(year, month, 1);
8347
8466
  const minMidnight = min ? toMidnight(min).getTime() : -Infinity;
8348
8467
  const maxMidnight = max ? toMidnight(max).getTime() : Infinity;
@@ -8351,7 +8470,7 @@ class CalendarComponent {
8351
8470
  const currentMidnight = toMidnight(loopDate);
8352
8471
  const currentT = currentMidnight.getTime();
8353
8472
  if (currentT >= minMidnight && currentT <= maxMidnight) {
8354
- if (!disabledTimes.includes(currentT) && !isDayOfWeekDisabled(currentMidnight.getDay())) {
8473
+ if (!disabledTimes.includes(currentT) && !isDayOfWeekDisabled(currentMidnight, disabledDays)) {
8355
8474
  return true; // Found a valid date slot
8356
8475
  }
8357
8476
  }
@@ -8423,7 +8542,8 @@ class CalendarComponent {
8423
8542
  return;
8424
8543
  this.dragCurrentCellDate.set(cell.date);
8425
8544
  }
8426
- onGridMouseLeave() { }
8545
+ onGridMouseLeave() {
8546
+ }
8427
8547
  onMouseUpGlobal() {
8428
8548
  if (!this.isDragging())
8429
8549
  return;
@@ -8436,8 +8556,6 @@ class CalendarComponent {
8436
8556
  const hoveredCell = cellCells.find(c => c.date && isSameDay(c.date, currentDrag));
8437
8557
  if (hoveredCell && !hoveredCell.isDisabled) {
8438
8558
  this.value.set(currentDrag);
8439
- this.currentMonth.set(currentDrag.getMonth());
8440
- this.currentYear.set(currentDrag.getFullYear());
8441
8559
  }
8442
8560
  }
8443
8561
  else {
@@ -8456,7 +8574,7 @@ class CalendarComponent {
8456
8574
  const min = this.minDate();
8457
8575
  const max = this.maxDate();
8458
8576
  const disabledTimes = this.disabledTimestamps();
8459
- const isDayOfWeekDisabled = this.isDayOfWeekDisabledFn();
8577
+ const disabledDays = this.disabledDays();
8460
8578
  const dynamicDateCursor = new Date(minT);
8461
8579
  const loopEndMidnight = new Date(maxT);
8462
8580
  while (dynamicDateCursor <= loopEndMidnight) {
@@ -8468,7 +8586,7 @@ class CalendarComponent {
8468
8586
  isDayRestricted = true;
8469
8587
  if (disabledTimes.includes(currentT))
8470
8588
  isDayRestricted = true;
8471
- if (isDayOfWeekDisabled(dynamicDateCursor.getDay()))
8589
+ if (isDayOfWeekDisabled(dynamicDateCursor, disabledDays))
8472
8590
  isDayRestricted = true;
8473
8591
  if (!isDayRestricted) {
8474
8592
  if (targetState) {
@@ -8481,8 +8599,6 @@ class CalendarComponent {
8481
8599
  dynamicDateCursor.setDate(dynamicDateCursor.getDate() + 1);
8482
8600
  }
8483
8601
  this.value.set(Array.from(updatedSelectionMap.values()));
8484
- this.currentMonth.set(currentDrag.getMonth());
8485
- this.currentYear.set(currentDrag.getFullYear());
8486
8602
  }
8487
8603
  }
8488
8604
  });
@@ -8491,43 +8607,12 @@ class CalendarComponent {
8491
8607
  this.dragCurrentCellDate.set(null);
8492
8608
  this.initialSelectedStateBeforeDrag.set(new Map());
8493
8609
  }
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
8610
  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 }); }
8611
+ 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;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 }); }
8527
8612
  }
8528
8613
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: CalendarComponent, decorators: [{
8529
8614
  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"] }]
8615
+ 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;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"] }]
8531
8616
  }], ctorParameters: () => [], propDecorators: { onMouseUpGlobal: [{
8532
8617
  type: HostListener,
8533
8618
  args: ["window:mouseup", ["$event"]]
@@ -8935,6 +9020,89 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
8935
9020
  args: ["editor"]
8936
9021
  }] } });
8937
9022
 
9023
+ class DatePickerComponent extends CalendarInputs {
9024
+ constructor() {
9025
+ super(...arguments);
9026
+ this.autoPlacement = {
9027
+ autoAlignment: true,
9028
+ allowedPlacements: ["top-end", "bottom-end"]
9029
+ };
9030
+ this.inputValue = computed(() => {
9031
+ const value = this.validatedValue();
9032
+ return isDate(value) ? convertToDateFormat(value, "date") : String(this.value() || "");
9033
+ });
9034
+ this.pickerDropdown = viewChild("pickerDropdown");
9035
+ this.onChange = () => {
9036
+ };
9037
+ this.onTouched = () => {
9038
+ };
9039
+ }
9040
+ registerOnChange(fn) {
9041
+ this.onChange = fn;
9042
+ }
9043
+ registerOnTouched(fn) {
9044
+ this.onTouched = fn;
9045
+ }
9046
+ writeValue(value) {
9047
+ this.value.set(value);
9048
+ }
9049
+ setDisabledState(isDisabled) {
9050
+ this.disabled.set(isDisabled);
9051
+ }
9052
+ onPickerChange(date) {
9053
+ this.value.set(date);
9054
+ untracked(() => {
9055
+ this.pickerDropdown()?.hide();
9056
+ });
9057
+ this.onChange(date);
9058
+ this.onTouched();
9059
+ }
9060
+ onFocus() {
9061
+ untracked(() => {
9062
+ this.pickerDropdown()?.hide();
9063
+ });
9064
+ }
9065
+ onBlur(ev) {
9066
+ const target = ev.target;
9067
+ let date = parseValidDate(target.value);
9068
+ let value = date;
9069
+ untracked(() => {
9070
+ const strict = this.strict();
9071
+ const min = this.minDate();
9072
+ const max = this.maxDate();
9073
+ const disabledTimes = this.disabledTimestamps();
9074
+ const disabledDays = this.disabledDays();
9075
+ date = date
9076
+ ? findClosestValidDate(date, min, max, disabledTimes, disabledDays)
9077
+ : null;
9078
+ target.value = isDate(date)
9079
+ ? convertToDateFormat(date, "date")
9080
+ : (strict ? null : target.value);
9081
+ value = isDate(date)
9082
+ ? date
9083
+ : (strict ? null : target.value);
9084
+ });
9085
+ this.value.set(value);
9086
+ this.onChange(value);
9087
+ this.onTouched();
9088
+ }
9089
+ clear() {
9090
+ this.value.set(null);
9091
+ this.onChange(null);
9092
+ this.onTouched();
9093
+ }
9094
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: DatePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
9095
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.22", type: DatePickerComponent, isStandalone: false, selector: "date-picker", providers: [
9096
+ { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerComponent, multi: true }
9097
+ ], 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 }); }
9098
+ }
9099
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: DatePickerComponent, decorators: [{
9100
+ type: Component,
9101
+ args: [{ standalone: false, encapsulation: ViewEncapsulation.None, selector: "date-picker", providers: [
9102
+ { provide: NG_VALUE_ACCESSOR, useExisting: DatePickerComponent, multi: true }
9103
+ ], 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"] }]
9104
+ }] });
9105
+
8938
9106
  class DropListComponent {
8939
9107
  constructor(cdr) {
8940
9108
  this.cdr = cdr;
@@ -10816,6 +10984,7 @@ const components = [
10816
10984
  ChipsComponent,
10817
10985
  CloseBtnComponent,
10818
10986
  CodeEditorComponent,
10987
+ DatePickerComponent,
10819
10988
  DropListComponent,
10820
10989
  DropdownBoxComponent,
10821
10990
  DynamicTableComponent,
@@ -11058,8 +11227,8 @@ class NgxUtilsModule {
11058
11227
  };
11059
11228
  }
11060
11229
  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] }); }
11230
+ 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,
11231
+ 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
11232
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.22", ngImport: i0, type: NgxUtilsModule, providers: pipes, imports: [CommonModule,
11064
11233
  FormsModule, FormsModule] }); }
11065
11234
  }
@@ -11089,5 +11258,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.22", ngImpo
11089
11258
  * Generated bundle index. Do not edit.
11090
11259
  */
11091
11260
 
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 };
11261
+ 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
11262
  //# sourceMappingURL=stemy-ngx-utils.mjs.map