{"_id":"@bsday.js/svelte","name":"@bsday.js/svelte","dist-tags":{"latest":"1.2.0"},"versions":{"1.2.0":{"name":"@bsday.js/svelte","version":"1.2.0","description":"Headless Svelte 4/5 stores and runes primitives for Bikram Sambat (BS) Nepali calendar, datepicker, and range picker.","publishConfig":{"access":"public"},"engines":{"node":">=20"},"license":"MIT","sideEffects":false,"type":"module","main":"dist/index.cjs","module":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"peerDependencies":{"svelte":">=4.0.0 || >=5.0.0","@bsday.js/core":"1.2.0"},"devDependencies":{"svelte":"^5.57.0","@bsday.js/core":"1.2.0"},"author":{"name":"shurajcodx"},"repository":{"type":"git","url":"git+https://github.com/shurajcodx/bsday.js.git"},"bugs":{"url":"https://github.com/shurajcodx/bsday.js/issues"},"homepage":"https://bsdayjs.vercel.app","keywords":["svelte-nepali-calendar","svelte-nepali-datepicker","nepali-datepicker","nepali-calendar-svelte","nepali-calendar","bikram-sambat-svelte","bikram-sambat","nepali-date","createBSCalendar","createBSDatePicker","createBSRangePicker","svelte","svelte5","stores","runes","date-range-picker","nepali-patro-svelte","bsday","bsdayjs","headless-ui","typescript"],"scripts":{"build":"tsup","test":"vitest run","test:coverage":"vitest run --coverage","typecheck":"tsc -p tsconfig.json --noEmit"},"_id":"@bsday.js/svelte@1.2.0","_integrity":"sha512-zFtQE3yeHf0UB1FAJK3ycujH7BzbFIAODAhMPkz+xblrvSWvOp+V8baAoWcEtBkNpDfbRVrjI8FBGCdF/Oi2yg==","_resolved":"/tmp/e0129f51f08ad5ceec2b6d58f5fef305/bsday.js-svelte-1.2.0.tgz","_from":"file:bsday.js-svelte-1.2.0.tgz","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-zFtQE3yeHf0UB1FAJK3ycujH7BzbFIAODAhMPkz+xblrvSWvOp+V8baAoWcEtBkNpDfbRVrjI8FBGCdF/Oi2yg==","shasum":"7d1ba7b5433cffec52b0e19764ccf009a5075d12","tarball":"https://registry.npmjs.org/@bsday.js/svelte/-/svelte-1.2.0.tgz","fileCount":9,"unpackedSize":91054,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAZG4cvD+XIophTaXMG/EgvMmFU7wCo5j9JUxAbsiJ9wAiEAwZXvREfZgNOS6htdMi/P9na3HzBGh1X9lzxSFqcI/u8="}]},"_npmUser":{"name":"shuraj.rai","email":"shuraj.shampang@gmail.com"},"directories":{},"maintainers":[{"name":"shuraj.rai","email":"shuraj.shampang@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/svelte_1.2.0_1788066316227_0.5326073610008539"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-30T05:05:16.024Z","1.2.0":"2026-08-30T05:05:16.388Z","modified":"2026-08-30T05:05:16.628Z"},"maintainers":[{"name":"shuraj.rai","email":"shuraj.shampang@gmail.com"}],"description":"Headless Svelte 4/5 stores and runes primitives for Bikram Sambat (BS) Nepali calendar, datepicker, and range picker.","homepage":"https://bsdayjs.vercel.app","keywords":["svelte-nepali-calendar","svelte-nepali-datepicker","nepali-datepicker","nepali-calendar-svelte","nepali-calendar","bikram-sambat-svelte","bikram-sambat","nepali-date","createBSCalendar","createBSDatePicker","createBSRangePicker","svelte","svelte5","stores","runes","date-range-picker","nepali-patro-svelte","bsday","bsdayjs","headless-ui","typescript"],"repository":{"type":"git","url":"git+https://github.com/shurajcodx/bsday.js.git"},"author":{"name":"shurajcodx"},"bugs":{"url":"https://github.com/shurajcodx/bsday.js/issues"},"license":"MIT","readme":"# 🧡 @bsday.js/svelte\n\n> **Headless, accessible (WAI-ARIA) Svelte stores and runes primitives for Bikram Sambat (BS) Nepali Calendar, Datepicker, and Range Picker.**\n\n[![Website](https://img.shields.io/badge/website-bsdayjs.vercel.app-blue.svg?style=flat-square&logo=vercel)](https://bsdayjs.vercel.app)\n[![npm version](https://img.shields.io/npm/v/@bsday.js/svelte.svg?style=flat-square&color=orange)](https://www.npmjs.com/package/@bsday.js/svelte)\n[![bundle size](<https://img.shields.io/badge/bundle%20size-~3KB%20(gzipped)-emerald.svg?style=flat-square>)](https://bundlephobia.com/package/@bsday.js/svelte)\n[![TypeScript](https://img.shields.io/badge/TypeScript-100%25-blue.svg?style=flat-square)](https://www.typescriptlang.org)\n[![license](https://img.shields.io/badge/license-MIT-green.svg?style=flat-square)](https://github.com/shurajcodx/bsday.js/blob/main/LICENSE)\n\n🌐 **Official Website & Playground**: [https://bsdayjs.vercel.app](https://bsdayjs.vercel.app)  \n📖 **Documentation**: [https://bsdayjs.vercel.app/docs](https://bsdayjs.vercel.app/docs)  \n🗓️ **Dual-Calendar Explorer**: [https://bsdayjs.vercel.app/dataset](https://bsdayjs.vercel.app/dataset)\n\n---\n\n## ✨ Features\n\n- 🎯 **Headless & Unstyled**: Built with lightweight Svelte reactive stores (`writable`, `derived`), compatible with Svelte 4 and Svelte 5 (Runes).\n- ♿ **WAI-ARIA Accessible**: Semantic `role=\"grid\"`, `role=\"gridcell\"`, `aria-selected`, `aria-disabled`, and localized `aria-label`.\n- ⌨️ **Full Keyboard Navigation**: `ArrowLeft`/`ArrowRight` (±1 day), `ArrowUp`/`ArrowDown` (±1 week), `PageUp`/`PageDown` (±1 month/year), `Home`/`End`.\n- 🇳🇵 **Bilingual & Devanagari**: Full support for Nepali numerals (`०-९`), month names (`वैशाख - चैत`), and English formatting.\n\n---\n\n## 📦 Installation\n\n```bash\nnpm install @bsday.js/core @bsday.js/svelte\n# or\npnpm add @bsday.js/core @bsday.js/svelte\n# or\nyarn add @bsday.js/core @bsday.js/svelte\n```\n\n---\n\n## 🚀 Quick Start & Usage\n\n### 1. Calendar Grid Component (`createNepaliCalendar`)\n\n```svelte\n<script lang=\"ts\">\n  import { createNepaliCalendar } from '@bsday.js/svelte';\n\n  const cal = createNepaliCalendar({\n    initialYear: 2081,\n    initialMonth: 5,\n    locale: 'ne',\n  });\n\n  const { year, month, matrix, currentMonthName, weekdayNames, goToNextMonth, goToPrevMonth, getGridProps, getCellProps } = cal;\n</script>\n\n<div class=\"w-80 rounded-2xl border p-4 shadow-xl\">\n  <!-- Month Navigation Header -->\n  <div class=\"flex items-center justify-between pb-3\">\n    <button on:click={goToPrevMonth} aria-label=\"Previous Month\">&larr;</button>\n    <span class=\"font-bold\">{$currentMonthName} {$year}</span>\n    <button on:click={goToNextMonth} aria-label=\"Next Month\">&rarr;</button>\n  </div>\n\n  <!-- Weekday Labels -->\n  <div class=\"grid grid-cols-7 gap-1 text-center text-xs font-semibold text-gray-500\">\n    {#each $weekdayNames as day, idx}\n      <div class={idx === 6 ? 'text-red-500' : ''}>{day}</div>\n    {/each}\n  </div>\n\n  <!-- 42-Cell Grid Matrix -->\n  <div {...getGridProps()} class=\"mt-2 space-y-1 outline-none\">\n    {#each $matrix as week}\n      <div class=\"grid grid-cols-7 gap-1\">\n        {#each week as cell}\n          <button\n            {...getCellProps(cell, { onSelect: (c) => console.log('Selected BS Date:', c.dateString) })}\n            class=\"h-9 w-full rounded text-sm hover:bg-orange-50 {!cell.isCurrentMonth ? 'text-gray-300' : cell.isSaturday ? 'text-red-600 font-semibold' : 'text-gray-800'}\"\n          >\n            {cell.dayText}\n          </button>\n        {/each}\n      </div>\n    {/each}\n  </div>\n</div>\n```\n\n---\n\n### 2. Single Datepicker (`createNepaliDatePicker`)\n\n```svelte\n<script lang=\"ts\">\n  import { createNepaliDatePicker } from '@bsday.js/svelte';\n\n  const picker = createNepaliDatePicker({\n    defaultValue: '2081/05/15',\n    locale: 'ne',\n    format: 'YYYY/MM/DD',\n  });\n\n  const { formattedValue, isOpen, open, toggle, selectDate, calendar, getInputProps, getTriggerProps } = picker;\n</script>\n\n<div class=\"relative\">\n  <div class=\"flex gap-2\">\n    <input {...getInputProps()} class=\"border px-3 py-2 rounded-lg\" />\n    <button {...getTriggerProps()} class=\"bg-orange-600 text-white px-4 py-2 rounded-lg\">\n      📅\n    </button>\n  </div>\n\n  {#if $isOpen}\n    <div class=\"absolute top-12 left-0 z-50 bg-white border p-4 rounded-xl shadow-2xl\">\n      <div class=\"flex justify-between pb-2\">\n        <button on:click={calendar.goToPrevMonth}>&larr;</button>\n        <span class=\"font-bold\">{$calendar.currentMonthName} {$calendar.year}</span>\n        <button on:click={calendar.goToNextMonth}>&rarr;</button>\n      </div>\n      <div class=\"grid grid-cols-7 gap-1\">\n        {#each $calendar.matrix.flat() as cell}\n          <button\n            {...calendar.getCellProps(cell, { onSelect: (c) => selectDate(c.dateString) })}\n            class=\"h-8 w-8 rounded text-xs hover:bg-orange-100\"\n          >\n            {cell.dayText}\n          </button>\n        {/each}\n      </div>\n    </div>\n  {/if}\n</div>\n```\n\n---\n\n## 📖 API Reference\n\n| Store Primitive                    | Description                                                   | Return Stores / Methods                                                                                  |\n| :--------------------------------- | :------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------- |\n| **`createBSCalendar(options)`**    | Svelte stores for calendar matrix, navigation & ARIA handlers | `$year`, `$month`, `$matrix`, `$currentMonthName`, `goToNextMonth()`, `getGridProps()`, `getCellProps()` |\n| **`createBSDatePicker(options)`**  | Svelte stores for single date selection with popover state    | `$selectedDate`, `$formattedValue`, `$isOpen`, `open()`, `close()`, `selectDate()`, `getInputProps()`    |\n| **`createBSRangePicker(options)`** | Svelte stores for date range selection and hover preview      | `$startDate`, `$endDate`, `$hoverDate`, `selectDate()`, `isDateInRange()`, `clear()`                     |\n\n_(Note: `createNepaliCalendar`, `createNepaliDatePicker`, and `createNepaliRangePicker` are exported as backward-compatible aliases)._\n\n---\n\n## 📄 License\n\nMIT © [shurajcodx](https://github.com/shurajcodx)\n","readmeFilename":"README.md","_rev":"1-781c00790d40fabb89b51f2854593424"}