@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.
Files changed (38) hide show
  1. package/custom-elements.json +2 -2
  2. package/dist/agent/schmancy.agent.js +785 -779
  3. package/dist/agent/schmancy.agent.js.map +1 -1
  4. package/dist/agent/schmancy.manifest.json +1 -1
  5. package/dist/badge.cjs +1 -1
  6. package/dist/badge.js +1 -1
  7. package/dist/content-drawer.cjs +1 -1
  8. package/dist/content-drawer.js +1 -1
  9. package/dist/date-range-B2VN7cl_.cjs +138 -0
  10. package/dist/date-range-B2VN7cl_.cjs.map +1 -0
  11. package/dist/{date-range-D2NZU5Yg.js → date-range-CDF_5ju_.js} +63 -57
  12. package/dist/date-range-CDF_5ju_.js.map +1 -0
  13. package/dist/date-range.cjs +1 -1
  14. package/dist/date-range.js +1 -1
  15. package/dist/form.cjs +1 -1
  16. package/dist/form.js +1 -1
  17. package/dist/handover/agent-runtime-followups.md +1 -1
  18. package/dist/handover/agent-runtime-v1.md +3 -3
  19. package/dist/index.cjs +1 -1
  20. package/dist/index.js +2 -2
  21. package/dist/nav-drawer.cjs +1 -1
  22. package/dist/nav-drawer.js +1 -1
  23. package/dist/navigation-bar.cjs +1 -1
  24. package/dist/navigation-bar.js +1 -1
  25. package/dist/{src-DAtcPmCb.js → src-Bo-vvN6m.js} +1 -1
  26. package/dist/{src-DAtcPmCb.js.map → src-Bo-vvN6m.js.map} +1 -1
  27. package/dist/{src-DuRvYagm.cjs → src-MdpH1zth.cjs} +1 -1
  28. package/dist/{src-DuRvYagm.cjs.map → src-MdpH1zth.cjs.map} +1 -1
  29. package/dist/teleport.cjs +1 -1
  30. package/dist/teleport.js +1 -1
  31. package/package.json +1 -1
  32. package/src/form/fields/date-range/date-range-dialog.ts +14 -1
  33. package/src/form/fields/date-range/date-range.test.ts +218 -1
  34. package/src/form/fields/date-range/date-range.ts +42 -18
  35. package/types/src/form/fields/date-range/date-range.d.ts +4 -0
  36. package/dist/date-range-CVAWMdar.cjs +0 -138
  37. package/dist/date-range-CVAWMdar.cjs.map +0 -1
  38. package/dist/date-range-D2NZU5Yg.js.map +0 -1
@@ -4630,7 +4630,7 @@
4630
4630
  "type": {
4631
4631
  "text": "DateRangeDialogPreset[]"
4632
4632
  },
4633
- "default": "buildDefaultPresets()"
4633
+ "default": "this.defaultPresetsRef"
4634
4634
  },
4635
4635
  {
4636
4636
  "name": "preset",
package/dist/badge.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-DuRvYagm.cjs`);Object.defineProperty(exports,`ScBadgeV2`,{enumerable:!0,get:function(){return e.w}}),Object.defineProperty(exports,`SchmancyBadgeV2`,{enumerable:!0,get:function(){return e.T}});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-MdpH1zth.cjs`);Object.defineProperty(exports,`ScBadgeV2`,{enumerable:!0,get:function(){return e.w}}),Object.defineProperty(exports,`SchmancyBadgeV2`,{enumerable:!0,get:function(){return e.T}});
package/dist/badge.js CHANGED
@@ -1,2 +1,2 @@
1
- import { T as e, w as t } from "./src-DAtcPmCb.js";
1
+ import { T as e, w as t } from "./src-Bo-vvN6m.js";
2
2
  export { t as ScBadgeV2, e as SchmancyBadgeV2 };
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-DuRvYagm.cjs`);Object.defineProperty(exports,`SchmancyContentDrawer`,{enumerable:!0,get:function(){return e._}}),exports.SchmancyContentDrawerID=e.v,Object.defineProperty(exports,`SchmancyContentDrawerMain`,{enumerable:!0,get:function(){return e.g}}),exports.SchmancyContentDrawerMaxHeight=e.y,exports.SchmancyContentDrawerMinWidth=e.b,Object.defineProperty(exports,`SchmancyContentDrawerSheet`,{enumerable:!0,get:function(){return e.h}}),exports.SchmancyContentDrawerSheetMode=e.x,exports.SchmancyContentDrawerSheetState=e.S,exports.schmancyContentDrawer=e.C;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-MdpH1zth.cjs`);Object.defineProperty(exports,`SchmancyContentDrawer`,{enumerable:!0,get:function(){return e._}}),exports.SchmancyContentDrawerID=e.v,Object.defineProperty(exports,`SchmancyContentDrawerMain`,{enumerable:!0,get:function(){return e.g}}),exports.SchmancyContentDrawerMaxHeight=e.y,exports.SchmancyContentDrawerMinWidth=e.b,Object.defineProperty(exports,`SchmancyContentDrawerSheet`,{enumerable:!0,get:function(){return e.h}}),exports.SchmancyContentDrawerSheetMode=e.x,exports.SchmancyContentDrawerSheetState=e.S,exports.schmancyContentDrawer=e.C;
@@ -1,2 +1,2 @@
1
- import { C as e, S as t, _ as n, b as r, g as i, h as a, v as o, x as s, y as c } from "./src-DAtcPmCb.js";
1
+ import { C as e, S as t, _ as n, b as r, g as i, h as a, v as o, x as s, y as c } from "./src-Bo-vvN6m.js";
2
2
  export { n as SchmancyContentDrawer, o as SchmancyContentDrawerID, i as SchmancyContentDrawerMain, c as SchmancyContentDrawerMaxHeight, r as SchmancyContentDrawerMinWidth, a as SchmancyContentDrawerSheet, s as SchmancyContentDrawerSheetMode, t as SchmancyContentDrawerSheetState, e as schmancyContentDrawer };
