@dcsl/flex-ui 0.0.26 → 0.0.28

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.
@@ -9,7 +9,9 @@ import calendarSystems from '@calidy/dayjs-calendarsystems';
9
9
  import PersianCalendarSystem from '@calidy/dayjs-calendarsystems/calendarSystems/PersianCalendarSystem';
10
10
  import HijriCalendarSystem from '@calidy/dayjs-calendarsystems/calendarSystems/HijriCalendarSystem';
11
11
  import customParseFormat from 'dayjs/plugin/customParseFormat';
12
- import { autoUpdate, computePosition, offset, flip, shift, hide } from '@floating-ui/dom';
12
+ import utc from 'dayjs/plugin/utc';
13
+ import { hijriToGregorian } from '@tabby_ai/hijri-converter';
14
+ import { autoUpdate, computePosition, offset, flip, shift } from '@floating-ui/dom';
13
15
 
14
16
  class FlexPanelComponent {
15
17
  resizeObserver;
@@ -667,6 +669,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
667
669
  type: Input
668
670
  }] } });
669
671
 
672
+ dayjs.extend(utc);
670
673
  // Extend Day.js with calendar systems support
671
674
  dayjs.extend(calendarSystems);
672
675
  dayjs.extend(customParseFormat);
@@ -674,72 +677,61 @@ dayjs.extend(customParseFormat);
674
677
  dayjs.registerCalendarSystem('persian', new PersianCalendarSystem());
675
678
  dayjs.registerCalendarSystem('islamic', new HijriCalendarSystem());
676
679
  class DateServiceService {
677
- log(date) {
678
- //var dj = dayjs(date);
679
- // // Convert current date to Persian calendar
680
- // const persianDate = dj.toCalendarSystem('persian');
681
- // console.log(persianDate.format('YYYY-MM-DD')); // Example: "1403-08-15"
682
- // // Create a date from Persian calendar
683
- // const nowruz = dayjs.fromCalendarSystem('persian', 1403, 1, 1);
684
- // console.log(nowruz.format('YYYY-MM-DD')); // "2024-03-20"
685
- // const hijriDate = dj.toCalendarSystem('islamic');
686
- // console.log(hijriDate.format('YYYY-MM-DD')); // e.g., "1446-03-15"
687
- //Step 1: User will input gregorian or islamic(hijri) date. for this we will use customParseFormat
688
- //in the control we will specify the format using binding.
689
- const d = dayjs("18-05-1447", "DD-MM-YYYY");
690
- //we are writing this to parse the date , month, year only.
691
- //then based on the calender type we will decide.
692
- //but by default system will take gregorian
693
- const customDate = dayjs.fromCalendarSystem('islamic', d.year(), d.month() + 1, d.date());
694
- //here we are assuming the control want to handle islamic calender date, we will take it dynmically.
695
- console.log("Prased Date in Gregorian String as per format ['DD-MM-YYYY']:", customDate.format('DD-MM-YYYY'));
696
- //here it will show gregorian calender, because even if we parse using islamic calender, it will convert the date
697
- //and keep it to gregorian
698
- //to show islamic date, we have to tell the dayjs to use islamic calender
699
- console.log("Hijri Date String: ", customDate.toCalendarSystem('islamic').format('YYYY-MM-DD'));
700
- // console.log(d.format("DD/MM/YYYY"));
701
- // console.log(d.date());
702
- // console.log(d.month() + 1);
703
- // console.log(d.year());
704
- // console.log(d.toDate());
705
- // const d2 = dayjs("09-11-2025", "DD-MM-YYYY");
706
- // console.log(d2.format("DD/MM/YYYY"));
707
- // console.log(d2.date());
708
- // console.log(d2.month() + 1);
709
- // console.log(d2.year());
710
- // console.log(d2.toDate());
711
- // // Create a Day.js instance from a specific calendar system
712
- // const hijriCustomDate = dayjs.fromCalendarSystem('islamic', 1447, 5, 18);
713
- // console.log(hijriCustomDate.toString());
714
- // // The result is a standard Day.js instance in that calendar system
715
- // console.log(hijriCustomDate.toCalendarSystem('islamic').format('YYYY-MM-DD')); // In Persian: "1403-01-01"
716
- // // Convert to Gregorian to see the equivalent date
717
- // const gregorian = hijriCustomDate.toCalendarSystem('gregory');
718
- // console.log(gregorian.format('YYYY-MM-DD')); // "2024-03-20"
680
+ constructor() {
719
681
  }
720
682
  parse(dateString, calendar, format) {
721
683
  //Step 1: User will input gregorian or islamic(hijri) date. for this we will use customParseFormat
722
684
  //in the control we will specify the format using binding.
723
- const d = dayjs(dateString, format);
724
- if (!d.isValid()) {
725
- console.log(dateString, calendar, format, "is invalid");
685
+ var parsedUtcDate = dayjs.utc(dateString, format, true);
686
+ console.log("Parsed string provided by User as Utc Iso: ", parsedUtcDate.toISOString());
687
+ if (!parsedUtcDate.isValid()) {
688
+ console.log("entered date string is invalid: ", dateString);
726
689
  return null;
727
690
  }
728
691
  //we are writing this to parse the date , month, year only.
729
692
  //then based on the calender type we will decide.
730
693
  //but by default system will take gregorian
731
- const customDate = dayjs.fromCalendarSystem(calendar, d.year(), d.month() + 1, d.date());
694
+ // month() function return 0-11 months but when it parse 1 then it makes it 0
695
+ const customDate = dayjs.fromCalendarSystem(calendar, parsedUtcDate.year(), parsedUtcDate.month() + 1, parsedUtcDate.date());
732
696
  //here we are assuming the control want to handle islamic calender date, we will take it dynmically.
733
697
  console.log("Prased Date in Gregorian String as per format ['DD-MM-YYYY']:", customDate.format('DD-MM-YYYY'));
698
+ // console.log("Prased Date in Gregorian String as per format ['DD-MM-YYYY']:", customDate.toISOString());
734
699
  //here it will show gregorian calender, because even if we parse using islamic calender, it will convert the date
735
700
  //and keep it to gregorian
736
701
  //to show islamic date, we have to tell the dayjs to use islamic calender
737
- console.log("Hijri Date String: ", customDate.toCalendarSystem('islamic').format('YYYY-MM-DD'));
738
- return customDate.toDate();
702
+ var customDateString = customDate.format('YYYY-MM-DD');
703
+ const d2 = dayjs.utc(customDateString);
704
+ // console.log("utc", d2.toISOString());
705
+ return d2.toDate();
706
+ }
707
+ parse2(dateString, calendar, format) {
708
+ const d = dayjs.utc(dateString, format, true);
709
+ if (!d.isValid())
710
+ return null;
711
+ let gYear = d.year();
712
+ let gMonth = d.month();
713
+ let gDay = d.date();
714
+ if (calendar === "islamic") {
715
+ const hijri = { hijriYear: d.year(), hijriMonth: d.month(), hijriDay: d.date() };
716
+ const greg = hijriToGregorian({
717
+ year: hijri.hijriYear,
718
+ month: hijri.hijriMonth,
719
+ day: hijri.hijriDay
720
+ });
721
+ gYear = greg.year;
722
+ gMonth = greg.month;
723
+ gDay = greg.day;
724
+ }
725
+ // construct a pure UTC date
726
+ const fixed = dayjs.utc(new Date(gYear, gMonth, gDay));
727
+ return fixed.toDate();
739
728
  }
740
729
  format(date, calendar, format) {
741
- const d = dayjs(date);
742
- return d.toCalendarSystem(calendar).format(format);
730
+ // const d = dayjs.utc(date.getFullYear(), date.getMonth(), date.getDate() as number);
731
+ var c = dayjs.fromCalendarSystem("gregory", date.getFullYear(), date.getMonth() + 1, date.getDate());
732
+ if (calendar == "islamic")
733
+ c = c.add(1, "day");
734
+ return c.toCalendarSystem(calendar).format(format);
743
735
  }
744
736
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DateServiceService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
745
737
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: DateServiceService, providedIn: 'root' });
@@ -749,7 +741,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
749
741
  args: [{
750
742
  providedIn: 'root'
751
743
  }]
752
- }] });
744
+ }], ctorParameters: () => [] });
753
745
 
