@sixbell-telco/sdk
Version:
A collection of reusable components designed for use in Sixbell Telco Angular projects
1 lines • 21.1 kB
Source Map (JSON)
{"version":3,"file":"sixbell-telco-sdk-components-forms-datepicker.mjs","sources":["../../../projects/sdk/components/forms/datepicker/src/datepicker-format-month.pipe.ts","../../../projects/sdk/components/forms/datepicker/src/datepicker.component.ts","../../../projects/sdk/components/forms/datepicker/src/datepicker.component.html","../../../projects/sdk/components/forms/datepicker/sixbell-telco-sdk-components-forms-datepicker.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/es';\nimport 'dayjs/locale/pt';\n\n@Pipe({\n\tname: 'datepickerFormatMonth',\n\tstandalone: true,\n})\nexport class DatepickerFormatMonthPipe implements PipeTransform {\n\ttransform(value: dayjs.Dayjs, language: string = 'es'): string {\n\t\t// capitalize the first letter of the month\n\t\treturn value.locale(language).format('MMMM').charAt(0).toUpperCase() + value.format('MMMM YYYY').slice(1);\n\t}\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, effect, input, model, OnInit, output } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { InputComponent } from '@sixbell-telco/sdk/components/forms/input';\nimport { IconComponent } from '@sixbell-telco/sdk/components/icon';\nimport { matKeyboardArrowLeftOutline, matKeyboardArrowRightOutline } from '@sixbell-telco/sdk/components/icon/material/outline';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/es';\nimport 'dayjs/locale/pt';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\nimport isBetween from 'dayjs/plugin/isBetween';\nimport isoWeek from 'dayjs/plugin/isoWeek';\nimport { DatepickerFormatMonthPipe } from './datepicker-format-month.pipe';\n\ntype DayOfMonth = {\n\tname: string;\n\tvalue: number;\n\tindexWeek: number;\n\tdisabled: boolean;\n\tdate: string;\n};\n\n@Component({\n\tselector: 'st-datepicker',\n\ttemplateUrl: './datepicker.component.html',\n\tstyleUrls: ['./datepicker.component.scss'],\n\timports: [CommonModule, FormsModule, InputComponent, DatepickerFormatMonthPipe, IconComponent],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: DatepickerComponent,\n\t\t\tmulti: true,\n\t\t},\n\t],\n})\nexport class DatepickerComponent implements OnInit, ControlValueAccessor {\n\ticonArrowLeft = matKeyboardArrowLeftOutline;\n\ticonArrowRight = matKeyboardArrowRightOutline;\n\n\tformat = input<string>('DD/MM/YYYY');\n\tlanguage = input<string>('es');\n\n\tweekFromLanguage = computed(() => {\n\t\tif (this.language() === 'en') {\n\t\t\treturn ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n\t\t} else if (this.language() === 'pt') {\n\t\t\treturn ['Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb', 'Dom'];\n\t\t} else {\n\t\t\treturn ['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom'];\n\t\t}\n\t});\n\n\tlabel = input<string>('');\n\trange = input<[number, dayjs.ManipulateType] | null>(null); // example: [1, 'month']\n\tminDate = input<string | null>(null);\n\tmaxDate = input<string | null>(null);\n\tdisableUntil = input<string>('');\n\tdisableFrom = input<string>('');\n\n\tcurrent = model<string>(dayjs().locale(this.language()).format(this.format()));\n\tdateUpdated = output<string>();\n\tsynchronizedPickersEffect = effect(() => {\n\t\tif (this.minDate() || this.maxDate()) {\n\t\t\tthis.refresh();\n\t\t}\n\t});\n\n\tdaysOfMonth: DayOfMonth[] = [];\n\tmonthAndYearLabel: dayjs.Dayjs = dayjs().locale(this.language());\n\tisOpen: boolean = false;\n\n\t// Form control properties\n\tparentForm = input<FormGroup | null>(null);\n\tformControlName = input<string>('');\n\n\tget formField(): FormControl | null {\n\t\tif (!this.parentForm()) return null;\n\t\treturn this.parentForm()?.get(this.formControlName()) as FormControl;\n\t}\n\t// ControlValueAccessor attributes\n\tprivate onControlChange: any = () => {};\n\tprivate onControlTouch: any = () => {};\n\tdisabled = model<boolean>(false);\n\n\t// ControlValueAccessor methods\n\twriteValue(obj: string): void {\n\t\tthis.current.set(obj);\n\t}\n\n\tregisterOnChange(fn: any): void {\n\t\tthis.onControlChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onControlTouch = fn;\n\t}\n\n\tsetDisabledState(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\tconstructor() {\n\t\tdayjs.extend(isoWeek);\n\t\tdayjs.extend(customParseFormat);\n\t\tdayjs.extend(isBetween);\n\t}\n\n\tngOnInit(): void {\n\t\tif (this.current()) {\n\t\t\tthis.getDaysFromDate(\n\t\t\t\tdayjs(this.current(), this.format()).locale(this.language()).month() + 1,\n\t\t\t\tdayjs(this.current(), this.format()).locale(this.language()).year(),\n\t\t\t);\n\t\t} else {\n\t\t\tconst d = new Date();\n\t\t\tthis.getDaysFromDate(d.getMonth() + 1, d.getFullYear());\n\t\t}\n\t}\n\n\ttoggleDatepicker() {\n\t\tif (this.range()) {\n\t\t\tthis.refresh();\n\t\t}\n\t\tthis.isOpen = !this.isOpen;\n\t\tthis.onControlTouch();\n\t}\n\n\tprivate getDaysFromDate(month: string | number, year: string | number) {\n\t\tconst startDate = dayjs(`${year}/${month}/01`).locale(this.language());\n\t\tconst endDate = startDate.clone().endOf('month');\n\t\tthis.monthAndYearLabel = startDate;\n\n\t\tconst diffDays = endDate.diff(startDate, 'days', true);\n\t\tconst numberDays = Math.round(diffDays);\n\n\t\tconst days: DayOfMonth[] = Object.keys([...Array(numberDays)]).map((a: string) => {\n\t\t\tconst d = parseInt(a) + 1;\n\t\t\tconst day = dayjs(`${year}-${month}-${d}`).locale(this.language());\n\n\t\t\tconst range = this.range();\n\t\t\tconst dateRange = this.minDate() ?? this.maxDate() ?? '';\n\n\t\t\treturn {\n\t\t\t\tname: day.format('dddd'),\n\t\t\t\tvalue: d, // Change the value to a number\n\t\t\t\tindexWeek: day.isoWeekday(),\n\t\t\t\tdisabled: range ? this.shouldDisableDayByRange(day, dateRange, range[0], range[1]) : this.shouldDisableDay(day),\n\t\t\t\tdate: day.format(this.format()),\n\t\t\t};\n\t\t});\n\n\t\tthis.daysOfMonth = days;\n\t}\n\n\tprivate shouldDisableDayByRange(day: dayjs.Dayjs, from: string, quantity: number, unit: dayjs.ManipulateType) {\n\t\tif (!from) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (this.maxDate()) {\n\t\t\t// If maxDate is true, disables all dates AFTER 'from' date\n\t\t\treturn !day.isBetween(\n\t\t\t\tdayjs(from, this.format()).locale(this.language()).subtract(quantity, unit),\n\t\t\t\tdayjs(from, this.format()).locale(this.language()),\n\t\t\t\tnull,\n\t\t\t\t'[]',\n\t\t\t);\n\t\t}\n\n\t\tif (this.minDate()) {\n\t\t\t// If minDate is true, disables all dates BEFORE 'from' date\n\t\t\treturn !day.isBetween(\n\t\t\t\tdayjs(from, this.format()).locale(this.language()),\n\t\t\t\tdayjs(from, this.format()).locale(this.language()).add(quantity, unit),\n\t\t\t\tnull,\n\t\t\t\t'[]',\n\t\t\t);\n\t\t}\n\n\t\t// Disables all dates BEFORE and AFTER 'from' date\n\t\treturn !day.isBetween(\n\t\t\tdayjs(from, this.format()).locale(this.language()).subtract(quantity, unit),\n\t\t\tdayjs(from, this.format()).locale(this.language()).add(quantity, unit),\n\t\t\tnull,\n\t\t\t'[]',\n\t\t);\n\t}\n\n\tprivate shouldDisableDay(day: dayjs.Dayjs) {\n\t\tif (this.disableUntil() && this.disableFrom()) {\n\t\t\treturn !day.isBetween(\n\t\t\t\tdayjs(this.disableUntil(), this.format()).locale(this.language()).subtract(1, 'day'),\n\t\t\t\tdayjs(this.disableFrom(), this.format()).locale(this.language()).add(1, 'day'),\n\t\t\t);\n\t\t}\n\n\t\tif (this.disableUntil() && !this.disableFrom()) {\n\t\t\treturn day.isBefore(dayjs(this.disableUntil(), this.format()).locale(this.language()));\n\t\t}\n\n\t\tif (this.disableFrom() && !this.disableUntil()) {\n\t\t\treturn day.isAfter(dayjs(this.disableFrom(), this.format()).locale(this.language()));\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate refresh() {\n\t\t// Used to force a refresh on the calendar\n\t\tthis.changeMonth(true);\n\t\tthis.changeMonth(false);\n\t}\n\n\tchangeMonth(flag: boolean) {\n\t\tif (flag) {\n\t\t\tconst prevDate = this.monthAndYearLabel.clone().subtract(1, 'month');\n\t\t\tthis.getDaysFromDate(prevDate.format('MM'), prevDate.format('YYYY'));\n\t\t} else {\n\t\t\tconst nextDate = this.monthAndYearLabel.clone().add(1, 'month');\n\t\t\tthis.getDaysFromDate(nextDate.format('MM'), nextDate.format('YYYY'));\n\t\t}\n\t}\n\n\thandleSelectDay(day: DayOfMonth) {\n\t\tif (day.disabled) return;\n\n\t\tconst monthYear = this.monthAndYearLabel.format('YYYY-MM');\n\t\tconst parsedDay = `${monthYear}-${day.value}`;\n\t\tconst date = dayjs(parsedDay).locale(this.language()).format(this.format());\n\t\tthis.current.set(date);\n\t\tthis.dateUpdated.emit(date);\n\t\tthis.onControlChange(date);\n\t\tif (!this.range()) {\n\t\t\tthis.toggleDatepicker();\n\t\t}\n\t}\n}\n","<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->\n<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->\n<st-input (click)=\"toggleDatepicker()\" [(value)]=\"current\" [readonly]=\"true\" [label]=\"label()\" />\n<div class=\"datepicker-container\">\n\t<div [class]=\"isOpen ? 'calendar-wrapper active' : 'calendar-wrapper inactive'\">\n\t\t<div class=\"calendar-header\">\n\t\t\t<button (click)=\"changeMonth(true)\" class=\"btn-prev\">\n\t\t\t\t<!-- <img src=\"assets/icons/calendar/left.svg\" /> -->\n\t\t\t\t<st-icon class=\"text-secondary-content\" [icon]=\"iconArrowLeft\" color=\"inherit\">></st-icon>\n\t\t\t</button>\n\t\t\t<h1>{{ monthAndYearLabel | datepickerFormatMonth: language() }}</h1>\n\t\t\t<button (click)=\"changeMonth(false)\" class=\"btn-next\">\n\t\t\t\t<!-- <img src=\"assets/icons/calendar/right.svg\" /> -->\n\t\t\t\t<st-icon class=\"text-secondary-content\" [icon]=\"iconArrowRight\" color=\"inherit\"></st-icon>\n\t\t\t</button>\n\t\t</div>\n\t\t<ol class=\"days\">\n\t\t\t@for (day of weekFromLanguage(); track day) {\n\t\t\t\t<li class=\"day-name\">{{ day | slice: 0 : 1 }}</li>\n\t\t\t}\n\n\t\t\t@for (day of daysOfMonth; track day.value) {\n\t\t\t\t<li\n\t\t\t\t\tclass=\"day\"\n\t\t\t\t\t(click)=\"handleSelectDay(day)\"\n\t\t\t\t\t[ngClass]=\"{ active: day.date === current(), disabled: day.disabled }\"\n\t\t\t\t\t[style.gridColumnStart]=\"$first ? day.indexWeek : 'auto'\"\n\t\t\t\t>\n\t\t\t\t\t<span>{{ day.value }}</span>\n\t\t\t\t</li>\n\t\t\t}\n\t\t</ol>\n\t</div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;MASa,yBAAyB,CAAA;AACrC,IAAA,SAAS,CAAC,KAAkB,EAAE,QAAA,GAAmB,IAAI,EAAA;;AAEpD,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;;uGAH9F,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,uBAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAJrC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACL,oBAAA,IAAI,EAAE,uBAAuB;AAC7B,oBAAA,UAAU,EAAE,IAAI;AAChB,iBAAA;;;ACRD;MAoCa,mBAAmB,CAAA;IAC/B,aAAa,GAAG,2BAA2B;IAC3C,cAAc,GAAG,4BAA4B;AAE7C,IAAA,MAAM,GAAG,KAAK,CAAS,YAAY,CAAC;AACpC,IAAA,QAAQ,GAAG,KAAK,CAAS,IAAI,CAAC;AAE9B,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;AAC7B,YAAA,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;;AAClD,aAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;AACpC,YAAA,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;;aAClD;AACN,YAAA,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;;AAE1D,KAAC,CAAC;AAEF,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,CAAC;AACzB,IAAA,KAAK,GAAG,KAAK,CAAwC,IAAI,CAAC,CAAC;AAC3D,IAAA,OAAO,GAAG,KAAK,CAAgB,IAAI,CAAC;AACpC,IAAA,OAAO,GAAG,KAAK,CAAgB,IAAI,CAAC;AACpC,IAAA,YAAY,GAAG,KAAK,CAAS,EAAE,CAAC;AAChC,IAAA,WAAW,GAAG,KAAK,CAAS,EAAE,CAAC;IAE/B,OAAO,GAAG,KAAK,CAAS,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,WAAW,GAAG,MAAM,EAAU;AAC9B,IAAA,yBAAyB,GAAG,MAAM,CAAC,MAAK;QACvC,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACrC,IAAI,CAAC,OAAO,EAAE;;AAEhB,KAAC,CAAC;IAEF,WAAW,GAAiB,EAAE;IAC9B,iBAAiB,GAAgB,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChE,MAAM,GAAY,KAAK;;AAGvB,IAAA,UAAU,GAAG,KAAK,CAAmB,IAAI,CAAC;AAC1C,IAAA,eAAe,GAAG,KAAK,CAAS,EAAE,CAAC;AAEnC,IAAA,IAAI,SAAS,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAAE,YAAA,OAAO,IAAI;AACnC,QAAA,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAgB;;;AAG7D,IAAA,eAAe,GAAQ,MAAK,GAAG;AAC/B,IAAA,cAAc,GAAQ,MAAK,GAAG;AACtC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,CAAC;;AAGhC,IAAA,UAAU,CAAC,GAAW,EAAA;AACrB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;AAGtB,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;AAG1B,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACxB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;;AAGzB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;;AAG9B,IAAA,WAAA,GAAA;AACC,QAAA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;AACrB,QAAA,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;;IAGxB,QAAQ,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACnB,IAAI,CAAC,eAAe,CACnB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EACxE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CACnE;;aACK;AACN,YAAA,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;;;IAIzD,gBAAgB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YACjB,IAAI,CAAC,OAAO,EAAE;;AAEf,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;QAC1B,IAAI,CAAC,cAAc,EAAE;;IAGd,eAAe,CAAC,KAAsB,EAAE,IAAqB,EAAA;AACpE,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,CAAG,EAAA,IAAI,IAAI,KAAK,CAAA,GAAA,CAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;AAChD,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;AAElC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAEvC,MAAM,IAAI,GAAiB,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,KAAI;YAChF,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;YACzB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAA,CAAA,EAAI,KAAK,CAAI,CAAA,EAAA,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAElE,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;YAExD,OAAO;AACN,gBAAA,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;gBACxB,KAAK,EAAE,CAAC;AACR,gBAAA,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE;AAC3B,gBAAA,QAAQ,EAAE,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;gBAC/G,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aAC/B;AACF,SAAC,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;;AAGhB,IAAA,uBAAuB,CAAC,GAAgB,EAAE,IAAY,EAAE,QAAgB,EAAE,IAA0B,EAAA;QAC3G,IAAI,CAAC,IAAI,EAAE;AACV,YAAA,OAAO,KAAK;;AAGb,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;;YAEnB,OAAO,CAAC,GAAG,CAAC,SAAS,CACpB,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,EAC3E,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAClD,IAAI,EACJ,IAAI,CACJ;;AAGF,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;;YAEnB,OAAO,CAAC,GAAG,CAAC,SAAS,CACpB,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAClD,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,EACtE,IAAI,EACJ,IAAI,CACJ;;;QAIF,OAAO,CAAC,GAAG,CAAC,SAAS,CACpB,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,EAC3E,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,EACtE,IAAI,EACJ,IAAI,CACJ;;AAGM,IAAA,gBAAgB,CAAC,GAAgB,EAAA;QACxC,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AAC9C,YAAA,OAAO,CAAC,GAAG,CAAC,SAAS,CACpB,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,EACpF,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAC9E;;QAGF,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YAC/C,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;;QAGvF,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;YAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAGrF,QAAA,OAAO,KAAK;;IAGL,OAAO,GAAA;;AAEd,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;AAGxB,IAAA,WAAW,CAAC,IAAa,EAAA;QACxB,IAAI,IAAI,EAAE;AACT,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;AACpE,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;;aAC9D;AACN,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AAC/D,YAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;;;AAItE,IAAA,eAAe,CAAC,GAAe,EAAA;QAC9B,IAAI,GAAG,CAAC,QAAQ;YAAE;QAElB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC;QAC1D,MAAM,SAAS,GAAG,CAAG,EAAA,SAAS,IAAI,GAAG,CAAC,KAAK,CAAA,CAAE;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;AAC3E,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;YAClB,IAAI,CAAC,gBAAgB,EAAE;;;uGAtMb,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,EARpB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,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,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,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,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAAA;AACV,YAAA;AACC,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,mBAAmB;AAChC,gBAAA,KAAK,EAAE,IAAI;AACX,aAAA;SACD,EClCF,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,8hDAkCA,EDPW,MAAA,EAAA,CAAA,2zCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,YAAY,EAAE,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,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,+BAAE,cAAc,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,aAAA,EAAA,OAAA,EAAA,OAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAE,yBAAyB,EAAA,IAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FASjF,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAb/B,SAAS;AACC,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAGhB,OAAA,EAAA,CAAC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,yBAAyB,EAAE,aAAa,CAAC,EACnF,SAAA,EAAA;AACV,wBAAA;AACC,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAqB,mBAAA;AAChC,4BAAA,KAAK,EAAE,IAAI;AACX,yBAAA;AACD,qBAAA,EAAA,QAAA,EAAA,8hDAAA,EAAA,MAAA,EAAA,CAAA,2zCAAA,CAAA,EAAA;;;AElCF;;AAEG;;;;"}