@nepdatejs/vanilla 0.1.0 → 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.
Files changed (57) hide show
  1. package/README.md +1 -1
  2. package/dist/auto-define.cjs +1 -1
  3. package/dist/auto-define.js +1 -1
  4. package/dist/{date-picker-ucoEFnMW.js → date-picker-BwlrlU5Y.js} +13 -30
  5. package/dist/date-picker-BwlrlU5Y.js.map +1 -0
  6. package/dist/{date-picker-CQoabjlj.cjs → date-picker-CgjYsf1w.cjs} +12 -29
  7. package/dist/date-picker-CgjYsf1w.cjs.map +1 -0
  8. package/dist/date-picker.cjs +1 -1
  9. package/dist/date-picker.js +1 -1
  10. package/dist/{date-range-picker-DAkCzVgT.js → date-range-picker-NwetXUC-.js} +13 -30
  11. package/dist/date-range-picker-NwetXUC-.js.map +1 -0
  12. package/dist/{date-range-picker-BQKcZeqG.cjs → date-range-picker-VrQZFZED.cjs} +12 -29
  13. package/dist/date-range-picker-VrQZFZED.cjs.map +1 -0
  14. package/dist/date-range-picker.cjs +1 -1
  15. package/dist/date-range-picker.js +1 -1
  16. package/dist/{date-time-picker-Bxfn-a9T.cjs → date-time-picker-ChHIBTBw.cjs} +12 -30
  17. package/dist/date-time-picker-ChHIBTBw.cjs.map +1 -0
  18. package/dist/{date-time-picker-BqweOP2u.js → date-time-picker-CxqC95aM.js} +12 -30
  19. package/dist/date-time-picker-CxqC95aM.js.map +1 -0
  20. package/dist/date-time-picker.cjs +1 -1
  21. package/dist/date-time-picker.js +1 -1
  22. package/dist/{define-DTTdLfIM.cjs → define-BbTIFHtH.cjs} +5 -5
  23. package/dist/{define-DTTdLfIM.cjs.map → define-BbTIFHtH.cjs.map} +1 -1
  24. package/dist/{define-7natoEH4.js → define-D96w8Zu2.js} +5 -5
  25. package/dist/{define-7natoEH4.js.map → define-D96w8Zu2.js.map} +1 -1
  26. package/dist/index.cjs +5 -5
  27. package/dist/index.js +5 -5
  28. package/dist/{multi-date-picker-XCg8Y0sF.js → multi-date-picker-C3Lr0Dq-.js} +13 -28
  29. package/dist/multi-date-picker-C3Lr0Dq-.js.map +1 -0
  30. package/dist/{multi-date-picker-BMEYUPBa.cjs → multi-date-picker-DUyuO-nH.cjs} +12 -27
  31. package/dist/multi-date-picker-DUyuO-nH.cjs.map +1 -0
  32. package/dist/multi-date-picker.cjs +1 -1
  33. package/dist/multi-date-picker.js +1 -1
  34. package/dist/nepdate-picker.global.js +2 -2
  35. package/dist/nepdate-picker.global.js.map +1 -1
  36. package/dist/preset-list-BYCZm61I.cjs +97 -0
  37. package/dist/preset-list-BYCZm61I.cjs.map +1 -0
  38. package/dist/preset-list-DmE6fJjr.js +80 -0
  39. package/dist/preset-list-DmE6fJjr.js.map +1 -0
  40. package/package.json +4 -4
  41. package/src/datetime-view.ts +12 -37
  42. package/src/multi-view.ts +11 -33
  43. package/src/panel.ts +61 -0
  44. package/src/picker-view.ts +11 -36
  45. package/src/range-view.ts +12 -37
  46. package/dist/date-picker-CQoabjlj.cjs.map +0 -1
  47. package/dist/date-picker-ucoEFnMW.js.map +0 -1
  48. package/dist/date-range-picker-BQKcZeqG.cjs.map +0 -1
  49. package/dist/date-range-picker-DAkCzVgT.js.map +0 -1
  50. package/dist/date-time-picker-BqweOP2u.js.map +0 -1
  51. package/dist/date-time-picker-Bxfn-a9T.cjs.map +0 -1
  52. package/dist/multi-date-picker-BMEYUPBa.cjs.map +0 -1
  53. package/dist/multi-date-picker-XCg8Y0sF.js.map +0 -1
  54. package/dist/preset-list-CASwnwmS.js +0 -45
  55. package/dist/preset-list-CASwnwmS.js.map +0 -1
  56. package/dist/preset-list-Cs8H12Wp.cjs +0 -50
  57. package/dist/preset-list-Cs8H12Wp.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-date-picker-C3Lr0Dq-.js","names":["createMultiDatePicker"],"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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"}
