@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.
- package/LICENSE +21 -0
- package/README.md +123 -1
- 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-CQoabjlj.cjs +600 -0
- package/dist/date-picker-CQoabjlj.cjs.map +1 -0
- package/dist/date-picker-DyvpYe29.d.ts +74 -0
- package/dist/date-picker-ucoEFnMW.js +577 -0
- package/dist/date-picker-ucoEFnMW.js.map +1 -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-BQKcZeqG.cjs +489 -0
- package/dist/date-range-picker-BQKcZeqG.cjs.map +1 -0
- package/dist/date-range-picker-D3eNvlgv.d.ts +98 -0
- package/dist/date-range-picker-DAkCzVgT.js +466 -0
- package/dist/date-range-picker-DAkCzVgT.js.map +1 -0
- package/dist/date-range-picker-SIl0vhUV.d.cts +98 -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-BqweOP2u.js +487 -0
- package/dist/date-time-picker-BqweOP2u.js.map +1 -0
- package/dist/date-time-picker-Bxfn-a9T.cjs +510 -0
- package/dist/date-time-picker-Bxfn-a9T.cjs.map +1 -0
- package/dist/date-time-picker-BzSyQxrf.d.cts +92 -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-7natoEH4.js +18 -0
- package/dist/define-7natoEH4.js.map +1 -0
- package/dist/define-B8NUA3yj.d.cts +16 -0
- package/dist/define-B8NUA3yj.d.ts +16 -0
- package/dist/define-DTTdLfIM.cjs +23 -0
- package/dist/define-DTTdLfIM.cjs.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-BMEYUPBa.cjs +462 -0
- package/dist/multi-date-picker-BMEYUPBa.cjs.map +1 -0
- package/dist/multi-date-picker-BUNf5zyJ.d.cts +105 -0
- package/dist/multi-date-picker-XCg8Y0sF.js +439 -0
- package/dist/multi-date-picker-XCg8Y0sF.js.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-CASwnwmS.js +45 -0
- package/dist/preset-list-CASwnwmS.js.map +1 -0
- package/dist/preset-list-Cs8H12Wp.cjs +50 -0
- package/dist/preset-list-Cs8H12Wp.cjs.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 +159 -4
- 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 +459 -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 +345 -0
- package/src/picker-view.ts +448 -0
- package/src/preset-list.ts +51 -0
- package/src/range-view.ts +393 -0
- package/src/registry.ts +27 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nepdate-picker.global.js","names":["createCalendar","createCalendarStore","createCalendarStore","createDatePicker","createCalendar","createDateRangePicker","createMultiDatePicker","createDateTimePicker","VIEW_KEYS","createDatePicker","storeOptions","VIEW_KEYS","createDateRangePicker","storeOptions","VIEW_KEYS","createDateTimePicker","storeOptions","createMultiDatePicker","exports","BS_DATA","NepDateRangeError","message","code","toEpochDay","value","weekdayOf","epoch","bsMonths$1","adMonths$1","en","name","bsMonths","adMonths","locales","localeData","current","getConfig","isWeekday","DAYS_BEFORE_EPOCH","DAYS_PER_ERA","MONTH_DAYS","isAdLeapYear","year","adMonthLength","month","isValidAdDate","day","adToEpoch","y","era","yearOfEra","dayOfYear","dayOfEra","epochToAd","z","shiftedMonth","data","freezeData","table","source","months","buildTable","count","yearStart","monthOffset","start","offset","m","bsTable","bsLastYear","bsEpochRange","bsMonthLength","lastYear","isValidBsDate","bsToEpoch","index","epochToBs","first","last","low","high","middle","adDate","bsDate","length","createDate","calendar","isValidDate","daysInMonth","toEpoch","date","fromEpoch","assertConvertible","toCalendar","minDate","maxDate","toIsoDate","pad","fromIsoDate","match","fromJsDate","instant","parts","timeZone","part","item","type","fromIsoTimestamp","time","from","to","isoParts","today","now","hour","minute","addDays","assertInteger","days","addMonths","addYears","years","startOfMonth","endOfMonth","startOfYear","endOfYear","startOfWeek","assertWeekday","weekStartsOn","endOfWeek","differenceInDays","a","b","inCalendarOf","target","compareDates","isSameDay","isSameMonth","other","isBefore","isAfter","isWithin","min","max","clampDate","dayOfWeek","DEVANAGARI","getLocale","locale","monthNames","width","toAsciiDigits","digit","formatNumber","digits","formatMessage","template","values","whole","DATE_FORMATS","formatDate","tokens","pattern","output","token","fiscalYear","bs","fiscalYearRange","endYear","startYear","formatFiscalYear","end","fy","style","YEAR_FIRST","COMPACT","parseDate","parseDateStrict","text","ascii","timeOfDay","isValidTime","parseTime","meridiem","word","kind","am","pm","formatTime","options","toIsoDateTime","wall","offsetMinutes","sign","abs","fromIsoDateTime","zoned","local","FORWARD","nextFocus","key","focused","limits","computeLimits","tableLow","firstWholeMonthDay","tableHigh","lastWholeMonthDay","empty","lowDay","highDay","isInLimits","NO_EVENTS","buildMonthGrid","input","firstEpoch","lead","rows","names","todayEpoch","focusEpoch","selectionEpochs","hoverEpoch","startEpoch","endEpoch","previewLow","previewHigh","weeks","row","week","column","isOutside","safeFromEpoch","otherDate","weekday","isToday","isRangeStart","isRangeEnd","isRangeMiddle","isSelected","singleEpoch","many","isInRangePreview","isDisabled","holiday","holidayLabel","state","buildWeekdays","weekdays","weekendDays","NONE","none","selected","isDayList","mode","selection","buildMonthTiles","long","otherShort","safeConvert","valid","subLabel","yearPageStart","buildYearTiles","safeFiscalYear","isFiscalYearAllowed","buildFiscalYearTiles","anchor","pageStart","currentStart","range","createCalendar$1","initial","todayDate","normalizeSelection","view","rangeHover","makeHolidayResolver","visibleMonth","clampMonth","anchorOf","clampDay","snapshot","build","listeners","destroyed","focusTarget","isSelectable","loc","selectedDay","fiscalStart","fiscalStartOf","fiscalPage","labels","rangeOf","tileInput","emit","listener","update","before","stateKey","change","single","shiftMonths","actions","next","modifiers","result","toggleDay","changes","reselect","inCalendar","sortDays","second","kept","holidays","info","byDay","label","el","node","tag","setAttrs","attrs","children","setText","counter","uid","prefix","SVG","PATHS","icon","svg","d","path","setPopupMode","inputs","inline","panel","\"layout\"","FOCUS_KEYS","CalendarView","event","action","\"action\"","option","tile","cell","store","root","stepLabels","monthName","yearText","splitTitle","wanted","monthLabel","yearLabel","button","head","i","headers","th","buttons","patchDay","tiles","focusIndex","sub","td","dot","space","title","Base","str","element","bool","onUnlessFalse","calendarAttr","int","theme","panelLayout","presetIds","id","swallowInnerChange","host","isoOf","NepCalendarElement","_args","detail","\"ndpTheme\"","ELEMENT_NAMES","defineElement","registry","defineCalendar","createCalendar","container","DIGIT","DIGITS_ONLY","YEAR_MONTH","maskDateText","previous","out","yearMonth","parseInput","messages","error","checkDate","format","formatInput","equivalentText","placeholderText","readIso","detailOf","panelOptions","inputLimits","localeOf","formatOf","todayOf","isRange","isSingleDay","createEmitter","queued","depth","notify","rebuild","callback","resolveSinglePreset","context","resolveRangePreset","describePreset","preset","resolveBuiltIn","createDatePicker$1","open","pick","emitter","presetStates","presetContext","resolvedPresets","entry","candidate","syncPanel","showDate","setDate","nextValue","changed","byUser","applyValue","picked","nextDate","createDateRangePicker$1","ordered","valueOf","startText","endText","lengthError","commit","nextStart","nextEnd","settle","tooFar","allowed","field","otherError","incoming","SEPARATOR","createMultiDatePicker$1","dates","readAll","valuesOf","textOk","detailsOf","list","tooMany","setDates","sorted","unique","details","maskLast","parsed","firstError","iso","nextDates","createDateTimePicker$1","zone","timeText","fmt","timeError","datePicker","dateOptions","toIsoDay","compose","t","_value","_default","_onChange","_zone","_hour12","_step","_defaultTime","rest","inner","step","hour12","setTime","hasDom","supportsPopover","resolveLayout","layout","viewportWidth","sheetBelow","computePosition","gap","placement","viewport","roomBelow","roomAbove","side","panelHeight","rawTop","rawLeft","placePopover","noop$1","topLayer","\"side\"","hider","position","trackPosition","hide","place","onOutsidePointer","noop","elements","onBackdropPointer","box","onEscape","capture","restoreFocus","PresetList","\"preset\"","onApply","presets","ids","VIEW_KEYS$3","DatePickerView","\"calendar\"","storeOptions$3","inputId","panelId","calendarRoot","forStore","disabled","hintText","stopTracking","stopOutside","stopBackdrop","stopEscape","stored","readStorage","NepDatePickerElement","defineDatePicker","createDatePicker","enhanced","VIEW_KEYS$2","DateRangePickerView","storeOptions$2","makeInput","texts","fieldError","fiscal","NepDateRangePickerElement","defineDateRangePicker","createDateRangePicker","VIEW_KEYS$1","DateTimePickerView","unit","\"unit\"","\"value\"","storeOptions$1","presetId","hint","renderColumn","cells","NepDateTimePickerElement","defineDateTimePicker","createDateTimePicker","VIEW_KEYS","MultiDatePickerView","storeOptions","close","NepMultiDatePickerElement","defineMultiDatePicker","createMultiDatePicker","defineElements"],"sources":["../../core/dist/years-CabTFbN9.js","../../core/dist/index.js","../../calendar/dist/index.js","../src/dom.ts","../src/calendar-view.ts","../src/element-utils.ts","../src/calendar-element.ts","../src/registry.ts","../src/calendar.ts","../../datepicker/dist/index.js","../../dom/dist/index.js","../src/preset-list.ts","../src/picker-view.ts","../src/date-picker-element.ts","../src/date-picker.ts","../src/range-view.ts","../src/date-range-picker-element.ts","../src/date-range-picker.ts","../src/datetime-view.ts","../src/date-time-picker-element.ts","../src/date-time-picker.ts","../src/multi-view.ts","../src/multi-date-picker-element.ts","../src/multi-date-picker.ts","../src/define.ts","../src/auto-define.ts"],"sourcesContent":["//#region src/bs/data/years.ts\nconst BS_DATA = {\n\tfirstYear: 1970,\n\tepochStart: -20717,\n\tverifiedThrough: 2083,\n\tyears: [\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t30,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t30,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t30,\n\t\t\t31,\n\t\t\t32,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t30,\n\t\t\t29,\n\t\t\t31\n\t\t],\n\t\t[\n\t\t\t31,\n\t\t\t31,\n\t\t\t32,\n\t\t\t31,\n\t\t\t31,\n\t\t\t31,\n\t\t\t30,\n\t\t\t29,\n\t\t\t29,\n\t\t\t30,\n\t\t\t30,\n\t\t\t30\n\t\t]\n\t]\n};\n//#endregion\nexport { BS_DATA as t };\n\n//# sourceMappingURL=years-CabTFbN9.js.map","import { t as BS_DATA } from \"./years-CabTFbN9.js\";\n//#region src/errors.ts\n/** Thrown for any invalid date or argument. Check `code`, not the message. */\nvar NepDateRangeError = class extends RangeError {\n\tconstructor(code, message) {\n\t\tsuper(message);\n\t\tthis.name = \"NepDateRangeError\";\n\t\tthis.code = code;\n\t}\n};\n/** Thrown when a BS table passed to `setBsData` or `patchBsYear` is not valid. */\nvar NepDateDataError = class extends Error {\n\tconstructor(code, message, year, month) {\n\t\tsuper(message);\n\t\tthis.name = \"NepDateDataError\";\n\t\tthis.code = code;\n\t\tthis.year = year;\n\t\tthis.month = month;\n\t}\n};\n//#endregion\n//#region src/epoch.ts\n/** Brand a whole number of days since 1970-01-01 as an `EpochDay`. */\nfunction toEpochDay(value) {\n\tif (!Number.isSafeInteger(value)) throw new NepDateRangeError(\"INVALID_ARGUMENT\", `${String(value)} is not a whole number of days.`);\n\treturn value;\n}\n/** The weekday of a day count. 1970-01-01 was a Thursday. */\nfunction weekdayOf(epoch) {\n\treturn ((epoch + 4) % 7 + 7) % 7;\n}\n//#endregion\n//#region src/locale/en.ts\nconst bsMonths$1 = [\n\t\"Baisakh\",\n\t\"Jestha\",\n\t\"Asar\",\n\t\"Shrawan\",\n\t\"Bhadra\",\n\t\"Ashwin\",\n\t\"Kartik\",\n\t\"Mangsir\",\n\t\"Poush\",\n\t\"Magh\",\n\t\"Falgun\",\n\t\"Chaitra\"\n];\nconst adMonths$1 = [\n\t\"January\",\n\t\"February\",\n\t\"March\",\n\t\"April\",\n\t\"May\",\n\t\"June\",\n\t\"July\",\n\t\"August\",\n\t\"September\",\n\t\"October\",\n\t\"November\",\n\t\"December\"\n];\nconst en = {\n\tdigits: [\n\t\t\"0\",\n\t\t\"1\",\n\t\t\"2\",\n\t\t\"3\",\n\t\t\"4\",\n\t\t\"5\",\n\t\t\"6\",\n\t\t\"7\",\n\t\t\"8\",\n\t\t\"9\"\n\t],\n\tweekdays: {\n\t\tlong: [\n\t\t\t\"Sunday\",\n\t\t\t\"Monday\",\n\t\t\t\"Tuesday\",\n\t\t\t\"Wednesday\",\n\t\t\t\"Thursday\",\n\t\t\t\"Friday\",\n\t\t\t\"Saturday\"\n\t\t],\n\t\tshort: [\n\t\t\t\"Sun\",\n\t\t\t\"Mon\",\n\t\t\t\"Tue\",\n\t\t\t\"Wed\",\n\t\t\t\"Thu\",\n\t\t\t\"Fri\",\n\t\t\t\"Sat\"\n\t\t],\n\t\tnarrow: [\n\t\t\t\"Su\",\n\t\t\t\"Mo\",\n\t\t\t\"Tu\",\n\t\t\t\"We\",\n\t\t\t\"Th\",\n\t\t\t\"Fr\",\n\t\t\t\"Sa\"\n\t\t]\n\t},\n\tmonths: {\n\t\tAD: {\n\t\t\tlong: adMonths$1,\n\t\t\tshort: adMonths$1.map((name) => name.slice(0, 3))\n\t\t},\n\t\tBS: {\n\t\t\tlong: bsMonths$1,\n\t\t\tshort: bsMonths$1.map((name) => name.slice(0, 3))\n\t\t}\n\t},\n\tcalendarNames: {\n\t\tAD: \"AD\",\n\t\tBS: \"BS\"\n\t},\n\tlabels: {\n\t\ttoday: \"Today\",\n\t\tclear: \"Clear date\",\n\t\tpreviousMonth: \"Previous month\",\n\t\tnextMonth: \"Next month\",\n\t\tpreviousYear: \"Previous year\",\n\t\tnextYear: \"Next year\",\n\t\tmonth: \"Month\",\n\t\tyear: \"Year\",\n\t\topenCalendar: \"Open calendar\",\n\t\tchooseDate: \"Choose a date\",\n\t\tcalendar: \"Calendar\",\n\t\tpresets: \"Shortcuts\",\n\t\tfiscalYear: \"Fiscal year\",\n\t\ttime: \"Time\",\n\t\thour: \"Hour\",\n\t\tminute: \"Minute\",\n\t\tnow: \"Now\",\n\t\tdone: \"Done\"\n\t},\n\ttime: {\n\t\tam: \"AM\",\n\t\tpm: \"PM\"\n\t},\n\tpresets: {\n\t\ttoday: \"Today\",\n\t\tyesterday: \"Yesterday\",\n\t\ttomorrow: \"Tomorrow\",\n\t\tthisWeek: \"This week\",\n\t\tlastWeek: \"Last week\",\n\t\tlast7Days: \"Last 7 days\",\n\t\tlast30Days: \"Last 30 days\",\n\t\tthisMonth: \"This month\",\n\t\tlastMonth: \"Last month\",\n\t\tthisYear: \"This year\",\n\t\tthisFiscalYear: \"This fiscal year\",\n\t\tlastFiscalYear: \"Last fiscal year\"\n\t},\n\tmessages: {\n\t\tinvalidFormat: {\n\t\t\tAD: \"Enter an AD date as YYYY-MM-DD.\",\n\t\t\tBS: \"Enter a BS date as YYYY-MM-DD.\"\n\t\t},\n\t\toutOfRange: \"Choose a date from {min} to {max}.\",\n\t\tonOrAfter: \"Choose {min} or later.\",\n\t\tonOrBefore: \"Choose {max} or earlier.\",\n\t\tunavailable: \"This date is not available.\",\n\t\trangeTooShort: \"Choose at least {min} days.\",\n\t\trangeTooLong: \"Choose at most {max} days.\",\n\t\ttooManyDates: \"Choose at most {max} dates.\",\n\t\tinvalidTime: \"Enter a time as HH:MM.\"\n\t}\n};\n//#endregion\n//#region src/locale/ne.ts\nconst bsMonths = [\n\t\"बैशाख\",\n\t\"जेठ\",\n\t\"असार\",\n\t\"साउन\",\n\t\"भदौ\",\n\t\"असोज\",\n\t\"कार्तिक\",\n\t\"मङ्सिर\",\n\t\"पुस\",\n\t\"माघ\",\n\t\"फाल्गुण\",\n\t\"चैत\"\n];\nconst adMonths = [\n\t\"जनवरी\",\n\t\"फेब्रुअरी\",\n\t\"मार्च\",\n\t\"अप्रिल\",\n\t\"मे\",\n\t\"जुन\",\n\t\"जुलाई\",\n\t\"अगस्ट\",\n\t\"सेप्टेम्बर\",\n\t\"अक्टोबर\",\n\t\"नोभेम्बर\",\n\t\"डिसेम्बर\"\n];\n//#endregion\n//#region src/locale/registry.ts\nconst locales = /* @__PURE__ */ new Map([[\"en\", en], [\"ne\", {\n\tdigits: [\n\t\t\"०\",\n\t\t\"१\",\n\t\t\"२\",\n\t\t\"३\",\n\t\t\"४\",\n\t\t\"५\",\n\t\t\"६\",\n\t\t\"७\",\n\t\t\"८\",\n\t\t\"९\"\n\t],\n\tweekdays: {\n\t\tlong: [\n\t\t\t\"आइतबार\",\n\t\t\t\"सोमबार\",\n\t\t\t\"मङ्गलबार\",\n\t\t\t\"बुधबार\",\n\t\t\t\"बिहिबार\",\n\t\t\t\"शुक्रबार\",\n\t\t\t\"शनिबार\"\n\t\t],\n\t\tshort: [\n\t\t\t\"आइत\",\n\t\t\t\"सोम\",\n\t\t\t\"मङ्गल\",\n\t\t\t\"बुध\",\n\t\t\t\"बिही\",\n\t\t\t\"शुक्र\",\n\t\t\t\"शनि\"\n\t\t],\n\t\tnarrow: [\n\t\t\t\"आ\",\n\t\t\t\"सो\",\n\t\t\t\"मं\",\n\t\t\t\"बु\",\n\t\t\t\"बि\",\n\t\t\t\"शु\",\n\t\t\t\"श\"\n\t\t]\n\t},\n\tmonths: {\n\t\tAD: {\n\t\t\tlong: adMonths,\n\t\t\tshort: adMonths\n\t\t},\n\t\tBS: {\n\t\t\tlong: bsMonths,\n\t\t\tshort: bsMonths\n\t\t}\n\t},\n\tcalendarNames: {\n\t\tAD: \"ई.सं.\",\n\t\tBS: \"वि.सं.\"\n\t},\n\tlabels: {\n\t\ttoday: \"आज\",\n\t\tclear: \"मिति हटाउनुहोस्\",\n\t\tpreviousMonth: \"अघिल्लो महिना\",\n\t\tnextMonth: \"अर्को महिना\",\n\t\tpreviousYear: \"अघिल्लो वर्ष\",\n\t\tnextYear: \"अर्को वर्ष\",\n\t\tmonth: \"महिना\",\n\t\tyear: \"वर्ष\",\n\t\topenCalendar: \"पात्रो खोल्नुहोस्\",\n\t\tchooseDate: \"मिति छान्नुहोस्\",\n\t\tcalendar: \"पात्रो\",\n\t\tpresets: \"छिटो छनोट\",\n\t\tfiscalYear: \"आर्थिक वर्ष\",\n\t\ttime: \"समय\",\n\t\thour: \"घण्टा\",\n\t\tminute: \"मिनेट\",\n\t\tnow: \"अहिले\",\n\t\tdone: \"भयो\"\n\t},\n\ttime: {\n\t\tam: \"पूर्वाह्न\",\n\t\tpm: \"अपराह्न\"\n\t},\n\tpresets: {\n\t\ttoday: \"आज\",\n\t\tyesterday: \"हिजो\",\n\t\ttomorrow: \"भोलि\",\n\t\tthisWeek: \"यो हप्ता\",\n\t\tlastWeek: \"गत हप्ता\",\n\t\tlast7Days: \"पछिल्लो ७ दिन\",\n\t\tlast30Days: \"पछिल्लो ३० दिन\",\n\t\tthisMonth: \"यो महिना\",\n\t\tlastMonth: \"गत महिना\",\n\t\tthisYear: \"यो वर्ष\",\n\t\tthisFiscalYear: \"यो आर्थिक वर्ष\",\n\t\tlastFiscalYear: \"गत आर्थिक वर्ष\"\n\t},\n\tmessages: {\n\t\tinvalidFormat: {\n\t\t\tAD: \"ई.सं. मिति YYYY-MM-DD ढाँचामा लेख्नुहोस्।\",\n\t\t\tBS: \"वि.सं. मिति YYYY-MM-DD ढाँचामा लेख्नुहोस्।\"\n\t\t},\n\t\toutOfRange: \"{min} देखि {max} सम्मको मिति छान्नुहोस्।\",\n\t\tonOrAfter: \"{min} वा त्यसपछिको मिति छान्नुहोस्।\",\n\t\tonOrBefore: \"{max} वा त्यसअघिको मिति छान्नुहोस्।\",\n\t\tunavailable: \"यो मिति उपलब्ध छैन।\",\n\t\trangeTooShort: \"कम्तीमा {min} दिन छान्नुहोस्।\",\n\t\trangeTooLong: \"बढीमा {max} दिन छान्नुहोस्।\",\n\t\ttooManyDates: \"बढीमा {max} मिति छान्नुहोस्।\",\n\t\tinvalidTime: \"समय HH:MM ढाँचामा लेख्नुहोस्।\"\n\t}\n}]]);\n/** Add or replace a language. Lists must have the right lengths (10 digits, 7 weekdays, 12 months). */\nfunction registerLocale(code, data) {\n\tconst checks = [\n\t\t[\n\t\t\t\"digits\",\n\t\t\tdata.digits,\n\t\t\t10\n\t\t],\n\t\t[\n\t\t\t\"weekdays.long\",\n\t\t\tdata.weekdays.long,\n\t\t\t7\n\t\t],\n\t\t[\n\t\t\t\"weekdays.short\",\n\t\t\tdata.weekdays.short,\n\t\t\t7\n\t\t],\n\t\t[\n\t\t\t\"weekdays.narrow\",\n\t\t\tdata.weekdays.narrow,\n\t\t\t7\n\t\t],\n\t\t[\n\t\t\t\"months.AD.long\",\n\t\t\tdata.months.AD.long,\n\t\t\t12\n\t\t],\n\t\t[\n\t\t\t\"months.AD.short\",\n\t\t\tdata.months.AD.short,\n\t\t\t12\n\t\t],\n\t\t[\n\t\t\t\"months.BS.long\",\n\t\t\tdata.months.BS.long,\n\t\t\t12\n\t\t],\n\t\t[\n\t\t\t\"months.BS.short\",\n\t\t\tdata.months.BS.short,\n\t\t\t12\n\t\t]\n\t];\n\tfor (const [name, list, length] of checks) if (list.length !== length) throw new NepDateRangeError(\"INVALID_ARGUMENT\", `Locale \"${code}\": ${name} must have ${length} entries, not ${list.length}.`);\n\tlocales.set(code, data);\n}\nfunction hasLocale(code) {\n\treturn locales.has(code);\n}\n/** The data for a locale, or English when the locale is not registered. */\nfunction localeData(code) {\n\treturn locales.get(code) ?? en;\n}\n//#endregion\n//#region src/config.ts\nconst DEFAULTS = Object.freeze({\n\ttimeZone: \"Asia/Kathmandu\",\n\tweekStartsOn: 0,\n\tweekendDays: Object.freeze([6]),\n\tdefaultLocale: \"en\"\n});\nlet current = DEFAULTS;\n/** Change one or more settings. Every value is checked before any is applied. */\nfunction configure(changes) {\n\tconst next = {\n\t\t...current,\n\t\t...changes\n\t};\n\tif (!isTimeZone(next.timeZone)) throw new NepDateRangeError(\"INVALID_ARGUMENT\", `\"${next.timeZone}\" is not a time zone.`);\n\tif (!isWeekday(next.weekStartsOn)) throw new NepDateRangeError(\"INVALID_ARGUMENT\", `weekStartsOn must be 0–6, not ${String(next.weekStartsOn)}.`);\n\tif (!next.weekendDays.every(isWeekday) || new Set(next.weekendDays).size !== next.weekendDays.length) throw new NepDateRangeError(\"INVALID_ARGUMENT\", \"weekendDays must be different weekdays, each 0–6.\");\n\tif (!hasLocale(next.defaultLocale)) throw new NepDateRangeError(\"INVALID_ARGUMENT\", `Locale \"${next.defaultLocale}\" is not registered.`);\n\tcurrent = Object.freeze({\n\t\t...next,\n\t\tweekendDays: Object.freeze([...next.weekendDays])\n\t});\n}\nfunction getConfig() {\n\treturn current;\n}\n/** Back to the defaults (Kathmandu, Sunday first, Saturday weekend, English). */\nfunction resetConfig() {\n\tcurrent = DEFAULTS;\n}\nfunction isWeekday(value) {\n\treturn Number.isInteger(value) && value >= 0 && value <= 6;\n}\nfunction isTimeZone(value) {\n\ttry {\n\t\tnew Intl.DateTimeFormat(\"en-US\", { timeZone: value });\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n//#endregion\n//#region src/ad/calendar.ts\n/**\n* The Gregorian (AD) calendar, by arithmetic only: no table, no BS knowledge,\n* no `Date`. Works for any year in ±MAX_AD_YEAR (docs/plan D-001).\n*\n* The day-count algorithms are Howard Hinnant's days_from_civil and\n* civil_from_days (proleptic Gregorian, March-based years).\n*/\n/** AD years must lie within ±this value. */\nconst MAX_AD_YEAR = 999999;\nconst DAYS_BEFORE_EPOCH = 719468;\nconst DAYS_PER_ERA = 146097;\nconst MONTH_DAYS = [\n\t31,\n\t28,\n\t31,\n\t30,\n\t31,\n\t30,\n\t31,\n\t31,\n\t30,\n\t31,\n\t30,\n\t31\n];\nfunction isAdLeapYear(year) {\n\treturn year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\n/** Days in an AD month. The month must be 1–12. */\nfunction adMonthLength(year, month) {\n\treturn month === 2 && isAdLeapYear(year) ? 29 : MONTH_DAYS[month - 1] ?? 0;\n}\nfunction isValidAdDate(year, month, day) {\n\treturn Number.isInteger(year) && Number.isInteger(month) && Number.isInteger(day) && Math.abs(year) <= 999999 && month >= 1 && month <= 12 && day >= 1 && day <= adMonthLength(year, month);\n}\n/** Days since 1970-01-01 of a valid AD date. */\nfunction adToEpoch(year, month, day) {\n\tconst y = month <= 2 ? year - 1 : year;\n\tconst era = Math.floor(y / 400);\n\tconst yearOfEra = y - era * 400;\n\tconst dayOfYear = Math.floor((153 * (month + (month > 2 ? -3 : 9)) + 2) / 5) + day - 1;\n\tconst dayOfEra = yearOfEra * 365 + Math.floor(yearOfEra / 4) - Math.floor(yearOfEra / 100) + dayOfYear;\n\treturn era * DAYS_PER_ERA + dayOfEra - DAYS_BEFORE_EPOCH;\n}\n/** The AD year, month and day of a day count. */\nfunction epochToAd(epoch) {\n\tconst z = epoch + DAYS_BEFORE_EPOCH;\n\tconst era = Math.floor(z / DAYS_PER_ERA);\n\tconst dayOfEra = z - era * DAYS_PER_ERA;\n\tconst yearOfEra = Math.floor((dayOfEra - Math.floor(dayOfEra / 1460) + Math.floor(dayOfEra / 36524) - Math.floor(dayOfEra / 146096)) / 365);\n\tconst dayOfYear = dayOfEra - (365 * yearOfEra + Math.floor(yearOfEra / 4) - Math.floor(yearOfEra / 100));\n\tconst shiftedMonth = Math.floor((5 * dayOfYear + 2) / 153);\n\tconst day = dayOfYear - Math.floor((153 * shiftedMonth + 2) / 5) + 1;\n\tconst month = shiftedMonth < 10 ? shiftedMonth + 3 : shiftedMonth - 9;\n\treturn {\n\t\tyear: yearOfEra + era * 400 + (month <= 2 ? 1 : 0),\n\t\tmonth,\n\t\tday\n\t};\n}\n//#endregion\n//#region src/bs/table.ts\n/**\n* The Bikram Sambat calendar, from its table only. Nothing here reads or\n* produces an AD year: BS dates map to and from day counts (EpochDay) through\n* `epochStart` and the month lengths (docs/plan D-001).\n*/\nlet data = freezeData(BS_DATA);\nlet table = null;\n/** Replace the data the table is built from. Callers validate first (data-api.ts). */\nfunction useBsData(next) {\n\tdata = freezeData(next);\n\ttable = null;\n}\nfunction freezeData(source) {\n\treturn Object.freeze({\n\t\tfirstYear: source.firstYear,\n\t\tepochStart: source.epochStart,\n\t\tverifiedThrough: source.verifiedThrough,\n\t\tyears: Object.freeze(source.years.map((months) => Object.freeze([...months])))\n\t});\n}\nfunction currentBsData() {\n\treturn data;\n}\nfunction buildTable() {\n\tconst count = data.years.length;\n\tconst yearStart = new Float64Array(count + 1);\n\tconst monthOffset = new Uint16Array(count * 12);\n\tlet start = data.epochStart;\n\tfor (let i = 0; i < count; i++) {\n\t\tyearStart[i] = start;\n\t\tconst months = data.years[i] ?? [];\n\t\tlet offset = 0;\n\t\tfor (let m = 0; m < 12; m++) {\n\t\t\tmonthOffset[i * 12 + m] = offset;\n\t\t\toffset += months[m] ?? 0;\n\t\t}\n\t\tstart += offset;\n\t}\n\tyearStart[count] = start;\n\treturn {\n\t\tdata,\n\t\tlastYear: data.firstYear + count - 1,\n\t\tyearStart,\n\t\tmonthOffset\n\t};\n}\nfunction bsTable() {\n\treturn table ?? (table = buildTable());\n}\nfunction bsFirstYear() {\n\treturn data.firstYear;\n}\nfunction bsLastYear() {\n\treturn bsTable().lastYear;\n}\n/** The first and last day counts the table covers. */\nfunction bsEpochRange() {\n\tconst { yearStart } = bsTable();\n\treturn {\n\t\tfirst: yearStart[0] ?? 0,\n\t\tlast: (yearStart[yearStart.length - 1] ?? 0) - 1\n\t};\n}\n/** Days in a BS month. Throws when the year is outside the table or the month is not 1–12. */\nfunction bsMonthLength(year, month) {\n\tconst { lastYear } = bsTable();\n\tif (!Number.isInteger(year) || year < data.firstYear || year > lastYear) throw new NepDateRangeError(\"OUT_OF_TABLE\", `BS year ${String(year)} is outside the supported range (BS ${data.firstYear}–${lastYear}).`);\n\tif (!Number.isInteger(month) || month < 1 || month > 12) throw new NepDateRangeError(\"INVALID_DATE\", `BS month ${String(month)} does not exist.`);\n\treturn data.years[year - data.firstYear]?.[month - 1] ?? 0;\n}\nfunction isValidBsDate(year, month, day) {\n\ttry {\n\t\treturn Number.isInteger(day) && day >= 1 && day <= bsMonthLength(year, month);\n\t} catch {\n\t\treturn false;\n\t}\n}\n/** Day count of a valid BS date. */\nfunction bsToEpoch(year, month, day) {\n\tconst { yearStart, monthOffset } = bsTable();\n\tconst index = year - data.firstYear;\n\treturn (yearStart[index] ?? 0) + (monthOffset[index * 12 + month - 1] ?? 0) + day - 1;\n}\n/** The BS year, month and day of a day count. Throws when it is outside the table. */\nfunction epochToBs(epoch) {\n\tconst { yearStart, monthOffset } = bsTable();\n\tconst { first, last } = bsEpochRange();\n\tif (epoch < first || epoch > last) throw new NepDateRangeError(\"OUT_OF_TABLE\", `Day ${epoch} is outside the BS table (BS ${data.firstYear}–${bsLastYear()}).`);\n\tlet low = 0;\n\tlet high = yearStart.length - 2;\n\twhile (low < high) {\n\t\tconst middle = Math.ceil((low + high) / 2);\n\t\tif ((yearStart[middle] ?? 0) <= epoch) low = middle;\n\t\telse high = middle - 1;\n\t}\n\tconst dayOfYear = epoch - (yearStart[low] ?? 0);\n\tlet month = 11;\n\twhile (month > 0 && (monthOffset[low * 12 + month] ?? 0) > dayOfYear) month--;\n\treturn {\n\t\tyear: data.firstYear + low,\n\t\tmonth: month + 1,\n\t\tday: dayOfYear - (monthOffset[low * 12 + month] ?? 0) + 1\n\t};\n}\n/** Whether a BS year is after the last year checked against a published calendar. */\nfunction isProjectedBsYear(year) {\n\treturn year > data.verifiedThrough;\n}\n//#endregion\n//#region src/bs/data-api.ts\n/** The first BS month of Nepal's fiscal year: Shrawan. */\nconst BS_FISCAL_YEAR_START_MONTH = 4;\n/** Days a verified year may have. Projected years may be off by one (the bundled BS 2096 lists 364). */\nconst VERIFIED_YEAR_DAYS = [365, 366];\nconst PROJECTED_YEAR_DAYS = [\n\t364,\n\t365,\n\t366,\n\t367\n];\n/** Throws NepDateDataError when the table is not usable. Same rules as scripts/gen-data.ts. */\nfunction validateBsData(table) {\n\tif (!Number.isSafeInteger(table.epochStart) || !Number.isInteger(table.firstYear)) throw new NepDateDataError(\"BAD_ANCHOR\", \"firstYear and epochStart must be whole numbers.\");\n\tif (!Number.isInteger(table.verifiedThrough)) throw new NepDateDataError(\"BAD_ANCHOR\", \"verifiedThrough must be a whole number.\");\n\tif (table.years.length === 0) throw new NepDateDataError(\"EMPTY\", \"The BS table has no years.\");\n\ttable.years.forEach((months, index) => {\n\t\tconst year = table.firstYear + index;\n\t\tif (months.length !== 12) throw new NepDateDataError(\"BAD_MONTH_COUNT\", `BS ${year} lists ${months.length} months, not 12.`, year);\n\t\tlet total = 0;\n\t\tmonths.forEach((days, m) => {\n\t\t\tif (!Number.isInteger(days) || days < 29 || days > 32) throw new NepDateDataError(\"BAD_MONTH\", `BS ${year} month ${m + 1} has ${String(days)} days; expected 29–32.`, year, m + 1);\n\t\t\ttotal += days;\n\t\t});\n\t\tconst allowed = year <= table.verifiedThrough ? VERIFIED_YEAR_DAYS : PROJECTED_YEAR_DAYS;\n\t\tif (!allowed.includes(total)) throw new NepDateDataError(\"BAD_YEAR_TOTAL\", `BS ${year} has ${total} days; expected ${allowed.join(\" or \")}.`, year);\n\t});\n}\n/** The BS table in use (frozen). */\nfunction getBsData() {\n\treturn currentBsData();\n}\n/** Replace the whole BS table. Only BS results change; AD functions are unaffected. */\nfunction setBsData(table) {\n\tvalidateBsData(table);\n\tuseBsData(table);\n}\n/**\n* Correct one year's month lengths, or add the year just before the first or\n* just after the last. Years after a corrected year move with it; earlier years\n* never move (adding a year before the first keeps every existing year in place).\n*/\nfunction patchBsYear(year, months) {\n\tconst table = currentBsData();\n\tconst lastYear = table.firstYear + table.years.length - 1;\n\tlet next;\n\tif (year >= table.firstYear && year <= lastYear) next = {\n\t\t...table,\n\t\tyears: table.years.map((row, index) => index === year - table.firstYear ? months : row)\n\t};\n\telse if (year === lastYear + 1) next = {\n\t\t...table,\n\t\tyears: [...table.years, months]\n\t};\n\telse if (year === table.firstYear - 1) {\n\t\tconst length = months.reduce((total, days) => total + days, 0);\n\t\tnext = {\n\t\t\t...table,\n\t\t\tfirstYear: year,\n\t\t\tepochStart: table.epochStart - length,\n\t\t\tyears: [months, ...table.years]\n\t\t};\n\t} else throw new NepDateRangeError(\"OUT_OF_TABLE\", `BS ${String(year)} is not in the table and does not extend it (BS ${table.firstYear}–${lastYear}).`);\n\tsetBsData(next);\n}\n/** Back to the table bundled with the package. */\nfunction resetBsData() {\n\tuseBsData(BS_DATA);\n}\n//#endregion\n//#region src/create.ts\n/** An AD date. Any year within ±999,999 is allowed; only conversion to BS is limited. */\nfunction adDate(year, month, day) {\n\tif (!isValidAdDate(year, month, day)) throw new NepDateRangeError(Number.isInteger(year) && Number.isInteger(month) && Number.isInteger(day) ? \"INVALID_DATE\" : \"INVALID_ARGUMENT\", Math.abs(year) > 999999 ? `AD year ${String(year)} is outside ±${MAX_AD_YEAR}.` : `AD ${String(year)}-${String(month)}-${String(day)} is not a valid date.`);\n\treturn Object.freeze({\n\t\tcalendar: \"AD\",\n\t\tyear,\n\t\tmonth,\n\t\tday\n\t});\n}\n/** A BS date. The year must be in the BS table. */\nfunction bsDate(year, month, day) {\n\tconst length = bsMonthLength(year, month);\n\tif (!Number.isInteger(day) || day < 1 || day > length) throw new NepDateRangeError(Number.isInteger(day) ? \"INVALID_DATE\" : \"INVALID_ARGUMENT\", `BS ${year}-${month} has ${length} days, not ${String(day)}.`);\n\treturn Object.freeze({\n\t\tcalendar: \"BS\",\n\t\tyear,\n\t\tmonth,\n\t\tday\n\t});\n}\nfunction createDate(calendar, year, month, day) {\n\treturn calendar === \"AD\" ? adDate(year, month, day) : bsDate(year, month, day);\n}\nfunction isValidDate(calendar, year, month, day) {\n\treturn calendar === \"AD\" ? isValidAdDate(year, month, day) : isValidBsDate(year, month, day);\n}\n/** Days in a month of either calendar. */\nfunction daysInMonth(calendar, year, month) {\n\tif (calendar === \"BS\") return bsMonthLength(year, month);\n\tif (!isValidAdDate(year, month, 1)) throw new NepDateRangeError(\"INVALID_DATE\", `AD ${String(year)}-${String(month)} is not a month.`);\n\treturn adMonthLength(year, month);\n}\n/** True for a valid, frozen-or-not AD date object (e.g. from JSON). */\nfunction isAdDate(value) {\n\treturn isDateLike(value, \"AD\") && isValidAdDate(value.year, value.month, value.day);\n}\n/** True for a valid BS date object (e.g. from JSON). */\nfunction isBsDate(value) {\n\treturn isDateLike(value, \"BS\") && isValidBsDate(value.year, value.month, value.day);\n}\nfunction isCalendarDate(value) {\n\treturn isAdDate(value) || isBsDate(value);\n}\nfunction isDateLike(value, calendar) {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst record = value;\n\treturn record[\"calendar\"] === calendar && typeof record[\"year\"] === \"number\" && typeof record[\"month\"] === \"number\" && typeof record[\"day\"] === \"number\";\n}\n//#endregion\n//#region src/convert.ts\n/**\n* The only place the AD and BS calendars meet, and only through EpochDay\n* (docs/plan D-001). Nothing here looks up a year number across calendars.\n*/\n/** The day count of a date in either calendar. */\nfunction toEpoch(date) {\n\treturn toEpochDay(date.calendar === \"AD\" ? adToEpoch(date.year, date.month, date.day) : bsToEpoch(date.year, date.month, date.day));\n}\n/** The date of a day count in a calendar. BS throws OUT_OF_TABLE outside the table. */\nfunction fromEpoch(epoch, calendar) {\n\tif (calendar === \"AD\") {\n\t\tconst { year, month, day } = epochToAd(epoch);\n\t\treturn adDate(year, month, day);\n\t}\n\tassertConvertible(epoch);\n\tconst { year, month, day } = epochToBs(epoch);\n\treturn bsDate(year, month, day);\n}\nfunction adToBs(date) {\n\treturn fromEpoch(toEpoch(date), \"BS\");\n}\nfunction bsToAd(date) {\n\treturn fromEpoch(toEpoch(date), \"AD\");\n}\n/** The same day in the given calendar (the date itself when it is already in it). */\nfunction toCalendar(date, calendar) {\n\tif (date.calendar === calendar) return date;\n\treturn fromEpoch(toEpoch(date), calendar);\n}\n/** The first day that can be converted, in either calendar (the start of the BS table). */\nfunction minDate(calendar) {\n\treturn fromEpoch(toEpochDay(bsEpochRange().first), calendar);\n}\n/** The last day that can be converted, in either calendar (the end of the BS table). */\nfunction maxDate(calendar) {\n\treturn fromEpoch(toEpochDay(bsEpochRange().last), calendar);\n}\n/** Whether a date can be converted to the other calendar. */\nfunction isConvertible(date) {\n\tconst epoch = toEpoch(date);\n\tconst { first, last } = bsEpochRange();\n\treturn epoch >= first && epoch <= last;\n}\n/** The AD day as \"YYYY-MM-DD\", the form to store and send (docs/plan D-003). */\nfunction toIsoDate(date) {\n\tconst { year, month, day } = toCalendar(date, \"AD\");\n\tif (year < 0 || year > 9999) throw new NepDateRangeError(\"INVALID_ARGUMENT\", `AD year ${year} cannot be written as YYYY-MM-DD.`);\n\treturn `${pad(year, 4)}-${pad(month, 2)}-${pad(day, 2)}`;\n}\n/**\n* An AD date from \"YYYY-MM-DD\", or from a longer ISO timestamp by its date part\n* (\"2026-10-18T09:30:00Z\" → 2026-10-18). Null for anything else.\n*/\nfunction fromIsoDate(value) {\n\tconst match = /^(\\d{4})-(\\d{2})-(\\d{2})(?:$|[T ])/.exec(value ?? \"\");\n\tif (!match) return null;\n\ttry {\n\t\treturn adDate(Number(match[1]), Number(match[2]), Number(match[3]));\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** The AD calendar day an instant falls on in a time zone (Nepal by default). */\nfunction fromJsDate(instant, timeZone = getConfig().timeZone) {\n\tif (Number.isNaN(instant.getTime())) throw new NepDateRangeError(\"INVALID_ARGUMENT\", \"The Date is invalid.\");\n\tlet parts;\n\ttry {\n\t\tparts = new Intl.DateTimeFormat(\"en-US\", {\n\t\t\ttimeZone,\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"numeric\",\n\t\t\tday: \"numeric\",\n\t\t\tera: \"short\"\n\t\t}).formatToParts(instant);\n\t} catch {\n\t\tthrow new NepDateRangeError(\"INVALID_ARGUMENT\", `\"${timeZone}\" is not a time zone.`);\n\t}\n\tconst part = (type) => parts.find((item) => item.type === type)?.value ?? \"\";\n\tconst year = Number(part(\"year\"));\n\treturn adDate(part(\"era\") === \"BC\" ? 1 - year : year, Number(part(\"month\")), Number(part(\"day\")));\n}\n/**\n* The calendar day and time of an ISO timestamp *with a zone* (\"…Z\",\n* \"…+05:45\"), read in `timeZone` (Nepal by default). Null for anything else,\n* including plain dates, which have no instant.\n*/\nfunction fromIsoTimestamp(value, timeZone = getConfig().timeZone) {\n\tif (!value || !/T.*(?:Z|[+-]\\d{2}:?\\d{2})$/.test(value)) return null;\n\tconst instant = new Date(value);\n\tif (Number.isNaN(instant.getTime())) return null;\n\tconst time = new Intl.DateTimeFormat(\"en-GB\", {\n\t\ttimeZone,\n\t\thour: \"2-digit\",\n\t\tminute: \"2-digit\",\n\t\thourCycle: \"h23\"\n\t}).format(instant);\n\treturn {\n\t\tdate: fromJsDate(instant, timeZone),\n\t\ttime\n\t};\n}\nfunction assertConvertible(epoch) {\n\tconst { first, last } = bsEpochRange();\n\tif (epoch < first || epoch > last) {\n\t\tconst { year, month, day } = epochToAd(epoch);\n\t\tconst from = epochToAd(first);\n\t\tconst to = epochToAd(last);\n\t\tthrow new NepDateRangeError(\"OUT_OF_TABLE\", `AD ${isoParts(year, month, day)} is outside the BS table (AD ${isoParts(from.year, from.month, from.day)} to ${isoParts(to.year, to.month, to.day)}).`);\n\t}\n}\nfunction isoParts(year, month, day) {\n\treturn `${year}-${pad(month, 2)}-${pad(day, 2)}`;\n}\nfunction pad(value, length) {\n\treturn String(value).padStart(length, \"0\");\n}\n//#endregion\n//#region src/projected.ts\n/** Whether the date's BS year is after the last year checked against a published calendar. */\nfunction isProjected(date) {\n\treturn isProjectedBsYear(toCalendar(date, \"BS\").year);\n}\n//#endregion\n//#region src/clock.ts\nfunction today(calendar = \"AD\", timeZone = getConfig().timeZone) {\n\treturn toCalendar(fromJsDate(/* @__PURE__ */ new Date(), timeZone), calendar);\n}\n/** The current calendar day and time (HH:MM) in `timeZone` (Nepal by default). */\nfunction now(timeZone = getConfig().timeZone) {\n\tconst current = fromIsoTimestamp((/* @__PURE__ */ new Date()).toISOString(), timeZone);\n\tconst [hour = 0, minute = 0] = (current?.time ?? \"00:00\").split(\":\").map(Number);\n\treturn {\n\t\tdate: current?.date ?? fromJsDate(/* @__PURE__ */ new Date(), timeZone),\n\t\ttime: Object.freeze({\n\t\t\thour,\n\t\t\tminute\n\t\t})\n\t};\n}\n//#endregion\n//#region src/arithmetic.ts\nfunction addDays(date, days) {\n\tassertInteger(days, \"days\");\n\treturn fromEpoch(toEpochDay(toEpoch(date) + days), date.calendar);\n}\n/** Move by whole months in the date's own calendar; the day is capped to the new month's length. */\nfunction addMonths(date, months) {\n\tassertInteger(months, \"months\");\n\tconst index = date.year * 12 + (date.month - 1) + months;\n\tconst year = Math.floor(index / 12);\n\tconst month = index - year * 12 + 1;\n\tconst day = Math.min(date.day, daysInMonth(date.calendar, year, month));\n\treturn createDate(date.calendar, year, month, day);\n}\n/** Move by whole years in the date's own calendar; the day is capped (29 Feb, short BS months). */\nfunction addYears(date, years) {\n\tassertInteger(years, \"years\");\n\treturn addMonths(date, years * 12);\n}\nfunction startOfMonth(date) {\n\treturn createDate(date.calendar, date.year, date.month, 1);\n}\nfunction endOfMonth(date) {\n\treturn createDate(date.calendar, date.year, date.month, daysInMonth(date.calendar, date.year, date.month));\n}\nfunction startOfYear(date) {\n\treturn createDate(date.calendar, date.year, 1, 1);\n}\nfunction endOfYear(date) {\n\treturn createDate(date.calendar, date.year, 12, daysInMonth(date.calendar, date.year, 12));\n}\nfunction startOfWeek(date, weekStartsOn = getConfig().weekStartsOn) {\n\tassertWeekday(weekStartsOn);\n\treturn addDays(date, -((weekdayOf(toEpoch(date)) - weekStartsOn + 7) % 7));\n}\nfunction endOfWeek(date, weekStartsOn = getConfig().weekStartsOn) {\n\treturn addDays(startOfWeek(date, weekStartsOn), 6);\n}\n/** Whole days from `b` to `a` (positive when `a` is later). The calendars may differ. */\nfunction differenceInDays(a, b) {\n\treturn toEpoch(a) - toEpoch(b);\n}\n/** Every day from `start` to `end` inclusive, in `start`'s calendar. Nothing when end < start. */\nfunction* eachDayOfInterval(start, end) {\n\tconst last = toEpoch(end);\n\tfor (let epoch = toEpoch(start); epoch <= last; epoch++) yield fromEpoch(toEpochDay(epoch), start.calendar);\n}\n/** Every day of the month the date is in. */\nfunction eachDayOfMonth(date) {\n\treturn [...eachDayOfInterval(startOfMonth(date), endOfMonth(date))];\n}\n/** The date converted to `target`'s calendar; a small helper used by compare and fiscal code. */\nfunction inCalendarOf(target, date) {\n\treturn toCalendar(date, target.calendar);\n}\nfunction assertInteger(value, name) {\n\tif (!Number.isSafeInteger(value)) throw new NepDateRangeError(\"INVALID_ARGUMENT\", `${name} must be a whole number, not ${String(value)}.`);\n}\nfunction assertWeekday(value) {\n\tif (!isWeekday(value)) throw new NepDateRangeError(\"INVALID_ARGUMENT\", `${String(value)} is not a weekday (0–6).`);\n}\n//#endregion\n//#region src/compare.ts\n/** -1, 0 or 1. Dates in different calendars compare by the day they fall on. */\nfunction compareDates(a, b) {\n\treturn Math.sign(toEpoch(a) - toEpoch(b));\n}\n/** Same day, in any calendars. False when either is missing. */\nfunction isSameDay(a, b) {\n\treturn a != null && b != null && toEpoch(a) === toEpoch(b);\n}\n/** Whether `b` falls in the same month as `a`, judged in `a`'s calendar. */\nfunction isSameMonth(a, b) {\n\tconst other = inCalendarOf(a, b);\n\treturn other.year === a.year && other.month === a.month;\n}\n/** Whether `b` falls in the same year as `a`, judged in `a`'s calendar. */\nfunction isSameYear(a, b) {\n\treturn inCalendarOf(a, b).year === a.year;\n}\nfunction isBefore(a, b) {\n\treturn toEpoch(a) < toEpoch(b);\n}\nfunction isAfter(a, b) {\n\treturn toEpoch(a) > toEpoch(b);\n}\n/** On or after `min` and on or before `max`; a missing bound is open. */\nfunction isWithin(date, min, max) {\n\tconst day = toEpoch(date);\n\treturn (min == null || day >= toEpoch(min)) && (max == null || day <= toEpoch(max));\n}\n/** The date, or the nearest bound when it is outside, in the date's calendar. */\nfunction clampDate(date, min, max) {\n\tif (min != null && isBefore(date, min)) return toCalendar(min, date.calendar);\n\tif (max != null && isAfter(date, max)) return toCalendar(max, date.calendar);\n\treturn date;\n}\n/** 0 = Sunday … 6 = Saturday. The same in both calendars. */\nfunction dayOfWeek(date) {\n\treturn weekdayOf(toEpoch(date));\n}\n/** Saturday by default (Nepal); set `weekendDays` in configure() or pass them here. */\nfunction isWeekend(date, weekendDays = getConfig().weekendDays) {\n\treturn weekendDays.includes(dayOfWeek(date));\n}\n//#endregion\n//#region src/locale/index.ts\nconst DEVANAGARI = [\n\t\"०\",\n\t\"१\",\n\t\"२\",\n\t\"३\",\n\t\"४\",\n\t\"५\",\n\t\"६\",\n\t\"७\",\n\t\"८\",\n\t\"९\"\n];\n/** The data for a locale (the configured default when omitted; English when unknown). */\nfunction getLocale(locale = getConfig().defaultLocale) {\n\treturn localeData(locale);\n}\nfunction monthNames(calendar, locale, width = \"long\") {\n\treturn getLocale(locale).months[calendar][width];\n}\nfunction weekdayNames(locale, width = \"long\") {\n\treturn getLocale(locale).weekdays[width];\n}\n/** Replace Devanagari digits with ASCII digits. */\nfunction toAsciiDigits(value) {\n\treturn value.replace(/[०-९]/g, (digit) => String(DEVANAGARI.indexOf(digit)));\n}\n/** Replace ASCII digits with Devanagari digits. */\nfunction toDevanagariDigits(value) {\n\treturn String(value).replace(/[0-9]/g, (digit) => DEVANAGARI[Number(digit)] ?? digit);\n}\n/** Write a number (or digit string) with the locale's digits. */\nfunction formatNumber(value, locale) {\n\tconst { digits } = getLocale(locale);\n\treturn String(value).replace(/[0-9]/g, (digit) => digits[Number(digit)] ?? digit);\n}\n/** Fill {name} placeholders in a locale message. */\nfunction formatMessage(template, values) {\n\treturn template.replace(/\\{(\\w+)\\}/g, (whole, name) => values[name] ?? whole);\n}\n//#endregion\n//#region src/format.ts\n/** Named formats. `cbms` is the dotted form Nepal's tax system uses. */\nconst DATE_FORMATS = Object.freeze({\n\tiso: \"Y-m-d\",\n\tcbms: \"Y.m.d\",\n\tshort: \"j M Y\",\n\tlong: \"j F Y\",\n\tfull: \"l, j F Y\"\n});\n/**\n* Format a date in its own calendar. Tokens: Y 2083, y 83, m 06, n 6, d 09,\n* j 9, F month name, M short month name, l weekday, D short weekday. Put a\n* backslash before a letter to print it as is. Digits follow the locale.\n*\n* formatDate(bsDate(2082, 4, 1), 'full') → \"Thursday, 1 Shrawan 2082\"\n* formatDate(bsDate(2082, 4, 1), 'long', 'ne') → \"१ साउन २०८२\"\n*/\nfunction formatDate(date, pattern = \"iso\", locale) {\n\tconst tokens = pattern in DATE_FORMATS ? DATE_FORMATS[pattern] : pattern;\n\tconst data = getLocale(locale);\n\tconst months = data.months[date.calendar];\n\tconst digits = (value) => formatNumber(value, locale);\n\tconst pad = (value) => String(value).padStart(2, \"0\");\n\tlet output = \"\";\n\tfor (let index = 0; index < tokens.length; index++) {\n\t\tconst token = tokens.charAt(index);\n\t\tswitch (token) {\n\t\t\tcase \"\\\\\":\n\t\t\t\tindex++;\n\t\t\t\toutput += tokens.charAt(index);\n\t\t\t\tbreak;\n\t\t\tcase \"Y\":\n\t\t\t\toutput += digits(date.year);\n\t\t\t\tbreak;\n\t\t\tcase \"y\":\n\t\t\t\toutput += digits(pad((date.year % 100 + 100) % 100));\n\t\t\t\tbreak;\n\t\t\tcase \"m\":\n\t\t\t\toutput += digits(pad(date.month));\n\t\t\t\tbreak;\n\t\t\tcase \"n\":\n\t\t\t\toutput += digits(date.month);\n\t\t\t\tbreak;\n\t\t\tcase \"d\":\n\t\t\t\toutput += digits(pad(date.day));\n\t\t\t\tbreak;\n\t\t\tcase \"j\":\n\t\t\t\toutput += digits(date.day);\n\t\t\t\tbreak;\n\t\t\tcase \"F\":\n\t\t\t\toutput += months.long[date.month - 1] ?? \"\";\n\t\t\t\tbreak;\n\t\t\tcase \"M\":\n\t\t\t\toutput += months.short[date.month - 1] ?? \"\";\n\t\t\t\tbreak;\n\t\t\tcase \"l\":\n\t\t\t\toutput += data.weekdays.long[dayOfWeek(date)] ?? \"\";\n\t\t\t\tbreak;\n\t\t\tcase \"D\":\n\t\t\t\toutput += data.weekdays.short[dayOfWeek(date)] ?? \"\";\n\t\t\t\tbreak;\n\t\t\tdefault: output += token;\n\t\t}\n\t}\n\treturn output;\n}\n//#endregion\n//#region src/fiscal.ts\n/** The fiscal year a date falls in: 1 Shrawan to the end of Asar. */\nfunction fiscalYear(date) {\n\tconst bs = toCalendar(date, \"BS\");\n\treturn fiscalYearRange(bs.month >= 4 ? bs.year : bs.year - 1);\n}\n/** The fiscal year that starts in BS `startYear` (2083 → FY 2083/84). */\nfunction fiscalYearRange(startYear) {\n\tconst endYear = startYear + 1;\n\tconst lastMonth = 3;\n\treturn Object.freeze({\n\t\tstartYear,\n\t\tlabel: `${startYear}/${String(endYear % 100).padStart(2, \"0\")}`,\n\t\tfirstDay: bsDate(startYear, 4, 1),\n\t\tlastDay: bsDate(endYear, lastMonth, daysInMonth(\"BS\", endYear, lastMonth))\n\t});\n}\n/**\n* label \"2083/84\" · full \"2083/2084\" · cbms \"2083.084\" (the form Nepal's tax\n* system uses). Digits follow the locale.\n*/\nfunction formatFiscalYear(fy, style = \"label\", locale) {\n\tconst end = fy.startYear + 1;\n\treturn formatNumber(style === \"full\" ? `${fy.startYear}/${end}` : style === \"cbms\" ? `${fy.startYear}.${String(end % 1e3).padStart(3, \"0\")}` : fy.label, locale);\n}\nfunction isInFiscalYear(date, fy) {\n\treturn compareDates(date, fy.firstDay) >= 0 && compareDates(date, fy.lastDay) <= 0;\n}\n//#endregion\n//#region src/parse.ts\nconst YEAR_FIRST = /^(\\d{4})[-./](\\d{1,2})[-./](\\d{1,2})$/;\nconst COMPACT = /^(\\d{4})(\\d{2})(\\d{2})$/;\n/**\n* A date written year first (\"2083-06-24\", \"2083/6/24\", \"2083.06.24\", or\n* compact \"20830624\") in ASCII or Devanagari digits, in the calendar the caller names. Other orders are\n* rejected, not guessed. Returns null when the text is not a valid date.\n*/\nfunction parseDate(text, calendar) {\n\ttry {\n\t\treturn parseDateStrict(text ?? \"\", calendar);\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** Like parseDate, but throws a NepDateRangeError that says what is wrong. */\nfunction parseDateStrict(text, calendar) {\n\tconst ascii = toAsciiDigits(text).trim();\n\tconst match = YEAR_FIRST.exec(ascii) ?? COMPACT.exec(ascii);\n\tif (!match) throw new NepDateRangeError(\"INVALID_ARGUMENT\", `\"${text}\" is not a date written as YYYY-MM-DD.`);\n\treturn createDate(calendar, Number(match[1]), Number(match[2]), Number(match[3]));\n}\n/**\n* A fiscal year from its label: \"2083/84\", \"2083/2084\", \"2083-84\" or the\n* tax form \"2083.084\", in ASCII or Devanagari digits. Null when not valid.\n*/\nfunction parseFiscalYear(text) {\n\tconst match = /^(\\d{4})\\s*[-/.]\\s*(\\d{2,4})$/.exec(toAsciiDigits(text ?? \"\").trim());\n\tif (!match) return null;\n\tconst start = Number(match[1]);\n\tconst end = match[2] ?? \"\";\n\tconst next = start + 1;\n\tif (end !== (end.length === 4 ? String(next) : String(next % 10 ** end.length).padStart(end.length, \"0\"))) return null;\n\ttry {\n\t\treturn fiscalYearRange(start);\n\t} catch {\n\t\treturn null;\n\t}\n}\n//#endregion\n//#region src/time.ts\nfunction timeOfDay(hour, minute = 0) {\n\tif (!isValidTime(hour, minute)) throw new NepDateRangeError(\"INVALID_ARGUMENT\", `${String(hour)}:${String(minute)} is not a time of day.`);\n\treturn Object.freeze({\n\t\thour,\n\t\tminute\n\t});\n}\nfunction isValidTime(hour, minute) {\n\treturn Number.isInteger(hour) && Number.isInteger(minute) && hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59;\n}\n/** -1, 0 or 1. */\nfunction compareTimes(a, b) {\n\treturn Math.sign(a.hour * 60 + a.minute - (b.hour * 60 + b.minute));\n}\n/**\n* \"14:30\", \"2:30 pm\", \"2 PM\", \"1430\", \"१४:३०\", \"२:३० अपराह्न\" → TimeOfDay.\n* Null when the text is not a time.\n*/\nfunction parseTime(text) {\n\tlet value = toAsciiDigits(text ?? \"\").trim().toLowerCase();\n\tlet meridiem = null;\n\tfor (const code of [\"en\", \"ne\"]) {\n\t\tconst { am, pm } = getLocale(code).time;\n\t\tfor (const [word, kind] of [\n\t\t\t[am.toLowerCase(), \"am\"],\n\t\t\t[pm.toLowerCase(), \"pm\"],\n\t\t\t[am.toLowerCase().replace(/(.)/g, \"$1.\"), \"am\"],\n\t\t\t[pm.toLowerCase().replace(/(.)/g, \"$1.\"), \"pm\"]\n\t\t]) if (value.endsWith(word)) {\n\t\t\tmeridiem = kind;\n\t\t\tvalue = value.slice(0, -word.length).trim();\n\t\t\tbreak;\n\t\t}\n\t\tif (meridiem) break;\n\t}\n\tconst match = /^(\\d{1,2})(?:[:.](\\d{2}))?$/.exec(value) ?? /^(\\d{2})(\\d{2})$/.exec(value);\n\tif (!match) return null;\n\tlet hour = Number(match[1]);\n\tconst minute = Number(match[2] ?? 0);\n\tif (meridiem) {\n\t\tif (hour < 1 || hour > 12) return null;\n\t\thour = hour % 12 + (meridiem === \"pm\" ? 12 : 0);\n\t}\n\treturn isValidTime(hour, minute) ? timeOfDay(hour, minute) : null;\n}\n/** \"14:30\" (24-hour) or \"2:30 PM\" (hour12), in the locale's digits and words. */\nfunction formatTime(time, options = {}) {\n\tconst minute = String(time.minute).padStart(2, \"0\");\n\tif (!options.hour12) return formatNumber(`${String(time.hour).padStart(2, \"0\")}:${minute}`, options.locale);\n\tconst { am, pm } = getLocale(options.locale).time;\n\treturn `${formatNumber(`${time.hour % 12 === 0 ? 12 : time.hour % 12}:${minute}`, options.locale)} ${time.hour < 12 ? am : pm}`;\n}\n/**\n* The instant of a calendar day and time in a zone (Nepal by default), as an\n* ISO timestamp with that zone's offset: \"2026-10-18T14:30:00+05:45\".\n*/\nfunction toIsoDateTime(date, time, timeZone = getConfig().timeZone) {\n\tconst { year, month, day } = toCalendar(date, \"AD\");\n\tif (year < 0 || year > 9999) throw new NepDateRangeError(\"INVALID_ARGUMENT\", `AD year ${year} cannot be written in ISO form.`);\n\tconst wall = Date.UTC(year, month - 1, day, time.hour, time.minute);\n\tconst offset = offsetMinutes(wall - offsetMinutes(wall, timeZone) * 6e4, timeZone);\n\tconst sign = offset < 0 ? \"-\" : \"+\";\n\tconst abs = Math.abs(offset);\n\tconst pad = (value, length = 2) => String(value).padStart(length, \"0\");\n\treturn `${pad(year, 4)}-${pad(month)}-${pad(day)}T${pad(time.hour)}:${pad(time.minute)}:00${sign}${pad(Math.floor(abs / 60))}:${pad(abs % 60)}`;\n}\n/**\n* The day and time of an ISO timestamp in a zone (Nepal by default). A value\n* without an offset (\"2026-10-18T14:30\", as from <input type=\"datetime-local\">)\n* is read as a wall time already in that zone. Null for anything else.\n*/\nfunction fromIsoDateTime(value, timeZone = getConfig().timeZone) {\n\tconst zoned = fromIsoTimestamp(value, timeZone);\n\tif (zoned) {\n\t\tconst time = parseTime(zoned.time);\n\t\treturn time ? {\n\t\t\tdate: zoned.date,\n\t\t\ttime\n\t\t} : null;\n\t}\n\tconst local = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})(?::\\d{2}(?:\\.\\d+)?)?$/.exec(value ?? \"\");\n\tif (!local) return null;\n\ttry {\n\t\treturn {\n\t\t\tdate: adDate(Number(local[1]), Number(local[2]), Number(local[3])),\n\t\t\ttime: timeOfDay(Number(local[4]), Number(local[5]))\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** Minutes the zone is ahead of UTC at an instant. */\nfunction offsetMinutes(instant, timeZone) {\n\tlet parts;\n\ttry {\n\t\tparts = new Intl.DateTimeFormat(\"en-US\", {\n\t\t\ttimeZone,\n\t\t\thourCycle: \"h23\",\n\t\t\tyear: \"numeric\",\n\t\t\tmonth: \"numeric\",\n\t\t\tday: \"numeric\",\n\t\t\thour: \"numeric\",\n\t\t\tminute: \"numeric\"\n\t\t}).formatToParts(new Date(instant));\n\t} catch {\n\t\tthrow new NepDateRangeError(\"INVALID_ARGUMENT\", `\"${timeZone}\" is not a time zone.`);\n\t}\n\tconst part = (type) => Number(parts.find((item) => item.type === type)?.value ?? 0);\n\tconst wall = Date.UTC(part(\"year\"), part(\"month\") - 1, part(\"day\"), part(\"hour\"), part(\"minute\"));\n\treturn Math.round((wall - Math.floor(instant / 6e4) * 6e4) / 6e4);\n}\n//#endregion\nexport { BS_FISCAL_YEAR_START_MONTH, DATE_FORMATS, MAX_AD_YEAR, NepDateDataError, NepDateRangeError, adDate, adToBs, addDays, addMonths, addYears, bsDate, bsFirstYear, bsLastYear, bsToAd, clampDate, compareDates, compareTimes, configure, createDate, dayOfWeek, daysInMonth, differenceInDays, eachDayOfInterval, eachDayOfMonth, endOfMonth, endOfWeek, endOfYear, fiscalYear, fiscalYearRange, formatDate, formatFiscalYear, formatMessage, formatNumber, formatTime, fromEpoch, fromIsoDate, fromIsoDateTime, fromIsoTimestamp, fromJsDate, getBsData, getConfig, getLocale, hasLocale, isAdDate, isAdLeapYear, isAfter, isBefore, isBsDate, isCalendarDate, isConvertible, isInFiscalYear, isProjected, isSameDay, isSameMonth, isSameYear, isValidDate, isValidTime, isWeekend, isWithin, maxDate, minDate, monthNames, now, parseDate, parseDateStrict, parseFiscalYear, parseTime, patchBsYear, registerLocale, resetBsData, resetConfig, setBsData, startOfMonth, startOfWeek, startOfYear, timeOfDay, toAsciiDigits, toCalendar, toDevanagariDigits, toEpoch, toEpochDay, toIsoDate, toIsoDateTime, today, validateBsData, weekdayNames, weekdayOf };\n\n//# sourceMappingURL=index.js.map","import { addDays, addMonths, addYears, clampDate, compareDates, createDate, dayOfWeek, daysInMonth, endOfMonth, endOfWeek, endOfYear, fiscalYear, fiscalYearRange, formatDate, formatFiscalYear, formatNumber, fromEpoch, getConfig, getLocale, isAfter, isBefore, isSameDay, isSameMonth, isValidDate, isWithin, maxDate, minDate, monthNames, startOfMonth, startOfWeek, startOfYear, toCalendar, toEpoch, toEpochDay, today } from \"@nepdatejs/core\";\n//#region src/focus.ts\nconst FORWARD = /* @__PURE__ */ new Set([\n\t\"ArrowRight\",\n\t\"ArrowDown\",\n\t\"End\",\n\t\"PageDown\"\n]);\n/**\n* The day a key moves focus to. Never throws: a move past min/max or the end\n* of the BS table lands on the nearest allowed day (docs/plan CAL-009, CAL-010).\n*/\nfunction nextFocus(focused, key, limits, options) {\n\tconst months = options.shift ? 12 : 1;\n\tlet target;\n\ttry {\n\t\tswitch (key) {\n\t\t\tcase \"ArrowLeft\":\n\t\t\t\ttarget = addDays(focused, -1);\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowRight\":\n\t\t\t\ttarget = addDays(focused, 1);\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowUp\":\n\t\t\t\ttarget = addDays(focused, -7);\n\t\t\t\tbreak;\n\t\t\tcase \"ArrowDown\":\n\t\t\t\ttarget = addDays(focused, 7);\n\t\t\t\tbreak;\n\t\t\tcase \"Home\":\n\t\t\t\ttarget = startOfWeek(focused, options.weekStartsOn);\n\t\t\t\tbreak;\n\t\t\tcase \"End\":\n\t\t\t\ttarget = endOfWeek(focused, options.weekStartsOn);\n\t\t\t\tbreak;\n\t\t\tcase \"PageUp\":\n\t\t\t\ttarget = addMonths(focused, -months);\n\t\t\t\tbreak;\n\t\t\tcase \"PageDown\": target = addMonths(focused, months);\n\t\t}\n\t} catch {\n\t\ttarget = FORWARD.has(key) ? limits.highDay : limits.lowDay;\n\t}\n\treturn clampDate(target, limits.lowDay, limits.highDay);\n}\n//#endregion\n//#region src/limits.ts\n/**\n* The intersection of min/max with the range core can convert. Only whole\n* months are offered: the AD side of the BS table starts and ends mid-month\n* (docs/plan CAL-013).\n*/\nfunction computeLimits(calendar, min, max) {\n\tconst tableLow = firstWholeMonthDay(calendar);\n\tconst tableHigh = lastWholeMonthDay(calendar);\n\tlet empty = false;\n\tlet lowDay = tableLow;\n\tif (min != null && isAfter(min, tableLow)) {\n\t\tif (isAfter(min, tableHigh)) empty = true;\n\t\telse lowDay = toCalendar(min, calendar);\n\t}\n\tlet highDay = tableHigh;\n\tif (max != null && isAfter(tableHigh, max)) {\n\t\tif (isAfter(tableLow, max)) empty = true;\n\t\telse highDay = toCalendar(max, calendar);\n\t}\n\tif (empty || isAfter(lowDay, highDay)) {\n\t\tempty = true;\n\t\thighDay = lowDay;\n\t}\n\treturn {\n\t\tcalendar,\n\t\tlowDay,\n\t\thighDay,\n\t\tlowMonth: startOfMonth(lowDay),\n\t\thighMonth: startOfMonth(highDay),\n\t\tempty\n\t};\n}\n/** Whether a day may be selected under these limits. */\nfunction isInLimits(date, limits) {\n\treturn !limits.empty && isWithin(date, limits.lowDay, limits.highDay);\n}\nfunction firstWholeMonthDay(calendar) {\n\tconst first = minDate(calendar);\n\treturn first.day === 1 ? first : startOfMonth(addMonths(first, 1));\n}\nfunction lastWholeMonthDay(calendar) {\n\tconst last = maxDate(calendar);\n\treturn last.day === daysInMonth(calendar, last.year, last.month) ? last : addDays(startOfMonth(last), -1);\n}\n//#endregion\n//#region src/grid.ts\nconst NO_EVENTS = Object.freeze([]);\n/** The rows of a month view. Pure: the same input always gives the same cells. */\nfunction buildMonthGrid(input) {\n\tconst { calendar, month, locale } = input;\n\tconst other = calendar === \"BS\" ? \"AD\" : \"BS\";\n\tconst first = startOfMonth(month);\n\tconst firstEpoch = toEpoch(first);\n\tconst length = daysInMonth(calendar, month.year, month.month);\n\tconst lead = (dayOfWeek(first) - input.weekStartsOn + 7) % 7;\n\tconst rows = input.fixedWeeks ? 6 : Math.ceil((lead + length) / 7);\n\tconst names = getLocale(locale).calendarNames;\n\tconst todayEpoch = toEpoch(input.today);\n\tconst focusEpoch = input.focusTarget ? toEpoch(input.focusTarget) : null;\n\tconst { singleEpoch, startEpoch, endEpoch, many } = selectionEpochs(input.selectionMode, input.selected);\n\tconst hoverEpoch = input.selectionMode === \"range\" && startEpoch !== null && endEpoch === null && input.rangeHover ? toEpoch(input.rangeHover) : null;\n\tconst previewLow = hoverEpoch === null || startEpoch === null ? null : Math.min(startEpoch, hoverEpoch);\n\tconst previewHigh = hoverEpoch === null || startEpoch === null ? null : Math.max(startEpoch, hoverEpoch);\n\tconst weeks = [];\n\tfor (let row = 0; row < rows; row++) {\n\t\tconst week = [];\n\t\tfor (let column = 0; column < 7; column++) {\n\t\t\tconst index = row * 7 + column;\n\t\t\tconst isOutside = index < lead || index >= lead + length;\n\t\t\tconst epoch = toEpochDay(firstEpoch - lead + index);\n\t\t\tconst date = isOutside && !input.showOutsideDays ? null : safeFromEpoch(epoch, calendar);\n\t\t\tif (!date) {\n\t\t\t\tweek.push(null);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst otherDate = input.showOtherCalendar ? safeFromEpoch(epoch, other) : null;\n\t\t\tconst weekday = dayOfWeek(date);\n\t\t\tconst isToday = epoch === todayEpoch;\n\t\t\tconst isRangeStart = startEpoch === epoch;\n\t\t\tconst isRangeEnd = endEpoch !== null && endEpoch === epoch && endEpoch !== startEpoch;\n\t\t\tconst isRangeMiddle = startEpoch !== null && endEpoch !== null && epoch > startEpoch && epoch < endEpoch;\n\t\t\tconst isSelected = singleEpoch === epoch || isRangeStart || isRangeEnd || many.has(epoch);\n\t\t\tconst isInRangePreview = previewLow !== null && previewHigh !== null && epoch >= previewLow && epoch <= previewHigh;\n\t\t\tconst isDisabled = !isInLimits(date, input.limits) || (input.isDateDisabled?.(date) ?? false);\n\t\t\tconst holiday = input.holiday?.(date) ?? null;\n\t\t\tconst holidayLabel = holiday?.label ?? null;\n\t\t\tconst state = isSelected ? input.selectionMode === \"range\" ? isRangeEnd ? \"range-end\" : endEpoch === null ? \"selected\" : \"range-start\" : \"selected\" : isRangeMiddle ? \"range-middle\" : isDisabled ? \"disabled\" : isOutside ? \"outside\" : isToday ? \"today\" : holiday ? \"holiday\" : \"default\";\n\t\t\tweek.push(Object.freeze({\n\t\t\t\tkey: `${date.calendar}-${formatDate(date, \"Y-m-d\", \"en\")}`,\n\t\t\t\tdate,\n\t\t\t\totherDate,\n\t\t\t\tepoch,\n\t\t\t\tweekday,\n\t\t\t\tlabel: formatNumber(date.day, locale),\n\t\t\t\tsubLabel: otherDate ? formatNumber(otherDate.day, locale) : null,\n\t\t\t\tariaLabel: formatDate(date, \"full\", locale) + (otherDate ? ` (${formatDate(otherDate, \"long\", locale)} ${names[otherDate.calendar]})` : \"\") + (holidayLabel ? `, ${holidayLabel}` : \"\"),\n\t\t\t\tisToday,\n\t\t\t\tisSelected,\n\t\t\t\tisRangeStart: input.selectionMode === \"range\" && isRangeStart,\n\t\t\t\tisRangeMiddle,\n\t\t\t\tisRangeEnd,\n\t\t\t\tisInRangePreview,\n\t\t\t\tisDisabled,\n\t\t\t\tisOutside,\n\t\t\t\tisWeekend: input.weekendDays.includes(weekday),\n\t\t\t\tisHoliday: holiday !== null,\n\t\t\t\tholidayLabel,\n\t\t\t\tevents: input.events?.(date) ?? NO_EVENTS,\n\t\t\t\tisFocusTarget: focusEpoch === epoch,\n\t\t\t\tstate\n\t\t\t}));\n\t\t}\n\t\tweeks.push(week);\n\t}\n\treturn weeks;\n}\n/** Weekday headers in display order. */\nfunction buildWeekdays(locale, weekStartsOn, weekendDays) {\n\tconst { weekdays } = getLocale(locale);\n\treturn Array.from({ length: 7 }, (_, offset) => {\n\t\tconst index = (weekStartsOn + offset) % 7;\n\t\treturn Object.freeze({\n\t\t\tindex,\n\t\t\tlabel: weekdays.short[index] ?? \"\",\n\t\t\tnarrowLabel: weekdays.narrow[index] ?? \"\",\n\t\t\tlongLabel: weekdays.long[index] ?? \"\",\n\t\t\tisWeekend: weekendDays.includes(index)\n\t\t});\n\t});\n}\nconst NONE = /* @__PURE__ */ new Set();\nfunction selectionEpochs(mode, selected) {\n\tconst none = {\n\t\tsingleEpoch: null,\n\t\tstartEpoch: null,\n\t\tendEpoch: null,\n\t\tmany: NONE\n\t};\n\tif (selected == null) return none;\n\tif (isDayList(selected)) return {\n\t\t...none,\n\t\tmany: new Set(selected.map((day) => toEpoch(day)))\n\t};\n\tif (\"calendar\" in selected) return mode === \"range\" ? {\n\t\t...none,\n\t\tstartEpoch: toEpoch(selected)\n\t} : {\n\t\t...none,\n\t\tsingleEpoch: toEpoch(selected)\n\t};\n\tif (mode !== \"range\") return {\n\t\t...none,\n\t\tsingleEpoch: selected.start ? toEpoch(selected.start) : null\n\t};\n\treturn {\n\t\t...none,\n\t\tstartEpoch: selected.start ? toEpoch(selected.start) : null,\n\t\tendEpoch: selected.end ? toEpoch(selected.end) : null\n\t};\n}\n/** Whether a selection is the multiple-mode list of days. */\nfunction isDayList(selection) {\n\treturn Array.isArray(selection);\n}\nfunction safeFromEpoch(epoch, calendar) {\n\ttry {\n\t\treturn fromEpoch(epoch, calendar);\n\t} catch {\n\t\treturn null;\n\t}\n}\n//#endregion\n//#region src/tiles.ts\n/** Twelve month tiles: \"Ashwin\" with \"Sep / Oct\" under it. */\nfunction buildMonthTiles(input) {\n\tconst { calendar, year, limits, locale } = input;\n\tconst other = calendar === \"BS\" ? \"AD\" : \"BS\";\n\tconst long = monthNames(calendar, locale, \"long\");\n\tconst otherShort = monthNames(other, locale, \"short\");\n\tconst selected = input.selected ? safeConvert(input.selected, calendar) : null;\n\tconst today = safeConvert(input.today, calendar);\n\treturn Array.from({ length: 12 }, (_, index) => {\n\t\tconst month = index + 1;\n\t\tconst valid = isValidDate(calendar, year, month, 1);\n\t\tlet subLabel = null;\n\t\tlet isDisabled = true;\n\t\tif (valid) {\n\t\t\tconst first = createDate(calendar, year, month, 1);\n\t\t\tconst last = endOfMonth(first);\n\t\t\tconst from = safeConvert(first, other);\n\t\t\tconst to = safeConvert(last, other);\n\t\t\tif (from && to) {\n\t\t\t\tconst a = otherShort[from.month - 1] ?? \"\";\n\t\t\t\tconst b = otherShort[to.month - 1] ?? \"\";\n\t\t\t\tsubLabel = a === b ? a : `${a} / ${b}`;\n\t\t\t}\n\t\t\tisDisabled = limits.empty || isBefore(last, limits.lowDay) || isAfter(first, limits.highDay);\n\t\t}\n\t\treturn Object.freeze({\n\t\t\tvalue: month,\n\t\t\tlabel: long[index] ?? \"\",\n\t\t\tsubLabel,\n\t\t\tisSelected: selected?.year === year && selected.month === month,\n\t\t\tisCurrent: today?.year === year && today.month === month,\n\t\t\tisDisabled\n\t\t});\n\t});\n}\n/** The first year of the page of twelve that contains `year`. */\nfunction yearPageStart(year) {\n\treturn Math.floor(year / 12) * 12;\n}\n/** Twelve year tiles: \"2083\" with \"2026/27\" under it. */\nfunction buildYearTiles(input) {\n\tconst { calendar, limits, locale } = input;\n\tconst other = calendar === \"BS\" ? \"AD\" : \"BS\";\n\tconst start = yearPageStart(input.year);\n\tconst selected = input.selected ? safeConvert(input.selected, calendar) : null;\n\tconst today = safeConvert(input.today, calendar);\n\treturn Array.from({ length: 12 }, (_, index) => {\n\t\tconst year = start + index;\n\t\tlet subLabel = null;\n\t\tif (isValidDate(calendar, year, 1, 1)) {\n\t\t\tconst first = createDate(calendar, year, 1, 1);\n\t\t\tconst from = safeConvert(startOfYear(first), other);\n\t\t\tconst to = safeConvert(endOfYear(first), other);\n\t\t\tif (from && to) subLabel = formatNumber(from.year === to.year ? `${from.year}` : `${from.year}/${String(to.year % 100).padStart(2, \"0\")}`, locale);\n\t\t}\n\t\treturn Object.freeze({\n\t\t\tvalue: year,\n\t\t\tlabel: formatNumber(year, locale),\n\t\t\tsubLabel,\n\t\t\tisSelected: selected?.year === year,\n\t\t\tisCurrent: today?.year === year,\n\t\t\tisDisabled: limits.empty || year < limits.lowDay.year || year > limits.highDay.year\n\t\t});\n\t});\n}\nfunction safeConvert(date, calendar) {\n\ttry {\n\t\treturn toCalendar(date, calendar);\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** The fiscal year that starts in BS `startYear`, or null outside the BS table. */\nfunction safeFiscalYear(startYear) {\n\ttry {\n\t\treturn fiscalYearRange(startYear);\n\t} catch {\n\t\treturn null;\n\t}\n}\n/** Whether a whole fiscal year lies inside the limits. */\nfunction isFiscalYearAllowed(startYear, limits) {\n\tconst fy = safeFiscalYear(startYear);\n\treturn fy !== null && !limits.empty && compareDates(fy.firstDay, limits.lowDay) >= 0 && compareDates(fy.lastDay, limits.highDay) <= 0;\n}\n/** Twelve fiscal-year tiles: \"2083/84\" with the AD years \"2026/27\" under it. */\nfunction buildFiscalYearTiles(input) {\n\tconst { limits, locale } = input;\n\tconst anchor = safeConvert(input.today, \"BS\");\n\tconst pageStart = yearPageStart(input.year);\n\tconst currentStart = anchor ? fiscalYear(anchor).startYear : null;\n\tconst range = input.selectedRange;\n\treturn Array.from({ length: 12 }, (_, index) => {\n\t\tconst startYear = pageStart + index;\n\t\tconst fy = safeFiscalYear(startYear);\n\t\tconst from = fy ? safeConvert(fy.firstDay, \"AD\") : null;\n\t\tconst to = fy ? safeConvert(fy.lastDay, \"AD\") : null;\n\t\tconst isSelected = fy !== null && range?.start != null && range.end != null && compareDates(range.start, fy.firstDay) === 0 && compareDates(range.end, fy.lastDay) === 0;\n\t\treturn Object.freeze({\n\t\t\tvalue: startYear,\n\t\t\tlabel: fy ? formatFiscalYear(fy, \"label\", locale) : formatNumber(`${startYear}/${String((startYear + 1) % 100).padStart(2, \"0\")}`, locale),\n\t\t\tsubLabel: from && to ? formatNumber(`${from.year}/${String(to.year % 100).padStart(2, \"0\")}`, locale) : null,\n\t\t\tisSelected,\n\t\t\tisCurrent: currentStart === startYear,\n\t\t\tisDisabled: !isFiscalYearAllowed(startYear, limits)\n\t\t});\n\t});\n}\n//#endregion\n//#region src/store.ts\n/**\n* A framework-free calendar: give it options, read `getState()`, call\n* `actions`, and `subscribe` to re-render. React, Web Components, React Native\n* and Angular adapters all wrap this same store (docs/plan 01-architecture).\n*\n* The selection and visible month live in the store so a range can be picked\n* with two clicks; passing `selected` or `visibleMonth` through setOptions\n* replaces them (controlled use).\n*/\nfunction createCalendar(initial = {}) {\n\tlet options = { ...initial };\n\tlet calendar = options.calendar ?? \"BS\";\n\tlet mode = options.selectionMode ?? \"single\";\n\tlet todayDate = toCalendar(options.today ?? today(\"AD\"), \"AD\");\n\tlet limits = computeLimits(calendar, options.min, options.max);\n\tlet selection = normalizeSelection(options.selected ?? null, mode, calendar);\n\tlet view = \"day\";\n\tlet rangeHover = null;\n\tlet holiday = makeHolidayResolver(options.holidays);\n\tlet visibleMonth = clampMonth(options.visibleMonth ?? options.defaultVisibleMonth ?? anchorOf(selection) ?? todayDate);\n\tlet focused = clampDay(anchorOf(selection) ?? todayDate);\n\tlet snapshot = build();\n\tconst listeners = /* @__PURE__ */ new Set();\n\tlet destroyed = false;\n\tfunction locale() {\n\t\treturn options.locale ?? getConfig().defaultLocale;\n\t}\n\tfunction weekStartsOn() {\n\t\treturn options.weekStartsOn ?? getConfig().weekStartsOn;\n\t}\n\tfunction weekendDays() {\n\t\treturn options.weekendDays ?? getConfig().weekendDays;\n\t}\n\t/** Day 1 of the month containing `date`, kept within the months that may be shown. */\n\tfunction clampMonth(date) {\n\t\tif (isBefore(date, limits.lowMonth)) return limits.lowMonth;\n\t\tif (isAfter(date, limits.highDay)) return limits.highMonth;\n\t\treturn startOfMonth(toCalendar(date, calendar));\n\t}\n\tfunction clampDay(date) {\n\t\tif (isBefore(date, limits.lowDay)) return limits.lowDay;\n\t\tif (isAfter(date, limits.highDay)) return limits.highDay;\n\t\treturn toCalendar(date, calendar);\n\t}\n\t/** The focused day if it is in the visible month, else the same day number there. */\n\tfunction focusTarget() {\n\t\tif (isSameMonth(visibleMonth, focused)) return focused;\n\t\tconst day = Math.min(toCalendar(focused, calendar).day, daysInMonth(calendar, visibleMonth.year, visibleMonth.month));\n\t\treturn createDate(calendar, visibleMonth.year, visibleMonth.month, day);\n\t}\n\tfunction isSelectable(date) {\n\t\treturn isInLimits(date, limits) && !(options.isDateDisabled?.(date) ?? false);\n\t}\n\tfunction build() {\n\t\tconst loc = locale();\n\t\tconst target = focusTarget();\n\t\tconst selectedDay = anchorOf(selection);\n\t\tconst year = visibleMonth.year;\n\t\tconst pageStart = yearPageStart(year);\n\t\tconst fiscalStart = fiscalStartOf(visibleMonth);\n\t\tconst fiscalPage = yearPageStart(fiscalStart);\n\t\tconst labels = getLocale(loc).labels;\n\t\tconst range = rangeOf(selection);\n\t\tconst tileInput = {\n\t\t\tcalendar,\n\t\t\tyear,\n\t\t\tlimits,\n\t\t\tlocale: loc,\n\t\t\tselected: selectedDay,\n\t\t\ttoday: todayDate\n\t\t};\n\t\treturn Object.freeze({\n\t\t\tcalendar,\n\t\t\tview,\n\t\t\tvisibleMonth,\n\t\t\tfocused: target,\n\t\t\ttitle: view === \"day\" ? formatDate(visibleMonth, \"F Y\", loc) : view === \"month\" ? formatNumber(year, loc) : view === \"year\" ? `${formatNumber(pageStart, loc)}–${formatNumber(pageStart + 11, loc)}` : `${labels.fiscalYear} ${formatNumber(`${fiscalPage}/${String((fiscalPage + 1) % 100).padStart(2, \"0\")}–${fiscalPage + 11}/${String((fiscalPage + 12) % 100).padStart(2, \"0\")}`, loc)}`,\n\t\t\tweekdays: buildWeekdays(loc, weekStartsOn(), weekendDays()),\n\t\t\tweeks: buildMonthGrid({\n\t\t\t\tcalendar,\n\t\t\t\tmonth: visibleMonth,\n\t\t\t\tlimits,\n\t\t\t\tlocale: loc,\n\t\t\t\ttoday: todayDate,\n\t\t\t\tselectionMode: mode,\n\t\t\t\tselected: selection,\n\t\t\t\trangeHover,\n\t\t\t\tfocusTarget: target,\n\t\t\t\tshowOtherCalendar: options.showOtherCalendar ?? true,\n\t\t\t\tshowOutsideDays: options.showOutsideDays ?? true,\n\t\t\t\tfixedWeeks: options.fixedWeeks ?? false,\n\t\t\t\tweekStartsOn: weekStartsOn(),\n\t\t\t\tweekendDays: weekendDays(),\n\t\t\t\tisDateDisabled: options.isDateDisabled,\n\t\t\t\tholiday,\n\t\t\t\tevents: options.events\n\t\t\t}),\n\t\t\tmonths: buildMonthTiles(tileInput),\n\t\t\tyears: buildYearTiles(tileInput),\n\t\t\tfiscalYears: buildFiscalYearTiles({\n\t\t\t\t...tileInput,\n\t\t\t\tyear: fiscalStart,\n\t\t\t\tselectedRange: range\n\t\t\t}),\n\t\t\tcanPrev: view === \"day\" ? isAfter(visibleMonth, limits.lowMonth) : view === \"month\" ? year > limits.lowMonth.year : view === \"year\" ? pageStart > limits.lowMonth.year : fiscalPage > fiscalStartOf(limits.lowDay),\n\t\t\tcanNext: view === \"day\" ? isBefore(visibleMonth, limits.highMonth) : view === \"month\" ? year < limits.highMonth.year : view === \"year\" ? pageStart + 11 < limits.highMonth.year : fiscalPage + 11 < fiscalStartOf(limits.highDay),\n\t\t\tselectionMode: mode,\n\t\t\tselected: selection,\n\t\t\trangeHover,\n\t\t\tminDate: limits.lowDay,\n\t\t\tmaxDate: limits.highDay\n\t\t});\n\t}\n\tfunction emit() {\n\t\tsnapshot = build();\n\t\tfor (const listener of [...listeners]) listener();\n\t}\n\t/** Apply a change made by an action, then rebuild and notify if anything moved. */\n\tfunction update(change) {\n\t\tif (destroyed) return;\n\t\tconst before = {\n\t\t\tmonth: visibleMonth,\n\t\t\tview,\n\t\t\tkey: stateKey()\n\t\t};\n\t\tchange();\n\t\tif (stateKey() === before.key) return;\n\t\temit();\n\t\tif (!isSameDay(before.month, visibleMonth)) options.onVisibleMonthChange?.(visibleMonth);\n\t\tif (before.view !== view) options.onViewChange?.(view);\n\t}\n\tfunction stateKey() {\n\t\tconst range = rangeOf(selection);\n\t\tconst single = selection && \"calendar\" in selection ? selection : null;\n\t\tconst days = isDayList(selection) ? selection.map((day) => toEpoch(day)).join(\",\") : \"\";\n\t\treturn [\n\t\t\tview,\n\t\t\ttoEpoch(visibleMonth),\n\t\t\ttoEpoch(focused),\n\t\t\tsingle ? toEpoch(single) : \"\",\n\t\t\trange?.start ? toEpoch(range.start) : \"\",\n\t\t\trange?.end ? toEpoch(range.end) : \"\",\n\t\t\trangeHover ? toEpoch(rangeHover) : \"\",\n\t\t\tdays\n\t\t].join(\"|\");\n\t}\n\t/** Move the visible month by a number of months, stopping at the limits. */\n\tfunction shiftMonths(months) {\n\t\tlet target;\n\t\ttry {\n\t\t\ttarget = addMonths(visibleMonth, months);\n\t\t} catch {\n\t\t\ttarget = months > 0 ? limits.highMonth : limits.lowMonth;\n\t\t}\n\t\tvisibleMonth = clampMonth(target);\n\t}\n\tconst actions = {\n\t\tnext() {\n\t\t\tupdate(() => {\n\t\t\t\tshiftMonths(view === \"day\" ? 1 : view === \"month\" ? 12 : 144);\n\t\t\t});\n\t\t},\n\t\tprev() {\n\t\t\tupdate(() => {\n\t\t\t\tshiftMonths(view === \"day\" ? -1 : view === \"month\" ? -12 : -144);\n\t\t\t});\n\t\t},\n\t\tgoTo(date) {\n\t\t\tupdate(() => {\n\t\t\t\tvisibleMonth = clampMonth(date);\n\t\t\t\tfocused = clampDay(date);\n\t\t\t});\n\t\t},\n\t\tgoToToday() {\n\t\t\tactions.goTo(todayDate);\n\t\t},\n\t\tsetView(next) {\n\t\t\tupdate(() => {\n\t\t\t\tview = next;\n\t\t\t});\n\t\t},\n\t\tchooseMonth(month) {\n\t\t\tupdate(() => {\n\t\t\t\tvisibleMonth = clampMonth(createDate(calendar, visibleMonth.year, month, 1));\n\t\t\t\tfocused = focusTarget();\n\t\t\t\tview = \"day\";\n\t\t\t});\n\t\t},\n\t\tchooseFiscalYear(startYear) {\n\t\t\tconst fy = safeFiscalYear(startYear);\n\t\t\tif (destroyed || !fy || !isFiscalYearAllowed(startYear, limits)) return false;\n\t\t\tconst first = toCalendar(fy.firstDay, calendar);\n\t\t\tconst last = toCalendar(fy.lastDay, calendar);\n\t\t\tconst range = mode === \"range\" ? Object.freeze({\n\t\t\t\tstart: first,\n\t\t\t\tend: last\n\t\t\t}) : null;\n\t\t\tupdate(() => {\n\t\t\t\tvisibleMonth = clampMonth(first);\n\t\t\t\tfocused = first;\n\t\t\t\tview = \"day\";\n\t\t\t\tif (range) {\n\t\t\t\t\tselection = range;\n\t\t\t\t\trangeHover = null;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (range) options.onSelect?.(range);\n\t\t\treturn true;\n\t\t},\n\t\tchooseYear(year) {\n\t\t\tupdate(() => {\n\t\t\t\tlet target;\n\t\t\t\ttry {\n\t\t\t\t\ttarget = addYears(visibleMonth, year - visibleMonth.year);\n\t\t\t\t} catch {\n\t\t\t\t\ttarget = year < visibleMonth.year ? limits.lowMonth : limits.highMonth;\n\t\t\t\t}\n\t\t\t\tvisibleMonth = clampMonth(target);\n\t\t\t\tview = \"month\";\n\t\t\t});\n\t\t},\n\t\tfocus(date) {\n\t\t\tupdate(() => {\n\t\t\t\tfocused = clampDay(date);\n\t\t\t\tvisibleMonth = clampMonth(focused);\n\t\t\t});\n\t\t},\n\t\tmoveFocus(key, modifiers = {}) {\n\t\t\tupdate(() => {\n\t\t\t\tfocused = nextFocus(focusTarget(), key, limits, {\n\t\t\t\t\tweekStartsOn: weekStartsOn(),\n\t\t\t\t\t...modifiers.shift === void 0 ? {} : { shift: modifiers.shift }\n\t\t\t\t});\n\t\t\t\tif (!isSameMonth(visibleMonth, focused)) visibleMonth = clampMonth(focused);\n\t\t\t});\n\t\t},\n\t\tselect(date) {\n\t\t\tif (destroyed || !isSelectable(date)) return false;\n\t\t\tconst day = toCalendar(date, calendar);\n\t\t\tlet result = day;\n\t\t\tupdate(() => {\n\t\t\t\tfocused = day;\n\t\t\t\tif (!isSameMonth(visibleMonth, day)) visibleMonth = clampMonth(day);\n\t\t\t\tif (mode === \"single\") selection = day;\n\t\t\t\telse if (mode === \"multiple\") {\n\t\t\t\t\tresult = toggleDay(isDayList(selection) ? selection : [], day);\n\t\t\t\t\tselection = result;\n\t\t\t\t} else {\n\t\t\t\t\tconst range = selection ?? {\n\t\t\t\t\t\tstart: null,\n\t\t\t\t\t\tend: null\n\t\t\t\t\t};\n\t\t\t\t\tconst next = range.start === null || range.end !== null ? {\n\t\t\t\t\t\tstart: day,\n\t\t\t\t\t\tend: null\n\t\t\t\t\t} : compareDates(day, range.start) < 0 ? {\n\t\t\t\t\t\tstart: day,\n\t\t\t\t\t\tend: range.start\n\t\t\t\t\t} : {\n\t\t\t\t\t\tstart: range.start,\n\t\t\t\t\t\tend: day\n\t\t\t\t\t};\n\t\t\t\t\tselection = Object.freeze(next);\n\t\t\t\t\trangeHover = null;\n\t\t\t\t\tresult = next;\n\t\t\t\t}\n\t\t\t});\n\t\t\toptions.onSelect?.(result);\n\t\t\treturn true;\n\t\t},\n\t\thover(date) {\n\t\t\tupdate(() => {\n\t\t\t\tconst range = mode === \"range\" ? selection : null;\n\t\t\t\trangeHover = date && range?.start && range.end === null && isInLimits(date, limits) ? toCalendar(date, calendar) : null;\n\t\t\t});\n\t\t}\n\t};\n\treturn {\n\t\tgetState: () => snapshot,\n\t\tsubscribe(listener) {\n\t\t\tlisteners.add(listener);\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener);\n\t\t\t};\n\t\t},\n\t\tsetOptions(changes) {\n\t\t\tif (destroyed) return;\n\t\t\toptions = {\n\t\t\t\t...options,\n\t\t\t\t...changes\n\t\t\t};\n\t\t\tcalendar = options.calendar ?? \"BS\";\n\t\t\tmode = options.selectionMode ?? \"single\";\n\t\t\ttodayDate = toCalendar(options.today ?? today(\"AD\"), \"AD\");\n\t\t\tlimits = computeLimits(calendar, options.min, options.max);\n\t\t\tholiday = makeHolidayResolver(options.holidays);\n\t\t\tconst reselect = \"selected\" in changes || \"selectionMode\" in changes;\n\t\t\tselection = normalizeSelection(\"selected\" in changes ? changes.selected ?? null : selection, mode, calendar);\n\t\t\tif (reselect) rangeHover = null;\n\t\t\tvisibleMonth = clampMonth(changes.visibleMonth ?? visibleMonth);\n\t\t\tfocused = clampDay(focused);\n\t\t\temit();\n\t\t},\n\t\tactions,\n\t\tdestroy() {\n\t\t\tdestroyed = true;\n\t\t\tlisteners.clear();\n\t\t}\n\t};\n}\n/** The selection in the shape the mode needs, with its dates in the calendar on screen. */\n/** The BS start year of the fiscal year a date falls in (or the nearest one at the table edges). */\nfunction fiscalStartOf(date) {\n\ttry {\n\t\treturn fiscalYear(date).startYear;\n\t} catch {\n\t\treturn date.year;\n\t}\n}\nfunction normalizeSelection(selected, mode, calendar) {\n\tconst inCalendar = (date) => {\n\t\tif (date === null) return null;\n\t\ttry {\n\t\t\treturn toCalendar(date, calendar);\n\t\t} catch {\n\t\t\treturn date;\n\t\t}\n\t};\n\tif (mode === \"multiple\") return sortDays((isDayList(selected) ? selected : selected === null ? [] : \"calendar\" in selected ? [selected] : [selected.start, selected.end].filter((day) => day !== null)).map((day) => inCalendar(day) ?? day));\n\tif (selected === null) return mode === \"range\" ? Object.freeze({\n\t\tstart: null,\n\t\tend: null\n\t}) : null;\n\tif (isDayList(selected)) {\n\t\tconst [first = null, second = null] = sortDays(selected);\n\t\treturn mode === \"range\" ? Object.freeze({\n\t\t\tstart: inCalendar(first),\n\t\t\tend: inCalendar(second)\n\t\t}) : inCalendar(first);\n\t}\n\tif (\"calendar\" in selected) return mode === \"range\" ? Object.freeze({\n\t\tstart: inCalendar(selected),\n\t\tend: null\n\t}) : inCalendar(selected);\n\treturn mode === \"range\" ? Object.freeze({\n\t\tstart: inCalendar(selected.start),\n\t\tend: inCalendar(selected.end)\n\t}) : inCalendar(selected.start);\n}\n/** The day the selection points at: the date, the range start, or the first chosen day. */\nfunction anchorOf(selection) {\n\tif (selection === null) return null;\n\tif (isDayList(selection)) return selection[0] ?? null;\n\treturn \"calendar\" in selection ? selection : selection.start;\n}\nfunction rangeOf(selection) {\n\treturn selection && !isDayList(selection) && !(\"calendar\" in selection) ? selection : null;\n}\n/** Add the day, or remove it when it is already chosen. */\nfunction toggleDay(days, day) {\n\tconst kept = days.filter((other) => !isSameDay(other, day));\n\treturn sortDays(kept.length === days.length ? [...kept, day] : kept);\n}\nfunction sortDays(days) {\n\treturn Object.freeze([...days].sort(compareDates));\n}\nfunction makeHolidayResolver(holidays) {\n\tif (holidays === void 0) return;\n\tif (typeof holidays === \"function\") return (date) => {\n\t\tconst info = holidays(date);\n\t\tif (info === true) return { label: null };\n\t\treturn info ? { label: info.label ?? null } : null;\n\t};\n\tconst byDay = /* @__PURE__ */ new Map();\n\tfor (const item of holidays) {\n\t\tconst date = \"calendar\" in item ? item : item.date;\n\t\tbyDay.set(toEpoch(date), \"calendar\" in item ? null : item.label ?? null);\n\t}\n\treturn (date) => {\n\t\tconst label = byDay.get(toEpoch(date));\n\t\treturn label === void 0 ? null : { label };\n\t};\n}\n//#endregion\nexport { buildMonthGrid, buildMonthTiles, buildWeekdays, buildYearTiles, computeLimits, createCalendar, isDayList, isInLimits, nextFocus, yearPageStart };\n\n//# sourceMappingURL=index.js.map","/** Tiny DOM builders. Text goes through textContent; nothing user-supplied becomes HTML. */\n\ntype Attrs = Record<string, string | number | boolean | null | undefined>;\n\nexport function el<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n attrs: Attrs = {},\n children: (Node | string)[] = [],\n): HTMLElementTagNameMap[K] {\n const node = document.createElement(tag);\n setAttrs(node, attrs);\n node.append(...children);\n\n return node;\n}\n\n/** Set, update or remove attributes: false/null/undefined removes, true sets \"\". */\nexport function setAttrs(node: Element, attrs: Attrs): void {\n for (const [name, value] of Object.entries(attrs)) {\n if (value === false || value === null || value === undefined) {\n node.removeAttribute(name);\n } else {\n const text = value === true ? '' : String(value);\n if (node.getAttribute(name) !== text) {\n node.setAttribute(name, text);\n }\n }\n }\n}\n\nexport function setText(node: Node, text: string): void {\n if (node.textContent !== text) {\n node.textContent = text;\n }\n}\n\nlet counter = 0;\n/** A document-unique id for aria-controls / aria-describedby. */\nexport function uid(prefix: string): string {\n counter += 1;\n\n return `${prefix}-${counter}`;\n}\n\nconst SVG = 'http://www.w3.org/2000/svg';\nconst PATHS: Record<IconName, string[]> = {\n 'chevron-left': ['M10 3.5 5.5 8l4.5 4.5'],\n 'chevron-right': ['M6 3.5 10.5 8 6 12.5'],\n calendar: [\n 'M2 6.5h12',\n 'M5.5 1.5v3',\n 'M10.5 1.5v3',\n 'M4 3h8a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2Z',\n ],\n close: ['M4 4l8 8', 'M12 4l-8 8'],\n};\n\nexport type IconName = 'chevron-left' | 'chevron-right' | 'calendar' | 'close';\n\n/** The Figma icon set at 16px, drawn with currentColor. */\nexport function icon(name: IconName): SVGSVGElement {\n const svg = document.createElementNS(SVG, 'svg');\n svg.setAttribute('viewBox', '0 0 16 16');\n svg.setAttribute('fill', 'none');\n svg.setAttribute('stroke', 'currentColor');\n svg.setAttribute('stroke-width', '1.5');\n svg.setAttribute('stroke-linecap', 'round');\n svg.setAttribute('stroke-linejoin', 'round');\n svg.setAttribute('aria-hidden', 'true');\n svg.setAttribute('focusable', 'false');\n for (const d of PATHS[name]) {\n const path = document.createElementNS(SVG, 'path');\n path.setAttribute('d', d);\n svg.append(path);\n }\n\n return svg;\n}\n\n/**\n * Popup or inline: an inline picker's calendar is always in the page, so its\n * inputs are plain text fields, its toggle is hidden and its panel is a group\n * in normal flow rather than a top-layer dialog.\n */\nexport function setPopupMode(\n state: { readonly open: boolean; readonly inline: boolean },\n inputs: readonly HTMLElement[],\n toggle: HTMLElement,\n panel: HTMLElement,\n): void {\n const { inline } = state;\n for (const input of inputs) {\n setAttrs(input, {\n role: inline ? null : 'combobox',\n 'aria-haspopup': inline ? null : 'dialog',\n 'aria-expanded': inline ? null : String(state.open),\n });\n }\n toggle.hidden = inline;\n setAttrs(panel, {\n role: inline ? 'group' : 'dialog',\n popover: inline ? null : 'manual',\n });\n if (inline) {\n panel.dataset['layout'] = 'inline';\n } else if (panel.dataset['layout'] === 'inline') {\n delete panel.dataset['layout'];\n }\n}\n","import { getLocale, type CalendarDate, type LocaleCode } from '@nepdatejs/core';\nimport type {\n CalendarState,\n CalendarStore,\n DayCell,\n FocusKey,\n PickerCell,\n} from '@nepdatejs/calendar';\nimport { el, icon, setAttrs, setText } from './dom';\n\nconst FOCUS_KEYS: ReadonlySet<string> = new Set([\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n 'PageUp',\n 'PageDown',\n]);\n\nexport interface CalendarViewOptions {\n /** The locale for labels; read on every render so a change applies at once. */\n readonly locale?: (() => LocaleCode | undefined) | undefined;\n /** Called for a day click or Enter/Space; defaults to store.actions.select. */\n readonly onDayActivate?: ((date: CalendarDate) => void) | undefined;\n}\n\n/**\n * Renders a calendar store into `root` with the @nepdatejs/styles markup and\n * keeps it in step. Elements are updated in place, so a click or focus never\n * lands on a replaced button; only switching view or row count rebuilds the body.\n */\nexport class CalendarView {\n readonly element: HTMLDivElement;\n private readonly store: CalendarStore;\n private readonly options: CalendarViewOptions;\n private readonly prev: HTMLButtonElement;\n private readonly next: HTMLButtonElement;\n private readonly title: HTMLDivElement;\n private readonly body: HTMLDivElement;\n private bodyKey = '';\n private cells: (DayCell | null)[] = [];\n private tiles: PickerCell[] = [];\n private focusAfterRender = false;\n private readonly unsubscribe: () => void;\n\n constructor(\n root: HTMLElement,\n store: CalendarStore,\n options: CalendarViewOptions = {},\n ) {\n this.store = store;\n this.options = options;\n this.prev = el(\n 'button',\n { type: 'button', class: 'ndp-icon-button', 'data-action': 'prev' },\n [icon('chevron-left')],\n );\n this.next = el(\n 'button',\n { type: 'button', class: 'ndp-icon-button', 'data-action': 'next' },\n [icon('chevron-right')],\n );\n this.title = el('div', { class: 'ndp-calendar__title', 'aria-live': 'polite' });\n this.body = el('div');\n this.element = el('div', { class: 'ndp-calendar' }, [\n el('div', { class: 'ndp-calendar__header' }, [this.prev, this.title, this.next]),\n this.body,\n ]);\n this.element.addEventListener('click', this.onClick);\n this.element.addEventListener('keydown', this.onKeyDown);\n this.element.addEventListener('mouseover', this.onMouseOver);\n this.element.addEventListener('mouseleave', this.onMouseLeave);\n this.element.addEventListener('focusin', this.onFocusIn);\n root.append(this.element);\n this.unsubscribe = store.subscribe(() => {\n this.render();\n });\n this.render();\n }\n\n /** Move keyboard focus to the day that should have it. */\n focusGrid(): void {\n this.element\n .querySelector<HTMLElement>('.ndp-day[tabindex=\"0\"], .ndp-option[tabindex=\"0\"]')\n ?.focus();\n }\n\n destroy(): void {\n this.unsubscribe();\n this.element.remove();\n }\n\n render(): void {\n const state = this.store.getState();\n const labels = getLocale(this.options.locale?.()).labels;\n const stepLabels =\n state.view === 'day'\n ? [labels.previousMonth, labels.nextMonth]\n : [labels.previousYear, labels.nextYear];\n setAttrs(this.prev, { 'aria-label': stepLabels[0], disabled: !state.canPrev });\n setAttrs(this.next, { 'aria-label': stepLabels[1], disabled: !state.canNext });\n this.renderTitle(state, labels.month, labels.year);\n\n const key = `${state.view}:${state.view === 'day' ? state.weeks.length : 12}`;\n if (key !== this.bodyKey) {\n this.bodyKey = key;\n this.body.replaceChildren(\n state.view === 'day' ? this.buildGrid(state) : this.buildOptions(),\n );\n }\n if (state.view === 'day') {\n this.patchGrid(state);\n } else {\n this.patchOptions(\n state.view === 'month'\n ? state.months\n : state.view === 'year'\n ? state.years\n : state.fiscalYears,\n );\n }\n this.flushFocus();\n }\n\n /** Focus the grid if a keyboard move or view change asked for it. */\n private flushFocus(): void {\n if (this.focusAfterRender) {\n this.focusAfterRender = false;\n this.focusGrid();\n }\n }\n\n private renderTitle(state: CalendarState, monthLabel: string, yearLabel: string): void {\n const [monthName, yearText] =\n state.view === 'day' ? splitTitle(state.title) : ['', state.title];\n const wanted =\n state.view === 'day'\n ? [\n {\n action: 'view-month',\n text: monthName,\n label: `${monthLabel}: ${monthName}`,\n },\n { action: 'view-year', text: yearText, label: `${yearLabel}: ${yearText}` },\n ]\n : [\n {\n action: state.view === 'month' ? 'view-year' : 'view-day',\n text: state.title,\n label:\n state.view === 'fiscal' ? state.title : `${yearLabel}: ${state.title}`,\n },\n ];\n const buttons = [...this.title.children] as HTMLButtonElement[];\n if (buttons.length !== wanted.length) {\n this.title.replaceChildren(\n ...wanted.map(() =>\n el('button', { type: 'button', class: 'ndp-calendar__title-button' }),\n ),\n );\n }\n wanted.forEach((item, index) => {\n const button = this.title.children[index] as HTMLButtonElement;\n setAttrs(button, { 'data-action': item.action, 'aria-label': item.label });\n setText(button, item.text);\n });\n }\n\n private buildGrid(state: CalendarState): HTMLTableElement {\n const head = el('tr', { role: 'row' });\n for (let i = 0; i < 7; i++) {\n head.append(el('th', { class: 'ndp-weekday', scope: 'col', role: 'columnheader' }));\n }\n const rows = state.weeks.map(() => {\n const row = el('tr', { role: 'row' });\n for (let i = 0; i < 7; i++) {\n row.append(\n el('td', { role: 'gridcell' }, [\n el('button', { type: 'button', class: 'ndp-day' }, [\n el('span', { class: 'ndp-sr-only' }),\n el('span', { class: 'ndp-day__label', 'aria-hidden': 'true' }),\n el('span', { class: 'ndp-day__sub', 'aria-hidden': 'true' }),\n el('span', { class: 'ndp-day__dot', 'aria-hidden': 'true', hidden: true }),\n ]),\n ]),\n );\n }\n return row;\n });\n\n return el('table', { class: 'ndp-grid', role: 'grid' }, [\n el('thead', {}, [head]),\n el('tbody', {}, rows),\n ]);\n }\n\n private patchGrid(state: CalendarState): void {\n const table = this.body.firstElementChild as HTMLTableElement;\n setAttrs(table, { 'aria-label': state.title });\n const headers = table.querySelectorAll('th');\n state.weekdays.forEach((weekday, index) => {\n const th = headers[index];\n if (th) {\n setAttrs(th, { abbr: weekday.longLabel, 'data-weekend': weekday.isWeekend });\n setText(th, weekday.label);\n }\n });\n this.cells = state.weeks.flat();\n const buttons = table.querySelectorAll<HTMLButtonElement>('.ndp-day');\n this.cells.forEach((cell, index) => {\n const button = buttons[index];\n if (button) {\n patchDay(button, cell);\n }\n });\n }\n\n private buildOptions(): HTMLDivElement {\n const buttons = Array.from({ length: 12 }, () =>\n el('button', { type: 'button', class: 'ndp-option' }, [\n el('span', { class: 'ndp-sr-only' }),\n el('span', { class: 'ndp-option__label', 'aria-hidden': 'true' }),\n el('span', { class: 'ndp-option__sub', 'aria-hidden': 'true' }),\n ]),\n );\n\n return el('div', { class: 'ndp-options', role: 'group' }, buttons);\n }\n\n private patchOptions(tiles: readonly PickerCell[]): void {\n this.tiles = [...tiles];\n const focusIndex = Math.max(\n 0,\n tiles.findIndex((tile) => tile.isSelected) === -1\n ? tiles.findIndex((tile) => tile.isCurrent)\n : tiles.findIndex((tile) => tile.isSelected),\n );\n const buttons = this.body.querySelectorAll<HTMLButtonElement>('.ndp-option');\n tiles.forEach((tile, index) => {\n const button = buttons[index];\n if (!button) {\n return;\n }\n setAttrs(button, {\n 'data-state': tile.isSelected\n ? 'selected'\n : tile.isCurrent\n ? 'current'\n : 'default',\n 'aria-pressed': tile.isSelected ? 'true' : 'false',\n tabindex: index === focusIndex ? 0 : -1,\n disabled: tile.isDisabled,\n });\n const [name, label, sub] = button.children;\n if (name && label && sub) {\n setText(name, tile.subLabel ? `${tile.label} (${tile.subLabel})` : tile.label);\n setText(label, tile.label);\n setText(sub, tile.subLabel ?? '');\n }\n });\n }\n\n private cellOf(target: EventTarget | null): DayCell | null {\n const button =\n target instanceof Element ? target.closest<HTMLButtonElement>('.ndp-day') : null;\n if (!button || !this.element.contains(button)) {\n return null;\n }\n const index = [...this.element.querySelectorAll('.ndp-day')].indexOf(button);\n\n return this.cells[index] ?? null;\n }\n\n private readonly onClick = (event: MouseEvent): void => {\n const target = event.target instanceof Element ? event.target : null;\n const action = target?.closest<HTMLElement>('[data-action]')?.dataset['action'];\n const { actions } = this.store;\n switch (action) {\n case 'prev':\n actions.prev();\n return;\n case 'next':\n actions.next();\n return;\n case 'view-month':\n actions.setView('month');\n this.focusAfterRender = true;\n this.render();\n return;\n case 'view-year':\n actions.setView('year');\n this.focusAfterRender = true;\n this.render();\n return;\n case 'view-day':\n actions.setView('day');\n return;\n default:\n break;\n }\n const option = target?.closest<HTMLButtonElement>('.ndp-option');\n if (option) {\n const index = [...this.body.querySelectorAll('.ndp-option')].indexOf(option);\n const tile = this.tiles[index];\n if (tile && !tile.isDisabled) {\n this.focusAfterRender = true;\n const view = this.store.getState().view;\n if (view === 'month') {\n actions.chooseMonth(tile.value as 1);\n } else if (view === 'year') {\n actions.chooseYear(tile.value);\n } else {\n actions.chooseFiscalYear(tile.value);\n }\n this.render();\n }\n return;\n }\n const cell = this.cellOf(target);\n if (cell && !cell.isDisabled) {\n (this.options.onDayActivate ?? ((date: CalendarDate) => actions.select(date)))(\n cell.date,\n );\n }\n };\n\n private readonly onKeyDown = (event: KeyboardEvent): void => {\n if (!FOCUS_KEYS.has(event.key) || !this.cellOf(event.target)) {\n return;\n }\n event.preventDefault();\n this.focusAfterRender = true;\n this.store.actions.moveFocus(event.key as FocusKey, { shift: event.shiftKey });\n // A move that changes nothing (at a limit) still keeps focus where it is.\n this.flushFocus();\n };\n\n private readonly onMouseOver = (event: MouseEvent): void => {\n const cell = this.cellOf(event.target);\n if (cell && this.store.getState().selectionMode === 'range') {\n this.store.actions.hover(cell.isDisabled ? null : cell.date);\n }\n };\n\n private readonly onMouseLeave = (): void => {\n if (this.store.getState().selectionMode === 'range') {\n this.store.actions.hover(null);\n }\n };\n\n private readonly onFocusIn = (event: FocusEvent): void => {\n const cell = this.cellOf(event.target);\n if (cell && !cell.isFocusTarget) {\n this.store.actions.focus(cell.date);\n }\n };\n}\n\nfunction patchDay(button: HTMLButtonElement, cell: DayCell | null): void {\n const td = button.parentElement;\n if (!cell) {\n button.hidden = true;\n setAttrs(button, { tabindex: -1, 'data-key': null });\n if (td) {\n setAttrs(td, { 'aria-selected': null });\n }\n return;\n }\n button.hidden = false;\n setAttrs(button, {\n 'data-key': cell.key,\n 'data-state': cell.state,\n 'data-weekend': cell.isWeekend,\n 'data-preview': cell.isInRangePreview && !cell.isSelected,\n 'data-outside': cell.isOutside,\n tabindex: cell.isFocusTarget ? 0 : -1,\n disabled: cell.isDisabled,\n 'aria-pressed': cell.isSelected ? 'true' : 'false',\n 'aria-current': cell.isToday ? 'date' : null,\n });\n if (td) {\n setAttrs(td, { 'aria-selected': cell.isSelected ? 'true' : null });\n }\n const [name, label, sub, dot] = button.children as unknown as [\n HTMLElement,\n HTMLElement,\n HTMLElement,\n HTMLElement,\n ];\n setText(name, cell.ariaLabel);\n setText(label, cell.label);\n setText(sub, cell.subLabel ?? '');\n sub.hidden = cell.subLabel === null;\n const event = cell.events[0];\n dot.hidden = !event;\n dot.style.setProperty('--ndp-dot-color', event?.color ?? null);\n}\n\n/** \"Kartik 2083\" → [\"Kartik\", \"2083\"]; the year is the last word in every locale we ship. */\nfunction splitTitle(title: string): [string, string] {\n const space = title.lastIndexOf(' ');\n\n return space === -1 ? [title, ''] : [title.slice(0, space), title.slice(space + 1)];\n}\n","/** Attribute parsing and shared helpers for the custom elements. */\nimport {\n toIsoDate,\n type CalendarDate,\n type CalendarSystem,\n type Weekday,\n} from '@nepdatejs/core';\nimport type { EventMarker, HolidayInput, HolidayLookup } from '@nepdatejs/calendar';\nimport type { PanelLayout } from '@nepdatejs/dom';\nimport type { Theme } from './picker-view';\n\n/** Lets this module load during server rendering, where HTMLElement does not exist. */\nexport const Base: typeof HTMLElement =\n typeof HTMLElement === 'undefined'\n ? (Object as unknown as typeof HTMLElement)\n : HTMLElement;\n\n/** Options that cannot be attributes: functions and lists. Set them as properties. */\nexport interface RichProps {\n holidays?: readonly HolidayInput[] | HolidayLookup | undefined;\n events?: ((date: CalendarDate) => readonly EventMarker[]) | undefined;\n isDateDisabled?: ((date: CalendarDate) => boolean) | undefined;\n}\n\nexport function str(element: Element, name: string): string | undefined {\n return element.getAttribute(name) ?? undefined;\n}\nexport function bool(element: Element, name: string): boolean {\n return element.hasAttribute(name);\n}\n/** An attribute that is on unless set to \"false\". */\nexport function onUnlessFalse(element: Element, name: string): boolean | undefined {\n const value = element.getAttribute(name);\n return value === null ? undefined : value !== 'false';\n}\nexport function calendarAttr(element: Element, name: string): CalendarSystem | undefined {\n const value = element.getAttribute(name)?.toUpperCase();\n return value === 'BS' || value === 'AD' ? value : undefined;\n}\nexport function weekday(element: Element, name: string): Weekday | undefined {\n const value = Number(element.getAttribute(name) ?? NaN);\n return Number.isInteger(value) && value >= 0 && value <= 6\n ? (value as Weekday)\n : undefined;\n}\nexport function int(element: Element, name: string): number | undefined {\n const value = Number(element.getAttribute(name) ?? NaN);\n return Number.isInteger(value) ? value : undefined;\n}\nexport function theme(element: Element): Theme | undefined {\n const value = element.getAttribute('theme');\n return value === 'light' || value === 'dark' || value === 'auto' ? value : undefined;\n}\n\nexport function panelLayout(element: Element): PanelLayout | undefined {\n const value = element.getAttribute('panel-layout');\n return value === 'auto' || value === 'popover' || value === 'sheet' ? value : undefined;\n}\n\n/** presets=\"today, last7Days\" → ['today', 'last7Days']; unknown ids show as disabled. */\nexport function presetIds(element: Element): readonly string[] | undefined {\n const value = element.getAttribute('presets');\n return value === null\n ? undefined\n : value\n .split(',')\n .map((id) => id.trim())\n .filter(Boolean);\n}\n\n/** Stop the inner inputs' native change events: the element fires its own. */\nexport function swallowInnerChange(host: HTMLElement): void {\n host.addEventListener(\n 'change',\n (event) => {\n if (event.target !== host) {\n event.stopPropagation();\n }\n },\n true,\n );\n}\n\nexport function isoOf(date: CalendarDate | null): string {\n return date ? toIsoDate(date) : '';\n}\n","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","/** The tag names this package registers. */\nexport const ELEMENT_NAMES: {\n readonly datePicker: 'nep-date-picker';\n readonly calendar: 'nep-calendar';\n readonly dateRangePicker: 'nep-date-range-picker';\n readonly dateTimePicker: 'nep-date-time-picker';\n readonly multiDatePicker: 'nep-multi-date-picker';\n} = Object.freeze({\n datePicker: 'nep-date-picker',\n calendar: 'nep-calendar',\n dateRangePicker: 'nep-date-range-picker',\n dateTimePicker: 'nep-date-time-picker',\n multiDatePicker: 'nep-multi-date-picker',\n});\n\n/** Define one element unless the name is taken. No-op during server rendering. */\nexport function defineElement(\n name: string,\n element: CustomElementConstructor,\n registry?: CustomElementRegistry,\n): void {\n const target =\n registry ?? (typeof customElements === 'undefined' ? undefined : customElements);\n if (target && !target.get(name)) {\n target.define(name, element);\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","import { addDays, addMonths, compareDates, differenceInDays, endOfMonth, endOfWeek, endOfYear, fiscalYear, fiscalYearRange, formatDate, formatMessage, formatNumber, formatTime, fromIsoDate, fromIsoDateTime, getConfig, getLocale, isWithin, now, parseDate, parseTime, startOfMonth, startOfWeek, startOfYear, toCalendar, toIsoDate, toIsoDateTime, today } from \"@nepdatejs/core\";\nimport { createCalendar, isDayList } from \"@nepdatejs/calendar\";\n//#region src/mask.ts\nconst DIGIT = \"[0-9०-९]\";\nconst DIGITS_ONLY = new RegExp(`^${DIGIT}{1,8}$`);\nconst YEAR_MONTH = new RegExp(`^(${DIGIT}{4}-${DIGIT}{2})(${DIGIT}?)$`);\n/**\n* Add the dashes of YYYY-MM-DD while the user types digits: \"2083\" becomes\n* \"2083-\", \"208306\" becomes \"2083-06-\" and a pasted \"20830624\" becomes\n* \"2083-06-24\". ASCII and Devanagari digits keep their script, and a\n* separator typed straight after a dash is dropped, so typing the dashes\n* yourself works too. Only text that grew at the end (typing, or a paste into\n* an empty field) is touched: deleting, editing in the middle and other\n* separators (\"2083/6/4\") are left as the user wrote them. Pure.\n*/\nfunction maskDateText(next, previous = \"\") {\n\tif (next.length <= previous.length || !next.startsWith(previous)) return next;\n\tif (previous.endsWith(\"-\") && /^[-./]$/.test(next.slice(previous.length))) return previous;\n\tif (DIGITS_ONLY.test(next)) {\n\t\tlet out = next.slice(0, 4);\n\t\tif (next.length >= 4) out += \"-\";\n\t\tout += next.slice(4, 6);\n\t\tif (next.length >= 6) out += \"-\";\n\t\treturn out + next.slice(6);\n\t}\n\tconst yearMonth = YEAR_MONTH.exec(next);\n\tif (yearMonth) return `${yearMonth[1] ?? \"\"}-${yearMonth[2] ?? \"\"}`;\n\treturn next;\n}\n//#endregion\n//#region src/input.ts\n/**\n* Read what the user typed: year first, ASCII or Devanagari digits, in the\n* calendar on screen. All date work is done by core (docs/plan D-005).\n*/\nfunction parseInput(text, calendar, limits, locale, format = \"iso\") {\n\tif (text.trim() === \"\") return { kind: \"empty\" };\n\tconst messages = getLocale(locale).messages;\n\tconst date = parseDate(text, calendar);\n\tif (!date) return {\n\t\tkind: \"error\",\n\t\terror: {\n\t\t\tcode: \"format\",\n\t\t\tmessage: messages.invalidFormat[calendar]\n\t\t}\n\t};\n\tconst error = checkDate(date, calendar, limits, locale, format);\n\treturn error ? {\n\t\tkind: \"error\",\n\t\terror\n\t} : {\n\t\tkind: \"date\",\n\t\tdate: toCalendar(date, \"AD\")\n\t};\n}\n/** Null when the day is allowed; otherwise a translated error. */\nfunction checkDate(date, calendar, limits, locale, format = \"iso\") {\n\tconst messages = getLocale(locale).messages;\n\tif (!isWithin(date, limits.min, limits.max)) {\n\t\tconst values = {\n\t\t\tmin: formatInput(limits.min, calendar, format, locale),\n\t\t\tmax: formatInput(limits.max, calendar, format, locale)\n\t\t};\n\t\tconst template = limits.hasMin === limits.hasMax ? messages.outOfRange : limits.hasMin ? messages.onOrAfter : messages.onOrBefore;\n\t\treturn {\n\t\t\tcode: \"range\",\n\t\t\tmessage: formatMessage(template, values)\n\t\t};\n\t}\n\tif (limits.isDateDisabled?.(date)) return {\n\t\tcode: \"disabled\",\n\t\tmessage: messages.unavailable\n\t};\n\treturn null;\n}\n/** How the input shows a date: in the calendar on screen, with the locale's digits. */\nfunction formatInput(date, calendar, format, locale) {\n\treturn date ? formatDate(toCalendar(date, calendar), format, locale) : \"\";\n}\n/** \"10 October 2026 AD\": the same day in the other calendar. */\nfunction equivalentText(date, calendar, locale) {\n\tif (!date) return null;\n\tconst other = calendar === \"BS\" ? \"AD\" : \"BS\";\n\treturn `${formatDate(toCalendar(date, other), \"long\", locale)} ${getLocale(locale).calendarNames[other]}`;\n}\nfunction placeholderText(calendar, locale) {\n\treturn `YYYY-MM-DD (${getLocale(locale).calendarNames[calendar]})`;\n}\n/** An AD \"YYYY-MM-DD\" string as a date; anything else is null. */\nfunction readIso(value) {\n\treturn value ? fromIsoDate(value) : null;\n}\nfunction detailOf(date) {\n\treturn date ? Object.freeze({\n\t\tad: toCalendar(date, \"AD\"),\n\t\tbs: toCalendar(date, \"BS\")\n\t}) : null;\n}\n//#endregion\n//#region src/base.ts\n/** The panel calendar's options that come straight from the picker's options. */\nfunction panelOptions(options, calendar) {\n\treturn {\n\t\tcalendar,\n\t\tlocale: options.locale,\n\t\tmin: readIso(options.min),\n\t\tmax: readIso(options.max),\n\t\tisDateDisabled: options.isDateDisabled,\n\t\tholidays: options.holidays,\n\t\tevents: options.events,\n\t\tshowOtherCalendar: options.showOtherCalendar,\n\t\tweekStartsOn: options.weekStartsOn,\n\t\tweekendDays: options.weekendDays,\n\t\ttoday: options.today\n\t};\n}\n/** What may be typed: the panel's effective range, so typing and clicking agree. */\nfunction inputLimits(options, panel) {\n\tconst { minDate, maxDate } = panel.getState();\n\treturn {\n\t\tmin: minDate,\n\t\tmax: maxDate,\n\t\thasMin: readIso(options.min) !== null,\n\t\thasMax: readIso(options.max) !== null,\n\t\tisDateDisabled: options.isDateDisabled\n\t};\n}\nfunction localeOf(options) {\n\treturn options.locale ?? getConfig().defaultLocale;\n}\nfunction formatOf(options) {\n\treturn options.displayFormat ?? \"iso\";\n}\nfunction todayOf(options) {\n\treturn options.today ?? today(\"AD\");\n}\nfunction isRange(selection) {\n\treturn !isDayList(selection) && !(\"calendar\" in selection);\n}\nfunction isSingleDay(selection) {\n\treturn !isDayList(selection) && \"calendar\" in selection;\n}\n/**\n* Listener set plus batching: changes made inside `act` notify once at the end,\n* and callbacks queued with `after` run after listeners have seen the new state.\n*/\nfunction createEmitter(rebuild) {\n\tconst listeners = /* @__PURE__ */ new Set();\n\tconst queued = [];\n\tlet depth = 0;\n\tfunction notify() {\n\t\trebuild();\n\t\tfor (const listener of [...listeners]) listener();\n\t}\n\treturn {\n\t\tsubscribe(listener) {\n\t\t\tlisteners.add(listener);\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener);\n\t\t\t};\n\t\t},\n\t\tact(change) {\n\t\t\tdepth++;\n\t\t\ttry {\n\t\t\t\tchange();\n\t\t\t} finally {\n\t\t\t\tdepth--;\n\t\t\t}\n\t\t\tif (depth === 0) {\n\t\t\t\tnotify();\n\t\t\t\tfor (const callback of queued.splice(0)) callback();\n\t\t\t}\n\t\t},\n\t\tafter(callback) {\n\t\t\tqueued.push(callback);\n\t\t},\n\t\tnotify() {\n\t\t\tif (depth === 0) notify();\n\t\t},\n\t\tclear() {\n\t\t\tlisteners.clear();\n\t\t}\n\t};\n}\n//#endregion\n//#region src/presets.ts\n/** The date a built-in single preset stands for. */\nfunction resolveSinglePreset(id, context) {\n\tconst today = toCalendar(context.today, context.calendar);\n\tswitch (id) {\n\t\tcase \"today\": return today;\n\t\tcase \"yesterday\": return addDays(today, -1);\n\t\tcase \"tomorrow\": return addDays(today, 1);\n\t}\n}\n/** The range a built-in range preset stands for, in the calendar on screen. */\nfunction resolveRangePreset(id, context) {\n\tconst today = toCalendar(context.today, context.calendar);\n\tconst week = context.weekStartsOn;\n\tswitch (id) {\n\t\tcase \"today\": return {\n\t\t\tstart: today,\n\t\t\tend: today\n\t\t};\n\t\tcase \"yesterday\": {\n\t\t\tconst day = addDays(today, -1);\n\t\t\treturn {\n\t\t\t\tstart: day,\n\t\t\t\tend: day\n\t\t\t};\n\t\t}\n\t\tcase \"thisWeek\": return {\n\t\t\tstart: startOfWeek(today, week),\n\t\t\tend: endOfWeek(today, week)\n\t\t};\n\t\tcase \"lastWeek\": {\n\t\t\tconst day = addDays(today, -7);\n\t\t\treturn {\n\t\t\t\tstart: startOfWeek(day, week),\n\t\t\t\tend: endOfWeek(day, week)\n\t\t\t};\n\t\t}\n\t\tcase \"last7Days\": return {\n\t\t\tstart: addDays(today, -6),\n\t\t\tend: today\n\t\t};\n\t\tcase \"last30Days\": return {\n\t\t\tstart: addDays(today, -29),\n\t\t\tend: today\n\t\t};\n\t\tcase \"thisMonth\": return {\n\t\t\tstart: startOfMonth(today),\n\t\t\tend: endOfMonth(today)\n\t\t};\n\t\tcase \"lastMonth\": {\n\t\t\tconst month = addMonths(startOfMonth(today), -1);\n\t\t\treturn {\n\t\t\t\tstart: month,\n\t\t\t\tend: endOfMonth(month)\n\t\t\t};\n\t\t}\n\t\tcase \"thisYear\": return {\n\t\t\tstart: startOfYear(today),\n\t\t\tend: endOfYear(today)\n\t\t};\n\t\tcase \"thisFiscalYear\": {\n\t\t\tconst fy = fiscalYear(today);\n\t\t\treturn {\n\t\t\t\tstart: fy.firstDay,\n\t\t\t\tend: fy.lastDay\n\t\t\t};\n\t\t}\n\t\tcase \"lastFiscalYear\": {\n\t\t\tconst fy = fiscalYearRange(fiscalYear(today).startYear - 1);\n\t\t\treturn {\n\t\t\t\tstart: fy.firstDay,\n\t\t\t\tend: fy.lastDay\n\t\t\t};\n\t\t}\n\t}\n}\n/** Shared by both pickers: label + resolver for a preset entry. */\nfunction describePreset(preset, locale, resolveBuiltIn) {\n\tif (typeof preset === \"string\") return {\n\t\tid: preset,\n\t\tlabel: getLocale(locale).presets[preset] ?? preset,\n\t\tresolve: (context) => resolveBuiltIn(preset, context)\n\t};\n\treturn preset;\n}\n//#endregion\n//#region src/picker.ts\n/**\n* A BS/AD date picker without UI: typed text ⇄ value, validation, the BS/AD\n* switch and open/close, plus the panel's calendar store. The value is always\n* an AD \"YYYY-MM-DD\" string (docs/plan D-003); all date work goes through core.\n*\n* Like the calendar, the picker keeps its own value; passing `value` through\n* setOptions replaces it (controlled use). Passing back the value the user just\n* typed leaves their text alone, so the cursor does not jump.\n*/\nfunction createDatePicker(initial = {}) {\n\tlet options = { ...initial };\n\tlet calendar = options.calendar ?? options.defaultCalendar ?? \"BS\";\n\tlet date = readIso(options.value ?? options.defaultValue);\n\tlet value = date ? toIsoDate(date) : \"\";\n\tlet text = formatInput(date, calendar, formatOf(options), localeOf(options));\n\tlet error = null;\n\tlet open = false;\n\tlet destroyed = false;\n\tconst panel = createCalendar({\n\t\t...panelOptions(options, calendar),\n\t\tselectionMode: \"single\",\n\t\tselected: date,\n\t\tonSelect: (selection) => {\n\t\t\tif (isSingleDay(selection)) pick(selection);\n\t\t}\n\t});\n\tlet snapshot = build();\n\tconst emitter = createEmitter(() => {\n\t\tsnapshot = build();\n\t});\n\tpanel.subscribe(() => {\n\t\temitter.notify();\n\t});\n\tfunction build() {\n\t\tconst locale = localeOf(options);\n\t\treturn Object.freeze({\n\t\t\tvalue,\n\t\t\tdate: detailOf(date),\n\t\t\ttext,\n\t\t\tcalendar,\n\t\t\tcanSwitchCalendar: options.calendar === void 0,\n\t\t\topen: open || options.inline === true,\n\t\t\tinline: options.inline === true,\n\t\t\terror,\n\t\t\tequivalentText: error ? null : equivalentText(date, calendar, locale),\n\t\t\tplaceholder: placeholderText(calendar, locale),\n\t\t\tpresets: presetStates(),\n\t\t\tcalendarState: panel.getState()\n\t\t});\n\t}\n\tfunction presetContext() {\n\t\treturn {\n\t\t\ttoday: toCalendar(todayOf(options), \"AD\"),\n\t\t\tcalendar,\n\t\t\tweekStartsOn: options.weekStartsOn ?? getConfig().weekStartsOn\n\t\t};\n\t}\n\t/** Each shortcut's date, or null when it cannot be used now. */\n\tfunction resolvedPresets() {\n\t\tconst context = presetContext();\n\t\tconst limits = inputLimits(options, panel);\n\t\treturn (options.presets ?? []).map((preset) => {\n\t\t\tconst entry = describePreset(preset, options.locale, resolveSinglePreset);\n\t\t\tconst date = (() => {\n\t\t\t\ttry {\n\t\t\t\t\tconst candidate = entry.resolve(context);\n\t\t\t\t\treturn checkDate(candidate, calendar, limits, localeOf(options)) ? null : candidate;\n\t\t\t\t} catch {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})();\n\t\t\treturn {\n\t\t\t\tid: entry.id,\n\t\t\t\tlabel: entry.label,\n\t\t\t\tdate\n\t\t\t};\n\t\t});\n\t}\n\tfunction presetStates() {\n\t\treturn resolvedPresets().map(({ id, label, date }) => Object.freeze({\n\t\t\tid,\n\t\t\tlabel,\n\t\t\tisActive: date !== null && toIsoDate(date) === value,\n\t\t\tisDisabled: date === null\n\t\t}));\n\t}\n\tfunction syncPanel(showDate) {\n\t\tpanel.setOptions({\n\t\t\t...panelOptions(options, calendar),\n\t\t\tselected: date,\n\t\t\t...showDate && date ? { visibleMonth: date } : {}\n\t\t});\n\t}\n\t/** Change the value; queue onChange when it differs and the user caused it. */\n\tfunction setDate(next, byUser) {\n\t\tconst nextValue = next ? toIsoDate(next) : \"\";\n\t\tconst changed = nextValue !== value;\n\t\tdate = next;\n\t\tvalue = nextValue;\n\t\tsyncPanel(next !== null);\n\t\tif (changed && byUser) {\n\t\t\tconst detail = detailOf(next);\n\t\t\temitter.after(() => options.onChange?.(nextValue, detail));\n\t\t}\n\t}\n\tfunction format(next) {\n\t\treturn formatInput(next, calendar, formatOf(options), localeOf(options));\n\t}\n\tfunction pick(selection) {\n\t\temitter.act(() => {\n\t\t\tconst next = toCalendar(selection, \"AD\");\n\t\t\terror = null;\n\t\t\ttext = format(next);\n\t\t\tsetDate(next, true);\n\t\t\tif (options.closeOnSelect ?? true) open = false;\n\t\t});\n\t}\n\tconst actions = {\n\t\ttype(next) {\n\t\t\tif (destroyed) return;\n\t\t\temitter.act(() => {\n\t\t\t\ttext = options.mask === false ? next : maskDateText(next, text);\n\t\t\t\tconst result = parseInput(text, calendar, inputLimits(options, panel), localeOf(options), formatOf(options));\n\t\t\t\terror = result.kind === \"error\" ? result.error : null;\n\t\t\t\tsetDate(result.kind === \"date\" ? result.date : null, true);\n\t\t\t});\n\t\t},\n\t\tblur() {\n\t\t\temitter.act(() => {\n\t\t\t\tif (!error) text = format(date);\n\t\t\t});\n\t\t},\n\t\tclear() {\n\t\t\temitter.act(() => {\n\t\t\t\ttext = \"\";\n\t\t\t\terror = null;\n\t\t\t\tsetDate(null, true);\n\t\t\t});\n\t\t},\n\t\tsetValue(next) {\n\t\t\temitter.act(() => {\n\t\t\t\tapplyValue(next);\n\t\t\t});\n\t\t},\n\t\topen() {\n\t\t\temitter.act(() => {\n\t\t\t\topen = true;\n\t\t\t\tpanel.actions.goTo(date ?? todayOf(options));\n\t\t\t});\n\t\t},\n\t\tclose() {\n\t\t\temitter.act(() => {\n\t\t\t\topen = false;\n\t\t\t});\n\t\t},\n\t\ttoggle() {\n\t\t\tif (open) actions.close();\n\t\t\telse actions.open();\n\t\t},\n\t\tswitchCalendar(next) {\n\t\t\tif (options.calendar !== void 0 || next === calendar || destroyed) return;\n\t\t\temitter.act(() => {\n\t\t\t\tcalendar = next;\n\t\t\t\tif (!error) text = format(date);\n\t\t\t\tsyncPanel(date !== null);\n\t\t\t\temitter.after(() => options.onCalendarChange?.(next));\n\t\t\t});\n\t\t},\n\t\tselect(day) {\n\t\t\tlet picked = false;\n\t\t\tif (!destroyed) emitter.act(() => {\n\t\t\t\tpicked = panel.actions.select(day);\n\t\t\t});\n\t\t\treturn picked;\n\t\t},\n\t\tselectToday() {\n\t\t\treturn actions.select(todayOf(options));\n\t\t},\n\t\treset() {\n\t\t\temitter.act(() => {\n\t\t\t\tconst next = readIso(options.defaultValue);\n\t\t\t\terror = null;\n\t\t\t\ttext = format(next);\n\t\t\t\tsetDate(next, true);\n\t\t\t});\n\t\t},\n\t\tapplyPreset(id) {\n\t\t\tconst preset = resolvedPresets().find((entry) => entry.id === id);\n\t\t\tif (destroyed || !preset?.date) return false;\n\t\t\tpick(preset.date);\n\t\t\treturn true;\n\t\t}\n\t};\n\t/** An outside value: replaces the text only when it is a different value (echo guard). */\n\tfunction applyValue(next) {\n\t\tconst nextDate = readIso(next);\n\t\tif ((nextDate ? toIsoDate(nextDate) : \"\") === value) return;\n\t\terror = null;\n\t\ttext = format(nextDate);\n\t\tsetDate(nextDate, false);\n\t}\n\treturn {\n\t\tgetState: () => snapshot,\n\t\tsubscribe: (listener) => emitter.subscribe(listener),\n\t\tsetOptions(changes) {\n\t\t\tif (destroyed) return;\n\t\t\temitter.act(() => {\n\t\t\t\tconst before = {\n\t\t\t\t\tcalendar,\n\t\t\t\t\tlocale: localeOf(options),\n\t\t\t\t\tformat: formatOf(options)\n\t\t\t\t};\n\t\t\t\toptions = {\n\t\t\t\t\t...options,\n\t\t\t\t\t...changes\n\t\t\t\t};\n\t\t\t\tif (options.calendar !== void 0) calendar = options.calendar;\n\t\t\t\tif (\"value\" in changes) applyValue(changes.value);\n\t\t\t\tif ((before.calendar !== calendar || before.locale !== localeOf(options) || before.format !== formatOf(options)) && !error) text = format(date);\n\t\t\t\tsyncPanel(false);\n\t\t\t});\n\t\t},\n\t\tactions,\n\t\tcalendar: panel,\n\t\tdestroy() {\n\t\t\tdestroyed = true;\n\t\t\tpanel.destroy();\n\t\t\temitter.clear();\n\t\t}\n\t};\n}\n//#endregion\n//#region src/range.ts\n/**\n* A BS/AD date range picker without UI: two typed fields (start, end), a panel\n* calendar in range mode, minDays/maxDays checks and the BS/AD switch. Values\n* are AD \"YYYY-MM-DD\" strings; an unfinished or invalid end is \"\".\n*/\nfunction createDateRangePicker(initial = {}) {\n\tlet options = { ...initial };\n\tlet calendar = options.calendar ?? options.defaultCalendar ?? \"BS\";\n\tlet start = readIso(options.value?.start ?? options.defaultValue?.start);\n\tlet end = readIso(options.value?.end ?? options.defaultValue?.end);\n\t[start, end] = ordered(start, end);\n\tlet value = valueOf(start, end);\n\tlet startText = format(start);\n\tlet endText = format(end);\n\tlet error = null;\n\tlet open = false;\n\tlet destroyed = false;\n\tconst panel = createCalendar({\n\t\t...panelOptions(options, calendar),\n\t\tselectionMode: \"range\",\n\t\tselected: {\n\t\t\tstart,\n\t\t\tend\n\t\t},\n\t\tonSelect: (selection) => {\n\t\t\tif (isRange(selection)) pick(selection.start, selection.end);\n\t\t}\n\t});\n\tlet snapshot = build();\n\tconst emitter = createEmitter(() => {\n\t\tsnapshot = build();\n\t});\n\tpanel.subscribe(() => {\n\t\temitter.notify();\n\t});\n\tfunction format(date) {\n\t\treturn formatInput(date, calendar, formatOf(options), localeOf(options));\n\t}\n\tfunction build() {\n\t\tconst locale = localeOf(options);\n\t\treturn Object.freeze({\n\t\t\tvalue,\n\t\t\tdate: Object.freeze({\n\t\t\t\tstart: detailOf(start),\n\t\t\t\tend: detailOf(end)\n\t\t\t}),\n\t\t\tstartText,\n\t\t\tendText,\n\t\t\tcalendar,\n\t\t\tcanSwitchCalendar: options.calendar === void 0,\n\t\t\topen: open || options.inline === true,\n\t\t\tinline: options.inline === true,\n\t\t\terror,\n\t\t\tequivalentText: Object.freeze({\n\t\t\t\tstart: error?.field === \"start\" ? null : equivalentText(start, calendar, locale),\n\t\t\t\tend: error?.field === \"end\" ? null : equivalentText(end, calendar, locale)\n\t\t\t}),\n\t\t\tplaceholder: placeholderText(calendar, locale),\n\t\t\tpresets: presetStates(),\n\t\t\tcalendarState: panel.getState()\n\t\t});\n\t}\n\tfunction presetContext() {\n\t\treturn {\n\t\t\ttoday: toCalendar(todayOf(options), \"AD\"),\n\t\t\tcalendar,\n\t\t\tweekStartsOn: options.weekStartsOn ?? getConfig().weekStartsOn\n\t\t};\n\t}\n\t/** Each shortcut's range, or null when it cannot be used now. */\n\tfunction resolvedPresets() {\n\t\tconst context = presetContext();\n\t\tconst limits = inputLimits(options, panel);\n\t\tconst locale = localeOf(options);\n\t\treturn (options.presets ?? []).map((preset) => {\n\t\t\tconst entry = describePreset(preset, options.locale, resolveRangePreset);\n\t\t\tconst range = (() => {\n\t\t\t\ttry {\n\t\t\t\t\tconst candidate = entry.resolve(context);\n\t\t\t\t\tconst from = toCalendar(candidate.start, \"AD\");\n\t\t\t\t\tconst to = toCalendar(candidate.end, \"AD\");\n\t\t\t\t\treturn compareDates(from, to) <= 0 && !checkDate(from, calendar, limits, locale) && !checkDate(to, calendar, limits, locale) && lengthError(from, to) === null ? candidate : null;\n\t\t\t\t} catch {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t})();\n\t\t\treturn {\n\t\t\t\tid: entry.id,\n\t\t\t\tlabel: entry.label,\n\t\t\t\trange\n\t\t\t};\n\t\t});\n\t}\n\tfunction presetStates() {\n\t\treturn resolvedPresets().map(({ id, label, range }) => Object.freeze({\n\t\t\tid,\n\t\t\tlabel,\n\t\t\tisActive: range !== null && toIsoDate(range.start) === value.start && toIsoDate(range.end) === value.end,\n\t\t\tisDisabled: range === null\n\t\t}));\n\t}\n\tfunction syncPanel() {\n\t\tpanel.setOptions({\n\t\t\t...panelOptions(options, calendar),\n\t\t\tselected: {\n\t\t\t\tstart,\n\t\t\t\tend\n\t\t\t},\n\t\t\t...start ? { visibleMonth: start } : {}\n\t\t});\n\t}\n\t/** Too short or too long, or null. Counts both ends. */\n\tfunction lengthError(from, to) {\n\t\tconst days = differenceInDays(to, from) + 1;\n\t\tconst messages = getLocale(localeOf(options)).messages;\n\t\tif (options.minDays !== void 0 && days < options.minDays) return {\n\t\t\tfield: \"range\",\n\t\t\tcode: \"tooShort\",\n\t\t\tmessage: formatMessage(messages.rangeTooShort, { min: String(options.minDays) })\n\t\t};\n\t\tif (options.maxDays !== void 0 && days > options.maxDays) return {\n\t\t\tfield: \"range\",\n\t\t\tcode: \"tooLong\",\n\t\t\tmessage: formatMessage(messages.rangeTooLong, { max: String(options.maxDays) })\n\t\t};\n\t\treturn null;\n\t}\n\t/** Store the dates, keep the panel in step, and queue onChange when the value moved. */\n\tfunction commit(nextStart, nextEnd, byUser) {\n\t\tstart = nextStart;\n\t\tend = nextEnd;\n\t\tconst next = valueOf(start, end);\n\t\tconst changed = next.start !== value.start || next.end !== value.end;\n\t\tvalue = next;\n\t\tsyncPanel();\n\t\tif (changed && byUser) {\n\t\t\tconst detail = Object.freeze({\n\t\t\t\tstart: detailOf(start),\n\t\t\t\tend: detailOf(end)\n\t\t\t});\n\t\t\temitter.after(() => options.onChange?.(next, detail));\n\t\t}\n\t}\n\t/** Put the ends in order, check the length, then commit. False when the length is not allowed. */\n\tfunction settle(nextStart, nextEnd) {\n\t\tconst [a, b] = ordered(nextStart, nextEnd);\n\t\tif (a !== nextStart) [startText, endText] = [endText, startText];\n\t\tconst tooFar = a && b ? lengthError(a, b) : null;\n\t\terror = tooFar ?? error;\n\t\tcommit(a, tooFar ? null : b, true);\n\t\treturn tooFar === null;\n\t}\n\tfunction pick(from, to) {\n\t\temitter.act(() => {\n\t\t\tconst a = from ? toCalendar(from, \"AD\") : null;\n\t\t\tconst b = to ? toCalendar(to, \"AD\") : null;\n\t\t\terror = null;\n\t\t\tstartText = format(a);\n\t\t\tendText = format(b);\n\t\t\tconst allowed = settle(a, b);\n\t\t\tif (b && allowed && (options.closeOnSelect ?? true)) open = false;\n\t\t});\n\t}\n\tconst actions = {\n\t\ttype(field, text) {\n\t\t\tif (destroyed) return;\n\t\t\temitter.act(() => {\n\t\t\t\tif (options.mask !== false) text = maskDateText(text, field === \"start\" ? startText : endText);\n\t\t\t\tif (field === \"start\") startText = text;\n\t\t\t\telse endText = text;\n\t\t\t\tconst result = parseInput(text, calendar, inputLimits(options, panel), localeOf(options), formatOf(options));\n\t\t\t\tconst date = result.kind === \"date\" ? result.date : null;\n\t\t\t\terror = result.kind === \"error\" ? {\n\t\t\t\t\t...result.error,\n\t\t\t\t\tfield\n\t\t\t\t} : null;\n\t\t\t\tconst other = field === \"start\" ? end : start;\n\t\t\t\tconst otherError = other ? checkDate(other, calendar, inputLimits(options, panel), localeOf(options)) : null;\n\t\t\t\tif (!error && otherError) error = {\n\t\t\t\t\t...otherError,\n\t\t\t\t\tfield: field === \"start\" ? \"end\" : \"start\"\n\t\t\t\t};\n\t\t\t\tif (field === \"start\") settle(date, end);\n\t\t\t\telse settle(start, date);\n\t\t\t});\n\t\t},\n\t\tblur(field) {\n\t\t\temitter.act(() => {\n\t\t\t\tif (error?.field === field) return;\n\t\t\t\tif (field === \"start\") startText = format(start);\n\t\t\t\telse if (end || error?.field !== \"range\") endText = format(end);\n\t\t\t});\n\t\t},\n\t\tclear() {\n\t\t\temitter.act(() => {\n\t\t\t\tstartText = \"\";\n\t\t\t\tendText = \"\";\n\t\t\t\terror = null;\n\t\t\t\tcommit(null, null, true);\n\t\t\t});\n\t\t},\n\t\tsetValue(next) {\n\t\t\temitter.act(() => {\n\t\t\t\tapplyValue(next);\n\t\t\t});\n\t\t},\n\t\topen() {\n\t\t\temitter.act(() => {\n\t\t\t\topen = true;\n\t\t\t\tpanel.actions.goTo(start ?? todayOf(options));\n\t\t\t});\n\t\t},\n\t\tclose() {\n\t\t\temitter.act(() => {\n\t\t\t\topen = false;\n\t\t\t});\n\t\t},\n\t\ttoggle() {\n\t\t\tif (open) actions.close();\n\t\t\telse actions.open();\n\t\t},\n\t\tswitchCalendar(next) {\n\t\t\tif (options.calendar !== void 0 || next === calendar || destroyed) return;\n\t\t\temitter.act(() => {\n\t\t\t\tcalendar = next;\n\t\t\t\tif (!error) {\n\t\t\t\t\tstartText = format(start);\n\t\t\t\t\tendText = format(end);\n\t\t\t\t}\n\t\t\t\tsyncPanel();\n\t\t\t\temitter.after(() => options.onCalendarChange?.(next));\n\t\t\t});\n\t\t},\n\t\tselect(day) {\n\t\t\tlet picked = false;\n\t\t\tif (!destroyed) emitter.act(() => {\n\t\t\t\tpicked = panel.actions.select(day);\n\t\t\t});\n\t\t\treturn picked;\n\t\t},\n\t\tapplyPreset(id) {\n\t\t\tconst preset = resolvedPresets().find((entry) => entry.id === id);\n\t\t\tif (destroyed || !preset?.range) return false;\n\t\t\tpick(preset.range.start, preset.range.end);\n\t\t\treturn true;\n\t\t},\n\t\treset() {\n\t\t\temitter.act(() => {\n\t\t\t\tconst [a, b] = ordered(readIso(options.defaultValue?.start), readIso(options.defaultValue?.end));\n\t\t\t\terror = null;\n\t\t\t\tstartText = format(a);\n\t\t\t\tendText = format(b);\n\t\t\t\tcommit(a, b, true);\n\t\t\t});\n\t\t}\n\t};\n\t/** An outside value: replaces the texts only when the value differs (echo guard). */\n\tfunction applyValue(next) {\n\t\tconst [a, b] = ordered(readIso(next?.start), readIso(next?.end));\n\t\tconst incoming = valueOf(a, b);\n\t\tif (incoming.start === value.start && incoming.end === value.end) return;\n\t\terror = null;\n\t\tstartText = format(a);\n\t\tendText = format(b);\n\t\tcommit(a, b, false);\n\t}\n\treturn {\n\t\tgetState: () => snapshot,\n\t\tsubscribe: (listener) => emitter.subscribe(listener),\n\t\tsetOptions(changes) {\n\t\t\tif (destroyed) return;\n\t\t\temitter.act(() => {\n\t\t\t\tconst before = {\n\t\t\t\t\tcalendar,\n\t\t\t\t\tlocale: localeOf(options),\n\t\t\t\t\tformat: formatOf(options)\n\t\t\t\t};\n\t\t\t\toptions = {\n\t\t\t\t\t...options,\n\t\t\t\t\t...changes\n\t\t\t\t};\n\t\t\t\tif (options.calendar !== void 0) calendar = options.calendar;\n\t\t\t\tif (\"value\" in changes) applyValue(changes.value);\n\t\t\t\tif ((before.calendar !== calendar || before.locale !== localeOf(options) || before.format !== formatOf(options)) && !error) {\n\t\t\t\t\tstartText = format(start);\n\t\t\t\t\tendText = format(end);\n\t\t\t\t}\n\t\t\t\tsyncPanel();\n\t\t\t});\n\t\t},\n\t\tactions,\n\t\tcalendar: panel,\n\t\tdestroy() {\n\t\t\tdestroyed = true;\n\t\t\tpanel.destroy();\n\t\t\temitter.clear();\n\t\t}\n\t};\n}\nfunction ordered(a, b) {\n\treturn a && b && compareDates(b, a) < 0 ? [b, a] : [a, b];\n}\nfunction valueOf(start, end) {\n\treturn Object.freeze({\n\t\tstart: start ? toIsoDate(start) : \"\",\n\t\tend: end ? toIsoDate(end) : \"\"\n\t});\n}\n//#endregion\n//#region src/multi.ts\nconst SEPARATOR = /[,\\s\\u060c]+/;\n/**\n* A picker for several separate days (PICK-001). The value is a sorted list of\n* AD \"YYYY-MM-DD\" strings; the input lists the days in the calendar on screen,\n* separated by \", \", and clicking a day in the panel adds or removes it. The\n* list is always written as YYYY-MM-DD so it can be typed back.\n*/\nfunction createMultiDatePicker(initial = {}) {\n\tlet options = { ...initial };\n\tlet calendar = options.calendar ?? options.defaultCalendar ?? \"BS\";\n\tlet dates = readAll(options.value ?? options.defaultValue);\n\tlet value = valuesOf(dates);\n\tlet text = format(dates);\n\tlet error = null;\n\t/** False while the typed text has a problem: then it is left as typed. */\n\tlet textOk = true;\n\tlet open = false;\n\tlet destroyed = false;\n\tconst panel = createCalendar({\n\t\t...panelOptions(options, calendar),\n\t\tselectionMode: \"multiple\",\n\t\tselected: dates,\n\t\tonSelect: (selection) => {\n\t\t\tif (isDayList(selection)) pick(selection.map((day) => toCalendar(day, \"AD\")));\n\t\t}\n\t});\n\tlet snapshot = build();\n\tconst emitter = createEmitter(() => {\n\t\tsnapshot = build();\n\t});\n\tpanel.subscribe(() => {\n\t\temitter.notify();\n\t});\n\tfunction build() {\n\t\treturn Object.freeze({\n\t\t\tvalue,\n\t\t\tdates: detailsOf(dates),\n\t\t\ttext,\n\t\t\tcalendar,\n\t\t\tcanSwitchCalendar: options.calendar === void 0,\n\t\t\topen: open || options.inline === true,\n\t\t\tinline: options.inline === true,\n\t\t\terror,\n\t\t\tplaceholder: placeholderText(calendar, localeOf(options)),\n\t\t\tcalendarState: panel.getState()\n\t\t});\n\t}\n\tfunction format(list) {\n\t\treturn list.map((day) => formatInput(day, calendar, \"iso\", localeOf(options))).join(\", \");\n\t}\n\tfunction tooMany(count) {\n\t\tconst max = options.maxDates;\n\t\treturn max !== void 0 && count > max ? {\n\t\t\tcode: \"tooMany\",\n\t\t\tmessage: formatMessage(getLocale(localeOf(options)).messages.tooManyDates, { max: String(max) })\n\t\t} : null;\n\t}\n\tfunction syncPanel() {\n\t\tpanel.setOptions({\n\t\t\t...panelOptions(options, calendar),\n\t\t\tselected: dates\n\t\t});\n\t}\n\t/** Change the value; queue onChange when it differs and the user caused it. */\n\tfunction setDates(next, byUser) {\n\t\tconst sorted = unique(next);\n\t\tconst nextValue = valuesOf(sorted);\n\t\tconst changed = nextValue.join() !== value.join();\n\t\tdates = sorted;\n\t\tvalue = nextValue;\n\t\tsyncPanel();\n\t\tif (changed && byUser) {\n\t\t\tconst details = detailsOf(sorted);\n\t\t\temitter.after(() => options.onChange?.(nextValue, details));\n\t\t}\n\t}\n\tfunction pick(next) {\n\t\temitter.act(() => {\n\t\t\terror = tooMany(next.length);\n\t\t\tif (error) {\n\t\t\t\tsyncPanel();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttext = format(unique(next));\n\t\t\ttextOk = true;\n\t\t\tsetDates(next, true);\n\t\t\tif (options.closeOnSelect === true) open = false;\n\t\t});\n\t}\n\tconst actions = {\n\t\ttype(next) {\n\t\t\tif (destroyed) return;\n\t\t\temitter.act(() => {\n\t\t\t\ttext = options.mask === false ? next : maskLast(next, text);\n\t\t\t\tconst limits = inputLimits(options, panel);\n\t\t\t\tconst parsed = [];\n\t\t\t\tlet firstError = null;\n\t\t\t\tfor (const token of text.split(SEPARATOR)) {\n\t\t\t\t\tconst result = parseInput(token, calendar, limits, localeOf(options));\n\t\t\t\t\tif (result.kind === \"date\") parsed.push(result.date);\n\t\t\t\t\telse if (result.kind === \"error\") firstError ?? (firstError = result.error);\n\t\t\t\t}\n\t\t\t\terror = firstError ?? tooMany(unique(parsed).length);\n\t\t\t\ttextOk = error === null;\n\t\t\t\tsetDates(parsed, true);\n\t\t\t});\n\t\t},\n\t\tblur() {\n\t\t\temitter.act(() => {\n\t\t\t\tif (textOk) text = format(dates);\n\t\t\t});\n\t\t},\n\t\tclear() {\n\t\t\temitter.act(() => {\n\t\t\t\ttext = \"\";\n\t\t\t\terror = null;\n\t\t\t\ttextOk = true;\n\t\t\t\tsetDates([], true);\n\t\t\t});\n\t\t},\n\t\tsetValue(next) {\n\t\t\temitter.act(() => {\n\t\t\t\tapplyValue(next);\n\t\t\t});\n\t\t},\n\t\topen() {\n\t\t\temitter.act(() => {\n\t\t\t\topen = true;\n\t\t\t\tconst first = dates[0];\n\t\t\t\tif (first) panel.actions.goTo(first);\n\t\t\t});\n\t\t},\n\t\tclose() {\n\t\t\temitter.act(() => {\n\t\t\t\topen = false;\n\t\t\t});\n\t\t},\n\t\ttoggle() {\n\t\t\tif (open) actions.close();\n\t\t\telse actions.open();\n\t\t},\n\t\tswitchCalendar(next) {\n\t\t\tif (options.calendar !== void 0 || next === calendar || destroyed) return;\n\t\t\temitter.act(() => {\n\t\t\t\tcalendar = next;\n\t\t\t\tif (textOk) text = format(dates);\n\t\t\t\tsyncPanel();\n\t\t\t\temitter.after(() => options.onCalendarChange?.(next));\n\t\t\t});\n\t\t},\n\t\tselect(day) {\n\t\t\tif (destroyed) return false;\n\t\t\tconst before = value;\n\t\t\temitter.act(() => {\n\t\t\t\tpanel.actions.select(day);\n\t\t\t});\n\t\t\treturn value !== before;\n\t\t},\n\t\tremove(iso) {\n\t\t\temitter.act(() => {\n\t\t\t\terror = null;\n\t\t\t\tconst next = dates.filter((day) => toIsoDate(day) !== iso);\n\t\t\t\ttext = format(next);\n\t\t\t\ttextOk = true;\n\t\t\t\tsetDates(next, true);\n\t\t\t});\n\t\t},\n\t\treset() {\n\t\t\temitter.act(() => {\n\t\t\t\tconst next = readAll(options.defaultValue);\n\t\t\t\terror = null;\n\t\t\t\ttext = format(next);\n\t\t\t\ttextOk = true;\n\t\t\t\tsetDates(next, true);\n\t\t\t});\n\t\t}\n\t};\n\t/** An outside value: replaces the text only when it is a different value (echo guard). */\n\tfunction applyValue(next) {\n\t\tconst nextDates = readAll(next);\n\t\tif (valuesOf(nextDates).join() === value.join()) return;\n\t\terror = null;\n\t\ttext = format(nextDates);\n\t\ttextOk = true;\n\t\tsetDates(nextDates, false);\n\t}\n\treturn {\n\t\tgetState: () => snapshot,\n\t\tsubscribe: (listener) => emitter.subscribe(listener),\n\t\tsetOptions(changes) {\n\t\t\tif (destroyed) return;\n\t\t\temitter.act(() => {\n\t\t\t\tconst before = {\n\t\t\t\t\tcalendar,\n\t\t\t\t\tlocale: localeOf(options)\n\t\t\t\t};\n\t\t\t\toptions = {\n\t\t\t\t\t...options,\n\t\t\t\t\t...changes\n\t\t\t\t};\n\t\t\t\tif (options.calendar !== void 0) calendar = options.calendar;\n\t\t\t\tif (\"value\" in changes) applyValue(changes.value);\n\t\t\t\tif ((before.calendar !== calendar || before.locale !== localeOf(options)) && textOk) text = format(dates);\n\t\t\t\tsyncPanel();\n\t\t\t});\n\t\t},\n\t\tactions,\n\t\tcalendar: panel,\n\t\tdestroy() {\n\t\t\tdestroyed = true;\n\t\t\tpanel.destroy();\n\t\t\temitter.clear();\n\t\t}\n\t};\n}\nfunction readAll(values) {\n\treturn unique((values ?? []).map(readIso).filter((day) => day !== null));\n}\nfunction unique(list) {\n\treturn [...new Map(list.map((day) => [toIsoDate(day), day])).entries()].sort(([a], [b]) => a < b ? -1 : 1).map(([, day]) => day);\n}\nfunction valuesOf(list) {\n\treturn Object.freeze(list.map((day) => toIsoDate(day)));\n}\nfunction detailsOf(list) {\n\treturn Object.freeze(list.map((day) => Object.freeze({\n\t\tad: day,\n\t\tbs: toCalendar(day, \"BS\")\n\t})));\n}\n/** Mask only the day being typed: the text after the last separator. */\nfunction maskLast(next, previous) {\n\tif (!next.startsWith(previous)) return next;\n\tconst match = /^(.*[,\\s\\u060c])?([^,\\s\\u060c]*)$/.exec(next);\n\tconst head = match?.[1] ?? \"\";\n\treturn head + maskDateText(match?.[2] ?? next, previous.length > head.length ? previous.slice(head.length) : \"\");\n}\n//#endregion\n//#region src/datetime.ts\n/**\n* A BS/AD date and time picker without UI. The date half is a regular date\n* picker; the value is the instant as an ISO timestamp carrying the zone's\n* offset, so servers store one unambiguous moment.\n*/\nfunction createDateTimePicker(initial = {}) {\n\tlet options = { ...initial };\n\tconst start = fromIsoDateTime(options.value ?? options.defaultValue, zone());\n\tlet time = start?.time ?? null;\n\tlet timeText = time ? fmt(time) : \"\";\n\tlet timeError = null;\n\tlet value = \"\";\n\tlet destroyed = false;\n\tconst datePicker = createDatePicker({\n\t\t...dateOptions(),\n\t\tdefaultValue: start ? toIsoDay(start.date) : \"\",\n\t\tcloseOnSelect: false,\n\t\tonChange: () => {\n\t\t\temitter.act(() => {\n\t\t\t\tif (datePicker.getState().date && !time) {\n\t\t\t\t\ttime = parseTime(options.defaultTime) ?? Object.freeze({\n\t\t\t\t\t\thour: 0,\n\t\t\t\t\t\tminute: 0\n\t\t\t\t\t});\n\t\t\t\t\ttimeText = fmt(time);\n\t\t\t\t\ttimeError = null;\n\t\t\t\t}\n\t\t\t\tcommit(true);\n\t\t\t});\n\t\t}\n\t});\n\tvalue = compose();\n\tlet snapshot = build();\n\tconst emitter = createEmitter(() => {\n\t\tsnapshot = build();\n\t});\n\tdatePicker.subscribe(() => {\n\t\temitter.notify();\n\t});\n\tfunction zone() {\n\t\treturn options.timeZone ?? getConfig().timeZone;\n\t}\n\tfunction fmt(t) {\n\t\treturn formatTime(t, {\n\t\t\thour12: options.hour12 ?? false,\n\t\t\tlocale: localeOf(options)\n\t\t});\n\t}\n\tfunction dateOptions() {\n\t\tconst { value: _value, defaultValue: _default, onChange: _onChange, timeZone: _zone, hour12: _hour12, minuteStep: _step, defaultTime: _defaultTime, ...rest } = options;\n\t\treturn rest;\n\t}\n\tfunction compose() {\n\t\tconst day = datePicker.getState().date;\n\t\treturn day && time ? toIsoDateTime(day.ad, time, zone()) : \"\";\n\t}\n\tfunction detail() {\n\t\tconst day = datePicker.getState().date;\n\t\treturn day && time && value ? Object.freeze({\n\t\t\tad: day.ad,\n\t\t\tbs: day.bs,\n\t\t\ttime,\n\t\t\tiso: value\n\t\t}) : null;\n\t}\n\t/** Recompute the value; queue onChange when it changed and the user caused it. */\n\tfunction commit(byUser) {\n\t\tconst next = compose();\n\t\tif (next === value) return;\n\t\tvalue = next;\n\t\tif (byUser) {\n\t\t\tconst info = detail();\n\t\t\temitter.after(() => options.onChange?.(next, info));\n\t\t}\n\t}\n\tfunction build() {\n\t\tconst inner = datePicker.getState();\n\t\tconst locale = localeOf(options);\n\t\tconst step = Math.min(30, Math.max(1, Math.floor(options.minuteStep ?? 5)));\n\t\tconst { am, pm } = getLocale(locale).time;\n\t\tconst hour12 = options.hour12 ?? false;\n\t\treturn Object.freeze({\n\t\t\tvalue,\n\t\t\tdetail: detail(),\n\t\t\tdateText: inner.text,\n\t\t\ttimeText,\n\t\t\ttime,\n\t\t\tcalendar: inner.calendar,\n\t\t\tcanSwitchCalendar: inner.canSwitchCalendar,\n\t\t\topen: inner.open,\n\t\t\tinline: inner.inline,\n\t\t\terror: inner.error ? {\n\t\t\t\t...inner.error,\n\t\t\t\tfield: \"date\"\n\t\t\t} : timeError ? {\n\t\t\t\t...timeError,\n\t\t\t\tfield: \"time\"\n\t\t\t} : null,\n\t\t\tequivalentText: inner.equivalentText,\n\t\t\tplaceholder: inner.placeholder,\n\t\t\ttimePlaceholder: hour12 ? `h:mm ${am}` : \"HH:MM\",\n\t\t\thours: Array.from({ length: 24 }, (_, hour) => Object.freeze({\n\t\t\t\tvalue: hour,\n\t\t\t\tlabel: hour12 ? `${formatNumber(hour % 12 === 0 ? 12 : hour % 12, locale)} ${hour < 12 ? am : pm}` : formatNumber(String(hour).padStart(2, \"0\"), locale),\n\t\t\t\tisSelected: time?.hour === hour\n\t\t\t})),\n\t\t\tminutes: Array.from({ length: Math.ceil(60 / step) }, (_, index) => Object.freeze({\n\t\t\t\tvalue: index * step,\n\t\t\t\tlabel: formatNumber(String(index * step).padStart(2, \"0\"), locale),\n\t\t\t\tisSelected: time?.minute === index * step\n\t\t\t})),\n\t\t\tpresets: inner.presets,\n\t\t\tcalendarState: inner.calendarState\n\t\t});\n\t}\n\tfunction setTime(next, text, byUser) {\n\t\ttime = next;\n\t\ttimeText = text;\n\t\ttimeError = null;\n\t\tcommit(byUser);\n\t}\n\tconst actions = {\n\t\ttypeDate(text) {\n\t\t\tdatePicker.actions.type(text);\n\t\t},\n\t\tblurDate() {\n\t\t\tdatePicker.actions.blur();\n\t\t},\n\t\ttypeTime(text) {\n\t\t\tif (destroyed) return;\n\t\t\temitter.act(() => {\n\t\t\t\tconst parsed = parseTime(text);\n\t\t\t\tif (text.trim() === \"\" || parsed) setTime(parsed, text, true);\n\t\t\t\telse {\n\t\t\t\t\ttime = null;\n\t\t\t\t\ttimeText = text;\n\t\t\t\t\ttimeError = {\n\t\t\t\t\t\tcode: \"format\",\n\t\t\t\t\t\tmessage: getLocale(localeOf(options)).messages.invalidTime\n\t\t\t\t\t};\n\t\t\t\t\tcommit(true);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tblurTime() {\n\t\t\temitter.act(() => {\n\t\t\t\tif (!timeError && time) timeText = fmt(time);\n\t\t\t});\n\t\t},\n\t\tselectDate(date) {\n\t\t\treturn !destroyed && datePicker.actions.select(date);\n\t\t},\n\t\tselectHour(hour) {\n\t\t\temitter.act(() => {\n\t\t\t\tconst next = Object.freeze({\n\t\t\t\t\thour,\n\t\t\t\t\tminute: time?.minute ?? 0\n\t\t\t\t});\n\t\t\t\tsetTime(next, fmt(next), true);\n\t\t\t});\n\t\t},\n\t\tselectMinute(minute) {\n\t\t\temitter.act(() => {\n\t\t\t\tconst next = Object.freeze({\n\t\t\t\t\thour: time?.hour ?? 0,\n\t\t\t\t\tminute\n\t\t\t\t});\n\t\t\t\tsetTime(next, fmt(next), true);\n\t\t\t});\n\t\t},\n\t\tselectNow() {\n\t\t\tif (destroyed) return false;\n\t\t\tconst current = now(zone());\n\t\t\tlet picked = false;\n\t\t\temitter.act(() => {\n\t\t\t\ttime = current.time;\n\t\t\t\ttimeText = fmt(current.time);\n\t\t\t\ttimeError = null;\n\t\t\t\tpicked = datePicker.actions.select(current.date);\n\t\t\t\tcommit(true);\n\t\t\t});\n\t\t\treturn picked;\n\t\t},\n\t\tapplyPreset(id) {\n\t\t\treturn !destroyed && datePicker.actions.applyPreset(id);\n\t\t},\n\t\topen() {\n\t\t\tdatePicker.actions.open();\n\t\t},\n\t\tclose() {\n\t\t\tdatePicker.actions.close();\n\t\t},\n\t\ttoggle() {\n\t\t\tdatePicker.actions.toggle();\n\t\t},\n\t\tclear() {\n\t\t\temitter.act(() => {\n\t\t\t\tdatePicker.actions.setValue(\"\");\n\t\t\t\tsetTime(null, \"\", true);\n\t\t\t});\n\t\t},\n\t\tsetValue(next) {\n\t\t\temitter.act(() => {\n\t\t\t\tapplyValue(next);\n\t\t\t});\n\t\t},\n\t\tswitchCalendar(calendar) {\n\t\t\tdatePicker.actions.switchCalendar(calendar);\n\t\t},\n\t\treset() {\n\t\t\temitter.act(() => {\n\t\t\t\tconst start = fromIsoDateTime(options.defaultValue, zone());\n\t\t\t\tdatePicker.actions.setValue(start ? toIsoDay(start.date) : \"\");\n\t\t\t\tsetTime(start?.time ?? null, start ? fmt(start.time) : \"\", true);\n\t\t\t});\n\t\t}\n\t};\n\t/** An outside value; ignored when it is the instant already shown (echo guard). */\n\tfunction applyValue(next) {\n\t\tconst parsed = fromIsoDateTime(next, zone());\n\t\tif ((parsed ? toIsoDateTime(parsed.date, parsed.time, zone()) : \"\") === value) return;\n\t\tdatePicker.actions.setValue(parsed ? toIsoDay(parsed.date) : \"\");\n\t\ttime = parsed?.time ?? null;\n\t\ttimeText = time ? fmt(time) : \"\";\n\t\ttimeError = null;\n\t\tcommit(false);\n\t}\n\treturn {\n\t\tgetState: () => snapshot,\n\t\tsubscribe: (listener) => emitter.subscribe(listener),\n\t\tsetOptions(changes) {\n\t\t\tif (destroyed) return;\n\t\t\temitter.act(() => {\n\t\t\t\toptions = {\n\t\t\t\t\t...options,\n\t\t\t\t\t...changes\n\t\t\t\t};\n\t\t\t\tdatePicker.setOptions(dateOptions());\n\t\t\t\tif (\"value\" in changes) applyValue(changes.value);\n\t\t\t\tif (time && !timeError) timeText = fmt(time);\n\t\t\t\tcommit(false);\n\t\t\t});\n\t\t},\n\t\tactions,\n\t\tcalendar: datePicker.calendar,\n\t\tdestroy() {\n\t\t\tdestroyed = true;\n\t\t\tdatePicker.destroy();\n\t\t\temitter.clear();\n\t\t}\n\t};\n}\nfunction toIsoDay(date) {\n\treturn toIsoDate(date);\n}\n//#endregion\nexport { checkDate, createDatePicker, createDateRangePicker, createDateTimePicker, createMultiDatePicker, equivalentText, formatInput, maskDateText, parseInput, placeholderText, resolveRangePreset, resolveSinglePreset };\n\n//# sourceMappingURL=index.js.map","//#region src/env.ts\n/** True in a browser-like environment; false during server rendering. */\nfunction hasDom() {\n\treturn typeof window !== \"undefined\" && typeof document !== \"undefined\";\n}\n/** Whether the browser can show elements in the top layer (`popover` + `showPopover`). */\nfunction supportsPopover() {\n\treturn hasDom() && typeof HTMLElement !== \"undefined\" && typeof HTMLElement.prototype.showPopover === \"function\";\n}\n/** Whether the user asked the system for less motion. */\nfunction prefersReducedMotion() {\n\treturn hasDom() && typeof window.matchMedia === \"function\" && window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n//#endregion\n//#region src/position.ts\n/** The layout to use for a viewport width. Pure. */\nfunction resolveLayout(layout, viewportWidth, sheetBelow = 480) {\n\tif (layout !== void 0 && layout !== \"auto\") return layout;\n\treturn viewportWidth < sheetBelow ? \"sheet\" : \"popover\";\n}\n/**\n* Where to put a panel next to an anchor, in viewport (position: fixed)\n* coordinates. Pure, so it can be tested without a browser. Rules from the\n* institute-SaaS picker: prefer the requested side, flip when the panel does\n* not fit but does fit on the other side, and keep `gap` px from every edge\n* (the panel may overlap the anchor rather than leave the screen).\n*/\nfunction computePosition(anchor, panelHeight, viewport, options = {}) {\n\tconst gap = options.gap ?? 6;\n\tconst placement = options.placement ?? \"bottom-start\";\n\tconst width = Math.max(0, Math.min(options.width ?? 320, viewport.width - gap * 2));\n\tconst roomBelow = viewport.height - anchor.bottom - gap * 2;\n\tconst roomAbove = anchor.top - gap * 2;\n\tconst side = placement.startsWith(\"top\") ? roomAbove >= panelHeight || roomAbove >= roomBelow ? \"top\" : \"bottom\" : roomBelow >= panelHeight || roomBelow >= roomAbove ? \"bottom\" : \"top\";\n\tconst rawTop = side === \"bottom\" ? anchor.bottom + gap : anchor.top - gap - panelHeight;\n\tconst rawLeft = placement.endsWith(\"end\") ? anchor.right - width : anchor.left;\n\treturn {\n\t\ttop: Math.max(gap, Math.min(rawTop, viewport.height - gap - panelHeight)),\n\t\tleft: Math.max(gap, Math.min(rawLeft, viewport.width - width - gap)),\n\t\twidth,\n\t\tside\n\t};\n}\n/**\n* Show `panel` beside `anchor` once. Uses the browser's top layer when it can\n* (so dialogs and scrolling containers never clip the panel), otherwise\n* position: fixed. Returns a function that hides the panel again.\n*/\nfunction placePopover(anchor, panel, options = {}) {\n\tif (!hasDom()) return noop$1;\n\tconst topLayer = supportsPopover();\n\tif (topLayer) {\n\t\tif (!panel.hasAttribute(\"popover\")) panel.setAttribute(\"popover\", \"manual\");\n\t\tif (!panel.matches(\":popover-open\")) panel.showPopover();\n\t}\n\tconst layout = resolveLayout(options.layout, window.innerWidth, options.sheetBelow);\n\tpanel.dataset[\"layout\"] = layout;\n\tif (layout === \"sheet\") {\n\t\tObject.assign(panel.style, {\n\t\t\ttop: \"\",\n\t\t\tleft: \"\",\n\t\t\twidth: \"\",\n\t\t\tposition: \"fixed\",\n\t\t\tmargin: \"0\",\n\t\t\tinset: \"auto 0 0 0\"\n\t\t});\n\t\tdelete panel.dataset[\"side\"];\n\t\treturn hider(panel, topLayer);\n\t}\n\tconst position = computePosition(anchor.getBoundingClientRect(), panel.offsetHeight, {\n\t\twidth: window.innerWidth,\n\t\theight: window.innerHeight\n\t}, options);\n\tObject.assign(panel.style, {\n\t\tposition: \"fixed\",\n\t\tmargin: \"0\",\n\t\tinset: \"auto\",\n\t\ttop: `${position.top}px`,\n\t\tleft: `${position.left}px`,\n\t\twidth: `${position.width}px`\n\t});\n\tpanel.dataset[\"side\"] = position.side;\n\treturn hider(panel, topLayer);\n}\nfunction hider(panel, topLayer) {\n\treturn () => {\n\t\tif (topLayer && panel.matches(\":popover-open\")) panel.hidePopover();\n\t};\n}\n/**\n* Show the panel and keep it beside the anchor while the window resizes or\n* any ancestor scrolls. Returns a function that stops tracking and hides it.\n*/\nfunction trackPosition(anchor, panel, options = {}) {\n\tif (!hasDom()) return noop$1;\n\tlet hide = placePopover(anchor, panel, options);\n\tconst place = () => {\n\t\thide = placePopover(anchor, panel, options);\n\t};\n\twindow.addEventListener(\"resize\", place);\n\twindow.addEventListener(\"scroll\", place, true);\n\treturn () => {\n\t\twindow.removeEventListener(\"resize\", place);\n\t\twindow.removeEventListener(\"scroll\", place, true);\n\t\thide();\n\t};\n}\nfunction noop$1() {}\n//#endregion\n//#region src/events.ts\n/**\n* Call `callback` when a pointer goes down outside all of `elements` (checked\n* in the capture phase, before the page reacts). Returns a cleanup function.\n*/\nfunction onOutsidePointer(elements, callback) {\n\tif (!hasDom()) return noop;\n\tconst listener = (event) => {\n\t\tconst target = event.target;\n\t\tconst list = typeof elements === \"function\" ? elements() : elements;\n\t\tif (!(target instanceof Node && list.some((element) => element?.contains(target) ?? false))) callback(event);\n\t};\n\tdocument.addEventListener(\"pointerdown\", listener, true);\n\treturn () => {\n\t\tdocument.removeEventListener(\"pointerdown\", listener, true);\n\t};\n}\n/**\n* Call `callback` when the pointer goes down on a panel's backdrop (the dimmed\n* area around a bottom sheet). A top-layer panel receives those events itself,\n* so they are told apart by position: on the panel, but outside its box.\n*/\nfunction onBackdropPointer(panel, callback) {\n\tif (!hasDom()) return noop;\n\tconst listener = (event) => {\n\t\tif (event.target !== panel) return;\n\t\tconst box = panel.getBoundingClientRect();\n\t\tif (event.clientX < box.left || event.clientX > box.right || event.clientY < box.top || event.clientY > box.bottom) callback(event);\n\t};\n\tpanel.addEventListener(\"pointerdown\", listener);\n\treturn () => {\n\t\tpanel.removeEventListener(\"pointerdown\", listener);\n\t};\n}\n/**\n* Call `callback` on Escape. By default it listens in the capture phase and\n* stops the event, so an enclosing dialog does not close as well.\n*/\nfunction onEscape(callback, options = {}) {\n\tif (!hasDom()) return noop;\n\tconst capture = options.capture ?? true;\n\tconst listener = (event) => {\n\t\tif (event.key !== \"Escape\") return;\n\t\tif (options.stop ?? true) {\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tcallback(event);\n\t};\n\twindow.addEventListener(\"keydown\", listener, capture);\n\treturn () => {\n\t\twindow.removeEventListener(\"keydown\", listener, capture);\n\t};\n}\n/** Focus the first element in `container` matching `selector` (the roving-tabindex day by default). */\nfunction focusFirst(container, selector = \"[tabindex=\\\"0\\\"]\") {\n\tconst element = container?.querySelector(selector);\n\tif (!element) return false;\n\telement.focus();\n\treturn true;\n}\n/** Put focus back, e.g. on the input after the panel closes. */\nfunction restoreFocus(element) {\n\telement?.focus({ preventScroll: true });\n}\nfunction noop() {}\n//#endregion\nexport { computePosition, focusFirst, hasDom, onBackdropPointer, onEscape, onOutsidePointer, placePopover, prefersReducedMotion, resolveLayout, restoreFocus, supportsPopover, trackPosition };\n\n//# sourceMappingURL=index.js.map","import type { PresetState } from '@nepdatejs/datepicker';\nimport { el, setAttrs, setText } from './dom';\n\n/** Panel width with and without the presets column. */\nexport const PANEL_WIDTH = 320;\nexport const PANEL_WIDTH_WITH_PRESETS = 492;\nexport const TIME_COLUMNS_WIDTH = 136;\n\n/** The shortcut buttons beside the calendar. Hidden when there are none. */\nexport class PresetList {\n readonly element: HTMLDivElement;\n private ids = '';\n\n constructor(onApply: (id: string) => void) {\n this.element = el('div', { class: 'ndp-presets', role: 'group', hidden: true });\n this.element.addEventListener('click', (event) => {\n const button =\n event.target instanceof Element\n ? event.target.closest<HTMLButtonElement>('.ndp-preset')\n : null;\n const id = button?.dataset['preset'];\n if (id !== undefined && button && !button.disabled) {\n onApply(id);\n }\n });\n }\n\n render(presets: readonly PresetState[], label: string): void {\n this.element.hidden = presets.length === 0;\n setAttrs(this.element, { 'aria-label': label });\n const ids = presets.map((preset) => preset.id).join('\\n');\n if (ids !== this.ids) {\n this.ids = ids;\n this.element.replaceChildren(\n ...presets.map((preset) =>\n el('button', { type: 'button', class: 'ndp-preset', 'data-preset': preset.id }),\n ),\n );\n }\n presets.forEach((preset, index) => {\n const button = this.element.children[index];\n if (button) {\n setText(button, preset.label);\n setAttrs(button, {\n 'aria-pressed': preset.isActive ? 'true' : 'false',\n disabled: preset.isDisabled,\n });\n }\n });\n }\n}\n","import { getLocale, type CalendarSystem } from '@nepdatejs/core';\nimport {\n createDatePicker,\n type DateDetail,\n type DatePickerOptions,\n type DatePickerState,\n type DatePickerStore,\n} from '@nepdatejs/datepicker';\nimport {\n onBackdropPointer,\n onEscape,\n onOutsidePointer,\n restoreFocus,\n trackPosition,\n type PanelLayout,\n} from '@nepdatejs/dom';\nimport { CalendarView } from './calendar-view';\nimport { el, icon, setAttrs, setPopupMode, setText, uid } from './dom';\nimport { PANEL_WIDTH, PANEL_WIDTH_WITH_PRESETS, PresetList } from './preset-list';\n\nexport type Theme = 'light' | 'dark' | 'auto';\n\n/** Everything the date picker DOM needs on top of the store's options. */\nexport interface DatePickerViewOptions extends DatePickerOptions {\n /** Submit the AD value with a plain form under this name (hidden input). */\n readonly name?: string | undefined;\n /** Render a hidden input 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 /** Show the same day in the other calendar under the field. Default true. */\n readonly showEquivalent?: 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 /** Remember the viewer's BS/AD choice in localStorage under this key. */\n readonly persistCalendar?: string | undefined;\n readonly ariaLabel?: string | undefined;\n readonly onOpenChange?: ((open: boolean) => void) | undefined;\n /** Called on every keystroke with the current text. */\n readonly onInput?: ((text: string) => void) | undefined;\n}\n\nconst VIEW_KEYS = new Set([\n 'name',\n 'hiddenInput',\n 'id',\n 'placeholder',\n 'required',\n 'disabled',\n 'clearable',\n 'showEquivalent',\n 'theme',\n 'panelLayout',\n 'persistCalendar',\n 'ariaLabel',\n 'onOpenChange',\n 'onInput',\n]);\n\n/**\n * The date picker field and panel, rendered with the @nepdatejs/styles markup\n * into `host`. Used by <nep-date-picker> and by createDatePicker().\n */\nexport class DatePickerView {\n readonly store: DatePickerStore;\n readonly input: HTMLInputElement;\n private options: DatePickerViewOptions;\n private readonly field: HTMLDivElement;\n private readonly box: HTMLDivElement;\n private readonly clearButton: HTMLButtonElement;\n private readonly switchButton: HTMLButtonElement;\n private readonly toggleButton: HTMLButtonElement;\n private readonly hint: HTMLParagraphElement;\n private readonly panel: HTMLDivElement;\n private readonly segment: HTMLDivElement;\n private readonly todayButton: HTMLButtonElement;\n private readonly hidden: HTMLInputElement;\n private readonly calendarView: CalendarView;\n private readonly presetList: PresetList;\n private readonly unsubscribe: () => void;\n private closePanel: (() => void) | null = null;\n private wasOpen = false;\n\n constructor(host: HTMLElement, options: DatePickerViewOptions = {}) {\n this.options = { ...options };\n this.store = createDatePicker({\n ...storeOptions(options),\n onChange: (value, detail) => {\n this.options.onChange?.(value, detail);\n },\n onCalendarChange: (calendar) => {\n this.remember(calendar);\n this.options.onCalendarChange?.(calendar);\n },\n });\n\n const inputId = options.id ?? uid('ndp-input');\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.switchButton = el('button', {\n type: 'button',\n class: 'ndp-input__switch',\n 'data-action': 'switch',\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' }, [\n this.clearButton,\n this.switchButton,\n this.toggleButton,\n ]),\n ]);\n this.hint = el('p', {\n class: 'ndp-hint',\n id: `${inputId}-hint`,\n 'aria-live': 'polite',\n hidden: true,\n });\n this.hidden = el('input', { type: 'hidden' });\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.todayButton = el('button', {\n type: 'button',\n class: 'ndp-button',\n 'data-action': 'today',\n });\n const calendarRoot = el('div', { class: 'ndp-panel__calendar' });\n this.presetList = new PresetList((id) => {\n if (this.store.actions.applyPreset(id) && !this.store.getState().open) {\n restoreFocus(this.input);\n }\n });\n this.panel = el(\n 'div',\n {\n class: 'ndp-panel',\n id: panelId,\n hidden: true,\n },\n [\n el('div', { class: 'ndp-panel__body' }, [this.presetList.element, calendarRoot]),\n el('div', { class: 'ndp-panel__footer' }, [this.segment, this.todayButton]),\n ],\n );\n this.field = el('div', { class: 'ndp-field' }, [\n this.box,\n this.hint,\n this.panel,\n this.hidden,\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', this.onTextInput);\n this.input.addEventListener('blur', () => {\n this.store.actions.blur();\n });\n this.input.addEventListener('keydown', this.onInputKeyDown);\n this.field.addEventListener('click', this.onClick);\n\n this.unsubscribe = this.store.subscribe(() => {\n this.render();\n });\n this.restoreCalendar();\n this.render();\n }\n\n getState(): DatePickerState {\n return this.store.getState();\n }\n\n /** Change view or store options. Unknown keys are ignored. */\n setOptions(changes: Partial<DatePickerViewOptions>): 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 const hintText =\n state.error?.message ??\n ((this.options.showEquivalent ?? true) ? state.equivalentText : null);\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': hintText ? 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\n this.clearButton.hidden =\n !(this.options.clearable ?? true) || state.text === '' || disabled;\n setAttrs(this.clearButton, { 'aria-label': locale.labels.clear });\n this.switchButton.hidden = !state.canSwitchCalendar;\n setText(this.switchButton, locale.calendarNames[state.calendar]);\n const other: CalendarSystem = state.calendar === 'BS' ? 'AD' : 'BS';\n setAttrs(this.switchButton, {\n disabled,\n 'aria-label': `${locale.labels.calendar}: ${locale.calendarNames[state.calendar]} → ${locale.calendarNames[other]}`,\n });\n setAttrs(this.toggleButton, {\n disabled,\n 'aria-label': locale.labels.openCalendar,\n 'aria-expanded': state.open ? 'true' : 'false',\n });\n\n this.hint.hidden = hintText === null;\n setText(this.hint, hintText ?? '');\n setAttrs(this.hint, { 'data-error': state.error !== null });\n\n this.segment.hidden = !state.canSwitchCalendar;\n setAttrs(this.segment, { 'aria-label': locale.labels.calendar });\n for (const button of this.segment.querySelectorAll<HTMLButtonElement>('button')) {\n const calendar = button.dataset['calendar'] as CalendarSystem;\n setText(button, locale.calendarNames[calendar]);\n setAttrs(button, {\n 'aria-pressed': calendar === state.calendar ? 'true' : 'false',\n });\n }\n setText(this.todayButton, locale.labels.today);\n this.presetList.render(state.presets, locale.labels.presets);\n\n const name = this.options.hiddenInput === false ? undefined : this.options.name;\n setAttrs(this.hidden, { name: name ?? null, value: state.value });\n this.hidden.value = state.value;\n this.hidden.disabled = name === undefined || disabled;\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(this.panelWidth())}px` : null,\n );\n }\n\n private panelWidth(): number {\n return this.store.getState().presets.length > 0\n ? PANEL_WIDTH_WITH_PRESETS\n : PANEL_WIDTH;\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.panel.hidden = false;\n const stopTracking = trackPosition(this.box, this.panel, {\n width: this.panelWidth(),\n layout: this.options.panelLayout,\n });\n const stopOutside = onOutsidePointer([this.field, this.panel], () => {\n this.store.actions.close();\n });\n const stopBackdrop = onBackdropPointer(this.panel, () => {\n this.store.actions.close();\n });\n const stopEscape = onEscape(() => {\n this.store.actions.close();\n restoreFocus(this.input);\n });\n this.closePanel = () => {\n stopTracking();\n stopOutside();\n stopBackdrop();\n stopEscape();\n this.panel.hidden = true;\n };\n this.calendarView.focusGrid();\n } else {\n this.closePanel?.();\n this.closePanel = null;\n }\n }\n\n private readonly onTextInput = (): void => {\n this.store.actions.type(this.input.value);\n this.options.onInput?.(this.input.value);\n };\n\n private readonly onInputKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'ArrowDown' && (event.altKey || this.input.value === '')) {\n event.preventDefault();\n this.open();\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 'switch':\n this.store.actions.switchCalendar(\n this.store.getState().calendar === 'BS' ? 'AD' : 'BS',\n );\n break;\n case 'toggle':\n if (this.store.getState().open) {\n this.close();\n } else {\n this.open();\n }\n break;\n case 'today':\n if (this.store.actions.selectToday()) {\n restoreFocus(this.input);\n }\n break;\n default:\n break;\n }\n };\n\n private remember(calendar: CalendarSystem): void {\n const key = this.options.persistCalendar;\n if (!key) {\n return;\n }\n try {\n window.localStorage.setItem(key, calendar);\n } catch {\n // Storage can be blocked (private mode); the choice then lasts for this page only.\n }\n }\n\n private restoreCalendar(): void {\n const key = this.options.persistCalendar;\n if (!key) {\n return;\n }\n const stored = readStorage(key);\n if (stored === 'BS' || stored === 'AD') {\n this.store.actions.switchCalendar(stored);\n }\n }\n}\n\n/** Only the keys the picker store understands, minus the view's own callbacks. */\nfunction storeOptions(\n options: Partial<DatePickerViewOptions>,\n): Partial<DatePickerOptions> {\n const out: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(options)) {\n if (!VIEW_KEYS.has(key) && key !== 'onChange' && key !== 'onCalendarChange') {\n out[key] = value;\n }\n }\n\n return out;\n}\n\nfunction readStorage(key: string): string | null {\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null; // storage blocked\n }\n}\n\nexport type { DateDetail };\n","import { fromIsoDate } from '@nepdatejs/core';\nimport type { SinglePreset } from '@nepdatejs/datepicker';\nimport { DatePickerView, type DatePickerViewOptions } from './picker-view';\nimport {\n Base,\n str,\n bool,\n onUnlessFalse,\n calendarAttr,\n weekday,\n panelLayout,\n theme,\n presetIds,\n swallowInnerChange,\n isoOf,\n type RichProps,\n} from './element-utils';\n\n/**\n * <nep-date-picker name=\"dob\" min=\"2020-01-01\"></nep-date-picker>\n *\n * A form-associated BS/AD date field: the form receives the AD \"YYYY-MM-DD\"\n * value under `name`. Fires `change` with { value, ad, bs }, plus `nep-open`,\n * `nep-close` and `nep-calendar-change`.\n */\nexport class NepDatePickerElement extends Base {\n static readonly formAssociated = true;\n static readonly observedAttributes: readonly string[] = [\n 'value',\n 'min',\n 'max',\n 'calendar',\n 'default-calendar',\n 'locale',\n 'name',\n 'placeholder',\n 'required',\n 'disabled',\n 'clearable',\n 'show-equivalent',\n 'theme',\n 'panel-layout',\n 'mask',\n 'inline',\n 'persist-calendar',\n 'week-starts-on',\n 'display-format',\n 'label',\n 'close-on-select',\n 'input-id',\n 'presets',\n ];\n\n /** The view, once connected. */\n view: DatePickerView | null = null;\n private readonly internals: ElementInternals | null;\n private rich: RichProps = {};\n private customPresets: readonly SinglePreset[] | undefined;\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(): string {\n return this.view?.getState().value ?? isoOf(fromIsoDate(this.getAttribute('value')));\n }\n set value(next: string) {\n this.view?.store.actions.setValue(next);\n }\n get holidays(): RichProps['holidays'] {\n return this.rich.holidays;\n }\n set holidays(next: RichProps['holidays']) {\n this.setRich({ holidays: next });\n }\n get events(): RichProps['events'] {\n return this.rich.events;\n }\n set events(next: RichProps['events']) {\n this.setRich({ events: next });\n }\n get isDateDisabled(): RichProps['isDateDisabled'] {\n return this.rich.isDateDisabled;\n }\n set isDateDisabled(next: RichProps['isDateDisabled']) {\n this.setRich({ isDateDisabled: next });\n }\n /** Shortcuts, including custom { id, label, resolve } ones. Overrides the presets attribute. */\n get presets(): readonly SinglePreset[] | undefined {\n return this.customPresets ?? (presetIds(this) as readonly SinglePreset[] | undefined);\n }\n set presets(next: readonly SinglePreset[] | undefined) {\n this.customPresets = next;\n this.view?.setOptions({ presets: this.presets });\n }\n get form(): HTMLFormElement | null {\n return this.internals?.form ?? null;\n }\n get validity(): ValidityState | undefined {\n return this.internals?.validity;\n }\n get validationMessage(): string {\n return this.internals?.validationMessage ?? '';\n }\n checkValidity(): boolean {\n return this.internals?.checkValidity() ?? true;\n }\n reportValidity(): boolean {\n return this.internals?.reportValidity() ?? true;\n }\n\n connectedCallback(): void {\n if (this.view) {\n return;\n }\n const view = new DatePickerView(this, {\n ...this.readOptions(),\n defaultValue: str(this, 'value'),\n onChange: (value, detail) => {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n detail: { value, ad: detail?.ad ?? null, bs: detail?.bs ?? null },\n }),\n );\n },\n onCalendarChange: (calendar) => {\n this.dispatchEvent(\n new CustomEvent('nep-calendar-change', { bubbles: true, detail: { calendar } }),\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(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 formStateRestoreCallback(state: string | File | FormData | null): void {\n if (typeof state === 'string') {\n this.view?.store.actions.setValue(state);\n }\n }\n\n override focus(options?: FocusOptions): void {\n this.view?.input.focus(options);\n }\n\n open(): void {\n this.view?.open();\n }\n\n close(): void {\n this.view?.close();\n }\n\n private setRich(changes: RichProps): void {\n this.rich = { ...this.rich, ...changes };\n this.view?.setOptions(changes);\n }\n\n private readOptions(): DatePickerViewOptions {\n return {\n ...this.rich,\n min: str(this, 'min'),\n max: str(this, 'max'),\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 placeholder: str(this, 'placeholder'),\n required: bool(this, 'required'),\n disabled: bool(this, 'disabled'),\n clearable: onUnlessFalse(this, 'clearable'),\n showEquivalent: onUnlessFalse(this, 'show-equivalent'),\n closeOnSelect: onUnlessFalse(this, 'close-on-select'),\n theme: theme(this),\n panelLayout: panelLayout(this),\n mask: onUnlessFalse(this, 'mask'),\n inline: this.hasAttribute('inline'),\n persistCalendar: str(this, 'persist-calendar'),\n weekStartsOn: weekday(this, 'week-starts-on'),\n displayFormat: str(this, 'display-format'),\n ariaLabel: str(this, 'label'),\n id: str(this, 'input-id'),\n presets: this.presets,\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 this.internals.setFormValue(state.value === '' ? null : state.value, state.value);\n if (state.error) {\n this.internals.setValidity({ customError: true }, state.error.message, view.input);\n } else if (bool(this, 'required') && state.value === '') {\n this.internals.setValidity(\n { valueMissing: true },\n view.input.validationMessage || 'Please choose a date.',\n view.input,\n );\n } else {\n this.internals.setValidity({});\n }\n }\n}\n","/** `@nepdatejs/vanilla/date-picker`: just the date picker (element, view and mount function). */\nimport type { DatePickerState } from '@nepdatejs/datepicker';\nimport { NepDatePickerElement } from './date-picker-element';\nimport { DatePickerView, type DatePickerViewOptions } from './picker-view';\nimport { defineElement, ELEMENT_NAMES } from './registry';\n\nexport { NepDatePickerElement };\nexport { DatePickerView, type DatePickerViewOptions, type Theme } from './picker-view';\n\n/** Register <nep-date-picker> (skipped if already defined). */\nexport function defineDatePicker(registry?: CustomElementRegistry): void {\n defineElement(ELEMENT_NAMES.datePicker, NepDatePickerElement, registry);\n}\n\nexport interface DatePickerHandle {\n readonly view: DatePickerView;\n getValue(): string;\n getState(): DatePickerState;\n setValue(value: string): void;\n setOptions(changes: Partial<DatePickerViewOptions>): void;\n open(): void;\n close(): void;\n destroy(): void;\n}\n\n/**\n * Mount a date picker without custom elements.\n *\n * - Given a container, renders the field into it.\n * - Given an <input>, hides it and keeps its value in step with the picker\n * (AD \"YYYY-MM-DD\"), so existing forms and server code keep working.\n */\nexport function createDatePicker(\n target: HTMLElement,\n options: DatePickerViewOptions = {},\n): DatePickerHandle {\n const enhanced = target instanceof HTMLInputElement ? target : null;\n let host = target;\n if (enhanced) {\n host = document.createElement('span');\n enhanced.after(host);\n enhanced.hidden = true;\n }\n const view = new DatePickerView(host, {\n ...(enhanced\n ? {\n defaultValue: enhanced.value,\n name: undefined,\n required: enhanced.required,\n disabled: enhanced.disabled,\n }\n : {}),\n ...options,\n onChange: (value, detail) => {\n if (enhanced) {\n enhanced.value = value;\n enhanced.dispatchEvent(new Event('input', { bubbles: true }));\n enhanced.dispatchEvent(new Event('change', { bubbles: true }));\n }\n options.onChange?.(value, detail);\n },\n });\n\n return {\n view,\n getValue: () => view.getState().value,\n getState: () => view.getState(),\n setValue: (value) => {\n view.store.actions.setValue(value);\n if (enhanced) {\n enhanced.value = view.getState().value;\n }\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 if (enhanced) {\n host.remove();\n enhanced.hidden = false;\n }\n },\n };\n}\n","import { getLocale, type CalendarSystem } from '@nepdatejs/core';\nimport {\n createDateRangePicker,\n type DateRangePickerOptions,\n type DateRangePickerState,\n type DateRangePickerStore,\n type RangeField,\n} from '@nepdatejs/datepicker';\nimport {\n onBackdropPointer,\n onEscape,\n onOutsidePointer,\n restoreFocus,\n trackPosition,\n type PanelLayout,\n} from '@nepdatejs/dom';\nimport { CalendarView } from './calendar-view';\nimport { el, icon, setAttrs, setPopupMode, setText, uid } from './dom';\nimport { PANEL_WIDTH, PANEL_WIDTH_WITH_PRESETS, PresetList } from './preset-list';\nimport type { Theme } from './picker-view';\n\nexport interface DateRangePickerViewOptions extends DateRangePickerOptions {\n /** Field names for plain form posts; hidden inputs are rendered when set. */\n readonly startName?: string | undefined;\n readonly endName?: string | undefined;\n readonly hiddenInput?: boolean | undefined;\n readonly disabled?: boolean | undefined;\n readonly required?: 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 startLabel?: string | undefined;\n readonly endLabel?: string | undefined;\n /** Show a \"Fiscal year\" button that switches the panel to fiscal-year tiles. */\n readonly fiscalYearView?: boolean | undefined;\n readonly onOpenChange?: ((open: boolean) => void) | undefined;\n}\n\nconst VIEW_KEYS = new Set([\n 'startName',\n 'endName',\n 'hiddenInput',\n 'disabled',\n 'required',\n 'theme',\n 'panelLayout',\n 'startLabel',\n 'endLabel',\n 'fiscalYearView',\n 'onOpenChange',\n 'onChange',\n 'onCalendarChange',\n]);\n\n/** Two date fields (start, end) sharing one panel calendar in range mode. */\nexport class DateRangePickerView {\n readonly store: DateRangePickerStore;\n readonly inputs: Record<RangeField, HTMLInputElement>;\n private options: DateRangePickerViewOptions;\n private readonly field: HTMLDivElement;\n private readonly boxes: Record<RangeField, HTMLDivElement>;\n private readonly toggleButton: HTMLButtonElement;\n private readonly hint: HTMLParagraphElement;\n private readonly panel: HTMLDivElement;\n private readonly segment: HTMLDivElement;\n private readonly fiscalButton: HTMLButtonElement;\n private readonly footer: HTMLDivElement;\n private readonly hidden: Record<RangeField, HTMLInputElement>;\n private readonly calendarView: CalendarView;\n private readonly presetList: PresetList;\n private readonly unsubscribe: () => void;\n private closePanel: (() => void) | null = null;\n private wasOpen = false;\n\n constructor(host: HTMLElement, options: DateRangePickerViewOptions = {}) {\n this.options = { ...options };\n this.store = createDateRangePicker({\n ...storeOptions(options),\n onChange: (value, detail) => {\n this.options.onChange?.(value, detail);\n },\n onCalendarChange: (calendar) => {\n this.options.onCalendarChange?.(calendar);\n },\n });\n const id = uid('ndp-range');\n const makeInput = (field: RangeField): HTMLInputElement => {\n const input = el('input', {\n class: 'ndp-input__control',\n id: `${id}-${field}`,\n type: 'text',\n inputmode: 'numeric',\n autocomplete: 'off',\n 'aria-controls': `${id}-panel`,\n 'data-field': field,\n });\n input.addEventListener('input', () => {\n this.store.actions.type(field, input.value);\n });\n input.addEventListener('blur', () => {\n this.store.actions.blur(field);\n });\n input.addEventListener('keydown', (event) => {\n if (event.key === 'ArrowDown' && (event.altKey || input.value === '')) {\n event.preventDefault();\n this.open();\n }\n });\n return input;\n };\n this.inputs = { start: makeInput('start'), end: makeInput('end') };\n this.toggleButton = el(\n 'button',\n { type: 'button', class: 'ndp-icon-button', 'data-action': 'toggle' },\n [icon('calendar')],\n );\n this.boxes = {\n start: el('div', { class: 'ndp-input' }, [this.inputs.start]),\n end: el('div', { class: 'ndp-input' }, [\n this.inputs.end,\n el('span', { class: 'ndp-input__actions' }, [this.toggleButton]),\n ]),\n };\n this.hint = el('p', {\n class: 'ndp-hint',\n id: `${id}-hint`,\n 'aria-live': 'polite',\n hidden: true,\n });\n this.hidden = {\n start: el('input', { type: 'hidden' }),\n end: el('input', { type: 'hidden' }),\n };\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.fiscalButton = el('button', {\n type: 'button',\n class: 'ndp-button',\n 'data-action': 'fiscal',\n });\n this.footer = el('div', { class: 'ndp-panel__footer' }, [\n this.segment,\n this.fiscalButton,\n ]);\n const calendarRoot = el('div', { class: 'ndp-panel__calendar' });\n this.presetList = new PresetList((id) => {\n if (this.store.actions.applyPreset(id) && !this.store.getState().open) {\n restoreFocus(this.inputs.start);\n }\n });\n this.panel = el(\n 'div',\n {\n class: 'ndp-panel',\n id: `${id}-panel`,\n\n hidden: true,\n },\n [\n el('div', { class: 'ndp-panel__body' }, [this.presetList.element, calendarRoot]),\n this.footer,\n ],\n );\n const row = el('div', { class: 'ndp-range' }, [\n this.boxes.start,\n el('span', { class: 'ndp-range__separator', 'aria-hidden': 'true' }, ['→']),\n this.boxes.end,\n ]);\n this.field = el('div', { class: 'ndp-field' }, [\n row,\n this.hint,\n this.panel,\n this.hidden.start,\n this.hidden.end,\n ]);\n host.append(this.field);\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.inputs.end);\n }\n },\n });\n this.field.addEventListener('click', this.onClick);\n this.unsubscribe = this.store.subscribe(() => {\n this.render();\n });\n this.render();\n }\n\n getState(): DateRangePickerState {\n return this.store.getState();\n }\n\n setOptions(changes: Partial<DateRangePickerViewOptions>): 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 const hintText = state.error?.message ?? null;\n const texts: Record<RangeField, string> = {\n start: state.startText,\n end: state.endText,\n };\n const labels: Record<RangeField, string | undefined> = {\n start: this.options.startLabel,\n end: this.options.endLabel,\n };\n for (const field of ['start', 'end'] as const) {\n const input = this.inputs[field];\n if (input.value !== texts[field]) {\n input.value = texts[field];\n }\n const error = state.error;\n const fieldError =\n error !== null && (error.field === field || error.field === 'range');\n input.setCustomValidity(fieldError ? error.message : '');\n setAttrs(input, {\n placeholder: state.placeholder,\n disabled,\n required: this.options.required ?? false,\n 'aria-label': labels[field] ?? null,\n 'aria-invalid': fieldError ? 'true' : null,\n 'aria-describedby': hintText ? this.hint.id : null,\n });\n setAttrs(this.boxes[field], {\n 'data-invalid': fieldError,\n 'data-disabled': disabled,\n });\n const name =\n this.options.hiddenInput === false\n ? undefined\n : field === 'start'\n ? this.options.startName\n : this.options.endName;\n setAttrs(this.hidden[field], { name: name ?? null });\n this.hidden[field].value = state.value[field];\n this.hidden[field].disabled = name === undefined || 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': locale.labels.chooseDate,\n });\n setAttrs(this.toggleButton, {\n disabled,\n 'aria-label': locale.labels.openCalendar,\n 'aria-expanded': state.open ? 'true' : 'false',\n });\n this.hint.hidden = hintText === null;\n setText(this.hint, hintText ?? '');\n setAttrs(this.hint, { 'data-error': hintText !== null });\n this.segment.hidden = !state.canSwitchCalendar;\n setAttrs(this.segment, { 'aria-label': locale.labels.calendar });\n for (const button of this.segment.querySelectorAll<HTMLButtonElement>('button')) {\n const calendar = button.dataset['calendar'] as CalendarSystem;\n setText(button, locale.calendarNames[calendar]);\n setAttrs(button, {\n 'aria-pressed': calendar === state.calendar ? 'true' : 'false',\n });\n }\n this.presetList.render(state.presets, locale.labels.presets);\n const fiscal = this.options.fiscalYearView ?? false;\n this.fiscalButton.hidden = !fiscal;\n setText(this.fiscalButton, locale.labels.fiscalYear);\n setAttrs(this.fiscalButton, {\n 'aria-pressed': state.calendarState.view === 'fiscal' ? 'true' : 'false',\n });\n this.footer.hidden = !fiscal && !state.canSwitchCalendar;\n setPopupMode(\n state,\n [this.inputs.start, this.inputs.end],\n this.toggleButton,\n this.panel,\n );\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(this.panelWidth())}px` : null,\n );\n }\n\n private panelWidth(): number {\n return this.store.getState().presets.length > 0\n ? PANEL_WIDTH_WITH_PRESETS\n : PANEL_WIDTH;\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.panel.hidden = false;\n const anchor = this.field.querySelector('.ndp-range') ?? this.field;\n const stopTracking = trackPosition(anchor, this.panel, {\n width: this.panelWidth(),\n layout: this.options.panelLayout,\n });\n const stopOutside = onOutsidePointer([this.field], () => {\n this.store.actions.close();\n });\n const stopBackdrop = onBackdropPointer(this.panel, () => {\n this.store.actions.close();\n });\n const stopEscape = onEscape(() => {\n this.store.actions.close();\n restoreFocus(this.inputs.start);\n });\n this.closePanel = () => {\n stopTracking();\n stopOutside();\n stopBackdrop();\n stopEscape();\n this.panel.hidden = true;\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 if (target.closest('[data-action=\"fiscal\"]')) {\n const calendar = this.store.calendar;\n calendar.actions.setView(calendar.getState().view === 'fiscal' ? 'day' : 'fiscal');\n this.calendarView.focusGrid();\n return;\n }\n if (target.closest('[data-action=\"toggle\"]')) {\n if (this.store.getState().open) {\n this.close();\n } else {\n this.open();\n }\n }\n };\n}\n\nfunction storeOptions(\n options: Partial<DateRangePickerViewOptions>,\n): Partial<DateRangePickerOptions> {\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 type { RangePreset } from '@nepdatejs/datepicker';\nimport { DateRangePickerView, type DateRangePickerViewOptions } from './range-view';\nimport {\n Base,\n str,\n bool,\n calendarAttr,\n int,\n onUnlessFalse,\n panelLayout,\n theme,\n presetIds,\n swallowInnerChange,\n type RichProps,\n} from './element-utils';\n\n/**\n * <nep-date-range-picker name=\"leave\" min-days=\"1\"></nep-date-range-picker>\n *\n * Two BS/AD fields sharing one panel. The form receives `${name}-start` and\n * `${name}-end` (or `start-name` / `end-name`). Fires `change` with { value }.\n */\nexport class NepDateRangePickerElement extends Base {\n static readonly formAssociated = true;\n static readonly observedAttributes: readonly string[] = [\n 'start',\n 'end',\n 'name',\n 'start-name',\n 'end-name',\n 'min',\n 'max',\n 'calendar',\n 'default-calendar',\n 'locale',\n 'min-days',\n 'max-days',\n 'disabled',\n 'required',\n 'theme',\n 'panel-layout',\n 'mask',\n 'inline',\n 'start-label',\n 'end-label',\n 'presets',\n 'fiscal-years',\n ];\n\n view: DateRangePickerView | null = null;\n private readonly internals: ElementInternals | null;\n private rich: RichProps = {};\n private customPresets: readonly RangePreset[] | undefined;\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(): { start: string; end: string } {\n return this.view?.getState().value ?? { start: '', end: '' };\n }\n set value(next: { start: string; end: 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 isDateDisabled(next: RichProps['isDateDisabled']) {\n this.rich = { ...this.rich, isDateDisabled: next };\n this.view?.setOptions({ isDateDisabled: next });\n }\n /** Shortcuts, including custom { id, label, resolve } ones. Overrides the presets attribute. */\n get presets(): readonly RangePreset[] | undefined {\n return this.customPresets ?? (presetIds(this) as readonly RangePreset[] | undefined);\n }\n set presets(next: readonly RangePreset[] | undefined) {\n this.customPresets = next;\n this.view?.setOptions({ presets: this.presets });\n }\n\n connectedCallback(): void {\n if (this.view) {\n return;\n }\n const view = new DateRangePickerView(this, {\n ...this.readOptions(),\n defaultValue: { start: str(this, 'start') ?? '', end: str(this, 'end') ?? '' },\n onChange: (value) => {\n this.dispatchEvent(\n new CustomEvent('change', { bubbles: true, detail: { value } }),\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(): void {\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 private names(): { start: string | undefined; end: string | undefined } {\n const name = str(this, 'name');\n\n return {\n start: str(this, 'start-name') ?? (name ? `${name}-start` : undefined),\n end: str(this, 'end-name') ?? (name ? `${name}-end` : undefined),\n };\n }\n\n private readOptions(): DateRangePickerViewOptions {\n const names = this.names();\n\n return {\n ...this.rich,\n startName: names.start,\n endName: names.end,\n hiddenInput: this.internals === null,\n min: str(this, 'min'),\n max: str(this, 'max'),\n calendar: calendarAttr(this, 'calendar'),\n defaultCalendar: calendarAttr(this, 'default-calendar'),\n locale: str(this, 'locale'),\n minDays: int(this, 'min-days'),\n maxDays: int(this, 'max-days'),\n disabled: bool(this, 'disabled'),\n required: bool(this, 'required'),\n theme: theme(this),\n panelLayout: panelLayout(this),\n mask: onUnlessFalse(this, 'mask'),\n inline: this.hasAttribute('inline'),\n startLabel: str(this, 'start-label'),\n endLabel: str(this, 'end-label'),\n fiscalYearView: bool(this, 'fiscal-years'),\n presets: this.presets,\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 names = this.names();\n const data = new FormData();\n if (names.start && state.value.start) {\n data.append(names.start, state.value.start);\n }\n if (names.end && state.value.end) {\n data.append(names.end, state.value.end);\n }\n this.internals.setFormValue(data);\n if (state.error) {\n this.internals.setValidity(\n { customError: true },\n state.error.message,\n view.inputs.start,\n );\n } else if (\n bool(this, 'required') &&\n (state.value.start === '' || state.value.end === '')\n ) {\n this.internals.setValidity(\n { valueMissing: true },\n 'Please choose a start and end date.',\n view.inputs.start,\n );\n } else {\n this.internals.setValidity({});\n }\n }\n}\n","/** `@nepdatejs/vanilla/date-range-picker`: just the range picker. */\nimport { NepDateRangePickerElement } from './date-range-picker-element';\nimport { DateRangePickerView, type DateRangePickerViewOptions } from './range-view';\nimport { defineElement, ELEMENT_NAMES } from './registry';\n\nexport { NepDateRangePickerElement };\nexport { DateRangePickerView, type DateRangePickerViewOptions } from './range-view';\n\n/** Register <nep-date-range-picker> (skipped if already defined). */\nexport function defineDateRangePicker(registry?: CustomElementRegistry): void {\n defineElement(ELEMENT_NAMES.dateRangePicker, NepDateRangePickerElement, registry);\n}\n\n/** Mount a date range picker into a container. */\nexport function createDateRangePicker(\n container: HTMLElement,\n options: DateRangePickerViewOptions = {},\n): DateRangePickerView {\n return new DateRangePickerView(container, options);\n}\n","import { getLocale, type CalendarSystem } from '@nepdatejs/core';\nimport {\n createDateTimePicker,\n type DateTimePickerOptions,\n type DateTimePickerState,\n type DateTimePickerStore,\n type TimeCell,\n} from '@nepdatejs/datepicker';\nimport {\n onBackdropPointer,\n onEscape,\n onOutsidePointer,\n restoreFocus,\n trackPosition,\n type PanelLayout,\n} from '@nepdatejs/dom';\nimport { CalendarView } from './calendar-view';\nimport { el, icon, setAttrs, setPopupMode, setText, uid } from './dom';\nimport type { Theme } from './picker-view';\nimport {\n PANEL_WIDTH,\n PANEL_WIDTH_WITH_PRESETS,\n PresetList,\n TIME_COLUMNS_WIDTH,\n} from './preset-list';\n\nexport interface DateTimePickerViewOptions extends DateTimePickerOptions {\n readonly name?: string | undefined;\n readonly hiddenInput?: boolean | undefined;\n readonly required?: boolean | undefined;\n readonly disabled?: 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 timeLabel?: string | undefined;\n readonly id?: string | undefined;\n readonly onOpenChange?: ((open: boolean) => void) | undefined;\n}\n\nconst VIEW_KEYS = new Set([\n 'name',\n 'hiddenInput',\n 'required',\n 'disabled',\n 'theme',\n 'panelLayout',\n 'ariaLabel',\n 'timeLabel',\n 'id',\n 'onOpenChange',\n 'onChange',\n]);\n\n/** A date input and a time input sharing one panel: calendar plus hour/minute columns. */\nexport class DateTimePickerView {\n readonly store: DateTimePickerStore;\n readonly dateInput: HTMLInputElement;\n readonly timeInput: HTMLInputElement;\n private options: DateTimePickerViewOptions;\n private readonly field: HTMLDivElement;\n private readonly row: HTMLDivElement;\n private readonly dateBox: HTMLDivElement;\n private readonly timeBox: HTMLDivElement;\n private readonly toggleButton: HTMLButtonElement;\n private readonly hint: HTMLParagraphElement;\n private readonly panel: HTMLDivElement;\n private readonly segment: HTMLDivElement;\n private readonly nowButton: HTMLButtonElement;\n private readonly doneButton: HTMLButtonElement;\n private readonly hours: HTMLDivElement;\n private readonly minutes: HTMLDivElement;\n private readonly time: HTMLDivElement;\n private readonly hidden: HTMLInputElement;\n private readonly calendarView: CalendarView;\n private readonly presetList: PresetList;\n private readonly unsubscribe: () => void;\n private closePanel: (() => void) | null = null;\n private wasOpen = false;\n\n constructor(host: HTMLElement, options: DateTimePickerViewOptions = {}) {\n this.options = { ...options };\n this.store = createDateTimePicker({\n ...storeOptions(options),\n onChange: (value, detail) => {\n this.options.onChange?.(value, detail);\n },\n });\n const id = options.id ?? uid('ndp-datetime');\n this.dateInput = el('input', {\n class: 'ndp-input__control',\n id,\n type: 'text',\n inputmode: 'numeric',\n autocomplete: 'off',\n 'aria-controls': `${id}-panel`,\n });\n this.timeInput = el('input', {\n class: 'ndp-input__control',\n id: `${id}-time`,\n type: 'text',\n autocomplete: 'off',\n });\n this.toggleButton = el(\n 'button',\n { type: 'button', class: 'ndp-icon-button', 'data-action': 'toggle' },\n [icon('calendar')],\n );\n this.dateBox = el('div', { class: 'ndp-input' }, [\n this.dateInput,\n el('span', { class: 'ndp-input__actions' }, [this.toggleButton]),\n ]);\n this.timeBox = el('div', { class: 'ndp-input ndp-input--time' }, [this.timeInput]);\n this.row = el('div', { class: 'ndp-datetime' }, [this.dateBox, this.timeBox]);\n this.hint = el('p', {\n class: 'ndp-hint',\n id: `${id}-hint`,\n 'aria-live': 'polite',\n hidden: true,\n });\n this.hidden = el('input', { type: 'hidden' });\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.nowButton = el('button', {\n type: 'button',\n class: 'ndp-button',\n 'data-action': 'now',\n });\n this.doneButton = el('button', {\n type: 'button',\n class: 'ndp-button',\n 'data-variant': 'primary',\n 'data-action': 'done',\n });\n this.hours = el('div', {\n class: 'ndp-time__column',\n role: 'group',\n 'data-unit': 'hour',\n });\n this.minutes = el('div', {\n class: 'ndp-time__column',\n role: 'group',\n 'data-unit': 'minute',\n });\n this.time = el('div', { class: 'ndp-time', role: 'group' }, [\n this.hours,\n this.minutes,\n ]);\n const calendarRoot = el('div', { class: 'ndp-panel__calendar' });\n this.presetList = new PresetList((presetId) => {\n this.store.actions.applyPreset(presetId);\n });\n this.panel = el(\n 'div',\n {\n class: 'ndp-panel',\n id: `${id}-panel`,\n\n hidden: true,\n },\n [\n el('div', { class: 'ndp-panel__body' }, [\n this.presetList.element,\n calendarRoot,\n this.time,\n ]),\n el('div', { class: 'ndp-panel__footer' }, [\n this.segment,\n el('span', {}, [this.nowButton, this.doneButton]),\n ]),\n ],\n );\n this.field = el('div', { class: 'ndp-field' }, [\n this.row,\n this.hint,\n this.panel,\n this.hidden,\n ]);\n host.append(this.field);\n this.calendarView = new CalendarView(calendarRoot, this.store.calendar, {\n locale: () => this.options.locale,\n onDayActivate: (date) => {\n this.store.actions.selectDate(date);\n },\n });\n\n this.dateInput.addEventListener('input', () => {\n this.store.actions.typeDate(this.dateInput.value);\n });\n this.dateInput.addEventListener('blur', () => {\n this.store.actions.blurDate();\n });\n this.dateInput.addEventListener('keydown', (event) => {\n if (event.key === 'ArrowDown' && (event.altKey || this.dateInput.value === '')) {\n event.preventDefault();\n this.open();\n }\n });\n this.timeInput.addEventListener('input', () => {\n this.store.actions.typeTime(this.timeInput.value);\n });\n this.timeInput.addEventListener('blur', () => {\n this.store.actions.blurTime();\n });\n this.field.addEventListener('click', this.onClick);\n this.unsubscribe = this.store.subscribe(() => {\n this.render();\n });\n this.render();\n }\n\n getState(): DateTimePickerState {\n return this.store.getState();\n }\n\n setOptions(changes: Partial<DateTimePickerViewOptions>): 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 const hint = state.error?.message ?? state.equivalentText;\n\n if (this.dateInput.value !== state.dateText) {\n this.dateInput.value = state.dateText;\n }\n if (this.timeInput.value !== state.timeText) {\n this.timeInput.value = state.timeText;\n }\n this.dateInput.setCustomValidity(\n state.error?.field === 'date' ? state.error.message : '',\n );\n this.timeInput.setCustomValidity(\n state.error?.field === 'time' ? state.error.message : '',\n );\n setAttrs(this.dateInput, {\n placeholder: state.placeholder,\n disabled,\n required: this.options.required ?? false,\n 'aria-label': this.options.ariaLabel ?? null,\n 'aria-invalid': state.error?.field === 'date' ? 'true' : null,\n 'aria-describedby': hint ? this.hint.id : null,\n });\n setAttrs(this.timeInput, {\n placeholder: state.timePlaceholder,\n disabled,\n 'aria-label': this.options.timeLabel ?? locale.labels.time,\n 'aria-invalid': state.error?.field === 'time' ? 'true' : null,\n 'aria-describedby': hint ? this.hint.id : null,\n });\n setAttrs(this.dateBox, {\n 'data-invalid': state.error?.field === 'date',\n 'data-disabled': disabled,\n });\n setAttrs(this.timeBox, {\n 'data-invalid': state.error?.field === 'time',\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': locale.labels.chooseDate,\n });\n setAttrs(this.toggleButton, {\n disabled,\n 'aria-label': locale.labels.openCalendar,\n 'aria-expanded': state.open ? 'true' : 'false',\n });\n this.hint.hidden = hint === null;\n setText(this.hint, hint ?? '');\n setAttrs(this.hint, { 'data-error': state.error !== null });\n\n this.segment.hidden = !state.canSwitchCalendar;\n setAttrs(this.segment, { 'aria-label': locale.labels.calendar });\n for (const button of this.segment.querySelectorAll<HTMLButtonElement>('button')) {\n const calendar = button.dataset['calendar'] as CalendarSystem;\n setText(button, locale.calendarNames[calendar]);\n setAttrs(button, {\n 'aria-pressed': calendar === state.calendar ? 'true' : 'false',\n });\n }\n setText(this.nowButton, locale.labels.now);\n setText(this.doneButton, locale.labels.done);\n setAttrs(this.time, { 'aria-label': locale.labels.time });\n setAttrs(this.hours, { 'aria-label': locale.labels.hour });\n setAttrs(this.minutes, { 'aria-label': locale.labels.minute });\n renderColumn(this.hours, state.hours);\n renderColumn(this.minutes, state.minutes);\n this.presetList.render(state.presets, locale.labels.presets);\n\n const name = this.options.hiddenInput === false ? undefined : this.options.name;\n setAttrs(this.hidden, { name: name ?? null });\n this.hidden.value = state.value;\n this.hidden.disabled = name === undefined || disabled;\n setPopupMode(state, [this.dateInput], 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(this.panelWidth())}px` : null,\n );\n }\n\n private panelWidth(): number {\n return (\n (this.store.getState().presets.length > 0\n ? PANEL_WIDTH_WITH_PRESETS\n : PANEL_WIDTH) + TIME_COLUMNS_WIDTH\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.panel.hidden = false;\n const stopTracking = trackPosition(this.row, this.panel, {\n width: this.panelWidth(),\n layout: this.options.panelLayout,\n });\n const stopOutside = onOutsidePointer([this.field], () => {\n this.store.actions.close();\n });\n const stopBackdrop = onBackdropPointer(this.panel, () => {\n this.store.actions.close();\n });\n const stopEscape = onEscape(() => {\n this.store.actions.close();\n restoreFocus(this.dateInput);\n });\n this.closePanel = () => {\n stopTracking();\n stopOutside();\n stopBackdrop();\n stopEscape();\n this.panel.hidden = true;\n };\n for (const item of this.time.querySelectorAll<HTMLElement>(\n '[aria-pressed=\"true\"]',\n )) {\n if (typeof item.scrollIntoView === 'function') {\n item.scrollIntoView({ block: 'nearest' });\n }\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 item = target.closest<HTMLButtonElement>('.ndp-time-item');\n if (item) {\n const unit = item.parentElement?.dataset['unit'];\n const value = Number(item.dataset['value']);\n if (unit === 'hour') {\n this.store.actions.selectHour(value);\n } else {\n this.store.actions.selectMinute(value);\n }\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 'toggle':\n if (this.store.getState().open) {\n this.close();\n } else {\n this.open();\n }\n break;\n case 'now':\n this.store.actions.selectNow();\n break;\n case 'done':\n this.close();\n this.dateInput.focus();\n break;\n default:\n break;\n }\n };\n}\n\nfunction renderColumn(column: HTMLElement, cells: readonly TimeCell[]): void {\n if (column.children.length !== cells.length) {\n column.replaceChildren(\n ...cells.map((cell) =>\n el('button', {\n type: 'button',\n class: 'ndp-time-item',\n 'data-value': cell.value,\n }),\n ),\n );\n }\n cells.forEach((cell, index) => {\n const button = column.children[index];\n if (button) {\n setText(button, cell.label);\n setAttrs(button, {\n 'data-value': cell.value,\n 'aria-pressed': cell.isSelected ? 'true' : 'false',\n });\n }\n });\n}\n\nfunction storeOptions(\n options: Partial<DateTimePickerViewOptions>,\n): Partial<DateTimePickerOptions> {\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 type { SinglePreset } from '@nepdatejs/datepicker';\nimport { DateTimePickerView, type DateTimePickerViewOptions } from './datetime-view';\nimport {\n Base,\n str,\n bool,\n calendarAttr,\n int,\n onUnlessFalse,\n panelLayout,\n theme,\n presetIds,\n swallowInnerChange,\n type RichProps,\n} from './element-utils';\n\n/**\n * <nep-date-time-picker name=\"starts-at\" minute-step=\"15\"></nep-date-time-picker>\n *\n * A form-associated BS/AD date + time field. The form receives one instant as\n * an ISO timestamp with the zone's offset (\"2026-10-18T14:30:00+05:45\").\n * Fires `change` with { value, ad, bs, time }.\n */\nexport class NepDateTimePickerElement extends Base {\n static readonly formAssociated = true;\n static readonly observedAttributes: readonly string[] = [\n 'value',\n 'min',\n 'max',\n 'calendar',\n 'default-calendar',\n 'locale',\n 'name',\n 'required',\n 'disabled',\n 'theme',\n 'panel-layout',\n 'mask',\n 'inline',\n 'time-zone',\n 'hour12',\n 'minute-step',\n 'default-time',\n 'label',\n 'time-label',\n 'presets',\n ];\n\n view: DateTimePickerView | 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(): string {\n return this.view?.getState().value ?? '';\n }\n set value(next: 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 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 DateTimePickerView(this, {\n ...this.readOptions(),\n defaultValue: str(this, 'value'),\n onChange: (value, detail) => {\n this.dispatchEvent(\n new CustomEvent('change', {\n bubbles: true,\n detail: {\n value,\n ad: detail?.ad ?? null,\n bs: detail?.bs ?? null,\n time: detail?.time ?? null,\n },\n }),\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(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?.dateInput.focus(options);\n }\n\n private readOptions(): DateTimePickerViewOptions {\n return {\n ...this.rich,\n min: str(this, 'min'),\n max: str(this, 'max'),\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 theme: theme(this),\n panelLayout: panelLayout(this),\n mask: onUnlessFalse(this, 'mask'),\n inline: this.hasAttribute('inline'),\n timeZone: str(this, 'time-zone'),\n hour12: bool(this, 'hour12'),\n minuteStep: int(this, 'minute-step'),\n defaultTime: str(this, 'default-time'),\n ariaLabel: str(this, 'label'),\n timeLabel: str(this, 'time-label'),\n presets: presetIds(this) as readonly SinglePreset[] | undefined,\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 this.internals.setFormValue(state.value === '' ? null : state.value);\n if (state.error) {\n this.internals.setValidity(\n { customError: true },\n state.error.message,\n state.error.field === 'time' ? view.timeInput : view.dateInput,\n );\n } else if (bool(this, 'required') && state.value === '') {\n this.internals.setValidity(\n { valueMissing: true },\n 'Please choose a date and time.',\n view.dateInput,\n );\n } else {\n this.internals.setValidity({});\n }\n }\n}\n","/** `@nepdatejs/vanilla/date-time-picker`: just the date + time picker. */\nimport { NepDateTimePickerElement } from './date-time-picker-element';\nimport { DateTimePickerView, type DateTimePickerViewOptions } from './datetime-view';\nimport { defineElement, ELEMENT_NAMES } from './registry';\n\nexport { NepDateTimePickerElement };\nexport { DateTimePickerView, type DateTimePickerViewOptions } from './datetime-view';\n\n/** Register <nep-date-time-picker> (skipped if already defined). */\nexport function defineDateTimePicker(registry?: CustomElementRegistry): void {\n defineElement(ELEMENT_NAMES.dateTimePicker, NepDateTimePickerElement, registry);\n}\n\n/** Mount a date + time picker into a container. */\nexport function createDateTimePicker(\n container: HTMLElement,\n options: DateTimePickerViewOptions = {},\n): DateTimePickerView {\n return new DateTimePickerView(container, options);\n}\n","import { getLocale } from '@nepdatejs/core';\nimport {\n createMultiDatePicker,\n type MultiDatePickerOptions,\n type MultiDatePickerState,\n type MultiDatePickerStore,\n} from '@nepdatejs/datepicker';\nimport {\n onBackdropPointer,\n onEscape,\n onOutsidePointer,\n restoreFocus,\n trackPosition,\n type PanelLayout,\n} from '@nepdatejs/dom';\nimport { CalendarView } from './calendar-view';\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 this.segment.hidden = !state.canSwitchCalendar;\n setAttrs(this.segment, { 'aria-label': locale.labels.calendar });\n for (const button of this.segment.querySelectorAll<HTMLButtonElement>('button')) {\n const calendar = button.dataset['calendar'] === 'AD' ? 'AD' : 'BS';\n setText(button, locale.calendarNames[calendar]);\n setAttrs(button, { 'aria-pressed': String(calendar === state.calendar) });\n }\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.panel.hidden = false;\n const stopTracking = trackPosition(this.box, this.panel, {\n width: PANEL_WIDTH,\n layout: this.options.panelLayout,\n });\n const close = (): void => {\n this.store.actions.close();\n };\n const stopOutside = onOutsidePointer([this.field, this.panel], close);\n const stopBackdrop = onBackdropPointer(this.panel, close);\n const stopEscape = onEscape(() => {\n close();\n restoreFocus(this.input);\n });\n this.closePanel = () => {\n stopTracking();\n stopOutside();\n stopBackdrop();\n stopEscape();\n this.panel.hidden = true;\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","import { defineCalendar } from './calendar';\nimport { defineDatePicker } from './date-picker';\nimport { defineDateRangePicker } from './date-range-picker';\nimport { defineDateTimePicker } from './date-time-picker';\nimport { defineMultiDatePicker } from './multi-date-picker';\n\nexport { ELEMENT_NAMES } from './registry';\n\n/** Register all five custom elements (skips any already defined). Safe to call more than once. */\nexport function defineElements(registry?: CustomElementRegistry): void {\n defineDatePicker(registry);\n defineCalendar(registry);\n defineDateRangePicker(registry);\n defineDateTimePicker(registry);\n defineMultiDatePicker(registry);\n}\n","/** `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":"A,8FACA,IAAMmB,EAAU,CACf,UAAW,KACX,WAAY,OACZ,gBAAiB,KACjB,MAAO,CACN,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,EACA,CACC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,EACD,CACD,CACD,EChyDA,IAAIC,EAAoB,cAAc,UAAW,CAChD,YAAY,EAAM,EAAS,CAC1B,MAAMC,CAAO,EACb,KAAK,KAAO,oBACZ,KAAK,KAAOC,CACb,CACD,EAcA,SAASC,EAAW,EAAO,CAC1B,GAAI,CAAC,OAAO,cAAcC,CAAK,EAAG,MAAM,IAAIJ,EAAkB,mBAAoB,GAAG,OAAOI,CAAK,EAAE,gCAAgC,EACnI,OAAOA,CACR,CAEA,SAASC,EAAU,EAAO,CACzB,QAASC,EAAQ,GAAK,EAAI,GAAK,CAChC,CAGA,IAAMC,EAAa,CAClB,UACA,SACA,OACA,UACA,SACA,SACA,SACA,UACA,QACA,OACA,SACA,SACD,EACMC,EAAa,CAClB,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,UACD,EACMC,EAAK,CACV,OAAQ,CACP,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GACD,EACA,SAAU,CACT,KAAM,CACL,SACA,SACA,UACA,YACA,WACA,SACA,UACD,EACA,MAAO,CACN,MACA,MACA,MACA,MACA,MACA,MACA,KACD,EACA,OAAQ,CACP,KACA,KACA,KACA,KACA,KACA,KACA,IACD,CACD,EACA,OAAQ,CACP,GAAI,CACH,KAAMD,EACN,MAAOA,EAAW,IAAK,GAASE,EAAK,MAAM,EAAG,CAAC,CAAC,CACjD,EACA,GAAI,CACH,KAAMH,EACN,MAAOA,EAAW,IAAK,GAASG,EAAK,MAAM,EAAG,CAAC,CAAC,CACjD,CACD,EACA,cAAe,CACd,GAAI,KACJ,GAAI,IACL,EACA,OAAQ,CACP,MAAO,QACP,MAAO,aACP,cAAe,iBACf,UAAW,aACX,aAAc,gBACd,SAAU,YACV,MAAO,QACP,KAAM,OACN,aAAc,gBACd,WAAY,gBACZ,SAAU,WACV,QAAS,YACT,WAAY,cACZ,KAAM,OACN,KAAM,OACN,OAAQ,SACR,IAAK,MACL,KAAM,MACP,EACA,KAAM,CACL,GAAI,KACJ,GAAI,IACL,EACA,QAAS,CACR,MAAO,QACP,UAAW,YACX,SAAU,WACV,SAAU,YACV,SAAU,YACV,UAAW,cACX,WAAY,eACZ,UAAW,aACX,UAAW,aACX,SAAU,YACV,eAAgB,mBAChB,eAAgB,kBACjB,EACA,SAAU,CACT,cAAe,CACd,GAAI,kCACJ,GAAI,gCACL,EACA,WAAY,qCACZ,UAAW,yBACX,WAAY,2BACZ,YAAa,8BACb,cAAe,8BACf,aAAc,6BACd,aAAc,8BACd,YAAa,wBACd,CACD,EAGMC,EAAW,CAChB,QACA,MACA,OACA,OACA,MACA,OACA,UACA,SACA,MACA,MACA,UACA,KACD,EACMC,EAAW,CAChB,QACA,YACA,QACA,SACA,KACA,MACA,QACA,QACA,aACA,UACA,WACA,UACD,EAGMC,kBAA0B,IAAI,IAAI,CAAC,CAAC,KAAMJ,CAAE,EAAG,C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"}
|