{"_id":"@digitalcrafted/str-check-in-out-date-picker","_rev":"6-1bb2b1f7c8d7347398c6366f561b1f0f","name":"@digitalcrafted/str-check-in-out-date-picker","dist-tags":{"latest":"2.0.1"},"versions":{"1.0.0":{"name":"@digitalcrafted/str-check-in-out-date-picker","version":"1.0.0","keywords":["vue","vue3","date-picker","booking","check-in","check-out","date-range"],"author":"","license":"MIT","_id":"@digitalcrafted/str-check-in-out-date-picker@1.0.0","maintainers":[{"name":"digitalcrafted","email":"franconwu@gmail.com"}],"dist":{"shasum":"c5ba56ee406a6f1e53e2e1330e303ff6f448387f","tarball":"https://registry.npmjs.org/@digitalcrafted/str-check-in-out-date-picker/-/str-check-in-out-date-picker-1.0.0.tgz","fileCount":4,"integrity":"sha512-Oqhc1b8oBu2okKCUGNFpmdIHljDJI+1xUXZ+pq60rQ6O0xVxk8AKjh/+hTKNKqh3A9fmNoquG0J0xRRNh0lO+g==","signatures":[{"sig":"MEQCIDG7rl9Opt/V71pkaBxV0SUgiPvqKxvK5n4Le7J1OCpYAiB1wDyWEwjEZVVyuj93sJko1JR7EuDE+UaMnT5MoWiVRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":357766},"main":"./dist/index.js","type":"module","style":"./dist/style.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"8491a96eb392c278307e2606ee92e456ccb7994e","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","prepublishOnly":"npm run build"},"_npmUser":{"name":"digitalcrafted","email":"franconwu@gmail.com"},"_npmVersion":"10.9.2","description":"A reusable Vue 3 component library for check-in/check-out date pickers with booking date validation","directories":{},"_nodeVersion":"22.14.0","dependencies":{"vue":"^3.5.0","dayjs":"^1.11.13","@vuepic/vue-datepicker":"^12.0.5"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.9","postcss":"^8.4.47","typescript":"~5.6.2","tailwindcss":"^3.4.14","autoprefixer":"^10.4.20","@vitejs/plugin-vue":"^5.1.4"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/str-check-in-out-date-picker_1.0.0_1764587822999_0.7042641958867437","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@digitalcrafted/str-check-in-out-date-picker","version":"1.1.0","keywords":["vue","vue3","date-picker","booking","check-in","check-out","date-range"],"author":"","license":"MIT","_id":"@digitalcrafted/str-check-in-out-date-picker@1.1.0","maintainers":[{"name":"digitalcrafted","email":"franconwu@gmail.com"}],"dist":{"shasum":"0bd7093e9f9b89223f53a8d0432552ffc39721d2","tarball":"https://registry.npmjs.org/@digitalcrafted/str-check-in-out-date-picker/-/str-check-in-out-date-picker-1.1.0.tgz","fileCount":4,"integrity":"sha512-tvVE/dXxTpz9eC/MjtZZf8dR5u0G0tT6ySaU3fIWbAB0ym8U+9VwdSXsC7w5Ca7SQNZrBcK47odhfx7WT8XIiA==","signatures":[{"sig":"MEUCIQCi/lD5vBkc/FOMFLOizC04dH1OWhDjl2Z8xHNG+1MXvwIgSfkfLuEVQ6yBPMKD679PsfCrFesWhMn28+P5/6iP/Hk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":376987},"main":"./dist/index.js","type":"module","style":"./dist/style.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"8491a96eb392c278307e2606ee92e456ccb7994e","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","version:build":"node scripts/version-and-build.js","prepublishOnly":"npm run version:build"},"_npmUser":{"name":"digitalcrafted","email":"franconwu@gmail.com"},"_npmVersion":"10.9.2","description":"A reusable Vue 3 component library for check-in/check-out date pickers with booking date validation","directories":{},"_nodeVersion":"22.14.0","dependencies":{"vue":"^3.5.0","dayjs":"^1.11.13","@vuepic/vue-datepicker":"^12.0.5"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.9","postcss":"^8.4.47","typescript":"~5.6.2","tailwindcss":"^3.4.14","autoprefixer":"^10.4.20","@vitejs/plugin-vue":"^5.1.4"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/str-check-in-out-date-picker_1.1.0_1764626069893_0.4270236276282726","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@digitalcrafted/str-check-in-out-date-picker","version":"1.2.0","keywords":["vue","vue3","date-picker","booking","check-in","check-out","date-range"],"author":"","license":"MIT","_id":"@digitalcrafted/str-check-in-out-date-picker@1.2.0","maintainers":[{"name":"digitalcrafted","email":"franconwu@gmail.com"}],"dist":{"shasum":"f0126362f715c1dfd6f2b99a0f5ff58332639ed9","tarball":"https://registry.npmjs.org/@digitalcrafted/str-check-in-out-date-picker/-/str-check-in-out-date-picker-1.2.0.tgz","fileCount":4,"integrity":"sha512-DtE7J9u9+MHscxBUBZ+pub2X8OUxtKaikPcLpMFNb5XJL60180u3TK27FRKgpBwgf6FZBDVh8FgNozGGmjVIzQ==","signatures":[{"sig":"MEUCIBkc30mP2LLJCktjz0THMHrJ2qCML6wHWRshCVT+o6y+AiEAvajl9XvM+dD0Z4G+YTMAtCyzhHEstvsm/50fH93HiM8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":353067},"main":"./dist/index.js","type":"module","style":"./dist/style.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"d4e61e436a56f3068a7cf44b544c378d4bb142cf","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","version:build":"node scripts/version-and-build.js","prepublishOnly":"npm run version:build"},"_npmUser":{"name":"digitalcrafted","email":"franconwu@gmail.com"},"_npmVersion":"10.9.2","description":"A reusable Vue 3 component library for check-in/check-out date pickers with booking date validation","directories":{},"_nodeVersion":"22.14.0","dependencies":{"vue":"^3.5.0","dayjs":"^1.11.13","@vuepic/vue-datepicker":"^12.0.5"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.9","postcss":"^8.4.47","typescript":"~5.6.2","tailwindcss":"^3.4.14","autoprefixer":"^10.4.20","@vitejs/plugin-vue":"^5.1.4"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/str-check-in-out-date-picker_1.2.0_1764628928101_0.4304668279298671","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@digitalcrafted/str-check-in-out-date-picker","version":"1.3.0","keywords":["vue","vue3","date-picker","booking","check-in","check-out","date-range"],"author":"","license":"MIT","_id":"@digitalcrafted/str-check-in-out-date-picker@1.3.0","maintainers":[{"name":"digitalcrafted","email":"franconwu@gmail.com"}],"dist":{"shasum":"e8b8ae4aa6a95431755844d4e01835ca0d108740","tarball":"https://registry.npmjs.org/@digitalcrafted/str-check-in-out-date-picker/-/str-check-in-out-date-picker-1.3.0.tgz","fileCount":4,"integrity":"sha512-2sBWPkz/4N6HMPf/ZijWxb8xaP3jDZRdcVuyXofZKrkgX9r1bDkwTii8juF53dfR4/SzTRPRp77kqTSrOauOCA==","signatures":[{"sig":"MEUCIQDXtIjtnm1wiRBEaGK1DmApZNeWFzAc2EEf9IIqi23CKwIgNw9UMeruIle5s6/UyuTMMS/jMk4HPzXtIkzSqxL9Veo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":353395},"main":"./dist/index.js","type":"module","style":"./dist/style.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"d4e61e436a56f3068a7cf44b544c378d4bb142cf","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","version:build":"node scripts/version-and-build.js","prepublishOnly":"npm run version:build"},"_npmUser":{"name":"digitalcrafted","email":"franconwu@gmail.com"},"_npmVersion":"10.9.2","description":"A reusable Vue 3 component library for check-in/check-out date pickers with booking date validation","directories":{},"_nodeVersion":"22.14.0","dependencies":{"vue":"^3.5.0","dayjs":"^1.11.13","@vuepic/vue-datepicker":"^12.0.5"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.9","postcss":"^8.4.47","typescript":"~5.6.2","tailwindcss":"^3.4.14","autoprefixer":"^10.4.20","@vitejs/plugin-vue":"^5.1.4"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/str-check-in-out-date-picker_1.3.0_1764629268347_0.8112817776085011","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@digitalcrafted/str-check-in-out-date-picker","version":"2.0.0","keywords":["vue","vue3","date-picker","booking","check-in","check-out","date-range"],"author":"","license":"MIT","_id":"@digitalcrafted/str-check-in-out-date-picker@2.0.0","maintainers":[{"name":"digitalcrafted","email":"franconwu@gmail.com"}],"dist":{"shasum":"a7565f4cd15e738bce70ac3c22ee3eea633c988d","tarball":"https://registry.npmjs.org/@digitalcrafted/str-check-in-out-date-picker/-/str-check-in-out-date-picker-2.0.0.tgz","fileCount":4,"integrity":"sha512-So8hHB6LfWvihWcttaEdltg35LnVe6vzpSioeJIBIZIUyOMcsleLFC4Fx4F2o68m1rRyDc41aVMAJeawHjGlWQ==","signatures":[{"sig":"MEYCIQCdOK1OoWmPpOdysBCTE56DDAOaM3G5AKOgV5jsNFQFKgIhANOGycN0+S3oEk9y92a9tNZ2Fb6KzKYDCrUyk7S+0ywz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":358111},"main":"./dist/index.js","type":"module","style":"./dist/style.css","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./style.css":"./dist/style.css"},"gitHead":"fb6ab1d575966f81ae1537d17c54e10456c6d259","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","version:build":"node scripts/version-and-build.js","prepublishOnly":"npm run version:build"},"_npmUser":{"name":"digitalcrafted","email":"franconwu@gmail.com"},"_npmVersion":"10.9.2","description":"A reusable Vue 3 component library for check-in/check-out date pickers with booking date validation","directories":{},"_nodeVersion":"22.14.0","dependencies":{"vue":"^3.5.0","dayjs":"^1.11.13","@vuepic/vue-datepicker":"^12.0.5"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^5.4.9","postcss":"^8.4.47","typescript":"~5.6.2","tailwindcss":"^3.4.14","autoprefixer":"^10.4.20","@vitejs/plugin-vue":"^5.1.4"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/str-check-in-out-date-picker_2.0.0_1771323623108_0.055751667846064556","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@digitalcrafted/str-check-in-out-date-picker","version":"2.0.1","description":"A reusable Vue 3 component library for check-in/check-out date pickers with booking date validation","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","style":"./dist/style.css","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./style.css":"./dist/style.css"},"scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","version:build":"node scripts/version-and-build.js","prepublishOnly":"npm run version:build"},"keywords":["vue","vue3","date-picker","booking","check-in","check-out","date-range"],"author":"","license":"MIT","dependencies":{"vue":"^3.5.0","@vuepic/vue-datepicker":"^12.0.5","dayjs":"^1.11.13"},"devDependencies":{"@vitejs/plugin-vue":"^5.1.4","typescript":"~5.6.2","vite":"^5.4.9","tailwindcss":"^3.4.14","postcss":"^8.4.47","autoprefixer":"^10.4.20"},"peerDependencies":{},"_id":"@digitalcrafted/str-check-in-out-date-picker@2.0.1","gitHead":"dc6c8c94c5ce4d2874e59dccf43482a002f7d69c","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-9t69pZmAshJn7FCRhnlV5FU/2Q5tbWKVnNlgzA6LiHzY5NuVMPUqtpZ4kb927hG+bFYLILQGQlvJLnBq2b/OhQ==","shasum":"a7e2818bb369227e32359963f179b5e06f2e2e0d","tarball":"https://registry.npmjs.org/@digitalcrafted/str-check-in-out-date-picker/-/str-check-in-out-date-picker-2.0.1.tgz","fileCount":4,"unpackedSize":382097,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHFe+XT+r3If3msi24sUwSYyUBsrl3RlPDTnc0jUIkHPAiBWfFDJ1lwY3UEwuDoSBqeABO2yzI5vDwKOWXE9yz/g0g=="}]},"_npmUser":{"name":"digitalcrafted","email":"franconwu@gmail.com"},"directories":{},"maintainers":[{"name":"digitalcrafted","email":"franconwu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/str-check-in-out-date-picker_2.0.1_1771326025368_0.5764843112174722"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-01T11:17:02.881Z","modified":"2026-02-17T11:00:25.655Z","1.0.0":"2025-12-01T11:17:03.206Z","1.1.0":"2025-12-01T21:54:30.078Z","1.2.0":"2025-12-01T22:42:08.292Z","1.3.0":"2025-12-01T22:47:48.578Z","2.0.0":"2026-02-17T10:20:23.249Z","2.0.1":"2026-02-17T11:00:25.518Z"},"license":"MIT","keywords":["vue","vue3","date-picker","booking","check-in","check-out","date-range"],"description":"A reusable Vue 3 component library for check-in/check-out date pickers with booking date validation","maintainers":[{"name":"digitalcrafted","email":"franconwu@gmail.com"}],"readme":"# @digitalcrafted/str-check-in-out-date-picker\n\nA reusable Vue 3 component library for check-in/check-out date pickers with booking date validation and disabled date logic.\n\n## Installation\n\n```bash\nnpm install @digitalcrafted/str-check-in-out-date-picker\n```\n\n## Prerequisites\n\n- Vue 3.x\n- Tailwind CSS configured in your project\n\n## Booked dates format\n\nThe `bookedDates` prop expects an array of `{ start, end }` in **YYYY-MM-DD** format:\n\n- **start**: Check-in date of the existing booking.\n- **end**: Last night of stay (check-out date minus 1). Actual checkout day = `end + 1`.\n\nThis matches the common backend convention (e.g. `GET /properties/:id/booked-dates`). The package uses **UTC** for all date comparisons to avoid timezone shifts and stay aligned with backend overlap logic.\n\n## Setup\n\n### CSS Import\n\nImport the package style so the date picker inputs and calendar popup are styled. This file includes **VueDatePicker** base styles (you do not need to import `@vuepic/vue-datepicker` CSS separately):\n\n```typescript\nimport '@digitalcrafted/str-check-in-out-date-picker/style.css'\n```\n\nOr add it to your main CSS file:\n\n```css\n@import '@digitalcrafted/str-check-in-out-date-picker/style.css';\n```\n\nThe package style also provides optional Tailwind-based utilities. The CSS is not auto-imported so you can control load order and avoid conflicts with your app's styles.\n\n## Usage\n\n### Using the Combined Component\n\nThe easiest way to use the date picker is with the `BookingDateRange` component:\n\n```vue\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { BookingDateRange } from '@digitalcrafted/str-check-in-out-date-picker'\nimport type { BookedDateRange } from '@digitalcrafted/str-check-in-out-date-picker'\n\nconst bookedDates = ref<BookedDateRange[]>([\n  { start: '2024-12-15', end: '2024-12-20' },\n  { start: '2024-12-25', end: '2024-12-30' }\n])\n\nconst handleCheckInChange = (date: string | null) => {\n  console.log('Check-in date:', date)\n}\n\nconst handleCheckOutChange = (date: string | null) => {\n  console.log('Check-out date:', date)\n}\n\nconst handleValidationError = (message: string) => {\n  console.error('Validation error:', message)\n  // Show error to user (e.g., using toast notification)\n}\n</script>\n\n<template>\n  <BookingDateRange\n    :booked-dates=\"bookedDates\"\n    @check-in-change=\"handleCheckInChange\"\n    @check-out-change=\"handleCheckOutChange\"\n    @validation-error=\"handleValidationError\"\n  />\n</template>\n```\n\n### Using Individual Components\n\nYou can also use the individual date picker components with the composable:\n\n```vue\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { \n  CheckInDatePicker, \n  CheckOutDatePicker,\n  useBookingDatePicker \n} from '@digitalcrafted/str-check-in-out-date-picker'\nimport type { BookedDateRange } from '@digitalcrafted/str-check-in-out-date-picker'\n\nconst bookedDates = ref<BookedDateRange[]>([\n  { start: '2024-12-15', end: '2024-12-20' }\n])\n\nconst {\n  checkInDate,\n  checkOutDate,\n  minCheckOutDate,\n  disabledCheckInDates,\n  disabledCheckOutDates,\n  handleCheckInChange,\n  handleCheckOutChange,\n  today\n} = useBookingDatePicker({\n  bookedDates: bookedDates.value,\n  onCheckInChange: (date) => console.log('Check-in:', date),\n  onCheckOutChange: (date) => console.log('Check-out:', date),\n  onValidationError: (message) => console.error(message)\n})\n</script>\n\n<template>\n  <div>\n    <CheckInDatePicker\n      v-model=\"checkInDate\"\n      :min-date=\"today\"\n      :disabled-dates=\"disabledCheckInDates\"\n      @update:model-value=\"handleCheckInChange\"\n    />\n    \n    <CheckOutDatePicker\n      v-model=\"checkOutDate\"\n      :min-date=\"minCheckOutDate\"\n      :start-date=\"checkInDate || minCheckOutDate\"\n      :disabled=\"!checkInDate\"\n      :disabled-dates=\"disabledCheckOutDates\"\n      @update:model-value=\"handleCheckOutChange\"\n    />\n  </div>\n</template>\n```\n\n### Using the Composable Directly\n\nFor maximum flexibility, you can use the composable directly:\n\n```vue\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useBookingDatePicker } from '@digitalcrafted/str-check-in-out-date-picker'\nimport type { BookedDateRange } from '@digitalcrafted/str-check-in-out-date-picker'\n\nconst bookedDates = ref<BookedDateRange[]>([\n  { start: '2024-12-15', end: '2024-12-20' }\n])\n\nconst {\n  checkInDate,\n  checkOutDate,\n  disabledCheckInDates,\n  disabledCheckOutDates,\n  handleCheckInChange,\n  handleCheckOutChange\n} = useBookingDatePicker({\n  bookedDates: bookedDates.value,\n  onCheckInChange: (date) => {\n    console.log('Check-in changed:', date)\n  },\n  onCheckOutChange: (date) => {\n    console.log('Check-out changed:', date)\n  },\n  onValidationError: (message) => {\n    alert(message)\n  }\n})\n</script>\n```\n\n## Usage in mini-sites\n\nUse the package on booking mini-sites (e.g. property-specific sites) with the same business rules as the main STR booking form:\n\n1. **Fetch booked dates** from your API (e.g. `GET /properties/:propertyId/booked-dates`) and pass the response array to the `bookedDates` prop. The API should return `{ start, end }[]` with `end` = last night of stay (check-out date minus 1).\n\n2. **Use the component or composable**:\n   - **Simple**: Use `<BookingDateRange :booked-dates=\"bookedDates\" @check-in-change=\"...\" @check-out-change=\"...\" @validation-error=\"...\" />` for a ready-made layout.\n   - **Custom layout**: Use `useBookingDatePicker({ bookedDates, onCheckInChange, onCheckOutChange, onValidationError })` and render your own grid and VueDatePicker wrappers (e.g. to match str-frontend-style labels and styling).\n\n3. **Optional**: If your app does not use Tailwind CSS, import the package styles: `import '@digitalcrafted/str-check-in-out-date-picker/style.css'`.\n\n4. **Output**: Callbacks receive date strings in **YYYY-MM-DD**. Display format (e.g. dd/MM/yyyy) is configurable via the component props.\n\n## API Reference\n\n### BookingDateRange Component\n\n#### Props\n\n| Prop | Type | Default | Description |\n|------|------|---------|-------------|\n| `bookedDates` | `BookedDateRange[] \\| (() => BookedDateRange[])` | `[]` | Array of booked date ranges or a function that returns them |\n| `checkInDate` | `Date \\| null` | `null` | Initial check-in date |\n| `checkOutDate` | `Date \\| null` | `null` | Initial check-out date |\n| `minDate` | `Date` | `undefined` | Minimum selectable date (defaults to today) |\n| `dateFormat` | `string` | `'YYYY-MM-DD'` | Format for date storage |\n| `displayFormat` | `string` | `'dd/MM/yyyy'` | Format for date display |\n| `checkInPlaceholder` | `string` | `'Check In Date'` | Placeholder for check-in input |\n| `checkOutPlaceholder` | `string` | `'Check Out Date'` | Placeholder for check-out input |\n| `checkInInputClass` | `string` | Default Tailwind classes | Custom CSS classes for check-in input |\n| `checkOutInputClass` | `string` | Default Tailwind classes | Custom CSS classes for check-out input |\n\n#### Events\n\n| Event | Payload | Description |\n|-------|---------|-------------|\n| `check-in-change` | `string \\| null` | Emitted when check-in date changes |\n| `check-out-change` | `string \\| null` | Emitted when check-out date changes |\n| `validation-error` | `string` | Emitted when validation fails |\n\n### useBookingDatePicker Composable\n\n#### Options\n\n```typescript\ninterface UseBookingDatePickerOptions {\n  bookedDates: BookedDateRange[] | (() => BookedDateRange[])\n  onCheckInChange?: (date: string | null) => void\n  onCheckOutChange?: (date: string | null) => void\n  onValidationError?: (message: string) => void\n  minDate?: Date\n  dateFormat?: string\n  displayFormat?: string\n}\n```\n\n#### Returns\n\n```typescript\n{\n  checkInDate: Ref<Date | null>\n  checkOutDate: Ref<Date | null>\n  minCheckOutDate: ComputedRef<Date>\n  disabledCheckInDates: ComputedRef<Date[]>\n  disabledCheckOutDates: ComputedRef<Date[]>\n  handleCheckInChange: (date: Date | null) => void\n  handleCheckOutChange: (date: Date | null) => void\n  today: ComputedRef<Date>\n}\n```\n\n## Business Logic\n\nThe library implements the following business rules:\n\n1. **Check-in dates**: Can be selected on checkout dates (end dates) and check-in dates (start dates) of booked ranges - allows same-day turnarounds\n2. **Check-in dates**: Cannot be selected on dates strictly between booked start and end (excludes both start and end dates)\n3. **Check-out dates**: Can be selected on checkout dates and check-in dates (same-day bookings allowed)\n4. **Check-out dates**: Cannot span into booked periods (dates strictly between booked start and end are disabled)\n5. **Check-out**: Automatically cleared when check-in changes\n6. **Validation**: Check-out cannot be before check-in (same day is allowed)\n7. **Validation**: Range cannot span booked dates (excluding check-in/checkout dates)\n\n## Type Definitions\n\n```typescript\ninterface BookedDateRange {\n  start: string | Date\n  end: string | Date\n}\n```\n\n## License\n\nMIT\n\n","readmeFilename":"README.md"}