@mhmo91/schmancy 0.10.43 → 0.10.44
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/custom-elements.json +2 -2
- package/dist/agent/schmancy.agent.js +785 -779
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/date-range-B2VN7cl_.cjs +138 -0
- package/dist/date-range-B2VN7cl_.cjs.map +1 -0
- package/dist/{date-range-D2NZU5Yg.js → date-range-CDF_5ju_.js} +63 -57
- package/dist/date-range-CDF_5ju_.js.map +1 -0
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/{src-DAtcPmCb.js → src-Bo-vvN6m.js} +1 -1
- package/dist/{src-DAtcPmCb.js.map → src-Bo-vvN6m.js.map} +1 -1
- package/dist/{src-DuRvYagm.cjs → src-MdpH1zth.cjs} +1 -1
- package/dist/{src-DuRvYagm.cjs.map → src-MdpH1zth.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/package.json +1 -1
- package/src/form/fields/date-range/date-range-dialog.ts +14 -1
- package/src/form/fields/date-range/date-range.test.ts +218 -1
- package/src/form/fields/date-range/date-range.ts +42 -18
- package/types/src/form/fields/date-range/date-range.d.ts +4 -0
- package/dist/date-range-CVAWMdar.cjs +0 -138
- package/dist/date-range-CVAWMdar.cjs.map +0 -1
- package/dist/date-range-D2NZU5Yg.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-D2NZU5Yg.js","names":[],"sources":["../node_modules/dayjs/plugin/quarterOfYear.js","../src/form/fields/date-range/date-range-helpers.ts","../src/form/fields/date-range/date-range-dialog.ts","../src/form/fields/date-range/date-range.ts"],"sourcesContent":["!function(t,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=n():\"function\"==typeof define&&define.amd?define(n):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_quarterOfYear=n()}(this,(function(){\"use strict\";var t=\"month\",n=\"quarter\";return function(e,i){var r=i.prototype;r.quarter=function(t){return this.$utils().u(t)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(t-1))};var s=r.add;r.add=function(e,i){return e=Number(e),this.$utils().p(i)===n?this.add(3*e,t):s.bind(this)(e,i)};var u=r.startOf;r.startOf=function(e,i){var r=this.$utils(),s=!!r.u(i)||i;if(r.p(e)===n){var o=this.quarter()-1;return s?this.month(3*o).startOf(t).startOf(\"day\"):this.month(3*o+2).endOf(t).endOf(\"day\")}return u.bind(this)(e,i)}}}));","import dayjs from 'dayjs'\n\n/**\n * Format a date range into a human-readable string\n */\nexport function formatDateRange(\n\tfromValue: string,\n\ttoValue: string,\n\ttype: 'date' | 'datetime-local',\n\tplaceholder: string,\n): string {\n\tif (!fromValue || !toValue) {\n\t\treturn placeholder\n\t}\n\n\tconst fromDate = dayjs(fromValue)\n\tconst toDate = dayjs(toValue)\n\n\tif (!fromDate.isValid() || !toDate.isValid()) {\n\t\treturn placeholder\n\t}\n\n\t// Format times if needed (for datetime-local)\n\tconst fromTime = type === 'datetime-local' ? fromDate.format(' h:mm A') : ''\n\tconst toTime = type === 'datetime-local' ? toDate.format(' h:mm A') : ''\n\n\t// Check if same day\n\tif (fromDate.isSame(toDate, 'day')) {\n\t\treturn `${fromDate.format('ddd, MMM D, YYYY')}${fromTime}`\n\t}\n\n\t// Check if same month and year\n\tif (fromDate.isSame(toDate, 'month') && fromDate.isSame(toDate, 'year')) {\n\t\treturn `${fromDate.format('ddd MMM D')} - ${toDate.format('ddd D, YYYY')}${toTime}`\n\t}\n\n\t// Check if same year\n\tif (fromDate.isSame(toDate, 'year')) {\n\t\treturn `${fromDate.format('ddd MMM D')} - ${toDate.format('ddd MMM D, YYYY')}${toTime}`\n\t}\n\n\t// Different years\n\treturn `${fromDate.format('ddd MMM D, YYYY')}${fromTime} - ${toDate.format('ddd MMM D, YYYY')}${toTime}`\n}\n\n/**\n * Detect the type of date range (full month, full quarter, etc.)\n */\nexport interface DateRangeType {\n\tisFullMonth: boolean\n\tisFullQuarter: boolean\n\tisFullYear: boolean\n\tisFullWeek: boolean\n}\n\nexport function detectDateRangeType(fromDate: dayjs.Dayjs, toDate: dayjs.Dayjs): DateRangeType {\n\treturn {\n\t\tisFullMonth: fromDate.date() === 1 && toDate.isSame(fromDate.endOf('month'), 'day'),\n\t\tisFullQuarter: fromDate.isSame(fromDate.startOf('quarter'), 'day') && toDate.isSame(toDate.endOf('quarter'), 'day'),\n\t\tisFullYear: fromDate.isSame(fromDate.startOf('year'), 'day') && toDate.isSame(toDate.endOf('year'), 'day'),\n\t\tisFullWeek: fromDate.day() === 0 && toDate.day() === 6 && toDate.diff(fromDate, 'days') === 6,\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport dayjs from 'dayjs'\nimport { css, html, nothing } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { when } from 'lit/directives/when.js'\nimport type { SchmancyCalendarChangeEvent, SchmancyCalendarInputEvent } from '../../../calendar/calendar'\n\nexport interface DateRangeDialogPreset {\n\tid: string\n\tlabel: string\n\tstart: string\n\tend: string\n}\n\n/**\n * Picker panel for `<schmancy-date-range>`.\n *\n * Layout: sticky chip quick-rail → continuous-scroll calendar → secondary typed path.\n * Emits composed events that `<schmancy-date-range>` bridges into its own\n * `input`/`change` events.\n *\n * @element schmancy-date-range-dialog\n * @fires calendar-input - Provisional sweep from the calendar { start, end }\n * @fires calendar-change - Committed endpoint from the calendar { start, end }\n * @fires preset-select - A chip was clicked { id, label, start, end }\n */\n@customElement('schmancy-date-range-dialog')\nexport class SchmancyDateRangeDialog extends SchmancyElement {\n\tstatic styles = [\n\t\tcss`\n\t\t\t:host {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\t\t`,\n\t]\n\n\t@property() type: 'date' | 'datetime-local' = 'date'\n\t@property() start: string | null = null\n\t@property() end: string | null = null\n\t@property() min?: string\n\t@property() max?: string\n\t@property() preset: string | null = null\n\t@property({ type: Array }) presets: DateRangeDialogPreset[] = []\n\n\tprivate handleCalendarInput(e: SchmancyCalendarInputEvent) {\n\t\te.stopPropagation()\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('calendar-input', {\n\t\t\t\tdetail: { start: e.detail.start, end: e.detail.end },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleCalendarChange(e: SchmancyCalendarChangeEvent) {\n\t\te.stopPropagation()\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('calendar-change', {\n\t\t\t\tdetail: { start: e.detail.start, end: e.detail.end },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handlePresetClick(p: DateRangeDialogPreset) {\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('preset-select', {\n\t\t\t\tdetail: p,\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleFromChange(e: Event) {\n\t\tconst value = (e.target as HTMLInputElement).value\n\t\tif (!value) return\n\t\t// Swap if end is earlier than the new start\n\t\tconst newStart = value\n\t\tconst newEnd =\n\t\t\tthis.end && dayjs(this.end).isBefore(dayjs(newStart)) ? newStart : (this.end ?? null)\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('calendar-change', {\n\t\t\t\tdetail: { start: newStart, end: newEnd },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\tprivate handleToChange(e: Event) {\n\t\tconst value = (e.target as HTMLInputElement).value\n\t\tif (!value) return\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('calendar-change', {\n\t\t\t\tdetail: { start: this.start ?? null, end: value },\n\t\t\t\tbubbles: true,\n\t\t\t\tcomposed: true,\n\t\t\t}),\n\t\t)\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<div class=\"flex flex-col w-full\" style=\"min-width:280px; max-width:360px\">\n\t\t\t\t<!-- Sticky chip quick-rail -->\n\t\t\t\t<div\n\t\t\t\t\tpart=\"presets\"\n\t\t\t\t\tclass=\"sticky top-0 z-20 bg-surface-default flex flex-wrap gap-2 p-3 border-b border-outline-variant/40\"\n\t\t\t\t>\n\t\t\t\t\t${when(\n\t\t\t\t\t\tthis.presets.length > 0,\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t${repeat(\n\t\t\t\t\t\t\t\tthis.presets,\n\t\t\t\t\t\t\t\tp => p.id,\n\t\t\t\t\t\t\t\tp => html`\n\t\t\t\t\t\t\t\t\t<schmancy-filter-chip\n\t\t\t\t\t\t\t\t\t\tpart=\"preset ${this.preset === p.id ? 'preset-selected' : ''}\"\n\t\t\t\t\t\t\t\t\t\t.value=${p.id}\n\t\t\t\t\t\t\t\t\t\t.selected=${this.preset === p.id}\n\t\t\t\t\t\t\t\t\t\ttitle=\"${p.start} — ${p.end}\"\n\t\t\t\t\t\t\t\t\t\t@click=${() => this.handlePresetClick(p)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t${p.label}\n\t\t\t\t\t\t\t\t\t</schmancy-filter-chip>\n\t\t\t\t\t\t\t\t`,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t`,\n\t\t\t\t\t\t() => nothing,\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Calendar (continuous-scroll range picker) -->\n\t\t\t\t<div part=\"calendar\" class=\"overflow-y-auto\" style=\"max-height:320px\">\n\t\t\t\t\t<schmancy-calendar\n\t\t\t\t\t\tmode=\"range\"\n\t\t\t\t\t\t.type=${this.type}\n\t\t\t\t\t\t.start=${this.start}\n\t\t\t\t\t\t.end=${this.end}\n\t\t\t\t\t\tmin=${ifDefined(this.min)}\n\t\t\t\t\t\tmax=${ifDefined(this.max)}\n\t\t\t\t\t\t@input=${(e: SchmancyCalendarInputEvent) => this.handleCalendarInput(e)}\n\t\t\t\t\t\t@change=${(e: SchmancyCalendarChangeEvent) => this.handleCalendarChange(e)}\n\t\t\t\t\t></schmancy-calendar>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Secondary typed-entry path -->\n\t\t\t\t<div class=\"flex gap-2 p-3 border-t border-outline-variant/40 flex-wrap\">\n\t\t\t\t\t<div class=\"flex-1 min-w-30\">\n\t\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\t\t.type=${this.type}\n\t\t\t\t\t\t\t.label=${'From'}\n\t\t\t\t\t\t\t.value=${this.start ?? ''}\n\t\t\t\t\t\t\tmin=${ifDefined(this.min)}\n\t\t\t\t\t\t\tmax=${ifDefined(this.max)}\n\t\t\t\t\t\t\t@change=${this.handleFromChange}\n\t\t\t\t\t\t></schmancy-input>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"flex-1 min-w-30\">\n\t\t\t\t\t\t<schmancy-input\n\t\t\t\t\t\t\t.type=${this.type}\n\t\t\t\t\t\t\t.label=${'To'}\n\t\t\t\t\t\t\t.value=${this.end ?? ''}\n\t\t\t\t\t\t\tmin=${ifDefined(this.start ?? this.min)}\n\t\t\t\t\t\t\tmax=${ifDefined(this.max)}\n\t\t\t\t\t\t\t@change=${this.handleToChange}\n\t\t\t\t\t\t></schmancy-input>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-date-range-dialog': SchmancyDateRangeDialog\n\t}\n}\n","import dayjs from 'dayjs'\nimport quarterOfYear from 'dayjs/plugin/quarterOfYear'\nimport { html, nothing, PropertyValues } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport {\n\tconcat,\n\texhaustMap,\n\tfinalize,\n\tfromEvent,\n\tmap,\n\tmerge,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport { SchmancyFormField } from '@mixins/index'\nimport { show } from '../../../overlay/overlay.service'\nimport { detectDateRangeType, formatDateRange } from './date-range-helpers'\nimport './date-range-dialog'\nimport type { DateRangeDialogPreset } from './date-range-dialog'\n\ndayjs.extend(quarterOfYear)\n\n// ---------------------------------------------------------------------------\n// Default built-in presets\n// ---------------------------------------------------------------------------\n\nfunction buildDefaultPresets(): DateRangeDialogPreset[] {\n\treturn [\n\t\t{\n\t\t\tid: 'today',\n\t\t\tlabel: 'Today',\n\t\t\tstart: dayjs().startOf('day').format('YYYY-MM-DD'),\n\t\t\tend: dayjs().endOf('day').format('YYYY-MM-DD'),\n\t\t},\n\t\t{\n\t\t\tid: 'yesterday',\n\t\t\tlabel: 'Yesterday',\n\t\t\tstart: dayjs().subtract(1, 'day').startOf('day').format('YYYY-MM-DD'),\n\t\t\tend: dayjs().subtract(1, 'day').endOf('day').format('YYYY-MM-DD'),\n\t\t},\n\t\t{\n\t\t\tid: 'last7',\n\t\t\tlabel: 'Last 7 days',\n\t\t\tstart: dayjs().subtract(6, 'day').startOf('day').format('YYYY-MM-DD'),\n\t\t\tend: dayjs().endOf('day').format('YYYY-MM-DD'),\n\t\t},\n\t\t{\n\t\t\tid: 'last30',\n\t\t\tlabel: 'Last 30 days',\n\t\t\tstart: dayjs().subtract(29, 'day').startOf('day').format('YYYY-MM-DD'),\n\t\t\tend: dayjs().endOf('day').format('YYYY-MM-DD'),\n\t\t},\n\t\t{\n\t\t\tid: 'thisWeek',\n\t\t\tlabel: 'This week',\n\t\t\tstart: dayjs().startOf('week').format('YYYY-MM-DD'),\n\t\t\tend: dayjs().endOf('week').format('YYYY-MM-DD'),\n\t\t},\n\t\t{\n\t\t\tid: 'thisMonth',\n\t\t\tlabel: 'This month',\n\t\t\tstart: dayjs().startOf('month').format('YYYY-MM-DD'),\n\t\t\tend: dayjs().endOf('month').format('YYYY-MM-DD'),\n\t\t},\n\t\t{\n\t\t\tid: 'lastMonth',\n\t\t\tlabel: 'Last month',\n\t\t\tstart: dayjs().subtract(1, 'month').startOf('month').format('YYYY-MM-DD'),\n\t\t\tend: dayjs().subtract(1, 'month').endOf('month').format('YYYY-MM-DD'),\n\t\t},\n\t\t{\n\t\t\tid: 'thisYear',\n\t\t\tlabel: 'This year',\n\t\t\tstart: dayjs().startOf('year').format('YYYY-MM-DD'),\n\t\t\tend: dayjs().endOf('year').format('YYYY-MM-DD'),\n\t\t},\n\t]\n}\n\n// ---------------------------------------------------------------------------\n// Event types\n// ---------------------------------------------------------------------------\n\nexport type SchmancyDateRangeInputEvent = CustomEvent<{\n\tstart: string | null\n\tend: string | null\n}>\n\nexport type SchmancyDateRangeChangeEvent = CustomEvent<{\n\tstart: string | null\n\tend: string | null\n\tpreset: string | null\n}>\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\n/**\n * A date range selector composing `<schmancy-calendar mode=\"range\">` with a\n * sticky preset chip quick-rail and a secondary typed-entry path.\n *\n * Public API: flat ISO `start`/`end`, `preset` read-back, `presets` array.\n * FormData: `${name}.start` / `${name}.end` (empty endpoint omitted).\n *\n * @element schmancy-date-range\n * @fires input - Provisional sweep preview { start, end }\n * @fires change - Committed range change { start, end, preset }\n */\n@customElement('schmancy-date-range')\nexport class SchmancyDateRange extends SchmancyFormField() {\n\t// `name`, `disabled`, `required`, `error`, `validationMessage`, `id`,\n\t// `validateOn`, `touched`, `submitted`, `markTouched`, `markSubmitted`,\n\t// FACE wiring, FIELD_CONNECT_EVENT dispatch — all from the mixin.\n\n\t@property() type: 'date' | 'datetime-local' = 'date'\n\t@property() start: string | null = null\n\t@property() end: string | null = null\n\n\t@property({ type: Array }) presets: DateRangeDialogPreset[] = buildDefaultPresets()\n\n\t/** Selected preset id; null = custom range. Reflects to attribute. */\n\t@property({ reflect: true }) preset: string | null = null\n\n\t@property() min?: string\n\t@property() max?: string\n\t@property() placeholder = 'Select date range'\n\t@property({ type: Boolean }) clearable = true\n\t@property() step?: 'day' | 'week' | 'month' | 'year' | number\n\t/** Collapses to an icon-only button on narrow viewports. */\n\t@property({ type: Boolean }) collapse = false\n\n\t// Session subjects — ONE_PIPELINE_ONE_SUBSCRIBE in connectedCallback.\n\tprivate readonly open$ = new Subject<MouseEvent | undefined>()\n\tprivate readonly close$ = new Subject<void>()\n\tprivate readonly announce$ = new Subject<string>()\n\n\t@state() private isOpen = false\n\t@state() private announceMessage = ''\n\n\t// Default-capture for formResetCallback\n\tprivate startDefault: string | null = null\n\tprivate endDefault: string | null = null\n\tprivate presetDefault: string | null = null\n\n\toverride disconnectedCallback(): void {\n\t\tsuper.disconnectedCallback()\n\t\tthis.isOpen = false\n\t}\n\n\toverride connectedCallback(): void {\n\t\tsuper.connectedCallback()\n\n\t\t// One pipeline (rxjs ONE_PIPELINE_ONE_SUBSCRIBE).\n\t\tmerge(\n\t\t\t// Overlay session (rxjs SESSIONS_USE_HIGHER_ORDER_OBSERVABLES).\n\t\t\tthis.open$.pipe(\n\t\t\t\ttap(() => {\n\t\t\t\t\tthis.isOpen = true\n\t\t\t\t}),\n\t\t\t\texhaustMap(anchor =>\n\t\t\t\t\tshow(\n\t\t\t\t\t\t// Reactive factory — closed-over props read fresh on each mount.\n\t\t\t\t\t\t() => html`\n\t\t\t\t\t\t\t<schmancy-date-range-dialog\n\t\t\t\t\t\t\t\t.type=${this.type}\n\t\t\t\t\t\t\t\t.start=${this.start}\n\t\t\t\t\t\t\t\t.end=${this.end}\n\t\t\t\t\t\t\t\t.min=${this.min}\n\t\t\t\t\t\t\t\t.max=${this.max}\n\t\t\t\t\t\t\t\t.preset=${this.preset}\n\t\t\t\t\t\t\t\t.presets=${this.presets}\n\t\t\t\t\t\t\t\t@calendar-input=${(ev: CustomEvent<{ start: string | null; end: string | null }>) => {\n\t\t\t\t\t\t\t\t\tev.stopPropagation()\n\t\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\t\tnew CustomEvent('input', {\n\t\t\t\t\t\t\t\t\t\t\tdetail: { start: ev.detail.start, end: ev.detail.end },\n\t\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t@calendar-change=${(ev: CustomEvent<{ start: string | null; end: string | null }>) => {\n\t\t\t\t\t\t\t\t\tev.stopPropagation()\n\t\t\t\t\t\t\t\t\tthis.commitRange(ev.detail.start, ev.detail.end, null)\n\t\t\t\t\t\t\t\t\t// Two endpoints set → close overlay\n\t\t\t\t\t\t\t\t\tif (ev.detail.start && ev.detail.end) {\n\t\t\t\t\t\t\t\t\t\tev.target?.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }))\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t@preset-select=${(ev: CustomEvent<DateRangeDialogPreset>) => {\n\t\t\t\t\t\t\t\t\tev.stopPropagation()\n\t\t\t\t\t\t\t\t\tthis.commitRange(ev.detail.start, ev.detail.end, ev.detail.id)\n\t\t\t\t\t\t\t\t\tev.target?.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }))\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t></schmancy-date-range-dialog>\n\t\t\t\t\t\t`,\n\t\t\t\t\t\t{ anchor },\n\t\t\t\t\t).pipe(\n\t\t\t\t\t\ttakeUntil(this.close$),\n\t\t\t\t\t\tfinalize(() => {\n\t\t\t\t\t\t\tthis.isOpen = false\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t),\n\n\t\t\t// Screen-reader announcements.\n\t\t\tthis.announce$.pipe(\n\t\t\t\tswitchMap(message => concat(of(message), timer(1500).pipe(map(() => '')))),\n\t\t\t\ttap(message => {\n\t\t\t\t\tthis.announceMessage = message\n\t\t\t\t}),\n\t\t\t),\n\n\t\t\t// Document keyboard navigation.\n\t\t\tfromEvent<KeyboardEvent>(document, 'keydown').pipe(tap(ev => this.handleKeyDown(ev))),\n\t\t)\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe()\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// Mixin overrides — FormData, validity, dirty, reset\n\t// -------------------------------------------------------------------------\n\n\toverride willUpdate(changed: PropertyValues): void {\n\t\tsuper.willUpdate(changed)\n\t\tif (changed.has('start') || changed.has('end') || changed.has('name') || changed.has('disabled')) {\n\t\t\tif (this.name && !this.disabled) {\n\t\t\t\tconst fd = new FormData()\n\t\t\t\tif (this.start) fd.append(`${this.name}.start`, this.start)\n\t\t\t\tif (this.end) fd.append(`${this.name}.end`, this.end)\n\t\t\t\tthis.internals?.setFormValue(fd.has(`${this.name}.start`) || fd.has(`${this.name}.end`) ? fd : null)\n\t\t\t} else {\n\t\t\t\tthis.internals?.setFormValue(null)\n\t\t\t}\n\t\t\tthis.checkValidity()\n\t\t}\n\t\tif (changed.has('required')) {\n\t\t\tthis.checkValidity()\n\t\t}\n\t}\n\n\toverride checkValidity(): boolean {\n\t\tif (this.disabled) {\n\t\t\tthis.internals?.setValidity({})\n\t\t\treturn true\n\t\t}\n\t\tif (this.required && (!this.start || !this.end)) {\n\t\t\tconst msg = 'Please select a complete date range.'\n\t\t\tthis.internals?.setValidity({ valueMissing: true }, msg)\n\t\t\tif (this.shouldShowError()) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.validationMessage = msg\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t\tif (this.start && this.end && this.end < this.start) {\n\t\t\tconst msg = 'End date must be on or after start date.'\n\t\t\tthis.internals?.setValidity({ customError: true }, msg)\n\t\t\tif (this.shouldShowError()) {\n\t\t\t\tthis.error = true\n\t\t\t\tthis.validationMessage = msg\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t\tthis.internals?.setValidity({})\n\t\tif (this.shouldShowError()) {\n\t\t\tthis.error = false\n\t\t\tthis.validationMessage = ''\n\t\t}\n\t\treturn true\n\t}\n\n\toverride toFormEntries(): Array<[string, FormDataEntryValue]> {\n\t\tif (!this.name || this.disabled) return []\n\t\tconst entries: Array<[string, FormDataEntryValue]> = []\n\t\tif (this.start) entries.push([`${this.name}.start`, this.start])\n\t\tif (this.end) entries.push([`${this.name}.end`, this.end])\n\t\treturn entries\n\t}\n\n\toverride get dirty(): boolean {\n\t\treturn this.start !== this.startDefault || this.end !== this.endDefault\n\t}\n\n\toverride firstUpdated(changed: PropertyValues): void {\n\t\tsuper.firstUpdated(changed)\n\t\tthis.startDefault = this.start\n\t\tthis.endDefault = this.end\n\t\tthis.presetDefault = this.preset\n\t}\n\n\toverride resetForm(): void {\n\t\tthis.start = this.startDefault\n\t\tthis.end = this.endDefault\n\t\tthis.preset = this.presetDefault\n\t\tthis.error = false\n\t\tthis.validationMessage = ''\n\t\tthis.touched = false\n\t\tthis.submitted = false\n\t\tthis.internals?.setValidity({})\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// Internal helpers\n\t// -------------------------------------------------------------------------\n\n\tprivate commitRange(start: string | null, end: string | null, presetId: string | null): void {\n\t\tthis.start = start\n\t\tthis.end = end\n\t\tthis.preset = presetId\n\t\tthis.announce$.next(`Date range: ${this.displayLabel()}`)\n\t\tthis.emitChange({ start, end, preset: presetId })\n\t}\n\n\tprivate displayLabel(): string {\n\t\tif (this.preset) {\n\t\t\tconst p = this.presets.find(x => x.id === this.preset)\n\t\t\tif (p) return p.label\n\t\t}\n\t\treturn formatDateRange(this.start ?? '', this.end ?? '', this.type, this.placeholder)\n\t}\n\n\tprivate toggleDropdown(e: MouseEvent) {\n\t\te.stopPropagation()\n\t\tif (this.disabled || this.step !== undefined) return\n\t\tif (this.isOpen) {\n\t\t\tthis.close$.next()\n\t\t} else {\n\t\t\tthis.open$.next(e)\n\t\t}\n\t}\n\n\tprivate shiftDateRange(direction: number, e: Event) {\n\t\te.stopPropagation()\n\t\tif (!this.start || !this.end) return\n\n\t\tconst fromDate = dayjs(this.start)\n\t\tconst toDate = dayjs(this.end)\n\t\tif (!fromDate.isValid() || !toDate.isValid()) return\n\n\t\tconst dateFormat = this.type === 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DDTHH:mm'\n\t\tconst dir = direction > 0 ? 1 : -1\n\t\tconst daysDiff = toDate.diff(fromDate, 'day') + 1\n\n\t\tlet amount: number\n\t\tlet unit: dayjs.ManipulateType\n\n\t\tif (this.step !== undefined) {\n\t\t\tif (typeof this.step === 'number') {\n\t\t\t\tamount = dir * this.step\n\t\t\t\tunit = 'day'\n\t\t\t} else if (this.step === 'day') {\n\t\t\t\tamount = dir * daysDiff\n\t\t\t\tunit = 'day'\n\t\t\t} else {\n\t\t\t\tamount = dir\n\t\t\t\tunit = this.step\n\t\t\t}\n\t\t} else {\n\t\t\tconst rangeType = detectDateRangeType(fromDate, toDate)\n\t\t\tif (rangeType.isFullYear) {\n\t\t\t\tamount = dir\n\t\t\t\tunit = 'year'\n\t\t\t} else if (rangeType.isFullMonth) {\n\t\t\t\tamount = dir\n\t\t\t\tunit = 'month'\n\t\t\t} else if (rangeType.isFullWeek) {\n\t\t\t\tamount = dir\n\t\t\t\tunit = 'week'\n\t\t\t} else {\n\t\t\t\tamount = dir * daysDiff\n\t\t\t\tunit = 'day'\n\t\t\t}\n\t\t}\n\n\t\tconst newFrom = fromDate.add(amount, unit)\n\t\tconst newTo = toDate.add(amount, unit)\n\n\t\tif (this.min && newFrom.isBefore(dayjs(this.min))) return\n\t\tif (this.max && newTo.isAfter(dayjs(this.max))) return\n\n\t\tthis.commitRange(newFrom.format(dateFormat), newTo.format(dateFormat), null)\n\t}\n\n\tprivate handleKeyDown(ev: KeyboardEvent) {\n\t\tif (!this.start || !this.end || this.disabled) return\n\t\tconst target = ev.target as Node | null\n\t\tif (target !== this && !this.contains(target)) return\n\n\t\tswitch (ev.key) {\n\t\t\tcase 'PageUp':\n\t\t\t\tthis.shiftDateRange(-1, ev)\n\t\t\t\tev.preventDefault()\n\t\t\t\tbreak\n\t\t\tcase 'PageDown':\n\t\t\t\tthis.shiftDateRange(1, ev)\n\t\t\t\tev.preventDefault()\n\t\t\t\tbreak\n\t\t\tcase 'Home':\n\t\t\t\tif (ev.ctrlKey) {\n\t\t\t\t\tconst fmt = this.type === 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DDTHH:mm'\n\t\t\t\t\tconst from = dayjs(this.start)\n\t\t\t\t\tconst to = dayjs(this.end)\n\t\t\t\t\tconst monthStart = from.startOf('month')\n\t\t\t\t\tthis.commitRange(\n\t\t\t\t\t\tmonthStart.format(fmt),\n\t\t\t\t\t\tmonthStart.add(to.diff(from, 'day'), 'day').format(fmt),\n\t\t\t\t\t\tnull,\n\t\t\t\t\t)\n\t\t\t\t\tev.preventDefault()\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'End':\n\t\t\t\tif (ev.ctrlKey) {\n\t\t\t\t\tconst fmt = this.type === 'date' ? 'YYYY-MM-DD' : 'YYYY-MM-DDTHH:mm'\n\t\t\t\t\tconst from = dayjs(this.start)\n\t\t\t\t\tconst to = dayjs(this.end)\n\t\t\t\t\tconst monthEnd = to.endOf('month')\n\t\t\t\t\tthis.commitRange(\n\t\t\t\t\t\tmonthEnd.subtract(to.diff(from, 'day'), 'day').format(fmt),\n\t\t\t\t\t\tmonthEnd.format(fmt),\n\t\t\t\t\t\tnull,\n\t\t\t\t\t)\n\t\t\t\t\tev.preventDefault()\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate canNavigateBackward(): boolean {\n\t\tif (!this.start || !this.min) return true\n\t\treturn dayjs(this.start).isAfter(dayjs(this.min))\n\t}\n\n\tprivate canNavigateForward(): boolean {\n\t\tif (!this.end || !this.max) return true\n\t\treturn dayjs(this.end).isBefore(dayjs(this.max))\n\t}\n\n\t// -------------------------------------------------------------------------\n\t// Render\n\t// -------------------------------------------------------------------------\n\n\trender() {\n\t\tconst showError = this.error && !!this.validationMessage\n\t\tconst errorRing = showError ? ' rounded outline outline-2 outline-error-default' : ''\n\t\tconst label = this.displayLabel()\n\n\t\treturn html`\n\t\t\t<div class=\"relative ${this.disabled ? 'opacity-60 pointer-events-none' : ''}\">\n\t\t\t\t<!-- Screen reader announcements -->\n\t\t\t\t<div class=\"sr-only\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">${this.announceMessage}</div>\n\n\t\t\t\t<!-- Collapsed: icon-only on narrow viewports when collapse=true -->\n\t\t\t\t<schmancy-icon-button\n\t\t\t\t\tclass=\"${this.collapse ? 'lg:hidden' : 'hidden'}${errorRing}\"\n\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-invalid=${showError ? 'true' : 'false'}\n\t\t\t\t\taria-label=\"Select date range. Current: ${label}\"\n\t\t\t\t\t@click=${(e: MouseEvent) => this.toggleDropdown(e)}\n\t\t\t\t\t?disabled=${this.disabled}\n\t\t\t\t>\n\t\t\t\t\tdate_range\n\t\t\t\t</schmancy-icon-button>\n\n\t\t\t\t<!-- Full trigger row: [← | range label | →] -->\n\t\t\t\t<section\n\t\t\t\t\t@click=${(ev: Event) => ev.stopPropagation()}\n\t\t\t\t\taria-invalid=${showError ? 'true' : 'false'}\n\t\t\t\t\tclass=\"${this.collapse ? 'hidden lg:flex' : 'flex'}${errorRing}\"\n\t\t\t\t>\n\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label=\"Previous ${this.preset ?? 'date range'}\"\n\t\t\t\t\t\t@click=${(e: Event) => this.shiftDateRange(-1, e)}\n\t\t\t\t\t\t?disabled=${this.disabled || !this.start || !this.end || !this.canNavigateBackward()}\n\t\t\t\t\t>\n\t\t\t\t\t\tarrow_left\n\t\t\t\t\t</schmancy-icon-button>\n\n\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\tclass=\"w-max\"\n\t\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t\taria-expanded=${this.isOpen}\n\t\t\t\t\t\taria-label=\"Select date range. Current: ${label}\"\n\t\t\t\t\t\taria-readonly=\"${this.step !== undefined}\"\n\t\t\t\t\t\t@click=${(e: MouseEvent) => this.toggleDropdown(e)}\n\t\t\t\t\t\t?disabled=${this.disabled}\n\t\t\t\t\t\tstyle=\"${this.step !== undefined ? 'cursor:default;' : ''}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t${label}\n\t\t\t\t\t</schmancy-button>\n\n\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label=\"Next ${this.preset ?? 'date range'}\"\n\t\t\t\t\t\t@click=${(e: Event) => this.shiftDateRange(1, e)}\n\t\t\t\t\t\t?disabled=${this.disabled || !this.start || !this.end || !this.canNavigateForward()}\n\t\t\t\t\t>\n\t\t\t\t\t\tarrow_right\n\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t</section>\n\n\t\t\t\t${showError\n\t\t\t\t\t? html`<div role=\"alert\" class=\"text-error-default text-sm mt-1\">${this.validationMessage}</div>`\n\t\t\t\t\t: nothing}\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-date-range': SchmancyDateRange\n\t}\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|