@nepdatejs/vanilla 0.0.0-bootstrap → 0.1.0

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 (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -1
  3. package/dist/auto-define.cjs +11 -0
  4. package/dist/auto-define.cjs.map +1 -0
  5. package/dist/auto-define.d.cts +2 -0
  6. package/dist/auto-define.d.ts +2 -0
  7. package/dist/auto-define.js +9 -0
  8. package/dist/auto-define.js.map +1 -0
  9. package/dist/calendar-BAcO-jYq.js +142 -0
  10. package/dist/calendar-BAcO-jYq.js.map +1 -0
  11. package/dist/calendar-BNdN8qJv.d.ts +87 -0
  12. package/dist/calendar-C1LZI7XN.cjs +159 -0
  13. package/dist/calendar-C1LZI7XN.cjs.map +1 -0
  14. package/dist/calendar-QWPX0IfD.d.cts +87 -0
  15. package/dist/calendar.cjs +7 -0
  16. package/dist/calendar.d.cts +2 -0
  17. package/dist/calendar.d.ts +2 -0
  18. package/dist/calendar.js +3 -0
  19. package/dist/date-picker-BidCGOz0.d.cts +74 -0
  20. package/dist/date-picker-CQoabjlj.cjs +600 -0
  21. package/dist/date-picker-CQoabjlj.cjs.map +1 -0
  22. package/dist/date-picker-DyvpYe29.d.ts +74 -0
  23. package/dist/date-picker-ucoEFnMW.js +577 -0
  24. package/dist/date-picker-ucoEFnMW.js.map +1 -0
  25. package/dist/date-picker.cjs +6 -0
  26. package/dist/date-picker.d.cts +3 -0
  27. package/dist/date-picker.d.ts +3 -0
  28. package/dist/date-picker.js +1 -0
  29. package/dist/date-range-picker-BQKcZeqG.cjs +489 -0
  30. package/dist/date-range-picker-BQKcZeqG.cjs.map +1 -0
  31. package/dist/date-range-picker-D3eNvlgv.d.ts +98 -0
  32. package/dist/date-range-picker-DAkCzVgT.js +466 -0
  33. package/dist/date-range-picker-DAkCzVgT.js.map +1 -0
  34. package/dist/date-range-picker-SIl0vhUV.d.cts +98 -0
  35. package/dist/date-range-picker.cjs +6 -0
  36. package/dist/date-range-picker.d.cts +2 -0
  37. package/dist/date-range-picker.d.ts +2 -0
  38. package/dist/date-range-picker.js +1 -0
  39. package/dist/date-time-picker-BqweOP2u.js +487 -0
  40. package/dist/date-time-picker-BqweOP2u.js.map +1 -0
  41. package/dist/date-time-picker-Bxfn-a9T.cjs +510 -0
  42. package/dist/date-time-picker-Bxfn-a9T.cjs.map +1 -0
  43. package/dist/date-time-picker-BzSyQxrf.d.cts +92 -0
  44. package/dist/date-time-picker-DzDpzLMZ.d.ts +92 -0
  45. package/dist/date-time-picker.cjs +6 -0
  46. package/dist/date-time-picker.d.cts +2 -0
  47. package/dist/date-time-picker.d.ts +2 -0
  48. package/dist/date-time-picker.js +1 -0
  49. package/dist/define-7natoEH4.js +18 -0
  50. package/dist/define-7natoEH4.js.map +1 -0
  51. package/dist/define-B8NUA3yj.d.cts +16 -0
  52. package/dist/define-B8NUA3yj.d.ts +16 -0
  53. package/dist/define-DTTdLfIM.cjs +23 -0
  54. package/dist/define-DTTdLfIM.cjs.map +1 -0
  55. package/dist/element-utils-BVye8UQq.d.cts +82 -0
  56. package/dist/element-utils-C-r5gPlk.d.ts +82 -0
  57. package/dist/index.cjs +30 -0
  58. package/dist/index.d.cts +8 -0
  59. package/dist/index.d.ts +8 -0
  60. package/dist/index.js +8 -0
  61. package/dist/multi-date-picker-B2mQbjZM.d.ts +105 -0
  62. package/dist/multi-date-picker-BMEYUPBa.cjs +462 -0
  63. package/dist/multi-date-picker-BMEYUPBa.cjs.map +1 -0
  64. package/dist/multi-date-picker-BUNf5zyJ.d.cts +105 -0
  65. package/dist/multi-date-picker-XCg8Y0sF.js +439 -0
  66. package/dist/multi-date-picker-XCg8Y0sF.js.map +1 -0
  67. package/dist/multi-date-picker.cjs +6 -0
  68. package/dist/multi-date-picker.d.cts +2 -0
  69. package/dist/multi-date-picker.d.ts +2 -0
  70. package/dist/multi-date-picker.js +1 -0
  71. package/dist/nepdate-picker.global.js +3 -0
  72. package/dist/nepdate-picker.global.js.map +1 -0
  73. package/dist/preset-list-CASwnwmS.js +45 -0
  74. package/dist/preset-list-CASwnwmS.js.map +1 -0
  75. package/dist/preset-list-Cs8H12Wp.cjs +50 -0
  76. package/dist/preset-list-Cs8H12Wp.cjs.map +1 -0
  77. package/dist/registry-3qzdVB7H.cjs +591 -0
  78. package/dist/registry-3qzdVB7H.cjs.map +1 -0
  79. package/dist/registry-BvkGnkvV.js +466 -0
  80. package/dist/registry-BvkGnkvV.js.map +1 -0
  81. package/package.json +159 -4
  82. package/src/auto-define.ts +6 -0
  83. package/src/calendar-element.ts +129 -0
  84. package/src/calendar-view.ts +406 -0
  85. package/src/calendar.ts +45 -0
  86. package/src/date-picker-element.ts +249 -0
  87. package/src/date-picker.ts +91 -0
  88. package/src/date-range-picker-element.ts +201 -0
  89. package/src/date-range-picker.ts +20 -0
  90. package/src/date-time-picker-element.ts +191 -0
  91. package/src/date-time-picker.ts +20 -0
  92. package/src/datetime-view.ts +459 -0
  93. package/src/define.ts +16 -0
  94. package/src/dom.ts +109 -0
  95. package/src/element-utils.ts +86 -0
  96. package/src/global.ts +7 -0
  97. package/src/index.ts +15 -0
  98. package/src/multi-date-picker-element.ts +187 -0
  99. package/src/multi-date-picker.ts +53 -0
  100. package/src/multi-view.ts +345 -0
  101. package/src/picker-view.ts +448 -0
  102. package/src/preset-list.ts +51 -0
  103. package/src/range-view.ts +393 -0
  104. package/src/registry.ts +27 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Shishir Rai
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,125 @@
1
1
  # @nepdatejs/vanilla
2
2
 
3
- This placeholder version only reserves the name. Install the latest version.
3
+ The BS/AD date picker and calendar for plain JavaScript, as custom elements and a small imperative API. It works in plain HTML, Vue, Svelte, Solid, Laravel Blade, Django and Rails templates.
4
+
5
+ ## From a CDN
6
+
7
+ ```html
8
+ <link rel="stylesheet" href="https://unpkg.com/@nepdatejs/styles/index.css" />
9
+ <script src="https://unpkg.com/@nepdatejs/vanilla/dist/nepdate-picker.global.js"></script>
10
+
11
+ <form>
12
+ <label for="dob">Date of birth</label>
13
+ <nep-date-picker name="dob" input-id="dob" max="2026-12-31" required></nep-date-picker>
14
+ </form>
15
+ ```
16
+
17
+ ## With a bundler
18
+
19
+ ```bash
20
+ npm install @nepdatejs/vanilla @nepdatejs/styles
21
+ ```
22
+
23
+ ```js
24
+ import '@nepdatejs/styles';
25
+ import '@nepdatejs/vanilla/define'; // registers the elements
26
+ ```
27
+
28
+ ### One element per page
29
+
30
+ Each element has its own entry, so you ship only what you use (the calendar alone is about 3.7 kB of vanilla code instead of 9 kB):
31
+
32
+ ```js
33
+ import { defineDatePicker } from '@nepdatejs/vanilla/date-picker';
34
+ defineDatePicker();
35
+ ```
36
+
37
+ The entries are `/date-picker`, `/calendar`, `/date-range-picker`, `/date-time-picker` and `/multi-date-picker`. Each one exports its element, its view, `define…()` and `create…()`.
38
+
39
+ ## `<nep-date-picker>`
40
+
41
+ A form-associated element: the form receives the AD `"YYYY-MM-DD"` value under `name`. It supports `required`, `disabled` fieldsets and form reset.
42
+
43
+ | Attribute | Meaning |
44
+ | ------------------------- | -------------------------------------------------- |
45
+ | `value` | Starting value (AD) |
46
+ | `min`, `max` | Limits (AD) |
47
+ | `calendar` | `BS` or `AD`, fixed |
48
+ | `default-calendar` | Calendar shown first |
49
+ | `locale` | `en`, `ne` |
50
+ | `name` | Form field name |
51
+ | `placeholder` | Input placeholder |
52
+ | `required`, `disabled` | As on a native input |
53
+ | `clearable="false"` | Hide the clear button |
54
+ | `show-equivalent="false"` | Hide the other-calendar line |
55
+ | `close-on-select="false"` | Keep the panel open after a pick |
56
+ | `theme` | `light` \| `dark` \| `auto` |
57
+ | `inline` | Calendar always shown under the input |
58
+ | `mask="false"` | Don't fill in dashes while typing |
59
+ | `panel-layout` | `auto` (sheet below 480px) \| `popover` \| `sheet` |
60
+ | `persist-calendar` | localStorage key for the BS/AD choice |
61
+ | `week-starts-on` | `0`–`6` |
62
+ | `display-format` | e.g. `long` |
63
+ | `label` | The input's `aria-label` |
64
+ | `input-id` | For `<label for>` |
65
+
66
+ - **Properties:** `value`; `holidays`, `events` and `isDateDisabled` (functions and lists); `open()`, `close()`, `focus()`, `checkValidity()`.
67
+ - **Events:** `change` (detail `{ value, ad, bs }`), `nep-open`, `nep-close`, `nep-calendar-change`.
68
+
69
+ ## `<nep-calendar>` and `<nep-date-range-picker>`
70
+
71
+ ```html
72
+ <nep-calendar value="2026-10-18" range></nep-calendar>
73
+ <nep-date-range-picker name="leave" min-days="1" max-days="15"></nep-date-range-picker>
74
+ ```
75
+
76
+ - **`nep-calendar`:** fires `nep-select` with `{ date, value }`, or `{ range: { start, end } }` when it has the `range` attribute.
77
+ - **`nep-date-range-picker`:** add `fiscal-years` for a "Fiscal year" button that picks a whole fiscal year. It submits `leave-start` and `leave-end` (or set `start-name` / `end-name`), and fires `change` with `{ value: { start, end } }`.
78
+
79
+ ## `<nep-date-time-picker>`
80
+
81
+ ```html
82
+ <nep-date-time-picker
83
+ name="starts-at"
84
+ minute-step="15"
85
+ default-time="09:00"
86
+ hour12
87
+ ></nep-date-time-picker>
88
+ ```
89
+
90
+ Submits one instant, e.g. `2026-10-18T14:30:00+05:45`.
91
+
92
+ - **Attributes:** `time-zone`, `time-label`, `presets`, plus the date attributes above.
93
+ - **Events:** `change` with `{ value, ad, bs, time }`.
94
+
95
+ ## `<nep-multi-date-picker>`
96
+
97
+ ```html
98
+ <nep-multi-date-picker
99
+ name="days-off"
100
+ max-dates="5"
101
+ value="2026-10-18,2026-10-20"
102
+ ></nep-multi-date-picker>
103
+ ```
104
+
105
+ Click days to add or remove them, or type them separated by commas. The form gets one `days-off` entry per day, each an AD `"YYYY-MM-DD"`, and `element.value` is the sorted list.
106
+
107
+ - **Attributes:** `max-dates`, `close-on-select`, plus the date attributes above (`min`, `max`, `calendar`, `locale`, `required`, `disabled`, `inline`, `panel-layout`, `mask`, `label`, …).
108
+ - **Events:** `change` with `{ value: string[], dates: { ad, bs }[] }`.
109
+
110
+ ## Without custom elements
111
+
112
+ ```js
113
+ import { createDatePicker } from '@nepdatejs/vanilla';
114
+
115
+ // Takes over an existing <input name="dob" value="2026-10-10">, keeping it in step:
116
+ const picker = createDatePicker(document.querySelector('input[name="dob"]'), {
117
+ min: '2026-01-01',
118
+ });
119
+ picker.getValue(); // "2026-10-10"
120
+ picker.destroy(); // puts the original input back
121
+ ```
122
+
123
+ `createCalendar(container, options)` and `createDateRangePicker(container, options)` work the same way.
124
+
125
+ MIT © Shishir Rai
@@ -0,0 +1,11 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_registry = require("./registry-3qzdVB7H.cjs");
3
+ const require_define = require("./define-DTTdLfIM.cjs");
4
+ //#region src/auto-define.ts
5
+ /** `import '@nepdatejs/vanilla/define'` registers every element (<nep-date-picker>, <nep-calendar>, …). */
6
+ require_define.defineElements();
7
+ //#endregion
8
+ exports.ELEMENT_NAMES = require_registry.ELEMENT_NAMES;
9
+ exports.defineElements = require_define.defineElements;
10
+
11
+ //# sourceMappingURL=auto-define.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-define.cjs","names":["defineElements"],"sources":["../src/auto-define.ts"],"sourcesContent":["/** `import '@nepdatejs/vanilla/define'` registers every element (<nep-date-picker>, <nep-calendar>, …). */\nimport { defineElements } from './define';\n\ndefineElements();\n\nexport { defineElements, ELEMENT_NAMES } from './define';\n"],"mappings":";;;;;AAGAA,eAAAA,eAAe"}
@@ -0,0 +1,2 @@
1
+ import { n as ELEMENT_NAMES, t as defineElements } from "./define-B8NUA3yj.cjs";
2
+ export { ELEMENT_NAMES, defineElements };
@@ -0,0 +1,2 @@
1
+ import { n as ELEMENT_NAMES, t as defineElements } from "./define-B8NUA3yj.js";
2
+ export { ELEMENT_NAMES, defineElements };
@@ -0,0 +1,9 @@
1
+ import { t as ELEMENT_NAMES } from "./registry-BvkGnkvV.js";
2
+ import { t as defineElements } from "./define-7natoEH4.js";
3
+ //#region src/auto-define.ts
4
+ /** `import '@nepdatejs/vanilla/define'` registers every element (<nep-date-picker>, <nep-calendar>, …). */
5
+ defineElements();
6
+ //#endregion
7
+ export { ELEMENT_NAMES, defineElements };
8
+
9
+ //# sourceMappingURL=auto-define.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-define.js","names":[],"sources":["../src/auto-define.ts"],"sourcesContent":["/** `import '@nepdatejs/vanilla/define'` registers every element (<nep-date-picker>, <nep-calendar>, …). */\nimport { defineElements } from './define';\n\ndefineElements();\n\nexport { defineElements, ELEMENT_NAMES } from './define';\n"],"mappings":";;;;AAGA,eAAe"}
@@ -0,0 +1,142 @@
1
+ import { a as calendarAttr, c as onUnlessFalse, d as str, h as CalendarView, i as bool, m as weekday, n as defineElement, p as theme, r as Base, s as isoOf, t as ELEMENT_NAMES } from "./registry-BvkGnkvV.js";
2
+ import { fromIsoDate } from "@nepdatejs/core";
3
+ import { createCalendar, isDayList } from "@nepdatejs/calendar";
4
+ //#region src/calendar-element.ts
5
+ /**
6
+ * <nep-calendar value="2026-10-18"></nep-calendar>
7
+ *
8
+ * A standalone month view. Fires `nep-select` with { date, value } (single) or
9
+ * { range: { start, end } } (with the `range` attribute).
10
+ */
11
+ var NepCalendarElement = class extends Base {
12
+ constructor(..._args) {
13
+ super(..._args);
14
+ this.store = null;
15
+ this.view = null;
16
+ this.rich = {};
17
+ }
18
+ get holidays() {
19
+ return this.rich.holidays;
20
+ }
21
+ set holidays(next) {
22
+ this.rich = {
23
+ ...this.rich,
24
+ holidays: next
25
+ };
26
+ this.store?.setOptions({ holidays: next });
27
+ }
28
+ get events() {
29
+ return this.rich.events;
30
+ }
31
+ set events(next) {
32
+ this.rich = {
33
+ ...this.rich,
34
+ events: next
35
+ };
36
+ this.store?.setOptions({ events: next });
37
+ }
38
+ get isDateDisabled() {
39
+ return this.rich.isDateDisabled;
40
+ }
41
+ set isDateDisabled(next) {
42
+ this.rich = {
43
+ ...this.rich,
44
+ isDateDisabled: next
45
+ };
46
+ this.store?.setOptions({ isDateDisabled: next });
47
+ }
48
+ connectedCallback() {
49
+ if (this.store) return;
50
+ const store = createCalendar({
51
+ ...this.readOptions(),
52
+ onSelect: (selection) => {
53
+ const detail = isDayList(selection) ? {
54
+ dates: selection,
55
+ values: selection.map(isoOf)
56
+ } : "calendar" in selection ? {
57
+ date: selection,
58
+ value: isoOf(selection)
59
+ } : { range: {
60
+ start: isoOf(selection.start),
61
+ end: isoOf(selection.end)
62
+ } };
63
+ this.dispatchEvent(new CustomEvent("nep-select", {
64
+ bubbles: true,
65
+ detail
66
+ }));
67
+ }
68
+ });
69
+ this.store = store;
70
+ this.view = new CalendarView(this, store, { locale: () => str(this, "locale") });
71
+ this.applyTheme();
72
+ }
73
+ disconnectedCallback() {
74
+ this.view?.destroy();
75
+ this.view = null;
76
+ this.store = null;
77
+ }
78
+ attributeChangedCallback() {
79
+ this.store?.setOptions(this.readOptions());
80
+ this.applyTheme();
81
+ }
82
+ applyTheme() {
83
+ const value = theme(this);
84
+ if (this.view) {
85
+ if (value) this.view.element.dataset["ndpTheme"] = value;
86
+ else delete this.view.element.dataset["ndpTheme"];
87
+ }
88
+ }
89
+ readOptions() {
90
+ return {
91
+ ...this.rich,
92
+ selected: fromIsoDate(this.getAttribute("value")),
93
+ calendar: calendarAttr(this, "calendar"),
94
+ locale: str(this, "locale"),
95
+ min: fromIsoDate(this.getAttribute("min")),
96
+ max: fromIsoDate(this.getAttribute("max")),
97
+ weekStartsOn: weekday(this, "week-starts-on"),
98
+ showOtherCalendar: onUnlessFalse(this, "show-other-calendar"),
99
+ showOutsideDays: onUnlessFalse(this, "show-outside-days"),
100
+ selectionMode: bool(this, "range") ? "range" : "single"
101
+ };
102
+ }
103
+ };
104
+ NepCalendarElement.observedAttributes = [
105
+ "value",
106
+ "calendar",
107
+ "locale",
108
+ "min",
109
+ "max",
110
+ "week-starts-on",
111
+ "show-other-calendar",
112
+ "show-outside-days",
113
+ "range",
114
+ "theme"
115
+ ];
116
+ //#endregion
117
+ //#region src/calendar.ts
118
+ /** `@nepdatejs/vanilla/calendar`: just the standalone calendar. */
119
+ /** Register <nep-calendar> (skipped if already defined). */
120
+ function defineCalendar(registry) {
121
+ defineElement(ELEMENT_NAMES.calendar, NepCalendarElement, registry);
122
+ }
123
+ /** Mount a standalone calendar into a container. */
124
+ function createCalendar$1(container, options = {}) {
125
+ const store = createCalendar(options);
126
+ const view = new CalendarView(container, store, { locale: () => options.locale });
127
+ return {
128
+ store,
129
+ view,
130
+ setOptions: (changes) => {
131
+ store.setOptions(changes);
132
+ },
133
+ destroy: () => {
134
+ view.destroy();
135
+ store.destroy();
136
+ }
137
+ };
138
+ }
139
+ //#endregion
140
+ export { defineCalendar as n, NepCalendarElement as r, createCalendar$1 as t };
141
+
142
+ //# sourceMappingURL=calendar-BAcO-jYq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-BAcO-jYq.js","names":["createCalendarStore","createCalendar","createCalendarStore"],"sources":["../src/calendar-element.ts","../src/calendar.ts"],"sourcesContent":["import { fromIsoDate } from '@nepdatejs/core';\nimport {\n createCalendar as createCalendarStore,\n isDayList,\n type CalendarOptions,\n type CalendarStore,\n type DateRange,\n} from '@nepdatejs/calendar';\nimport { CalendarView } from './calendar-view';\nimport {\n Base,\n str,\n bool,\n onUnlessFalse,\n calendarAttr,\n weekday,\n theme,\n isoOf,\n type RichProps,\n} from './element-utils';\n\n/**\n * <nep-calendar value=\"2026-10-18\"></nep-calendar>\n *\n * A standalone month view. Fires `nep-select` with { date, value } (single) or\n * { range: { start, end } } (with the `range` attribute).\n */\nexport class NepCalendarElement extends Base {\n static readonly observedAttributes: readonly string[] = [\n 'value',\n 'calendar',\n 'locale',\n 'min',\n 'max',\n 'week-starts-on',\n 'show-other-calendar',\n 'show-outside-days',\n 'range',\n 'theme',\n ];\n\n store: CalendarStore | null = null;\n private view: CalendarView | null = null;\n private rich: RichProps = {};\n\n get holidays(): RichProps['holidays'] {\n return this.rich.holidays;\n }\n set holidays(next: RichProps['holidays']) {\n this.rich = { ...this.rich, holidays: next };\n this.store?.setOptions({ holidays: next });\n }\n get events(): RichProps['events'] {\n return this.rich.events;\n }\n set events(next: RichProps['events']) {\n this.rich = { ...this.rich, events: next };\n this.store?.setOptions({ events: next });\n }\n get isDateDisabled(): RichProps['isDateDisabled'] {\n return this.rich.isDateDisabled;\n }\n set isDateDisabled(next: RichProps['isDateDisabled']) {\n this.rich = { ...this.rich, isDateDisabled: next };\n this.store?.setOptions({ isDateDisabled: next });\n }\n\n connectedCallback(): void {\n if (this.store) {\n return;\n }\n const store = createCalendarStore({\n ...this.readOptions(),\n onSelect: (selection) => {\n const detail = isDayList(selection)\n ? { dates: selection, values: selection.map(isoOf) }\n : 'calendar' in selection\n ? { date: selection, value: isoOf(selection) }\n : {\n range: {\n start: isoOf(selection.start),\n end: isoOf(selection.end),\n } satisfies Record<keyof DateRange, string>,\n };\n this.dispatchEvent(new CustomEvent('nep-select', { bubbles: true, detail }));\n },\n });\n this.store = store;\n this.view = new CalendarView(this, store, { locale: () => str(this, 'locale') });\n this.applyTheme();\n }\n\n disconnectedCallback(): void {\n this.view?.destroy();\n this.view = null;\n this.store = null;\n }\n\n attributeChangedCallback(): void {\n this.store?.setOptions(this.readOptions());\n this.applyTheme();\n }\n\n private applyTheme(): void {\n const value = theme(this);\n if (this.view) {\n if (value) {\n this.view.element.dataset['ndpTheme'] = value;\n } else {\n delete this.view.element.dataset['ndpTheme'];\n }\n }\n }\n\n private readOptions(): CalendarOptions {\n return {\n ...this.rich,\n selected: fromIsoDate(this.getAttribute('value')),\n calendar: calendarAttr(this, 'calendar'),\n locale: str(this, 'locale'),\n min: fromIsoDate(this.getAttribute('min')),\n max: fromIsoDate(this.getAttribute('max')),\n weekStartsOn: weekday(this, 'week-starts-on'),\n showOtherCalendar: onUnlessFalse(this, 'show-other-calendar'),\n showOutsideDays: onUnlessFalse(this, 'show-outside-days'),\n selectionMode: bool(this, 'range') ? 'range' : 'single',\n };\n }\n}\n","/** `@nepdatejs/vanilla/calendar`: just the standalone calendar. */\nimport {\n createCalendar as createCalendarStore,\n type CalendarOptions,\n type CalendarStore,\n} from '@nepdatejs/calendar';\nimport { NepCalendarElement } from './calendar-element';\nimport { CalendarView } from './calendar-view';\nimport { defineElement, ELEMENT_NAMES } from './registry';\n\nexport { NepCalendarElement };\nexport { CalendarView, type CalendarViewOptions } from './calendar-view';\n\n/** Register <nep-calendar> (skipped if already defined). */\nexport function defineCalendar(registry?: CustomElementRegistry): void {\n defineElement(ELEMENT_NAMES.calendar, NepCalendarElement, registry);\n}\n\nexport interface CalendarHandle {\n readonly store: CalendarStore;\n readonly view: CalendarView;\n setOptions(changes: Partial<CalendarOptions>): void;\n destroy(): void;\n}\n\n/** Mount a standalone calendar into a container. */\nexport function createCalendar(\n container: HTMLElement,\n options: CalendarOptions = {},\n): CalendarHandle {\n const store = createCalendarStore(options);\n const view = new CalendarView(container, store, { locale: () => options.locale });\n\n return {\n store,\n view,\n setOptions: (changes) => {\n store.setOptions(changes);\n },\n destroy: () => {\n view.destroy();\n store.destroy();\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { n as RichProps, t as Base } from "./element-utils-C-r5gPlk.js";
2
+ import { CalendarDate, LocaleCode } from "@nepdatejs/core";
3
+ import { CalendarOptions, CalendarStore } from "@nepdatejs/calendar";
4
+ //#region src/calendar-element.d.ts
5
+ /**
6
+ * <nep-calendar value="2026-10-18"></nep-calendar>
7
+ *
8
+ * A standalone month view. Fires `nep-select` with { date, value } (single) or
9
+ * { range: { start, end } } (with the `range` attribute).
10
+ */
11
+ declare class NepCalendarElement extends Base {
12
+ static readonly observedAttributes: readonly string[];
13
+ store: CalendarStore | null;
14
+ private view;
15
+ private rich;
16
+ get holidays(): RichProps["holidays"];
17
+ set holidays(next: RichProps["holidays"]);
18
+ get events(): RichProps["events"];
19
+ set events(next: RichProps["events"]);
20
+ get isDateDisabled(): RichProps["isDateDisabled"];
21
+ set isDateDisabled(next: RichProps["isDateDisabled"]);
22
+ connectedCallback(): void;
23
+ disconnectedCallback(): void;
24
+ attributeChangedCallback(): void;
25
+ private applyTheme;
26
+ private readOptions;
27
+ }
28
+ //#endregion
29
+ //#region src/calendar-view.d.ts
30
+ interface CalendarViewOptions {
31
+ /** The locale for labels; read on every render so a change applies at once. */
32
+ readonly locale?: (() => LocaleCode | undefined) | undefined;
33
+ /** Called for a day click or Enter/Space; defaults to store.actions.select. */
34
+ readonly onDayActivate?: ((date: CalendarDate) => void) | undefined;
35
+ }
36
+ /**
37
+ * Renders a calendar store into `root` with the @nepdatejs/styles markup and
38
+ * keeps it in step. Elements are updated in place, so a click or focus never
39
+ * lands on a replaced button; only switching view or row count rebuilds the body.
40
+ */
41
+ declare class CalendarView {
42
+ readonly element: HTMLDivElement;
43
+ private readonly store;
44
+ private readonly options;
45
+ private readonly prev;
46
+ private readonly next;
47
+ private readonly title;
48
+ private readonly body;
49
+ private bodyKey;
50
+ private cells;
51
+ private tiles;
52
+ private focusAfterRender;
53
+ private readonly unsubscribe;
54
+ constructor(root: HTMLElement, store: CalendarStore, options?: CalendarViewOptions);
55
+ /** Move keyboard focus to the day that should have it. */
56
+ focusGrid(): void;
57
+ destroy(): void;
58
+ render(): void;
59
+ /** Focus the grid if a keyboard move or view change asked for it. */
60
+ private flushFocus;
61
+ private renderTitle;
62
+ private buildGrid;
63
+ private patchGrid;
64
+ private buildOptions;
65
+ private patchOptions;
66
+ private cellOf;
67
+ private readonly onClick;
68
+ private readonly onKeyDown;
69
+ private readonly onMouseOver;
70
+ private readonly onMouseLeave;
71
+ private readonly onFocusIn;
72
+ }
73
+ //#endregion
74
+ //#region src/calendar.d.ts
75
+ /** Register <nep-calendar> (skipped if already defined). */
76
+ declare function defineCalendar(registry?: CustomElementRegistry): void;
77
+ interface CalendarHandle {
78
+ readonly store: CalendarStore;
79
+ readonly view: CalendarView;
80
+ setOptions(changes: Partial<CalendarOptions>): void;
81
+ destroy(): void;
82
+ }
83
+ /** Mount a standalone calendar into a container. */
84
+ declare function createCalendar$1(container: HTMLElement, options?: CalendarOptions): CalendarHandle;
85
+ //#endregion
86
+ export { CalendarViewOptions as a, CalendarView as i, createCalendar$1 as n, NepCalendarElement as o, defineCalendar as r, CalendarHandle as t };
87
+ //# sourceMappingURL=calendar-BNdN8qJv.d.ts.map
@@ -0,0 +1,159 @@
1
+ const require_registry = require("./registry-3qzdVB7H.cjs");
2
+ let _nepdatejs_core = require("@nepdatejs/core");
3
+ let _nepdatejs_calendar = require("@nepdatejs/calendar");
4
+ //#region src/calendar-element.ts
5
+ /**
6
+ * <nep-calendar value="2026-10-18"></nep-calendar>
7
+ *
8
+ * A standalone month view. Fires `nep-select` with { date, value } (single) or
9
+ * { range: { start, end } } (with the `range` attribute).
10
+ */
11
+ var NepCalendarElement = class extends require_registry.Base {
12
+ constructor(..._args) {
13
+ super(..._args);
14
+ this.store = null;
15
+ this.view = null;
16
+ this.rich = {};
17
+ }
18
+ get holidays() {
19
+ return this.rich.holidays;
20
+ }
21
+ set holidays(next) {
22
+ this.rich = {
23
+ ...this.rich,
24
+ holidays: next
25
+ };
26
+ this.store?.setOptions({ holidays: next });
27
+ }
28
+ get events() {
29
+ return this.rich.events;
30
+ }
31
+ set events(next) {
32
+ this.rich = {
33
+ ...this.rich,
34
+ events: next
35
+ };
36
+ this.store?.setOptions({ events: next });
37
+ }
38
+ get isDateDisabled() {
39
+ return this.rich.isDateDisabled;
40
+ }
41
+ set isDateDisabled(next) {
42
+ this.rich = {
43
+ ...this.rich,
44
+ isDateDisabled: next
45
+ };
46
+ this.store?.setOptions({ isDateDisabled: next });
47
+ }
48
+ connectedCallback() {
49
+ if (this.store) return;
50
+ const store = (0, _nepdatejs_calendar.createCalendar)({
51
+ ...this.readOptions(),
52
+ onSelect: (selection) => {
53
+ const detail = (0, _nepdatejs_calendar.isDayList)(selection) ? {
54
+ dates: selection,
55
+ values: selection.map(require_registry.isoOf)
56
+ } : "calendar" in selection ? {
57
+ date: selection,
58
+ value: require_registry.isoOf(selection)
59
+ } : { range: {
60
+ start: require_registry.isoOf(selection.start),
61
+ end: require_registry.isoOf(selection.end)
62
+ } };
63
+ this.dispatchEvent(new CustomEvent("nep-select", {
64
+ bubbles: true,
65
+ detail
66
+ }));
67
+ }
68
+ });
69
+ this.store = store;
70
+ this.view = new require_registry.CalendarView(this, store, { locale: () => require_registry.str(this, "locale") });
71
+ this.applyTheme();
72
+ }
73
+ disconnectedCallback() {
74
+ this.view?.destroy();
75
+ this.view = null;
76
+ this.store = null;
77
+ }
78
+ attributeChangedCallback() {
79
+ this.store?.setOptions(this.readOptions());
80
+ this.applyTheme();
81
+ }
82
+ applyTheme() {
83
+ const value = require_registry.theme(this);
84
+ if (this.view) {
85
+ if (value) this.view.element.dataset["ndpTheme"] = value;
86
+ else delete this.view.element.dataset["ndpTheme"];
87
+ }
88
+ }
89
+ readOptions() {
90
+ return {
91
+ ...this.rich,
92
+ selected: (0, _nepdatejs_core.fromIsoDate)(this.getAttribute("value")),
93
+ calendar: require_registry.calendarAttr(this, "calendar"),
94
+ locale: require_registry.str(this, "locale"),
95
+ min: (0, _nepdatejs_core.fromIsoDate)(this.getAttribute("min")),
96
+ max: (0, _nepdatejs_core.fromIsoDate)(this.getAttribute("max")),
97
+ weekStartsOn: require_registry.weekday(this, "week-starts-on"),
98
+ showOtherCalendar: require_registry.onUnlessFalse(this, "show-other-calendar"),
99
+ showOutsideDays: require_registry.onUnlessFalse(this, "show-outside-days"),
100
+ selectionMode: require_registry.bool(this, "range") ? "range" : "single"
101
+ };
102
+ }
103
+ };
104
+ NepCalendarElement.observedAttributes = [
105
+ "value",
106
+ "calendar",
107
+ "locale",
108
+ "min",
109
+ "max",
110
+ "week-starts-on",
111
+ "show-other-calendar",
112
+ "show-outside-days",
113
+ "range",
114
+ "theme"
115
+ ];
116
+ //#endregion
117
+ //#region src/calendar.ts
118
+ /** `@nepdatejs/vanilla/calendar`: just the standalone calendar. */
119
+ /** Register <nep-calendar> (skipped if already defined). */
120
+ function defineCalendar(registry) {
121
+ require_registry.defineElement(require_registry.ELEMENT_NAMES.calendar, NepCalendarElement, registry);
122
+ }
123
+ /** Mount a standalone calendar into a container. */
124
+ function createCalendar(container, options = {}) {
125
+ const store = (0, _nepdatejs_calendar.createCalendar)(options);
126
+ const view = new require_registry.CalendarView(container, store, { locale: () => options.locale });
127
+ return {
128
+ store,
129
+ view,
130
+ setOptions: (changes) => {
131
+ store.setOptions(changes);
132
+ },
133
+ destroy: () => {
134
+ view.destroy();
135
+ store.destroy();
136
+ }
137
+ };
138
+ }
139
+ //#endregion
140
+ Object.defineProperty(exports, "NepCalendarElement", {
141
+ enumerable: true,
142
+ get: function() {
143
+ return NepCalendarElement;
144
+ }
145
+ });
146
+ Object.defineProperty(exports, "createCalendar", {
147
+ enumerable: true,
148
+ get: function() {
149
+ return createCalendar;
150
+ }
151
+ });
152
+ Object.defineProperty(exports, "defineCalendar", {
153
+ enumerable: true,
154
+ get: function() {
155
+ return defineCalendar;
156
+ }
157
+ });
158
+
159
+ //# sourceMappingURL=calendar-C1LZI7XN.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-C1LZI7XN.cjs","names":["Base","createCalendarStore","isDayList","isoOf","CalendarView","str","theme","fromIsoDate","calendarAttr","weekday","onUnlessFalse","bool","ELEMENT_NAMES","createCalendarStore","CalendarView"],"sources":["../src/calendar-element.ts","../src/calendar.ts"],"sourcesContent":["import { fromIsoDate } from '@nepdatejs/core';\nimport {\n createCalendar as createCalendarStore,\n isDayList,\n type CalendarOptions,\n type CalendarStore,\n type DateRange,\n} from '@nepdatejs/calendar';\nimport { CalendarView } from './calendar-view';\nimport {\n Base,\n str,\n bool,\n onUnlessFalse,\n calendarAttr,\n weekday,\n theme,\n isoOf,\n type RichProps,\n} from './element-utils';\n\n/**\n * <nep-calendar value=\"2026-10-18\"></nep-calendar>\n *\n * A standalone month view. Fires `nep-select` with { date, value } (single) or\n * { range: { start, end } } (with the `range` attribute).\n */\nexport class NepCalendarElement extends Base {\n static readonly observedAttributes: readonly string[] = [\n 'value',\n 'calendar',\n 'locale',\n 'min',\n 'max',\n 'week-starts-on',\n 'show-other-calendar',\n 'show-outside-days',\n 'range',\n 'theme',\n ];\n\n store: CalendarStore | null = null;\n private view: CalendarView | null = null;\n private rich: RichProps = {};\n\n get holidays(): RichProps['holidays'] {\n return this.rich.holidays;\n }\n set holidays(next: RichProps['holidays']) {\n this.rich = { ...this.rich, holidays: next };\n this.store?.setOptions({ holidays: next });\n }\n get events(): RichProps['events'] {\n return this.rich.events;\n }\n set events(next: RichProps['events']) {\n this.rich = { ...this.rich, events: next };\n this.store?.setOptions({ events: next });\n }\n get isDateDisabled(): RichProps['isDateDisabled'] {\n return this.rich.isDateDisabled;\n }\n set isDateDisabled(next: RichProps['isDateDisabled']) {\n this.rich = { ...this.rich, isDateDisabled: next };\n this.store?.setOptions({ isDateDisabled: next });\n }\n\n connectedCallback(): void {\n if (this.store) {\n return;\n }\n const store = createCalendarStore({\n ...this.readOptions(),\n onSelect: (selection) => {\n const detail = isDayList(selection)\n ? { dates: selection, values: selection.map(isoOf) }\n : 'calendar' in selection\n ? { date: selection, value: isoOf(selection) }\n : {\n range: {\n start: isoOf(selection.start),\n end: isoOf(selection.end),\n } satisfies Record<keyof DateRange, string>,\n };\n this.dispatchEvent(new CustomEvent('nep-select', { bubbles: true, detail }));\n },\n });\n this.store = store;\n this.view = new CalendarView(this, store, { locale: () => str(this, 'locale') });\n this.applyTheme();\n }\n\n disconnectedCallback(): void {\n this.view?.destroy();\n this.view = null;\n this.store = null;\n }\n\n attributeChangedCallback(): void {\n this.store?.setOptions(this.readOptions());\n this.applyTheme();\n }\n\n private applyTheme(): void {\n const value = theme(this);\n if (this.view) {\n if (value) {\n this.view.element.dataset['ndpTheme'] = value;\n } else {\n delete this.view.element.dataset['ndpTheme'];\n }\n }\n }\n\n private readOptions(): CalendarOptions {\n return {\n ...this.rich,\n selected: fromIsoDate(this.getAttribute('value')),\n calendar: calendarAttr(this, 'calendar'),\n locale: str(this, 'locale'),\n min: fromIsoDate(this.getAttribute('min')),\n max: fromIsoDate(this.getAttribute('max')),\n weekStartsOn: weekday(this, 'week-starts-on'),\n showOtherCalendar: onUnlessFalse(this, 'show-other-calendar'),\n showOutsideDays: onUnlessFalse(this, 'show-outside-days'),\n selectionMode: bool(this, 'range') ? 'range' : 'single',\n };\n }\n}\n","/** `@nepdatejs/vanilla/calendar`: just the standalone calendar. */\nimport {\n createCalendar as createCalendarStore,\n type CalendarOptions,\n type CalendarStore,\n} from '@nepdatejs/calendar';\nimport { NepCalendarElement } from './calendar-element';\nimport { CalendarView } from './calendar-view';\nimport { defineElement, ELEMENT_NAMES } from './registry';\n\nexport { NepCalendarElement };\nexport { CalendarView, type CalendarViewOptions } from './calendar-view';\n\n/** Register <nep-calendar> (skipped if already defined). */\nexport function defineCalendar(registry?: CustomElementRegistry): void {\n defineElement(ELEMENT_NAMES.calendar, NepCalendarElement, registry);\n}\n\nexport interface CalendarHandle {\n readonly store: CalendarStore;\n readonly view: CalendarView;\n setOptions(changes: Partial<CalendarOptions>): void;\n destroy(): void;\n}\n\n/** Mount a standalone calendar into a container. */\nexport function createCalendar(\n container: HTMLElement,\n options: CalendarOptions = {},\n): CalendarHandle {\n const store = createCalendarStore(options);\n const view = new CalendarView(container, store, { locale: () => options.locale });\n\n return {\n store,\n view,\n setOptions: (changes) => {\n store.setOptions(changes);\n },\n destroy: () => {\n view.destroy();\n store.destroy();\n },\n };\n}\n"],"mappings":"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"}