@@ -0,0 +1,138 @@
1
+ const e=require(`./chunk-CncqDLb2.cjs`),t=require(`./SchmancyElement-CeKrBW2j.cjs`),n=require(`./mixins-Cjn20BQH.cjs`),r=require(`./overlay.service-MMTiW2T3.cjs`),i=require(`./dayjs.min-CvRZTfam.cjs`);let a=require(`rxjs`),o=require(`lit/decorators.js`),s=require(`lit`),c=require(`lit/directives/if-defined.js`),l=require(`lit/directives/repeat.js`),u=require(`lit/directives/when.js`);var d=e.t((e,t)=>{var n=e,r=function(){"use strict";var e=`month`,t=`quarter`;return function(n,r){var i=r.prototype;i.quarter=function(e){return this.$utils().u(e)?Math.ceil((this.month()+1)/3):this.month(this.month()%3+3*(e-1))};var a=i.add;i.add=function(n,r){return n=Number(n),this.$utils().p(r)===t?this.add(3*n,e):a.bind(this)(n,r)};var o=i.startOf;i.startOf=function(n,r){var i=this.$utils(),a=!!i.u(r)||r;if(i.p(n)===t){var s=this.quarter()-1;return a?this.month(3*s).startOf(e).startOf(`day`):this.month(3*s+2).endOf(e).endOf(`day`)}return o.bind(this)(n,r)}}};typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self).dayjs_plugin_quarterOfYear=r()}),f=e.r(d(),1),p=e.r(i.t(),1),m=class extends t.t{constructor(...e){super(...e),this.type=`date`,this.start=null,this.end=null,this.preset=null,this.presets=[]}static{this.styles=[s.css`
2
+ :host {
3
+ display: block;
4
+ }
5
+ `]}handleCalendarInput(e){e.stopPropagation(),this.dispatchEvent(new CustomEvent(`calendar-input`,{detail:{start:e.detail.start,end:e.detail.end},bubbles:!0,composed:!0}))}handleCalendarChange(e){e.stopPropagation();let t=this.type===`datetime-local`;this.dispatchEvent(new CustomEvent(`calendar-change`,{detail:{start:t&&e.detail.start&&!e.detail.start.includes(`T`)?`${e.detail.start}T00:00`:e.detail.start,end:t&&e.detail.end&&!e.detail.end.includes(`T`)?`${e.detail.end}T23:59`:e.detail.end},bubbles:!0,composed:!0}))}handlePresetClick(e){this.dispatchEvent(new CustomEvent(`preset-select`,{detail:e,bubbles:!0,composed:!0}))}handleFromChange(e){let t=e.target.value;if(!t)return;let n=t,r=this.end&&(0,p.default)(this.end).isBefore((0,p.default)(n))?n:this.end??null;this.dispatchEvent(new CustomEvent(`calendar-change`,{detail:{start:n,end:r},bubbles:!0,composed:!0}))}handleToChange(e){let t=e.target.value;t&&this.dispatchEvent(new CustomEvent(`calendar-change`,{detail:{start:this.start??null,end:t},bubbles:!0,composed:!0}))}render(){return s.html`
6
+ <div class="flex flex-col w-full" style="min-width:280px; max-width:360px">
7
+ <!-- Sticky chip quick-rail -->
8
+ <div
9
+ part="presets"
10
+ class="sticky top-0 z-20 bg-surface-default flex flex-wrap gap-2 p-3 border-b border-outline-variant/40"
11
+ >
12
+ ${(0,u.when)(this.presets.length>0,()=>s.html`
13
+ ${(0,l.repeat)(this.presets,e=>e.id,e=>s.html`
14
+ <schmancy-filter-chip
15
+ part="preset ${this.preset===e.id?`preset-selected`:``}"
16
+ .value=${e.id}
17
+ .selected=${this.preset===e.id}
18
+ title="${e.start} — ${e.end}"
19
+ @click=${()=>this.handlePresetClick(e)}
20
+ >
21
+ ${e.label}
22
+ </schmancy-filter-chip>
23
+ `)}
24
+ `,()=>s.nothing)}
25
+ </div>
26
+
27
+ <!-- Calendar (continuous-scroll range picker) -->
28
+ <div part="calendar" class="overflow-y-auto" style="max-height:320px">
29
+ <schmancy-calendar
30
+ mode="range"
31
+ .type=${this.type}
32
+ .start=${this.start}
33
+ .end=${this.end}
34
+ min=${(0,c.ifDefined)(this.min)}
35
+ max=${(0,c.ifDefined)(this.max)}
36
+ @input=${e=>this.handleCalendarInput(e)}
37
+ @change=${e=>this.handleCalendarChange(e)}
38
+ ></schmancy-calendar>
39
+ </div>
40
+
41
+ <!-- Secondary typed-entry path -->
42
+ <div class="flex gap-2 p-3 border-t border-outline-variant/40 flex-wrap">
43
+ <div class="flex-1 min-w-30">
44
+ <schmancy-input
45
+ .type=${this.type}
46
+ .label=${`From`}
47
+ .value=${this.start??``}
48
+ min=${(0,c.ifDefined)(this.min)}
49
+ max=${(0,c.ifDefined)(this.max)}
50
+ @change=${this.handleFromChange}
51
+ ></schmancy-input>
52
+ </div>
53
+ <div class="flex-1 min-w-30">
54
+ <schmancy-input
55
+ .type=${this.type}
56
+ .label=${`To`}
57
+ .value=${this.end??``}
58
+ min=${(0,c.ifDefined)(this.start??this.min)}
59
+ max=${(0,c.ifDefined)(this.max)}
60
+ @change=${this.handleToChange}
61
+ ></schmancy-input>
62
+ </div>
63
+ </div>
64
+ </div>
65
+ `}};function h(e=`date`){let t=e===`datetime-local`?`YYYY-MM-DDTHH:mm`:`YYYY-MM-DD`;return[{id:`today`,label:`Today`,start:(0,p.default)().startOf(`day`).format(t),end:(0,p.default)().endOf(`day`).format(t)},{id:`yesterday`,label:`Yesterday`,start:(0,p.default)().subtract(1,`day`).startOf(`day`).format(t),end:(0,p.default)().subtract(1,`day`).endOf(`day`).format(t)},{id:`last7`,label:`Last 7 days`,start:(0,p.default)().subtract(6,`day`).startOf(`day`).format(t),end:(0,p.default)().endOf(`day`).format(t)},{id:`last30`,label:`Last 30 days`,start:(0,p.default)().subtract(29,`day`).startOf(`day`).format(t),end:(0,p.default)().endOf(`day`).format(t)},{id:`thisWeek`,label:`This week`,start:(0,p.default)().startOf(`week`).format(t),end:(0,p.default)().endOf(`week`).format(t)},{id:`thisMonth`,label:`This month`,start:(0,p.default)().startOf(`month`).format(t),end:(0,p.default)().endOf(`month`).format(t)},{id:`lastMonth`,label:`Last month`,start:(0,p.default)().subtract(1,`month`).startOf(`month`).format(t),end:(0,p.default)().subtract(1,`month`).endOf(`month`).format(t)},{id:`thisYear`,label:`This year`,start:(0,p.default)().startOf(`year`).format(t),end:(0,p.default)().endOf(`year`).format(t)}]}t.u([(0,o.property)()],m.prototype,`type`,void 0),t.u([(0,o.property)()],m.prototype,`start`,void 0),t.u([(0,o.property)()],m.prototype,`end`,void 0),t.u([(0,o.property)()],m.prototype,`min`,void 0),t.u([(0,o.property)()],m.prototype,`max`,void 0),t.u([(0,o.property)()],m.prototype,`preset`,void 0),t.u([(0,o.property)({type:Array})],m.prototype,`presets`,void 0),m=t.u([(0,o.customElement)(`schmancy-date-range-dialog`)],m),p.default.extend(f.default);var g=class extends n.o(){constructor(...e){super(...e),this.type=`date`,this.start=null,this.end=null,this.defaultPresetsRef=h(),this.presets=this.defaultPresetsRef,this.usingDefaultPresets=!0,this.preset=null,this.placeholder=`Select date range`,this.clearable=!0,this.collapse=!1,this.open$=new a.Subject,this.close$=new a.Subject,this.announce$=new a.Subject,this.isOpen=!1,this.announceMessage=``,this.startDefault=null,this.endDefault=null,this.presetDefault=null}disconnectedCallback(){super.disconnectedCallback(),this.isOpen=!1}connectedCallback(){super.connectedCallback(),(0,a.merge)(this.open$.pipe((0,a.tap)(()=>{this.isOpen=!0}),(0,a.exhaustMap)(e=>r.o(()=>s.html`
66
+ <schmancy-date-range-dialog
67
+ .type=${this.type}
68
+ .start=${this.start}
69
+ .end=${this.end}
70
+ .min=${this.min}
71
+ .max=${this.max}
72
+ .preset=${this.preset}
73
+ .presets=${this.presets}
74
+ @calendar-input=${e=>{e.stopPropagation(),this.dispatchEvent(new CustomEvent(`input`,{detail:{start:e.detail.start,end:e.detail.end},bubbles:!0,composed:!0}))}}
75
+ @calendar-change=${e=>{e.stopPropagation(),this.commitRange(e.detail.start,e.detail.end,null),e.detail.start&&e.detail.end&&e.target?.dispatchEvent(new CustomEvent(`close`,{bubbles:!0,composed:!0}))}}
76
+ @preset-select=${e=>{e.stopPropagation(),this.commitRange(e.detail.start,e.detail.end,e.detail.id),e.target?.dispatchEvent(new CustomEvent(`close`,{bubbles:!0,composed:!0}))}}
77
+ ></schmancy-date-range-dialog>
78
+ `,{anchor:e}).pipe((0,a.takeUntil)(this.close$),(0,a.finalize)(()=>{this.isOpen=!1})))),this.announce$.pipe((0,a.switchMap)(e=>(0,a.concat)((0,a.of)(e),(0,a.timer)(1500).pipe((0,a.map)(()=>``)))),(0,a.tap)(e=>{this.announceMessage=e})),(0,a.fromEvent)(document,`keydown`).pipe((0,a.tap)(e=>this.handleKeyDown(e)))).pipe((0,a.takeUntil)(this.disconnecting)).subscribe()}willUpdate(e){if(super.willUpdate(e),e.has(`presets`)&&this.presets!==this.defaultPresetsRef&&(this.usingDefaultPresets=!1),e.has(`type`)&&this.usingDefaultPresets&&(this.defaultPresetsRef=h(this.type),this.presets=this.defaultPresetsRef),e.has(`start`)||e.has(`end`)||e.has(`name`)||e.has(`disabled`)){if(this.name&&!this.disabled){let e=new FormData;this.start&&e.append(`${this.name}.start`,this.start),this.end&&e.append(`${this.name}.end`,this.end),this.internals?.setFormValue(e.has(`${this.name}.start`)||e.has(`${this.name}.end`)?e:null)}else this.internals?.setFormValue(null);this.checkValidity()}e.has(`required`)&&this.checkValidity()}checkValidity(){if(this.disabled)return this.internals?.setValidity({}),!0;if(this.required&&(!this.start||!this.end)){let e=`Please select a complete date range.`;return this.internals?.setValidity({valueMissing:!0},e),this.shouldShowError()&&(this.error=!0,this.validationMessage=e),!1}if(this.start&&this.end&&this.end<this.start){let e=`End date must be on or after start date.`;return this.internals?.setValidity({customError:!0},e),this.shouldShowError()&&(this.error=!0,this.validationMessage=e),!1}return this.internals?.setValidity({}),this.shouldShowError()&&(this.error=!1,this.validationMessage=``),!0}toFormEntries(){if(!this.name||this.disabled)return[];let e=[];return this.start&&e.push([`${this.name}.start`,this.start]),this.end&&e.push([`${this.name}.end`,this.end]),e}get dirty(){return this.start!==this.startDefault||this.end!==this.endDefault}firstUpdated(e){super.firstUpdated(e),this.startDefault=this.start,this.endDefault=this.end,this.presetDefault=this.preset}resetForm(){this.start=this.startDefault,this.end=this.endDefault,this.preset=this.presetDefault,this.error=!1,this.validationMessage=``,this.touched=!1,this.submitted=!1,this.internals?.setValidity({})}commitRange(e,t,n){this.start=e,this.end=t,this.preset=n,this.announce$.next(`Date range: ${this.displayLabel()}`),this.emitChange({start:e,end:t,preset:n})}displayLabel(){if(this.preset){let e=this.presets.find(e=>e.id===this.preset);if(e)return e.label}return function(e,t,n,r){if(!e||!t)return r;let i=(0,p.default)(e),a=(0,p.default)(t);if(!i.isValid()||!a.isValid())return r;let o=n===`datetime-local`?i.format(` h:mm A`):``,s=n===`datetime-local`?a.format(` h:mm A`):``;return i.isSame(a,`day`)?`${i.format(`ddd, MMM D, YYYY`)}${o}`:i.isSame(a,`month`)&&i.isSame(a,`year`)?`${i.format(`ddd MMM D`)} - ${a.format(`ddd D, YYYY`)}${s}`:i.isSame(a,`year`)?`${i.format(`ddd MMM D`)} - ${a.format(`ddd MMM D, YYYY`)}${s}`:`${i.format(`ddd MMM D, YYYY`)}${o} - ${a.format(`ddd MMM D, YYYY`)}${s}`}(this.start??``,this.end??``,this.type,this.placeholder)}toggleDropdown(e){e.stopPropagation(),this.disabled||this.step!==void 0||(this.isOpen?this.close$.next():this.open$.next(e))}shiftDateRange(e,t){if(t.stopPropagation(),!this.start||!this.end)return;let n=(0,p.default)(this.start),r=(0,p.default)(this.end);if(!n.isValid()||!r.isValid())return;let i=this.type===`date`?`YYYY-MM-DD`:`YYYY-MM-DDTHH:mm`,a=e>0?1:-1,o=r.diff(n,`day`)+1,s,c;if(this.step!==void 0)typeof this.step==`number`?(s=a*this.step,c=`day`):this.step===`day`?(s=a*o,c=`day`):(s=a,c=this.step);else{let e=function(e,t){return{isFullMonth:e.date()===1&&t.isSame(e.endOf(`month`),`day`),isFullQuarter:e.isSame(e.startOf(`quarter`),`day`)&&t.isSame(t.endOf(`quarter`),`day`),isFullYear:e.isSame(e.startOf(`year`),`day`)&&t.isSame(t.endOf(`year`),`day`),isFullWeek:e.day()===0&&t.day()===6&&t.diff(e,`days`)===6}}(n,r);e.isFullYear?(s=a,c=`year`):e.isFullMonth?(s=a,c=`month`):e.isFullWeek?(s=a,c=`week`):(s=a*o,c=`day`)}let l=n.add(s,c),u=r.add(s,c);this.min&&l.isBefore((0,p.default)(this.min))||this.max&&u.isAfter((0,p.default)(this.max))||this.commitRange(l.format(i),u.format(i),null)}handleKeyDown(e){if(!this.start||!this.end||this.disabled)return;let t=e.target;if(t===this||this.contains(t))switch(e.key){case`PageUp`:this.shiftDateRange(-1,e),e.preventDefault();break;case`PageDown`:this.shiftDateRange(1,e),e.preventDefault();break;case`Home`:if(e.ctrlKey){let t=this.type===`date`?`YYYY-MM-DD`:`YYYY-MM-DDTHH:mm`,n=(0,p.default)(this.start),r=(0,p.default)(this.end),i=n.startOf(`month`);this.commitRange(i.format(t),i.add(r.diff(n,`day`),`day`).format(t),null),e.preventDefault()}break;case`End`:if(e.ctrlKey){let t=this.type===`date`?`YYYY-MM-DD`:`YYYY-MM-DDTHH:mm`,n=(0,p.default)(this.start),r=(0,p.default)(this.end),i=r.endOf(`month`);this.commitRange(i.subtract(r.diff(n,`day`),`day`).format(t),i.format(t),null),e.preventDefault()}}}canNavigateBackward(){return!this.start||!this.min||(0,p.default)(this.start).isAfter((0,p.default)(this.min))}canNavigateForward(){return!this.end||!this.max||(0,p.default)(this.end).isBefore((0,p.default)(this.max))}render(){let e=this.error&&!!this.validationMessage,t=e?` rounded outline outline-2 outline-error-default`:``,n=this.displayLabel();return s.html`
79
+ <div class="relative ${this.disabled?`opacity-60 pointer-events-none`:``}">
80
+ <!-- Screen reader announcements -->
81
+ <div class="sr-only" role="status" aria-live="polite" aria-atomic="true">${this.announceMessage}</div>
82
+
83
+ <!-- Collapsed: icon-only on narrow viewports when collapse=true -->
84
+ <schmancy-icon-button
85
+ class="${this.collapse?`lg:hidden`:`hidden`}${t}"
86
+ variant="outlined"
87
+ type="button"
88
+ aria-invalid=${e?`true`:`false`}
89
+ aria-label="Select date range. Current: ${n}"
90
+ @click=${e=>this.toggleDropdown(e)}
91
+ ?disabled=${this.disabled}
92
+ >
93
+ date_range
94
+ </schmancy-icon-button>
95
+
96
+ <!-- Full trigger row: [← | range label | →] -->
97
+ <section
98
+ @click=${e=>e.stopPropagation()}
99
+ aria-invalid=${e?`true`:`false`}
100
+ class="${this.collapse?`hidden lg:flex`:`flex`}${t}"
101
+ >
102
+ <schmancy-icon-button
103
+ type="button"
104
+ aria-label="Previous ${this.preset??`date range`}"
105
+ @click=${e=>this.shiftDateRange(-1,e)}
106
+ ?disabled=${this.disabled||!this.start||!this.end||!this.canNavigateBackward()}
107
+ >
108
+ arrow_left
109
+ </schmancy-icon-button>
110
+
111
+ <schmancy-button
112
+ class="w-max"
113
+ variant="outlined"
114
+ type="button"
115
+ aria-haspopup="dialog"
116
+ aria-expanded=${this.isOpen}
117
+ aria-label="Select date range. Current: ${n}"
118
+ aria-readonly="${this.step!==void 0}"
119
+ @click=${e=>this.toggleDropdown(e)}
120
+ ?disabled=${this.disabled}
121
+ style="${this.step===void 0?``:`cursor:default;`}"
122
+ >
123
+ ${n}
124
+ </schmancy-button>
125
+
126
+ <schmancy-icon-button
127
+ type="button"
128
+ aria-label="Next ${this.preset??`date range`}"
129
+ @click=${e=>this.shiftDateRange(1,e)}
130
+ ?disabled=${this.disabled||!this.start||!this.end||!this.canNavigateForward()}
131
+ >
132
+ arrow_right
133
+ </schmancy-icon-button>
134
+ </section>
135
+
136
+ ${e?s.html`<div role="alert" class="text-error-default text-sm mt-1">${this.validationMessage}</div>`:s.nothing}
137
+ </div>
138
+ `}};t.u([(0,o.property)()],g.prototype,`type`,void 0),t.u([(0,o.property)()],g.prototype,`start`,void 0),t.u([(0,o.property)()],g.prototype,`end`,void 0),t.u([(0,o.property)({type:Array})],g.prototype,`presets`,void 0),t.u([(0,o.property)({reflect:!0})],g.prototype,`preset`,void 0),t.u([(0,o.property)()],g.prototype,`min`,void 0),t.u([(0,o.property)()],g.prototype,`max`,void 0),t.u([(0,o.property)()],g.prototype,`placeholder`,void 0),t.u([(0,o.property)({type:Boolean})],g.prototype,`clearable`,void 0),t.u([(0,o.property)()],g.prototype,`step`,void 0),t.u([(0,o.property)({type:Boolean})],g.prototype,`collapse`,void 0),t.u([(0,o.state)()],g.prototype,`isOpen`,void 0),t.u([(0,o.state)()],g.prototype,`announceMessage`,void 0),g=t.u([(0,o.customElement)(`schmancy-date-range`)],g),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return g}});
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-B2VN7cl_.cjs","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\t// When type=\"datetime-local\", the calendar emits YYYY-MM-DD date strings.\n\t\t// A calendar-only pick commits start-of-day (T00:00) for the start and\n\t\t// end-of-day (T23:59) for the end, per ADR-0041 D3.\n\t\tconst isDatetime = this.type === 'datetime-local'\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('calendar-change', {\n\t\t\t\tdetail: {\n\t\t\t\t\tstart:\n\t\t\t\t\t\tisDatetime && e.detail.start && !e.detail.start.includes('T')\n\t\t\t\t\t\t\t? `${e.detail.start}T00:00`\n\t\t\t\t\t\t\t: e.detail.start,\n\t\t\t\t\tend:\n\t\t\t\t\t\tisDatetime && e.detail.end && !e.detail.end.includes('T')\n\t\t\t\t\t\t\t? `${e.detail.end}T23:59`\n\t\t\t\t\t\t\t: e.detail.end,\n\t\t\t\t},\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(type: 'date' | 'datetime-local' = 'date'): DateRangeDialogPreset[] {\n\tconst fmt = type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'\n\treturn [\n\t\t{\n\t\t\tid: 'today',\n\t\t\tlabel: 'Today',\n\t\t\tstart: dayjs().startOf('day').format(fmt),\n\t\t\tend: dayjs().endOf('day').format(fmt),\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(fmt),\n\t\t\tend: dayjs().subtract(1, 'day').endOf('day').format(fmt),\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(fmt),\n\t\t\tend: dayjs().endOf('day').format(fmt),\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(fmt),\n\t\t\tend: dayjs().endOf('day').format(fmt),\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(fmt),\n\t\t\tend: dayjs().endOf('week').format(fmt),\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(fmt),\n\t\t\tend: dayjs().endOf('month').format(fmt),\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(fmt),\n\t\t\tend: dayjs().subtract(1, 'month').endOf('month').format(fmt),\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(fmt),\n\t\t\tend: dayjs().endOf('year').format(fmt),\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/** Reference to the last array produced by buildDefaultPresets; used to detect consumer ownership. */\n\tprivate defaultPresetsRef: DateRangeDialogPreset[] = buildDefaultPresets()\n\n\t@property({ type: Array }) presets: DateRangeDialogPreset[] = this.defaultPresetsRef\n\n\t/** True while the component holds the built-in default preset list (not user-supplied). */\n\tprivate usingDefaultPresets = true\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\t// Consumer ownership detection must run before the type-change rebuild so that\n\t\t// when both `type` and `presets` arrive in the same willUpdate cycle (e.g. simultaneous\n\t\t// attribute/property initialisation), the consumer's presets are not overwritten.\n\t\t//\n\t\t// A `presets` change signals consumer ownership when the incoming value is not the\n\t\t// array reference produced by the internal default-builder (defaultPresetsRef).\n\t\t// Since buildDefaultPresets always allocates a new array, defaultPresetsRef is the\n\t\t// only reference that could match; any other reference came from the consumer.\n\t\tif (changed.has('presets') && this.presets !== this.defaultPresetsRef) {\n\t\t\tthis.usingDefaultPresets = false\n\t\t}\n\t\t// Rebuild built-in presets when type changes, but only while the consumer has never\n\t\t// supplied their own presets array.\n\t\tif (changed.has('type') && this.usingDefaultPresets) {\n\t\t\tthis.defaultPresetsRef = buildDefaultPresets(this.type)\n\t\t\tthis.presets = this.defaultPresetsRef\n\t\t}\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":"qZAAA,IAAU,EAAiN,EAA/M,EAA+M,UAAA,CAAmB,aAAa,IAAI,EAAE,QAAQ,EAAE,UAAU,OAAO,SAAS,EAAE,EAAA,CAAG,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,SAAS,EAAA,CAAG,OAAO,KAAK,OAAA,EAAS,EAAE,CAAA,EAAG,KAAK,MAAM,KAAK,MAAA,EAAQ,GAAG,CAAA,EAAG,KAAK,MAAM,KAAK,MAAA,EAAQ,EAAE,GAAG,EAAE,EAAA,CAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,EAAA,CAAG,MAAO,GAAE,OAAO,CAAA,EAAG,KAAK,OAAA,EAAS,EAAE,CAAA,IAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAAA,EAAG,EAAE,KAAK,IAAA,EAAM,EAAE,CAAA,CAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,SAAS,EAAE,EAAA,CAAG,IAAI,EAAE,KAAK,OAAA,EAAS,EAAA,CAAA,CAAI,EAAE,EAAE,CAAA,GAAI,EAAE,GAAG,EAAE,EAAE,CAAA,IAAK,EAAE,CAAC,IAAI,EAAE,KAAK,QAAA,EAAU,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA,EAAG,QAAQ,CAAA,EAAG,QAAQ,KAAA,EAAO,KAAK,MAAM,EAAE,EAAE,CAAA,EAAG,MAAM,CAAA,EAAG,MAAM,KAAA,CAAM,CAAC,OAAO,EAAE,KAAK,IAAA,EAAM,EAAE,CAAA,CAAE,CAAC,CAAC,EAAjvB,OAAiB,GAAjB,UAA8C,IAA7B,IAAS,GAA2B,EAAO,QAAQ,EAAA,EAAI,OAAmB,QAAnB,YAA2B,OAAO,IAAI,OAAO,CAAA,EAAA,CAAI,EAAE,OAAoB,WAApB,IAA+B,WAAW,GAAG,MAAM,2BAA2B,EAAA,CAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA,EE6BjN,EAAA,cAAsC,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,CAAA,EAAA,KAAA,KASE,OAAA,KAAA,MACX,KAAA,KAAA,IACF,KAAA,KAAA,OAGG,KAAA,KAAA,QAC0B,CAAA,CAAA,CAAA,OAAA,KAAA,OAd9C,CACf,EAAA,GAAG;;;;KAeJ,oBAA4B,EAAA,CAC3B,EAAE,gBAAA,EACF,KAAK,cACJ,IAAI,YAAY,iBAAkB,CACjC,OAAQ,CAAE,MAAO,EAAE,OAAO,MAAO,IAAK,EAAE,OAAO,GAAA,EAC/C,QAAA,CAAS,EACT,SAAA,CAAU,CAAA,CAAA,CAAA,CAGb,CAEA,qBAA6B,EAAA,CAC5B,EAAE,gBAAA,EAIF,IAAM,EAAa,KAAK,OAAS,iBACjC,KAAK,cACJ,IAAI,YAAY,kBAAmB,CAClC,OAAQ,CACP,MACC,GAAc,EAAE,OAAO,OAAA,CAAU,EAAE,OAAO,MAAM,SAAS,GAAA,EACtD,GAAG,EAAE,OAAO,MAAA,QACZ,EAAE,OAAO,MACb,IACC,GAAc,EAAE,OAAO,KAAA,CAAQ,EAAE,OAAO,IAAI,SAAS,GAAA,EAClD,GAAG,EAAE,OAAO,IAAA,QACZ,EAAE,OAAO,GAAA,EAEd,QAAA,CAAS,EACT,SAAA,CAAU,CAAA,CAAA,CAAA,CAGb,CAEA,kBAA0B,EAAA,CACzB,KAAK,cACJ,IAAI,YAAY,gBAAiB,CAChC,OAAQ,EACR,QAAA,CAAS,EACT,SAAA,CAAU,CAAA,CAAA,CAAA,CAGb,CAEA,iBAAyB,EAAA,CACxB,IAAM,EAAS,EAAE,OAA4B,MAC7C,GAAA,CAAK,EAAO,OAEZ,IAAM,EAAW,EACX,EACL,KAAK,MAAA,EAAA,EAAA,SAAa,KAAK,GAAA,EAAK,UAAA,EAAA,EAAA,SAAe,CAAA,CAAA,EAAa,EAAY,KAAK,KAAO,KACjF,KAAK,cACJ,IAAI,YAAY,kBAAmB,CAClC,OAAQ,CAAE,MAAO,EAAU,IAAK,CAAA,EAChC,QAAA,CAAS,EACT,SAAA,CAAU,CAAA,CAAA,CAAA,CAGb,CAEA,eAAuB,EAAA,CACtB,IAAM,EAAS,EAAE,OAA4B,MACxC,GACL,KAAK,cACJ,IAAI,YAAY,kBAAmB,CAClC,OAAQ,CAAE,MAAO,KAAK,OAAS,KAAM,IAAK,CAAA,EAC1C,QAAA,CAAS,EACT,SAAA,CAAU,CAAA,CAAA,CAAA,CAGb,CAEA,QAAA,CACC,MAAO,GAAA,IAAI;;;;;;;kBAQP,KAAK,QAAQ,OAAS,MAChB,EAAA,IAAI;sBAER,KAAK,QACL,GAAK,EAAE,GACP,GAAK,EAAA,IAAI;;yBAEQ,KAAK,SAAW,EAAE,GAAK,kBAAoB,GAAA;mBACjD,EAAE,GAAA;sBACC,KAAK,SAAW,EAAE,GAAA;mBACrB,EAAE,MAAA,KAAW,EAAE,IAAA;uBACT,KAAK,kBAAkB,CAAA,EAAA;;YAEpC,EAAE,MAAA;;;YAKF,EAAA,OAAA,EAAA;;;;;;;cAQE,KAAK,KAAA;eACJ,KAAK,MAAA;aACP,KAAK,IAAA;4BACI,KAAK,GAAA,EAAA;4BACL,KAAK,GAAA,EAAA;eACX,GAAkC,KAAK,oBAAoB,CAAA,EAAA;gBAC1D,GAAmC,KAAK,qBAAqB,CAAA,EAAA;;;;;;;;eAQ/D,KAAK,KAAA;gBACJ,OAAA;gBACA,KAAK,OAAS,GAAA;6BACP,KAAK,GAAA,EAAA;6BACL,KAAK,GAAA,EAAA;iBACX,KAAK,iBAAA;;;;;eAKP,KAAK,KAAA;gBACJ,KAAA;gBACA,KAAK,KAAO,GAAA;6BACL,KAAK,OAAS,KAAK,GAAA,EAAA;6BACnB,KAAK,GAAA,EAAA;iBACX,KAAK,eAAA;;;;;GAMrB,CAAA,EC/JD,SAAS,EAAoB,EAAkC,OAAA,CAC9D,IAAM,EAAM,IAAS,iBAAmB,mBAAqB,aAC7D,MAAO,CACN,CACC,GAAI,QACJ,MAAO,QACP,OAAA,EAAA,EAAA,SAAA,EAAe,QAAQ,KAAA,EAAO,OAAO,CAAA,EACrC,KAAA,EAAA,EAAA,SAAA,EAAa,MAAM,KAAA,EAAO,OAAO,CAAA,CAAA,EAElC,CACC,GAAI,YACJ,MAAO,YACP,OAAA,EAAA,EAAA,SAAA,EAAe,SAAS,EAAG,KAAA,EAAO,QAAQ,KAAA,EAAO,OAAO,CAAA,EACxD,KAAA,EAAA,EAAA,SAAA,EAAa,SAAS,EAAG,KAAA,EAAO,MAAM,KAAA,EAAO,OAAO,CAAA,CAAA,EAErD,CACC,GAAI,QACJ,MAAO,cACP,OAAA,EAAA,EAAA,SAAA,EAAe,SAAS,EAAG,KAAA,EAAO,QAAQ,KAAA,EAAO,OAAO,CAAA,EACxD,KAAA,EAAA,EAAA,SAAA,EAAa,MAAM,KAAA,EAAO,OAAO,CAAA,CAAA,EAElC,CACC,GAAI,SACJ,MAAO,eACP,OAAA,EAAA,EAAA,SAAA,EAAe,SAAS,GAAI,KAAA,EAAO,QAAQ,KAAA,EAAO,OAAO,CAAA,EACzD,KAAA,EAAA,EAAA,SAAA,EAAa,MAAM,KAAA,EAAO,OAAO,CAAA,CAAA,EAElC,CACC,GAAI,WACJ,MAAO,YACP,OAAA,EAAA,EAAA,SAAA,EAAe,QAAQ,MAAA,EAAQ,OAAO,CAAA,EACtC,KAAA,EAAA,EAAA,SAAA,EAAa,MAAM,MAAA,EAAQ,OAAO,CAAA,CAAA,EAEnC,CACC,GAAI,YACJ,MAAO,aACP,OAAA,EAAA,EAAA,SAAA,EAAe,QAAQ,OAAA,EAAS,OAAO,CAAA,EACvC,KAAA,EAAA,EAAA,SAAA,EAAa,MAAM,OAAA,EAAS,OAAO,CAAA,CAAA,EAEpC,CACC,GAAI,YACJ,MAAO,aACP,OAAA,EAAA,EAAA,SAAA,EAAe,SAAS,EAAG,OAAA,EAAS,QAAQ,OAAA,EAAS,OAAO,CAAA,EAC5D,KAAA,EAAA,EAAA,SAAA,EAAa,SAAS,EAAG,OAAA,EAAS,MAAM,OAAA,EAAS,OAAO,CAAA,CAAA,EAEzD,CACC,GAAI,WACJ,MAAO,YACP,OAAA,EAAA,EAAA,SAAA,EAAe,QAAQ,MAAA,EAAQ,OAAO,CAAA,EACtC,KAAA,EAAA,EAAA,SAAA,EAAa,MAAM,MAAA,EAAQ,OAAO,CAAA,CAAA,CAAA,CAGrC,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,ED5CW,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EACA,EAAA,UAAA,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EACA,EAAA,UAAA,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EACA,EAAA,UAAA,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EACA,EAAA,UAAA,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EACA,EAAA,UAAA,SAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UACA,CAAE,KAAM,KAAA,CAAA,CAAA,EAAO,EAAA,UAAA,UAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eAhBX,4BAAA,CAAA,EAA4B,CAAA,ECJ3C,EAAA,QAAM,OAAO,EAAA,OAAA,EA2FN,IAAA,EAAA,cAAgC,EAAA,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,CAAA,EAAA,KAAA,KAKQ,OAAA,KAAA,MACX,KAAA,KAAA,IACF,KAAA,KAAA,kBAGoB,EAAA,EAAA,KAAA,QAES,KAAK,kBAAA,KAAA,oBAAA,CAGrC,EAAA,KAAA,OAGuB,KAAA,KAAA,YAI3B,oBAAA,KAAA,UAAA,CACe,EAAA,KAAA,SAAA,CAGD,EAAA,KAAA,MAGf,IAAI,EAAA,QAAA,KAAA,OACH,IAAI,EAAA,QAAA,KAAA,UACD,IAAI,EAAA,QAAA,KAAA,OAAA,CAEP,EAAA,KAAA,gBACS,GAAA,KAAA,aAGG,KAAA,KAAA,WACF,KAAA,KAAA,cACG,IAAA,CAEvC,sBAAA,CACC,MAAM,qBAAA,EACN,KAAK,OAAA,CAAS,CACf,CAEA,mBAAA,CACC,MAAM,kBAAA,GAGN,EAAA,EAAA,OAEC,KAAK,MAAM,MAAA,EAAA,EAAA,SAAA,CAET,KAAK,OAAA,CAAS,CAAA,CAAA,GACd,EAAA,EAAA,YACU,GACV,EAAA,MAEO,EAAA,IAAI;;gBAEA,KAAK,KAAA;iBACJ,KAAK,MAAA;eACP,KAAK,IAAA;eACL,KAAK,IAAA;eACL,KAAK,IAAA;kBACF,KAAK,OAAA;mBACJ,KAAK,QAAA;0BACG,GAAA,CAClB,EAAG,gBAAA,EACH,KAAK,cACJ,IAAI,YAAY,QAAS,CACxB,OAAQ,CAAE,MAAO,EAAG,OAAO,MAAO,IAAK,EAAG,OAAO,GAAA,EACjD,QAAA,CAAS,EACT,SAAA,CAAU,CAAA,CAAA,CAAA,CAAA,EAAA;2BAIO,GAAA,CACnB,EAAG,gBAAA,EACH,KAAK,YAAY,EAAG,OAAO,MAAO,EAAG,OAAO,IAAK,IAAA,EAE7C,EAAG,OAAO,OAAS,EAAG,OAAO,KAChC,EAAG,QAAQ,cAAc,IAAI,YAAY,QAAS,CAAE,QAAA,CAAS,EAAM,SAAA,CAAU,CAAA,CAAA,CAAA,CAAA,EAAA;yBAG7D,GAAA,CACjB,EAAG,gBAAA,EACH,KAAK,YAAY,EAAG,OAAO,MAAO,EAAG,OAAO,IAAK,EAAG,OAAO,EAAA,EAC3D,EAAG,QAAQ,cAAc,IAAI,YAAY,QAAS,CAAE,QAAA,CAAS,EAAM,SAAA,CAAU,CAAA,CAAA,CAAA,CAAA,EAAA;;QAIhF,CAAE,OAAA,CAAA,CAAA,EACD,MAAA,EAAA,EAAA,WACS,KAAK,MAAA,GAAM,EAAA,EAAA,cAAA,CAEpB,KAAK,OAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,EAOlB,KAAK,UAAU,MAAA,EAAA,EAAA,WACJ,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,IAAqB,CAAA,GAAO,EAAA,EAAA,OAAS,IAAA,EAAM,MAAA,EAAA,EAAA,SAAe,EAAA,CAAA,CAAA,CAAA,GAAK,EAAA,EAAA,KACrE,GAAA,CACH,KAAK,gBAAkB,CAAA,CAAA,CAAA,GAEzB,EAAA,EAAA,WAGyB,SAAU,SAAA,EAAW,MAAA,EAAA,EAAA,KAAS,GAAM,KAAK,cAAc,CAAA,CAAA,CAAA,CAAA,EAE/E,MAAA,EAAA,EAAA,WAAe,KAAK,aAAA,CAAA,EACpB,UAAA,CACH,CAMA,WAAoB,EAAA,CAmBnB,GAlBA,MAAM,WAAW,CAAA,EASb,EAAQ,IAAI,SAAA,GAAc,KAAK,UAAY,KAAK,oBACnD,KAAK,oBAAA,CAAsB,GAIxB,EAAQ,IAAI,MAAA,GAAW,KAAK,sBAC/B,KAAK,kBAAoB,EAAoB,KAAK,IAAA,EAClD,KAAK,QAAU,KAAK,mBAEjB,EAAQ,IAAI,OAAA,GAAY,EAAQ,IAAI,KAAA,GAAU,EAAQ,IAAI,MAAA,GAAW,EAAQ,IAAI,UAAA,EAAa,CACjG,GAAI,KAAK,MAAA,CAAS,KAAK,SAAU,CAChC,IAAM,EAAK,IAAI,SACX,KAAK,OAAO,EAAG,OAAO,GAAG,KAAK,KAAA,QAAc,KAAK,KAAA,EACjD,KAAK,KAAK,EAAG,OAAO,GAAG,KAAK,KAAA,MAAY,KAAK,GAAA,EACjD,KAAK,WAAW,aAAa,EAAG,IAAI,GAAG,KAAK,KAAA,OAAA,GAAiB,EAAG,IAAI,GAAG,KAAK,KAAA,KAAA,EAAc,EAAK,IAAA,CAChG,MACC,KAAK,WAAW,aAAa,IAAA,EAE9B,KAAK,cAAA,CACN,CACI,EAAQ,IAAI,UAAA,GACf,KAAK,cAAA,CAEP,CAEA,eAAA,CACC,GAAI,KAAK,SAER,OADA,KAAK,WAAW,YAAY,CAAC,CAAA,EAAA,CACtB,EAER,GAAI,KAAK,WAAA,CAAc,KAAK,OAAA,CAAU,KAAK,KAAM,CAChD,IAAM,EAAM,uCAMZ,OALA,KAAK,WAAW,YAAY,CAAE,aAAA,CAAc,CAAA,EAAQ,CAAA,EAChD,KAAK,gBAAA,IACR,KAAK,MAAA,CAAQ,EACb,KAAK,kBAAoB,GAAA,CAEnB,CACR,CACA,GAAI,KAAK,OAAS,KAAK,KAAO,KAAK,IAAM,KAAK,MAAO,CACpD,IAAM,EAAM,2CAMZ,OALA,KAAK,WAAW,YAAY,CAAE,YAAA,CAAa,CAAA,EAAQ,CAAA,EAC/C,KAAK,gBAAA,IACR,KAAK,MAAA,CAAQ,EACb,KAAK,kBAAoB,GAAA,CAEnB,CACR,CAMA,OALA,KAAK,WAAW,YAAY,CAAC,CAAA,EACzB,KAAK,gBAAA,IACR,KAAK,MAAA,CAAQ,EACb,KAAK,kBAAoB,IAAA,CAEnB,CACR,CAEA,eAAA,CACC,GAAA,CAAK,KAAK,MAAQ,KAAK,SAAU,MAAO,CAAA,EACxC,IAAM,EAA+C,CAAA,EAGrD,OAFI,KAAK,OAAO,EAAQ,KAAK,CAAC,GAAG,KAAK,KAAA,QAAc,KAAK,KAAA,CAAA,EACrD,KAAK,KAAK,EAAQ,KAAK,CAAC,GAAG,KAAK,KAAA,MAAY,KAAK,GAAA,CAAA,EAC9C,CACR,CAEA,IAAA,OAAa,CACZ,OAAO,KAAK,QAAU,KAAK,cAAgB,KAAK,MAAQ,KAAK,UAC9D,CAEA,aAAsB,EAAA,CACrB,MAAM,aAAa,CAAA,EACnB,KAAK,aAAe,KAAK,MACzB,KAAK,WAAa,KAAK,IACvB,KAAK,cAAgB,KAAK,MAC3B,CAEA,WAAA,CACC,KAAK,MAAQ,KAAK,aAClB,KAAK,IAAM,KAAK,WAChB,KAAK,OAAS,KAAK,cACnB,KAAK,MAAA,CAAQ,EACb,KAAK,kBAAoB,GACzB,KAAK,QAAA,CAAU,EACf,KAAK,UAAA,CAAY,EACjB,KAAK,WAAW,YAAY,CAAC,CAAA,CAC9B,CAMA,YAAoB,EAAsB,EAAoB,EAAA,CAC7D,KAAK,MAAQ,EACb,KAAK,IAAM,EACX,KAAK,OAAS,EACd,KAAK,UAAU,KAAK,eAAe,KAAK,aAAA,GAAA,EACxC,KAAK,WAAW,CAAE,MAAA,EAAO,IAAA,EAAK,OAAQ,CAAA,CAAA,CACvC,CAEA,cAAA,CACC,GAAI,KAAK,OAAQ,CAChB,IAAM,EAAI,KAAK,QAAQ,KAAK,GAAK,EAAE,KAAO,KAAK,MAAA,EAC/C,GAAI,EAAG,OAAO,EAAE,KACjB,CACA,OFzVF,SAAA,EAAA,EAAA,EAAA,EAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA,OAAA,EAAA,IAAA,GAAA,EAAA,EAAA,SAAA,CAAA,EAAA,GAAA,EAAA,EAAA,SAAA,CAAA,EAAA,GAAA,CAAA,EAAA,QAAA,GAAA,CAAA,EAAA,QAAA,EAAA,OAAA,EAAA,IAAA,EAAA,IAAA,iBAAA,EAAA,OAAA,SAAA,EAAA,GAAA,EAAA,IAAA,iBAAA,EAAA,OAAA,SAAA,EAAA,GAAA,OAAA,EAAA,OAAA,EAAA,KAAA,EAAA,GAAA,EAAA,OAAA,kBAAA,IAAA,IAAA,EAAA,OAAA,EAAA,OAAA,GAAA,EAAA,OAAA,EAAA,MAAA,EAAA,GAAA,EAAA,OAAA,WAAA,EAAA,KAAA,EAAA,OAAA,aAAA,IAAA,IAAA,EAAA,OAAA,EAAA,MAAA,EAAA,GAAA,EAAA,OAAA,WAAA,EAAA,KAAA,EAAA,OAAA,iBAAA,IAAA,IAAA,GAAA,EAAA,OAAA,iBAAA,IAAA,EAAA,KAAA,EAAA,OAAA,iBAAA,IAAA,GAsCA,EEmTyB,KAAK,OAAS,GAAI,KAAK,KAAO,GAAI,KAAK,KAAM,KAAK,WAAA,CAC1E,CAEA,eAAuB,EAAA,CACtB,EAAE,gBAAA,EACE,KAAK,UAAY,KAAK,OAAjB,IAA0B,KAC/B,KAAK,OACR,KAAK,OAAO,KAAA,EAEZ,KAAK,MAAM,KAAK,CAAA,EAElB,CAEA,eAAuB,EAAmB,EAAA,CAEzC,GADA,EAAE,gBAAA,EAAA,CACG,KAAK,OAAA,CAAU,KAAK,IAAK,OAE9B,IAAM,GAAA,EAAA,EAAA,SAAiB,KAAK,KAAA,EACtB,GAAA,EAAA,EAAA,SAAe,KAAK,GAAA,EAC1B,GAAA,CAAK,EAAS,QAAA,GAAA,CAAc,EAAO,QAAA,EAAW,OAE9C,IAAM,EAAa,KAAK,OAAS,OAAS,aAAe,mBACnD,EAAM,EAAY,EAAI,EAAA,GACtB,EAAW,EAAO,KAAK,EAAU,KAAA,EAAS,EAE5C,EACA,EAEJ,GAAI,KAAK,OAAT,IAAkB,GACQ,OAAd,KAAK,MAAS,UACxB,EAAS,EAAM,KAAK,KACpB,EAAO,OACG,KAAK,OAAS,OACxB,EAAS,EAAM,EACf,EAAO,QAEP,EAAS,EACT,EAAO,KAAK,UAEP,CACN,IAAM,EF/UT,SAAA,EAAA,EAAA,CAAA,MAAA,CAAA,YAAA,EAAA,KAAA,IAAA,GAAA,EAAA,OAAA,EAAA,MAAA,OAAA,EAAA,KAAA,EAAA,cAAA,EAAA,OAAA,EAAA,QAAA,SAAA,EAAA,KAAA,GAAA,EAAA,OAAA,EAAA,MAAA,SAAA,EAAA,KAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,MAAA,EAAA,KAAA,GAAA,EAAA,OAAA,EAAA,MAAA,MAAA,EAAA,KAAA,EAAA,WAAA,EAAA,IAAA,IAAA,GAAA,EAAA,IAAA,IAAA,GAAA,EAAA,KAAA,EAAA,MAAA,IAAA,CAAA,CAOA,EEwUyC,EAAU,CAAA,EAC5C,EAAU,YACb,EAAS,EACT,EAAO,QACG,EAAU,aACpB,EAAS,EACT,EAAO,SACG,EAAU,YACpB,EAAS,EACT,EAAO,SAEP,EAAS,EAAM,EACf,EAAO,MAET,CAEA,IAAM,EAAU,EAAS,IAAI,EAAQ,CAAA,EAC/B,EAAQ,EAAO,IAAI,EAAQ,CAAA,EAE7B,KAAK,KAAO,EAAQ,UAAA,EAAA,EAAA,SAAe,KAAK,GAAA,CAAA,GACxC,KAAK,KAAO,EAAM,SAAA,EAAA,EAAA,SAAc,KAAK,GAAA,CAAA,GAEzC,KAAK,YAAY,EAAQ,OAAO,CAAA,EAAa,EAAM,OAAO,CAAA,EAAa,IAAA,CACxE,CAEA,cAAsB,EAAA,CACrB,GAAA,CAAK,KAAK,OAAA,CAAU,KAAK,KAAO,KAAK,SAAU,OAC/C,IAAM,EAAS,EAAG,OAClB,GAAI,IAAW,MAAS,KAAK,SAAS,CAAA,EAEtC,OAAQ,EAAG,IAAX,CACC,IAAK,SACJ,KAAK,eAAA,GAAmB,CAAA,EACxB,EAAG,eAAA,EACH,MACD,IAAK,WACJ,KAAK,eAAe,EAAG,CAAA,EACvB,EAAG,eAAA,EACH,MACD,IAAK,OACJ,GAAI,EAAG,QAAS,CACf,IAAM,EAAM,KAAK,OAAS,OAAS,aAAe,mBAC5C,GAAA,EAAA,EAAA,SAAa,KAAK,KAAA,EAClB,GAAA,EAAA,EAAA,SAAW,KAAK,GAAA,EAChB,EAAa,EAAK,QAAQ,OAAA,EAChC,KAAK,YACJ,EAAW,OAAO,CAAA,EAClB,EAAW,IAAI,EAAG,KAAK,EAAM,KAAA,EAAQ,KAAA,EAAO,OAAO,CAAA,EACnD,IAAA,EAED,EAAG,eAAA,CACJ,CACA,MACD,IAAK,MACJ,GAAI,EAAG,QAAS,CACf,IAAM,EAAM,KAAK,OAAS,OAAS,aAAe,mBAC5C,GAAA,EAAA,EAAA,SAAa,KAAK,KAAA,EAClB,GAAA,EAAA,EAAA,SAAW,KAAK,GAAA,EAChB,EAAW,EAAG,MAAM,OAAA,EAC1B,KAAK,YACJ,EAAS,SAAS,EAAG,KAAK,EAAM,KAAA,EAAQ,KAAA,EAAO,OAAO,CAAA,EACtD,EAAS,OAAO,CAAA,EAChB,IAAA,EAED,EAAG,eAAA,CACJ,CAAA,CAGH,CAEA,qBAAA,CACC,MAAA,CAAK,KAAK,OAAA,CAAU,KAAK,MACzB,EAAA,EAAA,SAAa,KAAK,KAAA,EAAO,SAAA,EAAA,EAAA,SAAc,KAAK,GAAA,CAAA,CAC7C,CAEA,oBAAA,CACC,MAAA,CAAK,KAAK,KAAA,CAAQ,KAAK,MACvB,EAAA,EAAA,SAAa,KAAK,GAAA,EAAK,UAAA,EAAA,EAAA,SAAe,KAAK,GAAA,CAAA,CAC5C,CAMA,QAAA,CACC,IAAM,EAAY,KAAK,OAAA,CAAA,CAAW,KAAK,kBACjC,EAAY,EAAY,mDAAqD,GAC7E,EAAQ,KAAK,aAAA,EAEnB,MAAO,GAAA,IAAI;0BACa,KAAK,SAAW,iCAAmC,GAAA;;+EAEE,KAAK,gBAAA;;;;cAItE,KAAK,SAAW,YAAc,WAAW,EAAA;;;oBAGnC,EAAY,OAAS,QAAA;+CACM,EAAA;cAChC,GAAkB,KAAK,eAAe,CAAA,EAAA;iBACpC,KAAK,SAAA;;;;;;;cAOP,GAAc,EAAG,gBAAA,EAAA;oBACZ,EAAY,OAAS,QAAA;cAC3B,KAAK,SAAW,iBAAmB,SAAS,EAAA;;;;6BAI7B,KAAK,QAAU,aAAA;eAC5B,GAAa,KAAK,eAAA,GAAmB,CAAA,EAAA;kBACnC,KAAK,UAAA,CAAa,KAAK,OAAA,CAAU,KAAK,KAAA,CAAQ,KAAK,oBAAA,EAAA;;;;;;;;;;sBAU/C,KAAK,OAAA;gDACqB,EAAA;uBACzB,KAAK,WAAS,GAAT;eACZ,GAAkB,KAAK,eAAe,CAAA,EAAA;kBACpC,KAAK,SAAA;eACR,KAAK,WAAS,GAAgC,GAApB,kBAAoB;;QAErD,EAAA;;;;;yBAKiB,KAAK,QAAU,aAAA;eACxB,GAAa,KAAK,eAAe,EAAG,CAAA,EAAA;kBAClC,KAAK,UAAA,CAAa,KAAK,OAAA,CAAU,KAAK,KAAA,CAAQ,KAAK,mBAAA,EAAA;;;;;;MAM/D,EACC,EAAA,IAAI,6DAA6D,KAAK,kBAAA,QACtE,EAAA,QAAA;;GAGN,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EAtaU,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EACA,EAAA,UAAA,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EACA,EAAA,UAAA,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAKA,CAAE,KAAM,KAAA,CAAA,CAAA,EAAO,EAAA,UAAA,UAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAMf,CAAE,QAAA,CAAS,CAAA,CAAA,CAAA,EAAM,EAAA,UAAA,SAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EAEjB,EAAA,UAAA,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EACA,EAAA,UAAA,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EACA,EAAA,UAAA,cAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UACA,CAAE,KAAM,OAAA,CAAA,CAAA,EAAS,EAAA,UAAA,YAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAAA,CAAA,EACjB,EAAA,UAAA,OAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,UAEA,CAAE,KAAM,OAAA,CAAA,CAAA,EAAS,EAAA,UAAA,WAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,CAAA,EAOpB,EAAA,UAAA,SAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,OAAA,CAAA,EACA,EAAA,UAAA,kBAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eAnCO,qBAAA,CAAA,EAAqB,CAAA,EAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,CAAA,CAAA,CAAA,EAAA,OAAA,eAAA,QAAA,IAAA,CAAA,WAAA,CAAA,EAAA,IAAA,UAAA,CAAA,OAAA,CAAA,CAAA,CAAA"}
@@ -55,10 +55,12 @@ var O = e(t((e, t) => {
55
55
  }));
