@muxima-ui/core 1.4.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/fesm2022/muxima-ui-core-alert.mjs +5 -3
- package/fesm2022/muxima-ui-core-alert.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-breadcrumb.mjs +5 -3
- package/fesm2022/muxima-ui-core-breadcrumb.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-carousel.mjs +19 -17
- package/fesm2022/muxima-ui-core-carousel.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-chips.mjs +19 -14
- package/fesm2022/muxima-ui-core-chips.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-clipboard.mjs +10 -6
- package/fesm2022/muxima-ui-core-clipboard.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-color-picker.mjs +53 -50
- package/fesm2022/muxima-ui-core-color-picker.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-combobox.mjs +15 -12
- package/fesm2022/muxima-ui-core-combobox.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-command.mjs +21 -16
- package/fesm2022/muxima-ui-core-command.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-data-grid.mjs +50 -52
- package/fesm2022/muxima-ui-core-data-grid.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-date-picker.mjs +97 -69
- package/fesm2022/muxima-ui-core-date-picker.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-editor.mjs +25 -19
- package/fesm2022/muxima-ui-core-editor.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-file-upload.mjs +30 -25
- package/fesm2022/muxima-ui-core-file-upload.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-i18n.mjs +550 -0
- package/fesm2022/muxima-ui-core-i18n.mjs.map +1 -0
- package/fesm2022/muxima-ui-core-image-cropper.mjs +27 -24
- package/fesm2022/muxima-ui-core-image-cropper.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-kanban.mjs +22 -19
- package/fesm2022/muxima-ui-core-kanban.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-notification-center.mjs +41 -36
- package/fesm2022/muxima-ui-core-notification-center.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-pagination.mjs +29 -26
- package/fesm2022/muxima-ui-core-pagination.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-progress.mjs +5 -3
- package/fesm2022/muxima-ui-core-progress.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-rating.mjs +12 -8
- package/fesm2022/muxima-ui-core-rating.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-select.mjs +14 -11
- package/fesm2022/muxima-ui-core-select.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-sidebar.mjs +10 -7
- package/fesm2022/muxima-ui-core-sidebar.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-slider.mjs +8 -6
- package/fesm2022/muxima-ui-core-slider.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-stepper.mjs +5 -3
- package/fesm2022/muxima-ui-core-stepper.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-table.mjs +4 -4
- package/fesm2022/muxima-ui-core-table.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-time-picker.mjs +7 -5
- package/fesm2022/muxima-ui-core-time-picker.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-toast.mjs +8 -5
- package/fesm2022/muxima-ui-core-toast.mjs.map +1 -1
- package/fesm2022/muxima-ui-core-tour.mjs +10 -11
- package/fesm2022/muxima-ui-core-tour.mjs.map +1 -1
- package/fesm2022/muxima-ui-core.mjs +1 -1
- package/fesm2022/muxima-ui-core.mjs.map +1 -1
- package/package.json +5 -1
- package/types/muxima-ui-core-alert.d.ts +3 -1
- package/types/muxima-ui-core-breadcrumb.d.ts +6 -4
- package/types/muxima-ui-core-carousel.d.ts +4 -2
- package/types/muxima-ui-core-chips.d.ts +23 -3
- package/types/muxima-ui-core-clipboard.d.ts +6 -3
- package/types/muxima-ui-core-color-picker.d.ts +40 -7
- package/types/muxima-ui-core-combobox.d.ts +6 -3
- package/types/muxima-ui-core-command.d.ts +7 -3
- package/types/muxima-ui-core-data-grid.d.ts +31 -11
- package/types/muxima-ui-core-date-picker.d.ts +59 -14
- package/types/muxima-ui-core-editor.d.ts +13 -2
- package/types/muxima-ui-core-file-upload.d.ts +22 -6
- package/types/muxima-ui-core-i18n.d.ts +322 -0
- package/types/muxima-ui-core-image-cropper.d.ts +19 -6
- package/types/muxima-ui-core-kanban.d.ts +16 -3
- package/types/muxima-ui-core-notification-center.d.ts +30 -8
- package/types/muxima-ui-core-pagination.d.ts +16 -1
- package/types/muxima-ui-core-progress.d.ts +10 -8
- package/types/muxima-ui-core-rating.d.ts +6 -2
- package/types/muxima-ui-core-select.d.ts +6 -3
- package/types/muxima-ui-core-sidebar.d.ts +6 -3
- package/types/muxima-ui-core-slider.d.ts +4 -2
- package/types/muxima-ui-core-stepper.d.ts +10 -8
- package/types/muxima-ui-core-table.d.ts +3 -3
- package/types/muxima-ui-core-time-picker.d.ts +3 -1
- package/types/muxima-ui-core-toast.d.ts +3 -0
- package/types/muxima-ui-core-tour.d.ts +6 -1
- package/types/muxima-ui-core.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muxima-ui-core-date-picker.mjs","sources":["../../../projects/core/date-picker/calendar.ts","../../../projects/core/date-picker/date-picker.ts","../../../projects/core/date-picker/date-range-picker.ts","../../../projects/core/date-picker/muxima-ui-core-date-picker.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n afterNextRender,\n computed,\n inject,\n Injector,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { mxUniqueId } from '@muxima-ui/core/form-field';\n\n/** Data sem horas, para comparar dias. */\nexport function mxStartOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\nexport function mxSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n return !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n/** Intervalo de datas. Enquanto se escolhe, `end` fica null. */\nexport interface MxDateRange {\n start: Date | null;\n end: Date | null;\n}\n\nfunction addDays(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate() + n);\n}\nfunction addMonths(d: Date, n: number): Date {\n const target = new Date(d.getFullYear(), d.getMonth() + n, 1);\n const last = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate();\n return new Date(target.getFullYear(), target.getMonth(), Math.min(d.getDate(), last));\n}\n\n/**\n * Calendário mensal acessível (grelha WAI-ARIA). Pode ser usado sozinho ou dentro do MxDatePicker.\n *\n * ```html\n * <mx-calendar [(value)]=\"data\" [min]=\"hoje\" />\n * <mx-calendar mode=\"range\" [(range)]=\"periodo\" />\n * ```\n *\n * Em `mode=\"range\"` o primeiro clique marca o início e o segundo o fim (se for anterior,\n * os dois trocam). Entre os dois cliques o intervalo é pré-visualizado com o rato ou o teclado.\n *\n * Teclas: setas (dia e semana), Home/End (início e fim da semana), Page Up/Down (mês),\n * Shift + Page Up/Down (ano), Enter ou Espaço para escolher.\n */\n@Component({\n selector: 'mx-calendar',\n exportAs: 'mxCalendar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'mx-calendar' },\n template: `\n <div class=\"mx-calendar-header\">\n <button type=\"button\" class=\"mx-calendar-nav\" (click)=\"moveMonth(-1)\" [attr.aria-label]=\"'Mês anterior, ' + monthLabel(-1)\">\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M10 4L6 8l4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /></svg>\n </button>\n <p class=\"mx-calendar-title\" [id]=\"titleId\" aria-live=\"polite\">{{ monthLabel(0) }}</p>\n <button type=\"button\" class=\"mx-calendar-nav\" (click)=\"moveMonth(1)\" [attr.aria-label]=\"'Mês seguinte, ' + monthLabel(1)\">\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M6 4l4 4-4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /></svg>\n </button>\n </div>\n <table class=\"mx-calendar-grid\" role=\"grid\" [attr.aria-labelledby]=\"titleId\" (keydown)=\"onKeydown($event)\">\n <thead>\n <tr>\n @for (d of weekdays(); track d.long) {\n <th scope=\"col\" [attr.abbr]=\"d.long\"><span aria-hidden=\"true\">{{ d.short }}</span><span class=\"mx-visually-hidden\">{{ d.long }}</span></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (week of weeks(); track $index) {\n <tr>\n @for (day of week; track day.date.getTime()) {\n <td\n role=\"gridcell\"\n [attr.aria-selected]=\"day.selected\"\n [attr.data-range-start]=\"day.rangeStart ? '' : null\"\n [attr.data-range-end]=\"day.rangeEnd ? '' : null\"\n [attr.data-in-range]=\"day.inRange ? '' : null\"\n >\n <button\n type=\"button\"\n class=\"mx-calendar-day\"\n [attr.data-outside]=\"day.outside ? '' : null\"\n [attr.data-today]=\"day.today ? '' : null\"\n [attr.aria-current]=\"day.today ? 'date' : null\"\n [attr.aria-label]=\"day.label\"\n [attr.data-date]=\"day.key\"\n [tabIndex]=\"day.focus ? 0 : -1\"\n [attr.aria-disabled]=\"day.disabled ? 'true' : null\"\n (click)=\"select(day.date)\"\n (mouseenter)=\"hover(day.date)\"\n >\n {{ day.date.getDate() }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (mode() === 'range') {\n <p class=\"mx-visually-hidden\" aria-live=\"polite\">{{ rangeHint() }}</p>\n }\n `,\n})\nexport class MxCalendar {\n readonly value = model<Date | null>(null);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n /** Dias que não se podem escolher (ex.: fins-de-semana). */\n readonly dateDisabled = input<(d: Date) => boolean>(() => false);\n readonly locale = input('pt-AO');\n /** Primeiro dia da semana: 1 = segunda-feira. */\n readonly firstDayOfWeek = input(1);\n readonly selected = output<Date>();\n /** `single` escolhe um dia; `range` escolhe um intervalo em [(range)]. */\n readonly mode = input<'single' | 'range'>('single');\n readonly range = model<MxDateRange | null>(null);\n /** Emite quando o intervalo fica completo (início e fim). */\n readonly rangeSelected = output<{ start: Date; end: Date }>();\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly injector = inject(Injector);\n protected readonly titleId = mxUniqueId('mx-calendar-title');\n /** Dia com foco na grelha. */\n readonly focusDate = signal(mxStartOfDay(new Date()));\n private initialised = false;\n /** Dia sob o rato ou o foco enquanto falta o fim do intervalo. */\n private readonly preview = signal<Date | null>(null);\n private readonly awaitingEnd = computed(() => this.mode() === 'range' && !!this.range()?.start && !this.range()?.end);\n\n protected readonly rangeHint = computed(() => {\n const r = this.range();\n if (!r?.start) return '';\n const f = new Intl.DateTimeFormat(this.locale(), { day: 'numeric', month: 'long', year: 'numeric' });\n return r.end ? `Intervalo de ${f.format(r.start)} a ${f.format(r.end)}.` : `Início ${f.format(r.start)}. Escolhe a data de fim.`;\n });\n\n /** Início e fim efectivos (com pré-visualização), ordenados. */\n private readonly bounds = computed<[Date, Date] | null>(() => {\n if (this.mode() !== 'range') return null;\n const r = this.range();\n if (!r?.start) return null;\n const end = r.end ?? (this.awaitingEnd() ? this.preview() : null) ?? r.start;\n return r.start <= end ? [r.start, end] : [end, r.start];\n });\n\n protected readonly weekdays = computed(() => {\n const short = new Intl.DateTimeFormat(this.locale(), { weekday: 'narrow' });\n const long = new Intl.DateTimeFormat(this.locale(), { weekday: 'long' });\n // 2024-01-01 foi segunda-feira\n return Array.from({ length: 7 }, (_, i) => {\n const d = new Date(2024, 0, 1 + ((this.firstDayOfWeek() - 1 + i + 7) % 7));\n return { short: short.format(d).toUpperCase(), long: long.format(d) };\n });\n });\n\n protected readonly weeks = computed(() => {\n const focus = this.focusDate();\n const first = new Date(focus.getFullYear(), focus.getMonth(), 1);\n const offset = (first.getDay() - this.firstDayOfWeek() + 7) % 7;\n const start = addDays(first, -offset);\n const today = mxStartOfDay(new Date());\n const fmt = new Intl.DateTimeFormat(this.locale(), { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' });\n const bounds = this.bounds();\n const isRange = this.mode() === 'range';\n const weeks = [];\n for (let w = 0; w < 6; w++) {\n const row = [];\n for (let i = 0; i < 7; i++) {\n const date = addDays(start, w * 7 + i);\n const rangeStart = !!bounds && mxSameDay(date, bounds[0]);\n const rangeEnd = !!bounds && mxSameDay(date, bounds[1]);\n const inRange = !!bounds && date > bounds[0] && date < bounds[1];\n const isStart = isRange && mxSameDay(date, this.range()?.start);\n const isEnd = isRange && mxSameDay(date, this.range()?.end);\n const label = fmt.format(date) + (isStart && isEnd ? ', início e fim do intervalo' : isStart ? ', início do intervalo' : isEnd ? ', fim do intervalo' : '');\n row.push({\n date,\n key: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,\n label,\n outside: date.getMonth() !== focus.getMonth(),\n today: mxSameDay(date, today),\n rangeStart,\n rangeEnd,\n inRange,\n selected: isRange ? rangeStart || rangeEnd || inRange : mxSameDay(date, this.value()),\n focus: mxSameDay(date, focus),\n disabled: this.isDisabled(date),\n });\n }\n weeks.push(row);\n }\n return weeks;\n });\n\n constructor() {\n afterNextRender(() => {\n if (!this.initialised) {\n const v = this.mode() === 'range' ? this.range()?.start : this.value();\n if (v) this.focusDate.set(mxStartOfDay(v));\n this.initialised = true;\n }\n });\n }\n\n /** Põe o foco no dia activo (seleccionado ou hoje). */\n focus(): void {\n const v = this.mode() === 'range' ? this.range()?.start : this.value();\n if (v) this.focusDate.set(mxStartOfDay(v));\n this.focusActiveDay();\n }\n\n protected monthLabel(delta: number): string {\n const d = addMonths(this.focusDate(), delta);\n const s = new Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' }).format(d);\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n\n protected moveMonth(delta: number): void {\n this.focusDate.set(addMonths(this.focusDate(), delta));\n }\n\n protected hover(date: Date): void {\n if (this.awaitingEnd()) this.preview.set(date);\n }\n\n protected select(date: Date): void {\n if (this.isDisabled(date)) return;\n if (this.mode() === 'range') {\n const r = this.range();\n if (r?.start && !r.end) {\n const [start, end] = date < r.start ? [date, r.start] : [r.start, date];\n this.range.set({ start, end });\n this.rangeSelected.emit({ start, end });\n } else {\n this.range.set({ start: date, end: null });\n }\n this.preview.set(null);\n this.focusDate.set(date);\n return;\n }\n this.value.set(date);\n this.focusDate.set(date);\n this.selected.emit(date);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const f = this.focusDate();\n const dow = (f.getDay() - this.firstDayOfWeek() + 7) % 7;\n const moves: Record<string, () => Date> = {\n ArrowLeft: () => addDays(f, -1),\n ArrowRight: () => addDays(f, 1),\n ArrowUp: () => addDays(f, -7),\n ArrowDown: () => addDays(f, 7),\n Home: () => addDays(f, -dow),\n End: () => addDays(f, 6 - dow),\n PageUp: () => addMonths(f, event.shiftKey ? -12 : -1),\n PageDown: () => addMonths(f, event.shiftKey ? 12 : 1),\n };\n if (event.key === 'Enter' || event.key === ' ') {\n // escolhe o dia activo, mesmo que o foco ainda não tenha chegado ao botão\n event.preventDefault();\n this.select(this.focusDate());\n return;\n }\n const move = moves[event.key];\n if (move) {\n event.preventDefault();\n this.focusDate.set(this.clamp(move()));\n this.hover(this.focusDate());\n this.focusActiveDay();\n }\n }\n\n private clamp(d: Date): Date {\n const min = this.min();\n const max = this.max();\n if (min && d < mxStartOfDay(min)) return mxStartOfDay(min);\n if (max && d > mxStartOfDay(max)) return mxStartOfDay(max);\n return d;\n }\n\n private isDisabled(d: Date): boolean {\n const min = this.min();\n const max = this.max();\n return (!!min && d < mxStartOfDay(min)) || (!!max && d > mxStartOfDay(max)) || this.dateDisabled()(d);\n }\n\n private focusActiveDay(): void {\n afterNextRender(\n () => {\n const f = this.focusDate();\n const key = `${f.getFullYear()}-${f.getMonth() + 1}-${f.getDate()}`;\n this.host.querySelector<HTMLButtonElement>(`[data-date=\"${key}\"]`)?.focus();\n },\n { injector: this.injector },\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { MX_FORM_FIELD_CONTROL, MxFormField, MxFormFieldControl, mxUniqueId } from '@muxima-ui/core/form-field';\nimport { MxCalendar, mxStartOfDay } from './calendar';\n\nconst POSITIONS: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n];\n\n/** Converte \"dd/mm/aaaa\" numa data. Aceita também \"-\" e \".\" como separadores. */\nexport function mxParseDate(text: string): Date | null {\n const m = text.trim().match(/^(\\d{1,2})[/.-](\\d{1,2})[/.-](\\d{4})$/);\n if (!m) return null;\n const [d, mo, y] = [Number(m[1]), Number(m[2]) - 1, Number(m[3])];\n const date = new Date(y, mo, d);\n return date.getFullYear() === y && date.getMonth() === mo && date.getDate() === d ? date : null;\n}\n\nexport function mxFormatDate(d: Date | null): string {\n if (!d) return '';\n const pad = (n: number) => String(n).padStart(2, '0');\n return `${pad(d.getDate())}/${pad(d.getMonth() + 1)}/${d.getFullYear()}`;\n}\n\n/**\n * Campo de data: escreve-se \"dd/mm/aaaa\" ou escolhe-se no calendário.\n * O calendário abre num diálogo não modal com foco no dia; Escape fecha.\n *\n * ```html\n * <mx-form-field>\n * <label mxLabel>Data de vencimento</label>\n * <mx-date-picker formControlName=\"vencimento\" [min]=\"hoje\" />\n * <mx-hint>dd/mm/aaaa</mx-hint>\n * </mx-form-field>\n * ```\n *\n * O valor é um `Date` (sem horas) ou null. Texto inválido deixa o campo com erro de formato.\n */\n@Component({\n selector: 'mx-date-picker',\n exportAs: 'mxDatePicker',\n imports: [CdkOverlayOrigin, CdkConnectedOverlay, MxCalendar],\n providers: [{ provide: MX_FORM_FIELD_CONTROL, useExisting: MxDatePicker }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'mx-date-picker', '[attr.aria-label]': 'null' },\n template: `\n <div class=\"mx-date-picker-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n class=\"mx-input mx-date-picker-input\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [id]=\"controlId()\"\n [placeholder]=\"placeholder()\"\n [value]=\"text()\"\n [disabled]=\"isDisabled()\"\n [attr.data-size]=\"size() === 'md' ? null : size()\"\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\n [attr.aria-required]=\"isRequired() ? 'true' : null\"\n [attr.aria-describedby]=\"field?.describedBy() ?? null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (keydown.alt.arrowdown)=\"$event.preventDefault(); open()\"\n />\n <button\n #toggleButton\n type=\"button\"\n class=\"mx-date-picker-toggle\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-label]=\"value() ? 'Mudar data, ' + longLabel() : 'Escolher data'\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"10\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.3\" />\n <path d=\"M2.5 6.5h11M5.5 2v3M10.5 2v3\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" />\n </svg>\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n (overlayOutsideClick)=\"onOutside($event)\"\n (overlayKeydown)=\"onOverlayKey($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"close(false)\"\n >\n <div class=\"mx-date-picker-panel\" role=\"dialog\" aria-modal=\"false\" [attr.aria-label]=\"'Escolher data'\">\n <mx-calendar\n #calendar\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [dateDisabled]=\"dateDisabled()\"\n [locale]=\"locale()\"\n (selected)=\"choose($event)\"\n />\n </div>\n </ng-template>\n `,\n})\nexport class MxDatePicker implements ControlValueAccessor, MxFormFieldControl {\n readonly value = model<Date | null>(null);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n readonly dateDisabled = input<(d: Date) => boolean>(() => false);\n readonly locale = input('pt-AO');\n readonly placeholder = input('dd/mm/aaaa');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly id = input<string | undefined>(undefined);\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n protected readonly field = inject(MxFormField, { optional: true });\n private readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly calendar = viewChild<MxCalendar>('calendar');\n private readonly toggleButton = viewChild.required<ElementRef<HTMLButtonElement>>('toggleButton');\n\n protected readonly positions = POSITIONS;\n private readonly generatedId = mxUniqueId('mx-date');\n readonly controlId = computed(() => this.id() ?? this.generatedId);\n protected readonly isOpen = signal(false);\n /** Texto escrito que ainda não é uma data válida. */\n private readonly draft = signal<string | null>(null);\n private readonly formDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled());\n protected readonly text = computed(() => this.draft() ?? mxFormatDate(this.value()));\n protected readonly longLabel = computed(() =>\n this.value() ? new Intl.DateTimeFormat(this.locale(), { dateStyle: 'full' }).format(this.value()!) : '',\n );\n /** true quando há texto que não é uma data válida. */\n readonly badFormat = computed(() => !!this.draft() && !mxParseDate(this.draft()!));\n\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n if (this.ngControl) this.ngControl.valueAccessor = this;\n }\n\n open(): void {\n if (!this.isDisabled()) this.isOpen.set(true);\n }\n toggle(): void {\n if (this.isOpen()) this.close();\n else this.open();\n }\n close(restoreFocus = true): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n if (restoreFocus) this.toggleButton().nativeElement.focus();\n }\n\n protected onAttach(): void {\n queueMicrotask(() => this.calendar()?.focus());\n }\n\n protected onOverlayKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n protected onOutside(event: MouseEvent): void {\n if (!this.host.contains(event.target as Node)) this.close(false);\n }\n\n protected choose(date: Date): void {\n this.setValue(mxStartOfDay(date));\n this.draft.set(null);\n this.close();\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n const parsed = mxParseDate(text);\n if (parsed) {\n this.draft.set(null);\n this.setValue(parsed);\n } else {\n this.draft.set(text || null);\n this.setValue(null);\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n private setValue(v: Date | null): void {\n const prev = this.value();\n if ((prev?.getTime() ?? null) === (v?.getTime() ?? null)) return;\n this.value.set(v);\n this.onChange(v);\n }\n\n // ---- MxFormFieldControl ----\n errorState(): boolean {\n if (this.invalid() || this.badFormat()) return true;\n const c = this.ngControl;\n return !!c && !!c.invalid && !!(c.touched || c.dirty);\n }\n isRequired(): boolean {\n return this.required() || !!this.ngControl?.control?.hasValidator?.(Validators.required);\n }\n\n // ---- ControlValueAccessor ----\n writeValue(value: Date | null): void {\n this.value.set(value ? mxStartOfDay(value) : null);\n this.draft.set(null);\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { MX_FORM_FIELD_CONTROL, MxFormField, MxFormFieldControl, mxUniqueId } from '@muxima-ui/core/form-field';\nimport { MxCalendar, MxDateRange, mxStartOfDay } from './calendar';\nimport { mxFormatDate, mxParseDate } from './date-picker';\n\nconst POSITIONS: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n];\n\n/** Atalho de intervalo mostrado ao lado do calendário. */\nexport interface MxDateRangePreset {\n label: string;\n /** Função, para que \"hoje\" seja calculado no momento do clique. */\n range: () => { start: Date; end: Date };\n}\n\n/** Atalhos comuns: últimos 7 e 30 dias, este mês e o mês passado. */\nexport function mxDefaultRangePresets(): MxDateRangePreset[] {\n const today = () => mxStartOfDay(new Date());\n const shift = (d: Date, days: number) => new Date(d.getFullYear(), d.getMonth(), d.getDate() + days);\n return [\n { label: 'Últimos 7 dias', range: () => ({ start: shift(today(), -6), end: today() }) },\n { label: 'Últimos 30 dias', range: () => ({ start: shift(today(), -29), end: today() }) },\n {\n label: 'Este mês',\n range: () => {\n const t = today();\n return { start: new Date(t.getFullYear(), t.getMonth(), 1), end: new Date(t.getFullYear(), t.getMonth() + 1, 0) };\n },\n },\n {\n label: 'Mês passado',\n range: () => {\n const t = today();\n return { start: new Date(t.getFullYear(), t.getMonth() - 1, 1), end: new Date(t.getFullYear(), t.getMonth(), 0) };\n },\n },\n ];\n}\n\n/**\n * Campo de intervalo de datas: dois campos (início e fim) que se escrevem em \"dd/mm/aaaa\"\n * ou se escolhem num calendário, com atalhos opcionais.\n *\n * ```html\n * <mx-form-field>\n * <label mxLabel>Período</label>\n * <mx-date-range-picker formControlName=\"periodo\" [presets]=\"atalhos\" />\n * </mx-form-field>\n * ```\n *\n * O valor é `{ start, end }` (datas sem horas) ou null. Cada campo é anunciado com o rótulo\n * do campo e \"início\" ou \"fim\". Fim anterior ao início deixa o campo com erro.\n */\n@Component({\n selector: 'mx-date-range-picker',\n exportAs: 'mxDateRangePicker',\n imports: [CdkOverlayOrigin, CdkConnectedOverlay, MxCalendar],\n providers: [{ provide: MX_FORM_FIELD_CONTROL, useExisting: MxDateRangePicker }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'mx-date-range-picker', '[attr.aria-label]': 'null' },\n template: `\n <div\n class=\"mx-date-range-field\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n [attr.data-size]=\"size() === 'md' ? null : size()\"\n [attr.data-invalid]=\"errorState() ? '' : null\"\n [attr.data-disabled]=\"isDisabled() ? '' : null\"\n >\n <input\n class=\"mx-date-range-input\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [id]=\"controlId()\"\n [placeholder]=\"placeholder()\"\n [value]=\"startText()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy(startLabelId)\"\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\n [attr.aria-required]=\"isRequired() ? 'true' : null\"\n [attr.aria-describedby]=\"field?.describedBy() ?? null\"\n (input)=\"onInput('start', $event)\"\n (blur)=\"onTouched()\"\n (keydown.alt.arrowdown)=\"$event.preventDefault(); open()\"\n />\n <span class=\"mx-date-range-sep\" aria-hidden=\"true\">–</span>\n <input\n class=\"mx-date-range-input\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [placeholder]=\"placeholder()\"\n [value]=\"endText()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy(endLabelId)\"\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\n [attr.aria-required]=\"isRequired() ? 'true' : null\"\n [attr.aria-describedby]=\"field?.describedBy() ?? null\"\n (input)=\"onInput('end', $event)\"\n (blur)=\"onTouched()\"\n (keydown.alt.arrowdown)=\"$event.preventDefault(); open()\"\n />\n <span class=\"mx-visually-hidden\" [id]=\"startLabelId\">{{ startLabel() }}</span>\n <span class=\"mx-visually-hidden\" [id]=\"endLabelId\">{{ endLabel() }}</span>\n @if (!field?.labelId()) {\n <span class=\"mx-visually-hidden\" [id]=\"nameId\">{{ nameText() }}</span>\n }\n <button\n #toggleButton\n type=\"button\"\n class=\"mx-date-picker-toggle\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-label]=\"toggleLabel()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"10\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.3\" />\n <path d=\"M2.5 6.5h11M5.5 2v3M10.5 2v3\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" />\n </svg>\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n (overlayOutsideClick)=\"onOutside($event)\"\n (overlayKeydown)=\"onOverlayKey($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"close(false)\"\n >\n <div class=\"mx-date-picker-panel mx-date-range-panel\" role=\"dialog\" aria-modal=\"false\" aria-label=\"Escolher intervalo\">\n @if (presets().length) {\n <ul class=\"mx-date-range-presets\" aria-label=\"Atalhos\">\n @for (p of presets(); track p.label) {\n <li><button type=\"button\" class=\"mx-date-range-preset\" (click)=\"applyPreset(p)\">{{ p.label }}</button></li>\n }\n </ul>\n }\n <mx-calendar\n #calendar\n mode=\"range\"\n [(range)]=\"draftRange\"\n [min]=\"min()\"\n [max]=\"max()\"\n [dateDisabled]=\"dateDisabled()\"\n [locale]=\"locale()\"\n (rangeSelected)=\"choose($event)\"\n />\n </div>\n </ng-template>\n `,\n})\nexport class MxDateRangePicker implements ControlValueAccessor, MxFormFieldControl {\n readonly value = model<MxDateRange | null>(null);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n readonly dateDisabled = input<(d: Date) => boolean>(() => false);\n readonly presets = input<MxDateRangePreset[]>([]);\n readonly locale = input('pt-AO');\n readonly placeholder = input('dd/mm/aaaa');\n readonly startLabel = input('início');\n readonly endLabel = input('fim');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly id = input<string | undefined>(undefined);\n /** Nome do campo quando não há mxLabel. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n protected readonly field = inject(MxFormField, { optional: true });\n private readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly calendar = viewChild<MxCalendar>('calendar');\n private readonly toggleButton = viewChild.required<ElementRef<HTMLButtonElement>>('toggleButton');\n\n protected readonly positions = POSITIONS;\n private readonly generatedId = mxUniqueId('mx-date-range');\n readonly controlId = computed(() => this.id() ?? this.generatedId);\n protected readonly startLabelId = mxUniqueId('mx-date-range-start');\n protected readonly endLabelId = mxUniqueId('mx-date-range-end');\n protected readonly nameId = mxUniqueId('mx-date-range-name');\n protected readonly isOpen = signal(false);\n /** Intervalo a ser escolhido no calendário aberto. */\n protected readonly draftRange = signal<MxDateRange | null>(null);\n /** Texto escrito que ainda não é uma data válida, por campo. */\n private readonly draftText = signal<{ start: string | null; end: string | null }>({ start: null, end: null });\n private readonly formDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n protected readonly startText = computed(() => this.draftText().start ?? mxFormatDate(this.value()?.start ?? null));\n protected readonly endText = computed(() => this.draftText().end ?? mxFormatDate(this.value()?.end ?? null));\n\n /** true quando há texto que não é data, ou o fim é anterior ao início. */\n readonly badFormat = computed(() => {\n const d = this.draftText();\n const v = this.value();\n return (!!d.start && !mxParseDate(d.start)) || (!!d.end && !mxParseDate(d.end)) || (!!v?.start && !!v?.end && v.end < v.start);\n });\n\n protected readonly toggleLabel = computed(() => {\n const v = this.value();\n if (!v?.start || !v?.end) return 'Escolher intervalo';\n const f = new Intl.DateTimeFormat(this.locale(), { day: 'numeric', month: 'long', year: 'numeric' });\n return `Mudar intervalo, ${f.format(v.start)} a ${f.format(v.end)}`;\n });\n\n private onChange: (value: MxDateRange | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n if (this.ngControl) this.ngControl.valueAccessor = this;\n }\n\n /** aria-labelledby: rótulo do form field (ou aria-label) + \"início\"/\"fim\". */\n protected labelledBy(partId: string): string {\n const label = this.field?.labelId();\n return `${label ?? this.nameId} ${partId}`;\n }\n // nome escondido quando se usa aria-label em vez de mxLabel\n protected readonly nameText = computed(() => this.ariaLabel() ?? '');\n\n open(): void {\n if (this.isDisabled()) return;\n const v = this.value();\n this.draftRange.set(v?.start ? { start: v.start, end: v.end } : null);\n this.isOpen.set(true);\n }\n toggle(): void {\n if (this.isOpen()) this.close();\n else this.open();\n }\n close(restoreFocus = true): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n if (restoreFocus) this.toggleButton().nativeElement.focus();\n }\n\n protected onAttach(): void {\n queueMicrotask(() => this.calendar()?.focus());\n }\n protected onOverlayKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n protected onOutside(event: MouseEvent): void {\n if (!this.host.contains(event.target as Node)) this.close(false);\n }\n\n protected choose(range: { start: Date; end: Date }): void {\n this.draftText.set({ start: null, end: null });\n this.setValue({ start: mxStartOfDay(range.start), end: mxStartOfDay(range.end) });\n this.close();\n }\n\n protected applyPreset(p: MxDateRangePreset): void {\n this.choose(p.range());\n }\n\n protected onInput(part: 'start' | 'end', event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n const parsed = mxParseDate(text);\n this.draftText.update((d) => ({ ...d, [part]: parsed || !text ? null : text }));\n const current = this.value() ?? { start: null, end: null };\n const next = { ...current, [part]: parsed };\n this.setValue(next.start || next.end ? next : null);\n }\n\n private setValue(v: MxDateRange | null): void {\n const prev = this.value();\n const same = (a: Date | null | undefined, b: Date | null | undefined) => (a?.getTime() ?? null) === (b?.getTime() ?? null);\n if (same(prev?.start, v?.start) && same(prev?.end, v?.end)) return;\n this.value.set(v);\n this.onChange(v);\n }\n\n // ---- MxFormFieldControl ----\n errorState(): boolean {\n if (this.invalid() || this.badFormat()) return true;\n const c = this.ngControl;\n return !!c && !!c.invalid && !!(c.touched || c.dirty);\n }\n isRequired(): boolean {\n return this.required() || !!this.ngControl?.control?.hasValidator?.(Validators.required);\n }\n\n // ---- ControlValueAccessor ----\n writeValue(value: MxDateRange | null): void {\n this.value.set(\n value ? { start: value.start ? mxStartOfDay(value.start) : null, end: value.end ? mxStartOfDay(value.end) : null } : null,\n );\n this.draftText.set({ start: null, end: null });\n }\n registerOnChange(fn: (value: MxDateRange | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n}\n\n/** Validador: exige início e fim. Usa com `Validators.required` não chega, porque {start, end: null} não é vazio. */\nexport function mxDateRangeComplete(control: { value: MxDateRange | null }): { rangeIncomplete: true } | null {\n const v = control.value;\n return v && (!v.start || !v.end) ? { rangeIncomplete: true } : null;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["POSITIONS"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"muxima-ui-core-date-picker.mjs","sources":["../../../projects/core/date-picker/calendar.ts","../../../projects/core/date-picker/date-picker.ts","../../../projects/core/date-picker/date-range-picker.ts","../../../projects/core/date-picker/muxima-ui-core-date-picker.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n afterNextRender,\n computed,\n inject,\n Injector,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { injectMxMessages } from '@muxima-ui/core/i18n';\nimport { mxUniqueId } from '@muxima-ui/core/form-field';\n\n/** Data sem horas, para comparar dias. */\nexport function mxStartOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\nexport function mxSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n return !!a && !!b && a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\n}\n/** Intervalo de datas. Enquanto se escolhe, `end` fica null. */\nexport interface MxDateRange {\n start: Date | null;\n end: Date | null;\n}\n\nfunction addDays(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate() + n);\n}\nfunction addMonths(d: Date, n: number): Date {\n const target = new Date(d.getFullYear(), d.getMonth() + n, 1);\n const last = new Date(target.getFullYear(), target.getMonth() + 1, 0).getDate();\n return new Date(target.getFullYear(), target.getMonth(), Math.min(d.getDate(), last));\n}\n\n/**\n * Calendário mensal acessível (grelha WAI-ARIA). Pode ser usado sozinho ou dentro do MxDatePicker.\n *\n * ```html\n * <mx-calendar [(value)]=\"data\" [min]=\"hoje\" />\n * <mx-calendar mode=\"range\" [(range)]=\"periodo\" />\n * ```\n *\n * Em `mode=\"range\"` o primeiro clique marca o início e o segundo o fim (se for anterior,\n * os dois trocam). Entre os dois cliques o intervalo é pré-visualizado com o rato ou o teclado.\n *\n * Teclas: setas (dia e semana), Home/End (início e fim da semana), Page Up/Down (mês),\n * Shift + Page Up/Down (ano), Enter ou Espaço para escolher.\n */\n@Component({\n selector: 'mx-calendar',\n exportAs: 'mxCalendar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'mx-calendar' },\n template: `\n <div class=\"mx-calendar-header\">\n <button type=\"button\" class=\"mx-calendar-nav\" (click)=\"moveMonth(-1)\" [attr.aria-label]=\"msg().previousMonth(monthLabel(-1))\">\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M10 4L6 8l4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /></svg>\n </button>\n <p class=\"mx-calendar-title\" [id]=\"titleId\" aria-live=\"polite\">{{ monthLabel(0) }}</p>\n <button type=\"button\" class=\"mx-calendar-nav\" (click)=\"moveMonth(1)\" [attr.aria-label]=\"msg().nextMonth(monthLabel(1))\">\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M6 4l4 4-4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /></svg>\n </button>\n </div>\n <table class=\"mx-calendar-grid\" role=\"grid\" [attr.aria-labelledby]=\"titleId\" (keydown)=\"onKeydown($event)\">\n <thead>\n <tr>\n @for (d of weekdays(); track d.long) {\n <th scope=\"col\" [attr.abbr]=\"d.long\"><span aria-hidden=\"true\">{{ d.short }}</span><span class=\"mx-visually-hidden\">{{ d.long }}</span></th>\n }\n </tr>\n </thead>\n <tbody>\n @for (week of weeks(); track $index) {\n <tr>\n @for (day of week; track day.date.getTime()) {\n <td\n role=\"gridcell\"\n [attr.aria-selected]=\"day.selected\"\n [attr.data-range-start]=\"day.rangeStart ? '' : null\"\n [attr.data-range-end]=\"day.rangeEnd ? '' : null\"\n [attr.data-in-range]=\"day.inRange ? '' : null\"\n >\n <button\n type=\"button\"\n class=\"mx-calendar-day\"\n [attr.data-outside]=\"day.outside ? '' : null\"\n [attr.data-today]=\"day.today ? '' : null\"\n [attr.aria-current]=\"day.today ? 'date' : null\"\n [attr.aria-label]=\"day.label\"\n [attr.data-date]=\"day.key\"\n [tabIndex]=\"day.focus ? 0 : -1\"\n [attr.aria-disabled]=\"day.disabled ? 'true' : null\"\n (click)=\"select(day.date)\"\n (mouseenter)=\"hover(day.date)\"\n >\n {{ day.date.getDate() }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (mode() === 'range') {\n <p class=\"mx-visually-hidden\" aria-live=\"polite\">{{ rangeHint() }}</p>\n }\n `,\n})\nexport class MxCalendar {\n readonly value = model<Date | null>(null);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n /** Dias que não se podem escolher (ex.: fins-de-semana). */\n readonly dateDisabled = input<(d: Date) => boolean>(() => false);\n /** Locale dos nomes dos meses e dos dias; por omissão o do idioma activo. */\n readonly locale = input<string>();\n /** Primeiro dia da semana: 0 = domingo, 1 = segunda-feira. Por omissão o do idioma activo. */\n readonly firstDayOfWeek = input<number>();\n private readonly i18n = injectMxMessages();\n protected readonly msg = computed(() => this.i18n().calendar);\n private readonly loc = computed(() => this.locale() ?? this.i18n().intlLocale);\n private readonly firstDay = computed(() => this.firstDayOfWeek() ?? this.i18n().firstDayOfWeek);\n readonly selected = output<Date>();\n /** `single` escolhe um dia; `range` escolhe um intervalo em [(range)]. */\n readonly mode = input<'single' | 'range'>('single');\n readonly range = model<MxDateRange | null>(null);\n /** Emite quando o intervalo fica completo (início e fim). */\n readonly rangeSelected = output<{ start: Date; end: Date }>();\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly injector = inject(Injector);\n protected readonly titleId = mxUniqueId('mx-calendar-title');\n /** Dia com foco na grelha. */\n readonly focusDate = signal(mxStartOfDay(new Date()));\n private initialised = false;\n /** Dia sob o rato ou o foco enquanto falta o fim do intervalo. */\n private readonly preview = signal<Date | null>(null);\n private readonly awaitingEnd = computed(() => this.mode() === 'range' && !!this.range()?.start && !this.range()?.end);\n\n protected readonly rangeHint = computed(() => {\n const r = this.range();\n if (!r?.start) return '';\n const f = new Intl.DateTimeFormat(this.loc(), { day: 'numeric', month: 'long', year: 'numeric' });\n return r.end ? this.msg().rangeHint(f.format(r.start), f.format(r.end)) : this.msg().rangeStartHint(f.format(r.start));\n });\n\n /** Início e fim efectivos (com pré-visualização), ordenados. */\n private readonly bounds = computed<[Date, Date] | null>(() => {\n if (this.mode() !== 'range') return null;\n const r = this.range();\n if (!r?.start) return null;\n const end = r.end ?? (this.awaitingEnd() ? this.preview() : null) ?? r.start;\n return r.start <= end ? [r.start, end] : [end, r.start];\n });\n\n protected readonly weekdays = computed(() => {\n const short = new Intl.DateTimeFormat(this.loc(), { weekday: 'narrow' });\n const long = new Intl.DateTimeFormat(this.loc(), { weekday: 'long' });\n // 2024-01-01 foi segunda-feira\n return Array.from({ length: 7 }, (_, i) => {\n const d = new Date(2024, 0, 1 + ((this.firstDay() - 1 + i + 7) % 7));\n return { short: short.format(d).toUpperCase(), long: long.format(d) };\n });\n });\n\n protected readonly weeks = computed(() => {\n const focus = this.focusDate();\n const first = new Date(focus.getFullYear(), focus.getMonth(), 1);\n const offset = (first.getDay() - this.firstDay() + 7) % 7;\n const start = addDays(first, -offset);\n const today = mxStartOfDay(new Date());\n const fmt = new Intl.DateTimeFormat(this.loc(), { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' });\n const bounds = this.bounds();\n const isRange = this.mode() === 'range';\n const weeks = [];\n for (let w = 0; w < 6; w++) {\n const row = [];\n for (let i = 0; i < 7; i++) {\n const date = addDays(start, w * 7 + i);\n const rangeStart = !!bounds && mxSameDay(date, bounds[0]);\n const rangeEnd = !!bounds && mxSameDay(date, bounds[1]);\n const inRange = !!bounds && date > bounds[0] && date < bounds[1];\n const isStart = isRange && mxSameDay(date, this.range()?.start);\n const isEnd = isRange && mxSameDay(date, this.range()?.end);\n const t = this.msg();\n const label = fmt.format(date) + (isStart && isEnd ? `, ${t.rangeStartEnd}` : isStart ? `, ${t.rangeStart}` : isEnd ? `, ${t.rangeEnd}` : '');\n row.push({\n date,\n key: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`,\n label,\n outside: date.getMonth() !== focus.getMonth(),\n today: mxSameDay(date, today),\n rangeStart,\n rangeEnd,\n inRange,\n selected: isRange ? rangeStart || rangeEnd || inRange : mxSameDay(date, this.value()),\n focus: mxSameDay(date, focus),\n disabled: this.isDisabled(date),\n });\n }\n weeks.push(row);\n }\n return weeks;\n });\n\n constructor() {\n afterNextRender(() => {\n if (!this.initialised) {\n const v = this.mode() === 'range' ? this.range()?.start : this.value();\n if (v) this.focusDate.set(mxStartOfDay(v));\n this.initialised = true;\n }\n });\n }\n\n /** Põe o foco no dia activo (seleccionado ou hoje). */\n focus(): void {\n const v = this.mode() === 'range' ? this.range()?.start : this.value();\n if (v) this.focusDate.set(mxStartOfDay(v));\n this.focusActiveDay();\n }\n\n protected monthLabel(delta: number): string {\n const d = addMonths(this.focusDate(), delta);\n const s = new Intl.DateTimeFormat(this.loc(), { month: 'long', year: 'numeric' }).format(d);\n return s.charAt(0).toUpperCase() + s.slice(1);\n }\n\n protected moveMonth(delta: number): void {\n this.focusDate.set(addMonths(this.focusDate(), delta));\n }\n\n protected hover(date: Date): void {\n if (this.awaitingEnd()) this.preview.set(date);\n }\n\n protected select(date: Date): void {\n if (this.isDisabled(date)) return;\n if (this.mode() === 'range') {\n const r = this.range();\n if (r?.start && !r.end) {\n const [start, end] = date < r.start ? [date, r.start] : [r.start, date];\n this.range.set({ start, end });\n this.rangeSelected.emit({ start, end });\n } else {\n this.range.set({ start: date, end: null });\n }\n this.preview.set(null);\n this.focusDate.set(date);\n return;\n }\n this.value.set(date);\n this.focusDate.set(date);\n this.selected.emit(date);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const f = this.focusDate();\n const dow = (f.getDay() - this.firstDay() + 7) % 7;\n const moves: Record<string, () => Date> = {\n ArrowLeft: () => addDays(f, -1),\n ArrowRight: () => addDays(f, 1),\n ArrowUp: () => addDays(f, -7),\n ArrowDown: () => addDays(f, 7),\n Home: () => addDays(f, -dow),\n End: () => addDays(f, 6 - dow),\n PageUp: () => addMonths(f, event.shiftKey ? -12 : -1),\n PageDown: () => addMonths(f, event.shiftKey ? 12 : 1),\n };\n if (event.key === 'Enter' || event.key === ' ') {\n // escolhe o dia activo, mesmo que o foco ainda não tenha chegado ao botão\n event.preventDefault();\n this.select(this.focusDate());\n return;\n }\n const move = moves[event.key];\n if (move) {\n event.preventDefault();\n this.focusDate.set(this.clamp(move()));\n this.hover(this.focusDate());\n this.focusActiveDay();\n }\n }\n\n private clamp(d: Date): Date {\n const min = this.min();\n const max = this.max();\n if (min && d < mxStartOfDay(min)) return mxStartOfDay(min);\n if (max && d > mxStartOfDay(max)) return mxStartOfDay(max);\n return d;\n }\n\n private isDisabled(d: Date): boolean {\n const min = this.min();\n const max = this.max();\n return (!!min && d < mxStartOfDay(min)) || (!!max && d > mxStartOfDay(max)) || this.dateDisabled()(d);\n }\n\n private focusActiveDay(): void {\n afterNextRender(\n () => {\n const f = this.focusDate();\n const key = `${f.getFullYear()}-${f.getMonth() + 1}-${f.getDate()}`;\n this.host.querySelector<HTMLButtonElement>(`[data-date=\"${key}\"]`)?.focus();\n },\n { injector: this.injector },\n );\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { injectMxMessages } from '@muxima-ui/core/i18n';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { MX_FORM_FIELD_CONTROL, MxFormField, MxFormFieldControl, mxUniqueId } from '@muxima-ui/core/form-field';\nimport { MxCalendar, mxStartOfDay } from './calendar';\n\nconst POSITIONS: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n];\n\n/** Converte \"dd/mm/aaaa\" numa data. Aceita também \"-\" e \".\" como separadores. */\n/** Ordem do dia (d), mês (m) e ano (y) numa data escrita. */\nexport type MxDateOrder = 'dmy' | 'mdy' | 'ymd';\n\nexport function mxParseDate(text: string, order: MxDateOrder = 'dmy'): Date | null {\n const t = text.trim();\n const m =\n order === 'ymd'\n ? t.match(/^(\\d{4})[/.-](\\d{1,2})[/.-](\\d{1,2})$/)\n : t.match(/^(\\d{1,2})[/.-](\\d{1,2})[/.-](\\d{4})$/);\n if (!m) return null;\n const n = [Number(m[1]), Number(m[2]), Number(m[3])];\n const [d, mo, y] =\n order === 'ymd' ? [n[2], n[1] - 1, n[0]] : order === 'mdy' ? [n[1], n[0] - 1, n[2]] : [n[0], n[1] - 1, n[2]];\n const date = new Date(y, mo, d);\n return date.getFullYear() === y && date.getMonth() === mo && date.getDate() === d ? date : null;\n}\n\nexport function mxFormatDate(d: Date | null, order: MxDateOrder = 'dmy'): string {\n if (!d) return '';\n const pad = (n: number) => String(n).padStart(2, '0');\n const [day, month, year] = [pad(d.getDate()), pad(d.getMonth() + 1), d.getFullYear()];\n if (order === 'ymd') return `${year}-${month}-${day}`;\n return order === 'mdy' ? `${month}/${day}/${year}` : `${day}/${month}/${year}`;\n}\n\n/**\n * Campo de data: escreve-se \"dd/mm/aaaa\" ou escolhe-se no calendário.\n * O calendário abre num diálogo não modal com foco no dia; Escape fecha.\n *\n * ```html\n * <mx-form-field>\n * <label mxLabel>Data de vencimento</label>\n * <mx-date-picker formControlName=\"vencimento\" [min]=\"hoje\" />\n * <mx-hint>dd/mm/aaaa</mx-hint>\n * </mx-form-field>\n * ```\n *\n * O valor é um `Date` (sem horas) ou null. Texto inválido deixa o campo com erro de formato.\n */\n@Component({\n selector: 'mx-date-picker',\n exportAs: 'mxDatePicker',\n imports: [CdkOverlayOrigin, CdkConnectedOverlay, MxCalendar],\n providers: [{ provide: MX_FORM_FIELD_CONTROL, useExisting: MxDatePicker }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'mx-date-picker', '[attr.aria-label]': 'null' },\n template: `\n <div class=\"mx-date-picker-field\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\n <input\n class=\"mx-input mx-date-picker-input\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [id]=\"controlId()\"\n [placeholder]=\"placeholder() ?? msg().placeholder\"\n [value]=\"text()\"\n [disabled]=\"isDisabled()\"\n [attr.data-size]=\"size() === 'md' ? null : size()\"\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\n [attr.aria-required]=\"isRequired() ? 'true' : null\"\n [attr.aria-describedby]=\"field?.describedBy() ?? null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n (keydown.alt.arrowdown)=\"$event.preventDefault(); open()\"\n />\n <button\n #toggleButton\n type=\"button\"\n class=\"mx-date-picker-toggle\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-label]=\"value() ? msg().change(longLabel()) : msg().choose\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"10\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.3\" />\n <path d=\"M2.5 6.5h11M5.5 2v3M10.5 2v3\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" />\n </svg>\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n (overlayOutsideClick)=\"onOutside($event)\"\n (overlayKeydown)=\"onOverlayKey($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"close(false)\"\n >\n <div class=\"mx-date-picker-panel\" role=\"dialog\" aria-modal=\"false\" [attr.aria-label]=\"msg().choose\">\n <mx-calendar\n #calendar\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [dateDisabled]=\"dateDisabled()\"\n [locale]=\"loc()\"\n (selected)=\"choose($event)\"\n />\n </div>\n </ng-template>\n `,\n})\nexport class MxDatePicker implements ControlValueAccessor, MxFormFieldControl {\n readonly value = model<Date | null>(null);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n readonly dateDisabled = input<(d: Date) => boolean>(() => false);\n /** Locale dos nomes dos meses e dos dias; por omissão o do idioma activo. */\n readonly locale = input<string>();\n /** Por omissão \"dd/mm/aaaa\" em português e \"mm/dd/yyyy\" em inglês. */\n readonly placeholder = input<string>();\n private readonly i18n = injectMxMessages();\n protected readonly msg = computed(() => this.i18n().datePicker);\n protected readonly loc = computed(() => this.locale() ?? this.i18n().intlLocale);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly id = input<string | undefined>(undefined);\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n protected readonly field = inject(MxFormField, { optional: true });\n private readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly calendar = viewChild<MxCalendar>('calendar');\n private readonly toggleButton = viewChild.required<ElementRef<HTMLButtonElement>>('toggleButton');\n\n protected readonly positions = POSITIONS;\n private readonly generatedId = mxUniqueId('mx-date');\n readonly controlId = computed(() => this.id() ?? this.generatedId);\n protected readonly isOpen = signal(false);\n /** Texto escrito que ainda não é uma data válida. */\n private readonly draft = signal<string | null>(null);\n private readonly formDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled());\n protected readonly text = computed(() => this.draft() ?? mxFormatDate(this.value(), this.i18n().dateOrder));\n protected readonly longLabel = computed(() =>\n this.value() ? new Intl.DateTimeFormat(this.loc(), { dateStyle: 'full' }).format(this.value()!) : '',\n );\n /** true quando há texto que não é uma data válida. */\n readonly badFormat = computed(() => !!this.draft() && !mxParseDate(this.draft()!, this.i18n().dateOrder));\n\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n if (this.ngControl) this.ngControl.valueAccessor = this;\n }\n\n open(): void {\n if (!this.isDisabled()) this.isOpen.set(true);\n }\n toggle(): void {\n if (this.isOpen()) this.close();\n else this.open();\n }\n close(restoreFocus = true): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n if (restoreFocus) this.toggleButton().nativeElement.focus();\n }\n\n protected onAttach(): void {\n queueMicrotask(() => this.calendar()?.focus());\n }\n\n protected onOverlayKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n protected onOutside(event: MouseEvent): void {\n if (!this.host.contains(event.target as Node)) this.close(false);\n }\n\n protected choose(date: Date): void {\n this.setValue(mxStartOfDay(date));\n this.draft.set(null);\n this.close();\n }\n\n protected onInput(event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n const parsed = mxParseDate(text, this.i18n().dateOrder);\n if (parsed) {\n this.draft.set(null);\n this.setValue(parsed);\n } else {\n this.draft.set(text || null);\n this.setValue(null);\n }\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n private setValue(v: Date | null): void {\n const prev = this.value();\n if ((prev?.getTime() ?? null) === (v?.getTime() ?? null)) return;\n this.value.set(v);\n this.onChange(v);\n }\n\n // ---- MxFormFieldControl ----\n errorState(): boolean {\n if (this.invalid() || this.badFormat()) return true;\n const c = this.ngControl;\n return !!c && !!c.invalid && !!(c.touched || c.dirty);\n }\n isRequired(): boolean {\n return this.required() || !!this.ngControl?.control?.hasValidator?.(Validators.required);\n }\n\n // ---- ControlValueAccessor ----\n writeValue(value: Date | null): void {\n this.value.set(value ? mxStartOfDay(value) : null);\n this.draft.set(null);\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { CdkConnectedOverlay, CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\nimport { MX_FORM_FIELD_CONTROL, MxFormField, MxFormFieldControl, mxUniqueId } from '@muxima-ui/core/form-field';\nimport { MxCalendar, MxDateRange, mxStartOfDay } from './calendar';\nimport { mxFormatDate, mxParseDate } from './date-picker';\nimport { MX_MESSAGES_PT, MxMessages, injectMxMessages } from '@muxima-ui/core/i18n';\n\nconst POSITIONS: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\n];\n\n/** Atalho de intervalo mostrado ao lado do calendário. */\nexport interface MxDateRangePreset {\n label: string;\n /** Função, para que \"hoje\" seja calculado no momento do clique. */\n range: () => { start: Date; end: Date };\n}\n\n/**\n * Atalhos comuns: últimos 7 e 30 dias, este mês e o mês passado.\n * Os nomes vêm de `labels` (por omissão em português); para o idioma activo,\n * usa `mxDefaultRangePresets(inject(MxI18n).messages().dateRangePicker)`.\n */\nexport function mxDefaultRangePresets(\n labels: MxMessages['dateRangePicker'] = MX_MESSAGES_PT.dateRangePicker,\n): MxDateRangePreset[] {\n const today = () => mxStartOfDay(new Date());\n const shift = (d: Date, days: number) => new Date(d.getFullYear(), d.getMonth(), d.getDate() + days);\n return [\n { label: labels.last7Days, range: () => ({ start: shift(today(), -6), end: today() }) },\n { label: labels.last30Days, range: () => ({ start: shift(today(), -29), end: today() }) },\n {\n label: labels.thisMonth,\n range: () => {\n const t = today();\n return { start: new Date(t.getFullYear(), t.getMonth(), 1), end: new Date(t.getFullYear(), t.getMonth() + 1, 0) };\n },\n },\n {\n label: labels.lastMonth,\n range: () => {\n const t = today();\n return { start: new Date(t.getFullYear(), t.getMonth() - 1, 1), end: new Date(t.getFullYear(), t.getMonth(), 0) };\n },\n },\n ];\n}\n\n/**\n * Campo de intervalo de datas: dois campos (início e fim) que se escrevem em \"dd/mm/aaaa\"\n * ou se escolhem num calendário, com atalhos opcionais.\n *\n * ```html\n * <mx-form-field>\n * <label mxLabel>Período</label>\n * <mx-date-range-picker formControlName=\"periodo\" [presets]=\"atalhos\" />\n * </mx-form-field>\n * ```\n *\n * O valor é `{ start, end }` (datas sem horas) ou null. Cada campo é anunciado com o rótulo\n * do campo e \"início\" ou \"fim\". Fim anterior ao início deixa o campo com erro.\n */\n@Component({\n selector: 'mx-date-range-picker',\n exportAs: 'mxDateRangePicker',\n imports: [CdkOverlayOrigin, CdkConnectedOverlay, MxCalendar],\n providers: [{ provide: MX_FORM_FIELD_CONTROL, useExisting: MxDateRangePicker }],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'mx-date-range-picker', '[attr.aria-label]': 'null' },\n template: `\n <div\n class=\"mx-date-range-field\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n [attr.data-size]=\"size() === 'md' ? null : size()\"\n [attr.data-invalid]=\"errorState() ? '' : null\"\n [attr.data-disabled]=\"isDisabled() ? '' : null\"\n >\n <input\n class=\"mx-date-range-input\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [id]=\"controlId()\"\n [placeholder]=\"placeholderText()\"\n [value]=\"startText()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy(startLabelId)\"\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\n [attr.aria-required]=\"isRequired() ? 'true' : null\"\n [attr.aria-describedby]=\"field?.describedBy() ?? null\"\n (input)=\"onInput('start', $event)\"\n (blur)=\"onTouched()\"\n (keydown.alt.arrowdown)=\"$event.preventDefault(); open()\"\n />\n <span class=\"mx-date-range-sep\" aria-hidden=\"true\">–</span>\n <input\n class=\"mx-date-range-input\"\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n [placeholder]=\"placeholderText()\"\n [value]=\"endText()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-labelledby]=\"labelledBy(endLabelId)\"\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\n [attr.aria-required]=\"isRequired() ? 'true' : null\"\n [attr.aria-describedby]=\"field?.describedBy() ?? null\"\n (input)=\"onInput('end', $event)\"\n (blur)=\"onTouched()\"\n (keydown.alt.arrowdown)=\"$event.preventDefault(); open()\"\n />\n <span class=\"mx-visually-hidden\" [id]=\"startLabelId\">{{ startLabel() ?? msg().start }}</span>\n <span class=\"mx-visually-hidden\" [id]=\"endLabelId\">{{ endLabel() ?? msg().end }}</span>\n @if (!field?.labelId()) {\n <span class=\"mx-visually-hidden\" [id]=\"nameId\">{{ nameText() }}</span>\n }\n <button\n #toggleButton\n type=\"button\"\n class=\"mx-date-picker-toggle\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-label]=\"toggleLabel()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"10\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.3\" />\n <path d=\"M2.5 6.5h11M5.5 2v3M10.5 2v3\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" />\n </svg>\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n (overlayOutsideClick)=\"onOutside($event)\"\n (overlayKeydown)=\"onOverlayKey($event)\"\n (attach)=\"onAttach()\"\n (detach)=\"close(false)\"\n >\n <div class=\"mx-date-picker-panel mx-date-range-panel\" role=\"dialog\" aria-modal=\"false\" [attr.aria-label]=\"msg().choose\">\n @if (presets().length) {\n <ul class=\"mx-date-range-presets\" [attr.aria-label]=\"msg().presets\">\n @for (p of presets(); track p.label) {\n <li><button type=\"button\" class=\"mx-date-range-preset\" (click)=\"applyPreset(p)\">{{ p.label }}</button></li>\n }\n </ul>\n }\n <mx-calendar\n #calendar\n mode=\"range\"\n [(range)]=\"draftRange\"\n [min]=\"min()\"\n [max]=\"max()\"\n [dateDisabled]=\"dateDisabled()\"\n [locale]=\"loc()\"\n (rangeSelected)=\"choose($event)\"\n />\n </div>\n </ng-template>\n `,\n})\nexport class MxDateRangePicker implements ControlValueAccessor, MxFormFieldControl {\n readonly value = model<MxDateRange | null>(null);\n readonly min = input<Date | null>(null);\n readonly max = input<Date | null>(null);\n readonly dateDisabled = input<(d: Date) => boolean>(() => false);\n readonly presets = input<MxDateRangePreset[]>([]);\n /** Locale dos nomes dos meses e dos dias; por omissão o do idioma activo. */\n readonly locale = input<string>();\n /** Por omissão \"dd/mm/aaaa\" em português e \"mm/dd/yyyy\" em inglês. */\n readonly placeholder = input<string>();\n readonly startLabel = input<string>();\n readonly endLabel = input<string>();\n private readonly i18n = injectMxMessages();\n protected readonly msg = computed(() => this.i18n().dateRangePicker);\n protected readonly loc = computed(() => this.locale() ?? this.i18n().intlLocale);\n protected readonly placeholderText = computed(() => this.placeholder() ?? this.i18n().datePicker.placeholder);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly required = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly id = input<string | undefined>(undefined);\n /** Nome do campo quando não há mxLabel. */\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\n\n protected readonly field = inject(MxFormField, { optional: true });\n private readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly calendar = viewChild<MxCalendar>('calendar');\n private readonly toggleButton = viewChild.required<ElementRef<HTMLButtonElement>>('toggleButton');\n\n protected readonly positions = POSITIONS;\n private readonly generatedId = mxUniqueId('mx-date-range');\n readonly controlId = computed(() => this.id() ?? this.generatedId);\n protected readonly startLabelId = mxUniqueId('mx-date-range-start');\n protected readonly endLabelId = mxUniqueId('mx-date-range-end');\n protected readonly nameId = mxUniqueId('mx-date-range-name');\n protected readonly isOpen = signal(false);\n /** Intervalo a ser escolhido no calendário aberto. */\n protected readonly draftRange = signal<MxDateRange | null>(null);\n /** Texto escrito que ainda não é uma data válida, por campo. */\n private readonly draftText = signal<{ start: string | null; end: string | null }>({ start: null, end: null });\n private readonly formDisabled = signal(false);\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled());\n\n protected readonly startText = computed(() => this.draftText().start ?? mxFormatDate(this.value()?.start ?? null, this.i18n().dateOrder));\n protected readonly endText = computed(() => this.draftText().end ?? mxFormatDate(this.value()?.end ?? null, this.i18n().dateOrder));\n\n /** true quando há texto que não é data, ou o fim é anterior ao início. */\n readonly badFormat = computed(() => {\n const d = this.draftText();\n const v = this.value();\n return (!!d.start && !mxParseDate(d.start, this.i18n().dateOrder)) || (!!d.end && !mxParseDate(d.end, this.i18n().dateOrder)) || (!!v?.start && !!v?.end && v.end < v.start);\n });\n\n protected readonly toggleLabel = computed(() => {\n const v = this.value();\n if (!v?.start || !v?.end) return this.msg().choose;\n const f = new Intl.DateTimeFormat(this.loc(), { day: 'numeric', month: 'long', year: 'numeric' });\n return this.msg().change(f.format(v.start), f.format(v.end));\n });\n\n private onChange: (value: MxDateRange | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n if (this.ngControl) this.ngControl.valueAccessor = this;\n }\n\n /** aria-labelledby: rótulo do form field (ou aria-label) + \"início\"/\"fim\". */\n protected labelledBy(partId: string): string {\n const label = this.field?.labelId();\n return `${label ?? this.nameId} ${partId}`;\n }\n // nome escondido quando se usa aria-label em vez de mxLabel\n protected readonly nameText = computed(() => this.ariaLabel() ?? '');\n\n open(): void {\n if (this.isDisabled()) return;\n const v = this.value();\n this.draftRange.set(v?.start ? { start: v.start, end: v.end } : null);\n this.isOpen.set(true);\n }\n toggle(): void {\n if (this.isOpen()) this.close();\n else this.open();\n }\n close(restoreFocus = true): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n if (restoreFocus) this.toggleButton().nativeElement.focus();\n }\n\n protected onAttach(): void {\n queueMicrotask(() => this.calendar()?.focus());\n }\n protected onOverlayKey(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n protected onOutside(event: MouseEvent): void {\n if (!this.host.contains(event.target as Node)) this.close(false);\n }\n\n protected choose(range: { start: Date; end: Date }): void {\n this.draftText.set({ start: null, end: null });\n this.setValue({ start: mxStartOfDay(range.start), end: mxStartOfDay(range.end) });\n this.close();\n }\n\n protected applyPreset(p: MxDateRangePreset): void {\n this.choose(p.range());\n }\n\n protected onInput(part: 'start' | 'end', event: Event): void {\n const text = (event.target as HTMLInputElement).value;\n const parsed = mxParseDate(text, this.i18n().dateOrder);\n this.draftText.update((d) => ({ ...d, [part]: parsed || !text ? null : text }));\n const current = this.value() ?? { start: null, end: null };\n const next = { ...current, [part]: parsed };\n this.setValue(next.start || next.end ? next : null);\n }\n\n private setValue(v: MxDateRange | null): void {\n const prev = this.value();\n const same = (a: Date | null | undefined, b: Date | null | undefined) => (a?.getTime() ?? null) === (b?.getTime() ?? null);\n if (same(prev?.start, v?.start) && same(prev?.end, v?.end)) return;\n this.value.set(v);\n this.onChange(v);\n }\n\n // ---- MxFormFieldControl ----\n errorState(): boolean {\n if (this.invalid() || this.badFormat()) return true;\n const c = this.ngControl;\n return !!c && !!c.invalid && !!(c.touched || c.dirty);\n }\n isRequired(): boolean {\n return this.required() || !!this.ngControl?.control?.hasValidator?.(Validators.required);\n }\n\n // ---- ControlValueAccessor ----\n writeValue(value: MxDateRange | null): void {\n this.value.set(\n value ? { start: value.start ? mxStartOfDay(value.start) : null, end: value.end ? mxStartOfDay(value.end) : null } : null,\n );\n this.draftText.set({ start: null, end: null });\n }\n registerOnChange(fn: (value: MxDateRange | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n}\n\n/** Validador: exige início e fim. Usa com `Validators.required` não chega, porque {start, end: null} não é vazio. */\nexport function mxDateRangeComplete(control: { value: MxDateRange | null }): { rangeIncomplete: true } | null {\n const v = control.value;\n return v && (!v.start || !v.end) ? { rangeIncomplete: true } : null;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["POSITIONS"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { model, input, numberAttribute, booleanAttribute, inject, viewChild, Injector,
|
|
2
|
+
import { model, input, numberAttribute, booleanAttribute, computed, inject, viewChild, Injector, signal, afterNextRender, DestroyRef, effect, untracked, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { injectMxMessages } from '@muxima-ui/core/i18n';
|
|
3
4
|
import { NgControl, Validators } from '@angular/forms';
|
|
4
5
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
5
6
|
import { Editor } from '@tiptap/core';
|
|
@@ -162,8 +163,13 @@ class MxEditor {
|
|
|
162
163
|
invalid = input(false, { ...(ngDevMode ? { debugName: "invalid" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
163
164
|
id = input(undefined, ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
164
165
|
ariaLabel = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabel" } : /* istanbul ignore next */ {}), alias: 'aria-label' });
|
|
165
|
-
toolbarLabel = input(
|
|
166
|
-
linkLabel = input(
|
|
166
|
+
toolbarLabel = input(...(ngDevMode ? [undefined, { debugName: "toolbarLabel" }] : /* istanbul ignore next */ []));
|
|
167
|
+
linkLabel = input(...(ngDevMode ? [undefined, { debugName: "linkLabel" }] : /* istanbul ignore next */ []));
|
|
168
|
+
i18n = injectMxMessages();
|
|
169
|
+
msg = computed(() => this.i18n().editor, ...(ngDevMode ? [{ debugName: "msg" }] : /* istanbul ignore next */ []));
|
|
170
|
+
toolLabel(t) {
|
|
171
|
+
return t === '|' ? '' : this.msg().tools[t];
|
|
172
|
+
}
|
|
167
173
|
field = inject(MxFormField, { optional: true });
|
|
168
174
|
ngControl = inject(NgControl, { self: true, optional: true });
|
|
169
175
|
content = viewChild.required('content');
|
|
@@ -404,7 +410,7 @@ class MxEditor {
|
|
|
404
410
|
class="mx-editor-toolbar"
|
|
405
411
|
role="toolbar"
|
|
406
412
|
#toolbar
|
|
407
|
-
[attr.aria-label]="toolbarLabel()"
|
|
413
|
+
[attr.aria-label]="toolbarLabel() ?? msg().toolbar"
|
|
408
414
|
[attr.aria-controls]="controlId()"
|
|
409
415
|
(keydown)="onToolbarKey($event)"
|
|
410
416
|
>
|
|
@@ -417,7 +423,7 @@ class MxEditor {
|
|
|
417
423
|
class="mx-editor-tool"
|
|
418
424
|
[tabIndex]="$index === focusIndex() ? 0 : -1"
|
|
419
425
|
[attr.data-tool]="t"
|
|
420
|
-
[attr.aria-label]="
|
|
426
|
+
[attr.aria-label]="toolLabel(t)"
|
|
421
427
|
[attr.aria-keyshortcuts]="tools[t].shortcut ?? null"
|
|
422
428
|
[attr.aria-pressed]="tools[t].toggle ? isActive(t) : null"
|
|
423
429
|
[disabled]="isDisabled() || !isEnabled(t)"
|
|
@@ -430,27 +436,27 @@ class MxEditor {
|
|
|
430
436
|
}
|
|
431
437
|
</div>
|
|
432
438
|
@if (linkOpen()) {
|
|
433
|
-
<div class="mx-editor-linkbar" role="group" [attr.aria-label]="linkLabel()">
|
|
439
|
+
<div class="mx-editor-linkbar" role="group" [attr.aria-label]="linkLabel() ?? msg().link">
|
|
434
440
|
<input
|
|
435
441
|
#linkInput
|
|
436
442
|
class="mx-input"
|
|
437
443
|
data-size="sm"
|
|
438
444
|
type="url"
|
|
439
445
|
placeholder="https://"
|
|
440
|
-
[attr.aria-label]="linkLabel()"
|
|
446
|
+
[attr.aria-label]="linkLabel() ?? msg().link"
|
|
441
447
|
[value]="linkUrl()"
|
|
442
448
|
(input)="linkUrl.set($any($event.target).value)"
|
|
443
449
|
(keydown.enter)="$event.preventDefault(); applyLink()"
|
|
444
450
|
(keydown.escape)="$event.preventDefault(); closeLink()"
|
|
445
451
|
/>
|
|
446
|
-
<button type="button" class="mx-editor-text-button" (click)="applyLink()">
|
|
452
|
+
<button type="button" class="mx-editor-text-button" (click)="applyLink()">{{ msg().apply }}</button>
|
|
447
453
|
@if (linkActive()) {
|
|
448
454
|
<button type="button" class="mx-editor-text-button" (click)="removeLink()">
|
|
449
|
-
|
|
455
|
+
{{ msg().remove }}
|
|
450
456
|
</button>
|
|
451
457
|
}
|
|
452
458
|
<button type="button" class="mx-editor-text-button" (click)="closeLink()">
|
|
453
|
-
|
|
459
|
+
{{ msg().cancel }}
|
|
454
460
|
</button>
|
|
455
461
|
</div>
|
|
456
462
|
}
|
|
@@ -468,7 +474,7 @@ class MxEditor {
|
|
|
468
474
|
[attr.data-over]="count() > maxLength()! ? '' : null"
|
|
469
475
|
[attr.aria-live]="count() >= maxLength()! * 0.9 ? 'polite' : null"
|
|
470
476
|
>
|
|
471
|
-
{{ count() }} / {{ maxLength() }}<span class="mx-visually-hidden">
|
|
477
|
+
{{ count() }} / {{ maxLength() }}<span class="mx-visually-hidden"> {{ msg().characters }}</span>
|
|
472
478
|
</span>
|
|
473
479
|
</div>
|
|
474
480
|
}
|
|
@@ -495,7 +501,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
|
|
|
495
501
|
class="mx-editor-toolbar"
|
|
496
502
|
role="toolbar"
|
|
497
503
|
#toolbar
|
|
498
|
-
[attr.aria-label]="toolbarLabel()"
|
|
504
|
+
[attr.aria-label]="toolbarLabel() ?? msg().toolbar"
|
|
499
505
|
[attr.aria-controls]="controlId()"
|
|
500
506
|
(keydown)="onToolbarKey($event)"
|
|
501
507
|
>
|
|
@@ -508,7 +514,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
|
|
|
508
514
|
class="mx-editor-tool"
|
|
509
515
|
[tabIndex]="$index === focusIndex() ? 0 : -1"
|
|
510
516
|
[attr.data-tool]="t"
|
|
511
|
-
[attr.aria-label]="
|
|
517
|
+
[attr.aria-label]="toolLabel(t)"
|
|
512
518
|
[attr.aria-keyshortcuts]="tools[t].shortcut ?? null"
|
|
513
519
|
[attr.aria-pressed]="tools[t].toggle ? isActive(t) : null"
|
|
514
520
|
[disabled]="isDisabled() || !isEnabled(t)"
|
|
@@ -521,27 +527,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
|
|
|
521
527
|
}
|
|
522
528
|
</div>
|
|
523
529
|
@if (linkOpen()) {
|
|
524
|
-
<div class="mx-editor-linkbar" role="group" [attr.aria-label]="linkLabel()">
|
|
530
|
+
<div class="mx-editor-linkbar" role="group" [attr.aria-label]="linkLabel() ?? msg().link">
|
|
525
531
|
<input
|
|
526
532
|
#linkInput
|
|
527
533
|
class="mx-input"
|
|
528
534
|
data-size="sm"
|
|
529
535
|
type="url"
|
|
530
536
|
placeholder="https://"
|
|
531
|
-
[attr.aria-label]="linkLabel()"
|
|
537
|
+
[attr.aria-label]="linkLabel() ?? msg().link"
|
|
532
538
|
[value]="linkUrl()"
|
|
533
539
|
(input)="linkUrl.set($any($event.target).value)"
|
|
534
540
|
(keydown.enter)="$event.preventDefault(); applyLink()"
|
|
535
541
|
(keydown.escape)="$event.preventDefault(); closeLink()"
|
|
536
542
|
/>
|
|
537
|
-
<button type="button" class="mx-editor-text-button" (click)="applyLink()">
|
|
543
|
+
<button type="button" class="mx-editor-text-button" (click)="applyLink()">{{ msg().apply }}</button>
|
|
538
544
|
@if (linkActive()) {
|
|
539
545
|
<button type="button" class="mx-editor-text-button" (click)="removeLink()">
|
|
540
|
-
|
|
546
|
+
{{ msg().remove }}
|
|
541
547
|
</button>
|
|
542
548
|
}
|
|
543
549
|
<button type="button" class="mx-editor-text-button" (click)="closeLink()">
|
|
544
|
-
|
|
550
|
+
{{ msg().cancel }}
|
|
545
551
|
</button>
|
|
546
552
|
</div>
|
|
547
553
|
}
|
|
@@ -559,7 +565,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
|
|
|
559
565
|
[attr.data-over]="count() > maxLength()! ? '' : null"
|
|
560
566
|
[attr.aria-live]="count() >= maxLength()! * 0.9 ? 'polite' : null"
|
|
561
567
|
>
|
|
562
|
-
{{ count() }} / {{ maxLength() }}<span class="mx-visually-hidden">
|
|
568
|
+
{{ count() }} / {{ maxLength() }}<span class="mx-visually-hidden"> {{ msg().characters }}</span>
|
|
563
569
|
</span>
|
|
564
570
|
</div>
|
|
565
571
|
}
|