@@ -1,4 +1,5 @@
1
1
  const require_registry = require("./registry-3qzdVB7H.cjs");
2
+ const require_preset_list = require("./preset-list-BYCZm61I.cjs");
2
3
  let _nepdatejs_core = require("@nepdatejs/core");
3
4
  let _nepdatejs_datepicker = require("@nepdatejs/datepicker");
4
5
  let _nepdatejs_dom = require("@nepdatejs/dom");
@@ -195,13 +196,7 @@ var MultiDatePickerView = class {
195
196
  });
196
197
  this.hint.hidden = state.error === null;
197
198
  require_registry.setText(this.hint, state.error?.message ?? "");
198
- this.segment.hidden = !state.canSwitchCalendar;
199
- require_registry.setAttrs(this.segment, { "aria-label": locale.labels.calendar });
200
- for (const button of this.segment.querySelectorAll("button")) {
201
- const calendar = button.dataset["calendar"] === "AD" ? "AD" : "BS";
202
- require_registry.setText(button, locale.calendarNames[calendar]);
203
- require_registry.setAttrs(button, { "aria-pressed": String(calendar === state.calendar) });
204
- }
199
+ require_preset_list.renderSegment(this.segment, state, locale);
205
200
  require_registry.setText(this.doneButton, locale.labels.done);
206
201
  this.doneButton.hidden = state.inline;
207
202
  const name = this.options.hiddenInput === false ? void 0 : this.options.name;
