@api-client/ui 0.5.5 → 0.5.6
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/build/src/elements/highlight/MarkdownStyles.d.ts.map +1 -1
- package/build/src/elements/highlight/MarkdownStyles.js +0 -13
- package/build/src/elements/highlight/MarkdownStyles.js.map +1 -1
- package/build/src/elements/http/BodyEditor.d.ts +0 -13
- package/build/src/elements/http/BodyEditor.d.ts.map +1 -1
- package/build/src/elements/http/BodyEditor.js +0 -13
- package/build/src/elements/http/BodyEditor.js.map +1 -1
- package/build/src/elements/http/BodyTextEditor.d.ts +0 -13
- package/build/src/elements/http/BodyTextEditor.d.ts.map +1 -1
- package/build/src/elements/http/BodyTextEditor.js +0 -13
- package/build/src/elements/http/BodyTextEditor.js.map +1 -1
- package/build/src/elements/http/BodyUrlEncodedEditor.d.ts +0 -13
- package/build/src/elements/http/BodyUrlEncodedEditor.d.ts.map +1 -1
- package/build/src/elements/http/BodyUrlEncodedEditor.js +0 -13
- package/build/src/elements/http/BodyUrlEncodedEditor.js.map +1 -1
- package/build/src/elements/http/UrlInput.d.ts +0 -13
- package/build/src/elements/http/UrlInput.d.ts.map +1 -1
- package/build/src/elements/http/UrlInput.js +0 -13
- package/build/src/elements/http/UrlInput.js.map +1 -1
- package/build/src/index.d.ts +2 -0
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +2 -0
- package/build/src/index.js.map +1 -1
- package/build/src/md/button/internals/button.styles.js +1 -1
- package/build/src/md/button/internals/button.styles.js.map +1 -1
- package/build/src/md/date/internals/DateTime.d.ts +0 -13
- package/build/src/md/date/internals/DateTime.d.ts.map +1 -1
- package/build/src/md/date/internals/DateTime.js +0 -13
- package/build/src/md/date/internals/DateTime.js.map +1 -1
- package/build/src/md/date-picker/index.d.ts +13 -0
- package/build/src/md/date-picker/index.d.ts.map +1 -0
- package/build/src/md/date-picker/index.js +13 -0
- package/build/src/md/date-picker/index.js.map +1 -0
- package/build/src/md/date-picker/internals/DatePicker.styles.d.ts +4 -0
- package/build/src/md/date-picker/internals/DatePicker.styles.d.ts.map +1 -0
- package/build/src/md/date-picker/internals/DatePicker.styles.js +336 -0
- package/build/src/md/date-picker/internals/DatePicker.styles.js.map +1 -0
- package/build/src/md/date-picker/internals/DatePickerCalendar.d.ts +159 -0
- package/build/src/md/date-picker/internals/DatePickerCalendar.d.ts.map +1 -0
- package/build/src/md/date-picker/internals/DatePickerCalendar.js +770 -0
- package/build/src/md/date-picker/internals/DatePickerCalendar.js.map +1 -0
- package/build/src/md/date-picker/internals/DatePickerUtils.d.ts +93 -0
- package/build/src/md/date-picker/internals/DatePickerUtils.d.ts.map +1 -0
- package/build/src/md/date-picker/internals/DatePickerUtils.js +221 -0
- package/build/src/md/date-picker/internals/DatePickerUtils.js.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-input.d.ts +108 -0
- package/build/src/md/date-picker/ui-date-picker-input.d.ts.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-input.js +397 -0
- package/build/src/md/date-picker/ui-date-picker-input.js.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-modal-input.d.ts +119 -0
- package/build/src/md/date-picker/ui-date-picker-modal-input.d.ts.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-modal-input.js +473 -0
- package/build/src/md/date-picker/ui-date-picker-modal-input.js.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-modal.d.ts +108 -0
- package/build/src/md/date-picker/ui-date-picker-modal.d.ts.map +1 -0
- package/build/src/md/date-picker/ui-date-picker-modal.js +344 -0
- package/build/src/md/date-picker/ui-date-picker-modal.js.map +1 -0
- package/build/src/md/dialog/internals/Dialog.styles.d.ts.map +1 -1
- package/build/src/md/dialog/internals/Dialog.styles.js +1 -0
- package/build/src/md/dialog/internals/Dialog.styles.js.map +1 -1
- package/demo/elements/har/har2.json +1 -1
- package/demo/md/date-picker/date-picker.ts +301 -0
- package/demo/md/date-picker/index.html +171 -0
- package/demo/md/index.html +2 -0
- package/package.json +1 -1
- package/src/elements/highlight/MarkdownStyles.ts +0 -13
- package/src/elements/http/BodyEditor.ts +0 -13
- package/src/elements/http/BodyTextEditor.ts +0 -13
- package/src/elements/http/BodyUrlEncodedEditor.ts +0 -13
- package/src/elements/http/UrlInput.ts +0 -13
- package/src/index.ts +17 -0
- package/src/md/button/internals/button.styles.ts +1 -1
- package/src/md/date/internals/DateTime.ts +0 -14
- package/src/md/date-picker/README.md +184 -0
- package/src/md/date-picker/index.ts +17 -0
- package/src/md/date-picker/internals/DatePicker.styles.ts +338 -0
- package/src/md/date-picker/internals/DatePickerCalendar.ts +697 -0
- package/src/md/date-picker/internals/DatePickerUtils.ts +288 -0
- package/src/md/date-picker/ui-date-picker-input.ts +272 -0
- package/src/md/date-picker/ui-date-picker-modal-input.ts +371 -0
- package/src/md/date-picker/ui-date-picker-modal.ts +263 -0
- package/src/md/dialog/internals/Dialog.styles.ts +1 -0
|
@@ -0,0 +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"]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export interface DateRange {
|
|
2
|
+
start: Date | null;
|
|
3
|
+
end: Date | null;
|
|
4
|
+
}
|
|
5
|
+
export interface CalendarDay {
|
|
6
|
+
date: Date;
|
|
7
|
+
isCurrentMonth: boolean;
|
|
8
|
+
isToday: boolean;
|
|
9
|
+
isSelected: boolean;
|
|
10
|
+
isInRange: boolean;
|
|
11
|
+
isRangeStart: boolean;
|
|
12
|
+
isRangeEnd: boolean;
|
|
13
|
+
isDisabled: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface CalendarMonth {
|
|
16
|
+
year: number;
|
|
17
|
+
month: number;
|
|
18
|
+
days: CalendarDay[];
|
|
19
|
+
weekdays: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get the current date with time set to midnight
|
|
23
|
+
*/
|
|
24
|
+
export declare function today(): Date;
|
|
25
|
+
/**
|
|
26
|
+
* Create a new date with time set to midnight
|
|
27
|
+
*/
|
|
28
|
+
export declare function normalizeDate(date: Date): Date;
|
|
29
|
+
/**
|
|
30
|
+
* Check if two dates are the same day
|
|
31
|
+
*/
|
|
32
|
+
export declare function isSameDay(date1: Date, date2: Date): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Check if a date is between two other dates (inclusive)
|
|
35
|
+
*/
|
|
36
|
+
export declare function isBetween(date: Date, start: Date, end: Date): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Add months to a date
|
|
39
|
+
*/
|
|
40
|
+
export declare function addMonths(date: Date, months: number): Date;
|
|
41
|
+
/**
|
|
42
|
+
* Add days to a date
|
|
43
|
+
*/
|
|
44
|
+
export declare function addDays(date: Date, days: number): Date;
|
|
45
|
+
/**
|
|
46
|
+
* Get the first day of the month
|
|
47
|
+
*/
|
|
48
|
+
export declare function getFirstDayOfMonth(year: number, month: number): Date;
|
|
49
|
+
/**
|
|
50
|
+
* Get the last day of the month
|
|
51
|
+
*/
|
|
52
|
+
export declare function getLastDayOfMonth(year: number, month: number): Date;
|
|
53
|
+
/**
|
|
54
|
+
* Get the number of days in a month
|
|
55
|
+
*/
|
|
56
|
+
export declare function getDaysInMonth(year: number, month: number): number;
|
|
57
|
+
/**
|
|
58
|
+
* Get weekday names for the current locale
|
|
59
|
+
*/
|
|
60
|
+
export declare function getWeekdayNames(locale?: string): string[];
|
|
61
|
+
/**
|
|
62
|
+
* Get month names for the current locale
|
|
63
|
+
*/
|
|
64
|
+
export declare function getMonthNames(locale?: string): string[];
|
|
65
|
+
/**
|
|
66
|
+
* Format a date according to locale
|
|
67
|
+
*/
|
|
68
|
+
export declare function formatDate(date: Date, locale?: string, options?: Intl.DateTimeFormatOptions): string;
|
|
69
|
+
/**
|
|
70
|
+
* Parse a date string in various formats
|
|
71
|
+
*/
|
|
72
|
+
export declare function parseDate(dateString: string): Date | null;
|
|
73
|
+
/**
|
|
74
|
+
* Generate calendar data for a specific month
|
|
75
|
+
*/
|
|
76
|
+
export declare function generateCalendarMonth(year: number, month: number, selectedDate?: Date | null, selectedRange?: DateRange | null, disabledDates?: Date[], locale?: string): CalendarMonth;
|
|
77
|
+
/**
|
|
78
|
+
* Get the ISO string for a date (YYYY-MM-DD format)
|
|
79
|
+
*/
|
|
80
|
+
export declare function toISODateString(date: Date): string;
|
|
81
|
+
/**
|
|
82
|
+
* Create a date from ISO string (YYYY-MM-DD format)
|
|
83
|
+
*/
|
|
84
|
+
export declare function fromISODateString(isoString: string): Date | null;
|
|
85
|
+
/**
|
|
86
|
+
* Validate if a date range is valid (start <= end)
|
|
87
|
+
*/
|
|
88
|
+
export declare function isValidRange(range: DateRange): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Get the number of days between two dates
|
|
91
|
+
*/
|
|
92
|
+
export declare function getDaysBetween(start: Date, end: Date): number;
|
|
93
|
+
//# sourceMappingURL=DatePickerUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePickerUtils.d.ts","sourceRoot":"","sources":["../../../../../src/md/date-picker/internals/DatePickerUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the current date with time set to midnight
|
|
3
|
+
*/
|
|
4
|
+
export function today() {
|
|
5
|
+
const now = new Date();
|
|
6
|
+
return new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Create a new date with time set to midnight
|
|
10
|
+
*/
|
|
11
|
+
export function normalizeDate(date) {
|
|
12
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Check if two dates are the same day
|
|
16
|
+
*/
|
|
17
|
+
export function isSameDay(date1, date2) {
|
|
18
|
+
return (date1.getFullYear() === date2.getFullYear() &&
|
|
19
|
+
date1.getMonth() === date2.getMonth() &&
|
|
20
|
+
date1.getDate() === date2.getDate());
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check if a date is between two other dates (inclusive)
|
|
24
|
+
*/
|
|
25
|
+
export function isBetween(date, start, end) {
|
|
26
|
+
const normalizedDate = normalizeDate(date);
|
|
27
|
+
const normalizedStart = normalizeDate(start);
|
|
28
|
+
const normalizedEnd = normalizeDate(end);
|
|
29
|
+
return normalizedDate >= normalizedStart && normalizedDate <= normalizedEnd;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Add months to a date
|
|
33
|
+
*/
|
|
34
|
+
export function addMonths(date, months) {
|
|
35
|
+
const result = new Date(date);
|
|
36
|
+
result.setMonth(result.getMonth() + months);
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Add days to a date
|
|
41
|
+
*/
|
|
42
|
+
export function addDays(date, days) {
|
|
43
|
+
const result = new Date(date);
|
|
44
|
+
result.setDate(result.getDate() + days);
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get the first day of the month
|
|
49
|
+
*/
|
|
50
|
+
export function getFirstDayOfMonth(year, month) {
|
|
51
|
+
return new Date(year, month, 1);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get the last day of the month
|
|
55
|
+
*/
|
|
56
|
+
export function getLastDayOfMonth(year, month) {
|
|
57
|
+
return new Date(year, month + 1, 0);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the number of days in a month
|
|
61
|
+
*/
|
|
62
|
+
export function getDaysInMonth(year, month) {
|
|
63
|
+
return new Date(year, month + 1, 0).getDate();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get weekday names for the current locale
|
|
67
|
+
*/
|
|
68
|
+
export function getWeekdayNames(locale) {
|
|
69
|
+
const formatter = new Intl.DateTimeFormat(locale, { weekday: 'short' });
|
|
70
|
+
const days = [];
|
|
71
|
+
// Start from Sunday and get all 7 days
|
|
72
|
+
const date = new Date(2024, 0, 7); // January 7, 2024 is a Sunday
|
|
73
|
+
for (let i = 0; i < 7; i++) {
|
|
74
|
+
days.push(formatter.format(new Date(date.getTime() + i * 24 * 60 * 60 * 1000)));
|
|
75
|
+
}
|
|
76
|
+
return days;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get month names for the current locale
|
|
80
|
+
*/
|
|
81
|
+
export function getMonthNames(locale) {
|
|
82
|
+
const formatter = new Intl.DateTimeFormat(locale, { month: 'short' });
|
|
83
|
+
const months = [];
|
|
84
|
+
for (let i = 0; i < 12; i++) {
|
|
85
|
+
months.push(formatter.format(new Date(2024, i, 1)));
|
|
86
|
+
}
|
|
87
|
+
return months;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Format a date according to locale
|
|
91
|
+
*/
|
|
92
|
+
export function formatDate(date, locale, options) {
|
|
93
|
+
const defaultOptions = {
|
|
94
|
+
year: 'numeric',
|
|
95
|
+
month: 'short',
|
|
96
|
+
day: 'numeric',
|
|
97
|
+
};
|
|
98
|
+
return new Intl.DateTimeFormat(locale, { ...defaultOptions, ...options }).format(date);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Parse a date string in various formats
|
|
102
|
+
*/
|
|
103
|
+
export function parseDate(dateString) {
|
|
104
|
+
if (!dateString)
|
|
105
|
+
return null;
|
|
106
|
+
// Try ISO format first
|
|
107
|
+
const isoDate = new Date(dateString);
|
|
108
|
+
if (!isNaN(isoDate.getTime())) {
|
|
109
|
+
return normalizeDate(isoDate);
|
|
110
|
+
}
|
|
111
|
+
// Try other common formats
|
|
112
|
+
const formats = [
|
|
113
|
+
/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/, // MM/DD/YYYY or M/D/YYYY
|
|
114
|
+
/^(\d{1,2})-(\d{1,2})-(\d{4})$/, // MM-DD-YYYY or M-D-YYYY
|
|
115
|
+
/^(\d{4})-(\d{1,2})-(\d{1,2})$/, // YYYY-MM-DD or YYYY-M-D
|
|
116
|
+
];
|
|
117
|
+
for (const format of formats) {
|
|
118
|
+
const match = dateString.match(format);
|
|
119
|
+
if (match) {
|
|
120
|
+
const [, part1, part2, part3] = match;
|
|
121
|
+
let year, month, day;
|
|
122
|
+
if (format === formats[2]) {
|
|
123
|
+
// YYYY-MM-DD
|
|
124
|
+
year = parseInt(part1, 10);
|
|
125
|
+
month = parseInt(part2, 10) - 1; // Convert to 0-indexed
|
|
126
|
+
day = parseInt(part3, 10);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
// MM/DD/YYYY or MM-DD-YYYY
|
|
130
|
+
year = parseInt(part3, 10);
|
|
131
|
+
month = parseInt(part1, 10) - 1; // Convert to 0-indexed
|
|
132
|
+
day = parseInt(part2, 10);
|
|
133
|
+
}
|
|
134
|
+
const date = new Date(year, month, day);
|
|
135
|
+
if (!isNaN(date.getTime())) {
|
|
136
|
+
return date;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Generate calendar data for a specific month
|
|
144
|
+
*/
|
|
145
|
+
export function generateCalendarMonth(year, month, selectedDate, selectedRange, disabledDates, locale) {
|
|
146
|
+
const firstDay = getFirstDayOfMonth(year, month);
|
|
147
|
+
const todayDate = today();
|
|
148
|
+
// Get the first day of the week (0 = Sunday, 1 = Monday)
|
|
149
|
+
const firstDayOfWeek = firstDay.getDay();
|
|
150
|
+
// Calculate start date (might be from previous month)
|
|
151
|
+
const startDate = addDays(firstDay, -firstDayOfWeek);
|
|
152
|
+
// Calculate end date (might be from next month)
|
|
153
|
+
const daysToShow = 42; // 6 weeks * 7 days
|
|
154
|
+
const endDate = addDays(startDate, daysToShow - 1);
|
|
155
|
+
const days = [];
|
|
156
|
+
const currentDate = new Date(startDate);
|
|
157
|
+
while (currentDate <= endDate) {
|
|
158
|
+
const isCurrentMonth = currentDate.getMonth() === month;
|
|
159
|
+
const isToday = isSameDay(currentDate, todayDate);
|
|
160
|
+
const isSelected = selectedDate ? isSameDay(currentDate, selectedDate) : false;
|
|
161
|
+
let isInRange = false;
|
|
162
|
+
let isRangeStart = false;
|
|
163
|
+
let isRangeEnd = false;
|
|
164
|
+
if (selectedRange?.start && selectedRange?.end) {
|
|
165
|
+
isRangeStart = isSameDay(currentDate, selectedRange.start);
|
|
166
|
+
isRangeEnd = isSameDay(currentDate, selectedRange.end);
|
|
167
|
+
isInRange = isBetween(currentDate, selectedRange.start, selectedRange.end);
|
|
168
|
+
}
|
|
169
|
+
const isDisabled = disabledDates?.some((disabledDate) => isSameDay(currentDate, disabledDate)) || false;
|
|
170
|
+
days.push({
|
|
171
|
+
date: new Date(currentDate),
|
|
172
|
+
isCurrentMonth,
|
|
173
|
+
isToday,
|
|
174
|
+
isSelected,
|
|
175
|
+
isInRange,
|
|
176
|
+
isRangeStart,
|
|
177
|
+
isRangeEnd,
|
|
178
|
+
isDisabled,
|
|
179
|
+
});
|
|
180
|
+
currentDate.setDate(currentDate.getDate() + 1);
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
year,
|
|
184
|
+
month,
|
|
185
|
+
days,
|
|
186
|
+
weekdays: getWeekdayNames(locale),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get the ISO string for a date (YYYY-MM-DD format)
|
|
191
|
+
*/
|
|
192
|
+
export function toISODateString(date) {
|
|
193
|
+
return date.toISOString().split('T')[0];
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Create a date from ISO string (YYYY-MM-DD format)
|
|
197
|
+
*/
|
|
198
|
+
export function fromISODateString(isoString) {
|
|
199
|
+
const match = isoString.match(/^(\d{4})-(\d{2})-(\d{2})$/);
|
|
200
|
+
if (!match)
|
|
201
|
+
return null;
|
|
202
|
+
const [, year, month, day] = match;
|
|
203
|
+
return new Date(parseInt(year, 10), parseInt(month, 10) - 1, parseInt(day, 10));
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Validate if a date range is valid (start <= end)
|
|
207
|
+
*/
|
|
208
|
+
export function isValidRange(range) {
|
|
209
|
+
if (!range.start || !range.end)
|
|
210
|
+
return true;
|
|
211
|
+
return range.start <= range.end;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get the number of days between two dates
|
|
215
|
+
*/
|
|
216
|
+
export function getDaysBetween(start, end) {
|
|
217
|
+
const startTime = normalizeDate(start).getTime();
|
|
218
|
+
const endTime = normalizeDate(end).getTime();
|
|
219
|
+
return Math.abs(Math.floor((endTime - startTime) / (24 * 60 * 60 * 1000)));
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=DatePickerUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePickerUtils.js","sourceRoot":"","sources":["../../../../../src/md/date-picker/internals/DatePickerUtils.ts"],"names":[],"mappings":"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","sourcesContent":["export interface DateRange {\n start: Date | null\n end: Date | null\n}\n\nexport interface CalendarDay {\n date: Date\n isCurrentMonth: boolean\n isToday: boolean\n isSelected: boolean\n isInRange: boolean\n isRangeStart: boolean\n isRangeEnd: boolean\n isDisabled: boolean\n}\n\nexport interface CalendarMonth {\n year: number\n month: number // 0-indexed (0 = January)\n days: CalendarDay[]\n weekdays: string[]\n}\n\n/**\n * Get the current date with time set to midnight\n */\nexport function today(): Date {\n const now = new Date()\n return new Date(now.getFullYear(), now.getMonth(), now.getDate())\n}\n\n/**\n * Create a new date with time set to midnight\n */\nexport function normalizeDate(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate())\n}\n\n/**\n * Check if two dates are the same day\n */\nexport function isSameDay(date1: Date, date2: Date): boolean {\n return (\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getDate() === date2.getDate()\n )\n}\n\n/**\n * Check if a date is between two other dates (inclusive)\n */\nexport function isBetween(date: Date, start: Date, end: Date): boolean {\n const normalizedDate = normalizeDate(date)\n const normalizedStart = normalizeDate(start)\n const normalizedEnd = normalizeDate(end)\n return normalizedDate >= normalizedStart && normalizedDate <= normalizedEnd\n}\n\n/**\n * Add months to a date\n */\nexport function addMonths(date: Date, months: number): Date {\n const result = new Date(date)\n result.setMonth(result.getMonth() + months)\n return result\n}\n\n/**\n * Add days to a date\n */\nexport function addDays(date: Date, days: number): Date {\n const result = new Date(date)\n result.setDate(result.getDate() + days)\n return result\n}\n\n/**\n * Get the first day of the month\n */\nexport function getFirstDayOfMonth(year: number, month: number): Date {\n return new Date(year, month, 1)\n}\n\n/**\n * Get the last day of the month\n */\nexport function getLastDayOfMonth(year: number, month: number): Date {\n return new Date(year, month + 1, 0)\n}\n\n/**\n * Get the number of days in a month\n */\nexport function getDaysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate()\n}\n\n/**\n * Get weekday names for the current locale\n */\nexport function getWeekdayNames(locale?: string): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { weekday: 'short' })\n const days: string[] = []\n\n // Start from Sunday and get all 7 days\n const date = new Date(2024, 0, 7) // January 7, 2024 is a Sunday\n for (let i = 0; i < 7; i++) {\n days.push(formatter.format(new Date(date.getTime() + i * 24 * 60 * 60 * 1000)))\n }\n\n return days\n}\n\n/**\n * Get month names for the current locale\n */\nexport function getMonthNames(locale?: string): string[] {\n const formatter = new Intl.DateTimeFormat(locale, { month: 'short' })\n const months: string[] = []\n\n for (let i = 0; i < 12; i++) {\n months.push(formatter.format(new Date(2024, i, 1)))\n }\n\n return months\n}\n\n/**\n * Format a date according to locale\n */\nexport function formatDate(date: Date, locale?: string, options?: Intl.DateTimeFormatOptions): string {\n const defaultOptions: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n }\n\n return new Intl.DateTimeFormat(locale, { ...defaultOptions, ...options }).format(date)\n}\n\n/**\n * Parse a date string in various formats\n */\nexport function parseDate(dateString: string): Date | null {\n if (!dateString) return null\n\n // Try ISO format first\n const isoDate = new Date(dateString)\n if (!isNaN(isoDate.getTime())) {\n return normalizeDate(isoDate)\n }\n\n // Try other common formats\n const formats = [\n /^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/, // MM/DD/YYYY or M/D/YYYY\n /^(\\d{1,2})-(\\d{1,2})-(\\d{4})$/, // MM-DD-YYYY or M-D-YYYY\n /^(\\d{4})-(\\d{1,2})-(\\d{1,2})$/, // YYYY-MM-DD or YYYY-M-D\n ]\n\n for (const format of formats) {\n const match = dateString.match(format)\n if (match) {\n const [, part1, part2, part3] = match\n let year: number, month: number, day: number\n\n if (format === formats[2]) {\n // YYYY-MM-DD\n year = parseInt(part1, 10)\n month = parseInt(part2, 10) - 1 // Convert to 0-indexed\n day = parseInt(part3, 10)\n } else {\n // MM/DD/YYYY or MM-DD-YYYY\n year = parseInt(part3, 10)\n month = parseInt(part1, 10) - 1 // Convert to 0-indexed\n day = parseInt(part2, 10)\n }\n\n const date = new Date(year, month, day)\n if (!isNaN(date.getTime())) {\n return date\n }\n }\n }\n\n return null\n}\n\n/**\n * Generate calendar data for a specific month\n */\nexport function generateCalendarMonth(\n year: number,\n month: number,\n selectedDate?: Date | null,\n selectedRange?: DateRange | null,\n disabledDates?: Date[],\n locale?: string\n): CalendarMonth {\n const firstDay = getFirstDayOfMonth(year, month)\n const todayDate = today()\n\n // Get the first day of the week (0 = Sunday, 1 = Monday)\n const firstDayOfWeek = firstDay.getDay()\n\n // Calculate start date (might be from previous month)\n const startDate = addDays(firstDay, -firstDayOfWeek)\n\n // Calculate end date (might be from next month)\n const daysToShow = 42 // 6 weeks * 7 days\n const endDate = addDays(startDate, daysToShow - 1)\n\n const days: CalendarDay[] = []\n const currentDate = new Date(startDate)\n\n while (currentDate <= endDate) {\n const isCurrentMonth = currentDate.getMonth() === month\n const isToday = isSameDay(currentDate, todayDate)\n const isSelected = selectedDate ? isSameDay(currentDate, selectedDate) : false\n\n let isInRange = false\n let isRangeStart = false\n let isRangeEnd = false\n\n if (selectedRange?.start && selectedRange?.end) {\n isRangeStart = isSameDay(currentDate, selectedRange.start)\n isRangeEnd = isSameDay(currentDate, selectedRange.end)\n isInRange = isBetween(currentDate, selectedRange.start, selectedRange.end)\n }\n\n const isDisabled = disabledDates?.some((disabledDate) => isSameDay(currentDate, disabledDate)) || false\n\n days.push({\n date: new Date(currentDate),\n isCurrentMonth,\n isToday,\n isSelected,\n isInRange,\n isRangeStart,\n isRangeEnd,\n isDisabled,\n })\n\n currentDate.setDate(currentDate.getDate() + 1)\n }\n\n return {\n year,\n month,\n days,\n weekdays: getWeekdayNames(locale),\n }\n}\n\n/**\n * Get the ISO string for a date (YYYY-MM-DD format)\n */\nexport function toISODateString(date: Date): string {\n return date.toISOString().split('T')[0]\n}\n\n/**\n * Create a date from ISO string (YYYY-MM-DD format)\n */\nexport function fromISODateString(isoString: string): Date | null {\n const match = isoString.match(/^(\\d{4})-(\\d{2})-(\\d{2})$/)\n if (!match) return null\n\n const [, year, month, day] = match\n return new Date(parseInt(year, 10), parseInt(month, 10) - 1, parseInt(day, 10))\n}\n\n/**\n * Validate if a date range is valid (start <= end)\n */\nexport function isValidRange(range: DateRange): boolean {\n if (!range.start || !range.end) return true\n return range.start <= range.end\n}\n\n/**\n * Get the number of days between two dates\n */\nexport function getDaysBetween(start: Date, end: Date): number {\n const startTime = normalizeDate(start).getTime()\n const endTime = normalizeDate(end).getTime()\n return Math.abs(Math.floor((endTime - startTime) / (24 * 60 * 60 * 1000)))\n}\n"]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { LitElement, TemplateResult } from 'lit';
|
|
2
|
+
import './internals/DatePickerCalendar.js';
|
|
3
|
+
import '../../md/text-field/ui-outlined-text-field.js';
|
|
4
|
+
import '../../md/icons/ui-icon.js';
|
|
5
|
+
/**
|
|
6
|
+
* A docked date picker that opens from a text field input.
|
|
7
|
+
* Ideal for forms and date selection in medium to large layouts.
|
|
8
|
+
*
|
|
9
|
+
* ## Usage
|
|
10
|
+
*
|
|
11
|
+
* ```html
|
|
12
|
+
* <ui-date-picker-input
|
|
13
|
+
* label="Select date"
|
|
14
|
+
* placeholder="MM/DD/YYYY"
|
|
15
|
+
* .value=${new Date()}
|
|
16
|
+
* ></ui-date-picker-input>
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* ### Custom date format
|
|
20
|
+
* ```html
|
|
21
|
+
* <ui-date-picker-input
|
|
22
|
+
* label="Birth date"
|
|
23
|
+
* .dateFormat=${date => date.toLocaleDateString('en-GB')}
|
|
24
|
+
* ></ui-date-picker-input>
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare class UiDatePickerInput extends LitElement {
|
|
28
|
+
static styles: import("lit").CSSResult;
|
|
29
|
+
static shadowRootOptions: ShadowRootInit;
|
|
30
|
+
/**
|
|
31
|
+
* The label for the input field
|
|
32
|
+
*/
|
|
33
|
+
accessor label: string;
|
|
34
|
+
/**
|
|
35
|
+
* Placeholder text for the input
|
|
36
|
+
*/
|
|
37
|
+
accessor placeholder: string;
|
|
38
|
+
/**
|
|
39
|
+
* The currently selected date
|
|
40
|
+
*/
|
|
41
|
+
accessor value: Date | null;
|
|
42
|
+
/**
|
|
43
|
+
* Whether the date picker is disabled
|
|
44
|
+
*/
|
|
45
|
+
accessor disabled: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Whether the input is required
|
|
48
|
+
*/
|
|
49
|
+
accessor required: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Error message to display
|
|
52
|
+
*/
|
|
53
|
+
accessor errorMessage: string;
|
|
54
|
+
/**
|
|
55
|
+
* Whether the input has an error state
|
|
56
|
+
*/
|
|
57
|
+
accessor error: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Minimum selectable date
|
|
60
|
+
*/
|
|
61
|
+
accessor minDate: Date | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Maximum selectable date
|
|
64
|
+
*/
|
|
65
|
+
accessor maxDate: Date | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Array of disabled dates
|
|
68
|
+
*/
|
|
69
|
+
accessor disabledDates: Date[] | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Locale for date formatting
|
|
72
|
+
*/
|
|
73
|
+
accessor locale: string | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Custom date format function
|
|
76
|
+
*/
|
|
77
|
+
accessor dateFormat: ((date: Date) => string) | undefined;
|
|
78
|
+
private accessor _isOpen;
|
|
79
|
+
private accessor _inputValue;
|
|
80
|
+
private accessor _textField;
|
|
81
|
+
connectedCallback(): void;
|
|
82
|
+
disconnectedCallback(): void;
|
|
83
|
+
willUpdate(changedProperties: Map<string | number | symbol, unknown>): void;
|
|
84
|
+
updated(changedProperties: Map<string | number | symbol, unknown>): void;
|
|
85
|
+
private _updateInputValue;
|
|
86
|
+
private _handleDocumentClick;
|
|
87
|
+
private _handleInputClick;
|
|
88
|
+
private _handleInputChange;
|
|
89
|
+
private _handleCalendarDateSelect;
|
|
90
|
+
private _handleCalendarDateCancel;
|
|
91
|
+
private _handleKeyDown;
|
|
92
|
+
private _dispatchChangeEvent;
|
|
93
|
+
private _renderCalendarIcon;
|
|
94
|
+
private _renderDropdown;
|
|
95
|
+
render(): TemplateResult;
|
|
96
|
+
}
|
|
97
|
+
declare global {
|
|
98
|
+
interface HTMLElementTagNameMap {
|
|
99
|
+
'ui-date-picker-input': UiDatePickerInput;
|
|
100
|
+
}
|
|
101
|
+
interface HTMLElementEventMap {
|
|
102
|
+
change: CustomEvent<{
|
|
103
|
+
value: Date | null;
|
|
104
|
+
formattedValue: string;
|
|
105
|
+
}>;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=ui-date-picker-input.d.ts.map
|
|
@@ -0,0 +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;;;;;;;;;;;;;;;;;;;;;GAqBG;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,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,OAAO,CAAQ;IAEhC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAK;IAET,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IAEjE,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,iBAAiB;IAQzB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,eAAe;IAuBd,MAAM,IAAI,cAAc;CAuBlC;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"}
|