@api-client/ui 0.5.6 → 0.5.8
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/.cursor/rules/html-and-css-best-practices.mdc +63 -0
- package/.cursor/rules/lit-best-practices.mdc +78 -0
- package/.github/instructions/html-and-css-best-practices.instructions.md +70 -0
- package/.github/instructions/lit-best-practices.instructions.md +86 -0
- package/build/src/elements/currency/currency-picker.d.ts +10 -0
- package/build/src/elements/currency/currency-picker.d.ts.map +1 -0
- package/build/src/elements/currency/currency-picker.js +27 -0
- package/build/src/elements/currency/currency-picker.js.map +1 -0
- package/build/src/elements/currency/internals/Picker.d.ts +311 -0
- package/build/src/elements/currency/internals/Picker.d.ts.map +1 -0
- package/build/src/elements/currency/internals/Picker.js +857 -0
- package/build/src/elements/currency/internals/Picker.js.map +1 -0
- package/build/src/elements/currency/internals/Picker.styles.d.ts +3 -0
- package/build/src/elements/currency/internals/Picker.styles.d.ts.map +1 -0
- package/build/src/elements/currency/internals/Picker.styles.js +58 -0
- package/build/src/elements/currency/internals/Picker.styles.js.map +1 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.d.ts +216 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.d.ts.map +1 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.js +1037 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.js.map +1 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.d.ts +3 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.d.ts.map +1 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.js +274 -0
- package/build/src/elements/mention-textarea/internals/MentionTextArea.styles.js.map +1 -0
- package/build/src/elements/mention-textarea/ui-mention-textarea.d.ts +13 -0
- package/build/src/elements/mention-textarea/ui-mention-textarea.d.ts.map +1 -0
- package/build/src/elements/mention-textarea/ui-mention-textarea.js +28 -0
- package/build/src/elements/mention-textarea/ui-mention-textarea.js.map +1 -0
- package/build/src/md/button/internals/base.d.ts +1 -0
- package/build/src/md/button/internals/base.d.ts.map +1 -1
- package/build/src/md/button/internals/base.js +7 -0
- package/build/src/md/button/internals/base.js.map +1 -1
- package/build/src/md/chip/internals/Chip.styles.d.ts.map +1 -1
- package/build/src/md/chip/internals/Chip.styles.js +2 -0
- package/build/src/md/chip/internals/Chip.styles.js.map +1 -1
- package/build/src/md/date-picker/internals/DatePicker.styles.d.ts.map +1 -1
- package/build/src/md/date-picker/internals/DatePicker.styles.js +73 -0
- package/build/src/md/date-picker/internals/DatePicker.styles.js.map +1 -1
- package/build/src/md/date-picker/internals/DatePickerCalendar.d.ts +164 -51
- package/build/src/md/date-picker/internals/DatePickerCalendar.d.ts.map +1 -1
- package/build/src/md/date-picker/internals/DatePickerCalendar.js +660 -368
- package/build/src/md/date-picker/internals/DatePickerCalendar.js.map +1 -1
- package/build/src/md/date-picker/ui-date-picker-input.d.ts +65 -13
- package/build/src/md/date-picker/ui-date-picker-input.d.ts.map +1 -1
- package/build/src/md/date-picker/ui-date-picker-input.js +143 -76
- package/build/src/md/date-picker/ui-date-picker-input.js.map +1 -1
- package/build/src/md/date-picker/ui-date-picker-modal-input.d.ts +76 -17
- package/build/src/md/date-picker/ui-date-picker-modal-input.d.ts.map +1 -1
- package/build/src/md/date-picker/ui-date-picker-modal-input.js +192 -127
- package/build/src/md/date-picker/ui-date-picker-modal-input.js.map +1 -1
- package/build/src/md/date-picker/ui-date-picker-modal.d.ts +63 -15
- package/build/src/md/date-picker/ui-date-picker-modal.d.ts.map +1 -1
- package/build/src/md/date-picker/ui-date-picker-modal.js +143 -64
- package/build/src/md/date-picker/ui-date-picker-modal.js.map +1 -1
- package/demo/elements/currency/index.html +91 -0
- package/demo/elements/currency/index.ts +272 -0
- package/demo/elements/index.html +6 -0
- package/demo/elements/mention-textarea/index.html +19 -0
- package/demo/elements/mention-textarea/index.ts +205 -0
- package/demo/md/date-picker/date-picker.ts +138 -103
- package/package.json +2 -2
- package/src/elements/currency/currency-picker.ts +14 -0
- package/src/elements/currency/internals/Picker.styles.ts +58 -0
- package/src/elements/currency/internals/Picker.ts +846 -0
- package/src/elements/mention-textarea/internals/MentionTextArea.styles.ts +274 -0
- package/src/elements/mention-textarea/internals/MentionTextArea.ts +1036 -0
- package/src/elements/mention-textarea/ui-mention-textarea.ts +18 -0
- package/src/md/button/internals/base.ts +7 -0
- package/src/md/chip/internals/Chip.styles.ts +2 -0
- package/src/md/date-picker/internals/DatePicker.styles.ts +73 -0
- package/src/md/date-picker/internals/DatePickerCalendar.ts +643 -309
- package/src/md/date-picker/ui-date-picker-input.ts +110 -49
- package/src/md/date-picker/ui-date-picker-modal-input.ts +168 -99
- package/src/md/date-picker/ui-date-picker-modal.ts +136 -53
- package/test/README.md +3 -2
- package/test/elements/currency/CurrencyPicker.accessibility.test.ts +328 -0
- package/test/elements/currency/CurrencyPicker.core.test.ts +318 -0
- package/test/elements/currency/CurrencyPicker.integration.test.ts +482 -0
- package/test/elements/currency/CurrencyPicker.test.ts +486 -0
- package/test/elements/mention-textarea/MentionTextArea.basic.test.ts +63 -0
- package/test/elements/mention-textarea/MentionTextArea.test.ts +321 -0
- package/tsconfig.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePickerCalendar.js","sourceRoot":"","sources":["../../../../../src/md/date-picker/internals/DatePickerCalendar.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, TemplateResult, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { calendarStyles } from './DatePicker.styles.js'\nimport {\n CalendarMonth,\n CalendarDay,\n DateRange,\n generateCalendarMonth,\n addMonths,\n getMonthNames,\n isSameDay,\n formatDate,\n} from './DatePickerUtils.js'\nimport '../../../md/icons/ui-icon.js'\nimport '../../../md/button/ui-button.js'\nimport '../../../md/icon-button/ui-icon-button.js'\n\nexport interface DateSelectEvent {\n date: Date\n formattedDate: string\n}\n\nexport interface DateRangeSelectEvent {\n range: DateRange\n formattedRange: {\n start: string | null\n end: string | null\n }\n}\n\nexport interface DateRangeConfirmEvent {\n range: DateRange | null\n formattedRange: {\n start: string | null\n end: string | null\n }\n}\n\nexport interface DateCancelEvent {\n reason?: string\n}\n\n/**\n * A calendar grid component for date selection.\n * Supports single date selection and date range selection.\n *\n * ## Usage\n *\n * ```html\n * <ui-date-picker-calendar></ui-date-picker-calendar>\n * ```\n *\n * ### Single date selection\n * ```html\n * <ui-date-picker-calendar\n * .selectedDate=${new Date()}\n * @date-select=${this.handleDateSelect}\n * ></ui-date-picker-calendar>\n * ```\n *\n * ### Date range selection\n * ```html\n * <ui-date-picker-calendar\n * .rangeSelection=${true}\n * .selectedRange=${{ start: new Date(), end: null }}\n * @date-range-select=${this.handleRangeSelect}\n * ></ui-date-picker-calendar>\n * ```\n */\n@customElement('ui-date-picker-calendar')\nexport class UiDatePickerCalendar extends LitElement {\n static override styles = calendarStyles\n\n /**\n * The currently displayed year\n */\n @property({ type: Number }) accessor year = new Date().getFullYear()\n\n /**\n * The currently displayed month (0-indexed)\n */\n @property({ type: Number }) accessor month = new Date().getMonth()\n\n /**\n * The currently selected date for single selection mode\n */\n @property({ type: Object }) accessor selectedDate: Date | null = null\n\n /**\n * The selected date range for range selection mode\n */\n @property({ type: Object }) accessor selectedRange: DateRange | null = null\n\n /**\n * Enable range selection mode\n */\n @property({ type: Boolean }) accessor rangeSelection = false\n\n /**\n * Minimum selectable date\n */\n @property({ type: Object }) accessor minDate: Date | undefined = undefined\n\n /**\n * Maximum selectable date\n */\n @property({ type: Object }) accessor maxDate: Date | undefined = undefined\n\n /**\n * Array of disabled dates\n */\n @property({ type: Array }) accessor disabledDates: Date[] | undefined = undefined\n\n /**\n * Locale for date formatting and month/day names\n */\n @property({ type: String }) accessor locale: string | undefined = undefined\n\n /**\n * Whether to show navigation controls\n */\n @property({ type: Boolean }) accessor showNavigation = true\n\n /**\n * Whether to show action buttons (OK/Cancel)\n */\n @property({ type: Boolean }) accessor showActions = false\n\n /**\n * Text for the OK button\n */\n @property({ type: String }) accessor okButtonText = 'OK'\n\n /**\n * Text for the Cancel button\n */\n @property({ type: String }) accessor cancelButtonText = 'Cancel'\n\n @state() private accessor _calendarData: CalendarMonth | undefined = undefined\n\n @state() private accessor _rangeStart: Date | undefined = undefined\n\n @state() private accessor _monthNames: string[] = []\n\n @state() private accessor _showMonthDropdown = false\n\n @state() private accessor _showYearDropdown = false\n\n @state() private accessor _pendingDate: Date | null = null\n\n @state() private accessor _pendingRange: DateRange | null = null\n\n override connectedCallback(): void {\n super.connectedCallback()\n this._updateCalendar()\n this._updateMonthNames()\n document.addEventListener('keydown', this._handleDocumentKeyDown.bind(this))\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback()\n document.removeEventListener('keydown', this._handleDocumentKeyDown.bind(this))\n }\n\n override updated(changedProperties: Map<string | number | symbol, unknown>): void {\n if (changedProperties.has('_showYearDropdown') && this._showYearDropdown) {\n // Scroll selected year into view\n this._scrollSelectedYearIntoView()\n }\n }\n\n private _scrollSelectedYearIntoView(): void {\n // Wait for next frame to ensure DOM is updated\n requestAnimationFrame(() => {\n const selectedYearButton = this.shadowRoot?.querySelector('.year-option.selected') as HTMLElement\n if (selectedYearButton) {\n selectedYearButton.scrollIntoView({\n behavior: 'auto',\n block: 'center',\n })\n }\n })\n }\n\n override willUpdate(changedProperties: Map<string | number | symbol, unknown>): void {\n if (\n changedProperties.has('year') ||\n changedProperties.has('month') ||\n changedProperties.has('selectedDate') ||\n changedProperties.has('selectedRange') ||\n changedProperties.has('disabledDates') ||\n changedProperties.has('locale')\n ) {\n this._updateCalendar()\n }\n\n if (changedProperties.has('locale')) {\n this._updateMonthNames()\n }\n }\n\n private _updateCalendar(): void {\n this._calendarData = generateCalendarMonth(\n this.year,\n this.month,\n this.selectedDate,\n this.selectedRange,\n this.disabledDates,\n this.locale\n )\n }\n\n private _updateMonthNames(): void {\n this._monthNames = getMonthNames(this.locale)\n }\n\n private _navigateMonth(delta: number): void {\n const newDate = addMonths(new Date(this.year, this.month), delta)\n this.year = newDate.getFullYear()\n this.month = newDate.getMonth()\n }\n\n private _handlePrevMonth(): void {\n this._navigateMonth(-1)\n }\n\n private _handleNextMonth(): void {\n this._navigateMonth(1)\n }\n\n private _handlePrevYear(): void {\n this.year = this.year - 1\n }\n\n private _handleNextYear(): void {\n this.year = this.year + 1\n }\n\n private _handleMonthClick(): void {\n this._showMonthDropdown = !this._showMonthDropdown\n this._showYearDropdown = false\n }\n\n private _handleYearClick(): void {\n this._showYearDropdown = !this._showYearDropdown\n this._showMonthDropdown = false\n }\n\n private _handleMonthSelect(selectedMonth: number): void {\n this.month = selectedMonth\n this._showMonthDropdown = false\n }\n\n private _handleYearSelect(selectedYear: number): void {\n this.year = selectedYear\n this._showYearDropdown = false\n }\n\n private _closeDropdowns(): void {\n this._showMonthDropdown = false\n this._showYearDropdown = false\n }\n\n private _handleDocumentKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this._closeDropdowns()\n }\n }\n\n private _handleDayClick(day: CalendarDay): void {\n if (day.isDisabled) return\n\n if (this.rangeSelection) {\n this._handleRangeSelection(day.date)\n } else {\n this._handleSingleSelection(day.date)\n }\n }\n\n private _handleSingleSelection(date: Date): void {\n if (this.showActions) {\n // Use pending state when actions are enabled\n this._pendingDate = date\n } else {\n // Immediate selection when no actions\n this.selectedDate = date\n\n const event: DateSelectEvent = {\n date,\n formattedDate: formatDate(date, this.locale),\n }\n\n this.dispatchEvent(\n new CustomEvent('date-select', {\n detail: event,\n bubbles: true,\n composed: true,\n })\n )\n }\n }\n\n private _handleRangeSelection(date: Date): void {\n if (!this._rangeStart || (this.selectedRange?.start && this.selectedRange?.end)) {\n // Start new range\n this._rangeStart = date\n const newRange = { start: date, end: null }\n\n if (this.showActions) {\n // Use pending state when actions are enabled\n this._pendingRange = newRange\n } else {\n this.selectedRange = newRange\n }\n } else {\n // Complete range\n const start = this._rangeStart\n const end = date\n\n // Ensure start is before end\n const sortedRange: DateRange = start <= end ? { start, end } : { start: end, end: start }\n\n this._rangeStart = undefined\n\n if (this.showActions) {\n // Use pending state when actions are enabled\n this._pendingRange = sortedRange\n } else {\n // Immediate selection when no actions\n this.selectedRange = sortedRange\n\n const event: DateRangeSelectEvent = {\n range: sortedRange,\n formattedRange: {\n start: sortedRange.start ? formatDate(sortedRange.start, this.locale) : null,\n end: sortedRange.end ? formatDate(sortedRange.end, this.locale) : null,\n },\n }\n\n this.dispatchEvent(\n new CustomEvent('date-range-select', {\n detail: event,\n bubbles: true,\n composed: true,\n })\n )\n }\n }\n }\n\n private _isDateDisabled(date: Date): boolean {\n if (this.minDate && date < this.minDate) return true\n if (this.maxDate && date > this.maxDate) return true\n if (this.disabledDates?.some((disabledDate) => isSameDay(date, disabledDate))) return true\n return false\n }\n\n private _handleConfirm(): void {\n if (this.rangeSelection) {\n if (this._pendingRange) {\n this.selectedRange = this._pendingRange\n\n const event: DateRangeConfirmEvent = {\n range: this._pendingRange,\n formattedRange: {\n start: this._pendingRange.start ? formatDate(this._pendingRange.start, this.locale) : null,\n end: this._pendingRange.end ? formatDate(this._pendingRange.end, this.locale) : null,\n },\n }\n\n this.dispatchEvent(\n new CustomEvent('date-range-confirm', {\n detail: event,\n bubbles: true,\n composed: true,\n })\n )\n }\n } else {\n if (this._pendingDate) {\n this.selectedDate = this._pendingDate\n\n const event: DateSelectEvent = {\n date: this._pendingDate,\n formattedDate: formatDate(this._pendingDate, this.locale),\n }\n\n this.dispatchEvent(\n new CustomEvent('date-select', {\n detail: event,\n bubbles: true,\n composed: true,\n })\n )\n }\n }\n }\n\n private _handleCancel(): void {\n // Reset pending state\n this._pendingDate = null\n this._pendingRange = null\n this._rangeStart = undefined\n\n const event: DateCancelEvent = {\n reason: 'user_cancelled',\n }\n\n this.dispatchEvent(\n new CustomEvent('date-cancel', {\n detail: event,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n private _renderNavigation(): TemplateResult {\n const monthName = this._monthNames[this.month] || ''\n\n return html`\n <div class=\"header\">\n <div class=\"month-year\">\n <div class=\"month-selector\">\n ${this.showNavigation && !this._showMonthDropdown && !this._showYearDropdown\n ? html`\n <ui-icon-button\n class=\"nav-button month-nav\"\n size=\"xs\"\n @click=${this._handlePrevMonth}\n aria-label=\"Previous month\"\n title=\"Previous month\"\n >\n <ui-icon icon=\"chevronLeft\"></ui-icon>\n </ui-icon-button>\n `\n : ''}\n <ui-button\n class=\"month-button\"\n color=\"text\"\n size=\"xs\"\n @click=${this._handleMonthClick}\n aria-label=\"Select month\"\n aria-expanded=${this._showMonthDropdown}\n trailingIcon\n >\n ${monthName}\n <ui-icon icon=\"arrowDropDown\" slot=\"icon\"></ui-icon>\n </ui-button>\n ${this.showNavigation && !this._showMonthDropdown && !this._showYearDropdown\n ? html`\n <ui-icon-button\n class=\"nav-button month-nav\"\n size=\"xs\"\n @click=${this._handleNextMonth}\n aria-label=\"Next month\"\n title=\"Next month\"\n >\n <ui-icon icon=\"chevronRight\"></ui-icon>\n </ui-icon-button>\n `\n : ''}\n </div>\n <div class=\"year-selector\">\n ${this.showNavigation && !this._showMonthDropdown && !this._showYearDropdown\n ? html`\n <ui-icon-button\n class=\"nav-button year-nav\"\n size=\"xs\"\n @click=${this._handlePrevYear}\n aria-label=\"Previous year\"\n title=\"Previous year\"\n >\n <ui-icon icon=\"chevronLeft\"></ui-icon>\n </ui-icon-button>\n `\n : ''}\n <ui-button\n class=\"year-button\"\n color=\"text\"\n size=\"xs\"\n @click=${this._handleYearClick}\n aria-label=\"Select year\"\n aria-expanded=${this._showYearDropdown}\n trailingIcon\n >\n ${this.year}\n <ui-icon icon=\"arrowDropDown\" slot=\"icon\"></ui-icon>\n </ui-button>\n ${this.showNavigation && !this._showMonthDropdown && !this._showYearDropdown\n ? html`\n <ui-icon-button\n class=\"nav-button year-nav\"\n size=\"xs\"\n @click=${this._handleNextYear}\n aria-label=\"Next year\"\n title=\"Next year\"\n >\n <ui-icon icon=\"chevronRight\"></ui-icon>\n </ui-icon-button>\n `\n : ''}\n </div>\n </div>\n </div>\n `\n }\n\n private _renderWeekdays(): TemplateResult {\n if (!this._calendarData) return html``\n\n return html`\n <div class=\"weekdays\">\n ${this._calendarData.weekdays.map((weekday) => html`<div class=\"weekday\">${weekday}</div>`)}\n </div>\n `\n }\n\n private _renderDay(day: CalendarDay): TemplateResult {\n const isPendingSelected = this.showActions && this._pendingDate && isSameDay(day.date, this._pendingDate)\n const isPendingRangeStart =\n this.showActions && this._pendingRange?.start && isSameDay(day.date, this._pendingRange.start)\n const isPendingRangeEnd = this.showActions && this._pendingRange?.end && isSameDay(day.date, this._pendingRange.end)\n const isPendingInRange =\n this.showActions &&\n this._pendingRange?.start &&\n this._pendingRange?.end &&\n day.date >= this._pendingRange.start &&\n day.date <= this._pendingRange.end &&\n !isPendingRangeStart &&\n !isPendingRangeEnd\n\n // Determine button color based on selection state\n let color: 'elevated' | 'filled' | 'outlined' | 'text' | 'tonal' = 'text'\n\n if (this.showActions) {\n if (isPendingRangeStart || isPendingRangeEnd || isPendingSelected) {\n color = 'filled'\n } else if (isPendingInRange) {\n color = 'text'\n }\n } else {\n if (day.isRangeStart || day.isRangeEnd || day.isSelected) {\n color = 'filled'\n } else if (day.isInRange) {\n color = 'text'\n }\n }\n\n if (day.isToday && color === 'text') {\n color = 'outlined'\n }\n\n const classes = {\n 'day-cell': true,\n 'other-month': !day.isCurrentMonth,\n 'today': day.isToday,\n 'in-range': this.showActions ? !!isPendingInRange : day.isInRange,\n 'range-start': this.showActions ? !!isPendingRangeStart : day.isRangeStart,\n 'range-end': this.showActions ? !!isPendingRangeEnd : day.isRangeEnd,\n 'has-complete-range': this.showActions\n ? !!(this._pendingRange?.start && this._pendingRange?.end)\n : !!(this.selectedRange?.start && this.selectedRange?.end),\n }\n\n return html`\n <div class=${classMap(classes)}>\n <ui-button\n class=\"day-button\"\n color=${color}\n size=\"s\"\n data-date=${day.date.toISOString().split('T')[0]}\n tabindex=${day.isToday && !(day.isDisabled || this._isDateDisabled(day.date)) ? '0' : '-1'}\n aria-label=${formatDate(day.date, this.locale)}\n @click=${() => this._handleDayClick(day)}\n ?disabled=${day.isDisabled || this._isDateDisabled(day.date)}\n >\n ${day.date.getDate()}\n </ui-button>\n </div>\n `\n }\n\n private _renderDays(): TemplateResult {\n if (!this._calendarData) return html``\n\n return html`<div class=\"days\">${this._calendarData.days.map((day) => this._renderDay(day))}</div>`\n }\n\n private _renderActions(): TemplateResult | typeof nothing {\n if (!this.showActions) return nothing\n\n const hasSelection = this.rangeSelection ? this._pendingRange?.start : this._pendingDate\n\n return html`\n <div class=\"actions\">\n <ui-button size=\"s\" color=\"text\" @click=${this._handleCancel}>${this.cancelButtonText}</ui-button>\n <ui-button size=\"s\" color=\"text\" @click=${this._handleConfirm} ?disabled=${!hasSelection}>\n ${this.okButtonText}\n </ui-button>\n </div>\n `\n }\n\n private _renderMonthDropdown(): TemplateResult {\n return html`\n <div class=\"dropdown-view\">\n <div class=\"month-list\">\n ${this._monthNames.map(\n (monthName, index) => html`\n <ui-button\n class=\"month-option ${index === this.month ? 'selected' : ''}\"\n color=${index === this.month ? 'filled' : 'text'}\n size=\"s\"\n @click=${() => this._handleMonthSelect(index)}\n aria-label=${monthName}\n >\n ${monthName}\n </ui-button>\n `\n )}\n </div>\n </div>\n `\n }\n\n private _renderYearDropdown(): TemplateResult {\n const currentYear = this.year\n const startYear = currentYear - 50\n const endYear = currentYear + 50\n const years: number[] = []\n\n for (let year = startYear; year <= endYear; year++) {\n years.push(year)\n }\n\n return html`\n <div class=\"dropdown-view\">\n <div class=\"year-grid\">\n ${years.map(\n (year) => html`\n <ui-button\n class=\"year-option ${year === this.year ? 'selected' : ''}\"\n color=${year === this.year ? 'filled' : 'text'}\n size=\"s\"\n @click=${() => this._handleYearSelect(year)}\n aria-label=${year.toString()}\n >\n ${year}\n </ui-button>\n `\n )}\n </div>\n </div>\n `\n }\n\n override render(): TemplateResult {\n // Show dropdown views instead of calendar when dropdowns are open\n if (this._showMonthDropdown) {\n return html`\n <div class=\"calendar\" role=\"grid\" aria-label=\"Calendar\">\n ${this._renderNavigation()} ${this._renderMonthDropdown()}\n </div>\n `\n }\n\n if (this._showYearDropdown) {\n return html`\n <div class=\"calendar\" role=\"grid\" aria-label=\"Calendar\">\n ${this._renderNavigation()} ${this._renderYearDropdown()}\n </div>\n `\n }\n\n // Default calendar view\n return html`\n <div class=\"calendar\" role=\"grid\" aria-label=\"Calendar\">\n ${this._renderNavigation()} ${this._renderWeekdays()} ${this._renderDays()} ${this._renderActions()}\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui-date-picker-calendar': UiDatePickerCalendar\n }\n\n interface HTMLElementEventMap {\n 'date-select': CustomEvent<DateSelectEvent>\n 'date-range-select': CustomEvent<DateRangeSelectEvent>\n 'date-range-confirm': CustomEvent<DateRangeConfirmEvent>\n 'date-cancel': CustomEvent<DateCancelEvent>\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DatePickerCalendar.js","sourceRoot":"","sources":["../../../../../src/md/date-picker/internals/DatePickerCalendar.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, TemplateResult, nothing } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { calendarStyles } from './DatePicker.styles.js'\nimport {\n CalendarMonth,\n CalendarDay,\n DateRange,\n generateCalendarMonth,\n addMonths,\n getMonthNames,\n isSameDay,\n formatDate,\n addDays,\n} from './DatePickerUtils.js'\nimport '../../../md/icons/ui-icon.js'\nimport '../../../md/button/ui-button.js'\nimport '../../../md/icon-button/ui-icon-button.js'\n\n/**\n * Event dispatched when a single date is selected in immediate mode\n * or confirmed in pending mode.\n */\nexport interface DateSelectEvent {\n date: Date\n formattedDate: string\n}\n\n/**\n * Event dispatched when a date range is completed in immediate mode.\n * Only fired when both start and end dates are selected.\n */\nexport interface DateRangeSelectEvent {\n range: DateRange\n formattedRange: {\n start: string | null\n end: string | null\n }\n}\n\n/**\n * Event dispatched when a date range selection is confirmed\n * via the OK button in pending mode.\n */\nexport interface DateRangeConfirmEvent {\n range: DateRange | null\n formattedRange: {\n start: string | null\n end: string | null\n }\n}\n\n/**\n * Event dispatched when user cancels a pending selection\n * via the Cancel button or Escape key.\n */\nexport interface DateCancelEvent {\n reason?: string\n}\n\n/**\n * A calendar grid component for date selection.\n * Supports single date selection and date range selection with full keyboard navigation.\n *\n * ## Features\n * - Single date and date range selection\n * - Keyboard navigation support (arrow keys, home, end, page up/down)\n * - Configurable date restrictions (min/max dates, disabled dates)\n * - Localization support for date formatting and month/day names\n * - Optional action buttons for pending selections\n * - Accessible design with proper ARIA attributes\n *\n * ## Events\n * - `date-select`: Fired when a single date is selected/confirmed\n * - `date-range-select`: Fired when a date range is completed (immediate mode)\n * - `date-range-confirm`: Fired when a date range is confirmed (pending mode)\n * - `date-cancel`: Fired when a pending selection is cancelled\n *\n * ## Usage\n *\n * ```html\n * <ui-date-picker-calendar></ui-date-picker-calendar>\n * ```\n *\n * ### Single date selection\n * ```html\n * <ui-date-picker-calendar\n * .selectedDate=${new Date()}\n * @date-select=${this.handleDateSelect}\n * ></ui-date-picker-calendar>\n * ```\n *\n * ### Date range selection\n * ```html\n * <ui-date-picker-calendar\n * rangeSelection\n * .rangeStart=${new Date()}\n * .rangeEnd=${null}\n * @date-range-select=${this.handleRangeSelect}\n * ></ui-date-picker-calendar>\n * ```\n *\n * ### With action buttons and restrictions\n * ```html\n * <ui-date-picker-calendar\n * rangeSelection\n * showActions\n * .minDate=${new Date()}\n * .maxDate=${new Date(Date.now() + 365 * 24 * 60 * 60 * 1000)}\n * @date-range-confirm=${this.handleRangeConfirm}\n * @date-cancel=${this.handleCancel}\n * ></ui-date-picker-calendar>\n * ```\n */\n@customElement('ui-date-picker-calendar')\nexport class UiDatePickerCalendar extends LitElement {\n static override styles = calendarStyles\n\n /**\n * The currently displayed year\n */\n @property({ type: Number }) accessor year = new Date().getFullYear()\n\n /**\n * The currently displayed month (0-indexed, where 0 = January)\n */\n @property({ type: Number }) accessor month = new Date().getMonth()\n\n /**\n * The currently selected date for single selection mode.\n * Set to null for no selection.\n */\n @property({ type: Object }) accessor selectedDate: Date | null = null\n\n /**\n * The start date of the selected range for range selection mode.\n * Used in combination with rangeEnd to define a date range.\n */\n @property({ type: Object }) accessor rangeStart: Date | null = null\n\n /**\n * The end date of the selected range for range selection mode.\n * Used in combination with rangeStart to define a date range.\n */\n @property({ type: Object }) accessor rangeEnd: Date | null = null\n\n /**\n * Enable range selection mode. When true, users can select date ranges\n * instead of single dates. Affects event dispatching and UI behavior.\n */\n @property({ type: Boolean }) accessor rangeSelection = false\n\n /**\n * Minimum selectable date. Dates before this will be disabled.\n * Set to undefined for no minimum restriction.\n */\n @property({ type: Object }) accessor minDate: Date | undefined = undefined\n\n /**\n * Maximum selectable date. Dates after this will be disabled.\n * Set to undefined for no maximum restriction.\n */\n @property({ type: Object }) accessor maxDate: Date | undefined = undefined\n\n /**\n * Array of specific dates to disable. These dates will not be selectable\n * regardless of minDate and maxDate settings.\n */\n @property({ type: Array }) accessor disabledDates: Date[] | undefined = undefined\n\n /**\n * Locale for date formatting and month/day names (e.g., 'en-US', 'fr-FR').\n * Defaults to browser locale if not specified.\n */\n @property({ type: String }) accessor locale: string | undefined = undefined\n\n /**\n * Whether to show navigation controls (previous/next month and year buttons).\n * When false, users can only navigate using keyboard or programmatically.\n */\n @property({ type: Boolean }) accessor showNavigation = true\n\n /**\n * Whether to show action buttons (OK/Cancel). When true, selections are pending\n * until confirmed with the OK button. When false, selections are immediate.\n */\n @property({ type: Boolean }) accessor showActions = false\n\n /**\n * Text label for the OK/confirm button. Only visible when showActions is true.\n */\n @property({ type: String }) accessor okButtonText = 'OK'\n\n /**\n * Text label for the Cancel button. Only visible when showActions is true.\n */\n @property({ type: String }) accessor cancelButtonText = 'Cancel'\n\n @state() private accessor calendarData: CalendarMonth | undefined = undefined\n\n @state() private accessor monthNames: string[] = []\n\n @state() private accessor showMonthDropdown = false\n\n @state() private accessor showYearDropdown = false\n\n @state() private accessor pendingDate: Date | null = null\n\n @state() private accessor pendingRangeStart: Date | null = null\n\n @state() private accessor pendingRangeEnd: Date | null = null\n\n @state() private accessor focusedDate: Date | null = null\n\n override connectedCallback(): void {\n super.connectedCallback()\n this.updateCalendar()\n this.updateMonthNames()\n this.initializeFocusedDate()\n }\n\n override firstUpdated(): void {\n // Set initial focus to the calendar container\n this.updateFocus()\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback()\n }\n\n override willUpdate(changedProperties: Map<string | number | symbol, unknown>): void {\n if (\n changedProperties.has('year') ||\n changedProperties.has('month') ||\n changedProperties.has('selectedDate') ||\n changedProperties.has('rangeStart') ||\n changedProperties.has('rangeEnd') ||\n changedProperties.has('disabledDates') ||\n changedProperties.has('locale')\n ) {\n this.updateCalendar()\n }\n\n if (changedProperties.has('locale')) {\n this.updateMonthNames()\n }\n\n // Update focused date when month/year changes via navigation\n if (changedProperties.has('year') || changedProperties.has('month')) {\n this.updateFocusedDateForMonthChange()\n }\n }\n\n override updated(changedProperties: Map<string | number | symbol, unknown>): void {\n if (changedProperties.has('showYearDropdown') && this.showYearDropdown) {\n // Scroll selected year into view\n this.scrollSelectedYearIntoView()\n }\n\n if (changedProperties.has('focusedDate')) {\n this.updateFocus()\n }\n }\n\n private updateFocus(): void {\n if (!this.focusedDate) return\n\n // Find the button for the focused date and set focus\n const dateString = this.focusedDate.toISOString().split('T')[0]\n const focusedButton = this.shadowRoot?.querySelector(`[data-date=\"${dateString}\"]`) as HTMLElement\n if (focusedButton && !focusedButton.hasAttribute('disabled')) {\n // Use requestAnimationFrame to ensure DOM is updated\n requestAnimationFrame(() => {\n focusedButton.focus()\n })\n }\n }\n\n private scrollSelectedYearIntoView(): void {\n // Wait for next frame to ensure DOM is updated\n requestAnimationFrame(() => {\n const selectedYearButton = this.shadowRoot?.querySelector('.year-option.selected') as HTMLElement\n if (selectedYearButton) {\n selectedYearButton.scrollIntoView({\n behavior: 'auto',\n block: 'center',\n })\n }\n })\n }\n\n private updateFocusedDateForMonthChange(): void {\n if (!this.focusedDate) {\n this.initializeFocusedDate()\n return\n }\n\n // Keep the same day of month if possible\n const targetDay = this.focusedDate.getDate()\n const newDate = new Date(this.year, this.month, targetDay)\n\n // Check if the target date exists in the new month and is not disabled\n if (newDate.getMonth() === this.month && !this.isDateDisabled(newDate)) {\n this.focusedDate = newDate\n } else {\n // Find the closest available date\n this.focusedDate = this.findFirstAvailableDate()\n }\n }\n\n private updateCalendar(): void {\n const selectedRange = this.rangeStart || this.rangeEnd ? { start: this.rangeStart, end: this.rangeEnd } : null\n this.calendarData = generateCalendarMonth(\n this.year,\n this.month,\n this.selectedDate,\n selectedRange,\n this.disabledDates,\n this.locale\n )\n }\n\n private updateMonthNames(): void {\n this.monthNames = getMonthNames(this.locale)\n }\n\n private navigateMonth(delta: number): void {\n const newDate = addMonths(new Date(this.year, this.month), delta)\n this.year = newDate.getFullYear()\n this.month = newDate.getMonth()\n }\n\n private handlePrevMonth(): void {\n this.navigateMonth(-1)\n }\n\n private handleNextMonth(): void {\n this.navigateMonth(1)\n }\n\n private handlePrevYear(): void {\n this.year = this.year - 1\n }\n\n private handleNextYear(): void {\n this.year = this.year + 1\n }\n\n private handleMonthClick(): void {\n this.showMonthDropdown = !this.showMonthDropdown\n this.showYearDropdown = false\n }\n\n private handleYearClick(): void {\n this.showYearDropdown = !this.showYearDropdown\n this.showMonthDropdown = false\n }\n\n private handleMonthSelect(selectedMonth: number): void {\n this.month = selectedMonth\n this.showMonthDropdown = false\n }\n\n private handleYearSelect(selectedYear: number): void {\n this.year = selectedYear\n this.showYearDropdown = false\n }\n\n private closeDropdowns(): void {\n this.showMonthDropdown = false\n this.showYearDropdown = false\n }\n\n private navigateDate(delta: number): void {\n if (!this.focusedDate) return\n\n const newDate = addDays(this.focusedDate, delta)\n\n // Check if new date is in current month or if we should navigate to next/previous month\n if (newDate.getMonth() !== this.month || newDate.getFullYear() !== this.year) {\n // Navigate to next/previous month\n if (delta > 0) {\n this.navigateMonth(1)\n } else {\n this.navigateMonth(-1)\n }\n // Set focused date to the target date in the new month\n this.focusedDate = newDate\n return\n }\n\n // Check if new date is disabled\n if (this.isDateDisabled(newDate)) {\n // Try to find next available date\n const availableDate = this.findNextAvailableDate(newDate, delta > 0)\n if (availableDate) {\n this.focusedDate = availableDate\n }\n } else {\n this.focusedDate = newDate\n }\n }\n\n private findNextAvailableDate(startDate: Date, forward: boolean): Date | null {\n const direction = forward ? 1 : -1\n for (let i = 1; i <= 31; i++) {\n const date = addDays(startDate, i * direction)\n if (date.getMonth() !== this.month) break // Out of current month\n if (!this.isDateDisabled(date)) {\n return date\n }\n }\n return null\n }\n\n private focusFirstDayOfMonth(): void {\n const firstDay = new Date(this.year, this.month, 1)\n if (!this.isDateDisabled(firstDay)) {\n this.focusedDate = firstDay\n } else {\n this.focusedDate = this.findFirstAvailableDate()\n }\n }\n\n private focusLastDayOfMonth(): void {\n const lastDay = new Date(this.year, this.month + 1, 0)\n if (!this.isDateDisabled(lastDay)) {\n this.focusedDate = lastDay\n } else {\n // Find last available date in month\n for (let i = lastDay.getDate(); i >= 1; i--) {\n const date = new Date(this.year, this.month, i)\n if (!this.isDateDisabled(date)) {\n this.focusedDate = date\n break\n }\n }\n }\n }\n\n private selectFocusedDate(): void {\n if (!this.focusedDate || this.isDateDisabled(this.focusedDate)) return\n\n if (this.rangeSelection) {\n this.handleRangeSelection(this.focusedDate)\n } else {\n this.handleSingleSelection(this.focusedDate)\n }\n }\n\n private handleDayClick(day: CalendarDay): void {\n if (day.isDisabled) return\n\n // Update focused date to clicked date\n this.focusedDate = day.date\n\n if (this.rangeSelection) {\n this.handleRangeSelection(day.date)\n } else {\n this.handleSingleSelection(day.date)\n }\n }\n\n private handleSingleSelection(date: Date): void {\n if (this.showActions) {\n // Use pending state when actions are enabled\n this.pendingDate = date\n } else {\n // Immediate selection when no actions\n this.selectedDate = date\n this.dispatchDateEvent(date)\n }\n }\n\n private handleRangeSelection(date: Date): void {\n const isImmediate = !this.showActions\n const { start, end } = this.getCurrentRange()\n\n // If we have a complete range, start a new one\n if (start && end) {\n this.setRangeValues(date, null, isImmediate)\n return\n }\n\n // If we have a start but no end, complete the range\n if (start && !end) {\n const sortedRange = start <= date ? { start, end: date } : { start: date, end: start }\n this.setRangeValues(sortedRange.start, sortedRange.end, isImmediate)\n\n if (isImmediate) {\n this.dispatchRangeEvent(sortedRange)\n }\n return\n }\n\n // Start new range\n this.setRangeValues(date, null, isImmediate)\n }\n\n /**\n * Helper to get the current range state (either immediate or pending)\n */\n private getCurrentRange(): { start: Date | null; end: Date | null } {\n const isImmediate = !this.showActions\n return {\n start: isImmediate ? this.rangeStart : this.pendingRangeStart,\n end: isImmediate ? this.rangeEnd : this.pendingRangeEnd,\n }\n }\n\n /**\n * Helper to check if we have a complete range in the current mode\n */\n private hasCompleteRange(): boolean {\n const { start, end } = this.getCurrentRange()\n return !!(start && end)\n }\n\n private setRangeValues(start: Date | null, end: Date | null, isImmediate: boolean): void {\n if (isImmediate) {\n this.rangeStart = start\n this.rangeEnd = end\n } else {\n this.pendingRangeStart = start\n this.pendingRangeEnd = end\n }\n }\n\n /**\n * Helper to dispatch date selection events\n */\n private dispatchDateEvent(date: Date): void {\n const event: DateSelectEvent = {\n date,\n formattedDate: formatDate(date, this.locale),\n }\n\n this.dispatchEvent(\n new CustomEvent('date-select', {\n detail: event,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n /**\n * Helper to dispatch range selection events\n */\n private dispatchRangeEvent(range: { start: Date; end: Date }): void {\n const event: DateRangeSelectEvent = {\n range,\n formattedRange: {\n start: formatDate(range.start, this.locale),\n end: formatDate(range.end, this.locale),\n },\n }\n\n this.dispatchEvent(\n new CustomEvent('date-range-select', {\n detail: event,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n /**\n * Helper to dispatch range confirmation events\n */\n private dispatchRangeConfirmEvent(range: DateRange | null): void {\n const event: DateRangeConfirmEvent = {\n range,\n formattedRange: {\n start: range?.start ? formatDate(range.start, this.locale) : null,\n end: range?.end ? formatDate(range.end, this.locale) : null,\n },\n }\n\n this.dispatchEvent(\n new CustomEvent('date-range-confirm', {\n detail: event,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n /**\n * Helper to dispatch cancel events\n */\n private dispatchCancelEvent(reason = 'user_cancelled'): void {\n const event: DateCancelEvent = { reason }\n\n this.dispatchEvent(\n new CustomEvent('date-cancel', {\n detail: event,\n bubbles: true,\n composed: true,\n })\n )\n }\n\n private isDateDisabled(date: Date): boolean {\n if (this.minDate && date < this.minDate) return true\n if (this.maxDate && date > this.maxDate) return true\n if (this.disabledDates?.some((disabledDate) => isSameDay(date, disabledDate))) return true\n return false\n }\n\n private handleConfirm(): void {\n if (this.rangeSelection) {\n if (this.pendingRangeStart || this.pendingRangeEnd) {\n this.rangeStart = this.pendingRangeStart\n this.rangeEnd = this.pendingRangeEnd\n\n const range = this.rangeStart || this.rangeEnd ? { start: this.rangeStart, end: this.rangeEnd } : null\n\n // Reset pending state after confirmation\n this.pendingRangeStart = null\n this.pendingRangeEnd = null\n\n this.dispatchRangeConfirmEvent(range)\n }\n } else {\n if (this.pendingDate) {\n this.selectedDate = this.pendingDate\n\n // Reset pending state after confirmation\n this.pendingDate = null\n\n this.dispatchDateEvent(this.selectedDate)\n }\n }\n }\n\n private handleCancel(): void {\n // Reset pending state\n this.pendingDate = null\n this.pendingRangeStart = null\n this.pendingRangeEnd = null\n\n this.dispatchCancelEvent()\n }\n\n /**\n * Helper to render navigation buttons\n */\n private renderNavButton(\n direction: 'prev' | 'next',\n onClick: () => void,\n ariaLabel: string,\n icon: 'chevronLeft' | 'chevronRight'\n ): TemplateResult | typeof nothing {\n if (!this.showNavigation || this.showMonthDropdown || this.showYearDropdown) {\n return nothing\n }\n\n return html`<ui-icon-button\n class=\"nav-button\"\n size=\"xs\"\n @click=${onClick}\n aria-label=${ariaLabel}\n title=${ariaLabel}\n >\n <ui-icon icon=${icon}></ui-icon>\n </ui-icon-button>`\n }\n\n private renderNavigation(): TemplateResult {\n const monthName = this.monthNames[this.month] || ''\n\n return html`\n <div class=\"header\">\n <div class=\"month-year\">\n <div class=\"month-selector\">\n ${this.renderNavButton('prev', this.handlePrevMonth, 'Previous month', 'chevronLeft')}\n <ui-button\n class=\"month-button\"\n color=\"text\"\n size=\"xs\"\n @click=${this.handleMonthClick}\n aria-label=\"Select month\"\n aria-expanded=${this.showMonthDropdown}\n trailingIcon\n >\n ${monthName}\n <ui-icon icon=\"arrowDropDown\" slot=\"icon\"></ui-icon>\n </ui-button>\n ${this.renderNavButton('next', this.handleNextMonth, 'Next month', 'chevronRight')}\n </div>\n <div class=\"year-selector\">\n ${this.renderNavButton('prev', this.handlePrevYear, 'Previous year', 'chevronLeft')}\n <ui-button\n class=\"year-button\"\n color=\"text\"\n size=\"xs\"\n @click=${this.handleYearClick}\n aria-label=\"Select year\"\n aria-expanded=${this.showYearDropdown}\n trailingIcon\n >\n ${this.year}\n <ui-icon icon=\"arrowDropDown\" slot=\"icon\"></ui-icon>\n </ui-button>\n ${this.renderNavButton('next', this.handleNextYear, 'Next year', 'chevronRight')}\n </div>\n </div>\n </div>\n `\n }\n\n private renderWeekdays(): TemplateResult {\n if (!this.calendarData) return html``\n\n return html`\n <div class=\"weekdays\" role=\"row\">\n ${this.calendarData.weekdays.map((weekday) => html`<div class=\"weekday\" role=\"columnheader\">${weekday}</div>`)}\n </div>\n `\n }\n\n /**\n * Helper to determine day selection state for rendering\n */\n private getDaySelectionState(day: CalendarDay): {\n isSelected: boolean\n isRangeStart: boolean\n isRangeEnd: boolean\n isInRange: boolean\n } {\n if (this.showActions) {\n // Use pending state\n const isPendingSelected = this.pendingDate && isSameDay(day.date, this.pendingDate)\n const isPendingRangeStart = this.pendingRangeStart && isSameDay(day.date, this.pendingRangeStart)\n const isPendingRangeEnd = this.pendingRangeEnd && isSameDay(day.date, this.pendingRangeEnd)\n const isPendingInRange =\n this.pendingRangeStart &&\n this.pendingRangeEnd &&\n day.date >= this.pendingRangeStart &&\n day.date <= this.pendingRangeEnd &&\n !isPendingRangeStart &&\n !isPendingRangeEnd\n\n return {\n isSelected: !!isPendingSelected,\n isRangeStart: !!isPendingRangeStart,\n isRangeEnd: !!isPendingRangeEnd,\n isInRange: !!isPendingInRange,\n }\n } else {\n // Use immediate state\n return {\n isSelected: day.isSelected,\n isRangeStart: day.isRangeStart,\n isRangeEnd: day.isRangeEnd,\n isInRange: day.isInRange,\n }\n }\n }\n\n /**\n * Helper to determine button color for a day\n */\n private getDayButtonColor(\n day: CalendarDay,\n selectionState: ReturnType<typeof this.getDaySelectionState>\n ): 'elevated' | 'filled' | 'outlined' | 'text' | 'tonal' {\n if (selectionState.isRangeStart || selectionState.isRangeEnd || selectionState.isSelected) {\n return 'filled'\n }\n\n if (selectionState.isInRange) {\n return 'text'\n }\n\n if (day.isToday) {\n return 'outlined'\n }\n\n return 'text'\n }\n\n private renderDay(day: CalendarDay): TemplateResult {\n const selectionState = this.getDaySelectionState(day)\n const color = this.getDayButtonColor(day, selectionState)\n\n const classes = {\n 'day-cell': true,\n 'other-month': !day.isCurrentMonth,\n 'today': day.isToday,\n 'in-range': selectionState.isInRange,\n 'range-start': selectionState.isRangeStart,\n 'range-end': selectionState.isRangeEnd,\n 'has-complete-range': this.hasCompleteRange(),\n }\n\n const isFocused = this.focusedDate && isSameDay(day.date, this.focusedDate)\n\n return html`\n <div class=${classMap(classes)} role=\"gridcell\">\n <ui-button\n class=\"day-button\"\n color=${color}\n size=\"s\"\n data-date=${day.date.toISOString().split('T')[0]}\n tabindex=${isFocused && !(day.isDisabled || this.isDateDisabled(day.date)) ? '0' : '-1'}\n aria-label=${formatDate(day.date, this.locale)}\n aria-selected=${selectionState.isSelected || selectionState.isRangeStart || selectionState.isRangeEnd}\n @click=${() => this.handleDayClick(day)}\n ?disabled=${day.isDisabled || this.isDateDisabled(day.date)}\n >\n ${day.date.getDate()}\n </ui-button>\n </div>\n `\n }\n\n private renderDays(): TemplateResult {\n if (!this.calendarData) return html``\n\n return html`<div class=\"days\">${this.calendarData.days.map((day) => this.renderDay(day))}</div>`\n }\n\n private renderActions(): TemplateResult | typeof nothing {\n if (!this.showActions) return nothing\n\n const hasSelection = this.rangeSelection ? this.pendingRangeStart : this.pendingDate\n\n return html`\n <div class=\"actions\">\n <ui-button size=\"s\" color=\"text\" @click=${this.handleCancel}>${this.cancelButtonText}</ui-button>\n <ui-button size=\"s\" color=\"text\" @click=${this.handleConfirm} ?disabled=${!hasSelection}>\n ${this.okButtonText}\n </ui-button>\n </div>\n `\n }\n\n /**\n * Helper to render dropdown option buttons\n */\n private renderDropdownOption(\n value: string | number,\n label: string,\n isSelected: boolean,\n onClick: () => void,\n className = ''\n ): TemplateResult {\n return html`\n <ui-button\n class=\"dropdown-option ${className} ${isSelected ? 'selected' : ''}\"\n color=${isSelected ? 'filled' : 'text'}\n size=\"s\"\n @click=${onClick}\n aria-label=${label}\n >\n ${label}\n </ui-button>\n `\n }\n\n private renderMonthDropdown(): TemplateResult {\n return html`\n <div class=\"dropdown-view\">\n <div class=\"month-list\">\n ${this.monthNames.map((monthName, index) =>\n this.renderDropdownOption(index, monthName, index === this.month, () => this.handleMonthSelect(index))\n )}\n </div>\n </div>\n `\n }\n\n private renderYearDropdown(): TemplateResult {\n const currentYear = this.year\n const startYear = currentYear - 50\n const endYear = currentYear + 50\n const years: number[] = []\n\n for (let year = startYear; year <= endYear; year++) {\n years.push(year)\n }\n\n return html`\n <div class=\"dropdown-view\">\n <div class=\"year-grid\">\n ${years.map((year) =>\n this.renderDropdownOption(\n year,\n year.toString(),\n year === this.year,\n () => this.handleYearSelect(year),\n 'year-option'\n )\n )}\n </div>\n </div>\n `\n }\n\n private findFirstAvailableDate(): Date {\n const firstDayOfMonth = new Date(this.year, this.month, 1)\n for (let i = 0; i < 31; i++) {\n const date = addDays(firstDayOfMonth, i)\n if (date.getMonth() !== this.month) break // Next month\n if (!this.isDateDisabled(date)) {\n return date\n }\n }\n return firstDayOfMonth // Fallback\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n // Prevent default behavior for navigation keys\n const navigationKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End', 'PageUp', 'PageDown', ' ']\n if (navigationKeys.includes(event.key)) {\n event.preventDefault()\n }\n\n switch (event.key) {\n case 'ArrowLeft':\n this.navigateDate(-1)\n break\n case 'ArrowRight':\n this.navigateDate(1)\n break\n case 'ArrowUp':\n this.navigateDate(-7)\n break\n case 'ArrowDown':\n this.navigateDate(7)\n break\n case 'Enter':\n case ' ':\n this.selectFocusedDate()\n break\n case 'Home':\n this.focusFirstDayOfMonth()\n break\n case 'End':\n this.focusLastDayOfMonth()\n break\n case 'PageUp':\n if (event.shiftKey) {\n this.handlePrevYear()\n } else {\n this.navigateMonth(-1)\n }\n break\n case 'PageDown':\n if (event.shiftKey) {\n this.handleNextYear()\n } else {\n this.navigateMonth(1)\n }\n break\n case 'Escape':\n this.closeDropdowns()\n break\n }\n }\n\n /**\n * Helper to check if a date is in the current month and not disabled\n */\n private isDateAvailable(date: Date): boolean {\n return date.getMonth() === this.month && date.getFullYear() === this.year && !this.isDateDisabled(date)\n }\n\n private initializeFocusedDate(): void {\n // Priority: selectedDate, rangeStart, today, first available date\n const candidates = [this.selectedDate, this.rangeStart, new Date()].filter(Boolean) as Date[]\n\n for (const candidate of candidates) {\n if (this.isDateAvailable(candidate)) {\n this.focusedDate = candidate\n return\n }\n }\n\n // Fallback to first available date in current month\n this.focusedDate = this.findFirstAvailableDate()\n }\n\n override render(): TemplateResult {\n // Show dropdown views instead of calendar when dropdowns are open\n if (this.showMonthDropdown) {\n return html`\n <div class=\"calendar\" role=\"grid\" aria-label=\"Month selection for ${this.year}\">\n ${this.renderNavigation()} ${this.renderMonthDropdown()}\n </div>\n `\n }\n\n if (this.showYearDropdown) {\n return html`\n <div class=\"calendar\" role=\"grid\" aria-label=\"Year selection\">\n ${this.renderNavigation()} ${this.renderYearDropdown()}\n </div>\n `\n }\n\n // Default calendar view\n return html`\n <div\n class=\"calendar\"\n role=\"grid\"\n aria-label=\"Calendar for ${this.monthNames[this.month]} ${this.year}\"\n aria-roledescription=\"Calendar grid\"\n tabindex=\"0\"\n @keydown=${this.handleKeyDown}\n >\n ${this.renderNavigation()} ${this.renderWeekdays()} ${this.renderDays()} ${this.renderActions()}\n </div>\n `\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ui-date-picker-calendar': UiDatePickerCalendar\n }\n\n interface HTMLElementEventMap {\n 'date-select': CustomEvent<DateSelectEvent>\n 'date-range-select': CustomEvent<DateRangeSelectEvent>\n 'date-range-confirm': CustomEvent<DateRangeConfirmEvent>\n 'date-cancel': CustomEvent<DateCancelEvent>\n }\n}\n"]}
|
|
@@ -6,13 +6,52 @@ import '../../md/icons/ui-icon.js';
|
|
|
6
6
|
* A docked date picker that opens from a text field input.
|
|
7
7
|
* Ideal for forms and date selection in medium to large layouts.
|
|
8
8
|
*
|
|
9
|
+
* ## Features
|
|
10
|
+
* - Text field input with calendar dropdown
|
|
11
|
+
* - Keyboard navigation support (Arrow Down, Enter, Escape)
|
|
12
|
+
* - Custom date formatting
|
|
13
|
+
* - Input validation and error handling
|
|
14
|
+
* - Min/max date constraints
|
|
15
|
+
* - Disabled dates support
|
|
16
|
+
* - Accessible design with proper ARIA attributes
|
|
17
|
+
* - CSS Anchor Positioning API for dropdown placement
|
|
18
|
+
*
|
|
19
|
+
* ## Events
|
|
20
|
+
*
|
|
21
|
+
* ### `change`
|
|
22
|
+
* Fired when the selected date changes.
|
|
23
|
+
*
|
|
24
|
+
* **Detail:**
|
|
25
|
+
* ```typescript
|
|
26
|
+
* {
|
|
27
|
+
* value: Date | null,
|
|
28
|
+
* formattedValue: string
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
9
32
|
* ## Usage
|
|
10
33
|
*
|
|
34
|
+
* ### Basic usage
|
|
11
35
|
* ```html
|
|
12
36
|
* <ui-date-picker-input
|
|
13
37
|
* label="Select date"
|
|
38
|
+
* name="birthDate"
|
|
14
39
|
* placeholder="MM/DD/YYYY"
|
|
15
40
|
* .value=${new Date()}
|
|
41
|
+
* @change=${this.handleDateChange}
|
|
42
|
+
* ></ui-date-picker-input>
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* ### With validation
|
|
46
|
+
* ```html
|
|
47
|
+
* <ui-date-picker-input
|
|
48
|
+
* label="Birth date"
|
|
49
|
+
* name="birthDate"
|
|
50
|
+
* required
|
|
51
|
+
* .error=${this.hasError}
|
|
52
|
+
* .errorMessage=${"Please select a valid date"}
|
|
53
|
+
* .minDate=${new Date('1900-01-01')}
|
|
54
|
+
* .maxDate=${new Date()}
|
|
16
55
|
* ></ui-date-picker-input>
|
|
17
56
|
* ```
|
|
18
57
|
*
|
|
@@ -23,6 +62,14 @@ import '../../md/icons/ui-icon.js';
|
|
|
23
62
|
* .dateFormat=${date => date.toLocaleDateString('en-GB')}
|
|
24
63
|
* ></ui-date-picker-input>
|
|
25
64
|
* ```
|
|
65
|
+
*
|
|
66
|
+
* ### With disabled dates
|
|
67
|
+
* ```html
|
|
68
|
+
* <ui-date-picker-input
|
|
69
|
+
* label="Appointment date"
|
|
70
|
+
* .disabledDates=${[new Date('2024-12-25'), new Date('2024-01-01')]}
|
|
71
|
+
* ></ui-date-picker-input>
|
|
72
|
+
* ```
|
|
26
73
|
*/
|
|
27
74
|
export declare class UiDatePickerInput extends LitElement {
|
|
28
75
|
static styles: import("lit").CSSResult;
|
|
@@ -31,6 +78,10 @@ export declare class UiDatePickerInput extends LitElement {
|
|
|
31
78
|
* The label for the input field
|
|
32
79
|
*/
|
|
33
80
|
accessor label: string;
|
|
81
|
+
/**
|
|
82
|
+
* The name attribute for the input field (for form handling)
|
|
83
|
+
*/
|
|
84
|
+
accessor name: string;
|
|
34
85
|
/**
|
|
35
86
|
* Placeholder text for the input
|
|
36
87
|
*/
|
|
@@ -75,23 +126,24 @@ export declare class UiDatePickerInput extends LitElement {
|
|
|
75
126
|
* Custom date format function
|
|
76
127
|
*/
|
|
77
128
|
accessor dateFormat: ((date: Date) => string) | undefined;
|
|
78
|
-
private accessor
|
|
79
|
-
private accessor
|
|
80
|
-
private accessor
|
|
129
|
+
private accessor isOpen;
|
|
130
|
+
private accessor inputValue;
|
|
131
|
+
private accessor textField;
|
|
132
|
+
constructor();
|
|
81
133
|
connectedCallback(): void;
|
|
82
134
|
disconnectedCallback(): void;
|
|
83
135
|
willUpdate(changedProperties: Map<string | number | symbol, unknown>): void;
|
|
84
136
|
updated(changedProperties: Map<string | number | symbol, unknown>): void;
|
|
85
|
-
private
|
|
86
|
-
private
|
|
87
|
-
private
|
|
88
|
-
private
|
|
89
|
-
private
|
|
90
|
-
private
|
|
91
|
-
private
|
|
92
|
-
private
|
|
93
|
-
private
|
|
94
|
-
private
|
|
137
|
+
private updateInputValue;
|
|
138
|
+
private handleDocumentClick;
|
|
139
|
+
private handleInputClick;
|
|
140
|
+
private handleInputChange;
|
|
141
|
+
private handleCalendarDateSelect;
|
|
142
|
+
private handleCalendarDateCancel;
|
|
143
|
+
private handleKeyDown;
|
|
144
|
+
private dispatchChangeEvent;
|
|
145
|
+
private renderCalendarIcon;
|
|
146
|
+
private renderDropdown;
|
|
95
147
|
render(): TemplateResult;
|
|
96
148
|
}
|
|
97
149
|
declare global {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui-date-picker-input.d.ts","sourceRoot":"","sources":["../../../../src/md/date-picker/ui-date-picker-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAA;AAKtD,OAAO,mCAAmC,CAAA;AAC1C,OAAO,+CAA+C,CAAA;AACtD,OAAO,2BAA2B,CAAA;AAElC
|
|
1
|
+
{"version":3,"file":"ui-date-picker-input.d.ts","sourceRoot":"","sources":["../../../../src/md/date-picker/ui-date-picker-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAA;AAKtD,OAAO,mCAAmC,CAAA;AAC1C,OAAO,+CAA+C,CAAA;AACtD,OAAO,2BAA2B,CAAA;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AACH,qBACa,iBAAkB,SAAQ,UAAU;IAC/C,OAAgB,MAAM,0BAAc;IACpC,OAAgB,iBAAiB,EAAE,cAAc,CAGhD;IAED;;OAEG;IACyB,QAAQ,CAAC,KAAK,SAAK;IAE/C;;OAEG;IACyB,QAAQ,CAAC,IAAI,SAAK;IAE9C;;OAEG;IACyB,QAAQ,CAAC,WAAW,SAAe;IAE/D;;OAEG;IACyB,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAO;IAE9D;;OAEG;IAC0B,QAAQ,CAAC,QAAQ,UAAQ;IAEtD;;OAEG;IAC0B,QAAQ,CAAC,QAAQ,UAAQ;IAEtD;;OAEG;IACyB,QAAQ,CAAC,YAAY,SAAK;IAEtD;;OAEG;IAC0B,QAAQ,CAAC,KAAK,UAAQ;IAEnD;;OAEG;IACyB,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,CAAY;IAE1E;;OAEG;IACyB,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,SAAS,CAAY;IAE1E;;OAEG;IACwB,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,GAAG,SAAS,CAAY;IAEjF;;OAEG;IACyB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAY;IAE3E;;OAEG;IACyB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,GAAG,SAAS,CAAY;IAExF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAE/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAK;IAER,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;;IAUhE,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAK5B,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAM3E,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAUjF,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,wBAAwB;IAMhC,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,cAAc;IAuBb,MAAM,IAAI,cAAc;CAwBlC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,iBAAiB,CAAA;KAC1C;IAED,UAAU,mBAAmB;QAC3B,MAAM,EAAE,WAAW,CAAC;YAClB,KAAK,EAAE,IAAI,GAAG,IAAI,CAAA;YAClB,cAAc,EAAE,MAAM,CAAA;SACvB,CAAC,CAAA;KACH;CACF"}
|