@@ -221,27 +216,17 @@ var MultiDatePickerView = class {
221
216
  this.wasOpen = open;
222
217
  this.options.onOpenChange?.(open);
223
218
  if (open) {
224
- this.panel.hidden = false;
225
- const stopTracking = (0, _nepdatejs_dom.trackPosition)(this.box, this.panel, {
219
+ this.closePanel = require_preset_list.openPanel({
220
+ panel: this.panel,
221
+ anchor: this.box,
222
+ inside: [this.field, this.panel],
226
223
  width: 320,
227
- layout: this.options.panelLayout
228
- });
229
- const close = () => {
230
- this.store.actions.close();
231
- };
232
- const stopOutside = (0, _nepdatejs_dom.onOutsidePointer)([this.field, this.panel], close);
233
- const stopBackdrop = (0, _nepdatejs_dom.onBackdropPointer)(this.panel, close);
234
- const stopEscape = (0, _nepdatejs_dom.onEscape)(() => {
235
- close();
236
- (0, _nepdatejs_dom.restoreFocus)(this.input);
224
+ layout: this.options.panelLayout,
225
+ close: () => {
226
+ this.store.actions.close();
227
+ },
228
+ returnFocus: this.input
237
229
  });
238
- this.closePanel = () => {
239
- stopTracking();
240
- stopOutside();
241
- stopBackdrop();
242
- stopEscape();
243
- this.panel.hidden = true;
244
- };
245
230
  this.calendarView.focusGrid();
246
231
  } else {
247
232
  this.closePanel?.();
@@ -459,4 +444,4 @@ Object.defineProperty(exports, "defineMultiDatePicker", {
459
444
  }
460
445
  });
461
446
 
462
- //# sourceMappingURL=multi-date-picker-BMEYUPBa.cjs.map
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":";;;;;;AAiCA,MAAM,4BAAY,IAAI,IAAI;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;;;;;;AAOD,IAAa,sBAAb,MAAiC;CAkB/B,YAAY,MAAmB,UAAsC,CAAC,GAAG;EAHzE,KAAQ,aAAkC;EAC1C,KAAQ,UAAU;EAiNlB,KAAiB,WAAW,UAA4B;GACtD,MAAM,SAAS,MAAM,kBAAkB,UAAU,MAAM,SAAS;GAChE,IAAI,CAAC,UAAU,KAAK,aAAa,QAAQ,SAAS,MAAM,GACtD;GAEF,MAAM,WAAW,OAAO,QAAqB,iBAAiB,CAAC,EAAE,QAAQ;GACzE,IAAI,aAAa,QAAQ,aAAa,MAAM;IAC1C,KAAK,MAAM,QAAQ,eAAe,QAAQ;IAC1C;GACF;GACA,QAAQ,OAAO,QAAqB,eAAe,CAAC,EAAE,QAAQ,WAA9D;IACE,KAAK;KACH,KAAK,MAAM,QAAQ,MAAM;KACzB,KAAK,MAAM,MAAM;KACjB;IACF,KAAK;KACH,IAAI,KAAK,MAAM,SAAS,CAAC,CAAC,MACxB,KAAK,MAAM;UAEX,KAAK,KAAK;KAEZ;IACF,KAAK;KACH,KAAK,MAAM;KACX,CAAA,GAAA,eAAA,aAAA,CAAa,KAAK,KAAK;GAI3B;EACF;EA3OE,KAAK,UAAU,EAAE,GAAG,QAAQ;EAC5B,KAAK,SAAA,GAAQA,sBAAAA,sBAAAA,CAAsB;GACjC,GAAG,aAAa,OAAO;GACvB,WAAW,OAAO,UAAU;IAC1B,KAAK,QAAQ,WAAW,OAAO,KAAK;GACtC;EACF,CAAC;EAED,MAAM,UAAU,QAAQ,MAAMC,iBAAAA,IAAI,WAAW;EAC7C,MAAM,UAAU,GAAG,QAAQ;EAC3B,KAAK,QAAQC,iBAAAA,GAAG,SAAS;GACvB,OAAO;GACP,IAAI;GACJ,MAAM;GACN,WAAW;GACX,cAAc;GACd,YAAY;GACZ,iBAAiB;EACnB,CAAC;EACD,KAAK,cAAcA,iBAAAA,GACjB,UACA;GAAE,MAAM;GAAU,OAAO;GAAmB,eAAe;EAAQ,GACnE,CAACC,iBAAAA,KAAK,OAAO,CAAC,CAChB;EACA,KAAK,eAAeD,iBAAAA,GAClB,UACA;GAAE,MAAM;GAAU,OAAO;GAAmB,eAAe;EAAS,GACpE,CAACC,iBAAAA,KAAK,UAAU,CAAC,CACnB;EACA,KAAK,MAAMD,iBAAAA,GAAG,OAAO,EAAE,OAAO,YAAY,GAAG,CAC3C,KAAK,OACLA,iBAAAA,GAAG,QAAQ,EAAE,OAAO,qBAAqB,GAAG,CAAC,KAAK,aAAa,KAAK,YAAY,CAAC,CACnF,CAAC;EACD,KAAK,OAAOA,iBAAAA,GAAG,KAAK;GAClB,OAAO;GACP,IAAI,GAAG,QAAQ;GACf,aAAa;GACb,cAAc;GACd,QAAQ;EACV,CAAC;EACD,KAAK,eAAeA,iBAAAA,GAAG,QAAQ,EAAE,QAAQ,KAAK,CAAC;EAC/C,KAAK,UAAUA,iBAAAA,GAAG,OAAO;GAAE,OAAO;GAAe,MAAM;EAAQ,GAAG,CAChEA,iBAAAA,GAAG,UAAU;GAAE,MAAM;GAAU,OAAO;GAAqB,iBAAiB;EAAK,CAAC,GAClFA,iBAAAA,GAAG,UAAU;GAAE,MAAM;GAAU,OAAO;GAAqB,iBAAiB;EAAK,CAAC,CACpF,CAAC;EACD,KAAK,aAAaA,iBAAAA,GAAG,UAAU;GAC7B,MAAM;GACN,OAAO;GACP,eAAe;EACjB,CAAC;EACD,MAAM,eAAeA,iBAAAA,GAAG,OAAO,EAAE,OAAO,sBAAsB,CAAC;EAC/D,KAAK,QAAQA,iBAAAA,GAAG,OAAO;GAAE,OAAO;GAAa,IAAI;GAAS,QAAQ;EAAK,GAAG,CACxE,cACAA,iBAAAA,GAAG,OAAO,EAAE,OAAO,oBAAoB,GAAG,CAAC,KAAK,SAAS,KAAK,UAAU,CAAC,CAC3E,CAAC;EACD,KAAK,QAAQA,iBAAAA,GAAG,OAAO,EAAE,OAAO,YAAY,GAAG;GAC7C,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;EACP,CAAC;EACD,KAAK,OAAO,KAAK,KAAK;EAEtB,KAAK,eAAe,IAAIE,iBAAAA,aAAa,cAAc,KAAK,MAAM,UAAU;GACtE,cAAc,KAAK,QAAQ;GAC3B,gBAAgB,SAAS;IACvB,IAAI,KAAK,MAAM,QAAQ,OAAO,IAAI,KAAK,CAAC,KAAK,MAAM,SAAS,CAAC,CAAC,MAC5D,CAAA,GAAA,eAAA,aAAA,CAAa,KAAK,KAAK;GAE3B;EACF,CAAC;EAED,KAAK,MAAM,iBAAiB,eAAe;GACzC,KAAK,MAAM,QAAQ,KAAK,KAAK,MAAM,KAAK;EAC1C,CAAC;EACD,KAAK,MAAM,iBAAiB,cAAc;GACxC,KAAK,MAAM,QAAQ,KAAK;EAC1B,CAAC;EACD,KAAK,MAAM,iBAAiB,YAAY,UAAU;GAChD,IAAI,MAAM,QAAQ,gBAAgB,MAAM,UAAU,KAAK,MAAM,UAAU,KAAK;IAC1E,MAAM,eAAe;IACrB,KAAK,KAAK;GACZ;EACF,CAAC;EACD,KAAK,MAAM,iBAAiB,SAAS,KAAK,OAAO;EAEjD,KAAK,cAAc,KAAK,MAAM,gBAAgB;GAC5C,KAAK,OAAO;EACd,CAAC;EACD,KAAK,OAAO;CACd;CAEA,WAAiC;EAC/B,OAAO,KAAK,MAAM,SAAS;CAC7B;;CAGA,WAAW,SAAoD;EAC7D,KAAK,UAAU;GAAE,GAAG,KAAK;GAAS,GAAG;EAAQ;EAC7C,MAAM,WAAW,aAAa,OAAO;EACrC,IAAI,OAAO,KAAK,QAAQ,CAAC,CAAC,SAAS,GACjC,KAAK,MAAM,WAAW,QAAQ;OAE9B,KAAK,OAAO;CAEhB;CAEA,OAAa;EACX,IAAI,CAAC,KAAK,QAAQ,UAChB,KAAK,MAAM,QAAQ,KAAK;CAE5B;CAEA,QAAc;EACZ,KAAK,MAAM,QAAQ,MAAM;CAC3B;CAEA,UAAgB;EACd,KAAK,aAAa;EAClB,KAAK,YAAY;EACjB,KAAK,aAAa,QAAQ;EAC1B,KAAK,MAAM,OAAO;CACpB;CAEA,SAAuB;EACrB,MAAM,QAAQ,KAAK,MAAM,SAAS;EAClC,MAAM,UAAA,GAASC,gBAAAA,UAAAA,CAAU,KAAK,QAAQ,MAAM;EAC5C,MAAM,WAAW,KAAK,QAAQ,YAAY;EAE1C,IAAI,KAAK,MAAM,UAAU,MAAM,MAC7B,KAAK,MAAM,QAAQ,MAAM;EAE3B,KAAK,MAAM,kBAAkB,MAAM,OAAO,WAAW,EAAE;EACvD,iBAAA,SAAS,KAAK,OAAO;GACnB,aAAa,KAAK,QAAQ,eAAe,MAAM;GAC/C;GACA,UAAU,KAAK,QAAQ,YAAY;GACnC,cAAc,KAAK,QAAQ,aAAa;GACxC,gBAAgB,MAAM,QAAQ,SAAS;GACvC,oBAAoB,MAAM,QAAQ,KAAK,KAAK,KAAK;EACnD,CAAC;EACD,iBAAA,SAAS,KAAK,KAAK;GACjB,gBAAgB,MAAM,UAAU;GAChC,iBAAiB;EACnB,CAAC;EACD,iBAAA,SAAS,KAAK,OAAO,EAAE,kBAAkB,KAAK,QAAQ,SAAS,KAAK,CAAC;EACrE,iBAAA,SAAS,KAAK,OAAO;GACnB,kBAAkB,KAAK,QAAQ,SAAS;GACxC,cAAc,KAAK,QAAQ,YACvB,GAAG,KAAK,QAAQ,UAAU,IAAI,OAAO,OAAO,aAC5C,OAAO,OAAO;EACpB,CAAC;EACD,KAAK,YAAY,SACf,EAAE,KAAK,QAAQ,aAAa,SAAS,MAAM,SAAS,MAAM;EAC5D,iBAAA,SAAS,KAAK,aAAa,EAAE,cAAc,OAAO,OAAO,MAAM,CAAC;EAChE,iBAAA,SAAS,KAAK,cAAc;GAAE;GAAU,cAAc,OAAO,OAAO;EAAa,CAAC;EAClF,KAAK,KAAK,SAAS,MAAM,UAAU;EACnC,iBAAA,QAAQ,KAAK,MAAM,MAAM,OAAO,WAAW,EAAE;EAE7C,oBAAA,cAAc,KAAK,SAAS,OAAO,MAAM;EACzC,iBAAA,QAAQ,KAAK,YAAY,OAAO,OAAO,IAAI;EAC3C,KAAK,WAAW,SAAS,MAAM;EAE/B,MAAM,OAAO,KAAK,QAAQ,gBAAgB,QAAQ,KAAA,IAAY,KAAK,QAAQ;EAC3E,KAAK,aAAa,gBAChB,GAAI,SAAS,KAAA,IACT,CAAC,IACD,MAAM,MAAM,KAAK,UACfH,iBAAAA,GAAG,SAAS;GAAE,MAAM;GAAU;GAAM;GAAO;EAAS,CAAC,CACvD,CACN;EAEA,iBAAA,aAAa,OAAO,CAAC,KAAK,KAAK,GAAG,KAAK,cAAc,KAAK,KAAK;EAC/D,KAAK,UAAU,MAAM,QAAQ,CAAC,MAAM,MAAM;EAC1C,KAAK,MAAM,SAAS,CAAC,MAAM,UAAU,CAAC,KAAK;EAC3C,KAAK,MAAM,MAAM,YACf,qBACA,MAAM,SAAS,GAAG,OAAA,GAAkB,EAAE,MAAM,IAC9C;CACF;CAEA,UAAkB,MAAqB;EACrC,IAAI,SAAS,KAAK,SAChB;EAEF,KAAK,UAAU;EACf,KAAK,QAAQ,eAAe,IAAI;EAChC,IAAI,MAAM;GACR,KAAK,aAAaI,oBAAAA,UAAU;IAC1B,OAAO,KAAK;IACZ,QAAQ,KAAK;IACb,QAAQ,CAAC,KAAK,OAAO,KAAK,KAAK;IAC/B,OAAA;IACA,QAAQ,KAAK,QAAQ;IACrB,aAAa;KACX,KAAK,MAAM,QAAQ,MAAM;IAC3B;IACA,aAAa,KAAK;GACpB,CAAC;GACD,KAAK,aAAa,UAAU;EAC9B,OAAO;GACL,KAAK,aAAa;GAClB,KAAK,aAAa;EACpB;CACF;AAgCF;;AAGA,SAAS,aACP,SACiC;CACjC,MAAM,MAA+B,CAAC;CACtC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,GAC/C,IAAI,CAAC,UAAU,IAAI,GAAG,GACpB,IAAI,OAAO;CAIf,OAAO;AACT;;;;;;;;;;AC7SA,IAAa,4BAAb,cAA+CC,iBAAAA,KAAK;CA2BlD,cAAc;EACZ,MAAM;EANR,KAAA,OAAmC;EAEnC,KAAQ,OAAkB,CAAC;EAC3B,KAAQ,cAAmC;EAIzC,KAAK,YACH,OAAO,KAAK,oBAAoB,aAAa,KAAK,gBAAgB,IAAI;EACxE,iBAAA,mBAAmB,IAAI;CACzB;CAEA,IAAI,QAA2B;EAC7B,OAAO,KAAK,MAAM,SAAS,CAAC,CAAC,SAAS,CAAC;CACzC;CACA,IAAI,MAAM,MAAyB;EACjC,KAAK,MAAM,MAAM,QAAQ,SAAS,IAAI;CACxC;CACA,IAAI,SAAS,MAA6B;EACxC,KAAK,OAAO;GAAE,GAAG,KAAK;GAAM,UAAU;EAAK;EAC3C,KAAK,MAAM,WAAW,EAAE,UAAU,KAAK,CAAC;CAC1C;CACA,IAAI,OAAO,MAA2B;EACpC,KAAK,OAAO;GAAE,GAAG,KAAK;GAAM,QAAQ;EAAK;EACzC,KAAK,MAAM,WAAW,EAAE,QAAQ,KAAK,CAAC;CACxC;CACA,IAAI,eAAe,MAAmC;EACpD,KAAK,OAAO;GAAE,GAAG,KAAK;GAAM,gBAAgB;EAAK;EACjD,KAAK,MAAM,WAAW,EAAE,gBAAgB,KAAK,CAAC;CAChD;CAEA,oBAA0B;EACxB,IAAI,KAAK,MACP;EAEF,MAAM,OAAO,IAAI,oBAAoB,MAAM;GACzC,GAAG,KAAK,YAAY;GACpB,cAAc,KAAKC,iBAAAA,IAAI,MAAM,OAAO,CAAC;GACrC,WAAW,OAAO,UAAU;IAC1B,KAAK,cACH,IAAI,YAAY,UAAU;KAAE,SAAS;KAAM,QAAQ;MAAE;MAAO;KAAM;IAAE,CAAC,CACvE;GACF;GACA,eAAe,SAAS;IACtB,KAAK,cACH,IAAI,YAAY,OAAO,aAAa,aAAa,EAAE,SAAS,KAAK,CAAC,CACpE;GACF;EACF,CAAC;EACD,KAAK,OAAO;EACZ,KAAK,cAAc,KAAK,MAAM,gBAAgB;GAC5C,KAAK,SAAS;EAChB,CAAC;EACD,KAAK,SAAS;CAChB;CAEA,uBAA6B;EAC3B,KAAK,cAAc;EACnB,KAAK,MAAM,QAAQ;EACnB,KAAK,OAAO;CACd;CAEA,yBACE,MACA,UACA,MACM;EACN,IAAI,CAAC,KAAK,QAAQ,aAAa,MAC7B;EAEF,IAAI,SAAS,SACX,KAAK,KAAK,MAAM,QAAQ,SAAS,KAAK,QAAQ,EAAE,CAAC;EAEnD,KAAK,KAAK,WAAW,KAAK,YAAY,CAAC;EACvC,KAAK,SAAS;CAChB;CAEA,oBAA0B;EACxB,KAAK,MAAM,MAAM,QAAQ,MAAM;CACjC;CAEA,qBAAqB,UAAyB;EAC5C,KAAK,MAAM,WAAW,EAAE,UAAU,YAAYC,iBAAAA,KAAK,MAAM,UAAU,EAAE,CAAC;CACxE;CAEA,MAAe,SAA8B;EAC3C,KAAK,MAAM,MAAM,MAAM,OAAO;CAChC;CAEA,cAAkD;EAChD,OAAO;GACL,GAAG,KAAK;GACR,KAAKD,iBAAAA,IAAI,MAAM,KAAK;GACpB,KAAKA,iBAAAA,IAAI,MAAM,KAAK;GACpB,UAAUE,iBAAAA,IAAI,MAAM,WAAW;GAC/B,UAAUC,iBAAAA,aAAa,MAAM,UAAU;GACvC,iBAAiBA,iBAAAA,aAAa,MAAM,kBAAkB;GACtD,QAAQH,iBAAAA,IAAI,MAAM,QAAQ;GAC1B,MAAMA,iBAAAA,IAAI,MAAM,MAAM;GACtB,aAAa,KAAK,cAAc;GAChC,UAAUC,iBAAAA,KAAK,MAAM,UAAU;GAC/B,UAAUA,iBAAAA,KAAK,MAAM,UAAU;GAC/B,WAAWG,iBAAAA,cAAc,MAAM,WAAW;GAC1C,eAAeH,iBAAAA,KAAK,MAAM,iBAAiB;GAC3C,OAAOI,iBAAAA,MAAM,IAAI;GACjB,aAAaC,iBAAAA,YAAY,IAAI;GAC7B,MAAMF,iBAAAA,cAAc,MAAM,MAAM;GAChC,QAAQH,iBAAAA,KAAK,MAAM,QAAQ;GAC3B,WAAWD,iBAAAA,IAAI,MAAM,OAAO;EAC9B;CACF;CAEA,WAAyB;EACvB,MAAM,OAAO,KAAK;EAClB,IAAI,CAAC,QAAQ,CAAC,KAAK,WACjB;EAEF,MAAM,QAAQ,KAAK,SAAS;EAC5B,MAAM,OAAOA,iBAAAA,IAAI,MAAM,MAAM;EAC7B,MAAM,OAAO,IAAI,SAAS;EAC1B,IAAI,SAAS,KAAA,GACX,KAAK,MAAM,OAAO,MAAM,OACtB,KAAK,OAAO,MAAM,GAAG;EAGzB,KAAK,UAAU,aAAa,MAAM,MAAM,WAAW,IAAI,OAAO,IAAI;EAClE,IAAI,MAAM,OACR,KAAK,UAAU,YAAY,EAAE,aAAa,KAAK,GAAG,MAAM,MAAM,SAAS,KAAK,KAAK;OAC5E,IAAIC,iBAAAA,KAAK,MAAM,UAAU,KAAK,MAAM,MAAM,WAAW,GAC1D,KAAK,UAAU,YACb,EAAE,cAAc,KAAK,GACrB,oCACA,KAAK,KACP;OAEA,KAAK,UAAU,YAAY,CAAC,CAAC;CAEjC;AACF;AA/JE,0BAAgB,iBAAiB;AACjC,0BAAgB,qBAAwC;CACtD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AA+IF,SAAS,KAAK,OAA8C;CAC1D,QAAQ,SAAS,GAAA,CAAI,MAAM,QAAQ,CAAC,CAAC,QAAQ,QAAQ,QAAQ,EAAE;AACjE;;;;AChLA,SAAgB,sBAAsB,UAAwC;CAC5E,iBAAA,cAAcM,iBAAAA,cAAc,iBAAiB,2BAA2B,QAAQ;AAClF;;AAcA,SAAgB,sBACd,WACA,UAAsC,CAAC,GAChB;CACvB,MAAM,OAAO,IAAI,oBAAoB,WAAW,OAAO;CAEvD,OAAO;EACL;EACA,gBAAgB,KAAK,SAAS,CAAC,CAAC;EAChC,gBAAgB,KAAK,SAAS;EAC9B,WAAW,UAAU;GACnB,KAAK,MAAM,QAAQ,SAAS,KAAK;EACnC;EACA,aAAa,YAAY;GACvB,KAAK,WAAW,OAAO;EACzB;EACA,YAAY;GACV,KAAK,KAAK;EACZ;EACA,aAAa;GACX,KAAK,MAAM;EACb;EACA,eAAe;GACb,KAAK,QAAQ;EACf;CACF;AACF"}
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_multi_date_picker = require("./multi-date-picker-BMEYUPBa.cjs");
2
+ const require_multi_date_picker = require("./multi-date-picker-DUyuO-nH.cjs");
3
3
  exports.MultiDatePickerView = require_multi_date_picker.MultiDatePickerView;
4
4
  exports.NepMultiDatePickerElement = require_multi_date_picker.NepMultiDatePickerElement;
5
5
  exports.createMultiDatePicker = require_multi_date_picker.createMultiDatePicker;
@@ -1 +1 @@
1
- export { i as MultiDatePickerView, r as NepMultiDatePickerElement, t as createMultiDatePicker, n as defineMultiDatePicker } from "./multi-date-picker-XCg8Y0sF.js";
1
+ export { i as MultiDatePickerView, r as NepMultiDatePickerElement, t as createMultiDatePicker, n as defineMultiDatePicker } from "./multi-date-picker-C3Lr0Dq-.js";