@mhmo91/schmancy 0.10.43 → 0.10.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +2 -2
- package/dist/agent/schmancy.agent.js +785 -779
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/schmancy.manifest.json +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/date-range-B2VN7cl_.cjs +138 -0
- package/dist/date-range-B2VN7cl_.cjs.map +1 -0
- package/dist/{date-range-D2NZU5Yg.js → date-range-CDF_5ju_.js} +63 -57
- package/dist/date-range-CDF_5ju_.js.map +1 -0
- package/dist/date-range.cjs +1 -1
- package/dist/date-range.js +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +1 -1
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/{src-DAtcPmCb.js → src-Bo-vvN6m.js} +1 -1
- package/dist/{src-DAtcPmCb.js.map → src-Bo-vvN6m.js.map} +1 -1
- package/dist/{src-DuRvYagm.cjs → src-MdpH1zth.cjs} +1 -1
- package/dist/{src-DuRvYagm.cjs.map → src-MdpH1zth.cjs.map} +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/package.json +1 -1
- package/src/form/fields/date-range/date-range-dialog.ts +14 -1
- package/src/form/fields/date-range/date-range.test.ts +218 -1
- package/src/form/fields/date-range/date-range.ts +42 -18
- package/types/src/form/fields/date-range/date-range.d.ts +4 -0
- package/dist/date-range-CVAWMdar.cjs +0 -138
- package/dist/date-range-CVAWMdar.cjs.map +0 -1
- package/dist/date-range-D2NZU5Yg.js.map +0 -1
package/dist/badge.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-
|
|
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-
|
|
1
|
+
import { T as e, w as t } from "./src-Bo-vvN6m.js";
|
|
2
2
|
export { t as ScBadgeV2, e as SchmancyBadgeV2 };
|
package/dist/content-drawer.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./src-
|
|
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;
|
package/dist/content-drawer.js
CHANGED
|
@@ -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-
|
|
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":"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"}
|
|
@@ -55,10 +55,12 @@ var O = e(t((e, t) => {
|
|
|
55
55
|
}));
|
|
56
56
|
}
|
|
57
57
|
handleCalendarChange(e) {
|
|
58
|
-
e.stopPropagation()
|
|
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
|
|
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()],
|
|
433
|
-
export { A as n,
|
|
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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"}
|
package/dist/date-range.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./date-range-
|
|
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}});
|
package/dist/date-range.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./date-range-
|
|
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-
|
|
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-
|
|
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.
|
|
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
|
|