56
56
  }
57
57
  handleCalendarChange(e) {
58
- e.stopPropagation(), this.dispatchEvent(new CustomEvent("calendar-change", {
58
+ e.stopPropagation();
59
+ let t = this.type === "datetime-local";
60
+ this.dispatchEvent(new CustomEvent("calendar-change", {
59
61
  detail: {
60
- start: e.detail.start,
61
- end: e.detail.end
62
+ start: t && e.detail.start && !e.detail.start.includes("T") ? `${e.detail.start}T00:00` : e.detail.start,
63
+ end: t && e.detail.end && !e.detail.end.includes("T") ? `${e.detail.end}T23:59` : e.detail.end
62
64
  },
63
65
  bubbles: !0,
64
66
  composed: !0
@@ -159,59 +161,63 @@ var O = e(t((e, t) => {
159
161
  `;
160
162
  }
161
163
  };
164
+ function j(e = "date") {
165
+ let t = e === "datetime-local" ? "YYYY-MM-DDTHH:mm" : "YYYY-MM-DD";
166
+ return [
167
+ {
168
+ id: "today",
169
+ label: "Today",
170
+ start: (0, k.default)().startOf("day").format(t),
171
+ end: (0, k.default)().endOf("day").format(t)
172
+ },
173
+ {
174
+ id: "yesterday",
175
+ label: "Yesterday",
176
+ start: (0, k.default)().subtract(1, "day").startOf("day").format(t),
177
+ end: (0, k.default)().subtract(1, "day").endOf("day").format(t)
178
+ },
179
+ {
180
+ id: "last7",
181
+ label: "Last 7 days",
182
+ start: (0, k.default)().subtract(6, "day").startOf("day").format(t),
183
+ end: (0, k.default)().endOf("day").format(t)
184
+ },
185
+ {
186
+ id: "last30",
187
+ label: "Last 30 days",
188
+ start: (0, k.default)().subtract(29, "day").startOf("day").format(t),
189
+ end: (0, k.default)().endOf("day").format(t)
190
+ },
191
+ {
192
+ id: "thisWeek",
193
+ label: "This week",
194
+ start: (0, k.default)().startOf("week").format(t),
195
+ end: (0, k.default)().endOf("week").format(t)
196
+ },
197
+ {
198
+ id: "thisMonth",
199
+ label: "This month",
200
+ start: (0, k.default)().startOf("month").format(t),
201
+ end: (0, k.default)().endOf("month").format(t)
202
+ },
203
+ {
204
+ id: "lastMonth",
205
+ label: "Last month",
206
+ start: (0, k.default)().subtract(1, "month").startOf("month").format(t),
207
+ end: (0, k.default)().subtract(1, "month").endOf("month").format(t)
208
+ },
209
+ {
210
+ id: "thisYear",
211
+ label: "This year",
212
+ start: (0, k.default)().startOf("year").format(t),
213
+ end: (0, k.default)().endOf("year").format(t)
214
+ }
215
+ ];
216
+ }
162
217
  r([b()], A.prototype, "type", void 0), r([b()], A.prototype, "start", void 0), r([b()], A.prototype, "end", void 0), r([b()], A.prototype, "min", void 0), r([b()], A.prototype, "max", void 0), r([b()], A.prototype, "preset", void 0), r([b({ type: Array })], A.prototype, "presets", void 0), A = r([y("schmancy-date-range-dialog")], A), k.default.extend(O.default);
163
- var j = class extends i() {
218
+ var M = class extends i() {
164
219
  constructor(...e) {
165
- super(...e), this.type = "date", this.start = null, this.end = null, this.presets = [
166
- {
167
- id: "today",
168
- label: "Today",
169
- start: (0, k.default)().startOf("day").format("YYYY-MM-DD"),
170
- end: (0, k.default)().endOf("day").format("YYYY-MM-DD")
171
- },
172
- {
173
- id: "yesterday",
174
- label: "Yesterday",
175
- start: (0, k.default)().subtract(1, "day").startOf("day").format("YYYY-MM-DD"),
176
- end: (0, k.default)().subtract(1, "day").endOf("day").format("YYYY-MM-DD")
177
- },
178
- {
179
- id: "last7",
180
- label: "Last 7 days",
181
- start: (0, k.default)().subtract(6, "day").startOf("day").format("YYYY-MM-DD"),
182
- end: (0, k.default)().endOf("day").format("YYYY-MM-DD")
183
- },
184
- {
185
- id: "last30",
186
- label: "Last 30 days",
187
- start: (0, k.default)().subtract(29, "day").startOf("day").format("YYYY-MM-DD"),
188
- end: (0, k.default)().endOf("day").format("YYYY-MM-DD")
189
- },
190
- {
191
- id: "thisWeek",
192
- label: "This week",
193
- start: (0, k.default)().startOf("week").format("YYYY-MM-DD"),
194
- end: (0, k.default)().endOf("week").format("YYYY-MM-DD")
195
- },
196
- {
197
- id: "thisMonth",
198
- label: "This month",
199
- start: (0, k.default)().startOf("month").format("YYYY-MM-DD"),
200
- end: (0, k.default)().endOf("month").format("YYYY-MM-DD")
201
- },
202
- {
203
- id: "lastMonth",
204
- label: "Last month",
205
- start: (0, k.default)().subtract(1, "month").startOf("month").format("YYYY-MM-DD"),
206
- end: (0, k.default)().subtract(1, "month").endOf("month").format("YYYY-MM-DD")
207
- },
208
- {
209
- id: "thisYear",
210
- label: "This year",
211
- start: (0, k.default)().startOf("year").format("YYYY-MM-DD"),
212
- end: (0, k.default)().endOf("year").format("YYYY-MM-DD")
213
- }
214
- ], this.preset = null, this.placeholder = "Select date range", this.clearable = !0, this.collapse = !1, this.open$ = new s(), this.close$ = new s(), this.announce$ = new s(), this.isOpen = !1, this.announceMessage = "", this.startDefault = null, this.endDefault = null, this.presetDefault = null;
220
+ super(...e), this.type = "date", this.start = null, this.end = null, this.defaultPresetsRef = j(), this.presets = this.defaultPresetsRef, this.usingDefaultPresets = !0, this.preset = null, this.placeholder = "Select date range", this.clearable = !0, this.collapse = !1, this.open$ = new s(), this.close$ = new s(), this.announce$ = new s(), this.isOpen = !1, this.announceMessage = "", this.startDefault = null, this.endDefault = null, this.presetDefault = null;
215
221
  }
216
222
  disconnectedCallback() {
217
223
  super.disconnectedCallback(), this.isOpen = !1;
@@ -258,7 +264,7 @@ var j = class extends i() {
258
264
  })), d(document, "keydown").pipe(_((e) => this.handleKeyDown(e)))).pipe(g(this.disconnecting)).subscribe();
259
265
  }
260
266
  willUpdate(e) {
261
- if (super.willUpdate(e), e.has("start") || e.has("end") || e.has("name") || e.has("disabled")) {
267
+ if (super.willUpdate(e), e.has("presets") && this.presets !== this.defaultPresetsRef && (this.usingDefaultPresets = !1), e.has("type") && this.usingDefaultPresets && (this.defaultPresetsRef = j(this.type), this.presets = this.defaultPresetsRef), e.has("start") || e.has("end") || e.has("name") || e.has("disabled")) {
262
268
  if (this.name && !this.disabled) {
263
269
  let e = new FormData();
264
270
  this.start && e.append(`${this.name}.start`, this.start), this.end && e.append(`${this.name}.end`, this.end), this.internals?.setFormValue(e.has(`${this.name}.start`) || e.has(`${this.name}.end`) ? e : null);
@@ -429,5 +435,5 @@ var j = class extends i() {
429
435
  `;
430
436
  }
431
437
  };
432
- r([b()], j.prototype, "type", void 0), r([b()], j.prototype, "start", void 0), r([b()], j.prototype, "end", void 0), r([b({ type: Array })], j.prototype, "presets", void 0), r([b({ reflect: !0 })], j.prototype, "preset", void 0), r([b()], j.prototype, "min", void 0), r([b()], j.prototype, "max", void 0), r([b()], j.prototype, "placeholder", void 0), r([b({ type: Boolean })], j.prototype, "clearable", void 0), r([b()], j.prototype, "step", void 0), r([b({ type: Boolean })], j.prototype, "collapse", void 0), r([x()], j.prototype, "isOpen", void 0), r([x()], j.prototype, "announceMessage", void 0), j = r([y("schmancy-date-range")], j);
433
- export { A as n, j as t };
438
+ r([b()], M.prototype, "type", void 0), r([b()], M.prototype, "start", void 0), r([b()], M.prototype, "end", void 0), r([b({ type: Array })], M.prototype, "presets", void 0), r([b({ reflect: !0 })], M.prototype, "preset", void 0), r([b()], M.prototype, "min", void 0), r([b()], M.prototype, "max", void 0), r([b()], M.prototype, "placeholder", void 0), r([b({ type: Boolean })], M.prototype, "clearable", void 0), r([b()], M.prototype, "step", void 0), r([b({ type: Boolean })], M.prototype, "collapse", void 0), r([x()], M.prototype, "isOpen", void 0), r([x()], M.prototype, "announceMessage", void 0), M = r([y("schmancy-date-range")], M);
439
+ export { A as n, M as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-CDF_5ju_.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\t// When type=\"datetime-local\", the calendar emits YYYY-MM-DD date strings.\n\t\t// A calendar-only pick commits start-of-day (T00:00) for the start and\n\t\t// end-of-day (T23:59) for the end, per ADR-0041 D3.\n\t\tconst isDatetime = this.type === 'datetime-local'\n\t\tthis.dispatchEvent(\n\t\t\tnew CustomEvent('calendar-change', {\n\t\t\t\tdetail: {\n\t\t\t\t\tstart:\n\t\t\t\t\t\tisDatetime && e.detail.start && !e.detail.start.includes('T')\n\t\t\t\t\t\t\t? `${e.detail.start}T00:00`\n\t\t\t\t\t\t\t: e.detail.start,\n\t\t\t\t\tend:\n\t\t\t\t\t\tisDatetime && e.detail.end && !e.detail.end.includes('T')\n\t\t\t\t\t\t\t? `${e.detail.end}T23:59`\n\t\t\t\t\t\t\t: e.detail.end,\n\t\t\t\t},\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(type: 'date' | 'datetime-local' = 'date'): DateRangeDialogPreset[] {\n\tconst fmt = type === 'datetime-local' ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD'\n\treturn [\n\t\t{\n\t\t\tid: 'today',\n\t\t\tlabel: 'Today',\n\t\t\tstart: dayjs().startOf('day').format(fmt),\n\t\t\tend: dayjs().endOf('day').format(fmt),\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(fmt),\n\t\t\tend: dayjs().subtract(1, 'day').endOf('day').format(fmt),\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(fmt),\n\t\t\tend: dayjs().endOf('day').format(fmt),\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(fmt),\n\t\t\tend: dayjs().endOf('day').format(fmt),\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(fmt),\n\t\t\tend: dayjs().endOf('week').format(fmt),\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(fmt),\n\t\t\tend: dayjs().endOf('month').format(fmt),\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(fmt),\n\t\t\tend: dayjs().subtract(1, 'month').endOf('month').format(fmt),\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(fmt),\n\t\t\tend: dayjs().endOf('year').format(fmt),\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/** Reference to the last array produced by buildDefaultPresets; used to detect consumer ownership. */\n\tprivate defaultPresetsRef: DateRangeDialogPreset[] = buildDefaultPresets()\n\n\t@property({ type: Array }) presets: DateRangeDialogPreset[] = this.defaultPresetsRef\n\n\t/** True while the component holds the built-in default preset list (not user-supplied). */\n\tprivate usingDefaultPresets = true\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\t// Consumer ownership detection must run before the type-change rebuild so that\n\t\t// when both `type` and `presets` arrive in the same willUpdate cycle (e.g. simultaneous\n\t\t// attribute/property initialisation), the consumer's presets are not overwritten.\n\t\t//\n\t\t// A `presets` change signals consumer ownership when the incoming value is not the\n\t\t// array reference produced by the internal default-builder (defaultPresetsRef).\n\t\t// Since buildDefaultPresets always allocates a new array, defaultPresetsRef is the\n\t\t// only reference that could match; any other reference came from the consumer.\n\t\tif (changed.has('presets') && this.presets !== this.defaultPresetsRef) {\n\t\t\tthis.usingDefaultPresets = false\n\t\t}\n\t\t// Rebuild built-in presets when type changes, but only while the consumer has never\n\t\t// supplied their own presets array.\n\t\tif (changed.has('type') && this.usingDefaultPresets) {\n\t\t\tthis.defaultPresetsRef = buildDefaultPresets(this.type)\n\t\t\tthis.presets = this.defaultPresetsRef\n\t\t}\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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"}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./date-range-CVAWMdar.cjs`);Object.defineProperty(exports,`SchmancyDateRange`,{enumerable:!0,get:function(){return e.t}}),Object.defineProperty(exports,`SchmancyDateRangeDialog`,{enumerable:!0,get:function(){return e.n}});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./date-range-B2VN7cl_.cjs`);Object.defineProperty(exports,`SchmancyDateRange`,{enumerable:!0,get:function(){return e.t}}),Object.defineProperty(exports,`SchmancyDateRangeDialog`,{enumerable:!0,get:function(){return e.n}});
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./date-range-D2NZU5Yg.js";
1
+ import { n as e, t } from "./date-range-CDF_5ju_.js";
2
2
  export { t as SchmancyDateRange, e as SchmancyDateRangeDialog };
package/dist/form.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-CeKrBW2j.cjs`);require(`./mixins-Cjn20BQH.cjs`),require(`./autocomplete-CILzaDB7.cjs`);const t=require(`./input-chip-BUuFJUky.cjs`),n=require(`./checkbox-DZ2Wrz7Y.cjs`),r=require(`./chips-BHBVkxsa.cjs`),i=require(`./date-range-CVAWMdar.cjs`),a=require(`./form-CoWFnClb.cjs`),o=require(`./input-DSfwfhhj.cjs`);require(`./input.cjs`);const s=require(`./radio-group-CaAjg9UV.cjs`),c=require(`./range.cjs`),l=require(`./select-DcLcpPCh.cjs`),u=require(`./switch.cjs`);require(`./textarea-CGgznhd6.cjs`);let d=require(`lit/decorators.js`),f=require(`lit`);var p=class extends e.t{constructor(...e){super(...e),this.bump=0,this.form=null}connectedCallback(){super.connectedCallback(),this.form=this.closest(`schmancy-form`),this.form&&(this.formObserver=new MutationObserver(()=>{this.bump++}),this.formObserver.observe(this.form,{attributes:!0,subtree:!0}),(async()=>{await this.form?.updateComplete;let e=this.form?.shadowRoot?.querySelector(`[role="status"]`);e&&this.formObserver?.observe(e,{childList:!0,characterData:!0,subtree:!0}),this.bump++})())}disconnectedCallback(){this.formObserver?.disconnect(),this.formObserver=void 0,super.disconnectedCallback()}readFormStatus(){return this.form?this.form.matches(`:state(error)`)?`error`:this.form.matches(`:state(submitting)`)?`submitting`:this.form.matches(`:state(success)`)?`success`:`idle`:`idle`}readFormMessage(){return(this.form?.shadowRoot?.querySelector(`[role="status"]`))?.textContent?.trim()??``}readInvalidFields(){if(!this.form)return[];let e=[];for(let t of Array.from(this.form.querySelectorAll(`*`))){if(!(t instanceof HTMLElement))continue;let n=!1;try{n=t.matches(`:state(invalid)`)}catch{continue}if(!n)continue;let r=t;e.push({id:r.id,label:r.label||r.name||`(field)`,message:r.validationMessage||`Invalid value`})}return e}render(){if(this.bump,this.readFormStatus()!==`error`)return f.nothing;let e=this.readFormMessage(),t=this.readInvalidFields(),n=t.length;return f.html`
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-CncqDLb2.cjs`);const e=require(`./SchmancyElement-CeKrBW2j.cjs`);require(`./mixins-Cjn20BQH.cjs`),require(`./autocomplete-CILzaDB7.cjs`);const t=require(`./input-chip-BUuFJUky.cjs`),n=require(`./checkbox-DZ2Wrz7Y.cjs`),r=require(`./chips-BHBVkxsa.cjs`),i=require(`./date-range-B2VN7cl_.cjs`),a=require(`./form-CoWFnClb.cjs`),o=require(`./input-DSfwfhhj.cjs`);require(`./input.cjs`);const s=require(`./radio-group-CaAjg9UV.cjs`),c=require(`./range.cjs`),l=require(`./select-DcLcpPCh.cjs`),u=require(`./switch.cjs`);require(`./textarea-CGgznhd6.cjs`);let d=require(`lit/decorators.js`),f=require(`lit`);var p=class extends e.t{constructor(...e){super(...e),this.bump=0,this.form=null}connectedCallback(){super.connectedCallback(),this.form=this.closest(`schmancy-form`),this.form&&(this.formObserver=new MutationObserver(()=>{this.bump++}),this.formObserver.observe(this.form,{attributes:!0,subtree:!0}),(async()=>{await this.form?.updateComplete;let e=this.form?.shadowRoot?.querySelector(`[role="status"]`);e&&this.formObserver?.observe(e,{childList:!0,characterData:!0,subtree:!0}),this.bump++})())}disconnectedCallback(){this.formObserver?.disconnect(),this.formObserver=void 0,super.disconnectedCallback()}readFormStatus(){return this.form?this.form.matches(`:state(error)`)?`error`:this.form.matches(`:state(submitting)`)?`submitting`:this.form.matches(`:state(success)`)?`success`:`idle`:`idle`}readFormMessage(){return(this.form?.shadowRoot?.querySelector(`[role="status"]`))?.textContent?.trim()??``}readInvalidFields(){if(!this.form)return[];let e=[];for(let t of Array.from(this.form.querySelectorAll(`*`))){if(!(t instanceof HTMLElement))continue;let n=!1;try{n=t.matches(`:state(invalid)`)}catch{continue}if(!n)continue;let r=t;e.push({id:r.id,label:r.label||r.name||`(field)`,message:r.validationMessage||`Invalid value`})}return e}render(){if(this.bump,this.readFormStatus()!==`error`)return f.nothing;let e=this.readFormMessage(),t=this.readInvalidFields(),n=t.length;return f.html`
2
2
  <div role="alert" aria-labelledby="schmancy-form-summary-heading">
3
3
  <h2 id="schmancy-form-summary-heading">${this.heading??(n===0?`There is a problem with this form`:`There ${n===1?`is`:`are`} ${n} problem${n===1?``:`s`} with this form`)}</h2>
4
4
  ${e?f.html`<p>${e}</p>`:f.nothing}
package/dist/form.js CHANGED
@@ -4,7 +4,7 @@ import "./autocomplete-DV9RxCun.js";
4
4
  import { t as n } from "./input-chip-C3a1fwKB.js";
5
5
  import { t as r } from "./checkbox-Bjp7kWuE.js";
6
6
  import { n as i, r as a, t as o } from "./chips-DACeW7YL.js";
7
- import { n as s, t as c } from "./date-range-D2NZU5Yg.js";
7
+ import { n as s, t as c } from "./date-range-CDF_5ju_.js";
8
8
  import { n as l, t as u } from "./form-hC2LvCHX.js";
9
9
  import { n as d, t as f } from "./input-CPFCSQld.js";
10
10
  import "./input.js";
@@ -203,7 +203,7 @@ The manifest already has everything needed; the package is just the JSON-RPC wra
203
203
 
204
204
  **Problem.** `handover/agent-runtime-v1.md` had `<PENDING>` placeholders that we manually replaced with `0.9.13` after the first publish. Future handover docs will have the same issue.
205
205
 
206
- **Fix.** A build step that substitutes `0.10.43` in `handover/**/*.md` against `package.json`'s `version` field on every build. `dist/handover/**/*.md` gets the rendered version; the source stays templated.
206
+ **Fix.** A build step that substitutes `0.10.44` in `handover/**/*.md` against `package.json`'s `version` field on every build. `dist/handover/**/*.md` gets the rendered version; the source stays templated.
207
207
 
208
208
  **Effort:** ~30 min (one sed step or a tiny script).
209
209