@aquera/nile-elements 2.0.18 → 2.0.20
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.
- package/README.md +10 -0
- package/demo/index.js +0 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1275 -490
- package/dist/nile-badge/index.cjs.js +1 -1
- package/dist/nile-badge/index.esm.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.cjs.js.map +1 -1
- package/dist/nile-badge/nile-badge.css.cjs.js +1 -1
- package/dist/nile-badge/nile-badge.css.cjs.js.map +1 -1
- package/dist/nile-badge/nile-badge.css.esm.js +24 -3
- package/dist/nile-badge/nile-badge.esm.js +5 -3
- package/dist/nile-breadcrumb/nile-breadcrumb.cjs.js +1 -1
- package/dist/nile-breadcrumb/nile-breadcrumb.cjs.js.map +1 -1
- package/dist/nile-breadcrumb/nile-breadcrumb.esm.js +2 -2
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.cjs.js.map +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.css.cjs.js +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.css.cjs.js.map +1 -1
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.css.esm.js +14 -2
- package/dist/nile-breadcrumb-item/nile-breadcrumb-item.esm.js +4 -4
- package/dist/nile-calendar/index.cjs.js +1 -1
- package/dist/nile-calendar/index.esm.js +1 -1
- package/dist/nile-calendar/nile-calendar.cjs.js +2 -1
- package/dist/nile-calendar/nile-calendar.cjs.js.map +1 -1
- package/dist/nile-calendar/nile-calendar.css.cjs.js +1 -1
- package/dist/nile-calendar/nile-calendar.css.cjs.js.map +1 -1
- package/dist/nile-calendar/nile-calendar.css.esm.js +357 -2
- package/dist/nile-calendar/nile-calendar.esm.js +365 -41
- package/dist/nile-calendar/timezones.cjs.js +1 -1
- package/dist/nile-calendar/timezones.cjs.js.map +1 -1
- package/dist/nile-calendar/timezones.esm.js +1 -1
- package/dist/nile-date-time-picker/index.cjs.js +2 -0
- package/dist/nile-date-time-picker/index.cjs.js.map +1 -0
- package/dist/nile-date-time-picker/index.esm.js +1 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.cjs.js +2 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.cjs.js.map +1 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.css.cjs.js +2 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.css.cjs.js.map +1 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.css.esm.js +13 -0
- package/dist/nile-date-time-picker/nile-date-time-picker.esm.js +53 -0
- package/dist/nile-select/index.cjs.js +1 -1
- package/dist/nile-select/index.esm.js +1 -1
- package/dist/nile-select/nile-select.cjs.js +2 -2
- package/dist/nile-select/nile-select.cjs.js.map +1 -1
- package/dist/nile-select/nile-select.esm.js +1 -1
- package/dist/nile-select/virtual-scroll-helper.cjs.js +1 -1
- package/dist/nile-select/virtual-scroll-helper.cjs.js.map +1 -1
- package/dist/nile-select/virtual-scroll-helper.esm.js +48 -47
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js +4 -4
- package/dist/nile-virtual-select/nile-virtual-select.cjs.js.map +1 -1
- package/dist/nile-virtual-select/nile-virtual-select.esm.js +2 -2
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/nile-badge/nile-badge.css.js +24 -3
- package/dist/src/nile-badge/nile-badge.css.js.map +1 -1
- package/dist/src/nile-badge/nile-badge.d.ts +7 -4
- package/dist/src/nile-badge/nile-badge.js +22 -5
- package/dist/src/nile-badge/nile-badge.js.map +1 -1
- package/dist/src/nile-badge/nile-badge.test.js +88 -0
- package/dist/src/nile-badge/nile-badge.test.js.map +1 -1
- package/dist/src/nile-breadcrumb/nile-breadcrumb.d.ts +7 -0
- package/dist/src/nile-breadcrumb/nile-breadcrumb.js +24 -1
- package/dist/src/nile-breadcrumb/nile-breadcrumb.js.map +1 -1
- package/dist/src/nile-breadcrumb/nile-breadcrumb.test.js +51 -0
- package/dist/src/nile-breadcrumb/nile-breadcrumb.test.js.map +1 -1
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.css.js +12 -0
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.css.js.map +1 -1
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.d.ts +5 -0
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js +9 -0
- package/dist/src/nile-breadcrumb-item/nile-breadcrumb-item.js.map +1 -1
- package/dist/src/nile-calendar/nile-calendar.css.js +355 -0
- package/dist/src/nile-calendar/nile-calendar.css.js.map +1 -1
- package/dist/src/nile-calendar/nile-calendar.d.ts +175 -0
- package/dist/src/nile-calendar/nile-calendar.js +1726 -26
- package/dist/src/nile-calendar/nile-calendar.js.map +1 -1
- package/dist/src/nile-calendar/nile-calendar.test.d.ts +1 -0
- package/dist/src/nile-calendar/nile-calendar.test.js +3580 -0
- package/dist/src/nile-calendar/nile-calendar.test.js.map +1 -1
- package/dist/src/nile-calendar/timezones.d.ts +21 -0
- package/dist/src/nile-calendar/timezones.js +49 -0
- package/dist/src/nile-calendar/timezones.js.map +1 -1
- package/dist/src/nile-date-time-picker/index.d.ts +1 -0
- package/dist/src/nile-date-time-picker/index.js +2 -0
- package/dist/src/nile-date-time-picker/index.js.map +1 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.css.d.ts +11 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.css.js +49 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.css.js.map +1 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.d.ts +173 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.js +1270 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.js.map +1 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.test.d.ts +143 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.test.js +7277 -0
- package/dist/src/nile-date-time-picker/nile-date-time-picker.test.js.map +1 -0
- package/dist/src/nile-select/nile-select.d.ts +1 -0
- package/dist/src/nile-select/nile-select.js +16 -1
- package/dist/src/nile-select/nile-select.js.map +1 -1
- package/dist/src/nile-select/nile-select.test.js +430 -5
- package/dist/src/nile-select/nile-select.test.js.map +1 -1
- package/dist/src/nile-select/virtual-scroll-helper.js +7 -4
- package/dist/src/nile-select/virtual-scroll-helper.js.map +1 -1
- package/dist/src/nile-virtual-select/nile-virtual-select.d.ts +3 -1
- package/dist/src/nile-virtual-select/nile-virtual-select.js +14 -6
- package/dist/src/nile-virtual-select/nile-virtual-select.js.map +1 -1
- package/dist/src/nile-virtual-select/nile-virtual-select.test.js +115 -1
- package/dist/src/nile-virtual-select/nile-virtual-select.test.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/animation-registry.cjs.js +1 -1
- package/dist/utilities/animation-registry.cjs.js.map +1 -1
- package/dist/utilities/animation-registry.esm.js +1 -1
- package/package.json +3 -1
- package/scripts/coverage-report.mjs +96 -0
- package/src/index.ts +1 -0
- package/src/nile-badge/nile-badge.css.ts +24 -3
- package/src/nile-badge/nile-badge.test.ts +102 -0
- package/src/nile-badge/nile-badge.ts +28 -5
- package/src/nile-breadcrumb/nile-breadcrumb.test.ts +57 -0
- package/src/nile-breadcrumb/nile-breadcrumb.ts +19 -0
- package/src/nile-breadcrumb-item/nile-breadcrumb-item.css.ts +12 -0
- package/src/nile-breadcrumb-item/nile-breadcrumb-item.ts +7 -0
- package/src/nile-calendar/nile-calendar.css.ts +355 -0
- package/src/nile-calendar/nile-calendar.test.ts +3793 -0
- package/src/nile-calendar/nile-calendar.ts +1760 -28
- package/src/nile-calendar/timezones.ts +57 -0
- package/src/nile-date-time-picker/index.ts +1 -0
- package/src/nile-date-time-picker/nile-date-time-picker.css.ts +54 -0
- package/src/nile-date-time-picker/nile-date-time-picker.test.ts +7886 -0
- package/src/nile-date-time-picker/nile-date-time-picker.ts +1153 -0
- package/src/nile-select/nile-select.test.ts +560 -5
- package/src/nile-select/nile-select.ts +21 -1
- package/src/nile-select/virtual-scroll-helper.ts +7 -4
- package/src/nile-virtual-select/nile-virtual-select.test.ts +139 -1
- package/src/nile-virtual-select/nile-virtual-select.ts +17 -6
- package/vscode-html-custom-data.json +200 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-calendar.js","sourceRoot":"","sources":["../../../src/nile-calendar/nile-calendar.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n html,\n CSSResultArray,\n TemplateResult,\n nothing\n} from 'lit';\nimport { customElement, state, property } from 'lit/decorators.js';\nimport { styles } from './nile-calendar.css';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { query } from 'lit/decorators.js';\nimport { watch } from '../internal/watch';\nimport NileElement from '../internal/nile-element';\nimport { ClearMode } from './nile-calendar.enum';\nimport type { PropertyValueMap } from 'lit';\ntype NileCalendarDateRange={ startDate: string, endDate: string }\ntype TimeUnits= 'minutes'|'hours'|'days'|'weeks'|'months';\n/**\n * Nile icon component.\n *\n * @tag nile-calendar\n *\n */\n@customElement('nile-calendar')\nexport class NileCalendar extends NileElement {\n /**\n * The styles for NileCalendar\n * @remarks If you are extending this class you can extend the base styles with super. Eg `return [super(), myCustomStyles]`\n */\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n\n\n @property({ type: String, attribute: 'value' }) valueAttribute: | string | null = null;\n\n @property({ type: String, attribute:true, reflect:true }) allowedDates: string = JSON.stringify({});\n\n @property({ type: Boolean, reflect: true }) range = false;\n\n @property({ type: Boolean, attribute: true, reflect:true }) hideTypes = false;\n\n @property({ type: Boolean, reflect: true }) doubleClickUnselect = false;\n\n @property({ type: Boolean, reflect: true }) allowClear = false;\n\n @property({ type: String, reflect: true }) type :'absolute' | 'relative' = 'absolute';\n\n @property({ type: String }) selectedUnit: TimeUnits;\n\n @property({ type: Number }) selectedValue: number;\n\n @property({ type: Array, attribute: 'hide-duration-fields' }) hideDurationFields: String[] = [];\n \n @property({ type: Boolean}) showManualInputs :boolean=false;\n\n @property({ type: Number , attribute: true, reflect: true }) startYear: number;\n\n @property({ type: Number , attribute: true, reflect: true }) endYear: number;\n\n @property({ type: Boolean, attribute:true, reflect: true}) showMonthDropdown = false;\n \n @property({ type: Boolean, attribute:true, reflect: true}) showYearDropdown = false;\n\n @property({ type: String, reflect: true, attribute: true}) dateFormat: string = 'MM/DD/YYYY';\n\n\n @state() startDate: Date | null = null;\n\n @state() endDate: Date | null = null;\n\n @state() isSelectingStart = true;\n\n @state() hideInput: Boolean = false;\n\n @state() value: Date | null;\n\n @state() currentMonth: number = new Date().getMonth();\n\n @state() currentYear: number = new Date().getFullYear();\n\n @state() allowedDatesLocal: NileCalendarDateRange | any = null;\n\n @property({ type: Boolean, attribute: true, reflect: true }) disabled = false;\n connectedCallback() {\n super.connectedCallback();\n this.initializeValue();\n this.emit('nile-init');\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.emit('nile-destroy');\n }\n\n protected updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {\n super.updated(changedProperties);\n if (changedProperties.has('valueAttribute')) {\n if(!this.valueAttribute){\n this.value=null;\n this.startDate=null;\n this.endDate=null;\n this.isSelectingStart=true;\n }\n const date = new Date(this.valueAttribute || '');\n if (!isNaN(date.getTime())) {\n const offset = date.getTimezoneOffset();\n this.value = new Date(date.getTime() - offset * 60 * 1000);\n this.currentMonth = this.value.getMonth();\n this.currentYear = this.value.getFullYear();\n }\n this.initializeValue();\n }\n }\n\n private get monthNames() {\n return Array.from({ length: 12 }, (_, i) =>\n new Date(0, i).toLocaleString('default', { month: 'long' })\n );\n }\n\n private get yearOptions(): number[] {\n const fallbackStart = 2000;\n const fallbackEnd = 2050;\n \n const start = this.startYear ?? fallbackStart;\n const end = this.endYear ?? fallbackEnd;\n \n if (start > end) return [];\n \n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n }\n \n private onMonthSelected(monthIndex: number) {\n this.currentMonth = monthIndex;\n this.emit('nile-month-change', { month: monthIndex });\n }\n\n private onYearSelected(year: number) {\n this.currentYear = year;\n this.emit('nile-year-change', { year });\n }\n\n @watch('allowedDates')\n checkValidAllowedDate() {\n let newDateRange: NileCalendarDateRange | null;\n try {\n newDateRange=JSON.parse(this.allowedDates);\n } catch (error) {\n newDateRange=null;\n }\n if (!newDateRange || Object.keys(newDateRange).length == 0) {\n this.allowedDatesLocal=null;\n return;\n }\n this.hideInput=true;\n const startDate = this.getUTCDate(newDateRange.startDate)\n const endDate = this.getUTCDate(newDateRange.endDate)\n\n if (startDate > endDate) {\n console.error('StartDate must be greater than endDate');\n }\n else\n {\n this.allowedDatesLocal=newDateRange;\n }\n }\n\n private isPrevDisabled(): boolean {\n return (\n this.currentMonth === 0 &&\n this.startYear !== undefined &&\n this.currentYear <= this.startYear\n );\n }\n \n private isNextDisabled(): boolean {\n return (\n this.currentMonth === 11 &&\n this.endYear !== undefined &&\n this.currentYear >= this.endYear\n );\n }\n\n private formatDate(date: Date | null): string {\n if (!date) return '';\n \n const yyyy = date.getFullYear();\n const mm = String(date.getMonth() + 1).padStart(2, '0');\n const dd = String(date.getDate()).padStart(2, '0');\n \n let formatted = this.dateFormat;\n formatted = formatted.replace(/YYYY/g, String(yyyy));\n formatted = formatted.replace(/MM/g, mm);\n formatted = formatted.replace(/DD/g, dd);\n formatted = formatted.replace(/YY/g, String(yyyy).slice(-2));\n \n return formatted;\n }\n \n\n private parseDate(input: string, existingDate?: Date | null): Date | null {\n if (!input || !this.dateFormat) return null;\n const formatPattern = this.dateFormat\n .replace(/YYYY/, '(?<year>\\\\d{4})')\n .replace(/YY/, '(?<year>\\\\d{2})')\n .replace(/MM/, '(?<month>\\\\d{1,2})')\n .replace(/DD/, '(?<day>\\\\d{1,2})');\n \n const regex = new RegExp(`^${formatPattern}$`);\n const match = input.match(regex);\n if (!match || !match.groups) return null;\n \n const year = match.groups.year.length === 2 ? Number(`20${match.groups.year}`) : Number(match.groups.year);\n const month = Number(match.groups.month) - 1; \n const day = Number(match.groups.day);\n \n const date = new Date(year, month, day);\n if (existingDate) {\n date.setHours(\n existingDate.getHours(),\n existingDate.getMinutes(),\n existingDate.getSeconds(),\n );\n } else {\n date.setHours(0, 0, 0);\n }\n return date;\n }\n\nprivate handleStartDateInput(event: CustomEvent): void {\n event.stopPropagation();\n const newDate = this.parseDate(event.detail.value, this.startDate);\n if (newDate) {\n newDate.setHours(0, 0, 0);\n this.startDate = newDate;\n this.currentMonth = newDate.getMonth();\n this.currentYear = newDate.getFullYear();\n this.requestUpdate();\n }\n }\nprivate handleEndDateInput(event: CustomEvent): void {\n event.stopPropagation();\n const newDate = this.parseDate(event.detail.value, this.endDate);\n if (newDate) {\n newDate.setHours(23, 59, 59);\n this.endDate = newDate;\n this.currentMonth = newDate.getMonth();\n this.currentYear = newDate.getFullYear();\n this.requestUpdate();\n }\n }\n\n \n\n /**\n * Render method\n */\n render(): TemplateResult {\n return html`\n <div\n class=${classMap({\n base:true,\n base__range:this.range,\n })}\n part=\"calendar-container\"\n >\n <div class=${classMap({\n \"calendar-config\":true,\n \"hidden\": !this.range || (this.range && this.hideTypes)\n })}>\n <div class=\"calendar-switcher\" part=\"calendar-switcher\">\n <nile-tab-group centered @nile-tab-show=\"${this.onTypeChange}\" value=\"${this.type}\">\n <nile-tab slot=\"nav\" panel=\"absolute\" tabindex=\"${this.disabled ? '-1' : '0'}\">Absolute</nile-tab>\n <nile-tab slot=\"nav\" panel=\"relative\" tabindex=\"${this.disabled ? '-1' : '0'}\">Relative</nile-tab>\n </nile-tab-group>\n </div>\n </div>\n \n ${this.type == 'relative' ? this.renderRelativeCalendar():''}\n ${this.type == 'absolute' ? this.renderAbsoluteCalendar():''}\n\n ${!this.range?'':html`\n <div class=\"button-container\" part=\"button-container\">\n ${this.allowClear?\n html`\n <nile-button \n class=\"clear-button\"\n variant=\"secondary\"\n role=\"button\"\n ?disabled=\"${ !this.startDate || !this.endDate || this.disabled }\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.clearDate();}}\"\n @click=\"${this.clearDate}\"\n\n > Reset</nile-button>`:nothing\n }\n <nile-button \n class=\"apply-button\" \n ?disabled=\"${ !this.startDate || !this.endDate || this.disabled }\" \n @click=\"${this.confimRange}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.confimRange();}}\"\n > Apply</nile-button>\n </div>\n `}\n </div>\n `;\n }\n\n /**\n * @returns HTML content for absolute calendar\n */\n renderAbsoluteCalendar(){\n return html`\n <div class=\"calendar-wrapper\" part=\"calendar-wrapper\">\n <div class=\"calendar-container\" >\n ${this.renderMonth(\n this.currentYear,\n this.currentMonth,\n this.getDaysArray(this.currentYear, this.currentMonth)\n )}\n </div>\n </div>\n ${this.range ? html`\n <div class=\"calender-input ${this.showManualInputs ? '' : 'hidden'}\" >\n <div class=\"from\">\n <div class=\"from-date\">\n <nile-input\n ?disabled=\"${this.disabled}\"\n label=\"From\"\n class=\"manual-input date-input\"\n placeholder=\"${this.dateFormat}\"\n value=\"${this.formatDate(this.startDate)}\"\n @nile-change=\"${this.handleStartDateInput}\"\n ></nile-input>\n </div>\n\n <div class=\"from-time\">\n <nile-input\n ?disabled=\"${this.disabled}\"\n class=\"manual-input time-input\"\n placeholder=\"HH:MM:SS\"\n value=\"${this.formatTime(this.startDate)}\"\n @nile-change=\"${this.handleStartTimeInput}\"\n ></nile-input>\n </div>\n</div>\n\n\n <div class=\"from\">\n <div class=\"from-date\">\n <nile-input\n ?disabled=\"${this.disabled}\"\n label=\"To\"\n class=\"manual-input date-input\"\n placeholder=\"${this.dateFormat}\"\n value=\"${this.formatDate(this.endDate)}\"\n @nile-change=\"${this.handleEndDateInput}\"\n ></nile-input>\n </div>\n <div class=\"from-time\">\n <nile-input\n ?disabled=\"${this.disabled}\"\n class=\"manual-input time-input\"\n placeholder=\"HH:MM:SS\"\n value=\"${this.formatTime(this.endDate)}\"\n @nile-change=\"${this.handleEndTimeInput}\"\n ></nile-input>\n </div>\n </div>\n </div>\n `:''}\n `\n }\n\n /**\n * @returns HTML content for relative calendar\n */\n renderRelativeCalendar() {\n return html`\n <div class=\"units-wrapper\">\n <div class=\"unit-container\">\n \n ${this.hideDurationFields?.includes('minutes') ? '' : html`\n <div class=\"unit-group\">\n <div class=\"duration-name\">Minutes</div>\n <div class=\"duration-units\">\n ${this.renderTimeValues('minutes', [1, 5, 15, 30, 45])}\n </div>\n </div>\n `}\n \n ${this.hideDurationFields?.includes('hours') ? '' : html`\n <div class=\"unit-group\">\n <div class=\"duration-name\">Hours</div>\n <div class=\"duration-units\">\n ${this.renderTimeValues('hours', [1, 2, 3, 6, 8, 12])}\n </div>\n </div>\n `}\n \n ${this.hideDurationFields?.includes('days') ? '' : html`\n <div class=\"unit-group\">\n <div class=\"duration-name\">Days</div>\n <div class=\"duration-units\">\n ${this.renderTimeValues('days', [1, 2, 3, 4, 5, 6])}\n </div>\n </div>\n `}\n \n ${this.hideDurationFields?.includes('weeks') ? '' : html`\n <div class=\"unit-group\">\n <div class=\"duration-name\">Weeks</div>\n <div class=\"duration-units\">\n ${this.renderTimeValues('weeks', [1, 2, 4, 6])}\n </div>\n </div>\n `}\n \n ${this.hideDurationFields?.includes('months') ? '' : html`\n <div class=\"unit-group\">\n <div class=\"duration-name\">Months</div>\n <div class=\"duration-units\">\n ${this.renderTimeValues('months', [3, 6, 12, 15])}\n </div>\n </div>\n `}\n </div>\n </div>\n \n ${this.range ? html`\n <div>\n <div class=\"unit-input-container\">\n <nile-input \n class=\"manual-input duration-input\" \n ?disabled=\"${this.disabled}\"\n label=\"Duration\"\n inputmode=\"numeric\"\n type=\"number\"\n value=\"${this.selectedValue}\" \n @nile-change=\"${this.handleDurationChange}\"\n placeholder=\"Enter Value\"\n ></nile-input>\n \n <nile-select \n class=\"manual-input time-input\" \n ?disabled=\"${this.disabled}\"\n label=\"Unit of time\" \n value=\"${this.selectedUnit}\"\n @nile-change=\"${this.handleUnitChange}\"\n >\n <nile-option value=\"minutes\" class=\"${this.hideDurationFields?.includes('minutes') ? 'hidden' : ''}\">Minutes</nile-option>\n <nile-option value=\"hours\" class=\"${this.hideDurationFields?.includes('hours') ? 'hidden' : ''}\">Hours</nile-option>\n <nile-option value=\"days\" class=\"${this.hideDurationFields?.includes('days') ? 'hidden' : ''}\">Days</nile-option>\n <nile-option value=\"weeks\" class=\"${this.hideDurationFields?.includes('weeks') ? 'hidden' : ''}\">Weeks</nile-option>\n <nile-option value=\"months\" class=\"${this.hideDurationFields?.includes('months') ? 'hidden' : ''}\">Months</nile-option>\n </nile-select>\n </div>\n </div>\n ` : ''}\n `;\n }\n \n \n /**\n * \n * @param unit \n * @param values \n * @returns html for the option\n */\n renderTimeValues(unit: TimeUnits, values: any[]) {\n return values.map(\n value =>\n html`\n <div\n class=\"duration__value ${this.selectedUnit === unit && this.selectedValue === value ? 'duration__value--selected':''}\"\n @click=${(e: any) => this.handleTimeValueClick(unit, value, e)}\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.handleTimeValueClick(unit, value, e);}}\"\n >${value}\n </div>`\n );\n }\n\n /**\n * \n * @param year \n * @param month \n * @param daysArray \n * @returns HTML for rendered month\n */\n private renderMonth(\n year: number,\n month: number,\n daysArray: number[]\n ): TemplateResult {\n const firstDay = new Date(year, month, 1).getDay();\n const lastDay = new Date(year, month + 1, 0).getDay();\n const prevMonthDays = this.getDaysArray(\n month === 0 ? year - 1 : year,\n month === 0 ? 11 : month - 1\n );\n const nextMonthDays = this.getDaysArray(\n month === 11 ? year + 1 : year,\n month === 11 ? 0 : month + 1\n );\n const fillerDaysBefore = prevMonthDays.slice(\n prevMonthDays.length - firstDay\n );\n const fillerDaysAfter = nextMonthDays.slice(0, 6 - lastDay);\n const allDays = [...fillerDaysBefore, ...daysArray, ...fillerDaysAfter];\n\n const isSelectedDate = (\n day: number,\n month: number,\n year: number,\n isCurrentMonth: boolean\n ) => {\n if (!isCurrentMonth) return '';\n\n if (!this.range && this.value) {\n const isSelected =\n day === this.value.getDate() &&\n month === this.value.getMonth() &&\n year === this.value.getFullYear();\n if (isSelected) return 'selected-date';\n }\n\n const isStartDate =\n this.startDate &&\n day === this.startDate.getDate() &&\n month === this.startDate.getMonth() &&\n year === this.startDate.getFullYear();\n const isEndDate =\n this.endDate &&\n day === this.endDate.getDate() &&\n month === this.endDate.getMonth() &&\n year === this.endDate.getFullYear();\n\n return isStartDate ? 'range-start' : isEndDate ? 'range-end' : '';\n };\n\n const isInRange = (\n day: number,\n month: number,\n year: number,\n isCurrentMonth: boolean\n ) => {\n if (!isCurrentMonth) return false;\n if (this.startDate && this.endDate) {\n const date = new Date(year, month, day);\n return date >= this.startDate && date <= this.endDate;\n }\n return false;\n };\n\n const isCurrentDate = (day: number, month: number, year: number) => {\n const today = new Date();\n return (\n day === today.getDate() &&\n month + 1 === today.getMonth() + 1 &&\n year === today.getFullYear()\n );\n };\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n return html`\n <div class=\"calendar\">\n <div class=\"calendar-header\">\n <nile-icon\n class=\"calendar-header__month-navigation\"\n name=\"var(--nile-icon-arrow-left, var(--ng-icon-chevron-left))\"\n method=\"var(--nile-svg-method-fill, var(--ng-svg-method-stroke))\"\n color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-fg-primary-900))'}\n role=\"button\"\n tabindex=\"${this.disabled || this.isPrevDisabled() ? '-1' : '0'}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.prevMonth();}}\"\n @click=\"${this.prevMonth}\"\n >\n </nile-icon>\n <div class=\"calendar-header__center\">\n\n${this.showMonthDropdown || this.showYearDropdown ? html`\n ${this.showMonthDropdown ? html`\n <nile-dropdown ?disabled=\"${this.disabled}\" class=\"month-dropdown\">\n <span\n slot=\"trigger\"\n class=\"calendar-header__trigger month-trigger\"\n role=\"button\"\n part=\"trigger\"\n >\n ${new Date(year, month).toLocaleString('default', { month: 'long' })}\n <nile-icon name=\"arrowdropdown\" color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-fg-primary-900))'} class=\"calendar-header__caret\"></nile-icon>\n </span>\n <nile-menu>\n <div class=\"month-scroll-wrapper\">\n ${this.monthNames.map((m, idx) => html`\n <nile-menu-item\n class=\"month-menu-item\"\n ?selected=\"${idx === month}\"\n @click=\"${() => this.onMonthSelected(idx)}\"\n >\n ${m}\n </nile-menu-item>\n `)}\n </div>\n </nile-menu>\n </nile-dropdown>\n ` : html`\n <span\n >${new Date(year, month).toLocaleString('default', { month: 'long' })}</span\n >\n `}\n ${this.showYearDropdown ? html`\n <nile-dropdown ?disabled=\"${this.disabled}\" class=\"year-dropdown\">\n <span\n slot=\"trigger\"\n class=\"calendar-header__trigger\"\n role=\"button\"\n part=\"trigger\"\n >\n ${year}\n <nile-icon name=\"arrowdropdown\" color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-fg-primary-900))'} class=\"calendar-header__caret\"></nile-icon>\n </span>\n <nile-menu>\n <div class=\"year-scroll-wrapper\">\n ${this.yearOptions.map(\n y => html`\n <nile-menu-item\n class=\"year-menu-item\"\n ?selected=\"${y === year}\"\n @click=\"${() => this.onYearSelected(y)}\"\n >\n ${y}\n </nile-menu-item>\n `\n )}\n </div>\n </nile-menu>\n </nile-dropdown>\n ` : html`\n <span>${year}</span>\n `}\n` : html`\n <span\n >${new Date(year, month).toLocaleString('default', {\n month: 'long',\n })}\n ${year}</span\n >\n`}\n</div>\n\n <nile-icon\n class=\"calendar-header__month-navigation\"\n name=\"var(--nile-icon-arrow-right, var(--ng-icon-chevron-right))\"\n method=\"var(--nile-svg-method-fill, var(--ng-svg-method-stroke))\"\n color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-fg-primary-900))'}\n role=\"button\"\n tabindex=\"${this.disabled || this.isNextDisabled() ? '-1' : '0'}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.nextMonth();}}\"\n @click=\"${this.nextMonth}\"\n \n >\n </nile-icon>\n </div>\n \n <div class=\"days_container\">\n ${dayNames.map(day => html`<div class=\"day_name\">${day}</div>`)}\n ${allDays.map((day, index) => {\n const isCurrentMonth =\n index >= fillerDaysBefore.length &&\n index < fillerDaysBefore.length + daysArray.length;\n const datePlacement:''|'selected-date'|'range-start'|'range-end' = isSelectedDate(day, month, year, isCurrentMonth)\n const classMapObj:any={\n 'day_date' : true,\n 'not-allowed' : !this.isAllowedDate(day, month, year),\n 'in-range' : isInRange(day, month, year, isCurrentMonth) ,\n 'filler' : !isCurrentMonth,\n }\n if(datePlacement) classMapObj[datePlacement]=true\n \n return html` \n <div\n part=\"calendar-day-${day}\"\n class=${classMap(classMapObj)}\n tabindex=\"${isCurrentMonth && this.isAllowedDate(day, month, year) && !this.disabled ? '0' : '-1'}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.selectDate(day, month, year);}}\"\n @click=\"${() => { if (isCurrentMonth) this.selectDate(day, month, year)}}\"\n >\n <span style=\"position:relative;\">\n ${day}\n ${isCurrentDate(day, month, year) && isCurrentMonth?html`<div class=\"current__date__dot\" part=\"current-date-dot\"></div>`:nothing}\n </span>\n </div>`;\n })}\n </div>\n </div>\n `;\n }\n\n /**\n * Function to validate if date is not in allowedDates range\n * @param day \n * @param month \n * @param year \n * @returns \n */\n isAllowedDate(day: number, month: number, year: number) {\n if (!this.allowedDatesLocal) {\n return true;\n }\n const dateToCheck = new Date(Date.UTC(year, month, day));\n const startDate = this.getUTCDate(this.allowedDatesLocal.startDate)\n const endDate = this.getUTCDate(this.allowedDatesLocal.endDate)\n endDate.setUTCHours(23, 59, 59, 999);\n const isWithinRange = dateToCheck >= startDate && dateToCheck <= endDate;\n return isWithinRange;\n }\n\n clearDate(mode?: ClearMode) {\n const clearType =\n mode ??\n (this.range\n ? this.type === 'relative'\n ? ClearMode.Relative\n : ClearMode.Range\n : ClearMode.Single);\n \n if (clearType === ClearMode.Single) {\n this.value = null;\n } else {\n this.valueAttribute = '';\n this.startDate = null;\n this.endDate = null;\n this.selectedUnit = undefined!;\n this.selectedValue = undefined!;\n }\n \n this.requestUpdate();\n this.emit('nile-clear');\n } \n\n \n\n /**\n * @function handle_date-click/select\n * @param day \n * @param month \n * @param year \n */\n selectDate(day: number, month: number, year: number): void {\n if (this.disabled) return;\n const selectedDate = new Date(year, month, day);\n\n if (this.range) {\n if (this.startDate && this.endDate) {\n this.startDate = null;\n this.endDate = null;\n }\n\n if (this.isSelectingStart) {\n this.startDate = selectedDate;\n if (this.endDate && selectedDate > this.endDate) {\n this.endDate = null;\n }\n this.isSelectingStart = false;\n } else {\n this.isSelectingStart = true;\n\n if (this.startDate && selectedDate < this.startDate) {\n this.startDate = selectedDate;\n this.endDate = null;\n this.isSelectingStart = false;\n } else {\n const endDate = selectedDate;\n endDate.setHours(23, 59, 59, 999);\n this.endDate = endDate;\n }\n }\n } else {\n if(String(this.value)==String(selectedDate) && this.doubleClickUnselect){\n this.clearDate()\n return\n }\n this.value = selectedDate;\n this.emitChangedData({ value: this.value });\n }\n }\n\n /**\n * Function to be called on initialization to set all other properties\n */\n initializeValue() {\n if (this.range) {\n try {\n const rangeValue = JSON.parse(this.valueAttribute || '');\n this.startDate = new Date(rangeValue.startDate);\n this.endDate = new Date(rangeValue.endDate);\n\n // Convert to local time\n this.startDate = new Date(this.startDate.getTime());\n this.endDate = new Date(this.endDate.getTime());\n\n this.value = null;\n } catch (e) {\n // console.error('Invalid range value');\n }\n } else {\n if (this.valueAttribute) {\n let date: Date = new Date(this.valueAttribute);\n\n date = new Date(date.getTime() - date.getTimezoneOffset() * 60000);\n\n if (!isNaN(date.getTime())) {\n this.value = date;\n this.currentMonth = this.value.getMonth();\n this.currentYear = this.value.getFullYear();\n }\n }\n }\n }\n\n /**\n * Function to handle relative date selection\n */\n handleDurationChange(event: CustomEvent) {\n event.stopPropagation()\n event.detail.value = event.detail.value.replace(/e/gi, \"\");\n const duration=Number(event.detail.value);\n if(!duration) {\n return\n };\n this.selectedValue = duration\n if (this.selectedUnit && this.selectedValue) {\n this.handleTimeValueClick(this.selectedUnit, this.selectedValue, event);\n }\n }\n\n handleUnitChange(event: CustomEvent) {\n event.stopPropagation()\n this.selectedUnit = event.detail.value;\n if (this.selectedUnit && this.selectedValue) {\n this.handleTimeValueClick(this.selectedUnit, this.selectedValue, event);\n }\n }\n\n handleTimeValueClick(unit: TimeUnits, value: number, event: any) {\n this.createRelativePeriod(unit, value)\n this.selectedUnit = unit;\n this.selectedValue = value;\n }\n\n createRelativePeriod(unit: String, value: number) {\n const endTime = new Date();\n const startTime = new Date();\n\n switch (unit) {\n case 'minutes':\n startTime.setMinutes(startTime.getMinutes() - value);\n break;\n case 'hours':\n startTime.setHours(startTime.getHours() - value);\n break;\n case 'days':\n startTime.setDate(startTime.getDate() - value);\n break;\n case 'weeks':\n startTime.setDate(startTime.getDate() - 7 * value); // Subtract weeks as days\n break;\n case 'months':\n startTime.setMonth(startTime.getMonth() - value);\n break;\n }\n\n this.startDate = new Date(startTime.getTime());\n this.endDate = new Date(endTime.getTime());\n\n return {\n startDate: this.startDate,\n endDate: this.endDate,\n };\n }\n \n /**\n * Function to handle start time selecion\n */\n private handleStartTimeInput(event: CustomEvent): void {\n event.stopPropagation()\n if (!this.startDate) {\n this.startDate = null;\n return;\n }\n const time = this.parseTime(event.detail.value, this.startDate);\n if (time) {\n this.startDate = time;\n } else {\n this.startDate.setHours(0, 0, 0);\n }\n this.requestUpdate();\n }\n \n /**\n * Function to handle end time selecion\n */\n private handleEndTimeInput(event: CustomEvent): void {\n event.stopPropagation()\n if (!this.endDate) {\n this.endDate = null;\n return;\n }\n const time = this.parseTime(event.detail.value, this.endDate);\n if (time) {\n this.endDate = time;\n } else {\n this.endDate.setHours(0, 0, 0);\n }\n this.requestUpdate();\n }\n\n // Parse time string to a Date object\n private parseTime(input: string, date: Date): Date | null {\n if (!this.isValidTimeInput(input)) {\n return null;\n }\n const [hour, minute, second] = input.split(':').map(Number);\n const newDate = new Date(date.getTime());\n newDate.setHours(hour, minute, second);\n return newDate;\n }\n\n // Validate time in HH:MM:SS format\n private isValidTimeInput(input: string): boolean {\n const regex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/;\n return regex.test(input);\n }\n\n private formatTime(date: Date | null): string {\n if (!date) return '';\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${hours}:${minutes}:${seconds}`;\n }\n\n private nextMonth(): void {\n if (this.disabled) return;\n if (this.currentMonth === 11) {\n const newYear = this.currentYear + 1;\n if(this.endYear !== undefined && newYear > this.endYear) return;\n this.currentMonth = 0;\n this.currentYear = newYear;\n } else {\n this.currentMonth++;\n }\n }\n\n private prevMonth(): void {\n if (this.disabled) return;\n if (this.currentMonth === 0) {\n const newYear = this.currentYear - 1;\n if(this.startYear !== undefined && newYear < this.startYear) return;\n this.currentMonth = 11;\n this.currentYear = newYear;\n } else {\n this.currentMonth--;\n }\n }\n\n private confimRange() {\n if (!(this.startDate && this.endDate)) return;\n this.emitChangedData( {\n startDate: this.startDate,\n endDate: this.endDate,\n });\n }\n\n onTypeChange(event: CustomEvent) {\n if (this.disabled) return;\n this.type = event.detail.value;\n this.emit('nile-type-change', { value: this.type })\n }\n getUTCDate(dateStr:any){\n return new Date(\n Date.UTC(\n dateStr.slice(0, 4),\n dateStr.slice(5, 7) - 1,\n dateStr.slice(8, 10)\n )\n )\n }\n\n emitChangedData(data:{startDate:Date,endDate:Date}|{value:any}|null){\n this.emit('nile-changed',data); // deprecated. Use nile-change instead\n this.emit('nile-change',data)\n }\n\n private getDaysArray(year: number, month: number): number[] {\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n return Array.from({ length: daysInMonth }, (_, i) => i + 1);\n }\n}\n\nexport default NileCalendar;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-calendar': NileCalendar;\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"nile-calendar.js","sourceRoot":"","sources":["../../../src/nile-calendar/nile-calendar.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n html,\n CSSResultArray,\n TemplateResult,\n nothing\n} from 'lit';\nimport { customElement, state, property } from 'lit/decorators.js';\nimport { styles } from './nile-calendar.css';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { query } from 'lit/decorators.js';\nimport { watch } from '../internal/watch';\nimport NileElement from '../internal/nile-element';\nimport { ClearMode } from './nile-calendar.enum';\nimport { TIMEZONES, isValidTimezone, isClockTime, utcFromFields, localDateFromFields, formatYear4, DEFAULT_START_YEAR, DEFAULT_END_YEAR } from './timezones';\nimport { setAnimation } from '../utilities/animation-registry';\nimport type { PropertyValueMap } from 'lit';\ntype NileCalendarDateRange={ startDate: string, endDate: string }\ntype TimeUnits= 'minutes'|'hours'|'days'|'weeks'|'months';\n\n/** A wall clock — digits on a clock face. Local time*/\nexport type CalendarWallClock = {\n year: number;\n /** 1–12 (January = 1), NOT the 0–11 month of JavaScript `Date`; subtract 1 before `new Date(...)`. */\n month: number;\n day: number;\n hours: number; minutes: number; seconds: number; ms: number;\n};\n\n/* one exact moment on the timeline Eg: 2026-03-01T10:00:00Z, …+05:30 */\nconst INSTANT_VALUE_RE =\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(?::\\d{2})?(?:\\.\\d{1,3})?(?:Z|[+-]\\d{2}:?\\d{2})$/;\n/** an instant plus the zone it was picked in. Eg: 2026-03-01T10:00:00.000[GMT+05:30 Asia/Kolkata] */\nconst BRACKETED_VALUE_RE =\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{3}))?\\[GMT([+-])(\\d{2}):(\\d{2})\\s+([^\\]]+)\\]$/;\nexport function instantFromValueString(raw: string | null | undefined): number | null {\n if (typeof raw !== 'string') return null;\n const trimmed = raw.trim();\n if (!INSTANT_VALUE_RE.test(trimmed)) return null;\n const ms = new Date(trimmed).getTime();\n return isNaN(ms) ? null : ms;\n}\n/** digits on a clock face, 2026-03-01T10:00:00 */\nconst OFFSETLESS_VALUE_RE =\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::(\\d{2}))?(?:\\.(\\d{1,3}))?$/;\n/** Digits as written, with no zone conversion. */\nexport function wallClockFromOffsetLess(\n raw: string | null | undefined\n): CalendarWallClock | null {\n if (typeof raw !== 'string') return null;\n const m = OFFSETLESS_VALUE_RE.exec(raw.trim());\n if (!m) return null;\n const year = Number(m[1]);\n const month0 = Number(m[2]) - 1;\n const day = Number(m[3]);\n if (month0 < 0 || month0 > 11 || day < 1) return null;\n if (!isClockTime(Number(m[4]), Number(m[5]), Number(m[6] ?? 0), Number(m[7] ?? 0))) return null;\n const lastDay = new Date(utcFromFields(year, month0 + 1, 0)).getUTCDate();\n const t = utcFromFields(\n year, month0, Math.min(day, lastDay),\n Number(m[4]), Number(m[5]), Number(m[6] ?? 0), Number(m[7] ?? 0)\n );\n if (isNaN(t)) return null;\n const u = new Date(t);\n return {\n year: u.getUTCFullYear(),\n month: u.getUTCMonth() + 1,\n day: u.getUTCDate(),\n hours: u.getUTCHours(),\n minutes: u.getUTCMinutes(),\n seconds: u.getUTCSeconds(),\n ms: u.getUTCMilliseconds(),\n };\n}\n\nexport function wallClockInZone(epochMs: number, zone: string): CalendarWallClock {\n const formatter = new Intl.DateTimeFormat('en-US', {\n timeZone: zone,\n hourCycle: 'h23',\n year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit',\n });\n const parts: Record<string, number> = {};\n for (const part of formatter.formatToParts(new Date(epochMs))) {\n if (part.type !== 'literal') parts[part.type] = Number(part.value);\n }\n return {\n year: parts.year,\n month: parts.month,\n day: parts.day,\n hours: parts.hour === 24 ? 0 : parts.hour,\n minutes: parts.minute,\n seconds: parts.second,\n ms: ((epochMs % 1000) + 1000) % 1000,\n };\n}\n\nexport function instantFromBracketedValue(\n raw: string | null | undefined\n): { epochMs: number; timezone: string } | null {\n if (typeof raw !== 'string') return null;\n const m = BRACKETED_VALUE_RE.exec(raw.trim());\n if (!m) return null;\n const [, y, mo, d, h, mi, s, ms, sign, oh, om, rawZone] = m;\n const zone = rawZone.trim();\n if (!isValidTimezone(zone)) return null;\n\n const wall = {\n year: Number(y), month: Number(mo), day: Number(d),\n hours: Number(h), minutes: Number(mi), seconds: Number(s), ms: Number(ms ?? 0),\n };\n // ISO end-of-day: exactly 24:00:00(.000) is the next day's 00:00:00; any other hour 24 or above is not a time\n const endOfDay = wall.hours === 24;\n if (wall.hours > 24 || (endOfDay && (wall.minutes !== 0 || wall.seconds !== 0 || wall.ms !== 0))) return null;\n const offsetMs =\n (sign === '-' ? -1 : 1) * (Number(oh) * 3600000 + Number(om) * 60000);\n const wallMs = utcFromFields(wall.year, wall.month - 1, wall.day, wall.hours, wall.minutes, wall.seconds, wall.ms);\n const candidate = wallMs - offsetMs;\n\n const readBack = wallClockInZone(candidate, zone);\n // the digits the zone must read back: the written ones, or the rolled-over next day for 24:00:00\n const expected = endOfDay ? wallClockInZone(wallMs, 'UTC') : wall;\n const digitsAgree =\n readBack.year === expected.year && readBack.month === expected.month &&\n readBack.day === expected.day && readBack.hours === expected.hours &&\n readBack.minutes === expected.minutes && readBack.seconds === expected.seconds &&\n readBack.ms === expected.ms;\n if (!digitsAgree) return null;\n return { epochMs: candidate, timezone: zone };\n}\n/**\n * Nile icon component.\n *\n * @tag nile-calendar\n *\n * @csspart calendar-container - The outer container.\n * @csspart calendar-switcher - The Absolute / Relative tab switcher.\n * @csspart button-container - The default variant's button row.\n * @csspart calendar-wrapper - Wraps the month grid.\n * @csspart trigger - The month and year dropdown triggers.\n * @csspart calendar-day-N - A day cell, where N is the day of the month.\n * @csspart current-date-dot - The marker on today's date.\n *\n * Parts that exist only in `variant=\"date-time-picker\"`:\n * @csspart calendar-config - The row holding the type switcher.\n * @csspart calendar - One month's header and grid.\n * @csspart calendar-header - The month header row.\n * @csspart calendar-header-prev - The previous-month icon.\n * @csspart calendar-header-next - The next-month icon.\n * @csspart calendar-header-center - The month and year area.\n * @csspart days-container - The grid of day cells.\n * @csspart day-name - A weekday label (Sun, Mon, ...).\n * @csspart calendar-day-label - The number inside a day cell.\n * @csspart tp-chevron - The expand / collapse control.\n * @csspart tp-scroll-area - The scrolling area under the grid.\n * @csspart tp-scroll-content - The content inside the scrolling area.\n * @csspart tp-time-fields - The row of time inputs.\n * @csspart tp-time-field - One time input (hours, minutes, seconds, milliseconds).\n * @csspart tp-stepper - The up/down stepper inside a time input.\n * @csspart tp-stepper-btn - Either stepper button.\n * @csspart tp-stepper-btn-up - The increase button.\n * @csspart tp-stepper-btn-down - The decrease button.\n * @csspart tp-timezone - The timezone section.\n * @csspart tp-timezone-header - The timezone label row.\n * @csspart tp-timezone-label - The \"Timezone\" label.\n * @csspart tp-timezone-local-link - The \"Use local timezone\" link.\n * @csspart tp-timezone-select - The timezone select.\n * @csspart tp-footer - The footer.\n * @csspart tp-footer-actions - The Reset and Apply group.\n * @csspart tp-set-to-now-button - The \"Set to now\" button.\n * @csspart clear-button - The Reset button.\n * @csspart apply-button - The Apply button.\n */\n@customElement('nile-calendar')\nexport class NileCalendar extends NileElement {\n /**\n * The styles for NileCalendar\n * @remarks If you are extending this class you can extend the base styles with super. Eg `return [super(), myCustomStyles]`\n */\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n\n\n @property({ type: String, attribute: 'value' }) valueAttribute: | string | null = null;\n\n @property({ type: String, attribute:true, reflect:true }) allowedDates: string = JSON.stringify({});\n\n @property({ type: Boolean, reflect: true }) range = false;\n\n @property({ type: Boolean, attribute: true, reflect:true }) hideTypes = false;\n\n @property({ type: Boolean, attribute: true, reflect: true }) showTypes = false;\n\n @property({ type: Boolean, reflect: true }) doubleClickUnselect = false;\n\n @property({ type: Boolean, reflect: true }) allowClear = false;\n\n @property({ type: String, reflect: true }) type :'absolute' | 'relative' = 'absolute';\n\n @property({ type: String }) selectedUnit: TimeUnits;\n\n @property({ type: Number }) selectedValue: number;\n\n @property({ type: Array, attribute: 'hide-duration-fields' }) hideDurationFields: String[] = [];\n \n @property({ type: Boolean}) showManualInputs :boolean=false;\n\n @property({ type: Number , attribute: true, reflect: true }) startYear: number;\n\n @property({ type: Number , attribute: true, reflect: true }) endYear: number;\n\n @property({ type: Boolean, attribute:true, reflect: true}) showMonthDropdown = false;\n \n @property({ type: Boolean, attribute:true, reflect: true}) showYearDropdown = false;\n\n @property({ type: String, reflect: true, attribute: true}) dateFormat: string = 'MM/DD/YYYY';\n\n @property({ type: Boolean, reflect: true }) structuredInput = false;\n\n @state() startDate: Date | null = null;\n\n @state() endDate: Date | null = null;\n\n @state() isSelectingStart = true;\n\n @state() hideInput: Boolean = false;\n\n @state() value: Date | null;\n\n @state() currentMonth: number = new Date().getMonth();\n\n @state() currentYear: number = new Date().getFullYear();\n\n @state() allowedDatesLocal: NileCalendarDateRange | any = null;\n\n @property({ type: Boolean, attribute: true, reflect: true }) disabled = false;\n\n @property({ type: String, attribute: true }) variant: 'default' | 'date-time-picker' = 'default';\n\n @property({ type: String, attribute: true }) timezone: string = 'UTC';\n\n /** the timezone the consumer configured; Reset restores this (internal changes never overwrite it) */\n private configuredTimezone = 'UTC';\n\n /** the zone the component itself is assigning, so updated() can tell it from a consumer change */\n private internalTimezone: string | null = null;\n\n private setTimezoneInternally(tz: string): void {\n if (tz !== this.timezone) this.internalTimezone = tz;\n this.timezone = tz;\n }\n\n @property({ type: Array, attribute: 'hide-time-fields' }) hideTimeFields: string[] = [];\n\n /** every field shown, minus the keys in hideTimeFields (a non-array value counts as an empty list) */\n private get resolvedTimeFields(): Record<string, boolean> {\n const merged: Record<string, boolean> = {\n hours: true,\n minutes: true,\n seconds: true,\n milliseconds: true,\n timezone: true,\n };\n const hidden = Array.isArray(this.hideTimeFields) ? this.hideTimeFields : [];\n for (const key of hidden) merged[key] = false;\n return merged;\n }\n\n private get tpFewFieldsNoTz(): boolean {\n const f = this.resolvedTimeFields;\n if (f.timezone !== false) return false;\n const timeCount = ['hours', 'minutes', 'seconds', 'milliseconds'].filter(\n k => f[k] !== false\n ).length;\n return timeCount <= 2;\n }\n\n @state() expanded = false;\n @state() tpLockedHeight: string | null = null;\n @state() tpHours: number | null = null;\n @state() tpMinutes: number | null = null;\n @state() tpSeconds: number | null = null;\n @state() tpMilliseconds: number | null = null;\n @state() tpFocusedTimeField: string | null = null;\n /** the day the keyboard last moved to; owns the grid's single tab stop (roving tabindex) */\n @state() tpFocusDate: { year: number; month: number; day: number } | null = null;\n @state() tpEditingText = '';\n\n private seedInstant: number | null = null;\n\n private seedFieldsKey: string | null = null;\n\n private seedZone: string | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n // before initializeValue: a zoned/bracketed value seeds the zone internally and must not become the configured one\n if (!this.hasUpdated) this.configuredTimezone = this.timezone;\n this.initializeValue();\n // firstUpdated runs once; a re-attach (DOM move) must restore the structuredInput listeners disconnectedCallback removed (no-op unless structuredInput)\n if (this.hasUpdated) this.bindStructuredInput();\n // disconnectedCallback dropped the observer; an already-rendered picker panel needs it back (updated() won't run on a bare re-attach)\n if (this.hasUpdated && this.variant === 'date-time-picker') this.observeCollapsedBase();\n this.emit('nile-init');\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.releasePanelObserver();\n this.unbindStructuredInput();\n this.emit('nile-destroy');\n }\n\n protected firstUpdated(): void {\n this.bindStructuredInput();\n }\n\n protected updated(changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>): void {\n super.updated(changedProperties);\n if (changedProperties.has('timezone')) {\n if (this.timezone !== this.internalTimezone) this.configuredTimezone = this.timezone;\n this.internalTimezone = null;\n }\n if (\n changedProperties.has('timezone') &&\n !changedProperties.has('valueAttribute') &&\n this.seedInstant !== null\n ) {\n if (this.seedZone !== null) {\n if (this.timezone !== this.seedZone) this.clearInstantSeed();\n } else if (this.seedFieldsKey === this.instantSeedFieldsKey()) {\n if (isValidTimezone(this.timezone)) {\n this.seedFromInstant(this.seedInstant, this.timezone);\n } else {\n this.clearInstantSeed();\n this.initializeValue();\n }\n } else {\n this.clearInstantSeed();\n }\n }\n if (\n changedProperties.has('structuredInput') ||\n changedProperties.has('variant') ||\n changedProperties.has('range') ||\n changedProperties.has('showManualInputs') ||\n changedProperties.has('type') ||\n changedProperties.has('dateFormat')\n ) {\n this.bindStructuredInput();\n }\n if (changedProperties.has('valueAttribute')) {\n if(!this.valueAttribute){\n this.value=null;\n this.startDate=null;\n this.endDate=null;\n this.isSelectingStart=true;\n if (this.variant === 'date-time-picker') this.resetTimeUnits();\n }\n const date = this.dateFromValueString(this.valueAttribute || '');\n if (!isNaN(date.getTime())) {\n this.value = date;\n this.currentMonth = this.value.getMonth();\n this.currentYear = this.value.getFullYear();\n }\n this.initializeValue();\n }\n if (this.variant === 'date-time-picker') {\n this.applyMonthYearDropdownAnimation();\n this.captureCollapsedHeight();\n } else {\n this.releasePanelObserver(); // the default variant has no picker panel to watch (a variant switch removed it)\n }\n }\n\n private tpResizeObserver?: ResizeObserver;\n\n /** the `.base--date-time-picker` element the observer currently watches */\n private tpObservedBase: HTMLElement | null = null;\n\n private releasePanelObserver(): void {\n this.tpResizeObserver?.disconnect();\n this.tpResizeObserver = undefined;\n this.tpObservedBase = null;\n }\n\n /** (re)points the observer at the rendered panel; a no-op while it already watches that element */\n private observeCollapsedBase(): HTMLElement | null {\n const base = this.shadowRoot?.querySelector(\n '.base--date-time-picker'\n ) as HTMLElement | null;\n if (!base) {\n this.releasePanelObserver();\n return null;\n }\n if (this.tpObservedBase !== base) {\n this.tpResizeObserver?.disconnect();\n this.tpResizeObserver = new ResizeObserver(() => this.measurePanel(base));\n this.tpResizeObserver.observe(base);\n this.tpObservedBase = base;\n }\n return base;\n }\n\n private captureCollapsedHeight(): void {\n const base = this.observeCollapsedBase();\n if (base) this.measurePanel(base);\n }\n\n private measurePanel(base: HTMLElement): void {\n if (this.expanded) return;\n const h = `${base.offsetHeight}px`;\n if (h !== this.tpLockedHeight) this.tpLockedHeight = h;\n }\n\n private applyMonthYearDropdownAnimation(): void {\n const apply = (root: ShadowRoot | null | undefined) => {\n root?.querySelectorAll('.month-dropdown, .year-dropdown').forEach(dd => {\n setAnimation(dd, 'dropdown.show', {\n keyframes: [\n { opacity: 0, scale: 0.9, translate: '0 -14px' },\n { opacity: 1, scale: 1, translate: '0 0' },\n ],\n options: { duration: 280, easing: 'cubic-bezier(0.16, 1, 0.3, 1)' },\n });\n setAnimation(dd, 'dropdown.hide', {\n keyframes: [\n { opacity: 1, scale: 1, translate: '0 0' },\n { opacity: 0, scale: 0.9, translate: '0 -14px' },\n ],\n options: { duration: 160, easing: 'ease' },\n });\n });\n };\n\n apply(this.shadowRoot);\n\n const inner = this.shadowRoot?.querySelector(\n '.tp-inner-calendar'\n ) as (HTMLElement & { updateComplete?: Promise<unknown>; shadowRoot: ShadowRoot | null }) | null;\n if (inner) {\n const innerApply = () => apply(inner.shadowRoot);\n if (inner.updateComplete) inner.updateComplete.then(innerApply);\n else innerApply();\n }\n }\n\n private get monthNames() {\n return Array.from({ length: 12 }, (_, i) =>\n new Date(0, i).toLocaleString('default', { month: 'long' })\n );\n }\n\n private get yearOptions(): number[] {\n const start = this.startYear ?? DEFAULT_START_YEAR;\n const end = this.endYear ?? DEFAULT_END_YEAR;\n \n if (start > end) return [];\n \n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n }\n \n private onMonthSelected(monthIndex: number) {\n this.currentMonth = monthIndex;\n this.emit('nile-month-change', { month: monthIndex });\n }\n\n private onYearSelected(year: number) {\n this.currentYear = year;\n this.emit('nile-year-change', { year });\n }\n\n /** brings the currently-selected month/year option into view when a dropdown opens */\n private scrollSelectedIntoView(selector: string) {\n const selected = this.shadowRoot?.querySelector(selector) as HTMLElement | null;\n if (!selected) return;\n const container = selected.closest(\n '.month-scroll-wrapper, .year-scroll-wrapper'\n ) as HTMLElement | null;\n if (!container) {\n selected.scrollIntoView({ block: 'center' });\n return;\n }\n const target =\n container.scrollTop +\n (selected.getBoundingClientRect().top -\n container.getBoundingClientRect().top) -\n (container.clientHeight - selected.clientHeight) / 2;\n const prefersReducedMotion = window.matchMedia(\n '(prefers-reduced-motion: reduce)'\n ).matches;\n if (prefersReducedMotion) {\n container.scrollTop = target;\n return;\n }\n this.smoothScrollTo(container, target, 450);\n }\n\n private smoothScrollTo(el: HTMLElement, to: number, duration: number) {\n const start = el.scrollTop;\n const change = to - start;\n if (change === 0) return;\n const startTime = performance.now();\n const ease = (t: number) =>\n t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2;\n const step = (now: number) => {\n const t = Math.min(1, (now - startTime) / duration);\n el.scrollTop = start + change * ease(t);\n if (t < 1) requestAnimationFrame(step);\n };\n requestAnimationFrame(step);\n }\n\n @watch('allowedDates')\n checkValidAllowedDate() {\n let newDateRange: NileCalendarDateRange | null;\n try {\n newDateRange=JSON.parse(this.allowedDates);\n } catch (error) {\n newDateRange=null;\n }\n if (!newDateRange || Object.keys(newDateRange).length == 0) {\n this.allowedDatesLocal=null;\n return;\n }\n this.hideInput=true;\n const startDate = this.getUTCDate(newDateRange.startDate)\n const endDate = this.getUTCDate(newDateRange.endDate)\n\n if (startDate > endDate) {\n console.error('StartDate must be greater than endDate');\n }\n else\n {\n this.allowedDatesLocal=newDateRange;\n }\n }\n\n /**\n * The year range month navigation enforces. An explicit `startYear` / `endYear` always wins; the date-time-picker\n * variant falls back to the dropdown's 2000-2050 for an unset side, while the default calendar leaves it open as published.\n */\n private get minYear(): number | undefined {\n return this.variant === 'date-time-picker' ? this.startYear ?? DEFAULT_START_YEAR : this.startYear;\n }\n\n private get maxYear(): number | undefined {\n return this.variant === 'date-time-picker' ? this.endYear ?? DEFAULT_END_YEAR : this.endYear;\n }\n\n private isPrevDisabled(): boolean {\n return (\n this.currentMonth === 0 &&\n this.minYear !== undefined &&\n this.currentYear <= this.minYear\n );\n }\n \n private isNextDisabled(): boolean {\n return (\n this.currentMonth === 11 &&\n this.maxYear !== undefined &&\n this.currentYear >= this.maxYear\n );\n }\n\n private formatDate(date: Date | null): string {\n if (!date) return '';\n \n const yyyy = date.getFullYear();\n const mm = String(date.getMonth() + 1).padStart(2, '0');\n const dd = String(date.getDate()).padStart(2, '0');\n \n let formatted = this.dateFormat;\n // the date-time-picker variant pads years 0-99 to four digits; the default calendar prints the year as published\n formatted = formatted.replace(/YYYY/g, this.variant === 'date-time-picker' ? formatYear4(yyyy) : String(yyyy));\n formatted = formatted.replace(/MM/g, mm);\n formatted = formatted.replace(/DD/g, dd);\n formatted = formatted.replace(/YY/g, String(yyyy).slice(-2));\n \n return formatted;\n }\n \n\n private parseDate(input: string, existingDate?: Date | null): Date | null {\n if (!input || !this.dateFormat) return null;\n const formatPattern = this.dateFormat\n .replace(/YYYY/, '(?<year>\\\\d{4})')\n .replace(/YY/, '(?<year>\\\\d{2})')\n .replace(/MM/, '(?<month>\\\\d{1,2})')\n .replace(/DD/, '(?<day>\\\\d{1,2})');\n \n const regex = new RegExp(`^${formatPattern}$`);\n const match = input.match(regex);\n if (!match || !match.groups) return null;\n \n const dtp = this.variant === 'date-time-picker';\n const typedYear = match.groups.year;\n let year = typedYear.length === 2 ? Number(`20${typedYear}`) : Number(typedYear);\n // date-time-picker only: an existing bound keeps its century while the visible two digits are unchanged; with no existing bound a typed YY is 2000-2099 (the default calendar reads it as published)\n if (dtp && typedYear.length === 2 && existingDate && Math.abs(existingDate.getFullYear()) % 100 === Number(typedYear)) {\n year = existingDate.getFullYear();\n }\n const month = Number(match.groups.month) - 1; \n const day = Number(match.groups.day);\n \n // new Date(y, ...) remaps years 0-99 to 1900-1999 as published; only the variant keeps the literal year\n const date = dtp ? localDateFromFields(year, month, day) : new Date(year, month, day);\n if (existingDate) {\n date.setHours(\n existingDate.getHours(),\n existingDate.getMinutes(),\n existingDate.getSeconds(),\n );\n } else {\n date.setHours(0, 0, 0);\n }\n return date;\n }\n\nprivate handleStartDateInput(event: CustomEvent): void {\n event.stopPropagation();\n const newDate = this.parseDate(event.detail.value, this.startDate);\n if (newDate) {\n newDate.setHours(0, 0, 0);\n this.startDate = newDate;\n this.currentMonth = newDate.getMonth();\n this.currentYear = newDate.getFullYear();\n this.requestUpdate();\n }\n }\nprivate handleEndDateInput(event: CustomEvent): void {\n event.stopPropagation();\n const newDate = this.parseDate(event.detail.value, this.endDate);\n if (newDate) {\n newDate.setHours(23, 59, 59);\n this.endDate = newDate;\n this.currentMonth = newDate.getMonth();\n this.currentYear = newDate.getFullYear();\n this.requestUpdate();\n }\n }\n\n \n private maskValuesMap = new WeakMap<HTMLInputElement, string[]>();\n\n private boundMaskInputs: Element[] = [];\n\n private unbindStructuredInput(): void {\n for (const inp of this.boundMaskInputs) {\n inp.removeEventListener('keydown', this.onMaskKeydown as EventListener, true);\n inp.removeEventListener('focusout', this.onMaskBlur as EventListener);\n }\n this.boundMaskInputs = [];\n }\n\n private bindStructuredInput(): void {\n this.unbindStructuredInput();\n if (!this.structuredInput) return;\n const inputs = this.shadowRoot?.querySelectorAll('.calender-input nile-input');\n inputs?.forEach(inp => {\n inp.addEventListener('keydown', this.onMaskKeydown as EventListener, true);\n inp.addEventListener('focusout', this.onMaskBlur as EventListener);\n this.boundMaskInputs.push(inp);\n });\n }\n\n private dateMaskSegments(): Array<{ kind: string; len: number; min: number; max: number; after: string }> {\n const spec = (token: string): { kind: string; len: number; min: number; max: number } => {\n switch (token) {\n case 'YYYY': return { kind: 'year', len: 4, min: 0, max: 9999 };\n case 'YY': return { kind: 'year', len: 2, min: 0, max: 99 };\n case 'MM': return { kind: 'month', len: 2, min: 1, max: 12 };\n default: return { kind: 'day', len: 2, min: 1, max: 31 }; // DD\n }\n };\n const fmt = this.dateFormat || 'MM/DD/YYYY';\n const re = /YYYY|YY|MM|DD/g;\n const found: Array<{ token: string; index: number }> = [];\n let m: RegExpExecArray | null;\n while ((m = re.exec(fmt)) !== null) found.push({ token: m[0], index: m.index });\n return found.map((f, i) => {\n const sep = fmt.slice(\n f.index + f.token.length,\n i + 1 < found.length ? found[i + 1].index : fmt.length\n );\n return { ...spec(f.token), after: i < found.length - 1 ? sep : '' };\n });\n }\n\n private timeMaskSegments(): Array<{ kind: string; len: number; min: number; max: number; after: string }> {\n return [\n { kind: 'hour', len: 2, min: 0, max: 23, after: ':' },\n { kind: 'minute', len: 2, min: 0, max: 59, after: ':' },\n { kind: 'second', len: 2, min: 0, max: 59, after: '' },\n ];\n }\n\n private buildMaskLayout(\n segs: Array<{ kind: string; len: number; min: number; max: number; after: string }>\n ) {\n const tokens: Array<{ slot: number } | { lit: string }> = [];\n const slots: Array<{ kind: string; min: number; max: number; len: number; segStart: number }> = [];\n for (const seg of segs) {\n const segStart = slots.length;\n for (let k = 0; k < seg.len; k++) {\n tokens.push({ slot: slots.length });\n slots.push({ kind: seg.kind, min: seg.min, max: seg.max, len: seg.len, segStart });\n }\n for (const ch of seg.after) tokens.push({ lit: ch });\n }\n return { tokens, slots, length: tokens.length };\n }\n\n private maskLayoutFor(kind: 'date' | 'time') {\n return this.buildMaskLayout(kind === 'time' ? this.timeMaskSegments() : this.dateMaskSegments());\n }\n\n private computeMaskDisplay(values: string[], layout: ReturnType<typeof this.buildMaskLayout>) {\n let lastFilled = -1;\n values.forEach((v, i) => { if (v !== '') lastFilled = i; });\n let s = '';\n const slotPos = new Array(layout.slots.length).fill(-1);\n for (const t of layout.tokens) {\n if ('slot' in t) {\n if (t.slot > lastFilled) break; // stop at the trailing empties\n slotPos[t.slot] = s.length;\n if (values[t.slot]) s += values[t.slot];\n } else {\n s += t.lit;\n }\n }\n return { display: lastFilled === -1 ? '' : s, slotPos, lastFilled };\n }\n\n private initMaskValues(text: string, layout: ReturnType<typeof this.buildMaskLayout>): string[] {\n const digits = (text || '').replace(/\\D/g, '').slice(0, layout.slots.length);\n return layout.slots.map((_s, i) => digits[i] ?? '');\n }\n\n /** clamp a filled segment into range (year is left unclamped) */\n private clampMaskSegment(\n values: string[],\n layout: ReturnType<typeof this.buildMaskLayout>,\n slotIndex: number\n ): void {\n const seg = layout.slots[slotIndex];\n if (seg.kind === 'year') return;\n const segSlots: number[] = [];\n layout.slots.forEach((s, i) => { if (s.segStart === seg.segStart) segSlots.push(i); });\n const chars = segSlots.map(i => values[i]);\n if (chars.some(c => c === '')) return; // segment not full yet\n const joined = chars.join('');\n const n = Number(joined);\n let corrected: string | null = null;\n if (n > seg.max) corrected = String(Number(joined[0])).padStart(seg.len, '0');\n else if (n < seg.min) corrected = String(seg.min).padStart(seg.len, '0');\n if (corrected !== null) segSlots.forEach((s, k) => { values[s] = corrected![k]; });\n }\n\n private maskValuesFor(\n native: HTMLInputElement,\n layout: ReturnType<typeof this.buildMaskLayout>\n ): string[] {\n let values = this.maskValuesMap.get(native);\n if (!values || values.length !== layout.slots.length) {\n values = this.initMaskValues(native.value, layout);\n } else if (this.computeMaskDisplay(values, layout).display !== native.value) {\n values = this.initMaskValues(native.value, layout);\n }\n this.maskValuesMap.set(native, values);\n return values;\n }\n\n private onMaskKeydown = (e: KeyboardEvent): void => {\n if (this.disabled || e.ctrlKey || e.metaKey || e.altKey) return;\n const nav = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End',\n 'Tab', 'Enter', 'Shift', 'Control', 'Meta', 'Alt', 'CapsLock'];\n if (nav.includes(e.key)) return;\n\n const nileInput = e.currentTarget as (HTMLElement & { input?: HTMLInputElement; value?: string }) | null;\n const native = nileInput?.input;\n if (!nileInput || !native) return;\n\n const kind: 'date' | 'time' = nileInput.classList.contains('time-input') ? 'time' : 'date';\n const layout = this.maskLayoutFor(kind);\n const values = this.maskValuesFor(native, layout);\n const { slotPos } = this.computeMaskDisplay(values, layout);\n const selStart = native.selectionStart ?? 0;\n const selEnd = native.selectionEnd ?? selStart;\n\n const writeMask = (display: string, caret: number) => {\n native.value = display;\n nileInput.value = display;\n try { native.setSelectionRange(caret, caret); } catch { /* noop */ }\n };\n const caretAfter = (target: number) => {\n const after = this.computeMaskDisplay(values, layout);\n const np = after.slotPos[target + 1];\n if (np !== undefined && np !== -1) return np;\n return after.display.length;\n };\n\n if (e.key >= '0' && e.key <= '9') {\n e.preventDefault();\n let target = slotPos.findIndex(p => p !== -1 && p >= selStart);\n if (target === -1) target = values.findIndex(v => v === ''); // append at the first gap\n if (target === -1) return; // every slot full and caret past the end\n values[target] = e.key;\n this.clampMaskSegment(values, layout, target);\n writeMask(this.computeMaskDisplay(values, layout).display, caretAfter(target));\n return;\n }\n\n if (e.key === 'Backspace') {\n e.preventDefault();\n if (selStart !== selEnd) {\n for (let i = 0; i < values.length; i++) {\n if (slotPos[i] !== -1 && slotPos[i] >= selStart && slotPos[i] < selEnd) values[i] = '';\n }\n writeMask(this.computeMaskDisplay(values, layout).display, selStart);\n return;\n }\n let target = -1;\n for (let i = 0; i < values.length; i++) {\n if (values[i] !== '' && slotPos[i] !== -1 && slotPos[i] < selStart) target = i;\n }\n if (target === -1) return;\n values[target] = '';\n const after = this.computeMaskDisplay(values, layout);\n writeMask(after.display, after.slotPos[target] !== -1 ? after.slotPos[target] : Math.max(0, selStart - 1));\n return;\n }\n\n if (e.key === 'Delete') {\n e.preventDefault();\n let target = -1;\n for (let i = 0; i < values.length; i++) {\n if (values[i] !== '' && slotPos[i] !== -1 && slotPos[i] >= selStart) { target = i; break; }\n }\n if (target === -1) return;\n values[target] = '';\n const after = this.computeMaskDisplay(values, layout);\n writeMask(after.display, after.slotPos[target] !== -1 ? after.slotPos[target] : selStart);\n return;\n }\n\n if (e.key.length === 1) e.preventDefault(); // block any other printable key\n };\n\n private onMaskBlur = (e: FocusEvent): void => {\n const nileInput = e.currentTarget as (HTMLElement & { input?: HTMLInputElement; value?: string; emit?: Function }) | null;\n const native = nileInput?.input;\n if (!nileInput || !native) return;\n\n const kind: 'date' | 'time' = nileInput.classList.contains('time-input') ? 'time' : 'date';\n const layout = this.maskLayoutFor(kind);\n const values = this.maskValuesFor(native, layout);\n\n if (!values.some(v => v !== '')) {\n native.value = '';\n nileInput.value = '';\n nileInput.emit?.('nile-change', { value: '' });\n return;\n }\n\n // left-pad any partially-typed segment, then clamp each into range\n const segStarts = [...new Set(layout.slots.map(s => s.segStart))];\n for (const start of segStarts) {\n const idxs = layout.slots.map((s, i) => (s.segStart === start ? i : -1)).filter(i => i !== -1);\n const digits = idxs.map(i => values[i]).filter(c => c !== '');\n if (digits.length > 0 && digits.length < idxs.length) {\n const padded = digits.join('').padStart(idxs.length, '0');\n idxs.forEach((i, k) => { values[i] = padded[k]; });\n }\n }\n segStarts.forEach(start => this.clampMaskSegment(values, layout, start));\n\n const { display } = this.computeMaskDisplay(values, layout);\n native.value = display;\n nileInput.value = display;\n nileInput.emit?.('nile-change', { value: display });\n };\n\n /**\n * Render method\n */\n render(): TemplateResult {\n if (this.variant === 'date-time-picker') {\n return this.renderDateTimePicker();\n }\n return html`\n <div\n class=${classMap({\n base:true,\n base__range:this.range,\n })}\n part=\"calendar-container\"\n >\n <div class=${classMap({\n \"calendar-config\":true,\n \"hidden\": !this.range || (this.range && this.hideTypes)\n })}>\n <div class=\"calendar-switcher\" part=\"calendar-switcher\">\n <nile-tab-group centered @nile-tab-show=\"${this.onTypeChange}\" value=\"${this.type}\">\n <nile-tab slot=\"nav\" panel=\"absolute\" tabindex=\"${this.disabled ? '-1' : '0'}\">Absolute</nile-tab>\n <nile-tab slot=\"nav\" panel=\"relative\" tabindex=\"${this.disabled ? '-1' : '0'}\">Relative</nile-tab>\n </nile-tab-group>\n </div>\n </div>\n \n ${this.type == 'relative' ? this.renderRelativeCalendar():''}\n ${this.type == 'absolute' ? this.renderAbsoluteCalendar():''}\n\n ${!this.range?'':html`\n <div class=\"button-container\" part=\"button-container\">\n ${this.allowClear?\n html`\n <nile-button \n class=\"clear-button\"\n variant=\"secondary\"\n role=\"button\"\n ?disabled=\"${ !this.startDate || !this.endDate || this.disabled }\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.clearDate();}}\"\n @click=\"${this.clearDate}\"\n\n > Reset</nile-button>`:nothing\n }\n <nile-button \n class=\"apply-button\" \n ?disabled=\"${ !this.startDate || !this.endDate || this.disabled }\" \n @click=\"${this.confimRange}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.confimRange();}}\"\n > Apply</nile-button>\n </div>\n `}\n </div>\n `;\n }\n\n /**\n * @returns HTML content for absolute calendar\n */\n renderAbsoluteCalendar(){\n return html`\n <div class=\"calendar-wrapper\" part=\"calendar-wrapper\">\n <div class=\"calendar-container\" >\n ${this.renderMonth(\n this.currentYear,\n this.currentMonth,\n this.getDaysArray(this.currentYear, this.currentMonth)\n )}\n </div>\n </div>\n ${this.range ? html`\n <div class=\"calender-input ${this.showManualInputs ? '' : 'hidden'}\" >\n <div class=\"from\">\n <div class=\"from-date\">\n <nile-input\n ?disabled=\"${this.disabled}\"\n label=\"From\"\n class=\"manual-input date-input\"\n placeholder=\"${this.dateFormat}\"\n value=\"${this.formatDate(this.startDate)}\"\n @nile-change=\"${this.handleStartDateInput}\"\n ></nile-input>\n </div>\n\n <div class=\"from-time\">\n <nile-input\n ?disabled=\"${this.disabled}\"\n class=\"manual-input time-input\"\n placeholder=\"HH:MM:SS\"\n value=\"${this.formatTime(this.startDate)}\"\n @nile-change=\"${this.handleStartTimeInput}\"\n ></nile-input>\n </div>\n</div>\n\n\n <div class=\"from\">\n <div class=\"from-date\">\n <nile-input\n ?disabled=\"${this.disabled}\"\n label=\"To\"\n class=\"manual-input date-input\"\n placeholder=\"${this.dateFormat}\"\n value=\"${this.formatDate(this.endDate)}\"\n @nile-change=\"${this.handleEndDateInput}\"\n ></nile-input>\n </div>\n <div class=\"from-time\">\n <nile-input\n ?disabled=\"${this.disabled}\"\n class=\"manual-input time-input\"\n placeholder=\"HH:MM:SS\"\n value=\"${this.formatTime(this.endDate)}\"\n @nile-change=\"${this.handleEndTimeInput}\"\n ></nile-input>\n </div>\n </div>\n </div>\n `:''}\n `\n }\n\n /**\n * @returns HTML content for relative calendar\n */\n renderRelativeCalendar() {\n return html`\n <div class=\"units-wrapper\">\n <div class=\"unit-container\">\n \n ${this.hideDurationFields?.includes('minutes') ? '' : html`\n <div class=\"unit-group\">\n <div class=\"duration-name\">Minutes</div>\n <div class=\"duration-units\">\n ${this.renderTimeValues('minutes', [1, 5, 15, 30, 45])}\n </div>\n </div>\n `}\n \n ${this.hideDurationFields?.includes('hours') ? '' : html`\n <div class=\"unit-group\">\n <div class=\"duration-name\">Hours</div>\n <div class=\"duration-units\">\n ${this.renderTimeValues('hours', [1, 2, 3, 6, 8, 12])}\n </div>\n </div>\n `}\n \n ${this.hideDurationFields?.includes('days') ? '' : html`\n <div class=\"unit-group\">\n <div class=\"duration-name\">Days</div>\n <div class=\"duration-units\">\n ${this.renderTimeValues('days', [1, 2, 3, 4, 5, 6])}\n </div>\n </div>\n `}\n \n ${this.hideDurationFields?.includes('weeks') ? '' : html`\n <div class=\"unit-group\">\n <div class=\"duration-name\">Weeks</div>\n <div class=\"duration-units\">\n ${this.renderTimeValues('weeks', [1, 2, 4, 6])}\n </div>\n </div>\n `}\n \n ${this.hideDurationFields?.includes('months') ? '' : html`\n <div class=\"unit-group\">\n <div class=\"duration-name\">Months</div>\n <div class=\"duration-units\">\n ${this.renderTimeValues('months', [3, 6, 12, 15])}\n </div>\n </div>\n `}\n </div>\n </div>\n \n ${this.variant === 'date-time-picker' ? html`\n <div>\n <div class=\"unit-input-container\">\n <nile-input\n class=\"manual-input duration-input\"\n ?disabled=\"${this.disabled}\"\n label=\"Duration\"\n inputmode=\"numeric\"\n type=\"text\"\n value=\"${this.selectedValue}\"\n @nile-input=\"${this.handleDurationChange}\"\n @nile-change=\"${this.handleDurationChange}\"\n placeholder=\"Enter Value\"\n ></nile-input>\n\n <nile-select\n class=\"manual-input time-input\"\n ?disabled=\"${this.disabled}\"\n label=\"Unit of time\"\n value=\"${this.selectedUnit}\"\n @nile-change=\"${this.handleUnitChange}\"\n >\n ${this.hideDurationFields?.includes('minutes') ? '' : html`<nile-option value=\"minutes\">Minutes</nile-option>`}\n ${this.hideDurationFields?.includes('hours') ? '' : html`<nile-option value=\"hours\">Hours</nile-option>`}\n ${this.hideDurationFields?.includes('days') ? '' : html`<nile-option value=\"days\">Days</nile-option>`}\n ${this.hideDurationFields?.includes('weeks') ? '' : html`<nile-option value=\"weeks\">Weeks</nile-option>`}\n ${this.hideDurationFields?.includes('months') ? '' : html`<nile-option value=\"months\">Months</nile-option>`}\n </nile-select>\n </div>\n </div>\n ` : this.range ? html`\n <div>\n <div class=\"unit-input-container\">\n <nile-input \n class=\"manual-input duration-input\" \n ?disabled=\"${this.disabled}\"\n label=\"Duration\"\n inputmode=\"numeric\"\n type=\"number\"\n value=\"${this.selectedValue}\" \n @nile-change=\"${this.handleDurationChange}\"\n placeholder=\"Enter Value\"\n ></nile-input>\n \n <nile-select \n class=\"manual-input time-input\" \n ?disabled=\"${this.disabled}\"\n label=\"Unit of time\" \n value=\"${this.selectedUnit}\"\n @nile-change=\"${this.handleUnitChange}\"\n >\n <nile-option value=\"minutes\" class=\"${this.hideDurationFields?.includes('minutes') ? 'hidden' : ''}\">Minutes</nile-option>\n <nile-option value=\"hours\" class=\"${this.hideDurationFields?.includes('hours') ? 'hidden' : ''}\">Hours</nile-option>\n <nile-option value=\"days\" class=\"${this.hideDurationFields?.includes('days') ? 'hidden' : ''}\">Days</nile-option>\n <nile-option value=\"weeks\" class=\"${this.hideDurationFields?.includes('weeks') ? 'hidden' : ''}\">Weeks</nile-option>\n <nile-option value=\"months\" class=\"${this.hideDurationFields?.includes('months') ? 'hidden' : ''}\">Months</nile-option>\n </nile-select>\n </div>\n </div>\n ` : ''}\n `;\n }\n \n \n /**\n * \n * @param unit \n * @param values \n * @returns html for the option\n */\n renderTimeValues(unit: TimeUnits, values: any[]) {\n return values.map(\n value =>\n html`\n <div\n class=\"duration__value ${this.selectedUnit === unit && this.selectedValue === value ? 'duration__value--selected':''}\"\n @click=${(e: any) => this.handleTimeValueClick(unit, value, e)}\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.handleTimeValueClick(unit, value, e);}}\"\n >${value}\n </div>`\n );\n }\n\n /**\n * \n * @param year \n * @param month \n * @param daysArray \n * @returns HTML for rendered month\n */\n private renderMonth(\n year: number,\n month: number,\n daysArray: number[]\n ): TemplateResult {\n const firstDay = new Date(year, month, 1).getDay();\n const lastDay = new Date(year, month + 1, 0).getDay();\n const prevMonthDays = this.getDaysArray(\n month === 0 ? year - 1 : year,\n month === 0 ? 11 : month - 1\n );\n const nextMonthDays = this.getDaysArray(\n month === 11 ? year + 1 : year,\n month === 11 ? 0 : month + 1\n );\n const fillerDaysBefore = prevMonthDays.slice(\n prevMonthDays.length - firstDay\n );\n const fillerDaysAfter = nextMonthDays.slice(0, 6 - lastDay);\n const allDays = [...fillerDaysBefore, ...daysArray, ...fillerDaysAfter];\n\n const isSelectedDate = (\n day: number,\n month: number,\n year: number,\n isCurrentMonth: boolean\n ) => {\n if (!isCurrentMonth) return '';\n\n if (!this.range && this.value) {\n const isSelected =\n day === this.value.getDate() &&\n month === this.value.getMonth() &&\n year === this.value.getFullYear();\n if (isSelected) return 'selected-date';\n }\n\n const isStartDate =\n this.startDate &&\n day === this.startDate.getDate() &&\n month === this.startDate.getMonth() &&\n year === this.startDate.getFullYear();\n const isEndDate =\n this.endDate &&\n day === this.endDate.getDate() &&\n month === this.endDate.getMonth() &&\n year === this.endDate.getFullYear();\n\n return isStartDate ? 'range-start' : isEndDate ? 'range-end' : '';\n };\n\n const isInRange = (\n day: number,\n month: number,\n year: number,\n isCurrentMonth: boolean\n ) => {\n if (!isCurrentMonth) return false;\n if (this.startDate && this.endDate) {\n const date = new Date(year, month, day);\n return date >= this.startDate && date <= this.endDate;\n }\n return false;\n };\n\n const isCurrentDate = (day: number, month: number, year: number) => {\n const today = new Date();\n return (\n day === today.getDate() &&\n month + 1 === today.getMonth() + 1 &&\n year === today.getFullYear()\n );\n };\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n return html`\n <div class=\"calendar\">\n <div class=\"calendar-header\">\n <nile-icon\n class=\"calendar-header__month-navigation\"\n name=\"var(--nile-icon-arrow-left, var(--ng-icon-chevron-left))\"\n method=\"var(--nile-svg-method-fill, var(--ng-svg-method-stroke))\"\n color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-fg-primary-900))'}\n role=\"button\"\n tabindex=\"${this.disabled || this.isPrevDisabled() ? '-1' : '0'}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.prevMonth();}}\"\n @click=\"${this.prevMonth}\"\n >\n </nile-icon>\n <div class=\"calendar-header__center\">\n\n${this.showMonthDropdown || this.showYearDropdown ? html`\n ${this.showMonthDropdown ? html`\n <nile-dropdown ?disabled=\"${this.disabled}\" class=\"month-dropdown\">\n <span\n slot=\"trigger\"\n class=\"calendar-header__trigger month-trigger\"\n role=\"button\"\n part=\"trigger\"\n >\n ${new Date(year, month).toLocaleString('default', { month: 'long' })}\n <nile-icon name=\"arrowdropdown\" color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-fg-primary-900))'} class=\"calendar-header__caret\"></nile-icon>\n </span>\n <nile-menu>\n <div class=\"month-scroll-wrapper\">\n ${this.monthNames.map((m, idx) => html`\n <nile-menu-item\n class=\"month-menu-item\"\n ?selected=\"${idx === month}\"\n @click=\"${() => this.onMonthSelected(idx)}\"\n >\n ${m}\n </nile-menu-item>\n `)}\n </div>\n </nile-menu>\n </nile-dropdown>\n ` : html`\n <span\n >${new Date(year, month).toLocaleString('default', { month: 'long' })}</span\n >\n `}\n ${this.showYearDropdown ? html`\n <nile-dropdown ?disabled=\"${this.disabled}\" class=\"year-dropdown\">\n <span\n slot=\"trigger\"\n class=\"calendar-header__trigger\"\n role=\"button\"\n part=\"trigger\"\n >\n ${year}\n <nile-icon name=\"arrowdropdown\" color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-fg-primary-900))'} class=\"calendar-header__caret\"></nile-icon>\n </span>\n <nile-menu>\n <div class=\"year-scroll-wrapper\">\n ${this.yearOptions.map(\n y => html`\n <nile-menu-item\n class=\"year-menu-item\"\n ?selected=\"${y === year}\"\n @click=\"${() => this.onYearSelected(y)}\"\n >\n ${y}\n </nile-menu-item>\n `\n )}\n </div>\n </nile-menu>\n </nile-dropdown>\n ` : html`\n <span>${year}</span>\n `}\n` : html`\n <span\n >${new Date(year, month).toLocaleString('default', {\n month: 'long',\n })}\n ${year}</span\n >\n`}\n</div>\n\n <nile-icon\n class=\"calendar-header__month-navigation\"\n name=\"var(--nile-icon-arrow-right, var(--ng-icon-chevron-right))\"\n method=\"var(--nile-svg-method-fill, var(--ng-svg-method-stroke))\"\n color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-fg-primary-900))'}\n role=\"button\"\n tabindex=\"${this.disabled || this.isNextDisabled() ? '-1' : '0'}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.nextMonth();}}\"\n @click=\"${this.nextMonth}\"\n \n >\n </nile-icon>\n </div>\n \n <div class=\"days_container\">\n ${dayNames.map(day => html`<div class=\"day_name\">${day}</div>`)}\n ${allDays.map((day, index) => {\n const isCurrentMonth =\n index >= fillerDaysBefore.length &&\n index < fillerDaysBefore.length + daysArray.length;\n const datePlacement:''|'selected-date'|'range-start'|'range-end' = isSelectedDate(day, month, year, isCurrentMonth)\n const classMapObj:any={\n 'day_date' : true,\n 'not-allowed' : !this.isAllowedDate(day, month, year),\n 'in-range' : isInRange(day, month, year, isCurrentMonth) ,\n 'filler' : !isCurrentMonth,\n }\n if(datePlacement) classMapObj[datePlacement]=true\n \n return html` \n <div\n part=\"calendar-day-${day}\"\n class=${classMap(classMapObj)}\n tabindex=\"${isCurrentMonth && this.isAllowedDate(day, month, year) && !this.disabled ? '0' : '-1'}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.selectDate(day, month, year);}}\"\n @click=\"${() => { if (isCurrentMonth) this.selectDate(day, month, year)}}\"\n >\n <span style=\"position:relative;\">\n ${day}\n ${isCurrentDate(day, month, year) && isCurrentMonth?html`<div class=\"current__date__dot\" part=\"current-date-dot\"></div>`:nothing}\n </span>\n </div>`;\n })}\n </div>\n </div>\n `;\n }\n\n /**\n * Function to validate if date is not in allowedDates range\n * @param day \n * @param month \n * @param year \n * @returns \n */\n isAllowedDate(day: number, month: number, year: number) {\n if (!this.allowedDatesLocal) {\n return true;\n }\n // Date.UTC remaps years 0-99 to 1900-1999 as published; only the date-time-picker variant keeps the literal year\n const dateToCheck = new Date(this.variant === 'date-time-picker' ? utcFromFields(year, month, day) : Date.UTC(year, month, day));\n const startDate = this.getUTCDate(this.allowedDatesLocal.startDate)\n const endDate = this.getUTCDate(this.allowedDatesLocal.endDate)\n endDate.setUTCHours(23, 59, 59, 999);\n const isWithinRange = dateToCheck >= startDate && dateToCheck <= endDate;\n return isWithinRange;\n }\n\n private dayCellLabel(day: number, month: number, year: number): string {\n return localDateFromFields(year, month, day, 12).toLocaleDateString('default', {\n weekday: 'long', day: 'numeric', month: 'long', year: 'numeric',\n });\n }\n\n clearDate(mode?: ClearMode) {\n const clearType =\n mode ??\n (this.range\n ? this.type === 'relative'\n ? ClearMode.Relative\n : ClearMode.Range\n : ClearMode.Single);\n \n this.clearInstantSeed();\n if (clearType === ClearMode.Single) {\n this.value = null;\n } else {\n this.valueAttribute = '';\n this.startDate = null;\n this.endDate = null;\n this.selectedUnit = undefined!;\n this.selectedValue = undefined!;\n }\n \n this.requestUpdate();\n this.emit('nile-clear');\n } \n\n \n\n /**\n * @function handle_date-click/select\n * @param day \n * @param month \n * @param year \n */\n selectDate(day: number, month: number, year: number): void {\n if (this.disabled) return;\n // new Date(y, ...) remaps years 0-99 to 1900-1999 as published; only the date-time-picker variant keeps the literal year\n const selectedDate = this.variant === 'date-time-picker' ? localDateFromFields(year, month, day) : new Date(year, month, day);\n\n if (this.range) {\n if (this.startDate && this.endDate) {\n this.startDate = null;\n this.endDate = null;\n }\n\n if (this.isSelectingStart) {\n this.startDate = selectedDate;\n if (this.endDate && selectedDate > this.endDate) {\n this.endDate = null;\n }\n this.isSelectingStart = false;\n } else {\n this.isSelectingStart = true;\n\n if (this.startDate && selectedDate < this.startDate) {\n this.startDate = selectedDate;\n this.endDate = null;\n this.isSelectingStart = false;\n } else {\n const endDate = selectedDate;\n endDate.setHours(23, 59, 59, 999);\n this.endDate = endDate;\n }\n }\n } else {\n if(String(this.value)==String(selectedDate) && this.doubleClickUnselect){\n this.clearDate()\n return\n }\n this.value = selectedDate;\n this.emitChangedData({ value: this.value });\n }\n }\n\n /**\n * Function to be called on initialization to set all other properties\n */\n initializeValue() {\n this.clearInstantSeed();\n if (this.range) {\n try {\n const rangeValue = JSON.parse(this.valueAttribute || '');\n this.startDate = this.rangeBoundFromValue(rangeValue.startDate, false);\n this.endDate = this.rangeBoundFromValue(rangeValue.endDate, true);\n\n // Convert to local time\n this.startDate = new Date(this.startDate.getTime());\n this.endDate = new Date(this.endDate.getTime());\n\n // date-time-picker variant only: open on the seeded range's start month (the default variant keeps its month)\n if (this.variant === 'date-time-picker' && this.startDate && !isNaN(this.startDate.getTime())) {\n this.currentMonth = this.startDate.getMonth();\n this.currentYear = this.startDate.getFullYear();\n }\n\n this.value = null;\n } catch (e) {\n // console.error('Invalid range value');\n }\n } else {\n if (this.variant === 'date-time-picker' && this.trySeedFromInstantValue()) {\n return;\n }\n const zoned =\n this.variant === 'date-time-picker'\n ? this.parseZonedValue(this.valueAttribute)\n : null;\n if (zoned) {\n this.setTimezoneInternally(zoned.timezone);\n const w = zoned.wall;\n this.value = localDateFromFields(w.year, w.month - 1, w.day, 12, 0, 0, 0);\n this.currentMonth = w.month - 1;\n this.currentYear = w.year;\n this.tpHours = w.hours;\n this.tpMinutes = w.minutes;\n this.tpSeconds = w.seconds;\n this.tpMilliseconds = w.ms;\n return;\n }\n if (this.variant === 'date-time-picker') {\n const wall = wallClockFromOffsetLess(this.valueAttribute);\n if (wall) {\n this.value = localDateFromFields(wall.year, wall.month - 1, wall.day, 12, 0, 0, 0);\n this.currentMonth = wall.month - 1;\n this.currentYear = wall.year;\n this.tpHours = wall.hours;\n this.tpMinutes = wall.minutes;\n this.tpSeconds = wall.seconds;\n this.tpMilliseconds = wall.ms;\n return;\n }\n }\n if (this.variant === 'date-time-picker') {\n const preset = this.parsePresetValue(this.valueAttribute);\n if (preset) {\n this.value = preset;\n this.currentMonth = preset.getMonth();\n this.currentYear = preset.getFullYear();\n // seed the time-picker spinners from the preset value's wall-clock time\n this.tpHours = preset.getHours();\n this.tpMinutes = preset.getMinutes();\n this.tpSeconds = preset.getSeconds();\n this.tpMilliseconds = preset.getMilliseconds();\n } else if (this.valueAttribute) {\n // an unparseable value must not leave the previous selection showing (the empty-value path above already clears it)\n this.value = null;\n this.resetTimeUnits();\n }\n return;\n }\n if (this.valueAttribute) {\n const date = this.dateFromValueString(this.valueAttribute);\n\n if (!isNaN(date.getTime())) {\n this.value = date;\n this.currentMonth = this.value.getMonth();\n this.currentYear = this.value.getFullYear();\n }\n }\n }\n }\n\n /** Forget any retained instant, in every category. */\n private clearInstantSeed(): void {\n this.seedInstant = null;\n this.seedFieldsKey = null;\n this.seedZone = null;\n }\n\n private instantSeedFieldsKey(): string | null {\n const v = this.value;\n if (!v) return null;\n return (\n `${v.getFullYear()}-${v.getMonth()}-${v.getDate()}|` +\n `${this.tpHours}:${this.tpMinutes}:${this.tpSeconds}.${this.tpMilliseconds}`\n );\n }\n\n private seedFromInstant(epochMs: number, zone: string): void {\n const w = wallClockInZone(epochMs, zone);\n this.value = localDateFromFields(w.year, w.month - 1, w.day, 12, 0, 0, 0);\n this.currentMonth = w.month - 1;\n this.currentYear = w.year;\n this.tpHours = w.hours;\n this.tpMinutes = w.minutes;\n this.tpSeconds = w.seconds;\n this.tpMilliseconds = w.ms;\n this.seedInstant = epochMs;\n this.seedFieldsKey = this.instantSeedFieldsKey();\n }\n\n private trySeedFromInstantValue(): boolean {\n const epochMs = instantFromValueString(this.valueAttribute);\n if (epochMs !== null) {\n if (!isValidTimezone(this.timezone)) return false;\n this.seedFromInstant(epochMs, this.timezone);\n this.seedZone = null;\n return true;\n }\n const bracketed = instantFromBracketedValue(this.valueAttribute);\n if (bracketed) {\n this.setTimezoneInternally(bracketed.timezone);\n this.seedFromInstant(bracketed.epochMs, bracketed.timezone);\n this.seedZone = bracketed.timezone;\n return true;\n }\n return false;\n }\n\n /**\n * Seeds `value` from a string with the published conversion: `new Date(raw)` shifted by the host offset. Every variant\n * keeps it, because the default calendar must behave exactly as the published component; the date-time-picker variant\n * re-derives its value from its own parsers in `initializeValue`.\n */\n private dateFromValueString(raw: string): Date {\n const parsed = new Date(raw);\n return new Date(parsed.getTime() - parsed.getTimezoneOffset() * 60000);\n }\n\n /**\n * One bound of a `range` value. In the date-time-picker variant `YYYY-MM-DD` is a calendar day, not a UTC instant: it\n * lands on that local day, at 00:00:00.000 for the start and 23:59:59.999 for the end (what clicking the day produces).\n * Every other string, and every bound of the default calendar, goes through `new Date(raw)` exactly as published.\n */\n private rangeBoundFromValue(raw: unknown, isEnd: boolean): Date {\n if (this.variant === 'date-time-picker' && typeof raw === 'string' && /^\\d{4}-\\d{2}-\\d{2}$/.test(raw)) {\n const day = this.parsePresetValue(raw);\n if (day) {\n if (isEnd) day.setHours(23, 59, 59, 999);\n return day;\n }\n }\n return new Date(raw as string);\n }\n\n private parsePresetValue(raw: string | null): Date | null {\n if (!raw) return null;\n const dateOnly = /^\\d{4}-\\d{2}-\\d{2}$/.exec(raw);\n if (dateOnly) {\n const year = Number(raw.slice(0, 4));\n const month = Number(raw.slice(5, 7)) - 1;\n const day = Number(raw.slice(8, 10));\n if (month < 0 || month > 11 || day < 1) return null;\n const lastDay = localDateFromFields(year, month + 1, 0).getDate();\n const date = localDateFromFields(year, month, Math.min(day, lastDay));\n return isNaN(date.getTime()) ? null : date;\n }\n // only an instant with an unusable zone or an undocumented string gets here; the documented formats are parsed before this\n const date = new Date(raw);\n return isNaN(date.getTime()) ? null : date;\n }\n\n private parseZonedValue(\n raw: string | null\n ): { wall: CalendarWallClock; timezone: string } | null {\n if (!raw) return null;\n const m =\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{3}))?\\[GMT[+-]\\d{2}:\\d{2}\\s+([^\\]]+)\\]$/.exec(\n raw.trim()\n );\n if (!m) return null;\n const [, y, mo, d, h, mi, s, ms, rawZone] = m;\n const month0 = Number(mo) - 1;\n const hours = Number(h);\n const minutes = Number(mi);\n const seconds = Number(s);\n if (month0 < 0 || month0 > 11 || hours > 23 || minutes > 59 || seconds > 59) {\n return null;\n }\n const day = Number(d);\n if (day < 1) return null;\n // clamp instead of letting an out-of-range day roll into the next month\n const lastDay = localDateFromFields(Number(y), month0 + 1, 0).getDate();\n const wall: CalendarWallClock = {\n year: Number(y),\n month: month0 + 1,\n day: Math.min(day, lastDay),\n hours,\n minutes,\n seconds,\n ms: Number(ms ?? 0),\n };\n const zone = rawZone.trim();\n const timezone = isValidTimezone(zone) ? zone : 'UTC';\n return { wall, timezone };\n }\n\n /**\n * Function to handle relative date selection\n */\n handleDurationChange(event: CustomEvent) {\n event.stopPropagation()\n if (this.variant === 'date-time-picker') {\n const input = event.target as (HTMLElement & { value: string }) | null;\n const cleaned = String(event.detail?.value ?? input?.value ?? '').replace(/\\D/g, '');\n if (input && input.value !== cleaned) input.value = cleaned;\n const duration = Number(cleaned);\n if (!duration) {\n\n this.selectedValue = undefined!;\n this.startDate = null;\n this.endDate = null;\n this.requestUpdate();\n return;\n }\n this.selectedValue = duration;\n if (this.selectedUnit && this.selectedValue) {\n this.handleTimeValueClick(this.selectedUnit, this.selectedValue, event);\n }\n return;\n }\n event.detail.value = event.detail.value.replace(/e/gi, \"\");\n const duration=Number(event.detail.value);\n if(!duration) {\n return\n };\n this.selectedValue = duration\n if (this.selectedUnit && this.selectedValue) {\n this.handleTimeValueClick(this.selectedUnit, this.selectedValue, event);\n }\n }\n\n handleUnitChange(event: CustomEvent) {\n event.stopPropagation()\n this.selectedUnit = event.detail.value;\n if (this.selectedUnit && this.selectedValue) {\n this.handleTimeValueClick(this.selectedUnit, this.selectedValue, event);\n }\n }\n\n handleTimeValueClick(unit: TimeUnits, value: number, event: any) {\n this.createRelativePeriod(unit, value)\n this.selectedUnit = unit;\n this.selectedValue = value;\n }\n\n createRelativePeriod(unit: String, value: number) {\n const endTime = new Date();\n const startTime = new Date();\n // only the date-time-picker variant uses exact elapsed time, month-end clamping and the too-large-duration guard; the\n // default calendar keeps the published wall-clock arithmetic (and its behaviour for an overflowing duration)\n const dtp = this.variant === 'date-time-picker';\n\n switch (unit) {\n case 'minutes':\n // elapsed duration: wall-clock arithmetic (setMinutes) is off by an hour across a host DST change\n if (dtp) startTime.setTime(endTime.getTime() - value * 60000);\n else startTime.setMinutes(startTime.getMinutes() - value);\n break;\n case 'hours':\n if (dtp) startTime.setTime(endTime.getTime() - value * 3600000);\n else startTime.setHours(startTime.getHours() - value);\n break;\n case 'days':\n startTime.setDate(startTime.getDate() - value);\n break;\n case 'weeks':\n startTime.setDate(startTime.getDate() - 7 * value); // Subtract weeks as days\n break;\n case 'months':\n if (dtp) {\n // clamp to the target month's last day: setMonth alone rolls 31 Mar - 1 month into 3 Mar\n const day = startTime.getDate();\n startTime.setDate(1);\n startTime.setMonth(startTime.getMonth() - value);\n const lastDay = localDateFromFields(startTime.getFullYear(), startTime.getMonth() + 1, 0).getDate();\n startTime.setDate(Math.min(day, lastDay));\n } else {\n startTime.setMonth(startTime.getMonth() - value);\n }\n break;\n }\n\n // a duration too large for a Date leaves an Invalid Date; storing it would keep Apply enabled and make consumers throw (RangeError) when they format it, so in the variant it is no selection\n if (dtp && (isNaN(startTime.getTime()) || isNaN(endTime.getTime()))) {\n this.startDate = null;\n this.endDate = null;\n return { startDate: null, endDate: null };\n }\n\n this.startDate = new Date(startTime.getTime());\n this.endDate = new Date(endTime.getTime());\n\n return {\n startDate: this.startDate,\n endDate: this.endDate,\n };\n }\n \n /**\n * Function to handle start time selecion\n */\n private handleStartTimeInput(event: CustomEvent): void {\n event.stopPropagation()\n if (!this.startDate) {\n this.startDate = null;\n return;\n }\n const time = this.parseTime(event.detail.value, this.startDate);\n if (time) {\n this.startDate = time;\n } else {\n this.startDate.setHours(0, 0, 0);\n }\n this.requestUpdate();\n }\n \n /**\n * Function to handle end time selecion\n */\n private handleEndTimeInput(event: CustomEvent): void {\n event.stopPropagation()\n if (!this.endDate) {\n this.endDate = null;\n return;\n }\n const time = this.parseTime(event.detail.value, this.endDate);\n if (time) {\n this.endDate = time;\n } else {\n this.endDate.setHours(0, 0, 0);\n }\n this.requestUpdate();\n }\n\n // Parse time string to a Date object\n private parseTime(input: string, date: Date): Date | null {\n if (!this.isValidTimeInput(input)) {\n return null;\n }\n const [hour, minute, second] = input.split(':').map(Number);\n const newDate = new Date(date.getTime());\n newDate.setHours(hour, minute, second);\n return newDate;\n }\n\n // Validate time in HH:MM:SS format\n private isValidTimeInput(input: string): boolean {\n const regex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/;\n return regex.test(input);\n }\n\n private formatTime(date: Date | null): string {\n if (!date) return '';\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${hours}:${minutes}:${seconds}`;\n }\n\n private nextMonth(): void {\n if (this.disabled) return;\n if (this.currentMonth === 11) {\n const newYear = this.currentYear + 1;\n if(this.maxYear !== undefined && newYear > this.maxYear) return;\n this.currentMonth = 0;\n this.currentYear = newYear;\n } else {\n this.currentMonth++;\n }\n }\n\n private prevMonth(): void {\n if (this.disabled) return;\n if (this.currentMonth === 0) {\n const newYear = this.currentYear - 1;\n if(this.minYear !== undefined && newYear < this.minYear) return;\n this.currentMonth = 11;\n this.currentYear = newYear;\n } else {\n this.currentMonth--;\n }\n }\n\n private confimRange() {\n if (!(this.startDate && this.endDate)) return;\n this.emitChangedData( {\n startDate: this.startDate,\n endDate: this.endDate,\n });\n }\n\n onTypeChange(event: CustomEvent) {\n if (this.disabled) return;\n this.type = event.detail.value;\n if (this.variant === 'date-time-picker' && this.type !== 'absolute') this.expanded = false;\n this.emit('nile-type-change', { value: this.type })\n }\n getUTCDate(dateStr:any){\n // Date.UTC remaps years 0-99 to 1900-1999 as published; only the date-time-picker variant keeps the literal year\n if (this.variant === 'date-time-picker') {\n return new Date(\n utcFromFields(\n Number(dateStr.slice(0, 4)),\n Number(dateStr.slice(5, 7)) - 1,\n Number(dateStr.slice(8, 10))\n )\n )\n }\n return new Date(\n Date.UTC(\n dateStr.slice(0, 4),\n dateStr.slice(5, 7) - 1,\n dateStr.slice(8, 10)\n )\n )\n }\n\n emitChangedData(data:{startDate:Date,endDate:Date}|{value:any}|null){\n this.emit('nile-changed',data); // deprecated. Use nile-change instead\n this.emit('nile-change',data)\n }\n\n private getDaysArray(year: number, month: number): number[] {\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n return Array.from({ length: daysInMonth }, (_, i) => i + 1);\n }\n\n private renderDateTimePicker(): TemplateResult {\n // the collapsed height is held while the month grid is expanded (the measured value reaches the stylesheet as a custom property)\n const heightLocked = this.type === 'absolute' && this.expanded && !!this.tpLockedHeight;\n return html`\n <div\n class=${classMap({\n base: true,\n 'base--date-time-picker': true,\n 'base--tp-expanded': this.expanded,\n 'base--tp-fewfields': this.tpFewFieldsNoTz,\n 'base--tp-height-locked': heightLocked,\n })}\n style=${heightLocked ? `--nile-calendar-tp-locked-height:${this.tpLockedHeight}` : nothing}\n part=\"calendar-container\"\n >\n <div class=${classMap({\n 'calendar-config': true,\n hidden: !this.showTypes,\n })} part=\"calendar-config\">\n <div class=\"calendar-switcher\" part=\"calendar-switcher\">\n <nile-tab-group centered @nile-tab-show=\"${this.onTypeChange}\" value=\"${this.type}\">\n <nile-tab slot=\"nav\" panel=\"absolute\" tabindex=\"${this.disabled ? '-1' : '0'}\">Absolute</nile-tab>\n <nile-tab slot=\"nav\" panel=\"relative\" tabindex=\"${this.disabled ? '-1' : '0'}\">Relative</nile-tab>\n </nile-tab-group>\n </div>\n </div>\n\n ${this.type === 'relative' ? this.renderRelativeCalendar() : this.renderDateTimePickerAbsolute()}\n\n <div\n class=${classMap({\n 'tp-footer': true,\n 'tp-footer--relative': this.type === 'relative',\n })}\n part=\"tp-footer\"\n >\n ${this.type === 'absolute' ? html`\n <nile-button\n id=\"tp-set-to-now\"\n class=\"tp-set-to-now-button\"\n part=\"tp-set-to-now-button\"\n variant=\"secondary\"\n ?disabled=\"${this.disabled}\"\n @click=\"${this.handleSetToNow}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.handleSetToNow();}}\"\n >Set to now <nile-glyph name=\"ng-clock\" size=\"16\" method=\"stroke\" color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : nothing}></nile-glyph></nile-button>\n <nile-lite-tooltip\n for=\"tp-set-to-now\"\n content=\"Sets the time to the current time\"\n size=\"small\"\n ></nile-lite-tooltip>\n ` : nothing}\n <div class=\"tp-footer-actions\" part=\"tp-footer-actions\">\n <nile-button\n class=\"clear-button\"\n part=\"clear-button\"\n variant=\"secondary\"\n ?disabled=\"${this.disabled || !this.hasSelection()}\"\n @click=\"${this.handleReset}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.handleReset();}}\"\n >Reset</nile-button>\n <nile-button\n class=\"apply-button\"\n part=\"apply-button\"\n ?disabled=\"${this.disabled || !this.hasSelection()}\"\n @click=\"${this.handleApply}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.handleApply();}}\"\n >Apply</nile-button>\n </div>\n </div>\n </div>\n `;\n }\n\n private renderDateTimePickerAbsolute(): TemplateResult {\n return html`\n <div class=\"calendar-wrapper\" part=\"calendar-wrapper\">\n <div class=\"calendar-container\">\n ${this.expanded\n ? this.renderExpandedCalendar()\n : this.renderCollapsedMonth(this.currentYear, this.currentMonth)}\n </div>\n </div>\n\n <div\n class=${classMap({\n 'tp-chevron': true,\n 'tp-chevron--expanded': this.expanded,\n })}\n part=\"tp-chevron\"\n role=\"button\"\n tabindex=\"${this.disabled ? '-1' : '0'}\"\n aria-expanded=\"${this.expanded}\"\n aria-label=\"${this.expanded ? 'Collapse calendar' : 'Expand calendar'}\"\n @click=\"${this.toggleExpanded}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.toggleExpanded();}}\"\n >\n <nile-icon name=\"arrowdropdown\" color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'}></nile-icon>\n </div>\n\n <div class=\"tp-scroll-area\" part=\"tp-scroll-area\">\n <div class=\"tp-scroll-content\" part=\"tp-scroll-content\">\n ${this.renderTimeFields()}\n ${this.resolvedTimeFields.timezone ? this.renderTimezone() : ''}\n </div>\n </div>\n `;\n }\n\n private renderExpandedCalendar(): TemplateResult {\n return this.renderVariantMonth(\n this.currentYear,\n this.currentMonth,\n this.getFullMonthDays(this.currentYear, this.currentMonth)\n );\n }\n\n private renderCollapsedMonth(year: number, month: number): TemplateResult {\n return this.renderVariantMonth(\n year,\n month,\n this.getCollapsedWindowDays(year, month)\n );\n }\n\n private renderVariantMonth(\n year: number,\n month: number,\n cells: Array<{ day: number; month: number; year: number; inMonth: boolean }>\n ): TemplateResult {\n const isSelectedDate = (\n day: number,\n month: number,\n year: number,\n isCurrentMonth: boolean\n ) => {\n if (!isCurrentMonth) return '';\n if (this.value) {\n const isSelected =\n day === this.value.getDate() &&\n month === this.value.getMonth() &&\n year === this.value.getFullYear();\n if (isSelected) return 'selected-date';\n }\n return '';\n };\n\n const isCurrentDate = (day: number, month: number, year: number) => {\n const today = new Date();\n return (\n day === today.getDate() &&\n month + 1 === today.getMonth() + 1 &&\n year === today.getFullYear()\n );\n };\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n // roving tabindex: one reachable day (the keyboard's last day, else the selection, else today, else the first allowed day)\n const key = (c: { day: number; month: number; year: number }) => `${c.year}-${c.month}-${c.day}`;\n const reachable = cells.filter(c => c.inMonth && this.isAllowedDate(c.day, c.month, c.year));\n const wanted = [\n this.tpFocusDate && this.tpFocusDate,\n this.value && { year: this.value.getFullYear(), month: this.value.getMonth(), day: this.value.getDate() },\n (() => { const t = new Date(); return { year: t.getFullYear(), month: t.getMonth(), day: t.getDate() }; })(),\n ];\n let tabStop: string | null = null;\n for (const w of wanted) {\n if (w && reachable.some(c => key(c) === key(w))) { tabStop = key(w); break; }\n }\n if (tabStop === null && reachable.length) tabStop = key(reachable[0]);\n return html`\n <div class=\"calendar\" part=\"calendar\">\n <div class=\"calendar-header\" part=\"calendar-header\">\n <nile-icon\n class=\"calendar-header__month-navigation\"\n part=\"calendar-header-prev\"\n name=\"var(--nile-icon-arrow-left, var(--ng-icon-chevron-left))\"\n method=\"var(--nile-svg-method-fill, var(--ng-svg-method-stroke))\"\n color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'}\n role=\"button\"\n aria-label=\"Previous month\"\n aria-disabled=\"${this.disabled || this.isPrevDisabled()}\"\n tabindex=\"${this.disabled || this.isPrevDisabled() ? '-1' : '0'}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.prevMonth();}}\"\n @click=\"${this.prevMonth}\"\n >\n </nile-icon>\n <div class=\"calendar-header__center\" part=\"calendar-header-center\">\n\n${this.showMonthDropdown || this.showYearDropdown ? html`\n ${this.showMonthDropdown ? html`\n <nile-dropdown ?disabled=\"${this.disabled}\" class=\"month-dropdown\"\n @nile-after-show=\"${() => this.scrollSelectedIntoView('.month-menu-item[selected]')}\">\n <span\n slot=\"trigger\"\n class=\"calendar-header__trigger month-trigger\"\n role=\"button\"\n part=\"trigger\"\n tabindex=\"${this.disabled ? '-1' : '0'}\"\n @keydown=\"${(e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n (e.currentTarget as HTMLElement).click();\n }\n }}\"\n >\n ${new Date(year, month).toLocaleString('default', { month: 'long' })}\n <nile-icon name=\"arrowdropdown\" color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'} class=\"calendar-header__caret\"></nile-icon>\n </span>\n <nile-menu>\n <div class=\"month-scroll-wrapper\">\n ${this.monthNames.map((m, idx) => html`\n <nile-menu-item\n class=\"month-menu-item\"\n ?selected=\"${idx === month}\"\n @click=\"${() => this.onMonthSelected(idx)}\"\n >\n ${m}\n </nile-menu-item>\n `)}\n </div>\n </nile-menu>\n </nile-dropdown>\n ` : html`\n <span\n >${new Date(year, month).toLocaleString('default', { month: 'long' })}</span\n >\n `}\n ${this.showYearDropdown ? html`\n <nile-dropdown ?disabled=\"${this.disabled}\" class=\"year-dropdown\"\n @nile-after-show=\"${() => this.scrollSelectedIntoView('.year-menu-item[selected]')}\">\n <span\n slot=\"trigger\"\n class=\"calendar-header__trigger\"\n role=\"button\"\n part=\"trigger\"\n tabindex=\"${this.disabled ? '-1' : '0'}\"\n @keydown=\"${(e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n (e.currentTarget as HTMLElement).click();\n }\n }}\"\n >\n ${year}\n <nile-icon name=\"arrowdropdown\" color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'} class=\"calendar-header__caret\"></nile-icon>\n </span>\n <nile-menu>\n <div class=\"year-scroll-wrapper\">\n ${this.yearOptions.map(\n y => html`\n <nile-menu-item\n class=\"year-menu-item\"\n ?selected=\"${y === year}\"\n @click=\"${() => this.onYearSelected(y)}\"\n >\n ${y}\n </nile-menu-item>\n `\n )}\n </div>\n </nile-menu>\n </nile-dropdown>\n ` : html`\n <span>${year}</span>\n `}\n` : html`\n <span\n >${new Date(year, month).toLocaleString('default', {\n month: 'long',\n })}\n ${year}</span\n >\n`}\n</div>\n\n <nile-icon\n class=\"calendar-header__month-navigation\"\n part=\"calendar-header-next\"\n name=\"var(--nile-icon-arrow-right, var(--ng-icon-chevron-right))\"\n method=\"var(--nile-svg-method-fill, var(--ng-svg-method-stroke))\"\n color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'}\n role=\"button\"\n aria-label=\"Next month\"\n aria-disabled=\"${this.disabled || this.isNextDisabled()}\"\n tabindex=\"${this.disabled || this.isNextDisabled() ? '-1' : '0'}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') this.nextMonth();}}\"\n @click=\"${this.nextMonth}\"\n >\n </nile-icon>\n </div>\n\n <div class=\"days_container\" part=\"days-container\">\n ${dayNames.map(day => html`<div class=\"day_name\" part=\"day-name\">${day}</div>`)}\n ${cells.map(cell => {\n const isCurrentMonth = cell.inMonth;\n const datePlacement:''|'selected-date' = isSelectedDate(cell.day, cell.month, cell.year, isCurrentMonth)\n const classMapObj:any={\n 'day_date' : true,\n 'not-allowed' : !this.isAllowedDate(cell.day, cell.month, cell.year),\n 'filler' : !isCurrentMonth,\n }\n if(datePlacement) classMapObj[datePlacement]=true\n\n const cellAllowed = this.isAllowedDate(cell.day, cell.month, cell.year);\n const cellToday = isCurrentDate(cell.day, cell.month, cell.year) && isCurrentMonth;\n\n return html`\n <div\n part=\"calendar-day-${cell.day}\"\n class=${classMap(classMapObj)}\n role=${isCurrentMonth ? 'button' : nothing}\n aria-hidden=${isCurrentMonth ? nothing : 'true'}\n aria-label=${isCurrentMonth ? this.dayCellLabel(cell.day, cell.month, cell.year) : nothing}\n aria-disabled=${isCurrentMonth && (!cellAllowed || this.disabled) ? 'true' : nothing}\n aria-pressed=${isCurrentMonth ? String(!!datePlacement) : nothing}\n aria-current=${cellToday ? 'date' : nothing}\n data-tp-date=\"${isCurrentMonth ? key(cell) : nothing}\"\n tabindex=\"${isCurrentMonth && !this.disabled && key(cell) === tabStop ? '0' : '-1'}\"\n @keydown=\"${(e: KeyboardEvent) => {\n if (!isCurrentMonth) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault(); // Space on a role=button div would otherwise scroll the page\n this.tpFocusDate = { year: cell.year, month: cell.month, day: cell.day };\n this.tpSelectDate(cell.day, cell.month, cell.year);\n return;\n }\n this.handleDayNavigationKey(e, cell);\n }}\"\n @click=\"${() => { if (isCurrentMonth) { this.tpFocusDate = { year: cell.year, month: cell.month, day: cell.day }; this.tpSelectDate(cell.day, cell.month, cell.year); } }}\"\n >\n <span class=\"day-label\" part=\"calendar-day-label\">\n ${cell.day}\n ${isCurrentDate(cell.day, cell.month, cell.year) && isCurrentMonth?html`<div class=\"current__date__dot\" part=\"current-date-dot\"></div>`:nothing}\n </span>\n </div>`;\n })}\n </div>\n </div>\n `;\n }\n\n private getCollapsedWindowDays(\n year: number,\n month: number\n ): Array<{ day: number; month: number; year: number; inMonth: boolean }> {\n const today = new Date();\n const isCurrentMonth =\n today.getFullYear() === year && today.getMonth() === month;\n const selectionInMonth =\n this.value instanceof Date &&\n this.value.getFullYear() === year &&\n this.value.getMonth() === month;\n const centerOn = (dayOfMonth: number) => {\n const anchor = localDateFromFields(year, month, dayOfMonth);\n const s = new Date(anchor);\n s.setDate(anchor.getDate() - anchor.getDay() - 7);\n return s;\n };\n const start = selectionInMonth\n ? centerOn(this.value!.getDate())\n : isCurrentMonth\n ? centerOn(today.getDate())\n : (() => {\n const first = localDateFromFields(year, month, 1);\n const s = new Date(first);\n s.setDate(1 - first.getDay());\n return s;\n })();\n return Array.from({ length: 21 }, (_, i) => {\n const d = new Date(start);\n d.setDate(start.getDate() + i);\n return {\n day: d.getDate(),\n month: d.getMonth(),\n year: d.getFullYear(),\n inMonth: d.getMonth() === month && d.getFullYear() === year,\n };\n });\n }\n\n private getFullMonthDays(\n year: number,\n month: number\n ): Array<{ day: number; month: number; year: number; inMonth: boolean }> {\n const first = localDateFromFields(year, month, 1);\n const leading = first.getDay();\n const daysInMonth = localDateFromFields(year, month + 1, 0).getDate();\n const totalCells = Math.ceil((leading + daysInMonth) / 7) * 7;\n const start = localDateFromFields(year, month, 1 - leading);\n return Array.from({ length: totalCells }, (_, i) => {\n const d = new Date(start);\n d.setDate(start.getDate() + i);\n return {\n day: d.getDate(),\n month: d.getMonth(),\n year: d.getFullYear(),\n inMonth: d.getMonth() === month && d.getFullYear() === year,\n };\n });\n }\n\n /**\n * Arrow keys move by a day / week, Home and End to the week's first and last day, PageUp and PageDown by a month\n * (Shift: a year). The target is clamped to the month's length and to the year range; a day that the collapsed\n * three-week window does not show expands the calendar to reveal it.\n */\n private handleDayNavigationKey(e: KeyboardEvent, cell: { day: number; month: number; year: number }): void {\n if (this.disabled || e.ctrlKey || e.metaKey || e.altKey) return;\n const from = localDateFromFields(cell.year, cell.month, cell.day);\n let target: Date | null = null;\n switch (e.key) {\n case 'ArrowLeft': target = localDateFromFields(cell.year, cell.month, cell.day - 1); break;\n case 'ArrowRight': target = localDateFromFields(cell.year, cell.month, cell.day + 1); break;\n case 'ArrowUp': target = localDateFromFields(cell.year, cell.month, cell.day - 7); break;\n case 'ArrowDown': target = localDateFromFields(cell.year, cell.month, cell.day + 7); break;\n case 'Home': target = localDateFromFields(cell.year, cell.month, cell.day - from.getDay()); break;\n case 'End': target = localDateFromFields(cell.year, cell.month, cell.day + (6 - from.getDay())); break;\n case 'PageUp':\n case 'PageDown': {\n const step = (e.key === 'PageUp' ? -1 : 1) * (e.shiftKey ? 12 : 1);\n const month = cell.month + step;\n const last = localDateFromFields(cell.year, month + 1, 0).getDate();\n target = localDateFromFields(cell.year, month, Math.min(cell.day, last));\n break;\n }\n default: return;\n }\n e.preventDefault();\n this.moveDayFocus(target);\n }\n\n private moveDayFocus(target: Date): void {\n const year = target.getFullYear();\n const month = target.getMonth();\n const lo = this.minYear;\n const hi = this.maxYear;\n if ((lo !== undefined && year < lo) || (hi !== undefined && year > hi)) return;\n this.tpFocusDate = { year, month, day: target.getDate() };\n this.currentYear = year;\n this.currentMonth = month;\n const sel = `[data-tp-date=\"${year}-${month}-${target.getDate()}\"]`;\n const focusCell = () => this.shadowRoot?.querySelector<HTMLElement>(sel)?.focus();\n this.updateComplete.then(() => {\n if (this.shadowRoot?.querySelector(sel)) { focusCell(); return; }\n // not in the collapsed window: reveal the whole month\n this.expanded = true;\n this.updateComplete.then(focusCell).catch(() => { /* focus is best-effort */ });\n }).catch(() => { /* focus is best-effort */ });\n }\n\n private tpSelectDate(day: number, month: number, year: number): void {\n if (this.disabled) return;\n if (!this.isAllowedDate(day, month, year)) return;\n const selectedDate = localDateFromFields(year, month, day);\n // compare the calendar day only: seeded values are stored at noon, a clicked day at midnight\n const sameDay = !!this.value &&\n this.value.getFullYear() === year &&\n this.value.getMonth() === month &&\n this.value.getDate() === day;\n if (sameDay && this.doubleClickUnselect) {\n this.handleReset();\n return;\n }\n if (!sameDay) {\n this.resetTimeUnits();\n }\n this.value = selectedDate;\n }\n\n private resetTimeUnits(): void {\n this.tpHours = null;\n this.tpMinutes = null;\n this.tpSeconds = null;\n this.tpMilliseconds = null;\n this.tpEditingText = '';\n }\n\n private renderTimeFields(): TemplateResult {\n const fields = this.resolvedTimeFields;\n return html`\n <div class=${classMap({\n 'tp-time-fields': true,\n 'tp-time-fields--stacked': this.tpFewFieldsNoTz,\n })} part=\"tp-time-fields\">\n ${fields.hours ? this.renderTimeField('Hours (24H)', 'HH', 23, this.tpHours, v => { this.tpHours = v; }) : ''}\n ${fields.minutes ? this.renderTimeField('Minutes', 'MM', 59, this.tpMinutes, v => { this.tpMinutes = v; }) : ''}\n ${fields.seconds ? this.renderTimeField('Seconds', 'SS', 59, this.tpSeconds, v => { this.tpSeconds = v; }) : ''}\n ${fields.milliseconds ? this.renderTimeField('Milliseconds', 'MS', 999, this.tpMilliseconds, v => { this.tpMilliseconds = v; }) : ''}\n </div>\n `;\n }\n\n private renderTimeField(\n label: string,\n placeholder: string,\n max: number,\n value: number | null,\n setter: (v: number | null) => void\n ): TemplateResult {\n const maxDigits = String(max).length;\n const normalize = (raw: string): { text: string; value: number | null } => {\n let digits = (raw || '').replace(/\\D/g, '');\n while (digits.length > maxDigits && digits[0] === '0') digits = digits.slice(1);\n if (digits.length > maxDigits) digits = digits.slice(0, maxDigits);\n if (digits === '') return { text: '', value: null };\n const num = Number(digits);\n if (num > max) {\n const first = Number(digits[0]);\n return { text: String(first).padStart(maxDigits, '0'), value: first };\n }\n return { text: digits, value: num };\n };\n const apply = (e: CustomEvent) => {\n e.stopPropagation();\n const input = e.target as any;\n const { text, value: next } = normalize(input.value);\n setter(next);\n this.tpEditingText = text;\n if (input.value !== text) input.value = text;\n };\n const step = (delta: 1 | -1, focusEl?: HTMLElement | null) => {\n if (this.disabled) return;\n // A stepper click keeps DOM focus on whichever field was focused before, so move it here — the\n // shared editing text must be attributed to the right input.\n if (focusEl) {\n const input = focusEl.closest('nile-input') as any;\n // `nile-input.focus()` dereferences its inner <input>, which does not exist until the input has rendered\n // (a calendar in a closed, not-yet-attached panel never renders it). Nothing to focus then; still step.\n if (input?.input) input.focus();\n }\n const span = max + 1;\n const next =\n value === null\n ? (delta === 1 ? 0 : max)\n : ((value + delta) % span + span) % span;\n setter(next);\n this.tpFocusedTimeField = label;\n this.tpEditingText = String(next).padStart(maxDigits, '0');\n };\n const focused = this.tpFocusedTimeField === label;\n const displayValue = focused\n ? this.tpEditingText\n : value !== null || this.value\n ? String(value ?? 0).padStart(maxDigits, '0')\n : '';\n return html`\n <nile-input\n class=\"tp-time-field\"\n part=\"tp-time-field\"\n type=\"text\"\n inputmode=\"numeric\"\n label=\"${label}\"\n placeholder=\"${placeholder}\"\n ?disabled=\"${this.disabled}\"\n value=\"${displayValue}\"\n @nile-change=\"${apply}\"\n @nile-input=\"${apply}\"\n @keydown=\"${(e: KeyboardEvent) => {\n if (e.key === 'ArrowUp') { e.preventDefault(); step(1); }\n else if (e.key === 'ArrowDown') { e.preventDefault(); step(-1); }\n }}\"\n @nile-focus=\"${(e: CustomEvent) => {\n e.stopPropagation();\n this.tpFocusedTimeField = label;\n this.tpEditingText = '';\n }}\"\n @nile-blur=\"${(e: CustomEvent) => { e.stopPropagation(); if (this.tpFocusedTimeField === label) this.tpFocusedTimeField = null; }}\"\n >\n <div\n slot=\"suffix\"\n class=\"tp-stepper\"\n part=\"tp-stepper\"\n @mousedown=\"${(e: MouseEvent) => e.preventDefault()}\"\n >\n <div\n class=\"tp-stepper-btn tp-stepper-btn--up\"\n part=\"tp-stepper-btn tp-stepper-btn-up\"\n role=\"button\"\n tabindex=\"${this.disabled ? '-1' : '0'}\"\n aria-label=\"Increase ${label}\"\n @click=\"${(e: MouseEvent) => step(1, e.currentTarget as HTMLElement)}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') step(1, e.currentTarget as HTMLElement);}}\"\n >\n <nile-icon name=\"arrowdropdown\" size=\"16\" color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : nothing}></nile-icon>\n </div>\n <div\n class=\"tp-stepper-btn\"\n part=\"tp-stepper-btn tp-stepper-btn-down\"\n role=\"button\"\n tabindex=\"${this.disabled ? '-1' : '0'}\"\n aria-label=\"Decrease ${label}\"\n @click=\"${(e: MouseEvent) => step(-1, e.currentTarget as HTMLElement)}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') step(-1, e.currentTarget as HTMLElement);}}\"\n >\n <nile-icon name=\"arrowdropdown\" size=\"16\" color=${this.disabled ? 'var(--nile-colors-dark-500, var(--ng-colors-fg-disabled))' : nothing}></nile-icon>\n </div>\n </div>\n </nile-input>\n `;\n }\n\n private get timezoneOptions(): string[] {\n const zones: string[] =\n typeof (Intl as any).supportedValuesOf === 'function'\n ? (Intl as any).supportedValuesOf('timeZone')\n : TIMEZONES;\n return zones.includes('UTC') ? zones : ['UTC', ...zones];\n }\n\n private renderTimezone(): TemplateResult {\n return html`\n <div class=\"tp-timezone\" part=\"tp-timezone\">\n <div class=\"tp-timezone-header\" part=\"tp-timezone-header\">\n <span class=\"tp-timezone-label\" part=\"tp-timezone-label\">Timezone</span>\n <span\n class=\"tp-timezone-local-link\"\n part=\"tp-timezone-local-link\"\n role=\"button\"\n tabindex=\"${this.disabled ? '-1' : '0'}\"\n @click=\"${this.handleUseLocalTimezone}\"\n @keydown=\"${(e: KeyboardEvent) => {if (e.key === 'Enter' || e.key === ' ') {e.preventDefault(); this.handleUseLocalTimezone();}}}\"\n >Use local timezone</span>\n </div>\n <nile-select\n class=\"tp-timezone-select\"\n part=\"tp-timezone-select\"\n hoist\n placement=\"top\"\n ?disabled=\"${this.disabled}\"\n searchEnabled\n placeholder=\"Select timezone\"\n .value=\"${this.timezone}\"\n @nile-change=\"${this.handleTimezoneChange}\"\n >\n ${this.timezoneOptions.map(\n tz => html`<nile-option value=\"${tz}\">${tz}</nile-option>`\n )}\n </nile-select>\n </div>\n `;\n }\n\n private handleTimezoneChange(event: CustomEvent): void {\n event.stopPropagation();\n const selected =\n (event.detail && (event.detail.value ?? event.detail)) ||\n (event.target as { value?: unknown } | null)?.value;\n if (typeof selected === 'string' && selected) {\n this.setTimezoneInternally(selected);\n }\n }\n\n private handleUseLocalTimezone(): void {\n if (this.disabled) return;\n const local = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (local) {\n this.setTimezoneInternally(local);\n }\n }\n\n private toggleExpanded(): void {\n if (this.disabled) return;\n this.expanded = !this.expanded;\n }\n\n\n private composeLocalTimezoneValue(): Date | null {\n if (!this.value) return null;\n if (\n this.seedInstant !== null &&\n this.seedFieldsKey === this.instantSeedFieldsKey() &&\n (this.seedZone === null || this.seedZone === this.timezone)\n ) {\n return new Date(this.seedInstant);\n }\n return this.wallClockToInstant(\n this.value.getFullYear(),\n this.value.getMonth(),\n this.value.getDate(),\n this.tpHours ?? 0,\n this.tpMinutes ?? 0,\n this.tpSeconds ?? 0,\n this.tpMilliseconds ?? 0\n );\n }\n\n private composeValueISO(epochMs: number): string {\n const zone = this.timezone || 'UTC';\n const p = (n: number, len = 2) => String(n).padStart(len, '0');\n\n const ms = ((epochMs % 1000) + 1000) % 1000;\n\n let y: number, mo: number, d: number, h: number, mi: number, s: number;\n let offMs: number;\n try {\n const dtf = new Intl.DateTimeFormat('en-US', {\n timeZone: zone,\n hourCycle: 'h23',\n year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit',\n });\n const map: Record<string, number> = {};\n for (const part of dtf.formatToParts(new Date(epochMs))) {\n if (part.type !== 'literal') map[part.type] = Number(part.value);\n }\n y = map.year; mo = map.month; d = map.day;\n h = map.hour; mi = map.minute; s = map.second;\n offMs = this.zoneOffsetMs(epochMs - ms);\n } catch {\n const local = new Date(epochMs);\n y = local.getFullYear(); mo = local.getMonth() + 1; d = local.getDate();\n h = local.getHours(); mi = local.getMinutes(); s = local.getSeconds();\n offMs = 0;\n }\n\n // the bracket only carries HH:mm; historical sub-minute offsets (LMT) round\n offMs = Math.round(offMs / 60000) * 60000;\n const sign = offMs >= 0 ? '+' : '-';\n const abs = Math.abs(offMs);\n const off = `${sign}${p(Math.floor(abs / 3600000))}:${p(Math.floor((abs % 3600000) / 60000))}`;\n\n return (\n `${p(y, 4)}-${p(mo)}-${p(d)}T${p(h)}:${p(mi)}:${p(s)}.${p(ms, 3)}` +\n `[GMT${off} ${zone}]`\n );\n }\n\n private wallClockToInstant(\n y: number, monthIndex: number, day: number,\n h: number, m: number, s: number, ms: number\n ): Date {\n const guess = utcFromFields(y, monthIndex, day, h, m, s, 0);\n try {\n const offset1 = this.zoneOffsetMs(guess);\n let instant = guess - offset1;\n const offset2 = this.zoneOffsetMs(instant);\n if (offset2 !== offset1) instant = guess - offset2;\n return new Date(instant + ms);\n } catch {\n const composed = new Date(this.value!.getTime());\n composed.setHours(h, m, s, ms);\n return composed;\n }\n }\n\n private zoneOffsetMs(utcMs: number): number {\n const dtf = new Intl.DateTimeFormat('en-US', {\n timeZone: this.timezone,\n hourCycle: 'h23',\n year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit',\n });\n const map: Record<string, number> = {};\n for (const p of dtf.formatToParts(new Date(utcMs))) {\n if (p.type !== 'literal') map[p.type] = Number(p.value);\n }\n const asUTC = utcFromFields(\n map.year, map.month - 1, map.day, map.hour, map.minute, map.second\n );\n return asUTC - utcMs;\n }\n\n private hasSelection(): boolean {\n if (this.type === 'relative') {\n return Boolean(this.startDate && this.endDate);\n }\n return Boolean(this.value);\n }\n\n private handleSetToNow(): void {\n if (this.disabled) return;\n const now = new Date();\n this.tpHours = now.getHours();\n this.tpMinutes = now.getMinutes();\n this.tpSeconds = now.getSeconds();\n this.tpMilliseconds = now.getMilliseconds();\n this.value = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n this.currentMonth = now.getMonth();\n this.currentYear = now.getFullYear();\n const local = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (local) {\n this.setTimezoneInternally(local);\n }\n }\n\n private handleApply(): void {\n if (this.disabled || !this.hasSelection()) return;\n if (this.type === 'relative') {\n this.emitDateTimePickerChange({\n startDate: this.startDate!,\n endDate: this.endDate!,\n timezone: 'UTC',\n });\n return;\n }\n const localTimezoneValue = this.composeLocalTimezoneValue();\n const unixEpoch = localTimezoneValue ? localTimezoneValue.getTime() : null;\n this.emitDateTimePickerChange({\n value: unixEpoch === null ? null : this.composeValueISO(unixEpoch),\n localTimezoneValue,\n unixEpoch,\n timezone: this.timezone,\n });\n }\n\n private handleReset(): void {\n if (this.disabled) return;\n this.clearInstantSeed();\n this.value = null;\n this.startDate = null;\n this.endDate = null;\n this.selectedUnit = undefined!;\n this.selectedValue = undefined!;\n this.resetTimeUnits();\n this.setTimezoneInternally(this.configuredTimezone);\n this.requestUpdate();\n this.emit('nile-clear');\n }\n\n private emitDateTimePickerChange(\n data:\n | { startDate: Date; endDate: Date; timezone: string }\n | { value: string | null; localTimezoneValue: Date | null; unixEpoch: number | null; timezone: string }\n | null\n ) {\n this.emit('nile-change', data);\n }\n}\n\nexport default NileCalendar;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-calendar': NileCalendar;\n }\n}"]}
|