754
746
  class HijriDatepickerComponent {
755
747
  dateService;
@@ -783,7 +775,7 @@ class HijriDatepickerComponent {
783
775
  }
784
776
  onDateSelectedFromCalender(e) {
785
777
  // console.log("onDateSelectedFromCalender: ", e);
786
- this.dateService.log(e);
778
+ // this.dateService.log(e);
787
779
  //var time = this.selectedDate ?? new Date();
788
780
  // e.setHours(time.getHours());
789
781
  // e.setMinutes(time.getMinutes());
@@ -1319,38 +1311,36 @@ class FloatingUiService {
1319
1311
  this.appRef = appRef;
1320
1312
  this.injector = injector;
1321
1313
  }
1322
- /**
1323
- * Opens a floating Angular component near a reference element.
1324
- * Ensures only one popup is visible at a time.
1325
- */
1326
- async open(reference, component, options) {
1327
- // 🔹 If one is already open, close it first
1314
+ open(reference, component, options) {
1315
+ // 1️⃣ If same reference clicked again toggle close
1316
+ if (this.activePopup && this.activePopup.reference === reference) {
1317
+ this.activePopup.cleanup(null);
1318
+ return Promise.resolve(null);
1319
+ }
1320
+ // 2️⃣ If another popup is open → close it first
1328
1321
  if (this.activePopup) {
1329
1322
  this.activePopup.cleanup(null);
1330
- this.activePopup.resolve(null);
1331
- this.activePopup = undefined;
1332
1323
  }
1324
+ // 3️⃣ Create new popup
1333
1325
  return new Promise((resolve) => {
1334
- // 1️⃣ Create component
1335
1326
  const compRef = createComponent(component, {
1336
1327
  environmentInjector: this.injector,
1337
1328
  });
1338
- // 2️⃣ Pass close() callback
1329
+ // Add close() callback to component
1339
1330
  compRef.instance.close = (result) => cleanup(result ?? null);
1340
- // 3️⃣ Apply input bindings
1331
+ // Apply @Input() bindings
1341
1332
  if (options?.inputs) {
1342
1333
  Object.entries(options.inputs).forEach(([k, v]) => {
1343
1334
  compRef.instance[k] = v;
1344
1335
  });
1345
1336
  }
1346
- // 4️⃣ Attach to DOM
1347
1337
  document.body.appendChild(compRef.location.nativeElement);
1348
1338
  this.appRef.attachView(compRef.hostView);
1349
- // 5️⃣ Floating-UI position logic
1339
+ // Position via Floating-UI
1350
1340
  const cleanupAutoUpdate = autoUpdate(reference, compRef.location.nativeElement, () => {
1351
1341
  computePosition(reference, compRef.location.nativeElement, {
1352
- placement: 'bottom-start',
1353
- middleware: [offset(2), flip(), shift()],
1342
+ placement: options?.placement ?? 'bottom-start',
1343
+ middleware: [offset(6), flip(), shift()],
1354
1344
  }).then(({ x, y }) => {
1355
1345
  Object.assign(compRef.location.nativeElement.style, {
1356
1346
  position: 'absolute',
@@ -1360,7 +1350,7 @@ class FloatingUiService {
1360
1350
  });
1361
1351
  });
1362
1352
  });
1363
- // 6️⃣ Close on outside click / ESC
1353
+ // Outside click & ESC handlers
1364
1354
  const handleClickOutside = (e) => {
1365
1355
  const el = compRef.location.nativeElement;
1366
1356
  const target = e.target;
@@ -1378,29 +1368,26 @@ class FloatingUiService {
1378
1368
  if (options?.closeOnEscape !== false) {
1379
1369
  document.addEventListener('keydown', handleEscape);
1380
1370
  }
1381
- // 7️⃣ Cleanup logic
1371
+ // The one true cleanup — handles all detach, resolve, destroy safely
1382
1372
  const cleanup = (result) => {
1373
+ // Guard: if already cleaned up, skip
1374
+ if (!this.activePopup || this.activePopup.compRef !== compRef)
1375
+ return;
1383
1376
  cleanupAutoUpdate();
1384
1377
  document.removeEventListener('mousedown', handleClickOutside);
1385
1378
  document.removeEventListener('keydown', handleEscape);
1386
1379
  this.appRef.detachView(compRef.hostView);
1387
1380
  compRef.destroy();
1388
- // release singleton lock
1389
1381
  this.activePopup = undefined;
1390
- resolve(result);
1382
+ resolve(result ?? null);
1391
1383
  };
1392
- // 🔸 Track current popup
1393
- this.activePopup = { compRef, cleanup, resolve };
1384
+ // track active popup
1385
+ this.activePopup = { compRef, cleanup, reference };
1394
1386
  });
1395
1387
  }
1396
- /**
1397
- * Closes the currently active floating popup, if any.
1398
- */
1399
1388
  closeActive(result) {
1400
1389
  if (this.activePopup) {
1401
- this.activePopup.cleanup(null);
1402
- this.activePopup.resolve(result ?? null);
1403
- this.activePopup = undefined;
1390
+ this.activePopup.cleanup(result ?? null);
1404
1391
  }
1405
1392
  }
1406
1393
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FloatingUiService, deps: [{ token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable });
@@ -1463,7 +1450,7 @@ class FlexDualDatepickerComponent {
1463
1450
  this.inputDate = this.formatDate(e);
1464
1451
  this.updateDate(e);
1465
1452
  this.isOpen = false;
1466
- this.updateCalendar();
1453
+ // this.updateCalendar();
1467
1454
  }
1468
1455
  /** Triggered on blur OR Enter key */
1469
1456
  onManualDateEntered() {
@@ -1516,7 +1503,7 @@ class FlexDualDatepickerComponent {
1516
1503
  return;
1517
1504
  }
1518
1505
  this.isOpen = false;
1519
- this.updateCalendar();
1506
+ // this.updateCalendar();
1520
1507
  }
1521
1508
  async openCalendar() {
1522
1509
  const button = this.calendarButton?.nativeElement;
@@ -1533,35 +1520,12 @@ class FlexDualDatepickerComponent {
1533
1520
  }
1534
1521
  }
1535
1522
  isOpen = false;
1536
- toggleMenu() {
1537
- this.isOpen = !this.isOpen;
1538
- if (this.isMobile)
1539
- return;
1540
- this.updateCalendar();
1541
- }
1542
- updateCalendar() {
1543
- const button = this.calendarButton?.nativeElement;
1544
- const calendar = this.calendarDropdown?.nativeElement;
1545
- computePosition(button, calendar, {
1546
- placement: "bottom",
1547
- strategy: 'fixed',
1548
- middleware: [flip(), shift(), hide()]
1549
- }).then(({ x, y }) => {
1550
- Object.assign(calendar.style, {
1551
- left: `${x}px`,
1552
- top: `${y}px`,
1553
- visibility: !this.isOpen
1554
- ? 'hidden'
1555
- : 'visible',
1556
- });
1557
- });
1558
- }
1559
1523
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexDualDatepickerComponent, deps: [{ token: DateServiceService }, { token: DeviceDetectorService }, { token: FloatingUiService }], target: i0.ɵɵFactoryTarget.Component });
1560
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: FlexDualDatepickerComponent, isStandalone: true, selector: "flex-dual-datepicker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: false, transformFunction: null }, cssClass: { classPropertyName: "cssClass", publicName: "cssClass", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, calendarSwitchPosition: { classPropertyName: "calendarSwitchPosition", publicName: "calendarSwitchPosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "calendarButton", first: true, predicate: ["calendarButton"], descendants: true }, { propertyName: "calendarDropdown", first: true, predicate: ["calendarDropdown"], descendants: true }, { propertyName: "inputDiv", first: true, predicate: ["inputDiv"], descendants: true }, { propertyName: "modalDiv", first: true, predicate: ["modalDiv"], descendants: true }], ngImport: i0, template: "@if(calendarSwitchPosition() == 'title'){\r\n<div class=\"d-flex align-items-center gap-1\">\r\n <label>{{ title() }}</label>\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" style=\"cursor: pointer; padding-bottom: 1px; padding-top: 1px;\"\r\n (click)=\"switchCalendar()\">\r\n @if(calendar == 'gregory') {G}\r\n @else{H}\r\n </button>\r\n</div>\r\n\r\n}\r\n<div class=\"input-group flex-nowrap\" #inputDiv>\r\n @if(calendarSwitchPosition() == 'inline'){\r\n <span class=\"input-group-text\" style=\"cursor: pointer;\" (click)=\"switchCalendar()\"> @if(calendar == 'gregory') {G}\r\n @else{H}</span>\r\n }\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n\r\n\r\n <!-- <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toggleCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button> -->\r\n <button #calendarButton class=\"btn btn-outline-secondary\" (click)=\"openCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n\r\n</div>\r\n\r\n\r\n@if(isMobile && isOpen){\r\n<div class=\"modal modal-backdrop\" tabindex=\"-1\" role=\"dialog\" style=\"display: block;\" #modalDiv>\r\n <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"btn btn-danger close ms-auto btn-sm\" (click)=\"isOpen = false\">\r\n <i class=\"bi bi-x\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n\r\n\r\n<div #calendarDropdown class=\"calendar-dropdown\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n</div>", styles: [".dropdown-menu{--bs-dropdown-padding-y: 0}.card-body{padding:0!important}.dropdown-panel{position:fixed;border-radius:4px;z-index:9999}.calendar-dropdown{width:max-content;position:absolute;top:0;left:0;visibility:hidden;z-index:\"1080\",}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FlexDualCalendarComponent, selector: "flex-dual-calendar", inputs: ["value", "minDate", "maxDate", "monthLang", "startMode"], outputs: ["valueChange"] }] });
1524
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.1", type: FlexDualDatepickerComponent, isStandalone: true, selector: "flex-dual-datepicker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: false, transformFunction: null }, cssClass: { classPropertyName: "cssClass", publicName: "cssClass", isSignal: true, isRequired: false, transformFunction: null }, format: { classPropertyName: "format", publicName: "format", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, calendarSwitchPosition: { classPropertyName: "calendarSwitchPosition", publicName: "calendarSwitchPosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "calendarButton", first: true, predicate: ["calendarButton"], descendants: true }, { propertyName: "calendarDropdown", first: true, predicate: ["calendarDropdown"], descendants: true }, { propertyName: "inputDiv", first: true, predicate: ["inputDiv"], descendants: true }, { propertyName: "modalDiv", first: true, predicate: ["modalDiv"], descendants: true }], ngImport: i0, template: "@if(calendarSwitchPosition() == 'title'){\r\n<div class=\"d-flex align-items-center gap-1\">\r\n <label>{{ title() }}</label>\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" style=\"cursor: pointer; padding-bottom: 1px; padding-top: 1px;\"\r\n (click)=\"switchCalendar()\">\r\n @if(calendar == 'gregory') {G}\r\n @else{H}\r\n </button>\r\n</div>\r\n\r\n}\r\n<div class=\"input-group flex-nowrap\" #inputDiv>\r\n @if(calendarSwitchPosition() == 'inline'){\r\n <span class=\"input-group-text\" style=\"cursor: pointer;\" (click)=\"switchCalendar()\"> @if(calendar == 'gregory') {G}\r\n @else{H}</span>\r\n }\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n\r\n\r\n <!-- <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toggleCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button> -->\r\n <button #calendarButton class=\"btn btn-outline-secondary\" (click)=\"openCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n\r\n</div>\r\n\r\n<!-- \r\n@if(isMobile && isOpen){\r\n<div class=\"modal modal-backdrop\" tabindex=\"-1\" role=\"dialog\" style=\"display: block;\" #modalDiv>\r\n <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"btn btn-danger close ms-auto btn-sm\" (click)=\"isOpen = false\">\r\n <i class=\"bi bi-x\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n} -->\r\n\r\n\r\n<!-- <div #calendarDropdown class=\"calendar-dropdown\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n</div> -->", styles: [".dropdown-menu{--bs-dropdown-padding-y: 0}.card-body{padding:0!important}.dropdown-panel{position:fixed;border-radius:4px;z-index:9999}.calendar-dropdown{width:max-content;position:absolute;top:0;left:0;visibility:hidden;z-index:\"1080\",}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
1561
1525
  }
1562
1526
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImport: i0, type: FlexDualDatepickerComponent, decorators: [{
1563
1527
  type: Component,
1564
- args: [{ selector: 'flex-dual-datepicker', imports: [CommonModule, FormsModule, FlexDualCalendarComponent], template: "@if(calendarSwitchPosition() == 'title'){\r\n<div class=\"d-flex align-items-center gap-1\">\r\n <label>{{ title() }}</label>\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" style=\"cursor: pointer; padding-bottom: 1px; padding-top: 1px;\"\r\n (click)=\"switchCalendar()\">\r\n @if(calendar == 'gregory') {G}\r\n @else{H}\r\n </button>\r\n</div>\r\n\r\n}\r\n<div class=\"input-group flex-nowrap\" #inputDiv>\r\n @if(calendarSwitchPosition() == 'inline'){\r\n <span class=\"input-group-text\" style=\"cursor: pointer;\" (click)=\"switchCalendar()\"> @if(calendar == 'gregory') {G}\r\n @else{H}</span>\r\n }\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n\r\n\r\n <!-- <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toggleCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button> -->\r\n <button #calendarButton class=\"btn btn-outline-secondary\" (click)=\"openCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n\r\n</div>\r\n\r\n\r\n@if(isMobile && isOpen){\r\n<div class=\"modal modal-backdrop\" tabindex=\"-1\" role=\"dialog\" style=\"display: block;\" #modalDiv>\r\n <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"btn btn-danger close ms-auto btn-sm\" (click)=\"isOpen = false\">\r\n <i class=\"bi bi-x\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n\r\n\r\n<div #calendarDropdown class=\"calendar-dropdown\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n</div>", styles: [".dropdown-menu{--bs-dropdown-padding-y: 0}.card-body{padding:0!important}.dropdown-panel{position:fixed;border-radius:4px;z-index:9999}.calendar-dropdown{width:max-content;position:absolute;top:0;left:0;visibility:hidden;z-index:\"1080\",}\n"] }]
1528
+ args: [{ selector: 'flex-dual-datepicker', imports: [CommonModule, FormsModule], template: "@if(calendarSwitchPosition() == 'title'){\r\n<div class=\"d-flex align-items-center gap-1\">\r\n <label>{{ title() }}</label>\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" style=\"cursor: pointer; padding-bottom: 1px; padding-top: 1px;\"\r\n (click)=\"switchCalendar()\">\r\n @if(calendar == 'gregory') {G}\r\n @else{H}\r\n </button>\r\n</div>\r\n\r\n}\r\n<div class=\"input-group flex-nowrap\" #inputDiv>\r\n @if(calendarSwitchPosition() == 'inline'){\r\n <span class=\"input-group-text\" style=\"cursor: pointer;\" (click)=\"switchCalendar()\"> @if(calendar == 'gregory') {G}\r\n @else{H}</span>\r\n }\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n\r\n\r\n <!-- <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toggleCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button> -->\r\n <button #calendarButton class=\"btn btn-outline-secondary\" (click)=\"openCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n\r\n</div>\r\n\r\n<!-- \r\n@if(isMobile && isOpen){\r\n<div class=\"modal modal-backdrop\" tabindex=\"-1\" role=\"dialog\" style=\"display: block;\" #modalDiv>\r\n <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"btn btn-danger close ms-auto btn-sm\" (click)=\"isOpen = false\">\r\n <i class=\"bi bi-x\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n} -->\r\n\r\n\r\n<!-- <div #calendarDropdown class=\"calendar-dropdown\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n</div> -->", styles: [".dropdown-menu{--bs-dropdown-padding-y: 0}.card-body{padding:0!important}.dropdown-panel{position:fixed;border-radius:4px;z-index:9999}.calendar-dropdown{width:max-content;position:absolute;top:0;left:0;visibility:hidden;z-index:\"1080\",}\n"] }]
1565
1529
  }], ctorParameters: () => [{ type: DateServiceService }, { type: DeviceDetectorService }, { type: FloatingUiService }], propDecorators: { calendarButton: [{
1566
1530
  type: ViewChild,
1567
1531
  args: ['calendarButton']
@@ -1 +1 @@
1
- {"version":3,"file":"dcsl-flex-ui.mjs","sources":["../../../projects/flex-ui-controls/src/lib/flex-panel/flex-panel.component.ts","../../../projects/flex-ui-controls/src/lib/flex-panel/flex-panel.component.html","../../../projects/flex-ui-controls/src/lib/flex-pagination/flex-pagination.component.ts","../../../projects/flex-ui-controls/src/lib/flex-pagination/flex-pagination.component.html","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid-column.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid-columns.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid.component.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid.component.html","../../../projects/flex-ui-controls/src/lib/flex-combo-datepicker/flex-combo-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-combo-datepicker/flex-combo-datepicker.component.html","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-calendar/hijri-calendar.component.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-calendar/hijri-calendar.component.html","../../../projects/flex-ui-controls/src/lib/services/date-service.service.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.component.html","../../../projects/flex-ui-controls/src/lib/flex-container/flex-container.component.ts","../../../projects/flex-ui-controls/src/lib/flex-container/flex-container.component.html","../../../projects/flex-ui-controls/src/lib/flex-dual-calendar/flex-dual-calendar.component.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-calendar/flex-dual-calendar.component.html","../../../projects/flex-ui-controls/src/lib/services/device-detector.service.ts","../../../projects/flex-ui-controls/src/lib/services/floating-ui.service.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-datepicker/flex-dual-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-datepicker/flex-dual-datepicker.component.html","../../../projects/flex-ui-controls/src/public-api.ts","../../../projects/flex-ui-controls/src/dcsl-flex-ui.ts"],"sourcesContent":["import { Component, ElementRef, HostListener, inject, Renderer2, ViewChild } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'flex-panel',\r\n imports: [],\r\n templateUrl: './flex-panel.component.html',\r\n styleUrl: './flex-panel.component.css'\r\n})\r\n\r\nexport class FlexPanelComponent {\r\n private resizeObserver?: ResizeObserver;\r\n private mutationObserver?: MutationObserver;\r\n\r\n @ViewChild(\"abc\") comp?: ElementRef<HTMLDivElement>;\r\n\r\n private renderer = inject(Renderer2);\r\n\r\n constructor() { }\r\n\r\n ngAfterViewInit() {\r\n this.adjustHeight();\r\n\r\n // ✅ Recalculate on window resize\r\n if ('ResizeObserver' in window) {\r\n this.resizeObserver = new ResizeObserver(() => this.adjustHeight());\r\n this.resizeObserver.observe(document.body);\r\n }\r\n\r\n // ✅ Also observe DOM changes that may shift this element\r\n this.mutationObserver = new MutationObserver(() => this.adjustHeight());\r\n this.mutationObserver.observe(document.body, {\r\n attributes: true,\r\n childList: true,\r\n subtree: true\r\n });\r\n\r\n\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize() {\r\n this.adjustHeight();\r\n }\r\n\r\n private adjustHeight() {\r\n // const host: HTMLElement = this.el.nativeElement;\r\n const top = this.comp!.nativeElement.getBoundingClientRect().top;\r\n const viewportHeight = window.innerHeight;\r\n const newHeight = viewportHeight - top;\r\n\r\n this.renderer.setStyle(this.comp?.nativeElement, 'height', `${newHeight}px`);\r\n this.renderer.setStyle(this.comp?.nativeElement, 'width', '100%');\r\n\r\n // console.log(host);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n }\r\n if (this.mutationObserver) {\r\n this.mutationObserver.disconnect();\r\n }\r\n }\r\n}\r\n","<div class=\"stretch-container\" #abc>\r\n <ng-content></ng-content>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, HostListener, OnInit, input, effect } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexPaging } from './flex_page';\r\n\r\n@Component({\r\n selector: 'flex-pagination',\r\n templateUrl: './flex-pagination.component.html',\r\n styleUrls: ['./flex-pagination.component.css'],\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class FlexPaginationComponent implements OnInit {\r\n rowCount = input<number>(0);\r\n\r\n protected _totalItems: number = 0;\r\n pageSize = 50;\r\n currentPage = 1;\r\n @Output() pageChange = new EventEmitter<FlexPaging>();\r\n\r\n maxPagesToShow = 5;\r\n pageSizes = [50, 100, 200, 500];\r\n\r\n constructor() {\r\n effect(() => {\r\n this.currentPage = 1;\r\n this._totalItems = this.rowCount();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.updateMaxPages();\r\n }\r\n\r\n // Update maxPagesToShow based on screen size\r\n @HostListener('window:resize')\r\n updateMaxPages() {\r\n const width = window.innerWidth;\r\n if (width < 576) {\r\n this.maxPagesToShow = 1; // only current page\r\n } else if (width < 768) {\r\n this.maxPagesToShow = 3;\r\n } else {\r\n this.maxPagesToShow = 5;\r\n }\r\n }\r\n\r\n\r\n get totalPages(): number {\r\n return Math.ceil(this._totalItems / this.pageSize) || 1;\r\n }\r\n\r\n get pages(): (number | string)[] {\r\n const total = this.totalPages;\r\n const max = this.maxPagesToShow;\r\n\r\n if (max === 1) {\r\n return [this.currentPage]; // mobile: only current page\r\n }\r\n\r\n const pages: (number | string)[] = [];\r\n\r\n if (total <= max) {\r\n for (let i = 1; i <= total; i++) pages.push(i);\r\n } else {\r\n let start = Math.max(this.currentPage - Math.floor(max / 2), 1);\r\n let end = start + max - 1;\r\n\r\n if (end > total) {\r\n end = total;\r\n start = end - max + 1;\r\n }\r\n\r\n if (start > 1) pages.push(1, '...');\r\n for (let i = start; i <= end; i++) pages.push(i);\r\n if (end < total) pages.push('...', total);\r\n }\r\n\r\n return pages;\r\n }\r\n\r\n changePage(page: number | string) {\r\n if (typeof page !== 'number') return;\r\n if (page < 1) page = 1;\r\n if (page > this.totalPages) page = this.totalPages;\r\n if (page === this.currentPage) return;\r\n\r\n this.currentPage = page;\r\n this.pageChange.emit({\r\n skip: (this.currentPage - 1) * this.pageSize,\r\n take: this.pageSize,\r\n pageSize: this.pageSize,\r\n currentPage: this.currentPage,\r\n });\r\n }\r\n\r\n onPageSizeChange(pageSize: any) {\r\n var value = Number(pageSize.target.value);\r\n if (isNaN(value) || value <= 0) return;\r\n\r\n this.pageSize = value;\r\n this.pageChange.emit({\r\n skip: (this.currentPage - 1) * this.pageSize,\r\n take: this.pageSize,\r\n pageSize: this.pageSize,\r\n currentPage: this.currentPage\r\n });\r\n }\r\n\r\n firstPage() { this.changePage(1); }\r\n lastPage() { this.changePage(this.totalPages); }\r\n prevPage() { this.changePage(this.currentPage - 1); }\r\n nextPage() { this.changePage(this.currentPage + 1); }\r\n}\r\n","<div class=\"d-flex justify-content-start align-items-center\">\r\n <!-- Pagination -->\r\n <div class=\"overflow-auto\">\r\n <ul class=\"pagination justify-content-center flex-nowrap mb-0\">\r\n <!-- First / Prev (hide First on xs) -->\r\n <li class=\"page-item d-none d-sm-block\" [class.disabled]=\"currentPage === 1\">\r\n <button class=\"page-link\" (click)=\"firstPage()\"><i class=\"bi bi-chevron-double-left\"></i></button>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <button class=\"page-link\" (click)=\"prevPage()\"><i class=\"bi bi-chevron-left\"></i></button>\r\n </li>\r\n\r\n <!-- Page numbers -->\r\n <li class=\"page-item\" *ngFor=\"let page of pages\" [class.active]=\"page === currentPage\"\r\n [class.disabled]=\"page === '...'\">\r\n <button class=\"page-link\" [disabled]=\"page === '...'\" (click)=\"changePage(page)\">\r\n {{ page }}\r\n </button>\r\n </li>\r\n\r\n <!-- Next / Last (hide Last on xs) -->\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === totalPages\">\r\n <button class=\"page-link\" (click)=\"nextPage()\"><i class=\"bi bi-chevron-right\"></i></button>\r\n </li>\r\n <li class=\"page-item d-none d-sm-block\" [class.disabled]=\"currentPage === totalPages\">\r\n <button class=\"page-link\" (click)=\"lastPage()\"><i class=\"bi bi-chevron-double-right\"></i></button>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <!-- Page Size Dropdown -->\r\n <div class=\"ms-2\">\r\n <label class=\"me-2\">{{ \"page-size\" }}</label>\r\n <select class=\"form-select d-inline-block w-auto\" [(ngModel)]=\"pageSize\" (change)=\"onPageSizeChange($event)\">\r\n <option *ngFor=\"let size of pageSizes\" [value]=\"size\">{{ size }}</option>\r\n </select>\r\n </div>\r\n <div class=\"total-count ms-2\">\r\n {{ \"total-count\" }}: {{ _totalItems }}\r\n </div>\r\n</div>","// grid-column.component.ts\r\nimport { Component, ContentChild, TemplateRef, Input, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'flex-grid-column',\r\n template: ''\r\n})\r\n\r\nexport class FlexColumnComponent {\r\n headerText = input<string>('');\r\n\r\n @Input() field!: string;\r\n @Input() width: any = 120;\r\n\r\n @ContentChild('headerTemplate') headerTemplate!: TemplateRef<any>;\r\n @ContentChild('cellTemplate') cellTemplate!: TemplateRef<any>;\r\n\r\n\r\n}\r\n","// grid-columns.component.ts\r\nimport { Component, ContentChildren, QueryList } from '@angular/core';\r\nimport { FlexColumnComponent } from './flex-grid-column';\r\n\r\n@Component({\r\n selector: 'flex-grid-columns',\r\n template: ''\r\n})\r\nexport class FlexColumnsComponent {\r\n @ContentChildren(FlexColumnComponent) columns!: QueryList<FlexColumnComponent>;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ContentChild, effect, ElementRef, Input, input, output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexPaginationComponent } from \"../flex-pagination/flex-pagination.component\";\r\nimport { FlexColumnsComponent } from './flex-grid-columns';\r\nimport { FlexPaging } from '../flex-pagination/flex_page';\r\n\r\n@Component({\r\n selector: 'flex-grid',\r\n imports: [CommonModule, FormsModule, FlexPaginationComponent],\r\n templateUrl: './flex-grid.component.html',\r\n styleUrl: './flex-grid.component.css'\r\n})\r\n\r\nexport class FlexGridComponent implements AfterViewInit {\r\n\r\n\r\n enablePaging = input<boolean>(false);\r\n totalDataCount = input<number>(0);\r\n\r\n tableClass = input<string>('');\r\n\r\n @Input() dataSource: any[] = [];\r\n\r\n // @ContentChildren(GridColumnComponent) columns!: QueryList<GridColumnComponent>;\r\n @ContentChild(FlexColumnsComponent) gridColumns?: FlexColumnsComponent;\r\n\r\n rowClicked = output<{ index: number, data: any }>();\r\n rowDblClicked = output<{ index: number, data: any }>();\r\n\r\n // Optional: custom template when no data\r\n @Input() emptyRecordTemplate?: TemplateRef<any>;\r\n\r\n isPagingEnabled: boolean = false;\r\n\r\n @ViewChild('gridHeader') gridHeader!: ElementRef;\r\n\r\n @ViewChild('gridBody') gridBody!: ElementRef;\r\n\r\n selectedIndex: number = -1;\r\n protected _totalDataCount: number = 0;\r\n protected _tableClass: string = \"\";\r\n\r\n pageChange = output<{ skip: number, take: number }>();\r\n currentPage: number = 1;\r\n pageSize: number = 50;\r\n\r\n constructor() {\r\n effect(() => {\r\n this.isPagingEnabled = this.enablePaging();\r\n });\r\n\r\n effect(() => {\r\n this._totalDataCount = this.totalDataCount();\r\n });\r\n\r\n effect(() => {\r\n this._tableClass = this.tableClass();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.syncColumnWidths();\r\n }\r\n\r\n check() {\r\n console.log(this.gridColumns);\r\n console.log(this.dataSource);\r\n }\r\n\r\n syncScroll(e: Event) {\r\n const body = e.target as HTMLElement;\r\n const header = this.gridHeader?.nativeElement; //document.querySelector('.grid-header');\r\n if (header) (header as HTMLElement).scrollLeft = body.scrollLeft;\r\n }\r\n\r\n syncColumnWidths() {\r\n // const headerCols = this.gridHeader.nativeElement.querySelectorAll('th');\r\n // const bodyCols = this.gridBody.nativeElement.querySelectorAll('tr:first-child td');\r\n\r\n // bodyCols.forEach((td: HTMLElement, i: number) => {\r\n // const width = td.getBoundingClientRect().width;\r\n // (headerCols[i] as HTMLElement).style.width = width + 'px';\r\n // });\r\n }\r\n\r\n // syncColumnWidths() {\r\n // const headerCols = document.querySelectorAll('.grid-header th');\r\n // const bodyCols = this.gridBody.nativeElement.querySelectorAll('tbody tr:first-child td');\r\n\r\n // bodyCols.forEach((col: HTMLElement, i: number) => {\r\n // const width = col.getBoundingClientRect().width;\r\n // (headerCols[i] as HTMLElement).style.width = width + 'px';\r\n // });\r\n // }\r\n\r\n onRowDblClick(index: number, data: any) {\r\n this.selectedIndex = index;\r\n // console.log(index);\r\n\r\n this.rowDblClicked.emit({ index: index, data: data });\r\n }\r\n\r\n onRowClick(index: number, data: any) {\r\n this.selectedIndex = index;\r\n // console.log(index);\r\n\r\n this.rowClicked.emit({ index: index, data: data });\r\n }\r\n\r\n onPageChanged(event: FlexPaging) {\r\n console.log(event);\r\n this.currentPage = event.currentPage;\r\n this.pageSize = event.pageSize;\r\n\r\n this.pageChange.emit(event);\r\n\r\n\r\n }\r\n\r\n}\r\n","<div class=\"grid-container\">\r\n <!-- Header row in its own div -->\r\n <div class=\"grid-scroll\">\r\n <div class=\"grid-container-sub\">\r\n <div class=\"grid-header\" #gridHeader>\r\n <table class=\"grid-table table table-bordered table-sm mb-0 header-table\">\r\n <colgroup>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <col [style.width.px]=\"col.width\" [style.maxWidth.px]=\"col.width\">\r\n }\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <th class=\"text-truncate\">\r\n @if (col.headerTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.headerTemplate\"></ng-container>\r\n }\r\n @else {\r\n <!-- <ng-template #defaultHeader><span [textContent]=\"col.field\"></span></ng-template> -->\r\n <!-- <span [textContent]=\"col.field\"></span> -->\r\n {{ col.headerText() }}\r\n }\r\n </th>\r\n }\r\n\r\n <!-- <th style=\"width: 20px;\"></th> -->\r\n </tr>\r\n </thead>\r\n\r\n </table>\r\n </div>\r\n <!-- Scrollable body in another div -->\r\n <div #gridBody class=\"grid-body\" (scroll)=\"syncScroll($event)\">\r\n @if(dataSource.length > 0){\r\n <table class=\"grid-table table table-bordered table-sm table-hover mb-0\" [ngClass]=\"_tableClass\">\r\n\r\n <colgroup>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <col [style.width.px]=\"col.width\" [style.maxWidth.px]=\"col.width\">\r\n }\r\n </colgroup>\r\n <tbody>\r\n @for (row of dataSource; track $index; let i = $index) {\r\n <tr [class.table-active]=\"$index === selectedIndex\" (click)=\"onRowClick($index, row)\"\r\n (dblclick)=\"onRowDblClick($index, row)\">\r\n @for (col of gridColumns?.columns; track $index) {\r\n <td>\r\n @if (col.cellTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row,\r\n rowIndex: (currentPage - 1) * pageSize + i,\r\n localIndex: i }\">\r\n </ng-container>\r\n } @else {\r\n <!-- {{ row[col.field] }} -->\r\n <span [textContent]=\"row[col.field]\"></span>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n @else {\r\n No records found\r\n }\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n @if(isPagingEnabled){\r\n <!-- Footer -->\r\n <div class=\"grid-footer\">\r\n <flex-pagination [rowCount]=\"_totalDataCount\" (pageChange)=\"onPageChanged($event)\"></flex-pagination>\r\n </div>\r\n }\r\n\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, OnInit, model, effect, input, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\ninterface DateOption {\r\n value: number | '';\r\n name: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'flex-combo-datepicker',\r\n imports: [FormsModule, CommonModule],\r\n templateUrl: './flex-combo-datepicker.component.html',\r\n styleUrls: ['./flex-combo-datepicker.component.css']\r\n})\r\n\r\nexport class ComboDatePickerComponent implements OnInit {\r\n // @Input() value: any = null; // ISO string\r\n @Input() ngMinDate?: string; // ISO string\r\n @Input() ngMaxDate?: string;\r\n @Input() ngMonths?: string[]; // optional month names\r\n @Input() ngOrder: 'dmy' | 'mdy' | 'ymd' = 'dmy';\r\n @Input() ngDisabled: boolean = false;\r\n @Input() ngPlaceholder: string | string[] = 'Day,Month,Year';\r\n\r\n dateChanged = output<any>();\r\n\r\n disabled = input<boolean>(false);\r\n\r\n value = model<any>();\r\n _value: any;\r\n\r\n day: number | '' = '';\r\n month: number | '' = '';\r\n year: number | '' = '';\r\n\r\n dates: DateOption[] = [];\r\n months: DateOption[] = [];\r\n years: DateOption[] = [];\r\n\r\n placeHolders: DateOption[] = [];\r\n\r\n cssClass = input<string>();\r\n\r\n showHeader = input<boolean>(true);\r\n dateTitle = input<string>();\r\n monthTitle = input<string>();\r\n yearTitle = input<string>();\r\n\r\n constructor() {\r\n effect(() => {\r\n this._value = this.value();\r\n this.initModel();\r\n this.updateDates();\r\n })\r\n }\r\n\r\n ngOnInit() {\r\n this.initPlaceholders();\r\n this.initMonths();\r\n this.initYears();\r\n // this.initModel();\r\n // this.updateDates();\r\n }\r\n\r\n private initPlaceholders() {\r\n let holders = Array.isArray(this.ngPlaceholder) ? this.ngPlaceholder : this.ngPlaceholder.split(',');\r\n if (holders.length === 3) {\r\n this.placeHolders = holders.map(h => ({ value: '', name: h, disabled: false }));\r\n }\r\n }\r\n\r\n private initMonths() {\r\n const monthNames = this.ngMonths && this.ngMonths.length === 12 ? this.ngMonths : ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];\r\n this.months = monthNames.map((name, i) => ({ value: i + 1, name }));\r\n if (this.placeHolders.length) this.months.unshift(this.placeHolders[1]);\r\n }\r\n\r\n private initYears() {\r\n const currentYear = new Date().getFullYear();\r\n const minYear = this.ngMinDate ? new Date(this.ngMinDate).getFullYear() : currentYear - 100;\r\n const maxYear = this.ngMaxDate ? new Date(this.ngMaxDate).getFullYear() : currentYear;\r\n this.years = [];\r\n for (let y = minYear; y <= maxYear; y++) {\r\n this.years.push({ value: y, name: y.toString() });\r\n }\r\n if (this.placeHolders.length) this.years.unshift(this.placeHolders[2]);\r\n }\r\n\r\n private initModel() {\r\n if (this.value) {\r\n const date = new Date(this.value());\r\n this.day = date.getDate();\r\n this.month = date.getMonth() + 1;\r\n this.year = date.getFullYear();\r\n }\r\n }\r\n\r\n private updateDates() {\r\n const max = this.month && this.year ? this.getMaxDate(this.month, this.year) : 31;\r\n this.dates = [];\r\n if (this.placeHolders.length) this.dates.push(this.placeHolders[0]);\r\n for (let i = 1; i <= max; i++) {\r\n this.dates.push({ value: i, name: i.toString() });\r\n }\r\n }\r\n\r\n private getMaxDate(month: number, year: number) {\r\n if ([4, 6, 9, 11].includes(month)) return 30;\r\n if (month === 2) return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0) ? 29 : 28;\r\n return 31;\r\n }\r\n\r\n onChange() {\r\n this.updateDates();\r\n if (this.day && this.month && this.year) {\r\n const iso = this.toLocalISOString(new Date(this.year, this.month - 1, this.day));\r\n this.value.set(iso);\r\n this.dateChanged.emit(iso);\r\n }\r\n }\r\n\r\n toLocalISOString(date: Date): string {\r\n const pad = (n: number) => n.toString().padStart(2, '0');\r\n\r\n const year = date.getFullYear();\r\n const month = pad(date.getMonth() + 1);\r\n const day = pad(date.getDate());\r\n const hours = pad(date.getHours());\r\n const minutes = pad(date.getMinutes());\r\n const seconds = pad(date.getSeconds());\r\n //const ms = date.getMilliseconds().toString().padStart(3, '0');\r\n\r\n //return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${ms}`;\r\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\r\n }\r\n}\r\n","<div class=\"row g-1\">\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (dateTitle()) {\r\n {{ dateTitle() }}\r\n }\r\n @else {\r\n Date\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"day\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select ' + cssClass()\">\r\n <option *ngFor=\"let d of dates\" [value]=\"d.value\">{{ d.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (monthTitle()) {\r\n {{ monthTitle() }}\r\n }\r\n @else {\r\n Month\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"month\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select ' + cssClass()\">\r\n <option *ngFor=\"let m of months\" [value]=\"m.value\">{{ m.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (yearTitle()) {\r\n {{ yearTitle() }}\r\n }\r\n @else {\r\n Year\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"year\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select year ' + cssClass()\">\r\n <option *ngFor=\"let y of years\" [value]=\"y.value\">{{ y.name }}</option>\r\n </select>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nexport type HijriDate = { hy: number; hm: number; hd: number };\r\ntype DayCell = {\r\n g: Date;\r\n h: HijriDate;\r\n inCurrentMonth: boolean;\r\n disabled: boolean;\r\n};\r\n\r\n//\r\n// ✅ Umm al-Qura Hijri calendar with Latin digits\r\n//\r\nconst hijriFmt = new Intl.DateTimeFormat('en-u-ca-islamic-umalqura-nu-latn', {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric'\r\n});\r\n\r\nconst hijriMonthNamesEn = [\r\n 'Muharram', 'Safar', 'Rabi I', 'Rabi II',\r\n 'Jumada I', 'Jumada II', 'Rajab', 'Sha’ban',\r\n 'Ramadan', 'Shawwal', 'Dhu al-Qi’dah', 'Dhu al-Hijjah'\r\n];\r\n\r\nconst hijriMonthNamesAr = [\r\n 'محرم', 'صفر', 'ربيع الأول', 'ربيع الآخر',\r\n 'جمادى الأولى', 'جمادى الآخرة', 'رجب', 'شعبان',\r\n 'رمضان', 'شوال', 'ذو القعدة', 'ذو الحجة'\r\n];\r\n\r\nconst weekDaysEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\nconst weekDaysAr = ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\r\n\r\nfunction hijriFromGregorian(g: Date): HijriDate {\r\n const parts = hijriFmt.formatToParts(g);\r\n //console.log(parts);\r\n const map: Record<string, string> = {};\r\n for (const p of parts) map[p.type] = p.value;\r\n const n = (k: string) => parseInt(map[k] ?? '0', 10);\r\n return { hy: n('year'), hm: n('month'), hd: n('day') };\r\n}\r\n\r\nfunction compareHijri(a: HijriDate, b: HijriDate) {\r\n if (a.hy !== b.hy) return a.hy - b.hy;\r\n if (a.hm !== b.hm) return a.hm - b.hm;\r\n return a.hd - b.hd;\r\n}\r\n\r\nfunction findGregorianForHijri(target: HijriDate): Date {\r\n let lo = new Date(1937, 0, 1).getTime();\r\n let hi = new Date(2076, 11, 31).getTime();\r\n const dayMs = 86400000;\r\n\r\n while (lo <= hi) {\r\n const mid = Math.floor((lo + hi) / 2);\r\n const h = hijriFromGregorian(new Date(mid));\r\n compareHijri(h, target) < 0 ? (lo = mid + dayMs) : (hi = mid - dayMs);\r\n }\r\n\r\n let d = new Date(lo);\r\n while (true) {\r\n const h = hijriFromGregorian(d);\r\n const cmp = compareHijri(h, target);\r\n if (cmp === 0) return d;\r\n if (cmp > 0) throw new Error('Hijri date out of supported range');\r\n d = new Date(d.getTime() + dayMs);\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'app-hijri-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: \"./hijri-calendar.component.html\",\r\n styleUrl: \"./hijri-calendar.component.css\"\r\n})\r\n\r\nexport class HijriCalendarComponent {\r\n /** Two-way bound selected date (Gregorian Date) */\r\n @Input() value: Date | null = null;\r\n @Output() valueChange = new EventEmitter<Date>();\r\n\r\n /** Optional min/max restrictions (Gregorian dates) */\r\n @Input() minDate: Date | null = null;\r\n @Input() maxDate: Date | null = null;\r\n\r\n /** Month + weekday language: 'en' or 'ar' */\r\n @Input() monthLang: 'en' | 'ar' = 'ar';\r\n\r\n hy = signal<number>(0);\r\n hm = signal<number>(0);\r\n\r\n selectedMonth = 1;\r\n selectedYear = 1447;\r\n yearRange: number[] = [];\r\n\r\n get hijriMonthsEn() {\r\n return hijriMonthNamesEn;\r\n }\r\n\r\n get hijriMonthsAr() {\r\n return hijriMonthNamesAr;\r\n }\r\n\r\n get hijriMonths() {\r\n return this.monthLang === 'ar' ? hijriMonthNamesAr : hijriMonthNamesEn;\r\n }\r\n\r\n get weekDays() {\r\n return this.monthLang === 'ar' ? weekDaysAr : weekDaysEn;\r\n }\r\n\r\n get weekDaysEn() {\r\n return weekDaysEn;\r\n }\r\n\r\n get weekDaysAr() {\r\n return weekDaysAr;\r\n }\r\n\r\n get currentMonthName() {\r\n return this.hijriMonths[this.selectedMonth - 1];\r\n }\r\n\r\n constructor() {\r\n const h = hijriFromGregorian(new Date());\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.selectedYear = h.hy;\r\n this.selectedMonth = h.hm;\r\n }\r\n\r\n ngOnInit() {\r\n this.buildYearRange();\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.value) {\r\n const h = hijriFromGregorian(this.value);\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.selectedYear = h.hy;\r\n this.selectedMonth = h.hm;\r\n }\r\n this.buildYearRange();\r\n }\r\n\r\n buildYearRange() {\r\n const minH = this.minDate ? hijriFromGregorian(this.minDate) : { hy: 1356, hm: 1, hd: 1 };\r\n const maxH = this.maxDate ? hijriFromGregorian(this.maxDate) : { hy: 1499, hm: 12, hd: 30 };\r\n this.yearRange = [];\r\n for (let y = minH.hy; y <= maxH.hy; y++) {\r\n this.yearRange.push(y);\r\n }\r\n }\r\n\r\n onMonthYearChange() {\r\n this.hy.set(this.selectedYear);\r\n this.hm.set(this.selectedMonth);\r\n }\r\n\r\n firstOfMonth() {\r\n return findGregorianForHijri({ hy: this.hy(), hm: this.hm(), hd: 1 });\r\n }\r\n\r\n cells(): DayCell[] {\r\n const firstG = this.firstOfMonth();\r\n const firstH = hijriFromGregorian(firstG);\r\n\r\n const start = new Date(firstG);\r\n start.setDate(firstG.getDate() - firstG.getDay());\r\n\r\n const result: DayCell[] = [];\r\n for (let i = 0; i < 42; i++) {\r\n const g = new Date(start);\r\n g.setDate(start.getDate() + i);\r\n const h = hijriFromGregorian(g);\r\n\r\n let disabled = false;\r\n if (this.minDate && g < this.stripTime(this.minDate)) disabled = true;\r\n if (this.maxDate && g > this.stripTime(this.maxDate)) disabled = true;\r\n\r\n result.push({\r\n g,\r\n h,\r\n inCurrentMonth: h.hy === firstH.hy && h.hm === firstH.hm,\r\n disabled\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n prevMonth() {\r\n if (!this.canPrev()) return;\r\n let m = this.hm(), y = this.hy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y;\r\n this.selectedMonth = m;\r\n }\r\n\r\n nextMonth() {\r\n if (!this.canNext()) return;\r\n let m = this.hm(), y = this.hy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y;\r\n this.selectedMonth = m;\r\n }\r\n\r\n canPrev(): boolean {\r\n if (!this.minDate) return true;\r\n const minH = hijriFromGregorian(this.stripTime(this.minDate));\r\n return this.hy() > minH.hy || (this.hy() === minH.hy && this.hm() > minH.hm);\r\n }\r\n\r\n canNext(): boolean {\r\n if (!this.maxDate) return true;\r\n const maxH = hijriFromGregorian(this.stripTime(this.maxDate));\r\n return this.hy() < maxH.hy || (this.hy() === maxH.hy && this.hm() < maxH.hm);\r\n }\r\n\r\n isToday(g: Date) {\r\n const t = new Date();\r\n return g.getFullYear() === t.getFullYear()\r\n && g.getMonth() === t.getMonth()\r\n && g.getDate() === t.getDate();\r\n }\r\n\r\n isSelected(g: Date) {\r\n return !!this.value &&\r\n g.getFullYear() === this.value.getFullYear() &&\r\n g.getMonth() === this.value.getMonth() &&\r\n g.getDate() === this.value.getDate();\r\n }\r\n\r\n select(c: DayCell) {\r\n if (c.disabled) return;\r\n\r\n //console.log(c);\r\n\r\n this.value = c.g;\r\n this.valueChange.emit(this.value);\r\n }\r\n\r\n private stripTime(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\r\n }\r\n}\r\n","<div class=\"card border-0 p-0\">\r\n <div class=\"card-header p-1\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <button class=\"btn btn-sm\" (click)=\"prevMonth()\" [disabled]=\"!canPrev()\">&laquo;</button>\r\n <div class=\"d-flex justify-content-center gap-1\">\r\n <select class=\"form-select form-select-sm w-auto\" [(ngModel)]=\"selectedMonth\"\r\n (change)=\"onMonthYearChange()\">\r\n @for (m of hijriMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{ hijriMonthsAr[$index] }} ({{ hijriMonthsEn[$index] }})</option>\r\n }\r\n </select>\r\n <select class=\"form-select form-select-sm w-auto\" [(ngModel)]=\"selectedYear\"\r\n (change)=\"onMonthYearChange()\">\r\n @for (y of yearRange; track y) {\r\n <option [value]=\"y\">{{ y }}</option>\r\n }\r\n </select>\r\n </div>\r\n <button class=\"btn btn-sm\" (click)=\"nextMonth()\" [disabled]=\"!canNext()\">&raquo;</button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-1\">\r\n\r\n\r\n <!-- month/year pickers -->\r\n\r\n\r\n <!-- weekday labels -->\r\n <div class=\"grid\">\r\n @for (w of weekDays; track $index) {\r\n <div class=\"col fw-bold border pb-1\">{{ w }}</div>\r\n }\r\n\r\n </div>\r\n\r\n <!-- calendar cells -->\r\n <div class=\"grid\">\r\n <button *ngFor=\"let c of cells()\" class=\"cell btn rounded-0\" [class.muted]=\"!c.inCurrentMonth\"\r\n [class.today]=\"isToday(c.g)\" [class.selected]=\"isSelected(c.g)\" [disabled]=\"c.disabled\"\r\n (click)=\"select(c)\">\r\n {{ c.h.hd }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport dayjs from 'dayjs';\r\nimport calendarSystems, { CalendarSystem } from '@calidy/dayjs-calendarsystems';\r\nimport PersianCalendarSystem from '@calidy/dayjs-calendarsystems/calendarSystems/PersianCalendarSystem';\r\nimport HijriCalendarSystem from '@calidy/dayjs-calendarsystems/calendarSystems/HijriCalendarSystem';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\n\r\n// Extend Day.js with calendar systems support\r\ndayjs.extend(calendarSystems);\r\ndayjs.extend(customParseFormat);\r\n\r\n// Register the Persian calendar\r\ndayjs.registerCalendarSystem('persian', new PersianCalendarSystem());\r\n\r\ndayjs.registerCalendarSystem('islamic', new HijriCalendarSystem());\r\n\r\n\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DateServiceService {\r\n\r\n\r\n\r\n\r\n log(date: Date) {\r\n //var dj = dayjs(date);\r\n // // Convert current date to Persian calendar\r\n // const persianDate = dj.toCalendarSystem('persian');\r\n // console.log(persianDate.format('YYYY-MM-DD')); // Example: \"1403-08-15\"\r\n\r\n // // Create a date from Persian calendar\r\n // const nowruz = dayjs.fromCalendarSystem('persian', 1403, 1, 1);\r\n // console.log(nowruz.format('YYYY-MM-DD')); // \"2024-03-20\"\r\n\r\n\r\n\r\n // const hijriDate = dj.toCalendarSystem('islamic');\r\n // console.log(hijriDate.format('YYYY-MM-DD')); // e.g., \"1446-03-15\"\r\n\r\n //Step 1: User will input gregorian or islamic(hijri) date. for this we will use customParseFormat\r\n //in the control we will specify the format using binding.\r\n const d = dayjs(\"18-05-1447\", \"DD-MM-YYYY\");\r\n //we are writing this to parse the date , month, year only.\r\n //then based on the calender type we will decide.\r\n //but by default system will take gregorian\r\n const customDate = dayjs.fromCalendarSystem('islamic', d.year(), d.month() + 1, d.date() as number);\r\n //here we are assuming the control want to handle islamic calender date, we will take it dynmically.\r\n console.log(\"Prased Date in Gregorian String as per format ['DD-MM-YYYY']:\", customDate.format('DD-MM-YYYY'));\r\n //here it will show gregorian calender, because even if we parse using islamic calender, it will convert the date\r\n //and keep it to gregorian\r\n //to show islamic date, we have to tell the dayjs to use islamic calender\r\n console.log(\"Hijri Date String: \", customDate.toCalendarSystem('islamic').format('YYYY-MM-DD'));\r\n\r\n // console.log(d.format(\"DD/MM/YYYY\"));\r\n // console.log(d.date());\r\n // console.log(d.month() + 1);\r\n // console.log(d.year());\r\n // console.log(d.toDate());\r\n\r\n // const d2 = dayjs(\"09-11-2025\", \"DD-MM-YYYY\");\r\n // console.log(d2.format(\"DD/MM/YYYY\"));\r\n // console.log(d2.date());\r\n // console.log(d2.month() + 1);\r\n // console.log(d2.year());\r\n // console.log(d2.toDate());\r\n\r\n // // Create a Day.js instance from a specific calendar system\r\n // const hijriCustomDate = dayjs.fromCalendarSystem('islamic', 1447, 5, 18);\r\n // console.log(hijriCustomDate.toString());\r\n\r\n // // The result is a standard Day.js instance in that calendar system\r\n // console.log(hijriCustomDate.toCalendarSystem('islamic').format('YYYY-MM-DD')); // In Persian: \"1403-01-01\"\r\n\r\n // // Convert to Gregorian to see the equivalent date\r\n // const gregorian = hijriCustomDate.toCalendarSystem('gregory');\r\n // console.log(gregorian.format('YYYY-MM-DD')); // \"2024-03-20\"\r\n\r\n }\r\n\r\n parse(dateString: string, calendar: FlexCalendarSystem, format: string): Date | null | undefined {\r\n //Step 1: User will input gregorian or islamic(hijri) date. for this we will use customParseFormat\r\n //in the control we will specify the format using binding.\r\n const d = dayjs(dateString, format);\r\n if (!d.isValid()) {\r\n\r\n console.log(dateString, calendar, format, \"is invalid\");\r\n return null;\r\n }\r\n //we are writing this to parse the date , month, year only.\r\n //then based on the calender type we will decide.\r\n //but by default system will take gregorian\r\n const customDate = dayjs.fromCalendarSystem(calendar, d.year(), d.month() + 1, d.date() as number);\r\n //here we are assuming the control want to handle islamic calender date, we will take it dynmically.\r\n console.log(\"Prased Date in Gregorian String as per format ['DD-MM-YYYY']:\", customDate.format('DD-MM-YYYY'));\r\n //here it will show gregorian calender, because even if we parse using islamic calender, it will convert the date\r\n //and keep it to gregorian\r\n //to show islamic date, we have to tell the dayjs to use islamic calender\r\n console.log(\"Hijri Date String: \", customDate.toCalendarSystem('islamic').format('YYYY-MM-DD'));\r\n return customDate.toDate();\r\n }\r\n\r\n format(date: Date, calendar: FlexCalendarSystem, format: string): string {\r\n const d = dayjs(date);\r\n return d.toCalendarSystem(calendar).format(format);\r\n }\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, ElementRef, HostListener, input, model, OnInit, output, ViewChild } from '@angular/core';\r\nimport { HijriCalendarComponent } from \"../flex-hijri-calendar/hijri-calendar.component\";\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport dayjs from \"dayjs\";\r\nimport { FlexCalendarSystem } from '../../core/types/flex-calendar-system.type';\r\nimport { DateServiceService } from '../../services/date-service.service';\r\n\r\n\r\n@Component({\r\n selector: 'app-hijri-datepicker',\r\n imports: [CommonModule, FormsModule, HijriCalendarComponent],\r\n templateUrl: './hijri-datepicker.component.html',\r\n styleUrl: './hijri-datepicker.component.css'\r\n})\r\n\r\nexport class HijriDatepickerComponent {\r\n value = model<any>();\r\n\r\n selectedDate?: Date;\r\n showCalendar: boolean = false;\r\n\r\n calender = input<FlexCalendarSystem>(\"gregory\");\r\n enabled = input<boolean>(true);\r\n cssClass = input<string>();\r\n format = input<string>(\"DD/MM/YYYY\");\r\n\r\n inputDate: string = \"\";\r\n isMobile = false;\r\n\r\n\r\n constructor(private dateService: DateServiceService) {\r\n\r\n\r\n\r\n effect(() => {\r\n const iso = this.value();\r\n if (iso) {\r\n const date = dayjs(iso);\r\n if (date.isValid()) {\r\n this.selectedDate = date.toDate();\r\n this.inputDate = this.formatDate(this.selectedDate, this.calender(), this.format());\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.selectedDate = undefined;\r\n this.inputDate = \"\";\r\n });\r\n }\r\n\r\n toggleCalendar() {\r\n this.showCalendar = !this.showCalendar;\r\n }\r\n\r\n onDateSelectedFromCalender(e: Date) {\r\n // console.log(\"onDateSelectedFromCalender: \", e);\r\n this.dateService.log(e);\r\n //var time = this.selectedDate ?? new Date();\r\n\r\n // e.setHours(time.getHours());\r\n // e.setMinutes(time.getMinutes());\r\n\r\n //this.updateDate(e);\r\n //this.showCalendar = false;\r\n\r\n // console.log(e);\r\n }\r\n\r\n /** Triggered on blur OR Enter key */\r\n onManualDateEntered() {\r\n if (!this.inputDate) return;\r\n\r\n const parsed = this.parseInputDate(this.inputDate);\r\n if (parsed) {\r\n this.updateDate(parsed);\r\n } else {\r\n console.warn(\"Invalid date entered:\", this.inputDate);\r\n }\r\n }\r\n\r\n /** Reusable update method */\r\n private updateDate(d: Date) {\r\n this.selectedDate = d;\r\n //this.inputDate = this.formatDateForInput(d);\r\n this.value.set(d);\r\n //this.valueChange.emit(d);\r\n }\r\n\r\n formatDate(date: Date, calender: FlexCalendarSystem, format: string): string {\r\n return this.dateService.format(date, calender, format);\r\n }\r\n\r\n // private formatDateForInput(date: Date): string {\r\n // const fmt = this.format()?.toUpperCase() ?? \"DD/MM/YYYY\";\r\n // //return dayjs(date).format(fmt);\r\n // return this.formatDate(date, fmt);\r\n // }\r\n\r\n private parseInputDate(str: string): Date | null {\r\n\r\n const fmt = this.format()?.toUpperCase() ?? \"DD/MM/YYYY\";\r\n\r\n console.log(str, \"-\", fmt);\r\n\r\n const d = dayjs(str, fmt); // strict parse\r\n\r\n console.log(d.toDate());\r\n\r\n if (!d.isValid()) return null;\r\n\r\n\r\n\r\n if (!this.selectedDate) {\r\n this.selectedDate = new Date();\r\n }\r\n\r\n // gd.set(\"hour\", this.selectedDate.getHours());\r\n // gd.set(\"minute\", this.selectedDate.getMinutes());\r\n // gd.set(\"second\", this.selectedDate.getSeconds());\r\n\r\n return null;\r\n }\r\n\r\n\r\n @ViewChild(\"inputDiv\") inputDiv?: ElementRef;\r\n @ViewChild(\"modalDiv\") modalDiv?: ElementRef;\r\n @ViewChild(\"popupDiv\") popupDiv?: ElementRef;\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (this.inputDiv?.nativeElement.contains(event.target)\r\n || this.modalDiv?.nativeElement.contains(event.target)\r\n || this.popupDiv?.nativeElement.contains(event.target)) {\r\n return\r\n }\r\n this.showCalendar = false;\r\n }\r\n}\r\n","<div class=\"input-group flex-nowrap\" #inputDiv>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toggleCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n</div>\r\n\r\n@if(showCalendar){\r\n@if(isMobile){\r\n<div class=\"modal modal-backdrop\" tabindex=\"-1\" role=\"dialog\" style=\"display: block;\" #modalDiv>\r\n <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"btn btn-danger close ms-auto btn-sm\" (click)=\"showCalendar = false\">\r\n <i class=\"bi bi-x\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n@else{\r\n<div class=\"dropdown-menu show\" #popupDiv>\r\n <app-hijri-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"></app-hijri-calendar>\r\n</div>\r\n}\r\n}","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n Renderer2,\r\n TemplateRef,\r\n ViewChild,\r\n OnDestroy,\r\n HostListener\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'flex-container',\r\n templateUrl: './flex-container.component.html',\r\n styleUrls: ['./flex-container.component.css'],\r\n imports: [CommonModule]\r\n})\r\n\r\nexport class FlexContainerComponent implements AfterViewInit, OnDestroy {\r\n @ViewChild('contentHost') contentHost!: ElementRef<HTMLDivElement>;\r\n //private resizeHandler!: () => void;\r\n\r\n // Allow consumer to provide templates\r\n @ContentChild('header') headerTpl!: TemplateRef<any>;\r\n @ContentChild('footer') footerTpl!: TemplateRef<any>;\r\n @ContentChild('content') contentTpl!: TemplateRef<any>;\r\n\r\n constructor(private renderer: Renderer2) { }\r\n\r\n ngAfterViewInit(): void {\r\n this.resizeContent();\r\n //this.resizeHandler = this.resizeContent.bind(this);\r\n //window.addEventListener('resize', this.resizeHandler);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // if (this.resizeHandler) {\r\n // window.removeEventListener('resize', this.resizeHandler);\r\n // }\r\n }\r\n\r\n\r\n @HostListener('window:resize')\r\n onWindowResize() {\r\n this.resizeContent();\r\n }\r\n\r\n private resizeContent() {\r\n const parent = this.contentHost.nativeElement.parentElement;\r\n if (!parent) return;\r\n\r\n const parentHeight = parent.clientHeight;\r\n const headerHeight = this.contentHost.nativeElement.previousElementSibling?.clientHeight || 0;\r\n const footerHeight = this.contentHost.nativeElement.nextElementSibling?.clientHeight || 0;\r\n\r\n const available = parentHeight - headerHeight - footerHeight;\r\n\r\n this.renderer.setStyle(this.contentHost.nativeElement, 'height', `${available}px`);\r\n this.renderer.setStyle(this.contentHost.nativeElement, 'width', `${parent.clientWidth}px`);\r\n }\r\n}\r\n","<div class=\"flex-container\">\r\n @if(headerTpl){\r\n <div class=\"header\">\r\n <ng-container *ngTemplateOutlet=\"headerTpl\"></ng-container>\r\n </div>\r\n }\r\n\r\n\r\n <div #contentHost class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </div>\r\n @if(footerTpl){\r\n <div class=\"footer\">\r\n <ng-container *ngTemplateOutlet=\"footerTpl\"></ng-container>\r\n </div>\r\n }\r\n\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\n\r\nexport type HijriDate = { hy: number; hm: number; hd: number };\r\ntype DayCell = {\r\n g: Date; // always Gregorian Date\r\n h: HijriDate; // mapped Hijri for display\r\n inCurrentMonth: boolean;\r\n disabled: boolean;\r\n};\r\n\r\n// ✅ Intl formatters\r\nconst hijriFmt = new Intl.DateTimeFormat('en-u-ca-islamic-umalqura-nu-latn', {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric'\r\n});\r\n\r\nconst hijriMonthNamesEn = [\r\n 'Muharram', 'Safar', 'Rabi I', 'Rabi II',\r\n 'Jumada I', 'Jumada II', 'Rajab', 'Sha’ban',\r\n 'Ramadan', 'Shawwal', 'Dhu al-Qi’dah', 'Dhu al-Hijjah'\r\n];\r\n\r\nconst hijriMonthNamesAr = [\r\n 'محرم', 'صفر', 'ربيع الأول', 'ربيع الآخر',\r\n 'جمادى الأولى', 'جمادى الآخرة', 'رجب', 'شعبان',\r\n 'رمضان', 'شوال', 'ذو القعدة', 'ذو الحجة'\r\n];\r\n\r\nconst gregMonthNamesEn = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'\r\n];\r\n\r\nconst gregMonthNamesAr = [\r\n 'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',\r\n 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'\r\n];\r\n\r\nconst weekDaysEn = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\nconst weekDaysAr = ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\r\n\r\nfunction hijriFromGregorian(g: Date): HijriDate {\r\n const parts = hijriFmt.formatToParts(g);\r\n const map: Record<string, string> = {};\r\n for (const p of parts) map[p.type] = p.value;\r\n const n = (k: string) => parseInt(map[k] ?? '0', 10);\r\n return { hy: n('year'), hm: n('month'), hd: n('day') };\r\n}\r\nfunction compareHijri(a: HijriDate, b: HijriDate) {\r\n if (a.hy !== b.hy) return a.hy - b.hy;\r\n if (a.hm !== b.hm) return a.hm - b.hm;\r\n return a.hd - b.hd;\r\n}\r\nfunction findGregorianForHijri(target: HijriDate): Date {\r\n let lo = new Date(1937, 0, 1).getTime();\r\n let hi = new Date(2076, 11, 31).getTime();\r\n const dayMs = 86400000;\r\n while (lo <= hi) {\r\n const mid = Math.floor((lo + hi) / 2);\r\n const h = hijriFromGregorian(new Date(mid));\r\n compareHijri(h, target) < 0 ? (lo = mid + dayMs) : (hi = mid - dayMs);\r\n }\r\n let d = new Date(lo);\r\n while (true) {\r\n const h = hijriFromGregorian(d);\r\n const cmp = compareHijri(h, target);\r\n if (cmp === 0) return d;\r\n if (cmp > 0) throw new Error('Hijri date out of supported range');\r\n d = new Date(d.getTime() + dayMs);\r\n }\r\n}\r\nfunction stripTime(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'flex-dual-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './flex-dual-calendar.component.html',\r\n styleUrls: ['./flex-dual-calendar.component.css']\r\n})\r\nexport class FlexDualCalendarComponent {\r\n /** Two-way bound selected date (Gregorian) */\r\n @Input() value?: Date;\r\n @Output() valueChange = new EventEmitter<Date>();\r\n\r\n /** Optional min/max (Gregorian) */\r\n @Input() minDate?: Date;\r\n @Input() maxDate?: Date;\r\n\r\n /** Month/weekday language */\r\n @Input() monthLang: 'en' | 'ar' = 'en';\r\n\r\n /** Start mode, default Hijri */\r\n @Input() startMode: FlexCalendarSystem = 'gregory';\r\n\r\n // This will be injected by FloatingUiService\r\n close!: (result?: any) => void;\r\n\r\n /** Current mode (hijri | gregory) */\r\n mode = signal<FlexCalendarSystem>('gregory');\r\n\r\n /** Hijri view state */\r\n hy = signal<number>(0);\r\n hm = signal<number>(0);\r\n\r\n /** Gregorian view state */\r\n gy = signal<number>(0);\r\n gm = signal<number>(0); // 1..12\r\n\r\n /** selectors */\r\n selectedMonth = 1;\r\n selectedYear = 1447;\r\n yearRange: number[] = [];\r\n\r\n // ---- getters for UI ----\r\n get hijriMonths() {\r\n return this.monthLang === 'ar' ? hijriMonthNamesAr : hijriMonthNamesEn;\r\n }\r\n get gregMonths() {\r\n return this.monthLang === 'ar' ? gregMonthNamesAr : gregMonthNamesEn;\r\n }\r\n get weekDays() {\r\n return this.monthLang === 'ar' ? weekDaysAr : weekDaysEn;\r\n }\r\n get currentMonthName() {\r\n return this.mode() === 'islamic'\r\n ? this.hijriMonths[this.selectedMonth - 1]\r\n : this.gregMonths[this.selectedMonth - 1];\r\n }\r\n\r\n constructor() {\r\n const today = new Date();\r\n const h = hijriFromGregorian(today);\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.gy.set(today.getFullYear());\r\n this.gm.set(today.getMonth() + 1);\r\n\r\n // initialize selectors with start mode\r\n this.mode.set(this.startMode);\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.buildYearRange();\r\n }\r\n\r\n ngOnChanges(changes: any) {\r\n // If value changed from outside, update both calendars\r\n if (changes['value'] && this.value instanceof Date) {\r\n const g = stripTime(this.value);\r\n const h = hijriFromGregorian(g);\r\n\r\n this.gy.set(g.getFullYear());\r\n this.gm.set(g.getMonth() + 1);\r\n\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n\r\n // Update dropdowns based on current mode\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n }\r\n }\r\n\r\n // Rebuild year range if min/max changed\r\n if (changes['minDate'] || changes['maxDate'] || changes['value']) {\r\n this.buildYearRange();\r\n }\r\n }\r\n\r\n\r\n // Build years based on min/max expressed in Hijri for Hijri mode, Gregorian for Gregorian mode\r\n buildYearRange() {\r\n if (this.mode() === 'islamic') {\r\n const minH = this.minDate ? hijriFromGregorian(stripTime(this.minDate)) : { hy: 1356, hm: 1, hd: 1 };\r\n const maxH = this.maxDate ? hijriFromGregorian(stripTime(this.maxDate)) : { hy: 1499, hm: 12, hd: 30 };\r\n this.yearRange = [];\r\n for (let y = minH.hy; y <= maxH.hy; y++) this.yearRange.push(y);\r\n } else {\r\n const minG = this.minDate ? stripTime(this.minDate) : new Date(1937, 0, 1);\r\n const maxG = this.maxDate ? stripTime(this.maxDate) : new Date(2076, 11, 31);\r\n this.yearRange = [];\r\n for (let y = minG.getFullYear(); y <= maxG.getFullYear(); y++) this.yearRange.push(y);\r\n }\r\n }\r\n\r\n // 🔁 Mode switch (SYNCED view — keep same instant)\r\n switchMode(value: FlexCalendarSystem) {\r\n const pivot = this.value ?? this.firstOfMonth(); // use selected date or current view start\r\n if (value === 'gregory') {\r\n // To Gregorian mode\r\n const g = stripTime(pivot);\r\n this.gy.set(g.getFullYear());\r\n this.gm.set(g.getMonth() + 1);\r\n this.mode.set('gregory');\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n } else {\r\n // To Hijri mode\r\n const h = hijriFromGregorian(stripTime(pivot));\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.mode.set('islamic');\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n }\r\n this.buildYearRange();\r\n }\r\n\r\n // called when dropdowns change\r\n onMonthYearChange() {\r\n if (this.mode() === 'islamic') {\r\n this.hy.set(this.selectedYear);\r\n this.hm.set(this.selectedMonth);\r\n } else {\r\n this.gy.set(this.selectedYear);\r\n this.gm.set(this.selectedMonth);\r\n }\r\n }\r\n\r\n // Start of visible month (Gregorian date)\r\n firstOfMonth(): Date {\r\n if (this.mode() === 'islamic') {\r\n return findGregorianForHijri({ hy: this.hy(), hm: this.hm(), hd: 1 });\r\n }\r\n return new Date(this.gy(), this.gm() - 1, 1);\r\n }\r\n\r\n // Calendar cells for current view\r\n cells(): DayCell[] {\r\n const firstG = this.firstOfMonth();\r\n const firstH = hijriFromGregorian(firstG);\r\n\r\n // grid start (Sunday-first; adjust if you want Saturday-first)\r\n const start = new Date(firstG);\r\n start.setDate(firstG.getDate() - firstG.getDay());\r\n\r\n const result: DayCell[] = [];\r\n for (let i = 0; i < 42; i++) {\r\n const g = new Date(start);\r\n g.setDate(start.getDate() + i);\r\n const h = hijriFromGregorian(g);\r\n\r\n let disabled = false;\r\n if (this.minDate && g < stripTime(this.minDate)) disabled = true;\r\n if (this.maxDate && g > stripTime(this.maxDate)) disabled = true;\r\n\r\n const inCurrentMonth =\r\n this.mode() === 'islamic'\r\n ? (h.hy === firstH.hy && h.hm === firstH.hm)\r\n : (g.getFullYear() === firstG.getFullYear() && g.getMonth() === firstG.getMonth());\r\n\r\n result.push({ g, h, inCurrentMonth, disabled });\r\n }\r\n return result;\r\n }\r\n\r\n prevMonth() {\r\n if (!this.canPrev()) return;\r\n if (this.mode() === 'islamic') {\r\n let m = this.hm(), y = this.hy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n } else {\r\n let m = this.gm(), y = this.gy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.gm.set(m); this.gy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n }\r\n }\r\n nextMonth() {\r\n if (!this.canNext()) return;\r\n if (this.mode() === 'islamic') {\r\n let m = this.hm(), y = this.hy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n } else {\r\n let m = this.gm(), y = this.gy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.gm.set(m); this.gy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n }\r\n }\r\n\r\n canPrev(): boolean {\r\n if (!this.minDate) return true;\r\n const minG = stripTime(this.minDate);\r\n const viewFirst = this.firstOfMonth();\r\n // Can go prev if the first day of previous month is >= minG\r\n const prev = new Date(viewFirst.getFullYear(), viewFirst.getMonth() - 1, 1);\r\n return prev >= new Date(minG.getFullYear(), minG.getMonth(), 1);\r\n }\r\n canNext(): boolean {\r\n if (!this.maxDate) return true;\r\n const maxG = stripTime(this.maxDate);\r\n const viewFirst = this.firstOfMonth();\r\n const next = new Date(viewFirst.getFullYear(), viewFirst.getMonth() + 1, 1);\r\n // move to the first of the month after max\r\n const maxMonthAfter = new Date(maxG.getFullYear(), maxG.getMonth() + 1, 1);\r\n return next < maxMonthAfter;\r\n }\r\n\r\n isToday(g: Date) {\r\n const t = new Date();\r\n return g.getFullYear() === t.getFullYear()\r\n && g.getMonth() === t.getMonth()\r\n && g.getDate() === t.getDate();\r\n }\r\n isSelected(g: Date) {\r\n return !!this.value &&\r\n g.getFullYear() === this.value.getFullYear() &&\r\n g.getMonth() === this.value.getMonth() &&\r\n g.getDate() === this.value.getDate();\r\n }\r\n\r\n select(c: DayCell) {\r\n if (c.disabled) return;\r\n this.value = stripTime(c.g);\r\n this.valueChange.emit(this.value);\r\n // keep both views in sync after selection\r\n const h = hijriFromGregorian(this.value);\r\n this.hy.set(h.hy); this.hm.set(h.hm);\r\n this.gy.set(this.value.getFullYear()); this.gm.set(this.value.getMonth() + 1);\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy(); this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy(); this.selectedMonth = this.gm();\r\n }\r\n\r\n this.close(this.value)\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header p-1\">\r\n <div class=\"d-flex gap-1\">\r\n\r\n <div>\r\n <button class=\"btn btn-sm w-100 \" (click)=\"prevMonth()\" [disabled]=\"!canPrev()\"><i\r\n class=\"bi bi-caret-left-fill\"></i></button>\r\n </div>\r\n <div class=\"flex-grow-1\">\r\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"selectedMonth\" (change)=\"onMonthYearChange()\">\r\n @if (mode() === 'islamic') {\r\n @for (m of hijriMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{ hijriMonths[$index] }}-{{$index + 1}}</option>\r\n }\r\n } @else {\r\n @for (m of gregMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{$index + 1}}-{{ gregMonths[$index] }}</option>\r\n }\r\n }\r\n </select>\r\n </div>\r\n <div> <select class=\"form-select form-select-sm\" [(ngModel)]=\"selectedYear\" (change)=\"onMonthYearChange()\">\r\n @for (y of yearRange; track y) {\r\n <option [value]=\"y\">{{ y }}</option>\r\n }\r\n </select></div>\r\n <div>\r\n <button class=\"btn btn-sm w-100 \" (click)=\"nextMonth()\" [disabled]=\"!canNext()\"><i\r\n class=\"bi bi-caret-right-fill\"></i></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <!-- Weekday labels -->\r\n <div class=\"grid\">\r\n @for (w of weekDays; track $index) {\r\n <div class=\"col fw-bold border pb-1\">{{ w }}</div>\r\n }\r\n </div>\r\n\r\n <!-- Calendar cells -->\r\n <div class=\"grid\">\r\n @for (c of cells(); track $index) {\r\n <div class=\"cell\">\r\n <button class=\"btn w-100\" [class.muted]=\"!c.inCurrentMonth\" [class.today]=\"isToday(c.g)\"\r\n [class.selected]=\"isSelected(c.g)\" [disabled]=\"c.disabled\" (click)=\"select(c)\">\r\n <!-- show Hijri day in Hijri mode, otherwise Gregorian -->\r\n @if(mode() === 'islamic'){\r\n {{ c.h.hd }}\r\n }\r\n @else{\r\n {{ c.g.getDate() }}\r\n }\r\n </button>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-footer px-0 py-1\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Basic example\">\r\n <button class=\"btn btn-sm btn-outline-secondary\" type=\"button\" (click)=\"switchMode('gregory')\">\r\n Gregorian\r\n </button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" type=\"button\" (click)=\"switchMode('islamic')\">\r\n هجري\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from '@angular/core';\r\n\r\nexport type DeviceType = 'mobile' | 'tablet' | 'desktop';\r\nexport type OS = 'iOS' | 'Android' | 'Windows' | 'MacOS' | 'Linux' | 'Other';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DeviceDetectorService {\r\n\r\n getDeviceType(): DeviceType {\r\n const ua = navigator.userAgent;\r\n if (/Mobi|Android/i.test(ua)) return 'mobile';\r\n if (/iPad|Tablet/i.test(ua)) return 'tablet';\r\n return 'desktop';\r\n }\r\n\r\n getOS(): OS {\r\n const ua = navigator.userAgent;\r\n if (/iPhone|iPad|iPod/i.test(ua)) return 'iOS';\r\n if (/Android/i.test(ua)) return 'Android';\r\n if (/Win/i.test(ua)) return 'Windows';\r\n if (/Mac/i.test(ua)) return 'MacOS';\r\n if (/Linux/i.test(ua)) return 'Linux';\r\n return 'Other';\r\n }\r\n\r\n isMobile(): boolean { return this.getDeviceType() === 'mobile'; }\r\n isTablet(): boolean { return this.getDeviceType() === 'tablet'; }\r\n isDesktop(): boolean { return this.getDeviceType() === 'desktop'; }\r\n}\r\n","import {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n Injectable,\r\n Type,\r\n} from '@angular/core';\r\nimport { computePosition, offset, flip, shift, autoUpdate } from '@floating-ui/dom';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FloatingUiService {\r\n private activePopup?: {\r\n compRef: ComponentRef<any>;\r\n cleanup: (result: any | null) => void;\r\n resolve: (result: any) => void;\r\n };\r\n\r\n constructor(\r\n private appRef: ApplicationRef,\r\n private injector: EnvironmentInjector\r\n ) { }\r\n\r\n /**\r\n * Opens a floating Angular component near a reference element.\r\n * Ensures only one popup is visible at a time.\r\n */\r\n async open<T, TResult = any>(\r\n reference: HTMLElement,\r\n component: Type<T>,\r\n options?: {\r\n inputs?: Record<string, any>;\r\n placement?: string;\r\n closeOnOutsideClick?: boolean;\r\n closeOnEscape?: boolean;\r\n }\r\n ): Promise<TResult | null> {\r\n // 🔹 If one is already open, close it first\r\n if (this.activePopup) {\r\n this.activePopup.cleanup(null);\r\n this.activePopup.resolve(null);\r\n this.activePopup = undefined;\r\n }\r\n\r\n return new Promise<TResult | null>((resolve) => {\r\n // 1️⃣ Create component\r\n const compRef = createComponent(component, {\r\n environmentInjector: this.injector,\r\n });\r\n\r\n // 2️⃣ Pass close() callback\r\n (compRef.instance as any).close = (result?: TResult) => cleanup(result ?? null);\r\n\r\n // 3️⃣ Apply input bindings\r\n if (options?.inputs) {\r\n Object.entries(options.inputs).forEach(([k, v]) => {\r\n (compRef.instance as any)[k] = v;\r\n });\r\n }\r\n\r\n // 4️⃣ Attach to DOM\r\n document.body.appendChild(compRef.location.nativeElement);\r\n this.appRef.attachView(compRef.hostView);\r\n\r\n // 5️⃣ Floating-UI position logic\r\n const cleanupAutoUpdate = autoUpdate(reference, compRef.location.nativeElement, () => {\r\n computePosition(reference, compRef.location.nativeElement, {\r\n placement: 'bottom-start',\r\n middleware: [offset(2), flip(), shift()],\r\n }).then(({ x, y }) => {\r\n Object.assign(compRef.location.nativeElement.style, {\r\n position: 'absolute',\r\n left: `${x}px`,\r\n top: `${y}px`,\r\n zIndex: '1080',\r\n });\r\n });\r\n });\r\n\r\n // 6️⃣ Close on outside click / ESC\r\n const handleClickOutside = (e: MouseEvent) => {\r\n const el = compRef.location.nativeElement;\r\n const target = e.target as Node;\r\n if (!el.contains(target) && !reference.contains(target)) {\r\n cleanup(null);\r\n }\r\n };\r\n\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') cleanup(null);\r\n };\r\n\r\n if (options?.closeOnOutsideClick !== false) {\r\n setTimeout(() => document.addEventListener('mousedown', handleClickOutside));\r\n }\r\n if (options?.closeOnEscape !== false) {\r\n document.addEventListener('keydown', handleEscape);\r\n }\r\n\r\n // 7️⃣ Cleanup logic\r\n const cleanup = (result: TResult | null) => {\r\n cleanupAutoUpdate();\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n document.removeEventListener('keydown', handleEscape);\r\n this.appRef.detachView(compRef.hostView);\r\n compRef.destroy();\r\n\r\n // release singleton lock\r\n this.activePopup = undefined;\r\n resolve(result);\r\n };\r\n\r\n // 🔸 Track current popup\r\n this.activePopup = { compRef, cleanup, resolve };\r\n });\r\n }\r\n\r\n /**\r\n * Closes the currently active floating popup, if any.\r\n */\r\n closeActive(result?: any) {\r\n if (this.activePopup) {\r\n this.activePopup.cleanup(null);\r\n this.activePopup.resolve(result ?? null);\r\n this.activePopup = undefined;\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, ElementRef, HostListener, input, model, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { computePosition, offset, flip, shift, autoPlacement, hide } from '@floating-ui/dom';\r\n\r\nimport dayjs from \"dayjs\";\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\nimport { DateServiceService } from '../services/date-service.service';\r\nimport { FlexDualCalendarComponent } from \"../flex-dual-calendar/flex-dual-calendar.component\";\r\nimport { FlexCalendarSystemSwitchPosition } from '../core/types/flex-calendar-system-switch-position.type';\r\nimport { DeviceDetectorService } from '../services/device-detector.service';\r\nimport { FloatingUiService } from '../services/floating-ui.service';\r\n\r\n@Component({\r\n selector: 'flex-dual-datepicker',\r\n imports: [CommonModule, FormsModule, FlexDualCalendarComponent],\r\n templateUrl: './flex-dual-datepicker.component.html',\r\n styleUrl: './flex-dual-datepicker.component.css'\r\n})\r\n\r\nexport class FlexDualDatepickerComponent {\r\n\r\n @ViewChild('calendarButton') calendarButton?: ElementRef;\r\n @ViewChild('calendarDropdown') calendarDropdown?: ElementRef;\r\n\r\n @ViewChild(\"inputDiv\") inputDiv?: ElementRef;\r\n @ViewChild(\"modalDiv\") modalDiv?: ElementRef;\r\n // @ViewChild(\"menu\") popupDiv?: ElementRef;\r\n\r\n value = model<any>();\r\n enabled = input<boolean>(true);\r\n cssClass = input<string>();\r\n format = input<string>(\"DD/MM/YYYY\");\r\n\r\n title = input<string>();\r\n calendarSwitchPosition = input<FlexCalendarSystemSwitchPosition>(\"title\");\r\n\r\n //selectedDate is needed to keep the current data for process\r\n selectedDate?: Date;\r\n\r\n calendar: FlexCalendarSystem = \"gregory\";\r\n\r\n inputDate: string = \"\";\r\n isMobile = false;\r\n\r\n\r\n constructor(private dateService: DateServiceService, private deviceDetector: DeviceDetectorService,\r\n private floating: FloatingUiService\r\n ) {\r\n this.isMobile = deviceDetector.isMobile();\r\n effect(() => {\r\n const iso = this.value();\r\n if (iso) {\r\n const date = dayjs(iso);\r\n if (date.isValid()) {\r\n this.selectedDate = date.toDate();\r\n this.inputDate = this.formatDate(this.selectedDate!);\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.selectedDate = undefined;\r\n this.inputDate = \"\";\r\n });\r\n }\r\n\r\n switchCalendar() {\r\n if (this.calendar == \"gregory\") {\r\n this.calendar = \"islamic\";\r\n }\r\n else {\r\n this.calendar = \"gregory\";\r\n }\r\n\r\n this.inputDate = this.formatDate(this.selectedDate!);\r\n }\r\n\r\n onDateSelectedFromCalender(e: Date) {\r\n this.inputDate = this.formatDate(e);\r\n\r\n this.updateDate(e);\r\n this.isOpen = false;\r\n this.updateCalendar();\r\n }\r\n\r\n /** Triggered on blur OR Enter key */\r\n onManualDateEntered() {\r\n if (!this.inputDate) return;\r\n\r\n const parsed = this.parseInputDate(this.inputDate);\r\n if (parsed) {\r\n this.updateDate(parsed);\r\n } else {\r\n console.warn(\"Invalid date entered:\", this.inputDate);\r\n }\r\n }\r\n\r\n /** Reusable update method */\r\n private updateDate(d: Date) {\r\n this.selectedDate = d;\r\n this.inputDate = this.formatDate(d);\r\n this.value.set(d);\r\n }\r\n\r\n formatDate(date: Date): string {\r\n return this.dateService.format(date, this.calendar, this.format());\r\n }\r\n\r\n private parseInputDate(str: string): Date | null | undefined {\r\n /*if the user clear the text in input box then we must accept as the user\r\n wants to remove date from the control so we will return null*/\r\n if (!str)\r\n return null;\r\n\r\n /*if any text entered in input box then we must try to parse it\r\n if parse success the date service will return the date else will return \r\n null or undefined.\r\n in this case since user entered some date may be he/she made mistake\r\n so we will should not show null or empty value, instead we will\r\n return current date or last selected date\r\n */\r\n var parsedDate = this.dateService.parse(str, this.calendar, this.format());\r\n if (parsedDate)\r\n return parsedDate;\r\n\r\n //if parseDate is null this means user entered wrong date, in this case we will return\r\n //the last selected date.\r\n if (this.selectedDate) {\r\n return this.selectedDate;\r\n }\r\n\r\n //if last selected date is also null then we will return current date.\r\n return new Date();\r\n }\r\n\r\n\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (this.inputDiv?.nativeElement.contains(event.target)\r\n || this.modalDiv?.nativeElement.contains(event.target)\r\n || this.calendarDropdown?.nativeElement.contains(event.target)) {\r\n return\r\n }\r\n this.isOpen = false;\r\n this.updateCalendar();\r\n }\r\n\r\n\r\n async openCalendar() {\r\n const button = this.calendarButton?.nativeElement!;\r\n\r\n const result = await this.floating.open(\r\n button,\r\n FlexDualCalendarComponent,\r\n {\r\n placement: 'bottom-start',\r\n inputs: {\r\n // You can pass any props here\r\n initialDate: this.selectedDate,\r\n },\r\n }\r\n );\r\n\r\n if (result) {\r\n //this.selectedDate = result;\r\n this.updateDate(result);\r\n }\r\n }\r\n\r\n\r\n isOpen = false;\r\n\r\n toggleMenu() {\r\n this.isOpen = !this.isOpen;\r\n\r\n if (this.isMobile)\r\n return;\r\n\r\n this.updateCalendar();\r\n }\r\n\r\n updateCalendar() {\r\n const button = this.calendarButton?.nativeElement!;\r\n const calendar = this.calendarDropdown?.nativeElement!;\r\n\r\n computePosition(button, calendar, {\r\n placement: \"bottom\",\r\n strategy: 'fixed',\r\n middleware: [flip(), shift(), hide()]\r\n }).then(({ x, y }) => {\r\n Object.assign(calendar.style, {\r\n left: `${x}px`,\r\n top: `${y}px`,\r\n visibility: !this.isOpen\r\n ? 'hidden'\r\n : 'visible',\r\n });\r\n });\r\n }\r\n}\r\n","@if(calendarSwitchPosition() == 'title'){\r\n<div class=\"d-flex align-items-center gap-1\">\r\n <label>{{ title() }}</label>\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" style=\"cursor: pointer; padding-bottom: 1px; padding-top: 1px;\"\r\n (click)=\"switchCalendar()\">\r\n @if(calendar == 'gregory') {G}\r\n @else{H}\r\n </button>\r\n</div>\r\n\r\n}\r\n<div class=\"input-group flex-nowrap\" #inputDiv>\r\n @if(calendarSwitchPosition() == 'inline'){\r\n <span class=\"input-group-text\" style=\"cursor: pointer;\" (click)=\"switchCalendar()\"> @if(calendar == 'gregory') {G}\r\n @else{H}</span>\r\n }\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n\r\n\r\n <!-- <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toggleCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button> -->\r\n <button #calendarButton class=\"btn btn-outline-secondary\" (click)=\"openCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n\r\n</div>\r\n\r\n\r\n@if(isMobile && isOpen){\r\n<div class=\"modal modal-backdrop\" tabindex=\"-1\" role=\"dialog\" style=\"display: block;\" #modalDiv>\r\n <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"btn btn-danger close ms-auto btn-sm\" (click)=\"isOpen = false\">\r\n <i class=\"bi bi-x\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n\r\n\r\n<div #calendarDropdown class=\"calendar-dropdown\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n</div>","/*\r\n * Public API Surface of flex-ui-controls\r\n */\r\n\r\nexport * from './lib/flex-panel/flex-panel.component';\r\nexport * from './lib/flex-pagination/flex-pagination.component';\r\nexport * from './lib/flex-grid/flex-grid.component';\r\nexport * from './lib/flex-grid/flex-grid-columns';\r\nexport * from './lib/flex-grid/flex-grid-column';\r\nexport * from './lib/flex-combo-datepicker/flex-combo-datepicker.component';\r\nexport * from './lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.component';\r\nexport * from './lib/flex-container/flex-container.component';\r\nexport * from \"./lib/flex-dual-datepicker/flex-dual-datepicker.component\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","hijriFmt","hijriMonthNamesEn","hijriMonthNamesAr","weekDaysEn","weekDaysAr","hijriFromGregorian","compareHijri","findGregorianForHijri","i1.DateServiceService","i1","i2.DeviceDetectorService","i3.FloatingUiService"],"mappings":";;;;;;;;;;;;;MASa,kBAAkB,CAAA;AACrB,IAAA,cAAc;AACd,IAAA,gBAAgB;AAEN,IAAA,IAAI;AAEd,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAEpC,IAAA,WAAA,GAAA,EAAgB;IAEhB,eAAe,GAAA;QACb,IAAI,CAAC,YAAY,EAAE;;AAGnB,QAAA,IAAI,gBAAgB,IAAI,MAAM,EAAE;AAC9B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACnE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC5C;;AAGA,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACvE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC3C,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,OAAO,EAAE;AACV,SAAA,CAAC;IAGJ;IAGA,cAAc,GAAA;QACZ,IAAI,CAAC,YAAY,EAAE;IACrB;IAEQ,YAAY,GAAA;;AAElB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAK,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,GAAG;AAChE,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;AACzC,QAAA,MAAM,SAAS,GAAG,cAAc,GAAG,GAAG;AAEtC,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAA,EAAA,CAAI,CAAC;AAC5E,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC;;IAGnE;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;QAClC;AACA,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;QACpC;IACF;uGAtDW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,iOCT/B,mFAEM,EAAA,MAAA,EAAA,CAAA,8CAAA,CAAA,EAAA,CAAA;;2FDOO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAP9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,WACb,EAAE,EAAA,QAAA,EAAA,mFAAA,EAAA,MAAA,EAAA,CAAA,8CAAA,CAAA,EAAA;wDASO,IAAI,EAAA,CAAA;sBAArB,SAAS;uBAAC,KAAK;gBA2BhB,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,eAAe;;;ME5BlB,uBAAuB,CAAA;AAClC,IAAA,QAAQ,GAAG,KAAK,CAAS,CAAC,oDAAC;IAEjB,WAAW,GAAW,CAAC;IACjC,QAAQ,GAAG,EAAE;IACb,WAAW,GAAG,CAAC;AACL,IAAA,UAAU,GAAG,IAAI,YAAY,EAAc;IAErD,cAAc,GAAG,CAAC;IAClB,SAAS,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAE/B,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE;AACpC,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE;IACvB;;IAIA,cAAc,GAAA;AACZ,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU;AAC/B,QAAA,IAAI,KAAK,GAAG,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QAC1B;AAAO,aAAA,IAAI,KAAK,GAAG,GAAG,EAAE;AACtB,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC;QACzB;aAAO;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,CAAC;QACzB;IACF;AAGA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACzD;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc;AAE/B,QAAA,IAAI,GAAG,KAAK,CAAC,EAAE;AACb,YAAA,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5B;QAEA,MAAM,KAAK,GAAwB,EAAE;AAErC,QAAA,IAAI,KAAK,IAAI,GAAG,EAAE;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD;aAAO;YACL,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/D,YAAA,IAAI,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC;AAEzB,YAAA,IAAI,GAAG,GAAG,KAAK,EAAE;gBACf,GAAG,GAAG,KAAK;AACX,gBAAA,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;YACvB;YAEA,IAAI,KAAK,GAAG,CAAC;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;YACnC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,IAAI,GAAG,GAAG,KAAK;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;QAC3C;AAEA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,UAAU,CAAC,IAAqB,EAAA;QAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ;YAAE;QAC9B,IAAI,IAAI,GAAG,CAAC;YAAE,IAAI,GAAG,CAAC;AACtB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,GAAG,IAAI,CAAC,UAAU;AAClD,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW;YAAE;AAE/B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ;YAC5C,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;AAC9B,SAAA,CAAC;IACJ;AAEA,IAAA,gBAAgB,CAAC,QAAa,EAAA;QAC5B,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;AACzC,QAAA,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;YAAE;AAEhC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ;YAC5C,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC;AACnB,SAAA,CAAC;IACJ;IAEA,SAAS,GAAA,EAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,QAAQ,GAAA,EAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/C,IAAA,QAAQ,GAAA,EAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,IAAA,QAAQ,GAAA,EAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;uGApGzC,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXpC,qoEAwCM,EAAA,MAAA,EAAA,CAAA,mEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED/BM,YAAY,2JAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAExB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAGlB,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,qoEAAA,EAAA,MAAA,EAAA,CAAA,mEAAA,CAAA,EAAA;wDAQ1B,UAAU,EAAA,CAAA;sBAAnB;gBAkBD,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,eAAe;;;AElC/B;MAQa,mBAAmB,CAAA;AAC5B,IAAA,UAAU,GAAG,KAAK,CAAS,EAAE,sDAAC;AAErB,IAAA,KAAK;IACL,KAAK,GAAQ,GAAG;AAEO,IAAA,cAAc;AAChB,IAAA,YAAY;uGAPjC,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,8pBAHlB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAGH,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE;AACb,iBAAA;8BAKY,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAE+B,cAAc,EAAA,CAAA;sBAA7C,YAAY;uBAAC,gBAAgB;gBACA,YAAY,EAAA,CAAA;sBAAzC,YAAY;uBAAC,cAAc;;;ACfhC;MAQa,oBAAoB,CAAA;AACS,IAAA,OAAO;uGADpC,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EACZ,mBAAmB,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAH1B,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAEH,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE;AACb,iBAAA;8BAEyC,OAAO,EAAA,CAAA;sBAA5C,eAAe;uBAAC,mBAAmB;;;MCK3B,iBAAiB,CAAA;AAG5B,IAAA,YAAY,GAAG,KAAK,CAAU,KAAK,wDAAC;AACpC,IAAA,cAAc,GAAG,KAAK,CAAS,CAAC,0DAAC;AAEjC,IAAA,UAAU,GAAG,KAAK,CAAS,EAAE,sDAAC;IAErB,UAAU,GAAU,EAAE;;AAGK,IAAA,WAAW;IAE/C,UAAU,GAAG,MAAM,EAAgC;IACnD,aAAa,GAAG,MAAM,EAAgC;;AAG7C,IAAA,mBAAmB;IAE5B,eAAe,GAAY,KAAK;AAEP,IAAA,UAAU;AAEZ,IAAA,QAAQ;IAE/B,aAAa,GAAW,CAAC,CAAC;IAChB,eAAe,GAAW,CAAC;IAC3B,WAAW,GAAW,EAAE;IAElC,UAAU,GAAG,MAAM,EAAkC;IACrD,WAAW,GAAW,CAAC;IACvB,QAAQ,GAAW,EAAE;AAErB,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE;AAC5C,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE;AAC9C,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE;AACtC,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEA,KAAK,GAAA;AACH,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;IAC9B;AAEA,IAAA,UAAU,CAAC,CAAQ,EAAA;AACjB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,MAAqB;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC;AAC9C,QAAA,IAAI,MAAM;AAAG,YAAA,MAAsB,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;IAClE;IAEA,gBAAgB,GAAA;;;;;;;IAQhB;;;;;;;;;IAYA,aAAa,CAAC,KAAa,EAAE,IAAS,EAAA;AACpC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;AAG1B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACvD;IAEA,UAAU,CAAC,KAAa,EAAE,IAAS,EAAA;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;AAG1B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACpD;AAEA,IAAA,aAAa,CAAC,KAAiB,EAAA;AAC7B,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAClB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW;AACpC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;AAE9B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAG7B;uGAxGW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAWd,oBAAoB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBpC,qsHAiFM,m3BDxEM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKjD,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,WACZ,CAAC,YAAY,EAAE,WAAW,EAAE,uBAAuB,CAAC,EAAA,QAAA,EAAA,qsHAAA,EAAA,MAAA,EAAA,CAAA,4zBAAA,CAAA,EAAA;wDAapD,UAAU,EAAA,CAAA;sBAAlB;gBAGmC,WAAW,EAAA,CAAA;sBAA9C,YAAY;uBAAC,oBAAoB;gBAMzB,mBAAmB,EAAA,CAAA;sBAA3B;gBAIwB,UAAU,EAAA,CAAA;sBAAlC,SAAS;uBAAC,YAAY;gBAEA,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU;;;MEpBV,wBAAwB,CAAA;;IAE1B,SAAS,CAAU;AACnB,IAAA,SAAS;IACT,QAAQ,CAAY;IACpB,OAAO,GAA0B,KAAK;IACtC,UAAU,GAAY,KAAK;IAC3B,aAAa,GAAsB,gBAAgB;IAE5D,WAAW,GAAG,MAAM,EAAO;AAE3B,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,oDAAC;IAEhC,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAO;AACpB,IAAA,MAAM;IAEN,GAAG,GAAgB,EAAE;IACrB,KAAK,GAAgB,EAAE;IACvB,IAAI,GAAgB,EAAE;IAEtB,KAAK,GAAiB,EAAE;IACxB,MAAM,GAAiB,EAAE;IACzB,KAAK,GAAiB,EAAE;IAExB,YAAY,GAAiB,EAAE;IAE/B,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAE1B,IAAA,UAAU,GAAG,KAAK,CAAU,IAAI,sDAAC;IACjC,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;IAC3B,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;IAC5B,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAE3B,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,WAAW,EAAE;AACpB,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,gBAAgB,EAAE;QACvB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,SAAS,EAAE;;;IAGlB;IAEQ,gBAAgB,GAAA;QACtB,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC;AACpG,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACjF;IACF;IAEQ,UAAU,GAAA;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACjJ,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACnE,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACzE;IAEQ,SAAS,GAAA;QACf,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,GAAG,WAAW,GAAG,GAAG;QAC3F,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,GAAG,WAAW;AACrF,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;QACnD;AACA,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACxE;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;AAChC,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;QAChC;IACF;IAEQ,WAAW,GAAA;AACjB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACjF,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACnE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;QACnD;IACF;IAEQ,UAAU,CAAC,KAAa,EAAE,IAAY,EAAA;AAC5C,QAAA,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;QAC5C,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;AAC5F,QAAA,OAAO,EAAE;IACX;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAChF,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACnB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5B;IACF;AAEA,IAAA,gBAAgB,CAAC,IAAU,EAAA;AACzB,QAAA,MAAM,GAAG,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAExD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;;;AAItC,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,OAAO,EAAE;IACjE;uGAvHW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBrC,inDAiDM,EAAA,MAAA,EAAA,CAAA,4MAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrCM,WAAW,yvBAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EACxB,CAAC,WAAW,EAAE,YAAY,CAAC,EAAA,QAAA,EAAA,inDAAA,EAAA,MAAA,EAAA,CAAA,4MAAA,CAAA,EAAA;wDAO3B,SAAS,EAAA,CAAA;sBAAjB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,aAAa,EAAA,CAAA;sBAArB;;;AEZH;AACA;AACA;AACA,MAAMC,UAAQ,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,kCAAkC,EAAE;AAC3E,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,IAAI,EAAE;AACP,CAAA,CAAC;AAEF,MAAMC,mBAAiB,GAAG;AACxB,IAAA,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS;AACxC,IAAA,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS;AAC3C,IAAA,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE;CACxC;AAED,MAAMC,mBAAiB,GAAG;AACxB,IAAA,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY;AACzC,IAAA,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO;AAC9C,IAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;CAC/B;AAED,MAAMC,YAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACpE,MAAMC,YAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAEtD,SAASC,oBAAkB,CAAC,CAAO,EAAA;IACjC,MAAM,KAAK,GAAGL,UAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;;IAEvC,MAAM,GAAG,GAA2B,EAAE;IACtC,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK;AAC5C,IAAA,MAAM,CAAC,GAAG,CAAC,CAAS,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;IACpD,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;AACxD;AAEA,SAASM,cAAY,CAAC,CAAY,EAAE,CAAY,EAAA;AAC9C,IAAA,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;AAAE,QAAA,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACrC,IAAA,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;AAAE,QAAA,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACrC,IAAA,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACpB;AAEA,SAASC,uBAAqB,CAAC,MAAiB,EAAA;AAC9C,IAAA,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;AACvC,IAAA,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;IACzC,MAAM,KAAK,GAAG,QAAQ;AAEtB,IAAA,OAAO,EAAE,IAAI,EAAE,EAAE;AACf,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,GAAGF,oBAAkB,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3CC,cAAY,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;IACvE;AAEA,IAAA,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;IACpB,OAAO,IAAI,EAAE;AACX,QAAA,MAAM,CAAC,GAAGD,oBAAkB,CAAC,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAGC,cAAY,CAAC,CAAC,EAAE,MAAM,CAAC;QACnC,IAAI,GAAG,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC;QACvB,IAAI,GAAG,GAAG,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;QACjE,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;IACnC;AACF;MAUa,sBAAsB,CAAA;;IAExB,KAAK,GAAgB,IAAI;AACxB,IAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;;IAGvC,OAAO,GAAgB,IAAI;IAC3B,OAAO,GAAgB,IAAI;;IAG3B,SAAS,GAAgB,IAAI;AAEtC,IAAA,EAAE,GAAG,MAAM,CAAS,CAAC,8CAAC;AACtB,IAAA,EAAE,GAAG,MAAM,CAAS,CAAC,8CAAC;IAEtB,aAAa,GAAG,CAAC;IACjB,YAAY,GAAG,IAAI;IACnB,SAAS,GAAa,EAAE;AAExB,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAOL,mBAAiB;IAC1B;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAOC,mBAAiB;IAC1B;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,GAAGA,mBAAiB,GAAGD,mBAAiB;IACxE;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,GAAGG,YAAU,GAAGD,YAAU;IAC1D;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAOA,YAAU;IACnB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAOC,YAAU;IACnB;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IACjD;AAEA,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,GAAGC,oBAAkB,CAAC,IAAI,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE;IAC3B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE;IACvB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,CAAC,GAAGA,oBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;YACxC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,EAAE;AACxB,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE;QAC3B;QACA,IAAI,CAAC,cAAc,EAAE;IACvB;IAEA,cAAc,GAAA;AACZ,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAGA,oBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;AACzF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAGA,oBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC3F,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACxB;IACF;IAEA,iBAAiB,GAAA;QACf,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;IACjC;IAEA,YAAY,GAAA;QACV,OAAOE,uBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;IACvE;IAEA,KAAK,GAAA;AACH,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAClC,QAAA,MAAM,MAAM,GAAGF,oBAAkB,CAAC,MAAM,CAAC;AAEzC,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;AAC9B,QAAA,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAEjD,MAAM,MAAM,GAAc,EAAE;AAC5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC3B,YAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;YACzB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC9B,YAAA,MAAM,CAAC,GAAGA,oBAAkB,CAAC,CAAC,CAAC;YAE/B,IAAI,QAAQ,GAAG,KAAK;AACpB,YAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,QAAQ,GAAG,IAAI;AACrE,YAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,QAAQ,GAAG,IAAI;YAErE,MAAM,CAAC,IAAI,CAAC;gBACV,CAAC;gBACD,CAAC;AACD,gBAAA,cAAc,EAAE,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;gBACxD;AACD,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,MAAM;IACf;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAAE;AACrB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;YAAE,CAAC,GAAG,EAAE;AAAE,YAAA,CAAC,EAAE;QAAE;AAC5B,QAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;IACxB;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAAE;AACrB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;AAChC,QAAA,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;YAAE,CAAC,GAAG,CAAC;AAAE,YAAA,CAAC,EAAE;QAAE;AAC5B,QAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AACrB,QAAA,IAAI,CAAC,aAAa,GAAG,CAAC;IACxB;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,MAAM,IAAI,GAAGA,oBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7D,QAAA,OAAO,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAC9E;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AAC9B,QAAA,MAAM,IAAI,GAAGA,oBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7D,QAAA,OAAO,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IAC9E;AAEA,IAAA,OAAO,CAAC,CAAO,EAAA;AACb,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE;QACpB,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW;AACnC,eAAA,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ;eAC3B,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE;IAClC;AAEA,IAAA,UAAU,CAAC,CAAO,EAAA;AAChB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK;YACjB,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAC5C,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACtC,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;IACxC;AAEA,IAAA,MAAM,CAAC,CAAU,EAAA;QACf,IAAI,CAAC,CAAC,QAAQ;YAAE;;AAIhB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AAEQ,IAAA,SAAS,CAAC,CAAO,EAAA;AACvB,QAAA,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7D;uGA1KW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChFnC,67DA4CM,EAAA,MAAA,EAAA,CAAA,wUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED+BM,YAAY,2JAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKxB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBARlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAClB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,67DAAA,EAAA,MAAA,EAAA,CAAA,wUAAA,CAAA,EAAA;wDAO3B,KAAK,EAAA,CAAA;sBAAb;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;;;AElFH;AACA,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;AAC7B,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAE/B;AACA,KAAK,CAAC,sBAAsB,CAAC,SAAS,EAAE,IAAI,qBAAqB,EAAE,CAAC;AAEpE,KAAK,CAAC,sBAAsB,CAAC,SAAS,EAAE,IAAI,mBAAmB,EAAE,CAAC;MASrD,kBAAkB,CAAA;AAK7B,IAAA,GAAG,CAAC,IAAU,EAAA;;;;;;;;;;;;QAiBZ,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,EAAE,YAAY,CAAC;;;;QAI3C,MAAM,UAAU,GAAG,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,EAAY,CAAC;;AAEnG,QAAA,OAAO,CAAC,GAAG,CAAC,+DAA+D,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;;;;AAI7G,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;IA0BjG;AAEA,IAAA,KAAK,CAAC,UAAkB,EAAE,QAA4B,EAAE,MAAc,EAAA;;;QAGpE,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE;YAEhB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC;AACvD,YAAA,OAAO,IAAI;QACb;;;;QAIA,MAAM,UAAU,GAAG,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,EAAY,CAAC;;AAElG,QAAA,OAAO,CAAC,GAAG,CAAC,+DAA+D,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;;;;AAI7G,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC/F,QAAA,OAAO,UAAU,CAAC,MAAM,EAAE;IAC5B;AAEA,IAAA,MAAM,CAAC,IAAU,EAAE,QAA4B,EAAE,MAAc,EAAA;AAC7D,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QACrB,OAAO,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IACpD;uGArFW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA;;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCNY,wBAAwB,CAAA;AAef,IAAA,WAAA;IAdpB,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAO;AAEpB,IAAA,YAAY;IACZ,YAAY,GAAY,KAAK;AAE7B,IAAA,QAAQ,GAAG,KAAK,CAAqB,SAAS,oDAAC;AAC/C,IAAA,OAAO,GAAG,KAAK,CAAU,IAAI,mDAAC;IAC9B,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAC1B,IAAA,MAAM,GAAG,KAAK,CAAS,YAAY,kDAAC;IAEpC,SAAS,GAAW,EAAE;IACtB,QAAQ,GAAG,KAAK;AAGhB,IAAA,WAAA,CAAoB,WAA+B,EAAA;QAA/B,IAAA,CAAA,WAAW,GAAX,WAAW;QAI7B,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;YACxB,IAAI,GAAG,EAAE;AACP,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;AACvB,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE;oBACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrF;gBAEA;YACF;AAEA,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACrB,QAAA,CAAC,CAAC;IACJ;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY;IACxC;AAEA,IAAA,0BAA0B,CAAC,CAAO,EAAA;;AAEhC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;;;;;;;IAUzB;;IAGA,mBAAmB,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QAErB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QAClD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACzB;aAAO;YACL,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC;QACvD;IACF;;AAGQ,IAAA,UAAU,CAAC,CAAO,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;;AAErB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;;IAEnB;AAEA,IAAA,UAAU,CAAC,IAAU,EAAE,QAA4B,EAAE,MAAc,EAAA;AACjE,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;IACxD;;;;;;AAQQ,IAAA,cAAc,CAAC,GAAW,EAAA;QAEhC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,YAAY;QAExD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAE1B,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAE1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AAEvB,QAAA,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAAE,YAAA,OAAO,IAAI;AAI7B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE;QAChC;;;;AAMA,QAAA,OAAO,IAAI;IACb;AAGuB,IAAA,QAAQ;AACR,IAAA,QAAQ;AACR,IAAA,QAAQ;AAG/B,IAAA,eAAe,CAAC,KAAiB,EAAA;QAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;eACjD,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;AAClD,eAAA,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACxD;QACF;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;uGA1HW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAG,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,4kCCjBrC,kxCA+BC,EAAA,MAAA,EAAA,CAAA,6EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnBW,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,+mBAAE,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKhD,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAPpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,WACvB,CAAC,YAAY,EAAE,WAAW,EAAE,sBAAsB,CAAC,EAAA,QAAA,EAAA,kxCAAA,EAAA,MAAA,EAAA,CAAA,6EAAA,CAAA,EAAA;oFAmHrC,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU;gBACE,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU;gBACE,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU;gBAGrB,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;ME/G/B,sBAAsB,CAAA;AASb,IAAA,QAAA;AARM,IAAA,WAAW;;;AAIb,IAAA,SAAS;AACT,IAAA,SAAS;AACR,IAAA,UAAU;AAEnC,IAAA,WAAA,CAAoB,QAAmB,EAAA;QAAnB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAe;IAE3C,eAAe,GAAA;QACb,IAAI,CAAC,aAAa,EAAE;;;IAGtB;IAEA,WAAW,GAAA;;;;IAIX;IAIA,cAAc,GAAA;QACZ,IAAI,CAAC,aAAa,EAAE;IACtB;IAEQ,aAAa,GAAA;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa;AAC3D,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY;AACxC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,sBAAsB,EAAE,YAAY,IAAI,CAAC;AAC7F,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,kBAAkB,EAAE,YAAY,IAAI,CAAC;AAEzF,QAAA,MAAM,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY;AAE5D,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAA,EAAA,CAAI,CAAC;AAClF,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,EAAE,CAAA,EAAG,MAAM,CAAC,WAAW,CAAA,EAAA,CAAI,CAAC;IAC5F;uGAzCW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpBnC,oeAiBM,EAAA,MAAA,EAAA,CAAA,qJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDAM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGX,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;+BACE,gBAAgB,EAAA,OAAA,EAGjB,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,oeAAA,EAAA,MAAA,EAAA,CAAA,qJAAA,CAAA,EAAA;8EAIG,WAAW,EAAA,CAAA;sBAApC,SAAS;uBAAC,aAAa;gBAIA,SAAS,EAAA,CAAA;sBAAhC,YAAY;uBAAC,QAAQ;gBACE,SAAS,EAAA,CAAA;sBAAhC,YAAY;uBAAC,QAAQ;gBACG,UAAU,EAAA,CAAA;sBAAlC,YAAY;uBAAC,SAAS;gBAkBvB,cAAc,EAAA,CAAA;sBADb,YAAY;uBAAC,eAAe;;;AE/B/B;AACA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,kCAAkC,EAAE;AAC3E,IAAA,GAAG,EAAE,SAAS;AACd,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,IAAI,EAAE;AACP,CAAA,CAAC;AAEF,MAAM,iBAAiB,GAAG;AACxB,IAAA,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS;AACxC,IAAA,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS;AAC3C,IAAA,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE;CACxC;AAED,MAAM,iBAAiB,GAAG;AACxB,IAAA,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY;AACzC,IAAA,cAAc,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO;AAC9C,IAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;CAC/B;AAED,MAAM,gBAAgB,GAAG;IACvB,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM;IACtD,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE;CACvD;AAED,MAAM,gBAAgB,GAAG;IACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IACnD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;CACjD;AAED,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;AAC7D,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAEtD,SAAS,kBAAkB,CAAC,CAAO,EAAA;IACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IACvC,MAAM,GAAG,GAA2B,EAAE;IACtC,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK;AAC5C,IAAA,MAAM,CAAC,GAAG,CAAC,CAAS,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;IACpD,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;AACxD;AACA,SAAS,YAAY,CAAC,CAAY,EAAE,CAAY,EAAA;AAC9C,IAAA,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;AAAE,QAAA,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACrC,IAAA,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;AAAE,QAAA,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACrC,IAAA,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;AACpB;AACA,SAAS,qBAAqB,CAAC,MAAiB,EAAA;AAC9C,IAAA,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE;AACvC,IAAA,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE;IACzC,MAAM,KAAK,GAAG,QAAQ;AACtB,IAAA,OAAO,EAAE,IAAI,EAAE,EAAE;AACf,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,KAAK,KAAK,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;IACvE;AACA,IAAA,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;IACpB,OAAO,IAAI,EAAE;AACX,QAAA,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;QACnC,IAAI,GAAG,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC;QACvB,IAAI,GAAG,GAAG,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC;QACjE,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC;IACnC;AACF;AACA,SAAS,SAAS,CAAC,CAAO,EAAA;AACxB,IAAA,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAC7D;MAUa,yBAAyB,CAAA;;AAE3B,IAAA,KAAK;AACJ,IAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;;AAGvC,IAAA,OAAO;AACP,IAAA,OAAO;;IAGP,SAAS,GAAgB,IAAI;;IAG7B,SAAS,GAAuB,SAAS;;AAGlD,IAAA,KAAK;;AAGL,IAAA,IAAI,GAAG,MAAM,CAAqB,SAAS,gDAAC;;AAG5C,IAAA,EAAE,GAAG,MAAM,CAAS,CAAC,8CAAC;AACtB,IAAA,EAAE,GAAG,MAAM,CAAS,CAAC,8CAAC;;AAGtB,IAAA,EAAE,GAAG,MAAM,CAAS,CAAC,8CAAC;AACtB,IAAA,EAAE,GAAG,MAAM,CAAS,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,IAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC;;IAGvB,aAAa,GAAG,CAAC;IACjB,YAAY,GAAG,IAAI;IACnB,SAAS,GAAa,EAAE;;AAGxB,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,iBAAiB,GAAG,iBAAiB;IACxE;AACA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,gBAAgB,GAAG,gBAAgB;IACtE;AACA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,UAAU,GAAG,UAAU;IAC1D;AACA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK;cACnB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC;cACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAC7C;AAEA,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;AACxB,QAAA,MAAM,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;;QAGjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE;QAChC;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE;QAChC;IACF;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE;IACvB;AAEA,IAAA,WAAW,CAAC,OAAY,EAAA;;QAEtB,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,YAAY,IAAI,EAAE;YAClD,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,YAAA,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;YAE/B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;YAE7B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;;AAGjB,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;AAC7B,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE;AAC7B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE;YAChC;iBAAO;AACL,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE;AAC7B,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE;YAChC;QACF;;AAGA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAChE,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;;IAIA,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;AAC7B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE;AACpG,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtG,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE;aAAO;YACL,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;AAC5E,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,YAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACvF;IACF;;AAGA,IAAA,UAAU,CAAC,KAAyB,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;AAChD,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;;AAEvB,YAAA,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE;QAChC;aAAO;;YAEL,MAAM,CAAC,GAAG,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE;QAChC;QACA,IAAI,CAAC,cAAc,EAAE;IACvB;;IAGA,iBAAiB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;YAC7B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;YAC9B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;QACjC;aAAO;YACL,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;YAC9B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;QACjC;IACF;;IAGA,YAAY,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;YAC7B,OAAO,qBAAqB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QACvE;AACA,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9C;;IAGA,KAAK,GAAA;AACH,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAClC,QAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC;;AAGzC,QAAA,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;AAC9B,QAAA,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAEjD,MAAM,MAAM,GAAc,EAAE;AAC5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;AAC3B,YAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;YACzB,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC9B,YAAA,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC;YAE/B,IAAI,QAAQ,GAAG,KAAK;YACpB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,QAAQ,GAAG,IAAI;YAChE,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,QAAQ,GAAG,IAAI;AAEhE,YAAA,MAAM,cAAc,GAClB,IAAI,CAAC,IAAI,EAAE,KAAK;AACd,mBAAG,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE;mBACxC,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;AAEtF,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;QACjD;AACA,QAAA,OAAO,MAAM;IACf;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAAE;AACrB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;AAChC,YAAA,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;gBAAE,CAAC,GAAG,EAAE;AAAE,gBAAA,CAAC,EAAE;YAAE;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;QAC/C;aAAO;AACL,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;AAChC,YAAA,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE;gBAAE,CAAC,GAAG,EAAE;AAAE,gBAAA,CAAC,EAAE;YAAE;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;QAC/C;IACF;IACA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAAE;AACrB,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;AAChC,YAAA,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBAAE,CAAC,GAAG,CAAC;AAAE,gBAAA,CAAC,EAAE;YAAE;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;QAC/C;aAAO;AACL,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE;AAChC,YAAA,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBAAE,CAAC,GAAG,CAAC;AAAE,gBAAA,CAAC,EAAE;YAAE;AAC5B,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC;QAC/C;IACF;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AACpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;;AAErC,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC3E,QAAA,OAAO,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACjE;IACA,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;AACpC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;;AAE3E,QAAA,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,GAAG,aAAa;IAC7B;AAEA,IAAA,OAAO,CAAC,CAAO,EAAA;AACb,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE;QACpB,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW;AACnC,eAAA,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ;eAC3B,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE;IAClC;AACA,IAAA,UAAU,CAAC,CAAO,EAAA;AAChB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK;YACjB,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAC5C,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACtC,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;IACxC;AAEA,IAAA,MAAM,CAAC,CAAU,EAAA;QACf,IAAI,CAAC,CAAC,QAAQ;YAAE;QAChB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;QAEjC,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACpC,QAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AAAE,QAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC7E,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE;QAC/D;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE;QAC/D;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IACxB;uGAvQW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvFtC,+sGAwEM,EAAA,MAAA,EAAA,CAAA,8YAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDWM,YAAY,8BAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,6GAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIxB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAPrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAClB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,WAAW,CAAC,EAAA,QAAA,EAAA,+sGAAA,EAAA,MAAA,EAAA,CAAA,8YAAA,CAAA,EAAA;wDAM3B,KAAK,EAAA,CAAA;sBAAb;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;;;ME9FU,qBAAqB,CAAA;IAEhC,aAAa,GAAA;AACX,QAAA,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS;AAC9B,QAAA,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,QAAQ;AAC7C,QAAA,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,QAAQ;AAC5C,QAAA,OAAO,SAAS;IAClB;IAEA,KAAK,GAAA;AACH,QAAA,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS;AAC9B,QAAA,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,KAAK;AAC9C,QAAA,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,SAAS;AACzC,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,SAAS;AACrC,QAAA,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,OAAO;AACnC,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,OAAO;AACrC,QAAA,OAAO,OAAO;IAChB;IAEA,QAAQ,GAAA,EAAc,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,CAAC,CAAC;IAChE,QAAQ,GAAA,EAAc,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,QAAQ,CAAC,CAAC;IAChE,SAAS,GAAA,EAAc,OAAO,IAAI,CAAC,aAAa,EAAE,KAAK,SAAS,CAAC,CAAC;uGArBvD,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA;;2FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCMrB,iBAAiB,CAAA;AAQlB,IAAA,MAAA;AACA,IAAA,QAAA;AARF,IAAA,WAAW;IAMnB,WAAA,CACU,MAAsB,EACtB,QAA6B,EAAA;QAD7B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACd;AAEJ;;;AAGG;AACH,IAAA,MAAM,IAAI,CACR,SAAsB,EACtB,SAAkB,EAClB,OAKC,EAAA;;AAGD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS;QAC9B;AAEA,QAAA,OAAO,IAAI,OAAO,CAAiB,CAAC,OAAO,KAAI;;AAE7C,YAAA,MAAM,OAAO,GAAG,eAAe,CAAC,SAAS,EAAE;gBACzC,mBAAmB,EAAE,IAAI,CAAC,QAAQ;AACnC,aAAA,CAAC;;AAGD,YAAA,OAAO,CAAC,QAAgB,CAAC,KAAK,GAAG,CAAC,MAAgB,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;;AAG/E,YAAA,IAAI,OAAO,EAAE,MAAM,EAAE;AACnB,gBAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAI;AAC/C,oBAAA,OAAO,CAAC,QAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;AAClC,gBAAA,CAAC,CAAC;YACJ;;YAGA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;YACzD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAGxC,YAAA,MAAM,iBAAiB,GAAG,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAK;gBACnF,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;AACzD,oBAAA,SAAS,EAAE,cAAc;AACzB,oBAAA,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;iBACzC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAI;oBACnB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE;AAClD,wBAAA,QAAQ,EAAE,UAAU;wBACpB,IAAI,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI;wBACd,GAAG,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI;AACb,wBAAA,MAAM,EAAE,MAAM;AACf,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;;AAGF,YAAA,MAAM,kBAAkB,GAAG,CAAC,CAAa,KAAI;AAC3C,gBAAA,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa;AACzC,gBAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAc;AAC/B,gBAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBACvD,OAAO,CAAC,IAAI,CAAC;gBACf;AACF,YAAA,CAAC;AAED,YAAA,MAAM,YAAY,GAAG,CAAC,CAAgB,KAAI;AACxC,gBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ;oBAAE,OAAO,CAAC,IAAI,CAAC;AACvC,YAAA,CAAC;AAED,YAAA,IAAI,OAAO,EAAE,mBAAmB,KAAK,KAAK,EAAE;AAC1C,gBAAA,UAAU,CAAC,MAAM,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;YAC9E;AACA,YAAA,IAAI,OAAO,EAAE,aAAa,KAAK,KAAK,EAAE;AACpC,gBAAA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC;YACpD;;AAGA,YAAA,MAAM,OAAO,GAAG,CAAC,MAAsB,KAAI;AACzC,gBAAA,iBAAiB,EAAE;AACnB,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC;AAC7D,gBAAA,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,YAAY,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACxC,OAAO,CAAC,OAAO,EAAE;;AAGjB,gBAAA,IAAI,CAAC,WAAW,GAAG,SAAS;gBAC5B,OAAO,CAAC,MAAM,CAAC;AACjB,YAAA,CAAC;;YAGD,IAAI,CAAC,WAAW,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAClD,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,MAAY,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;YAC9B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;AACxC,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS;QAC9B;IACF;uGAnHW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCUrB,2BAA2B,CAAA;AA0BlB,IAAA,WAAA;AAAyC,IAAA,cAAA;AACnD,IAAA,QAAA;AAzBmB,IAAA,cAAc;AACZ,IAAA,gBAAgB;AAExB,IAAA,QAAQ;AACR,IAAA,QAAQ;;IAG/B,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAO;AACpB,IAAA,OAAO,GAAG,KAAK,CAAU,IAAI,mDAAC;IAC9B,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AAC1B,IAAA,MAAM,GAAG,KAAK,CAAS,YAAY,kDAAC;IAEpC,KAAK,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;AACvB,IAAA,sBAAsB,GAAG,KAAK,CAAmC,OAAO,kEAAC;;AAGzE,IAAA,YAAY;IAEZ,QAAQ,GAAuB,SAAS;IAExC,SAAS,GAAW,EAAE;IACtB,QAAQ,GAAG,KAAK;AAGhB,IAAA,WAAA,CAAoB,WAA+B,EAAU,cAAqC,EACxF,QAA2B,EAAA;QADjB,IAAA,CAAA,WAAW,GAAX,WAAW;QAA8B,IAAA,CAAA,cAAc,GAAd,cAAc;QACjE,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAEhB,QAAA,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE;QACzC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;YACxB,IAAI,GAAG,EAAE;AACP,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;AACvB,gBAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE;oBACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAa,CAAC;gBACtD;gBAEA;YACF;AAEA,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAC7B,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACrB,QAAA,CAAC,CAAC;IACJ;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;QAC3B;aACK;AACH,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;QAC3B;QAEA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAa,CAAC;IACtD;AAEA,IAAA,0BAA0B,CAAC,CAAO,EAAA;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAEnC,QAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,cAAc,EAAE;IACvB;;IAGA,mBAAmB,GAAA;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE;QAErB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;QAClD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACzB;aAAO;YACL,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC;QACvD;IACF;;AAGQ,IAAA,UAAU,CAAC,CAAO,EAAA;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACnB;AAEA,IAAA,UAAU,CAAC,IAAU,EAAA;AACnB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;IACpE;AAEQ,IAAA,cAAc,CAAC,GAAW,EAAA;AAChC;AAC8D;AAC9D,QAAA,IAAI,CAAC,GAAG;AACN,YAAA,OAAO,IAAI;AAEb;;;;;;AAME;AACF,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC1E,QAAA,IAAI,UAAU;AACZ,YAAA,OAAO,UAAU;;;AAInB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO,IAAI,CAAC,YAAY;QAC1B;;QAGA,OAAO,IAAI,IAAI,EAAE;IACnB;AAKA,IAAA,eAAe,CAAC,KAAiB,EAAA;QAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;eACjD,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM;AAClD,eAAA,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAChE;QACF;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,cAAc,EAAE;IACvB;AAGA,IAAA,MAAM,YAAY,GAAA;AAChB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,aAAc;AAElD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CACrC,MAAM,EACN,yBAAyB,EACzB;AACE,YAAA,SAAS,EAAE,cAAc;AACzB,YAAA,MAAM,EAAE;;gBAEN,WAAW,EAAE,IAAI,CAAC,YAAY;AAC/B,aAAA;AACF,SAAA,CACF;QAED,IAAI,MAAM,EAAE;;AAEV,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACzB;IACF;IAGA,MAAM,GAAG,KAAK;IAEd,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;QAE1B,IAAI,IAAI,CAAC,QAAQ;YACf;QAEF,IAAI,CAAC,cAAc,EAAE;IACvB;IAEA,cAAc,GAAA;AACZ,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,aAAc;AAClD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,aAAc;AAEtD,QAAA,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE;AAChC,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,QAAQ,EAAE,OAAO;YACjB,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE;SACrC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAI;AACnB,YAAA,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE;gBAC5B,IAAI,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI;gBACd,GAAG,EAAE,CAAA,EAAG,CAAC,CAAA,EAAA,CAAI;AACb,gBAAA,UAAU,EAAE,CAAC,IAAI,CAAC;AAChB,sBAAE;AACF,sBAAE,SAAS;AACd,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;uGApLW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAAE,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,i2CCpBxC,kvEAoDM,EAAA,MAAA,EAAA,CAAA,mPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDrCM,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,+mBAAE,yBAAyB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKnD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,WACvB,CAAC,YAAY,EAAE,WAAW,EAAE,yBAAyB,CAAC,EAAA,QAAA,EAAA,kvEAAA,EAAA,MAAA,EAAA,CAAA,mPAAA,CAAA,EAAA;kJAOlC,cAAc,EAAA,CAAA;sBAA1C,SAAS;uBAAC,gBAAgB;gBACI,gBAAgB,EAAA,CAAA;sBAA9C,SAAS;uBAAC,kBAAkB;gBAEN,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU;gBACE,QAAQ,EAAA,CAAA;sBAA9B,SAAS;uBAAC,UAAU;gBAiHrB,eAAe,EAAA,CAAA;sBADd,YAAY;uBAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;;;AE1I5C;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"dcsl-flex-ui.mjs","sources":["../../../projects/flex-ui-controls/src/lib/flex-panel/flex-panel.component.ts","../../../projects/flex-ui-controls/src/lib/flex-panel/flex-panel.component.html","../../../projects/flex-ui-controls/src/lib/flex-pagination/flex-pagination.component.ts","../../../projects/flex-ui-controls/src/lib/flex-pagination/flex-pagination.component.html","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid-column.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid-columns.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid.component.ts","../../../projects/flex-ui-controls/src/lib/flex-grid/flex-grid.component.html","../../../projects/flex-ui-controls/src/lib/flex-combo-datepicker/flex-combo-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-combo-datepicker/flex-combo-datepicker.component.html","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-calendar/hijri-calendar.component.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-calendar/hijri-calendar.component.html","../../../projects/flex-ui-controls/src/lib/services/date-service.service.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.component.html","../../../projects/flex-ui-controls/src/lib/flex-container/flex-container.component.ts","../../../projects/flex-ui-controls/src/lib/flex-container/flex-container.component.html","../../../projects/flex-ui-controls/src/lib/flex-dual-calendar/flex-dual-calendar.component.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-calendar/flex-dual-calendar.component.html","../../../projects/flex-ui-controls/src/lib/services/device-detector.service.ts","../../../projects/flex-ui-controls/src/lib/services/floating-ui.service.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-datepicker/flex-dual-datepicker.component.ts","../../../projects/flex-ui-controls/src/lib/flex-dual-datepicker/flex-dual-datepicker.component.html","../../../projects/flex-ui-controls/src/public-api.ts","../../../projects/flex-ui-controls/src/dcsl-flex-ui.ts"],"sourcesContent":["import { Component, ElementRef, HostListener, inject, Renderer2, ViewChild } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'flex-panel',\r\n imports: [],\r\n templateUrl: './flex-panel.component.html',\r\n styleUrl: './flex-panel.component.css'\r\n})\r\n\r\nexport class FlexPanelComponent {\r\n private resizeObserver?: ResizeObserver;\r\n private mutationObserver?: MutationObserver;\r\n\r\n @ViewChild(\"abc\") comp?: ElementRef<HTMLDivElement>;\r\n\r\n private renderer = inject(Renderer2);\r\n\r\n constructor() { }\r\n\r\n ngAfterViewInit() {\r\n this.adjustHeight();\r\n\r\n // ✅ Recalculate on window resize\r\n if ('ResizeObserver' in window) {\r\n this.resizeObserver = new ResizeObserver(() => this.adjustHeight());\r\n this.resizeObserver.observe(document.body);\r\n }\r\n\r\n // ✅ Also observe DOM changes that may shift this element\r\n this.mutationObserver = new MutationObserver(() => this.adjustHeight());\r\n this.mutationObserver.observe(document.body, {\r\n attributes: true,\r\n childList: true,\r\n subtree: true\r\n });\r\n\r\n\r\n }\r\n\r\n @HostListener('window:resize')\r\n onWindowResize() {\r\n this.adjustHeight();\r\n }\r\n\r\n private adjustHeight() {\r\n // const host: HTMLElement = this.el.nativeElement;\r\n const top = this.comp!.nativeElement.getBoundingClientRect().top;\r\n const viewportHeight = window.innerHeight;\r\n const newHeight = viewportHeight - top;\r\n\r\n this.renderer.setStyle(this.comp?.nativeElement, 'height', `${newHeight}px`);\r\n this.renderer.setStyle(this.comp?.nativeElement, 'width', '100%');\r\n\r\n // console.log(host);\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n }\r\n if (this.mutationObserver) {\r\n this.mutationObserver.disconnect();\r\n }\r\n }\r\n}\r\n","<div class=\"stretch-container\" #abc>\r\n <ng-content></ng-content>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, HostListener, OnInit, input, effect } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexPaging } from './flex_page';\r\n\r\n@Component({\r\n selector: 'flex-pagination',\r\n templateUrl: './flex-pagination.component.html',\r\n styleUrls: ['./flex-pagination.component.css'],\r\n imports: [CommonModule, FormsModule]\r\n})\r\nexport class FlexPaginationComponent implements OnInit {\r\n rowCount = input<number>(0);\r\n\r\n protected _totalItems: number = 0;\r\n pageSize = 50;\r\n currentPage = 1;\r\n @Output() pageChange = new EventEmitter<FlexPaging>();\r\n\r\n maxPagesToShow = 5;\r\n pageSizes = [50, 100, 200, 500];\r\n\r\n constructor() {\r\n effect(() => {\r\n this.currentPage = 1;\r\n this._totalItems = this.rowCount();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.updateMaxPages();\r\n }\r\n\r\n // Update maxPagesToShow based on screen size\r\n @HostListener('window:resize')\r\n updateMaxPages() {\r\n const width = window.innerWidth;\r\n if (width < 576) {\r\n this.maxPagesToShow = 1; // only current page\r\n } else if (width < 768) {\r\n this.maxPagesToShow = 3;\r\n } else {\r\n this.maxPagesToShow = 5;\r\n }\r\n }\r\n\r\n\r\n get totalPages(): number {\r\n return Math.ceil(this._totalItems / this.pageSize) || 1;\r\n }\r\n\r\n get pages(): (number | string)[] {\r\n const total = this.totalPages;\r\n const max = this.maxPagesToShow;\r\n\r\n if (max === 1) {\r\n return [this.currentPage]; // mobile: only current page\r\n }\r\n\r\n const pages: (number | string)[] = [];\r\n\r\n if (total <= max) {\r\n for (let i = 1; i <= total; i++) pages.push(i);\r\n } else {\r\n let start = Math.max(this.currentPage - Math.floor(max / 2), 1);\r\n let end = start + max - 1;\r\n\r\n if (end > total) {\r\n end = total;\r\n start = end - max + 1;\r\n }\r\n\r\n if (start > 1) pages.push(1, '...');\r\n for (let i = start; i <= end; i++) pages.push(i);\r\n if (end < total) pages.push('...', total);\r\n }\r\n\r\n return pages;\r\n }\r\n\r\n changePage(page: number | string) {\r\n if (typeof page !== 'number') return;\r\n if (page < 1) page = 1;\r\n if (page > this.totalPages) page = this.totalPages;\r\n if (page === this.currentPage) return;\r\n\r\n this.currentPage = page;\r\n this.pageChange.emit({\r\n skip: (this.currentPage - 1) * this.pageSize,\r\n take: this.pageSize,\r\n pageSize: this.pageSize,\r\n currentPage: this.currentPage,\r\n });\r\n }\r\n\r\n onPageSizeChange(pageSize: any) {\r\n var value = Number(pageSize.target.value);\r\n if (isNaN(value) || value <= 0) return;\r\n\r\n this.pageSize = value;\r\n this.pageChange.emit({\r\n skip: (this.currentPage - 1) * this.pageSize,\r\n take: this.pageSize,\r\n pageSize: this.pageSize,\r\n currentPage: this.currentPage\r\n });\r\n }\r\n\r\n firstPage() { this.changePage(1); }\r\n lastPage() { this.changePage(this.totalPages); }\r\n prevPage() { this.changePage(this.currentPage - 1); }\r\n nextPage() { this.changePage(this.currentPage + 1); }\r\n}\r\n","<div class=\"d-flex justify-content-start align-items-center\">\r\n <!-- Pagination -->\r\n <div class=\"overflow-auto\">\r\n <ul class=\"pagination justify-content-center flex-nowrap mb-0\">\r\n <!-- First / Prev (hide First on xs) -->\r\n <li class=\"page-item d-none d-sm-block\" [class.disabled]=\"currentPage === 1\">\r\n <button class=\"page-link\" (click)=\"firstPage()\"><i class=\"bi bi-chevron-double-left\"></i></button>\r\n </li>\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === 1\">\r\n <button class=\"page-link\" (click)=\"prevPage()\"><i class=\"bi bi-chevron-left\"></i></button>\r\n </li>\r\n\r\n <!-- Page numbers -->\r\n <li class=\"page-item\" *ngFor=\"let page of pages\" [class.active]=\"page === currentPage\"\r\n [class.disabled]=\"page === '...'\">\r\n <button class=\"page-link\" [disabled]=\"page === '...'\" (click)=\"changePage(page)\">\r\n {{ page }}\r\n </button>\r\n </li>\r\n\r\n <!-- Next / Last (hide Last on xs) -->\r\n <li class=\"page-item\" [class.disabled]=\"currentPage === totalPages\">\r\n <button class=\"page-link\" (click)=\"nextPage()\"><i class=\"bi bi-chevron-right\"></i></button>\r\n </li>\r\n <li class=\"page-item d-none d-sm-block\" [class.disabled]=\"currentPage === totalPages\">\r\n <button class=\"page-link\" (click)=\"lastPage()\"><i class=\"bi bi-chevron-double-right\"></i></button>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <!-- Page Size Dropdown -->\r\n <div class=\"ms-2\">\r\n <label class=\"me-2\">{{ \"page-size\" }}</label>\r\n <select class=\"form-select d-inline-block w-auto\" [(ngModel)]=\"pageSize\" (change)=\"onPageSizeChange($event)\">\r\n <option *ngFor=\"let size of pageSizes\" [value]=\"size\">{{ size }}</option>\r\n </select>\r\n </div>\r\n <div class=\"total-count ms-2\">\r\n {{ \"total-count\" }}: {{ _totalItems }}\r\n </div>\r\n</div>","// grid-column.component.ts\r\nimport { Component, ContentChild, TemplateRef, Input, input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'flex-grid-column',\r\n template: ''\r\n})\r\n\r\nexport class FlexColumnComponent {\r\n headerText = input<string>('');\r\n\r\n @Input() field!: string;\r\n @Input() width: any = 120;\r\n\r\n @ContentChild('headerTemplate') headerTemplate!: TemplateRef<any>;\r\n @ContentChild('cellTemplate') cellTemplate!: TemplateRef<any>;\r\n\r\n\r\n}\r\n","// grid-columns.component.ts\r\nimport { Component, ContentChildren, QueryList } from '@angular/core';\r\nimport { FlexColumnComponent } from './flex-grid-column';\r\n\r\n@Component({\r\n selector: 'flex-grid-columns',\r\n template: ''\r\n})\r\nexport class FlexColumnsComponent {\r\n @ContentChildren(FlexColumnComponent) columns!: QueryList<FlexColumnComponent>;\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, Component, ContentChild, effect, ElementRef, Input, input, output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexPaginationComponent } from \"../flex-pagination/flex-pagination.component\";\r\nimport { FlexColumnsComponent } from './flex-grid-columns';\r\nimport { FlexPaging } from '../flex-pagination/flex_page';\r\n\r\n@Component({\r\n selector: 'flex-grid',\r\n imports: [CommonModule, FormsModule, FlexPaginationComponent],\r\n templateUrl: './flex-grid.component.html',\r\n styleUrl: './flex-grid.component.css'\r\n})\r\n\r\nexport class FlexGridComponent implements AfterViewInit {\r\n\r\n\r\n enablePaging = input<boolean>(false);\r\n totalDataCount = input<number>(0);\r\n\r\n tableClass = input<string>('');\r\n\r\n @Input() dataSource: any[] = [];\r\n\r\n // @ContentChildren(GridColumnComponent) columns!: QueryList<GridColumnComponent>;\r\n @ContentChild(FlexColumnsComponent) gridColumns?: FlexColumnsComponent;\r\n\r\n rowClicked = output<{ index: number, data: any }>();\r\n rowDblClicked = output<{ index: number, data: any }>();\r\n\r\n // Optional: custom template when no data\r\n @Input() emptyRecordTemplate?: TemplateRef<any>;\r\n\r\n isPagingEnabled: boolean = false;\r\n\r\n @ViewChild('gridHeader') gridHeader!: ElementRef;\r\n\r\n @ViewChild('gridBody') gridBody!: ElementRef;\r\n\r\n selectedIndex: number = -1;\r\n protected _totalDataCount: number = 0;\r\n protected _tableClass: string = \"\";\r\n\r\n pageChange = output<{ skip: number, take: number }>();\r\n currentPage: number = 1;\r\n pageSize: number = 50;\r\n\r\n constructor() {\r\n effect(() => {\r\n this.isPagingEnabled = this.enablePaging();\r\n });\r\n\r\n effect(() => {\r\n this._totalDataCount = this.totalDataCount();\r\n });\r\n\r\n effect(() => {\r\n this._tableClass = this.tableClass();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.syncColumnWidths();\r\n }\r\n\r\n check() {\r\n console.log(this.gridColumns);\r\n console.log(this.dataSource);\r\n }\r\n\r\n syncScroll(e: Event) {\r\n const body = e.target as HTMLElement;\r\n const header = this.gridHeader?.nativeElement; //document.querySelector('.grid-header');\r\n if (header) (header as HTMLElement).scrollLeft = body.scrollLeft;\r\n }\r\n\r\n syncColumnWidths() {\r\n // const headerCols = this.gridHeader.nativeElement.querySelectorAll('th');\r\n // const bodyCols = this.gridBody.nativeElement.querySelectorAll('tr:first-child td');\r\n\r\n // bodyCols.forEach((td: HTMLElement, i: number) => {\r\n // const width = td.getBoundingClientRect().width;\r\n // (headerCols[i] as HTMLElement).style.width = width + 'px';\r\n // });\r\n }\r\n\r\n // syncColumnWidths() {\r\n // const headerCols = document.querySelectorAll('.grid-header th');\r\n // const bodyCols = this.gridBody.nativeElement.querySelectorAll('tbody tr:first-child td');\r\n\r\n // bodyCols.forEach((col: HTMLElement, i: number) => {\r\n // const width = col.getBoundingClientRect().width;\r\n // (headerCols[i] as HTMLElement).style.width = width + 'px';\r\n // });\r\n // }\r\n\r\n onRowDblClick(index: number, data: any) {\r\n this.selectedIndex = index;\r\n // console.log(index);\r\n\r\n this.rowDblClicked.emit({ index: index, data: data });\r\n }\r\n\r\n onRowClick(index: number, data: any) {\r\n this.selectedIndex = index;\r\n // console.log(index);\r\n\r\n this.rowClicked.emit({ index: index, data: data });\r\n }\r\n\r\n onPageChanged(event: FlexPaging) {\r\n console.log(event);\r\n this.currentPage = event.currentPage;\r\n this.pageSize = event.pageSize;\r\n\r\n this.pageChange.emit(event);\r\n\r\n\r\n }\r\n\r\n}\r\n","<div class=\"grid-container\">\r\n <!-- Header row in its own div -->\r\n <div class=\"grid-scroll\">\r\n <div class=\"grid-container-sub\">\r\n <div class=\"grid-header\" #gridHeader>\r\n <table class=\"grid-table table table-bordered table-sm mb-0 header-table\">\r\n <colgroup>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <col [style.width.px]=\"col.width\" [style.maxWidth.px]=\"col.width\">\r\n }\r\n </colgroup>\r\n <thead>\r\n <tr>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <th class=\"text-truncate\">\r\n @if (col.headerTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.headerTemplate\"></ng-container>\r\n }\r\n @else {\r\n <!-- <ng-template #defaultHeader><span [textContent]=\"col.field\"></span></ng-template> -->\r\n <!-- <span [textContent]=\"col.field\"></span> -->\r\n {{ col.headerText() }}\r\n }\r\n </th>\r\n }\r\n\r\n <!-- <th style=\"width: 20px;\"></th> -->\r\n </tr>\r\n </thead>\r\n\r\n </table>\r\n </div>\r\n <!-- Scrollable body in another div -->\r\n <div #gridBody class=\"grid-body\" (scroll)=\"syncScroll($event)\">\r\n @if(dataSource.length > 0){\r\n <table class=\"grid-table table table-bordered table-sm table-hover mb-0\" [ngClass]=\"_tableClass\">\r\n\r\n <colgroup>\r\n @for (col of gridColumns?.columns; track $index) {\r\n <col [style.width.px]=\"col.width\" [style.maxWidth.px]=\"col.width\">\r\n }\r\n </colgroup>\r\n <tbody>\r\n @for (row of dataSource; track $index; let i = $index) {\r\n <tr [class.table-active]=\"$index === selectedIndex\" (click)=\"onRowClick($index, row)\"\r\n (dblclick)=\"onRowDblClick($index, row)\">\r\n @for (col of gridColumns?.columns; track $index) {\r\n <td>\r\n @if (col.cellTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row,\r\n rowIndex: (currentPage - 1) * pageSize + i,\r\n localIndex: i }\">\r\n </ng-container>\r\n } @else {\r\n <!-- {{ row[col.field] }} -->\r\n <span [textContent]=\"row[col.field]\"></span>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n @else {\r\n No records found\r\n }\r\n\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n @if(isPagingEnabled){\r\n <!-- Footer -->\r\n <div class=\"grid-footer\">\r\n <flex-pagination [rowCount]=\"_totalDataCount\" (pageChange)=\"onPageChanged($event)\"></flex-pagination>\r\n </div>\r\n }\r\n\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, Output, EventEmitter, OnInit, model, effect, input, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\ninterface DateOption {\r\n value: number | '';\r\n name: string;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'flex-combo-datepicker',\r\n imports: [FormsModule, CommonModule],\r\n templateUrl: './flex-combo-datepicker.component.html',\r\n styleUrls: ['./flex-combo-datepicker.component.css']\r\n})\r\n\r\nexport class ComboDatePickerComponent implements OnInit {\r\n // @Input() value: any = null; // ISO string\r\n @Input() ngMinDate?: string; // ISO string\r\n @Input() ngMaxDate?: string;\r\n @Input() ngMonths?: string[]; // optional month names\r\n @Input() ngOrder: 'dmy' | 'mdy' | 'ymd' = 'dmy';\r\n @Input() ngDisabled: boolean = false;\r\n @Input() ngPlaceholder: string | string[] = 'Day,Month,Year';\r\n\r\n dateChanged = output<any>();\r\n\r\n disabled = input<boolean>(false);\r\n\r\n value = model<any>();\r\n _value: any;\r\n\r\n day: number | '' = '';\r\n month: number | '' = '';\r\n year: number | '' = '';\r\n\r\n dates: DateOption[] = [];\r\n months: DateOption[] = [];\r\n years: DateOption[] = [];\r\n\r\n placeHolders: DateOption[] = [];\r\n\r\n cssClass = input<string>();\r\n\r\n showHeader = input<boolean>(true);\r\n dateTitle = input<string>();\r\n monthTitle = input<string>();\r\n yearTitle = input<string>();\r\n\r\n constructor() {\r\n effect(() => {\r\n this._value = this.value();\r\n this.initModel();\r\n this.updateDates();\r\n })\r\n }\r\n\r\n ngOnInit() {\r\n this.initPlaceholders();\r\n this.initMonths();\r\n this.initYears();\r\n // this.initModel();\r\n // this.updateDates();\r\n }\r\n\r\n private initPlaceholders() {\r\n let holders = Array.isArray(this.ngPlaceholder) ? this.ngPlaceholder : this.ngPlaceholder.split(',');\r\n if (holders.length === 3) {\r\n this.placeHolders = holders.map(h => ({ value: '', name: h, disabled: false }));\r\n }\r\n }\r\n\r\n private initMonths() {\r\n const monthNames = this.ngMonths && this.ngMonths.length === 12 ? this.ngMonths : ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];\r\n this.months = monthNames.map((name, i) => ({ value: i + 1, name }));\r\n if (this.placeHolders.length) this.months.unshift(this.placeHolders[1]);\r\n }\r\n\r\n private initYears() {\r\n const currentYear = new Date().getFullYear();\r\n const minYear = this.ngMinDate ? new Date(this.ngMinDate).getFullYear() : currentYear - 100;\r\n const maxYear = this.ngMaxDate ? new Date(this.ngMaxDate).getFullYear() : currentYear;\r\n this.years = [];\r\n for (let y = minYear; y <= maxYear; y++) {\r\n this.years.push({ value: y, name: y.toString() });\r\n }\r\n if (this.placeHolders.length) this.years.unshift(this.placeHolders[2]);\r\n }\r\n\r\n private initModel() {\r\n if (this.value) {\r\n const date = new Date(this.value());\r\n this.day = date.getDate();\r\n this.month = date.getMonth() + 1;\r\n this.year = date.getFullYear();\r\n }\r\n }\r\n\r\n private updateDates() {\r\n const max = this.month && this.year ? this.getMaxDate(this.month, this.year) : 31;\r\n this.dates = [];\r\n if (this.placeHolders.length) this.dates.push(this.placeHolders[0]);\r\n for (let i = 1; i <= max; i++) {\r\n this.dates.push({ value: i, name: i.toString() });\r\n }\r\n }\r\n\r\n private getMaxDate(month: number, year: number) {\r\n if ([4, 6, 9, 11].includes(month)) return 30;\r\n if (month === 2) return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0) ? 29 : 28;\r\n return 31;\r\n }\r\n\r\n onChange() {\r\n this.updateDates();\r\n if (this.day && this.month && this.year) {\r\n const iso = this.toLocalISOString(new Date(this.year, this.month - 1, this.day));\r\n this.value.set(iso);\r\n this.dateChanged.emit(iso);\r\n }\r\n }\r\n\r\n toLocalISOString(date: Date): string {\r\n const pad = (n: number) => n.toString().padStart(2, '0');\r\n\r\n const year = date.getFullYear();\r\n const month = pad(date.getMonth() + 1);\r\n const day = pad(date.getDate());\r\n const hours = pad(date.getHours());\r\n const minutes = pad(date.getMinutes());\r\n const seconds = pad(date.getSeconds());\r\n //const ms = date.getMilliseconds().toString().padStart(3, '0');\r\n\r\n //return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${ms}`;\r\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}`;\r\n }\r\n}\r\n","<div class=\"row g-1\">\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (dateTitle()) {\r\n {{ dateTitle() }}\r\n }\r\n @else {\r\n Date\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"day\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select ' + cssClass()\">\r\n <option *ngFor=\"let d of dates\" [value]=\"d.value\">{{ d.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (monthTitle()) {\r\n {{ monthTitle() }}\r\n }\r\n @else {\r\n Month\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"month\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select ' + cssClass()\">\r\n <option *ngFor=\"let m of months\" [value]=\"m.value\">{{ m.name }}</option>\r\n </select>\r\n </div>\r\n <div class=\"col-4\">\r\n @if(showHeader()){\r\n <label>\r\n @if (yearTitle()) {\r\n {{ yearTitle() }}\r\n }\r\n @else {\r\n Year\r\n }\r\n </label>\r\n }\r\n <select [(ngModel)]=\"year\" (ngModelChange)=\"onChange()\" [disabled]=\"ngDisabled\"\r\n [class]=\"'form-select year ' + cssClass()\">\r\n <option *ngFor=\"let y of years\" [value]=\"y.value\">{{ y.name }}</option>\r\n </select>\r\n </div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nexport type HijriDate = { hy: number; hm: number; hd: number };\r\ntype DayCell = {\r\n g: Date;\r\n h: HijriDate;\r\n inCurrentMonth: boolean;\r\n disabled: boolean;\r\n};\r\n\r\n//\r\n// ✅ Umm al-Qura Hijri calendar with Latin digits\r\n//\r\nconst hijriFmt = new Intl.DateTimeFormat('en-u-ca-islamic-umalqura-nu-latn', {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric'\r\n});\r\n\r\nconst hijriMonthNamesEn = [\r\n 'Muharram', 'Safar', 'Rabi I', 'Rabi II',\r\n 'Jumada I', 'Jumada II', 'Rajab', 'Sha’ban',\r\n 'Ramadan', 'Shawwal', 'Dhu al-Qi’dah', 'Dhu al-Hijjah'\r\n];\r\n\r\nconst hijriMonthNamesAr = [\r\n 'محرم', 'صفر', 'ربيع الأول', 'ربيع الآخر',\r\n 'جمادى الأولى', 'جمادى الآخرة', 'رجب', 'شعبان',\r\n 'رمضان', 'شوال', 'ذو القعدة', 'ذو الحجة'\r\n];\r\n\r\nconst weekDaysEn = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\r\nconst weekDaysAr = ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\r\n\r\nfunction hijriFromGregorian(g: Date): HijriDate {\r\n const parts = hijriFmt.formatToParts(g);\r\n //console.log(parts);\r\n const map: Record<string, string> = {};\r\n for (const p of parts) map[p.type] = p.value;\r\n const n = (k: string) => parseInt(map[k] ?? '0', 10);\r\n return { hy: n('year'), hm: n('month'), hd: n('day') };\r\n}\r\n\r\nfunction compareHijri(a: HijriDate, b: HijriDate) {\r\n if (a.hy !== b.hy) return a.hy - b.hy;\r\n if (a.hm !== b.hm) return a.hm - b.hm;\r\n return a.hd - b.hd;\r\n}\r\n\r\nfunction findGregorianForHijri(target: HijriDate): Date {\r\n let lo = new Date(1937, 0, 1).getTime();\r\n let hi = new Date(2076, 11, 31).getTime();\r\n const dayMs = 86400000;\r\n\r\n while (lo <= hi) {\r\n const mid = Math.floor((lo + hi) / 2);\r\n const h = hijriFromGregorian(new Date(mid));\r\n compareHijri(h, target) < 0 ? (lo = mid + dayMs) : (hi = mid - dayMs);\r\n }\r\n\r\n let d = new Date(lo);\r\n while (true) {\r\n const h = hijriFromGregorian(d);\r\n const cmp = compareHijri(h, target);\r\n if (cmp === 0) return d;\r\n if (cmp > 0) throw new Error('Hijri date out of supported range');\r\n d = new Date(d.getTime() + dayMs);\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'app-hijri-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: \"./hijri-calendar.component.html\",\r\n styleUrl: \"./hijri-calendar.component.css\"\r\n})\r\n\r\nexport class HijriCalendarComponent {\r\n /** Two-way bound selected date (Gregorian Date) */\r\n @Input() value: Date | null = null;\r\n @Output() valueChange = new EventEmitter<Date>();\r\n\r\n /** Optional min/max restrictions (Gregorian dates) */\r\n @Input() minDate: Date | null = null;\r\n @Input() maxDate: Date | null = null;\r\n\r\n /** Month + weekday language: 'en' or 'ar' */\r\n @Input() monthLang: 'en' | 'ar' = 'ar';\r\n\r\n hy = signal<number>(0);\r\n hm = signal<number>(0);\r\n\r\n selectedMonth = 1;\r\n selectedYear = 1447;\r\n yearRange: number[] = [];\r\n\r\n get hijriMonthsEn() {\r\n return hijriMonthNamesEn;\r\n }\r\n\r\n get hijriMonthsAr() {\r\n return hijriMonthNamesAr;\r\n }\r\n\r\n get hijriMonths() {\r\n return this.monthLang === 'ar' ? hijriMonthNamesAr : hijriMonthNamesEn;\r\n }\r\n\r\n get weekDays() {\r\n return this.monthLang === 'ar' ? weekDaysAr : weekDaysEn;\r\n }\r\n\r\n get weekDaysEn() {\r\n return weekDaysEn;\r\n }\r\n\r\n get weekDaysAr() {\r\n return weekDaysAr;\r\n }\r\n\r\n get currentMonthName() {\r\n return this.hijriMonths[this.selectedMonth - 1];\r\n }\r\n\r\n constructor() {\r\n const h = hijriFromGregorian(new Date());\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.selectedYear = h.hy;\r\n this.selectedMonth = h.hm;\r\n }\r\n\r\n ngOnInit() {\r\n this.buildYearRange();\r\n }\r\n\r\n ngOnChanges() {\r\n if (this.value) {\r\n const h = hijriFromGregorian(this.value);\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.selectedYear = h.hy;\r\n this.selectedMonth = h.hm;\r\n }\r\n this.buildYearRange();\r\n }\r\n\r\n buildYearRange() {\r\n const minH = this.minDate ? hijriFromGregorian(this.minDate) : { hy: 1356, hm: 1, hd: 1 };\r\n const maxH = this.maxDate ? hijriFromGregorian(this.maxDate) : { hy: 1499, hm: 12, hd: 30 };\r\n this.yearRange = [];\r\n for (let y = minH.hy; y <= maxH.hy; y++) {\r\n this.yearRange.push(y);\r\n }\r\n }\r\n\r\n onMonthYearChange() {\r\n this.hy.set(this.selectedYear);\r\n this.hm.set(this.selectedMonth);\r\n }\r\n\r\n firstOfMonth() {\r\n return findGregorianForHijri({ hy: this.hy(), hm: this.hm(), hd: 1 });\r\n }\r\n\r\n cells(): DayCell[] {\r\n const firstG = this.firstOfMonth();\r\n const firstH = hijriFromGregorian(firstG);\r\n\r\n const start = new Date(firstG);\r\n start.setDate(firstG.getDate() - firstG.getDay());\r\n\r\n const result: DayCell[] = [];\r\n for (let i = 0; i < 42; i++) {\r\n const g = new Date(start);\r\n g.setDate(start.getDate() + i);\r\n const h = hijriFromGregorian(g);\r\n\r\n let disabled = false;\r\n if (this.minDate && g < this.stripTime(this.minDate)) disabled = true;\r\n if (this.maxDate && g > this.stripTime(this.maxDate)) disabled = true;\r\n\r\n result.push({\r\n g,\r\n h,\r\n inCurrentMonth: h.hy === firstH.hy && h.hm === firstH.hm,\r\n disabled\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n prevMonth() {\r\n if (!this.canPrev()) return;\r\n let m = this.hm(), y = this.hy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y;\r\n this.selectedMonth = m;\r\n }\r\n\r\n nextMonth() {\r\n if (!this.canNext()) return;\r\n let m = this.hm(), y = this.hy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y;\r\n this.selectedMonth = m;\r\n }\r\n\r\n canPrev(): boolean {\r\n if (!this.minDate) return true;\r\n const minH = hijriFromGregorian(this.stripTime(this.minDate));\r\n return this.hy() > minH.hy || (this.hy() === minH.hy && this.hm() > minH.hm);\r\n }\r\n\r\n canNext(): boolean {\r\n if (!this.maxDate) return true;\r\n const maxH = hijriFromGregorian(this.stripTime(this.maxDate));\r\n return this.hy() < maxH.hy || (this.hy() === maxH.hy && this.hm() < maxH.hm);\r\n }\r\n\r\n isToday(g: Date) {\r\n const t = new Date();\r\n return g.getFullYear() === t.getFullYear()\r\n && g.getMonth() === t.getMonth()\r\n && g.getDate() === t.getDate();\r\n }\r\n\r\n isSelected(g: Date) {\r\n return !!this.value &&\r\n g.getFullYear() === this.value.getFullYear() &&\r\n g.getMonth() === this.value.getMonth() &&\r\n g.getDate() === this.value.getDate();\r\n }\r\n\r\n select(c: DayCell) {\r\n if (c.disabled) return;\r\n\r\n //console.log(c);\r\n\r\n this.value = c.g;\r\n this.valueChange.emit(this.value);\r\n }\r\n\r\n private stripTime(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\r\n }\r\n}\r\n","<div class=\"card border-0 p-0\">\r\n <div class=\"card-header p-1\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <button class=\"btn btn-sm\" (click)=\"prevMonth()\" [disabled]=\"!canPrev()\">&laquo;</button>\r\n <div class=\"d-flex justify-content-center gap-1\">\r\n <select class=\"form-select form-select-sm w-auto\" [(ngModel)]=\"selectedMonth\"\r\n (change)=\"onMonthYearChange()\">\r\n @for (m of hijriMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{ hijriMonthsAr[$index] }} ({{ hijriMonthsEn[$index] }})</option>\r\n }\r\n </select>\r\n <select class=\"form-select form-select-sm w-auto\" [(ngModel)]=\"selectedYear\"\r\n (change)=\"onMonthYearChange()\">\r\n @for (y of yearRange; track y) {\r\n <option [value]=\"y\">{{ y }}</option>\r\n }\r\n </select>\r\n </div>\r\n <button class=\"btn btn-sm\" (click)=\"nextMonth()\" [disabled]=\"!canNext()\">&raquo;</button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-1\">\r\n\r\n\r\n <!-- month/year pickers -->\r\n\r\n\r\n <!-- weekday labels -->\r\n <div class=\"grid\">\r\n @for (w of weekDays; track $index) {\r\n <div class=\"col fw-bold border pb-1\">{{ w }}</div>\r\n }\r\n\r\n </div>\r\n\r\n <!-- calendar cells -->\r\n <div class=\"grid\">\r\n <button *ngFor=\"let c of cells()\" class=\"cell btn rounded-0\" [class.muted]=\"!c.inCurrentMonth\"\r\n [class.today]=\"isToday(c.g)\" [class.selected]=\"isSelected(c.g)\" [disabled]=\"c.disabled\"\r\n (click)=\"select(c)\">\r\n {{ c.h.hd }}\r\n </button>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from '@angular/core';\r\nimport dayjs from 'dayjs';\r\nimport calendarSystems, { CalendarSystem } from '@calidy/dayjs-calendarsystems';\r\nimport PersianCalendarSystem from '@calidy/dayjs-calendarsystems/calendarSystems/PersianCalendarSystem';\r\nimport HijriCalendarSystem from '@calidy/dayjs-calendarsystems/calendarSystems/HijriCalendarSystem';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\nimport utc from \"dayjs/plugin/utc\";\r\nimport { hijriToGregorian, gregorianToHijri } from \"@tabby_ai/hijri-converter\";\r\n\r\ndayjs.extend(utc);\r\n\r\n// Extend Day.js with calendar systems support\r\ndayjs.extend(calendarSystems);\r\ndayjs.extend(customParseFormat);\r\n\r\n// Register the Persian calendar\r\ndayjs.registerCalendarSystem('persian', new PersianCalendarSystem());\r\n\r\ndayjs.registerCalendarSystem('islamic', new HijriCalendarSystem());\r\n\r\n\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DateServiceService {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n parse(dateString: string, calendar: FlexCalendarSystem, format: string): Date | null | undefined {\r\n //Step 1: User will input gregorian or islamic(hijri) date. for this we will use customParseFormat\r\n //in the control we will specify the format using binding.\r\n var parsedUtcDate = dayjs.utc(dateString, format, true);\r\n console.log(\"Parsed string provided by User as Utc Iso: \", parsedUtcDate.toISOString());\r\n if (!parsedUtcDate.isValid()) {\r\n console.log(\"entered date string is invalid: \", dateString);\r\n return null;\r\n }\r\n //we are writing this to parse the date , month, year only.\r\n //then based on the calender type we will decide.\r\n //but by default system will take gregorian\r\n // month() function return 0-11 months but when it parse 1 then it makes it 0\r\n const customDate = dayjs.fromCalendarSystem(calendar, parsedUtcDate.year(), parsedUtcDate.month() + 1, parsedUtcDate.date() as number);\r\n //here we are assuming the control want to handle islamic calender date, we will take it dynmically.\r\n console.log(\"Prased Date in Gregorian String as per format ['DD-MM-YYYY']:\", customDate.format('DD-MM-YYYY'));\r\n // console.log(\"Prased Date in Gregorian String as per format ['DD-MM-YYYY']:\", customDate.toISOString());\r\n //here it will show gregorian calender, because even if we parse using islamic calender, it will convert the date\r\n //and keep it to gregorian\r\n //to show islamic date, we have to tell the dayjs to use islamic calender\r\n var customDateString = customDate.format('YYYY-MM-DD');\r\n const d2 = dayjs.utc(customDateString);\r\n\r\n // console.log(\"utc\", d2.toISOString());\r\n return d2.toDate();\r\n }\r\n\r\n\r\n parse2(dateString: string, calendar: FlexCalendarSystem, format: string): Date | null {\r\n const d = dayjs.utc(dateString, format, true);\r\n if (!d.isValid()) return null;\r\n\r\n let gYear = d.year();\r\n let gMonth = d.month();\r\n let gDay = d.date();\r\n\r\n if (calendar === \"islamic\") {\r\n const hijri = { hijriYear: d.year(), hijriMonth: d.month(), hijriDay: d.date() };\r\n const greg = hijriToGregorian({\r\n year: hijri.hijriYear,\r\n month: hijri.hijriMonth,\r\n day: hijri.hijriDay as number\r\n });\r\n\r\n gYear = greg.year;\r\n gMonth = greg.month;\r\n gDay = greg.day;\r\n }\r\n\r\n // construct a pure UTC date\r\n const fixed = dayjs.utc(new Date(gYear, gMonth, gDay as number));\r\n return fixed.toDate();\r\n }\r\n\r\n format(date: Date, calendar: FlexCalendarSystem, format: string): string {\r\n // const d = dayjs.utc(date.getFullYear(), date.getMonth(), date.getDate() as number);\r\n var c = dayjs.fromCalendarSystem(\"gregory\", date.getFullYear(), date.getMonth() + 1, date.getDate());\r\n\r\n if (calendar == \"islamic\")\r\n c = c.add(1, \"day\");\r\n\r\n return c.toCalendarSystem(calendar).format(format);\r\n }\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, ElementRef, HostListener, input, model, OnInit, output, ViewChild } from '@angular/core';\r\nimport { HijriCalendarComponent } from \"../flex-hijri-calendar/hijri-calendar.component\";\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport dayjs from \"dayjs\";\r\nimport { FlexCalendarSystem } from '../../core/types/flex-calendar-system.type';\r\nimport { DateServiceService } from '../../services/date-service.service';\r\n\r\n\r\n@Component({\r\n selector: 'app-hijri-datepicker',\r\n imports: [CommonModule, FormsModule, HijriCalendarComponent],\r\n templateUrl: './hijri-datepicker.component.html',\r\n styleUrl: './hijri-datepicker.component.css'\r\n})\r\n\r\nexport class HijriDatepickerComponent {\r\n value = model<any>();\r\n\r\n selectedDate?: Date;\r\n showCalendar: boolean = false;\r\n\r\n calender = input<FlexCalendarSystem>(\"gregory\");\r\n enabled = input<boolean>(true);\r\n cssClass = input<string>();\r\n format = input<string>(\"DD/MM/YYYY\");\r\n\r\n inputDate: string = \"\";\r\n isMobile = false;\r\n\r\n\r\n constructor(private dateService: DateServiceService) {\r\n\r\n\r\n\r\n effect(() => {\r\n const iso = this.value();\r\n if (iso) {\r\n const date = dayjs(iso);\r\n if (date.isValid()) {\r\n this.selectedDate = date.toDate();\r\n this.inputDate = this.formatDate(this.selectedDate, this.calender(), this.format());\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.selectedDate = undefined;\r\n this.inputDate = \"\";\r\n });\r\n }\r\n\r\n toggleCalendar() {\r\n this.showCalendar = !this.showCalendar;\r\n }\r\n\r\n onDateSelectedFromCalender(e: Date) {\r\n // console.log(\"onDateSelectedFromCalender: \", e);\r\n // this.dateService.log(e);\r\n //var time = this.selectedDate ?? new Date();\r\n\r\n // e.setHours(time.getHours());\r\n // e.setMinutes(time.getMinutes());\r\n\r\n //this.updateDate(e);\r\n //this.showCalendar = false;\r\n\r\n // console.log(e);\r\n }\r\n\r\n /** Triggered on blur OR Enter key */\r\n onManualDateEntered() {\r\n if (!this.inputDate) return;\r\n\r\n const parsed = this.parseInputDate(this.inputDate);\r\n if (parsed) {\r\n this.updateDate(parsed);\r\n } else {\r\n console.warn(\"Invalid date entered:\", this.inputDate);\r\n }\r\n }\r\n\r\n /** Reusable update method */\r\n private updateDate(d: Date) {\r\n this.selectedDate = d;\r\n //this.inputDate = this.formatDateForInput(d);\r\n this.value.set(d);\r\n //this.valueChange.emit(d);\r\n }\r\n\r\n formatDate(date: Date, calender: FlexCalendarSystem, format: string): string {\r\n return this.dateService.format(date, calender, format);\r\n }\r\n\r\n // private formatDateForInput(date: Date): string {\r\n // const fmt = this.format()?.toUpperCase() ?? \"DD/MM/YYYY\";\r\n // //return dayjs(date).format(fmt);\r\n // return this.formatDate(date, fmt);\r\n // }\r\n\r\n private parseInputDate(str: string): Date | null {\r\n\r\n const fmt = this.format()?.toUpperCase() ?? \"DD/MM/YYYY\";\r\n\r\n console.log(str, \"-\", fmt);\r\n\r\n const d = dayjs(str, fmt); // strict parse\r\n\r\n console.log(d.toDate());\r\n\r\n if (!d.isValid()) return null;\r\n\r\n\r\n\r\n if (!this.selectedDate) {\r\n this.selectedDate = new Date();\r\n }\r\n\r\n // gd.set(\"hour\", this.selectedDate.getHours());\r\n // gd.set(\"minute\", this.selectedDate.getMinutes());\r\n // gd.set(\"second\", this.selectedDate.getSeconds());\r\n\r\n return null;\r\n }\r\n\r\n\r\n @ViewChild(\"inputDiv\") inputDiv?: ElementRef;\r\n @ViewChild(\"modalDiv\") modalDiv?: ElementRef;\r\n @ViewChild(\"popupDiv\") popupDiv?: ElementRef;\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (this.inputDiv?.nativeElement.contains(event.target)\r\n || this.modalDiv?.nativeElement.contains(event.target)\r\n || this.popupDiv?.nativeElement.contains(event.target)) {\r\n return\r\n }\r\n this.showCalendar = false;\r\n }\r\n}\r\n","<div class=\"input-group flex-nowrap\" #inputDiv>\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toggleCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n</div>\r\n\r\n@if(showCalendar){\r\n@if(isMobile){\r\n<div class=\"modal modal-backdrop\" tabindex=\"-1\" role=\"dialog\" style=\"display: block;\" #modalDiv>\r\n <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"btn btn-danger close ms-auto btn-sm\" (click)=\"showCalendar = false\">\r\n <i class=\"bi bi-x\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n}\r\n@else{\r\n<div class=\"dropdown-menu show\" #popupDiv>\r\n <app-hijri-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"></app-hijri-calendar>\r\n</div>\r\n}\r\n}","import { CommonModule } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n Renderer2,\r\n TemplateRef,\r\n ViewChild,\r\n OnDestroy,\r\n HostListener\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'flex-container',\r\n templateUrl: './flex-container.component.html',\r\n styleUrls: ['./flex-container.component.css'],\r\n imports: [CommonModule]\r\n})\r\n\r\nexport class FlexContainerComponent implements AfterViewInit, OnDestroy {\r\n @ViewChild('contentHost') contentHost!: ElementRef<HTMLDivElement>;\r\n //private resizeHandler!: () => void;\r\n\r\n // Allow consumer to provide templates\r\n @ContentChild('header') headerTpl!: TemplateRef<any>;\r\n @ContentChild('footer') footerTpl!: TemplateRef<any>;\r\n @ContentChild('content') contentTpl!: TemplateRef<any>;\r\n\r\n constructor(private renderer: Renderer2) { }\r\n\r\n ngAfterViewInit(): void {\r\n this.resizeContent();\r\n //this.resizeHandler = this.resizeContent.bind(this);\r\n //window.addEventListener('resize', this.resizeHandler);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // if (this.resizeHandler) {\r\n // window.removeEventListener('resize', this.resizeHandler);\r\n // }\r\n }\r\n\r\n\r\n @HostListener('window:resize')\r\n onWindowResize() {\r\n this.resizeContent();\r\n }\r\n\r\n private resizeContent() {\r\n const parent = this.contentHost.nativeElement.parentElement;\r\n if (!parent) return;\r\n\r\n const parentHeight = parent.clientHeight;\r\n const headerHeight = this.contentHost.nativeElement.previousElementSibling?.clientHeight || 0;\r\n const footerHeight = this.contentHost.nativeElement.nextElementSibling?.clientHeight || 0;\r\n\r\n const available = parentHeight - headerHeight - footerHeight;\r\n\r\n this.renderer.setStyle(this.contentHost.nativeElement, 'height', `${available}px`);\r\n this.renderer.setStyle(this.contentHost.nativeElement, 'width', `${parent.clientWidth}px`);\r\n }\r\n}\r\n","<div class=\"flex-container\">\r\n @if(headerTpl){\r\n <div class=\"header\">\r\n <ng-container *ngTemplateOutlet=\"headerTpl\"></ng-container>\r\n </div>\r\n }\r\n\r\n\r\n <div #contentHost class=\"content\">\r\n <ng-container *ngTemplateOutlet=\"contentTpl\"></ng-container>\r\n </div>\r\n @if(footerTpl){\r\n <div class=\"footer\">\r\n <ng-container *ngTemplateOutlet=\"footerTpl\"></ng-container>\r\n </div>\r\n }\r\n\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\n\r\nexport type HijriDate = { hy: number; hm: number; hd: number };\r\ntype DayCell = {\r\n g: Date; // always Gregorian Date\r\n h: HijriDate; // mapped Hijri for display\r\n inCurrentMonth: boolean;\r\n disabled: boolean;\r\n};\r\n\r\n// ✅ Intl formatters\r\nconst hijriFmt = new Intl.DateTimeFormat('en-u-ca-islamic-umalqura-nu-latn', {\r\n day: 'numeric',\r\n month: 'numeric',\r\n year: 'numeric'\r\n});\r\n\r\nconst hijriMonthNamesEn = [\r\n 'Muharram', 'Safar', 'Rabi I', 'Rabi II',\r\n 'Jumada I', 'Jumada II', 'Rajab', 'Sha’ban',\r\n 'Ramadan', 'Shawwal', 'Dhu al-Qi’dah', 'Dhu al-Hijjah'\r\n];\r\n\r\nconst hijriMonthNamesAr = [\r\n 'محرم', 'صفر', 'ربيع الأول', 'ربيع الآخر',\r\n 'جمادى الأولى', 'جمادى الآخرة', 'رجب', 'شعبان',\r\n 'رمضان', 'شوال', 'ذو القعدة', 'ذو الحجة'\r\n];\r\n\r\nconst gregMonthNamesEn = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'\r\n];\r\n\r\nconst gregMonthNamesAr = [\r\n 'يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو',\r\n 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'\r\n];\r\n\r\nconst weekDaysEn = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\nconst weekDaysAr = ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'];\r\n\r\nfunction hijriFromGregorian(g: Date): HijriDate {\r\n const parts = hijriFmt.formatToParts(g);\r\n const map: Record<string, string> = {};\r\n for (const p of parts) map[p.type] = p.value;\r\n const n = (k: string) => parseInt(map[k] ?? '0', 10);\r\n return { hy: n('year'), hm: n('month'), hd: n('day') };\r\n}\r\nfunction compareHijri(a: HijriDate, b: HijriDate) {\r\n if (a.hy !== b.hy) return a.hy - b.hy;\r\n if (a.hm !== b.hm) return a.hm - b.hm;\r\n return a.hd - b.hd;\r\n}\r\nfunction findGregorianForHijri(target: HijriDate): Date {\r\n let lo = new Date(1937, 0, 1).getTime();\r\n let hi = new Date(2076, 11, 31).getTime();\r\n const dayMs = 86400000;\r\n while (lo <= hi) {\r\n const mid = Math.floor((lo + hi) / 2);\r\n const h = hijriFromGregorian(new Date(mid));\r\n compareHijri(h, target) < 0 ? (lo = mid + dayMs) : (hi = mid - dayMs);\r\n }\r\n let d = new Date(lo);\r\n while (true) {\r\n const h = hijriFromGregorian(d);\r\n const cmp = compareHijri(h, target);\r\n if (cmp === 0) return d;\r\n if (cmp > 0) throw new Error('Hijri date out of supported range');\r\n d = new Date(d.getTime() + dayMs);\r\n }\r\n}\r\nfunction stripTime(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'flex-dual-calendar',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './flex-dual-calendar.component.html',\r\n styleUrls: ['./flex-dual-calendar.component.css']\r\n})\r\nexport class FlexDualCalendarComponent {\r\n /** Two-way bound selected date (Gregorian) */\r\n @Input() value?: Date;\r\n @Output() valueChange = new EventEmitter<Date>();\r\n\r\n /** Optional min/max (Gregorian) */\r\n @Input() minDate?: Date;\r\n @Input() maxDate?: Date;\r\n\r\n /** Month/weekday language */\r\n @Input() monthLang: 'en' | 'ar' = 'en';\r\n\r\n /** Start mode, default Hijri */\r\n @Input() startMode: FlexCalendarSystem = 'gregory';\r\n\r\n // This will be injected by FloatingUiService\r\n close!: (result?: any) => void;\r\n\r\n /** Current mode (hijri | gregory) */\r\n mode = signal<FlexCalendarSystem>('gregory');\r\n\r\n /** Hijri view state */\r\n hy = signal<number>(0);\r\n hm = signal<number>(0);\r\n\r\n /** Gregorian view state */\r\n gy = signal<number>(0);\r\n gm = signal<number>(0); // 1..12\r\n\r\n /** selectors */\r\n selectedMonth = 1;\r\n selectedYear = 1447;\r\n yearRange: number[] = [];\r\n\r\n // ---- getters for UI ----\r\n get hijriMonths() {\r\n return this.monthLang === 'ar' ? hijriMonthNamesAr : hijriMonthNamesEn;\r\n }\r\n get gregMonths() {\r\n return this.monthLang === 'ar' ? gregMonthNamesAr : gregMonthNamesEn;\r\n }\r\n get weekDays() {\r\n return this.monthLang === 'ar' ? weekDaysAr : weekDaysEn;\r\n }\r\n get currentMonthName() {\r\n return this.mode() === 'islamic'\r\n ? this.hijriMonths[this.selectedMonth - 1]\r\n : this.gregMonths[this.selectedMonth - 1];\r\n }\r\n\r\n constructor() {\r\n const today = new Date();\r\n const h = hijriFromGregorian(today);\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.gy.set(today.getFullYear());\r\n this.gm.set(today.getMonth() + 1);\r\n\r\n // initialize selectors with start mode\r\n this.mode.set(this.startMode);\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.buildYearRange();\r\n }\r\n\r\n ngOnChanges(changes: any) {\r\n // If value changed from outside, update both calendars\r\n if (changes['value'] && this.value instanceof Date) {\r\n const g = stripTime(this.value);\r\n const h = hijriFromGregorian(g);\r\n\r\n this.gy.set(g.getFullYear());\r\n this.gm.set(g.getMonth() + 1);\r\n\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n\r\n // Update dropdowns based on current mode\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n }\r\n }\r\n\r\n // Rebuild year range if min/max changed\r\n if (changes['minDate'] || changes['maxDate'] || changes['value']) {\r\n this.buildYearRange();\r\n }\r\n }\r\n\r\n\r\n // Build years based on min/max expressed in Hijri for Hijri mode, Gregorian for Gregorian mode\r\n buildYearRange() {\r\n if (this.mode() === 'islamic') {\r\n const minH = this.minDate ? hijriFromGregorian(stripTime(this.minDate)) : { hy: 1356, hm: 1, hd: 1 };\r\n const maxH = this.maxDate ? hijriFromGregorian(stripTime(this.maxDate)) : { hy: 1499, hm: 12, hd: 30 };\r\n this.yearRange = [];\r\n for (let y = minH.hy; y <= maxH.hy; y++) this.yearRange.push(y);\r\n } else {\r\n const minG = this.minDate ? stripTime(this.minDate) : new Date(1937, 0, 1);\r\n const maxG = this.maxDate ? stripTime(this.maxDate) : new Date(2076, 11, 31);\r\n this.yearRange = [];\r\n for (let y = minG.getFullYear(); y <= maxG.getFullYear(); y++) this.yearRange.push(y);\r\n }\r\n }\r\n\r\n // 🔁 Mode switch (SYNCED view — keep same instant)\r\n switchMode(value: FlexCalendarSystem) {\r\n const pivot = this.value ?? this.firstOfMonth(); // use selected date or current view start\r\n if (value === 'gregory') {\r\n // To Gregorian mode\r\n const g = stripTime(pivot);\r\n this.gy.set(g.getFullYear());\r\n this.gm.set(g.getMonth() + 1);\r\n this.mode.set('gregory');\r\n this.selectedYear = this.gy();\r\n this.selectedMonth = this.gm();\r\n } else {\r\n // To Hijri mode\r\n const h = hijriFromGregorian(stripTime(pivot));\r\n this.hy.set(h.hy);\r\n this.hm.set(h.hm);\r\n this.mode.set('islamic');\r\n this.selectedYear = this.hy();\r\n this.selectedMonth = this.hm();\r\n }\r\n this.buildYearRange();\r\n }\r\n\r\n // called when dropdowns change\r\n onMonthYearChange() {\r\n if (this.mode() === 'islamic') {\r\n this.hy.set(this.selectedYear);\r\n this.hm.set(this.selectedMonth);\r\n } else {\r\n this.gy.set(this.selectedYear);\r\n this.gm.set(this.selectedMonth);\r\n }\r\n }\r\n\r\n // Start of visible month (Gregorian date)\r\n firstOfMonth(): Date {\r\n if (this.mode() === 'islamic') {\r\n return findGregorianForHijri({ hy: this.hy(), hm: this.hm(), hd: 1 });\r\n }\r\n return new Date(this.gy(), this.gm() - 1, 1);\r\n }\r\n\r\n // Calendar cells for current view\r\n cells(): DayCell[] {\r\n const firstG = this.firstOfMonth();\r\n const firstH = hijriFromGregorian(firstG);\r\n\r\n // grid start (Sunday-first; adjust if you want Saturday-first)\r\n const start = new Date(firstG);\r\n start.setDate(firstG.getDate() - firstG.getDay());\r\n\r\n const result: DayCell[] = [];\r\n for (let i = 0; i < 42; i++) {\r\n const g = new Date(start);\r\n g.setDate(start.getDate() + i);\r\n const h = hijriFromGregorian(g);\r\n\r\n let disabled = false;\r\n if (this.minDate && g < stripTime(this.minDate)) disabled = true;\r\n if (this.maxDate && g > stripTime(this.maxDate)) disabled = true;\r\n\r\n const inCurrentMonth =\r\n this.mode() === 'islamic'\r\n ? (h.hy === firstH.hy && h.hm === firstH.hm)\r\n : (g.getFullYear() === firstG.getFullYear() && g.getMonth() === firstG.getMonth());\r\n\r\n result.push({ g, h, inCurrentMonth, disabled });\r\n }\r\n return result;\r\n }\r\n\r\n prevMonth() {\r\n if (!this.canPrev()) return;\r\n if (this.mode() === 'islamic') {\r\n let m = this.hm(), y = this.hy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n } else {\r\n let m = this.gm(), y = this.gy();\r\n if (--m < 1) { m = 12; y--; }\r\n this.gm.set(m); this.gy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n }\r\n }\r\n nextMonth() {\r\n if (!this.canNext()) return;\r\n if (this.mode() === 'islamic') {\r\n let m = this.hm(), y = this.hy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.hm.set(m); this.hy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n } else {\r\n let m = this.gm(), y = this.gy();\r\n if (++m > 12) { m = 1; y++; }\r\n this.gm.set(m); this.gy.set(y);\r\n this.selectedYear = y; this.selectedMonth = m;\r\n }\r\n }\r\n\r\n canPrev(): boolean {\r\n if (!this.minDate) return true;\r\n const minG = stripTime(this.minDate);\r\n const viewFirst = this.firstOfMonth();\r\n // Can go prev if the first day of previous month is >= minG\r\n const prev = new Date(viewFirst.getFullYear(), viewFirst.getMonth() - 1, 1);\r\n return prev >= new Date(minG.getFullYear(), minG.getMonth(), 1);\r\n }\r\n canNext(): boolean {\r\n if (!this.maxDate) return true;\r\n const maxG = stripTime(this.maxDate);\r\n const viewFirst = this.firstOfMonth();\r\n const next = new Date(viewFirst.getFullYear(), viewFirst.getMonth() + 1, 1);\r\n // move to the first of the month after max\r\n const maxMonthAfter = new Date(maxG.getFullYear(), maxG.getMonth() + 1, 1);\r\n return next < maxMonthAfter;\r\n }\r\n\r\n isToday(g: Date) {\r\n const t = new Date();\r\n return g.getFullYear() === t.getFullYear()\r\n && g.getMonth() === t.getMonth()\r\n && g.getDate() === t.getDate();\r\n }\r\n isSelected(g: Date) {\r\n return !!this.value &&\r\n g.getFullYear() === this.value.getFullYear() &&\r\n g.getMonth() === this.value.getMonth() &&\r\n g.getDate() === this.value.getDate();\r\n }\r\n\r\n select(c: DayCell) {\r\n if (c.disabled) return;\r\n this.value = stripTime(c.g);\r\n this.valueChange.emit(this.value);\r\n // keep both views in sync after selection\r\n const h = hijriFromGregorian(this.value);\r\n this.hy.set(h.hy); this.hm.set(h.hm);\r\n this.gy.set(this.value.getFullYear()); this.gm.set(this.value.getMonth() + 1);\r\n if (this.mode() === 'islamic') {\r\n this.selectedYear = this.hy(); this.selectedMonth = this.hm();\r\n } else {\r\n this.selectedYear = this.gy(); this.selectedMonth = this.gm();\r\n }\r\n\r\n this.close(this.value)\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header p-1\">\r\n <div class=\"d-flex gap-1\">\r\n\r\n <div>\r\n <button class=\"btn btn-sm w-100 \" (click)=\"prevMonth()\" [disabled]=\"!canPrev()\"><i\r\n class=\"bi bi-caret-left-fill\"></i></button>\r\n </div>\r\n <div class=\"flex-grow-1\">\r\n <select class=\"form-select form-select-sm\" [(ngModel)]=\"selectedMonth\" (change)=\"onMonthYearChange()\">\r\n @if (mode() === 'islamic') {\r\n @for (m of hijriMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{ hijriMonths[$index] }}-{{$index + 1}}</option>\r\n }\r\n } @else {\r\n @for (m of gregMonths; track $index) {\r\n <option [value]=\"$index + 1\">{{$index + 1}}-{{ gregMonths[$index] }}</option>\r\n }\r\n }\r\n </select>\r\n </div>\r\n <div> <select class=\"form-select form-select-sm\" [(ngModel)]=\"selectedYear\" (change)=\"onMonthYearChange()\">\r\n @for (y of yearRange; track y) {\r\n <option [value]=\"y\">{{ y }}</option>\r\n }\r\n </select></div>\r\n <div>\r\n <button class=\"btn btn-sm w-100 \" (click)=\"nextMonth()\" [disabled]=\"!canNext()\"><i\r\n class=\"bi bi-caret-right-fill\"></i></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body p-0\">\r\n <!-- Weekday labels -->\r\n <div class=\"grid\">\r\n @for (w of weekDays; track $index) {\r\n <div class=\"col fw-bold border pb-1\">{{ w }}</div>\r\n }\r\n </div>\r\n\r\n <!-- Calendar cells -->\r\n <div class=\"grid\">\r\n @for (c of cells(); track $index) {\r\n <div class=\"cell\">\r\n <button class=\"btn w-100\" [class.muted]=\"!c.inCurrentMonth\" [class.today]=\"isToday(c.g)\"\r\n [class.selected]=\"isSelected(c.g)\" [disabled]=\"c.disabled\" (click)=\"select(c)\">\r\n <!-- show Hijri day in Hijri mode, otherwise Gregorian -->\r\n @if(mode() === 'islamic'){\r\n {{ c.h.hd }}\r\n }\r\n @else{\r\n {{ c.g.getDate() }}\r\n }\r\n </button>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-footer px-0 py-1\">\r\n <div class=\"d-flex justify-content-center\">\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Basic example\">\r\n <button class=\"btn btn-sm btn-outline-secondary\" type=\"button\" (click)=\"switchMode('gregory')\">\r\n Gregorian\r\n </button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" type=\"button\" (click)=\"switchMode('islamic')\">\r\n هجري\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Injectable } from '@angular/core';\r\n\r\nexport type DeviceType = 'mobile' | 'tablet' | 'desktop';\r\nexport type OS = 'iOS' | 'Android' | 'Windows' | 'MacOS' | 'Linux' | 'Other';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DeviceDetectorService {\r\n\r\n getDeviceType(): DeviceType {\r\n const ua = navigator.userAgent;\r\n if (/Mobi|Android/i.test(ua)) return 'mobile';\r\n if (/iPad|Tablet/i.test(ua)) return 'tablet';\r\n return 'desktop';\r\n }\r\n\r\n getOS(): OS {\r\n const ua = navigator.userAgent;\r\n if (/iPhone|iPad|iPod/i.test(ua)) return 'iOS';\r\n if (/Android/i.test(ua)) return 'Android';\r\n if (/Win/i.test(ua)) return 'Windows';\r\n if (/Mac/i.test(ua)) return 'MacOS';\r\n if (/Linux/i.test(ua)) return 'Linux';\r\n return 'Other';\r\n }\r\n\r\n isMobile(): boolean { return this.getDeviceType() === 'mobile'; }\r\n isTablet(): boolean { return this.getDeviceType() === 'tablet'; }\r\n isDesktop(): boolean { return this.getDeviceType() === 'desktop'; }\r\n}\r\n","import {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n Injectable,\r\n Type,\r\n} from '@angular/core';\r\nimport {\r\n computePosition,\r\n offset,\r\n flip,\r\n shift,\r\n autoUpdate,\r\n type Placement,\r\n} from '@floating-ui/dom';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FloatingUiService {\r\n private activePopup?: {\r\n compRef: ComponentRef<any>;\r\n cleanup: (result?: any) => void;\r\n reference: HTMLElement;\r\n };\r\n\r\n constructor(\r\n private appRef: ApplicationRef,\r\n private injector: EnvironmentInjector\r\n ) { }\r\n\r\n open<T, TResult = any>(\r\n reference: HTMLElement,\r\n component: Type<T>,\r\n options?: {\r\n inputs?: Record<string, any>;\r\n placement?: Placement;\r\n closeOnOutsideClick?: boolean;\r\n closeOnEscape?: boolean;\r\n }\r\n ): Promise<TResult | null> {\r\n // 1️⃣ If same reference clicked again → toggle close\r\n if (this.activePopup && this.activePopup.reference === reference) {\r\n this.activePopup.cleanup(null);\r\n return Promise.resolve(null);\r\n }\r\n\r\n // 2️⃣ If another popup is open → close it first\r\n if (this.activePopup) {\r\n this.activePopup.cleanup(null);\r\n }\r\n\r\n // 3️⃣ Create new popup\r\n return new Promise<TResult | null>((resolve) => {\r\n const compRef = createComponent(component, {\r\n environmentInjector: this.injector,\r\n });\r\n\r\n // Add close() callback to component\r\n (compRef.instance as any).close = (result?: TResult) => cleanup(result ?? null);\r\n\r\n // Apply @Input() bindings\r\n if (options?.inputs) {\r\n Object.entries(options.inputs).forEach(([k, v]) => {\r\n (compRef.instance as any)[k] = v;\r\n });\r\n }\r\n\r\n document.body.appendChild(compRef.location.nativeElement);\r\n this.appRef.attachView(compRef.hostView);\r\n\r\n // Position via Floating-UI\r\n const cleanupAutoUpdate = autoUpdate(reference, compRef.location.nativeElement, () => {\r\n computePosition(reference, compRef.location.nativeElement, {\r\n placement: options?.placement ?? 'bottom-start',\r\n middleware: [offset(6), flip(), shift()],\r\n }).then(({ x, y }) => {\r\n Object.assign(compRef.location.nativeElement.style, {\r\n position: 'absolute',\r\n left: `${x}px`,\r\n top: `${y}px`,\r\n zIndex: '1080',\r\n });\r\n });\r\n });\r\n\r\n // Outside click & ESC handlers\r\n const handleClickOutside = (e: MouseEvent) => {\r\n const el = compRef.location.nativeElement;\r\n const target = e.target as Node;\r\n if (!el.contains(target) && !reference.contains(target)) {\r\n cleanup(null);\r\n }\r\n };\r\n const handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape') cleanup(null);\r\n };\r\n\r\n if (options?.closeOnOutsideClick !== false) {\r\n setTimeout(() => document.addEventListener('mousedown', handleClickOutside));\r\n }\r\n if (options?.closeOnEscape !== false) {\r\n document.addEventListener('keydown', handleEscape);\r\n }\r\n\r\n // ✅ The one true cleanup — handles all detach, resolve, destroy safely\r\n const cleanup = (result?: TResult | null) => {\r\n // Guard: if already cleaned up, skip\r\n if (!this.activePopup || this.activePopup.compRef !== compRef) return;\r\n\r\n cleanupAutoUpdate();\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n document.removeEventListener('keydown', handleEscape);\r\n this.appRef.detachView(compRef.hostView);\r\n compRef.destroy();\r\n\r\n this.activePopup = undefined;\r\n resolve(result ?? null);\r\n };\r\n\r\n // track active popup\r\n this.activePopup = { compRef, cleanup, reference };\r\n });\r\n }\r\n\r\n closeActive(result?: any) {\r\n if (this.activePopup) {\r\n this.activePopup.cleanup(result ?? null);\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, effect, ElementRef, HostListener, input, model, ViewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { computePosition, offset, flip, shift, autoPlacement, hide } from '@floating-ui/dom';\r\n\r\nimport dayjs from \"dayjs\";\r\nimport { FlexCalendarSystem } from '../core/types/flex-calendar-system.type';\r\nimport { DateServiceService } from '../services/date-service.service';\r\nimport { FlexDualCalendarComponent } from \"../flex-dual-calendar/flex-dual-calendar.component\";\r\nimport { FlexCalendarSystemSwitchPosition } from '../core/types/flex-calendar-system-switch-position.type';\r\nimport { DeviceDetectorService } from '../services/device-detector.service';\r\nimport { FloatingUiService } from '../services/floating-ui.service';\r\n\r\n@Component({\r\n selector: 'flex-dual-datepicker',\r\n imports: [CommonModule, FormsModule],\r\n templateUrl: './flex-dual-datepicker.component.html',\r\n styleUrl: './flex-dual-datepicker.component.css'\r\n})\r\n\r\nexport class FlexDualDatepickerComponent {\r\n\r\n @ViewChild('calendarButton') calendarButton?: ElementRef;\r\n @ViewChild('calendarDropdown') calendarDropdown?: ElementRef;\r\n\r\n @ViewChild(\"inputDiv\") inputDiv?: ElementRef;\r\n @ViewChild(\"modalDiv\") modalDiv?: ElementRef;\r\n // @ViewChild(\"menu\") popupDiv?: ElementRef;\r\n\r\n value = model<any>();\r\n enabled = input<boolean>(true);\r\n cssClass = input<string>();\r\n format = input<string>(\"DD/MM/YYYY\");\r\n\r\n title = input<string>();\r\n calendarSwitchPosition = input<FlexCalendarSystemSwitchPosition>(\"title\");\r\n\r\n //selectedDate is needed to keep the current data for process\r\n selectedDate?: Date;\r\n\r\n calendar: FlexCalendarSystem = \"gregory\";\r\n\r\n inputDate: string = \"\";\r\n isMobile = false;\r\n\r\n\r\n constructor(private dateService: DateServiceService, private deviceDetector: DeviceDetectorService,\r\n private floating: FloatingUiService\r\n ) {\r\n this.isMobile = deviceDetector.isMobile();\r\n effect(() => {\r\n const iso = this.value();\r\n if (iso) {\r\n const date = dayjs(iso);\r\n if (date.isValid()) {\r\n this.selectedDate = date.toDate();\r\n this.inputDate = this.formatDate(this.selectedDate!);\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.selectedDate = undefined;\r\n this.inputDate = \"\";\r\n });\r\n }\r\n\r\n switchCalendar() {\r\n if (this.calendar == \"gregory\") {\r\n this.calendar = \"islamic\";\r\n }\r\n else {\r\n this.calendar = \"gregory\";\r\n }\r\n\r\n this.inputDate = this.formatDate(this.selectedDate!);\r\n }\r\n\r\n onDateSelectedFromCalender(e: Date) {\r\n this.inputDate = this.formatDate(e);\r\n\r\n this.updateDate(e);\r\n this.isOpen = false;\r\n // this.updateCalendar();\r\n }\r\n\r\n /** Triggered on blur OR Enter key */\r\n onManualDateEntered() {\r\n if (!this.inputDate) return;\r\n\r\n const parsed = this.parseInputDate(this.inputDate);\r\n if (parsed) {\r\n this.updateDate(parsed);\r\n } else {\r\n console.warn(\"Invalid date entered:\", this.inputDate);\r\n }\r\n }\r\n\r\n /** Reusable update method */\r\n private updateDate(d: Date) {\r\n this.selectedDate = d;\r\n this.inputDate = this.formatDate(d);\r\n this.value.set(d);\r\n }\r\n\r\n formatDate(date: Date): string {\r\n return this.dateService.format(date, this.calendar, this.format());\r\n }\r\n\r\n private parseInputDate(str: string): Date | null | undefined {\r\n /*if the user clear the text in input box then we must accept as the user\r\n wants to remove date from the control so we will return null*/\r\n if (!str)\r\n return null;\r\n\r\n /*if any text entered in input box then we must try to parse it\r\n if parse success the date service will return the date else will return \r\n null or undefined.\r\n in this case since user entered some date may be he/she made mistake\r\n so we will should not show null or empty value, instead we will\r\n return current date or last selected date\r\n */\r\n var parsedDate = this.dateService.parse(str, this.calendar, this.format());\r\n if (parsedDate)\r\n return parsedDate;\r\n\r\n //if parseDate is null this means user entered wrong date, in this case we will return\r\n //the last selected date.\r\n if (this.selectedDate) {\r\n return this.selectedDate;\r\n }\r\n\r\n //if last selected date is also null then we will return current date.\r\n return new Date();\r\n }\r\n\r\n\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n if (this.inputDiv?.nativeElement.contains(event.target)\r\n || this.modalDiv?.nativeElement.contains(event.target)\r\n || this.calendarDropdown?.nativeElement.contains(event.target)) {\r\n return\r\n }\r\n this.isOpen = false;\r\n // this.updateCalendar();\r\n }\r\n\r\n\r\n async openCalendar() {\r\n const button = this.calendarButton?.nativeElement!;\r\n\r\n const result = await this.floating.open(\r\n button,\r\n FlexDualCalendarComponent,\r\n {\r\n placement: 'bottom-start',\r\n inputs: {\r\n // You can pass any props here\r\n initialDate: this.selectedDate,\r\n },\r\n }\r\n );\r\n\r\n if (result) {\r\n //this.selectedDate = result;\r\n this.updateDate(result);\r\n }\r\n }\r\n\r\n\r\n isOpen = false;\r\n\r\n // toggleMenu() {\r\n // this.isOpen = !this.isOpen;\r\n\r\n // if (this.isMobile)\r\n // return;\r\n\r\n // this.updateCalendar();\r\n // }\r\n\r\n // updateCalendar() {\r\n // const button = this.calendarButton?.nativeElement!;\r\n // const calendar = this.calendarDropdown?.nativeElement!;\r\n\r\n // computePosition(button, calendar, {\r\n // placement: \"bottom\",\r\n // strategy: 'fixed',\r\n // middleware: [flip(), shift(), hide()]\r\n // }).then(({ x, y }) => {\r\n // Object.assign(calendar.style, {\r\n // left: `${x}px`,\r\n // top: `${y}px`,\r\n // visibility: !this.isOpen\r\n // ? 'hidden'\r\n // : 'visible',\r\n // });\r\n // });\r\n // }\r\n}\r\n","@if(calendarSwitchPosition() == 'title'){\r\n<div class=\"d-flex align-items-center gap-1\">\r\n <label>{{ title() }}</label>\r\n <button type=\"button\" class=\"btn btn-sm btn-light\" style=\"cursor: pointer; padding-bottom: 1px; padding-top: 1px;\"\r\n (click)=\"switchCalendar()\">\r\n @if(calendar == 'gregory') {G}\r\n @else{H}\r\n </button>\r\n</div>\r\n\r\n}\r\n<div class=\"input-group flex-nowrap\" #inputDiv>\r\n @if(calendarSwitchPosition() == 'inline'){\r\n <span class=\"input-group-text\" style=\"cursor: pointer;\" (click)=\"switchCalendar()\"> @if(calendar == 'gregory') {G}\r\n @else{H}</span>\r\n }\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"inputDate\" (blur)=\"onManualDateEntered()\"\r\n [disabled]=\"!enabled()\" [placeholder]=\"format()\" (keyup.enter)=\"onManualDateEntered()\">\r\n\r\n\r\n <!-- <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toggleCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button> -->\r\n <button #calendarButton class=\"btn btn-outline-secondary\" (click)=\"openCalendar()\" [disabled]=\"!enabled()\">\r\n <i class=\"bi bi-calendar3\"></i>\r\n </button>\r\n\r\n</div>\r\n\r\n<!-- \r\n@if(isMobile && isOpen){\r\n<div class=\"modal modal-backdrop\" tabindex=\"-1\" role=\"dialog\" style=\"display: block;\" #modalDiv>\r\n <div class=\"modal-dialog modal-dialog-scrollable\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"btn btn-danger close ms-auto btn-sm\" (click)=\"isOpen = false\">\r\n <i class=\"bi bi-x\"></i>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n} -->\r\n\r\n\r\n<!-- <div #calendarDropdown class=\"calendar-dropdown\">\r\n <flex-dual-calendar (valueChange)=\"onDateSelectedFromCalender($event)\"\r\n [(value)]=\"selectedDate\"></flex-dual-calendar>\r\n</div> -->","/*\r\n * Public API Surface of flex-ui-controls\r\n */\r\n\r\nexport * from './lib/flex-panel/flex-panel.component';\r\nexport * from './lib/flex-pagination/flex-pagination.component';\r\nexport * from './lib/flex-grid/flex-grid.component';\r\nexport * from './lib/flex-grid/flex-grid-columns';\r\nexport * from './lib/flex-grid/flex-grid-column';\r\nexport * from './lib/flex-combo-datepicker/flex-combo-datepicker.component';\r\nexport * from './lib/flex-hijri/flex-hijri-datepicker/hijri-datepicker.component';\r\nexport * from './lib/flex-container/flex-container.component';\r\nexport * from \"./lib/flex-dual-datepicker/flex-dual-datepicker.component\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","hijriFmt","hijriMonthNamesEn","hijriMonthNamesAr","weekDaysEn","weekDaysAr","hijriFromGregorian","compareHijri","findGregorianForHijri","i1.DateServiceService","i1","i2.DeviceDetectorService","i3.FloatingUiService","i4"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { ElementRef, OnInit, EventEmitter, TemplateRef, QueryList, AfterViewInit, OnDestroy, Renderer2, ApplicationRef, EnvironmentInjector, Type } from '@angular/core';
3
+ import { Placement } from '@floating-ui/dom';
3
4
 
4
5
  declare class FlexPanelComponent {
5
6
  private resizeObserver?;
@@ -145,8 +146,9 @@ declare class ComboDatePickerComponent implements OnInit {
145
146
  type FlexCalendarSystem = 'gregory' | 'islamic';
146
147
 
147
148
  declare class DateServiceService {
148
- log(date: Date): void;
149
+ constructor();
149
150
  parse(dateString: string, calendar: FlexCalendarSystem, format: string): Date | null | undefined;
151
+ parse2(dateString: string, calendar: FlexCalendarSystem, format: string): Date | null;
150
152
  format(date: Date, calendar: FlexCalendarSystem, format: string): string;
151
153
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateServiceService, never>;
152
154
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<DateServiceService>;
@@ -214,19 +216,12 @@ declare class FloatingUiService {
214
216
  private injector;
215
217
  private activePopup?;
216
218
  constructor(appRef: ApplicationRef, injector: EnvironmentInjector);
217
- /**
218
- * Opens a floating Angular component near a reference element.
219
- * Ensures only one popup is visible at a time.
220
- */
221
219
  open<T, TResult = any>(reference: HTMLElement, component: Type<T>, options?: {
222
220
  inputs?: Record<string, any>;
223
- placement?: string;
221
+ placement?: Placement;
224
222
  closeOnOutsideClick?: boolean;
225
223
  closeOnEscape?: boolean;
226
224
  }): Promise<TResult | null>;
227
- /**
228
- * Closes the currently active floating popup, if any.
229
- */
230
225
  closeActive(result?: any): void;
231
226
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FloatingUiService, never>;
232
227
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<FloatingUiService>;
@@ -262,8 +257,6 @@ declare class FlexDualDatepickerComponent {
262
257
  onDocumentClick(event: MouseEvent): void;
263
258
  openCalendar(): Promise<void>;
264
259
  isOpen: boolean;
265
- toggleMenu(): void;
266
- updateCalendar(): void;
267
260
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FlexDualDatepickerComponent, never>;
268
261
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FlexDualDatepickerComponent, "flex-dual-datepicker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "enabled": { "alias": "enabled"; "required": false; "isSignal": true; }; "cssClass": { "alias": "cssClass"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "calendarSwitchPosition": { "alias": "calendarSwitchPosition"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
269
262
  }
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@dcsl/flex-ui",
3
- "version": "0.0.26",
3
+ "version": "0.0.28",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=20.0.0",
6
6
  "@angular/core": ">=20.0.0",
7
7
  "@calidy/dayjs-calendarsystems": "^2.0.0",
8
8
  "dayjs": "^1.11.19",
9
- "@floating-ui/dom": "^1.7.4"
9
+ "@floating-ui/dom": "^1.7.4",
10
+ "@tabby_ai/hijri-converter": "^1.0.5"
10
11
  },
11
12
  "dependencies": {
12
13
  "tslib": "^2.3.0"