@nepdatejs/vanilla 0.0.0-stage → 0.1.1
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/LICENSE +21 -0
- package/README.md +124 -2
- package/dist/auto-define.cjs +11 -0
- package/dist/auto-define.cjs.map +1 -0
- package/dist/auto-define.d.cts +2 -0
- package/dist/auto-define.d.ts +2 -0
- package/dist/auto-define.js +9 -0
- package/dist/auto-define.js.map +1 -0
- package/dist/calendar-BAcO-jYq.js +142 -0
- package/dist/calendar-BAcO-jYq.js.map +1 -0
- package/dist/calendar-BNdN8qJv.d.ts +87 -0
- package/dist/calendar-C1LZI7XN.cjs +159 -0
- package/dist/calendar-C1LZI7XN.cjs.map +1 -0
- package/dist/calendar-QWPX0IfD.d.cts +87 -0
- package/dist/calendar.cjs +7 -0
- package/dist/calendar.d.cts +2 -0
- package/dist/calendar.d.ts +2 -0
- package/dist/calendar.js +3 -0
- package/dist/date-picker-BidCGOz0.d.cts +74 -0
- package/dist/date-picker-BwlrlU5Y.js +560 -0
- package/dist/date-picker-BwlrlU5Y.js.map +1 -0
- package/dist/date-picker-CgjYsf1w.cjs +583 -0
- package/dist/date-picker-CgjYsf1w.cjs.map +1 -0
- package/dist/date-picker-DyvpYe29.d.ts +74 -0
- package/dist/date-picker.cjs +6 -0
- package/dist/date-picker.d.cts +3 -0
- package/dist/date-picker.d.ts +3 -0
- package/dist/date-picker.js +1 -0
- package/dist/date-range-picker-D3eNvlgv.d.ts +98 -0
- package/dist/date-range-picker-NwetXUC-.js +449 -0
- package/dist/date-range-picker-NwetXUC-.js.map +1 -0
- package/dist/date-range-picker-SIl0vhUV.d.cts +98 -0
- package/dist/date-range-picker-VrQZFZED.cjs +472 -0
- package/dist/date-range-picker-VrQZFZED.cjs.map +1 -0
- package/dist/date-range-picker.cjs +6 -0
- package/dist/date-range-picker.d.cts +2 -0
- package/dist/date-range-picker.d.ts +2 -0
- package/dist/date-range-picker.js +1 -0
- package/dist/date-time-picker-BzSyQxrf.d.cts +92 -0
- package/dist/date-time-picker-ChHIBTBw.cjs +492 -0
- package/dist/date-time-picker-ChHIBTBw.cjs.map +1 -0
- package/dist/date-time-picker-CxqC95aM.js +469 -0
- package/dist/date-time-picker-CxqC95aM.js.map +1 -0
- package/dist/date-time-picker-DzDpzLMZ.d.ts +92 -0
- package/dist/date-time-picker.cjs +6 -0
- package/dist/date-time-picker.d.cts +2 -0
- package/dist/date-time-picker.d.ts +2 -0
- package/dist/date-time-picker.js +1 -0
- package/dist/define-B8NUA3yj.d.cts +16 -0
- package/dist/define-B8NUA3yj.d.ts +16 -0
- package/dist/define-BbTIFHtH.cjs +23 -0
- package/dist/define-BbTIFHtH.cjs.map +1 -0
- package/dist/define-D96w8Zu2.js +18 -0
- package/dist/define-D96w8Zu2.js.map +1 -0
- package/dist/element-utils-BVye8UQq.d.cts +82 -0
- package/dist/element-utils-C-r5gPlk.d.ts +82 -0
- package/dist/index.cjs +30 -0
- package/dist/index.d.cts +8 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +8 -0
- package/dist/multi-date-picker-B2mQbjZM.d.ts +105 -0
- package/dist/multi-date-picker-BUNf5zyJ.d.cts +105 -0
- package/dist/multi-date-picker-C3Lr0Dq-.js +424 -0
- package/dist/multi-date-picker-C3Lr0Dq-.js.map +1 -0
- package/dist/multi-date-picker-DUyuO-nH.cjs +447 -0
- package/dist/multi-date-picker-DUyuO-nH.cjs.map +1 -0
- package/dist/multi-date-picker.cjs +6 -0
- package/dist/multi-date-picker.d.cts +2 -0
- package/dist/multi-date-picker.d.ts +2 -0
- package/dist/multi-date-picker.js +1 -0
- package/dist/nepdate-picker.global.js +3 -0
- package/dist/nepdate-picker.global.js.map +1 -0
- package/dist/preset-list-BYCZm61I.cjs +97 -0
- package/dist/preset-list-BYCZm61I.cjs.map +1 -0
- package/dist/preset-list-DmE6fJjr.js +80 -0
- package/dist/preset-list-DmE6fJjr.js.map +1 -0
- package/dist/registry-3qzdVB7H.cjs +591 -0
- package/dist/registry-3qzdVB7H.cjs.map +1 -0
- package/dist/registry-BvkGnkvV.js +466 -0
- package/dist/registry-BvkGnkvV.js.map +1 -0
- package/package.json +162 -3
- package/src/auto-define.ts +6 -0
- package/src/calendar-element.ts +129 -0
- package/src/calendar-view.ts +406 -0
- package/src/calendar.ts +45 -0
- package/src/date-picker-element.ts +249 -0
- package/src/date-picker.ts +91 -0
- package/src/date-range-picker-element.ts +201 -0
- package/src/date-range-picker.ts +20 -0
- package/src/date-time-picker-element.ts +191 -0
- package/src/date-time-picker.ts +20 -0
- package/src/datetime-view.ts +434 -0
- package/src/define.ts +16 -0
- package/src/dom.ts +109 -0
- package/src/element-utils.ts +86 -0
- package/src/global.ts +7 -0
- package/src/index.ts +15 -0
- package/src/multi-date-picker-element.ts +187 -0
- package/src/multi-date-picker.ts +53 -0
- package/src/multi-view.ts +323 -0
- package/src/panel.ts +61 -0
- package/src/picker-view.ts +423 -0
- package/src/preset-list.ts +51 -0
- package/src/range-view.ts +368 -0
- package/src/registry.ts +27 -0
|
@@ -0,0 +1,447 @@
|
|
|
1
|
+
const require_registry = require("./registry-3qzdVB7H.cjs");
|
|
2
|
+
const require_preset_list = require("./preset-list-BYCZm61I.cjs");
|
|
3
|
+
let _nepdatejs_core = require("@nepdatejs/core");
|
|
4
|
+
let _nepdatejs_datepicker = require("@nepdatejs/datepicker");
|
|
5
|
+
let _nepdatejs_dom = require("@nepdatejs/dom");
|
|
6
|
+
//#region src/multi-view.ts
|
|
7
|
+
const VIEW_KEYS = /* @__PURE__ */ new Set([
|
|
8
|
+
"name",
|
|
9
|
+
"hiddenInput",
|
|
10
|
+
"id",
|
|
11
|
+
"placeholder",
|
|
12
|
+
"required",
|
|
13
|
+
"disabled",
|
|
14
|
+
"clearable",
|
|
15
|
+
"panelLayout",
|
|
16
|
+
"theme",
|
|
17
|
+
"ariaLabel",
|
|
18
|
+
"onOpenChange",
|
|
19
|
+
"onChange"
|
|
20
|
+
]);
|
|
21
|
+
/**
|
|
22
|
+
* The multiple-date picker field and panel (PICK-001), rendered with the
|
|
23
|
+
* @nepdatejs/styles markup into `host`. Used by <nep-multi-date-picker> and by
|
|
24
|
+
* createMultiDatePicker().
|
|
25
|
+
*/
|
|
26
|
+
var MultiDatePickerView = class {
|
|
27
|
+
constructor(host, options = {}) {
|
|
28
|
+
this.closePanel = null;
|
|
29
|
+
this.wasOpen = false;
|
|
30
|
+
this.onClick = (event) => {
|
|
31
|
+
const target = event.target instanceof Element ? event.target : null;
|
|
32
|
+
if (!target || this.calendarView.element.contains(target)) return;
|
|
33
|
+
const calendar = target.closest("[data-calendar]")?.dataset["calendar"];
|
|
34
|
+
if (calendar === "BS" || calendar === "AD") {
|
|
35
|
+
this.store.actions.switchCalendar(calendar);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
switch (target.closest("[data-action]")?.dataset["action"]) {
|
|
39
|
+
case "clear":
|
|
40
|
+
this.store.actions.clear();
|
|
41
|
+
this.input.focus();
|
|
42
|
+
break;
|
|
43
|
+
case "toggle":
|
|
44
|
+
if (this.store.getState().open) this.close();
|
|
45
|
+
else this.open();
|
|
46
|
+
break;
|
|
47
|
+
case "done":
|
|
48
|
+
this.close();
|
|
49
|
+
(0, _nepdatejs_dom.restoreFocus)(this.input);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
this.options = { ...options };
|
|
53
|
+
this.store = (0, _nepdatejs_datepicker.createMultiDatePicker)({
|
|
54
|
+
...storeOptions(options),
|
|
55
|
+
onChange: (value, dates) => {
|
|
56
|
+
this.options.onChange?.(value, dates);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
const inputId = options.id ?? require_registry.uid("ndp-multi");
|
|
60
|
+
const panelId = `${inputId}-panel`;
|
|
61
|
+
this.input = require_registry.el("input", {
|
|
62
|
+
class: "ndp-input__control",
|
|
63
|
+
id: inputId,
|
|
64
|
+
type: "text",
|
|
65
|
+
inputmode: "numeric",
|
|
66
|
+
autocomplete: "off",
|
|
67
|
+
spellcheck: "false",
|
|
68
|
+
"aria-controls": panelId
|
|
69
|
+
});
|
|
70
|
+
this.clearButton = require_registry.el("button", {
|
|
71
|
+
type: "button",
|
|
72
|
+
class: "ndp-icon-button",
|
|
73
|
+
"data-action": "clear"
|
|
74
|
+
}, [require_registry.icon("close")]);
|
|
75
|
+
this.toggleButton = require_registry.el("button", {
|
|
76
|
+
type: "button",
|
|
77
|
+
class: "ndp-icon-button",
|
|
78
|
+
"data-action": "toggle"
|
|
79
|
+
}, [require_registry.icon("calendar")]);
|
|
80
|
+
this.box = require_registry.el("div", { class: "ndp-input" }, [this.input, require_registry.el("span", { class: "ndp-input__actions" }, [this.clearButton, this.toggleButton])]);
|
|
81
|
+
this.hint = require_registry.el("p", {
|
|
82
|
+
class: "ndp-hint",
|
|
83
|
+
id: `${inputId}-hint`,
|
|
84
|
+
"aria-live": "polite",
|
|
85
|
+
"data-error": true,
|
|
86
|
+
hidden: true
|
|
87
|
+
});
|
|
88
|
+
this.hiddenInputs = require_registry.el("span", { hidden: true });
|
|
89
|
+
this.segment = require_registry.el("div", {
|
|
90
|
+
class: "ndp-segment",
|
|
91
|
+
role: "group"
|
|
92
|
+
}, [require_registry.el("button", {
|
|
93
|
+
type: "button",
|
|
94
|
+
class: "ndp-segment__item",
|
|
95
|
+
"data-calendar": "BS"
|
|
96
|
+
}), require_registry.el("button", {
|
|
97
|
+
type: "button",
|
|
98
|
+
class: "ndp-segment__item",
|
|
99
|
+
"data-calendar": "AD"
|
|
100
|
+
})]);
|
|
101
|
+
this.doneButton = require_registry.el("button", {
|
|
102
|
+
type: "button",
|
|
103
|
+
class: "ndp-button",
|
|
104
|
+
"data-action": "done"
|
|
105
|
+
});
|
|
106
|
+
const calendarRoot = require_registry.el("div", { class: "ndp-panel__calendar" });
|
|
107
|
+
this.panel = require_registry.el("div", {
|
|
108
|
+
class: "ndp-panel",
|
|
109
|
+
id: panelId,
|
|
110
|
+
hidden: true
|
|
111
|
+
}, [calendarRoot, require_registry.el("div", { class: "ndp-panel__footer" }, [this.segment, this.doneButton])]);
|
|
112
|
+
this.field = require_registry.el("div", { class: "ndp-field" }, [
|
|
113
|
+
this.box,
|
|
114
|
+
this.hint,
|
|
115
|
+
this.hiddenInputs,
|
|
116
|
+
this.panel
|
|
117
|
+
]);
|
|
118
|
+
host.append(this.field);
|
|
119
|
+
this.calendarView = new require_registry.CalendarView(calendarRoot, this.store.calendar, {
|
|
120
|
+
locale: () => this.options.locale,
|
|
121
|
+
onDayActivate: (date) => {
|
|
122
|
+
if (this.store.actions.select(date) && !this.store.getState().open) (0, _nepdatejs_dom.restoreFocus)(this.input);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
this.input.addEventListener("input", () => {
|
|
126
|
+
this.store.actions.type(this.input.value);
|
|
127
|
+
});
|
|
128
|
+
this.input.addEventListener("blur", () => {
|
|
129
|
+
this.store.actions.blur();
|
|
130
|
+
});
|
|
131
|
+
this.input.addEventListener("keydown", (event) => {
|
|
132
|
+
if (event.key === "ArrowDown" && (event.altKey || this.input.value === "")) {
|
|
133
|
+
event.preventDefault();
|
|
134
|
+
this.open();
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
this.field.addEventListener("click", this.onClick);
|
|
138
|
+
this.unsubscribe = this.store.subscribe(() => {
|
|
139
|
+
this.render();
|
|
140
|
+
});
|
|
141
|
+
this.render();
|
|
142
|
+
}
|
|
143
|
+
getState() {
|
|
144
|
+
return this.store.getState();
|
|
145
|
+
}
|
|
146
|
+
/** Change view or store options. Unknown keys are ignored. */
|
|
147
|
+
setOptions(changes) {
|
|
148
|
+
this.options = {
|
|
149
|
+
...this.options,
|
|
150
|
+
...changes
|
|
151
|
+
};
|
|
152
|
+
const forStore = storeOptions(changes);
|
|
153
|
+
if (Object.keys(forStore).length > 0) this.store.setOptions(forStore);
|
|
154
|
+
else this.render();
|
|
155
|
+
}
|
|
156
|
+
open() {
|
|
157
|
+
if (!this.options.disabled) this.store.actions.open();
|
|
158
|
+
}
|
|
159
|
+
close() {
|
|
160
|
+
this.store.actions.close();
|
|
161
|
+
}
|
|
162
|
+
destroy() {
|
|
163
|
+
this.closePanel?.();
|
|
164
|
+
this.unsubscribe();
|
|
165
|
+
this.calendarView.destroy();
|
|
166
|
+
this.field.remove();
|
|
167
|
+
}
|
|
168
|
+
render() {
|
|
169
|
+
const state = this.store.getState();
|
|
170
|
+
const locale = (0, _nepdatejs_core.getLocale)(this.options.locale);
|
|
171
|
+
const disabled = this.options.disabled ?? false;
|
|
172
|
+
if (this.input.value !== state.text) this.input.value = state.text;
|
|
173
|
+
this.input.setCustomValidity(state.error?.message ?? "");
|
|
174
|
+
require_registry.setAttrs(this.input, {
|
|
175
|
+
placeholder: this.options.placeholder ?? state.placeholder,
|
|
176
|
+
disabled,
|
|
177
|
+
required: this.options.required ?? false,
|
|
178
|
+
"aria-label": this.options.ariaLabel ?? null,
|
|
179
|
+
"aria-invalid": state.error ? "true" : null,
|
|
180
|
+
"aria-describedby": state.error ? this.hint.id : null
|
|
181
|
+
});
|
|
182
|
+
require_registry.setAttrs(this.box, {
|
|
183
|
+
"data-invalid": state.error !== null,
|
|
184
|
+
"data-disabled": disabled
|
|
185
|
+
});
|
|
186
|
+
require_registry.setAttrs(this.field, { "data-ndp-theme": this.options.theme ?? null });
|
|
187
|
+
require_registry.setAttrs(this.panel, {
|
|
188
|
+
"data-ndp-theme": this.options.theme ?? null,
|
|
189
|
+
"aria-label": this.options.ariaLabel ? `${this.options.ariaLabel}: ${locale.labels.calendar}` : locale.labels.chooseDate
|
|
190
|
+
});
|
|
191
|
+
this.clearButton.hidden = !(this.options.clearable ?? true) || state.text === "" || disabled;
|
|
192
|
+
require_registry.setAttrs(this.clearButton, { "aria-label": locale.labels.clear });
|
|
193
|
+
require_registry.setAttrs(this.toggleButton, {
|
|
194
|
+
disabled,
|
|
195
|
+
"aria-label": locale.labels.openCalendar
|
|
196
|
+
});
|
|
197
|
+
this.hint.hidden = state.error === null;
|
|
198
|
+
require_registry.setText(this.hint, state.error?.message ?? "");
|
|
199
|
+
require_preset_list.renderSegment(this.segment, state, locale);
|
|
200
|
+
require_registry.setText(this.doneButton, locale.labels.done);
|
|
201
|
+
this.doneButton.hidden = state.inline;
|
|
202
|
+
const name = this.options.hiddenInput === false ? void 0 : this.options.name;
|
|
203
|
+
this.hiddenInputs.replaceChildren(...name === void 0 ? [] : state.value.map((value) => require_registry.el("input", {
|
|
204
|
+
type: "hidden",
|
|
205
|
+
name,
|
|
206
|
+
value,
|
|
207
|
+
disabled
|
|
208
|
+
})));
|
|
209
|
+
require_registry.setPopupMode(state, [this.input], this.toggleButton, this.panel);
|
|
210
|
+
this.syncPanel(state.open && !state.inline);
|
|
211
|
+
this.panel.hidden = !state.inline && !this.wasOpen;
|
|
212
|
+
this.panel.style.setProperty("--ndp-panel-width", state.inline ? `${String(320)}px` : null);
|
|
213
|
+
}
|
|
214
|
+
syncPanel(open) {
|
|
215
|
+
if (open === this.wasOpen) return;
|
|
216
|
+
this.wasOpen = open;
|
|
217
|
+
this.options.onOpenChange?.(open);
|
|
218
|
+
if (open) {
|
|
219
|
+
this.closePanel = require_preset_list.openPanel({
|
|
220
|
+
panel: this.panel,
|
|
221
|
+
anchor: this.box,
|
|
222
|
+
inside: [this.field, this.panel],
|
|
223
|
+
width: 320,
|
|
224
|
+
layout: this.options.panelLayout,
|
|
225
|
+
close: () => {
|
|
226
|
+
this.store.actions.close();
|
|
227
|
+
},
|
|
228
|
+
returnFocus: this.input
|
|
229
|
+
});
|
|
230
|
+
this.calendarView.focusGrid();
|
|
231
|
+
} else {
|
|
232
|
+
this.closePanel?.();
|
|
233
|
+
this.closePanel = null;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
/** Only the keys the picker store understands, minus the view's own callbacks. */
|
|
238
|
+
function storeOptions(options) {
|
|
239
|
+
const out = {};
|
|
240
|
+
for (const [key, value] of Object.entries(options)) if (!VIEW_KEYS.has(key)) out[key] = value;
|
|
241
|
+
return out;
|
|
242
|
+
}
|
|
243
|
+
//#endregion
|
|
244
|
+
//#region src/multi-date-picker-element.ts
|
|
245
|
+
/**
|
|
246
|
+
* <nep-multi-date-picker name="holidays" value="2026-10-18,2026-10-20"></nep-multi-date-picker>
|
|
247
|
+
*
|
|
248
|
+
* A form-associated field for several separate BS/AD days (PICK-001). The form
|
|
249
|
+
* receives one entry per day under `name`, each an AD "YYYY-MM-DD". Fires
|
|
250
|
+
* `change` with { value: string[], dates: { ad, bs }[] }.
|
|
251
|
+
*/
|
|
252
|
+
var NepMultiDatePickerElement = class extends require_registry.Base {
|
|
253
|
+
constructor() {
|
|
254
|
+
super();
|
|
255
|
+
this.view = null;
|
|
256
|
+
this.rich = {};
|
|
257
|
+
this.unsubscribe = null;
|
|
258
|
+
this.internals = typeof this.attachInternals === "function" ? this.attachInternals() : null;
|
|
259
|
+
require_registry.swallowInnerChange(this);
|
|
260
|
+
}
|
|
261
|
+
get value() {
|
|
262
|
+
return this.view?.getState().value ?? [];
|
|
263
|
+
}
|
|
264
|
+
set value(next) {
|
|
265
|
+
this.view?.store.actions.setValue(next);
|
|
266
|
+
}
|
|
267
|
+
set holidays(next) {
|
|
268
|
+
this.rich = {
|
|
269
|
+
...this.rich,
|
|
270
|
+
holidays: next
|
|
271
|
+
};
|
|
272
|
+
this.view?.setOptions({ holidays: next });
|
|
273
|
+
}
|
|
274
|
+
set events(next) {
|
|
275
|
+
this.rich = {
|
|
276
|
+
...this.rich,
|
|
277
|
+
events: next
|
|
278
|
+
};
|
|
279
|
+
this.view?.setOptions({ events: next });
|
|
280
|
+
}
|
|
281
|
+
set isDateDisabled(next) {
|
|
282
|
+
this.rich = {
|
|
283
|
+
...this.rich,
|
|
284
|
+
isDateDisabled: next
|
|
285
|
+
};
|
|
286
|
+
this.view?.setOptions({ isDateDisabled: next });
|
|
287
|
+
}
|
|
288
|
+
connectedCallback() {
|
|
289
|
+
if (this.view) return;
|
|
290
|
+
const view = new MultiDatePickerView(this, {
|
|
291
|
+
...this.readOptions(),
|
|
292
|
+
defaultValue: list(require_registry.str(this, "value")),
|
|
293
|
+
onChange: (value, dates) => {
|
|
294
|
+
this.dispatchEvent(new CustomEvent("change", {
|
|
295
|
+
bubbles: true,
|
|
296
|
+
detail: {
|
|
297
|
+
value,
|
|
298
|
+
dates
|
|
299
|
+
}
|
|
300
|
+
}));
|
|
301
|
+
},
|
|
302
|
+
onOpenChange: (open) => {
|
|
303
|
+
this.dispatchEvent(new CustomEvent(open ? "nep-open" : "nep-close", { bubbles: true }));
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
this.view = view;
|
|
307
|
+
this.unsubscribe = view.store.subscribe(() => {
|
|
308
|
+
this.syncForm();
|
|
309
|
+
});
|
|
310
|
+
this.syncForm();
|
|
311
|
+
}
|
|
312
|
+
disconnectedCallback() {
|
|
313
|
+
this.unsubscribe?.();
|
|
314
|
+
this.view?.destroy();
|
|
315
|
+
this.view = null;
|
|
316
|
+
}
|
|
317
|
+
attributeChangedCallback(name, previous, next) {
|
|
318
|
+
if (!this.view || previous === next) return;
|
|
319
|
+
if (name === "value") this.view.store.actions.setValue(list(next ?? ""));
|
|
320
|
+
this.view.setOptions(this.readOptions());
|
|
321
|
+
this.syncForm();
|
|
322
|
+
}
|
|
323
|
+
formResetCallback() {
|
|
324
|
+
this.view?.store.actions.reset();
|
|
325
|
+
}
|
|
326
|
+
formDisabledCallback(disabled) {
|
|
327
|
+
this.view?.setOptions({ disabled: disabled || require_registry.bool(this, "disabled") });
|
|
328
|
+
}
|
|
329
|
+
focus(options) {
|
|
330
|
+
this.view?.input.focus(options);
|
|
331
|
+
}
|
|
332
|
+
readOptions() {
|
|
333
|
+
return {
|
|
334
|
+
...this.rich,
|
|
335
|
+
min: require_registry.str(this, "min"),
|
|
336
|
+
max: require_registry.str(this, "max"),
|
|
337
|
+
maxDates: require_registry.int(this, "max-dates"),
|
|
338
|
+
calendar: require_registry.calendarAttr(this, "calendar"),
|
|
339
|
+
defaultCalendar: require_registry.calendarAttr(this, "default-calendar"),
|
|
340
|
+
locale: require_registry.str(this, "locale"),
|
|
341
|
+
name: require_registry.str(this, "name"),
|
|
342
|
+
hiddenInput: this.internals === null,
|
|
343
|
+
required: require_registry.bool(this, "required"),
|
|
344
|
+
disabled: require_registry.bool(this, "disabled"),
|
|
345
|
+
clearable: require_registry.onUnlessFalse(this, "clearable"),
|
|
346
|
+
closeOnSelect: require_registry.bool(this, "close-on-select"),
|
|
347
|
+
theme: require_registry.theme(this),
|
|
348
|
+
panelLayout: require_registry.panelLayout(this),
|
|
349
|
+
mask: require_registry.onUnlessFalse(this, "mask"),
|
|
350
|
+
inline: require_registry.bool(this, "inline"),
|
|
351
|
+
ariaLabel: require_registry.str(this, "label")
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
syncForm() {
|
|
355
|
+
const view = this.view;
|
|
356
|
+
if (!view || !this.internals) return;
|
|
357
|
+
const state = view.getState();
|
|
358
|
+
const name = require_registry.str(this, "name");
|
|
359
|
+
const data = new FormData();
|
|
360
|
+
if (name !== void 0) for (const day of state.value) data.append(name, day);
|
|
361
|
+
this.internals.setFormValue(state.value.length === 0 ? null : data);
|
|
362
|
+
if (state.error) this.internals.setValidity({ customError: true }, state.error.message, view.input);
|
|
363
|
+
else if (require_registry.bool(this, "required") && state.value.length === 0) this.internals.setValidity({ valueMissing: true }, "Please choose at least one date.", view.input);
|
|
364
|
+
else this.internals.setValidity({});
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
NepMultiDatePickerElement.formAssociated = true;
|
|
368
|
+
NepMultiDatePickerElement.observedAttributes = [
|
|
369
|
+
"value",
|
|
370
|
+
"min",
|
|
371
|
+
"max",
|
|
372
|
+
"max-dates",
|
|
373
|
+
"calendar",
|
|
374
|
+
"default-calendar",
|
|
375
|
+
"locale",
|
|
376
|
+
"name",
|
|
377
|
+
"required",
|
|
378
|
+
"disabled",
|
|
379
|
+
"clearable",
|
|
380
|
+
"close-on-select",
|
|
381
|
+
"theme",
|
|
382
|
+
"panel-layout",
|
|
383
|
+
"mask",
|
|
384
|
+
"inline",
|
|
385
|
+
"label"
|
|
386
|
+
];
|
|
387
|
+
/** "2026-10-18, 2026-10-20" → ['2026-10-18', '2026-10-20'] */
|
|
388
|
+
function list(value) {
|
|
389
|
+
return (value ?? "").split(/[\s,]+/).filter((day) => day !== "");
|
|
390
|
+
}
|
|
391
|
+
//#endregion
|
|
392
|
+
//#region src/multi-date-picker.ts
|
|
393
|
+
/** Register <nep-multi-date-picker> (skipped if already defined). */
|
|
394
|
+
function defineMultiDatePicker(registry) {
|
|
395
|
+
require_registry.defineElement(require_registry.ELEMENT_NAMES.multiDatePicker, NepMultiDatePickerElement, registry);
|
|
396
|
+
}
|
|
397
|
+
/** Mount a multiple-date picker into a container, without custom elements. */
|
|
398
|
+
function createMultiDatePicker(container, options = {}) {
|
|
399
|
+
const view = new MultiDatePickerView(container, options);
|
|
400
|
+
return {
|
|
401
|
+
view,
|
|
402
|
+
getValue: () => view.getState().value,
|
|
403
|
+
getState: () => view.getState(),
|
|
404
|
+
setValue: (value) => {
|
|
405
|
+
view.store.actions.setValue(value);
|
|
406
|
+
},
|
|
407
|
+
setOptions: (changes) => {
|
|
408
|
+
view.setOptions(changes);
|
|
409
|
+
},
|
|
410
|
+
open: () => {
|
|
411
|
+
view.open();
|
|
412
|
+
},
|
|
413
|
+
close: () => {
|
|
414
|
+
view.close();
|
|
415
|
+
},
|
|
416
|
+
destroy: () => {
|
|
417
|
+
view.destroy();
|
|
418
|
+
}
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
//#endregion
|
|
422
|
+
Object.defineProperty(exports, "MultiDatePickerView", {
|
|
423
|
+
enumerable: true,
|
|
424
|
+
get: function() {
|
|
425
|
+
return MultiDatePickerView;
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
Object.defineProperty(exports, "NepMultiDatePickerElement", {
|
|
429
|
+
enumerable: true,
|
|
430
|
+
get: function() {
|
|
431
|
+
return NepMultiDatePickerElement;
|
|
432
|
+
}
|
|
433
|
+
});
|
|
434
|
+
Object.defineProperty(exports, "createMultiDatePicker", {
|
|
435
|
+
enumerable: true,
|
|
436
|
+
get: function() {
|
|
437
|
+
return createMultiDatePicker;
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
Object.defineProperty(exports, "defineMultiDatePicker", {
|
|
441
|
+
enumerable: true,
|
|
442
|
+
get: function() {
|
|
443
|
+
return defineMultiDatePicker;
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
|
|
447
|
+
//# sourceMappingURL=multi-date-picker-DUyuO-nH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-date-picker-DUyuO-nH.cjs","names":["createMultiDatePicker","uid","el","icon","CalendarView","getLocale","openPanel","Base","str","bool","int","calendarAttr","onUnlessFalse","theme","panelLayout","ELEMENT_NAMES"],"sources":["../src/multi-view.ts","../src/multi-date-picker-element.ts","../src/multi-date-picker.ts"],"sourcesContent":["import { getLocale } from '@nepdatejs/core';\nimport {\n createMultiDatePicker,\n type MultiDatePickerOptions,\n type MultiDatePickerState,\n type MultiDatePickerStore,\n} from '@nepdatejs/datepicker';\nimport { restoreFocus, type PanelLayout } from '@nepdatejs/dom';\nimport { CalendarView } from './calendar-view';\nimport { openPanel, renderSegment } from './panel';\nimport { el, icon, setAttrs, setPopupMode, setText, uid } from './dom';\nimport type { Theme } from './picker-view';\nimport { PANEL_WIDTH } from './preset-list';\n\n/** Everything the multiple-date picker DOM needs on top of the store's options. */\nexport interface MultiDatePickerViewOptions extends MultiDatePickerOptions {\n /** Submit each day under this name (one hidden input per day). */\n readonly name?: string | undefined;\n /** Render hidden inputs for `name`. Off for the form-associated custom element. */\n readonly hiddenInput?: boolean | undefined;\n readonly id?: string | undefined;\n readonly placeholder?: string | undefined;\n readonly required?: boolean | undefined;\n readonly disabled?: boolean | undefined;\n /** Show the × button. Default true. */\n readonly clearable?: boolean | undefined;\n /** 'sheet' opens a bottom sheet; 'popover' sits beside the field; 'auto' (default) uses the sheet below 480px. */\n readonly panelLayout?: PanelLayout | undefined;\n readonly theme?: Theme | undefined;\n readonly ariaLabel?: string | undefined;\n readonly onOpenChange?: ((open: boolean) => void) | undefined;\n}\n\nconst VIEW_KEYS = new Set([\n 'name',\n 'hiddenInput',\n 'id',\n 'placeholder',\n 'required',\n 'disabled',\n 'clearable',\n 'panelLayout',\n 'theme',\n 'ariaLabel',\n 'onOpenChange',\n 'onChange',\n]);\n\n/**\n * The multiple-date picker field and panel (PICK-001), rendered with the\n * @nepdatejs/styles markup into `host`. Used by <nep-multi-date-picker> and by\n * createMultiDatePicker().\n */\nexport class MultiDatePickerView {\n readonly store: MultiDatePickerStore;\n readonly input: HTMLInputElement;\n private options: MultiDatePickerViewOptions;\n private readonly field: HTMLDivElement;\n private readonly box: HTMLDivElement;\n private readonly clearButton: HTMLButtonElement;\n private readonly toggleButton: HTMLButtonElement;\n private readonly hint: HTMLParagraphElement;\n private readonly panel: HTMLDivElement;\n private readonly segment: HTMLDivElement;\n private readonly doneButton: HTMLButtonElement;\n private readonly hiddenInputs: HTMLSpanElement;\n private readonly calendarView: CalendarView;\n private readonly unsubscribe: () => void;\n private closePanel: (() => void) | null = null;\n private wasOpen = false;\n\n constructor(host: HTMLElement, options: MultiDatePickerViewOptions = {}) {\n this.options = { ...options };\n this.store = createMultiDatePicker({\n ...storeOptions(options),\n onChange: (value, dates) => {\n this.options.onChange?.(value, dates);\n },\n });\n\n const inputId = options.id ?? uid('ndp-multi');\n const panelId = `${inputId}-panel`;\n this.input = el('input', {\n class: 'ndp-input__control',\n id: inputId,\n type: 'text',\n inputmode: 'numeric',\n autocomplete: 'off',\n spellcheck: 'false',\n 'aria-controls': panelId,\n });\n this.clearButton = el(\n 'button',\n { type: 'button', class: 'ndp-icon-button', 'data-action': 'clear' },\n [icon('close')],\n );\n this.toggleButton = el(\n 'button',\n { type: 'button', class: 'ndp-icon-button', 'data-action': 'toggle' },\n [icon('calendar')],\n );\n this.box = el('div', { class: 'ndp-input' }, [\n this.input,\n el('span', { class: 'ndp-input__actions' }, [this.clearButton, this.toggleButton]),\n ]);\n this.hint = el('p', {\n class: 'ndp-hint',\n id: `${inputId}-hint`,\n 'aria-live': 'polite',\n 'data-error': true,\n hidden: true,\n });\n this.hiddenInputs = el('span', { hidden: true });\n this.segment = el('div', { class: 'ndp-segment', role: 'group' }, [\n el('button', { type: 'button', class: 'ndp-segment__item', 'data-calendar': 'BS' }),\n el('button', { type: 'button', class: 'ndp-segment__item', 'data-calendar': 'AD' }),\n ]);\n this.doneButton = el('button', {\n type: 'button',\n class: 'ndp-button',\n 'data-action': 'done',\n });\n const calendarRoot = el('div', { class: 'ndp-panel__calendar' });\n this.panel = el('div', { class: 'ndp-panel', id: panelId, hidden: true }, [\n calendarRoot,\n el('div', { class: 'ndp-panel__footer' }, [this.segment, this.doneButton]),\n ]);\n this.field = el('div', { class: 'ndp-field' }, [\n this.box,\n this.hint,\n this.hiddenInputs,\n this.panel,\n ]);\n host.append(this.field);\n\n this.calendarView = new CalendarView(calendarRoot, this.store.calendar, {\n locale: () => this.options.locale,\n onDayActivate: (date) => {\n if (this.store.actions.select(date) && !this.store.getState().open) {\n restoreFocus(this.input);\n }\n },\n });\n\n this.input.addEventListener('input', () => {\n this.store.actions.type(this.input.value);\n });\n this.input.addEventListener('blur', () => {\n this.store.actions.blur();\n });\n this.input.addEventListener('keydown', (event) => {\n if (event.key === 'ArrowDown' && (event.altKey || this.input.value === '')) {\n event.preventDefault();\n this.open();\n }\n });\n this.field.addEventListener('click', this.onClick);\n\n this.unsubscribe = this.store.subscribe(() => {\n this.render();\n });\n this.render();\n }\n\n getState(): MultiDatePickerState {\n return this.store.getState();\n }\n\n /** Change view or store options. Unknown keys are ignored. */\n setOptions(changes: Partial<MultiDatePickerViewOptions>): void {\n this.options = { ...this.options, ...changes };\n const forStore = storeOptions(changes);\n if (Object.keys(forStore).length > 0) {\n this.store.setOptions(forStore);\n } else {\n this.render();\n }\n }\n\n open(): void {\n if (!this.options.disabled) {\n this.store.actions.open();\n }\n }\n\n close(): void {\n this.store.actions.close();\n }\n\n destroy(): void {\n this.closePanel?.();\n this.unsubscribe();\n this.calendarView.destroy();\n this.field.remove();\n }\n\n private render(): void {\n const state = this.store.getState();\n const locale = getLocale(this.options.locale);\n const disabled = this.options.disabled ?? false;\n\n if (this.input.value !== state.text) {\n this.input.value = state.text;\n }\n this.input.setCustomValidity(state.error?.message ?? '');\n setAttrs(this.input, {\n placeholder: this.options.placeholder ?? state.placeholder,\n disabled,\n required: this.options.required ?? false,\n 'aria-label': this.options.ariaLabel ?? null,\n 'aria-invalid': state.error ? 'true' : null,\n 'aria-describedby': state.error ? this.hint.id : null,\n });\n setAttrs(this.box, {\n 'data-invalid': state.error !== null,\n 'data-disabled': disabled,\n });\n setAttrs(this.field, { 'data-ndp-theme': this.options.theme ?? null });\n setAttrs(this.panel, {\n 'data-ndp-theme': this.options.theme ?? null,\n 'aria-label': this.options.ariaLabel\n ? `${this.options.ariaLabel}: ${locale.labels.calendar}`\n : locale.labels.chooseDate,\n });\n this.clearButton.hidden =\n !(this.options.clearable ?? true) || state.text === '' || disabled;\n setAttrs(this.clearButton, { 'aria-label': locale.labels.clear });\n setAttrs(this.toggleButton, { disabled, 'aria-label': locale.labels.openCalendar });\n this.hint.hidden = state.error === null;\n setText(this.hint, state.error?.message ?? '');\n\n renderSegment(this.segment, state, locale);\n setText(this.doneButton, locale.labels.done);\n this.doneButton.hidden = state.inline;\n\n const name = this.options.hiddenInput === false ? undefined : this.options.name;\n this.hiddenInputs.replaceChildren(\n ...(name === undefined\n ? []\n : state.value.map((value) =>\n el('input', { type: 'hidden', name, value, disabled }),\n )),\n );\n\n setPopupMode(state, [this.input], this.toggleButton, this.panel);\n this.syncPanel(state.open && !state.inline);\n this.panel.hidden = !state.inline && !this.wasOpen;\n this.panel.style.setProperty(\n '--ndp-panel-width',\n state.inline ? `${String(PANEL_WIDTH)}px` : null,\n );\n }\n\n private syncPanel(open: boolean): void {\n if (open === this.wasOpen) {\n return;\n }\n this.wasOpen = open;\n this.options.onOpenChange?.(open);\n if (open) {\n this.closePanel = openPanel({\n panel: this.panel,\n anchor: this.box,\n inside: [this.field, this.panel],\n width: PANEL_WIDTH,\n layout: this.options.panelLayout,\n close: () => {\n this.store.actions.close();\n },\n returnFocus: this.input,\n });\n this.calendarView.focusGrid();\n } else {\n this.closePanel?.();\n this.closePanel = null;\n }\n }\n\n private readonly onClick = (event: MouseEvent): void => {\n const target = event.target instanceof Element ? event.target : null;\n if (!target || this.calendarView.element.contains(target)) {\n return;\n }\n const calendar = target.closest<HTMLElement>('[data-calendar]')?.dataset['calendar'];\n if (calendar === 'BS' || calendar === 'AD') {\n this.store.actions.switchCalendar(calendar);\n return;\n }\n switch (target.closest<HTMLElement>('[data-action]')?.dataset['action']) {\n case 'clear':\n this.store.actions.clear();\n this.input.focus();\n break;\n case 'toggle':\n if (this.store.getState().open) {\n this.close();\n } else {\n this.open();\n }\n break;\n case 'done':\n this.close();\n restoreFocus(this.input);\n break;\n default:\n break;\n }\n };\n}\n\n/** Only the keys the picker store understands, minus the view's own callbacks. */\nfunction storeOptions(\n options: Partial<MultiDatePickerViewOptions>,\n): Partial<MultiDatePickerOptions> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(options)) {\n if (!VIEW_KEYS.has(key)) {\n out[key] = value;\n }\n }\n\n return out;\n}\n","import { MultiDatePickerView, type MultiDatePickerViewOptions } from './multi-view';\nimport {\n Base,\n bool,\n calendarAttr,\n int,\n onUnlessFalse,\n panelLayout,\n str,\n swallowInnerChange,\n theme,\n type RichProps,\n} from './element-utils';\n\n/**\n * <nep-multi-date-picker name=\"holidays\" value=\"2026-10-18,2026-10-20\"></nep-multi-date-picker>\n *\n * A form-associated field for several separate BS/AD days (PICK-001). The form\n * receives one entry per day under `name`, each an AD \"YYYY-MM-DD\". Fires\n * `change` with { value: string[], dates: { ad, bs }[] }.\n */\nexport class NepMultiDatePickerElement extends Base {\n static readonly formAssociated = true;\n static readonly observedAttributes: readonly string[] = [\n 'value',\n 'min',\n 'max',\n 'max-dates',\n 'calendar',\n 'default-calendar',\n 'locale',\n 'name',\n 'required',\n 'disabled',\n 'clearable',\n 'close-on-select',\n 'theme',\n 'panel-layout',\n 'mask',\n 'inline',\n 'label',\n ];\n\n view: MultiDatePickerView | null = null;\n private readonly internals: ElementInternals | null;\n private rich: RichProps = {};\n private unsubscribe: (() => void) | null = null;\n\n constructor() {\n super();\n this.internals =\n typeof this.attachInternals === 'function' ? this.attachInternals() : null;\n swallowInnerChange(this);\n }\n\n get value(): readonly string[] {\n return this.view?.getState().value ?? [];\n }\n set value(next: readonly string[]) {\n this.view?.store.actions.setValue(next);\n }\n set holidays(next: RichProps['holidays']) {\n this.rich = { ...this.rich, holidays: next };\n this.view?.setOptions({ holidays: next });\n }\n set events(next: RichProps['events']) {\n this.rich = { ...this.rich, events: next };\n this.view?.setOptions({ events: next });\n }\n set isDateDisabled(next: RichProps['isDateDisabled']) {\n this.rich = { ...this.rich, isDateDisabled: next };\n this.view?.setOptions({ isDateDisabled: next });\n }\n\n connectedCallback(): void {\n if (this.view) {\n return;\n }\n const view = new MultiDatePickerView(this, {\n ...this.readOptions(),\n defaultValue: list(str(this, 'value')),\n onChange: (value, dates) => {\n this.dispatchEvent(\n new CustomEvent('change', { bubbles: true, detail: { value, dates } }),\n );\n },\n onOpenChange: (open) => {\n this.dispatchEvent(\n new CustomEvent(open ? 'nep-open' : 'nep-close', { bubbles: true }),\n );\n },\n });\n this.view = view;\n this.unsubscribe = view.store.subscribe(() => {\n this.syncForm();\n });\n this.syncForm();\n }\n\n disconnectedCallback(): void {\n this.unsubscribe?.();\n this.view?.destroy();\n this.view = null;\n }\n\n attributeChangedCallback(\n name: string,\n previous: string | null,\n next: string | null,\n ): void {\n if (!this.view || previous === next) {\n return;\n }\n if (name === 'value') {\n this.view.store.actions.setValue(list(next ?? ''));\n }\n this.view.setOptions(this.readOptions());\n this.syncForm();\n }\n\n formResetCallback(): void {\n this.view?.store.actions.reset();\n }\n\n formDisabledCallback(disabled: boolean): void {\n this.view?.setOptions({ disabled: disabled || bool(this, 'disabled') });\n }\n\n override focus(options?: FocusOptions): void {\n this.view?.input.focus(options);\n }\n\n private readOptions(): MultiDatePickerViewOptions {\n return {\n ...this.rich,\n min: str(this, 'min'),\n max: str(this, 'max'),\n maxDates: int(this, 'max-dates'),\n calendar: calendarAttr(this, 'calendar'),\n defaultCalendar: calendarAttr(this, 'default-calendar'),\n locale: str(this, 'locale'),\n name: str(this, 'name'),\n hiddenInput: this.internals === null,\n required: bool(this, 'required'),\n disabled: bool(this, 'disabled'),\n clearable: onUnlessFalse(this, 'clearable'),\n closeOnSelect: bool(this, 'close-on-select'),\n theme: theme(this),\n panelLayout: panelLayout(this),\n mask: onUnlessFalse(this, 'mask'),\n inline: bool(this, 'inline'),\n ariaLabel: str(this, 'label'),\n };\n }\n\n private syncForm(): void {\n const view = this.view;\n if (!view || !this.internals) {\n return;\n }\n const state = view.getState();\n const name = str(this, 'name');\n const data = new FormData();\n if (name !== undefined) {\n for (const day of state.value) {\n data.append(name, day);\n }\n }\n this.internals.setFormValue(state.value.length === 0 ? null : data);\n if (state.error) {\n this.internals.setValidity({ customError: true }, state.error.message, view.input);\n } else if (bool(this, 'required') && state.value.length === 0) {\n this.internals.setValidity(\n { valueMissing: true },\n 'Please choose at least one date.',\n view.input,\n );\n } else {\n this.internals.setValidity({});\n }\n }\n}\n\n/** \"2026-10-18, 2026-10-20\" → ['2026-10-18', '2026-10-20'] */\nfunction list(value: string | undefined): readonly string[] {\n return (value ?? '').split(/[\\s,]+/).filter((day) => day !== '');\n}\n","/** `@nepdatejs/vanilla/multi-date-picker`: just the multiple-date picker (element, view and mount function). */\nimport type { MultiDatePickerState } from '@nepdatejs/datepicker';\nimport { NepMultiDatePickerElement } from './multi-date-picker-element';\nimport { MultiDatePickerView, type MultiDatePickerViewOptions } from './multi-view';\nimport { defineElement, ELEMENT_NAMES } from './registry';\n\nexport { NepMultiDatePickerElement };\nexport { MultiDatePickerView, type MultiDatePickerViewOptions } from './multi-view';\n\n/** Register <nep-multi-date-picker> (skipped if already defined). */\nexport function defineMultiDatePicker(registry?: CustomElementRegistry): void {\n defineElement(ELEMENT_NAMES.multiDatePicker, NepMultiDatePickerElement, registry);\n}\n\nexport interface MultiDatePickerHandle {\n readonly view: MultiDatePickerView;\n getValue(): readonly string[];\n getState(): MultiDatePickerState;\n setValue(value: readonly string[]): void;\n setOptions(changes: Partial<MultiDatePickerViewOptions>): void;\n open(): void;\n close(): void;\n destroy(): void;\n}\n\n/** Mount a multiple-date picker into a container, without custom elements. */\nexport function createMultiDatePicker(\n container: HTMLElement,\n options: MultiDatePickerViewOptions = {},\n): MultiDatePickerHandle {\n const view = new MultiDatePickerView(container, options);\n\n return {\n view,\n getValue: () => view.getState().value,\n getState: () => view.getState(),\n setValue: (value) => {\n view.store.actions.setValue(value);\n },\n setOptions: (changes) => {\n view.setOptions(changes);\n },\n open: () => {\n view.open();\n },\n close: () => {\n view.close();\n },\n destroy: () => {\n view.destroy();\n },\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_multi_date_picker = require("./multi-date-picker-DUyuO-nH.cjs");
|
|
3
|
+
exports.MultiDatePickerView = require_multi_date_picker.MultiDatePickerView;
|
|
4
|
+
exports.NepMultiDatePickerElement = require_multi_date_picker.NepMultiDatePickerElement;
|
|
5
|
+
exports.createMultiDatePicker = require_multi_date_picker.createMultiDatePicker;
|
|
6
|
+
exports.defineMultiDatePicker = require_multi_date_picker.defineMultiDatePicker;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as MultiDatePickerView, i as NepMultiDatePickerElement, n as createMultiDatePicker, o as MultiDatePickerViewOptions, r as defineMultiDatePicker, t as MultiDatePickerHandle } from "./multi-date-picker-BUNf5zyJ.cjs";
|
|
2
|
+
export { MultiDatePickerHandle, MultiDatePickerView, type MultiDatePickerViewOptions, NepMultiDatePickerElement, createMultiDatePicker, defineMultiDatePicker };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as MultiDatePickerView, i as NepMultiDatePickerElement, n as createMultiDatePicker, o as MultiDatePickerViewOptions, r as defineMultiDatePicker, t as MultiDatePickerHandle } from "./multi-date-picker-B2mQbjZM.js";
|
|
2
|
+
export { MultiDatePickerHandle, MultiDatePickerView, type MultiDatePickerViewOptions, NepMultiDatePickerElement, createMultiDatePicker, defineMultiDatePicker };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { i as MultiDatePickerView, r as NepMultiDatePickerElement, t as createMultiDatePicker, n as defineMultiDatePicker } from "./multi-date-picker-C3Lr0Dq-.js";
|