@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
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
|
-
|
|
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 4 kB of vanilla code instead of 10 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-BbTIFHtH.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,9 @@
|
|
|
1
|
+
import { t as ELEMENT_NAMES } from "./registry-BvkGnkvV.js";
|
|
2
|
+
import { t as defineElements } from "./define-D96w8Zu2.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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"}
|