{"_id":"@distribusion/seats-sdk","_rev":"5-beaead5fee3874d9e8440b0fe4a5135f","name":"@distribusion/seats-sdk","dist-tags":{"latest":"1.1.2"},"versions":{"1.1.0-rc.9":{"name":"@distribusion/seats-sdk","version":"1.1.0-rc.9","_id":"@distribusion/seats-sdk@1.1.0-rc.9","maintainers":[{"name":"npm-devs-distribusion","email":"npm-devs@distribusion.com"},{"name":"topaz.guerrero.distribusion","email":"topaz.guerrero@distribusion.com"}],"dist":{"shasum":"0a3702a0995da0b8974502cdcaa794e1b083883f","tarball":"https://registry.npmjs.org/@distribusion/seats-sdk/-/seats-sdk-1.1.0-rc.9.tgz","fileCount":6825,"integrity":"sha512-NV1gMQ6Lci7tzciZttLzEDuCT5eakAqRQgE5lbpMFhnucISWEoMEqLgURQo3IprHzglIiBA99EhBEoITz7xlwg==","signatures":[{"sig":"MEYCIQCu8r4z4JPTx8Gx/mX59lnudfpIGayO1MvTFbvCk8SSRAIhAP0xiEKx+3lDy/6sxhzw09+0uWJUO1C027v8i6b1wCPq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31953660},"main":"./dist/seats-sdk.js","type":"module","types":"./dist/seats-sdk.d.ts","exports":{".":{"type":"./dist/seats-sdk.d.ts","default":"./dist/seats-sdk.js"},"./styles":"./dist/seats-sdk.css","./seats-sdk.css":"./dist/seats-sdk.css"},"gitHead":"0a2481a75fcc6e32f9647ed8806f3fba169c4a43","scripts":{"lint":"npm run prettier && npm run eslint","build":"npx tsc -p tsconfig.app.json && vite build","eslint":"npx eslint ./src","example":"vite","prepare":"npx is-ci || npx husky","prettier":"npx prettier src/**/* -c","prettier:fix":"npm run prettier -- -w"},"_npmUser":{"name":"npm-devs-distribusion","email":"npm-devs@distribusion.com"},"_npmVersion":"10.9.3","description":"A React SDK for integrating seat selection functionality into transportation booking applications. This library provides a complete seat selection modal with support for both bus and train bookings.","directories":{},"_nodeVersion":"22.19.0","dependencies":{"qs":"^6.14.0","react":"^18.2.0","lodash":"^4.17.21","i18next":"^22.5.1","js-yaml":"^4.1.0","react-query":"^3.39.2","react-i18next":"^12.1.4","react-router-dom":"^6.30.1","i18next-http-backend":"^3.0.2","@tanstack/react-query":"^5.83.0","@distribusion/owl-seats":"^1.2.1","@distribusion/alien_utils":"^0.1.0","@distribusion/owl-frontend-ui":"^1.0.11"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.89.2","vite":"^7.0.3","husky":"^9.1.7","is-ci":"^4.1.0","eslint":"^9.30.1","globals":"^16.3.0","prettier":"^3.6.2","@types/qs":"^6.14.0","react-dom":"^18.2.0","stylelint":"^16.21.1","@eslint/js":"^9.30.1","typescript":"~5.8.3","@types/node":"^22.10.10","lint-staged":"^15.5.0","@types/react":"^19.1.8","@types/lodash":"^4.17.20","@popperjs/core":"^2.11.8","@types/js-yaml":"^4.0.9","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","typescript-eslint":"^8.35.1","@types/react-window":"^1.8.8","@vitejs/plugin-react":"^4.6.0","eslint-plugin-import":"^2.32.0","eslint-plugin-i18next":"^6.1.2","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.5.1","eslint-plugin-storybook":"^9.0.15","@microsoft/api-extractor":"^7.52.8","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-react-refresh":"^0.4.20","stylelint-config-standard-scss":"^15.0.1","eslint-import-resolver-typescript":"^4.4.4"},"bundleDependencies":["@distribusion/alien_utils","@distribusion/owl-frontend-ui","@distribusion/owl-seats"],"_npmOperationalInternal":{"tmp":"tmp/seats-sdk_1.1.0-rc.9_1758631653063_0.08104143949426934","host":"s3://npm-registry-packages-npm-production"}},"1.1.0-rc.10":{"name":"@distribusion/seats-sdk","version":"1.1.0-rc.10","_id":"@distribusion/seats-sdk@1.1.0-rc.10","maintainers":[{"name":"npm-devs-distribusion","email":"npm-devs@distribusion.com"},{"name":"topaz.guerrero.distribusion","email":"topaz.guerrero@distribusion.com"}],"dist":{"shasum":"8ca05aa647cc882e63d8c0af7e17807c054e719c","tarball":"https://registry.npmjs.org/@distribusion/seats-sdk/-/seats-sdk-1.1.0-rc.10.tgz","fileCount":6825,"integrity":"sha512-rdsd9PJ7Xp9XSgT4inOuXcq7FkthM+jWyAELVDVlsD+pGX7g/qVpZ13qMRZCPbHhDSxwZQgS01y7YgXvETBPUg==","signatures":[{"sig":"MEQCIF2MMlIoSvVNLAQfIKmZ/MVa8MkQ2Fvp69sGepbm99LLAiAtAnko81rZwlrDcdmsICoZl/xvl4+LSx0QulKeCPl4kw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31953661},"main":"./dist/seats-sdk.js","type":"module","types":"./dist/seats-sdk.d.ts","exports":{".":{"type":"./dist/seats-sdk.d.ts","default":"./dist/seats-sdk.js"},"./styles":"./dist/seats-sdk.css","./seats-sdk.css":"./dist/seats-sdk.css"},"gitHead":"a8a0c6685a76a60f0edd7c8aeb2b679b08ea1ab3","scripts":{"lint":"npm run prettier && npm run eslint","build":"npx tsc -p tsconfig.app.json && vite build","eslint":"npx eslint ./src","example":"vite","prepare":"npx is-ci || npx husky","prettier":"npx prettier src/**/* -c","prettier:fix":"npm run prettier -- -w"},"_npmUser":{"name":"npm-devs-distribusion","email":"npm-devs@distribusion.com"},"_npmVersion":"10.9.3","description":"A React SDK for integrating seat selection functionality into transportation booking applications. This library provides a complete seat selection modal with support for both bus and train bookings.","directories":{},"_nodeVersion":"22.19.0","dependencies":{"qs":"^6.14.0","react":"^18.2.0","lodash":"^4.17.21","i18next":"^22.5.1","js-yaml":"^4.1.0","react-query":"^3.39.2","react-i18next":"^12.1.4","react-router-dom":"^6.30.1","i18next-http-backend":"^3.0.2","@tanstack/react-query":"^5.83.0","@distribusion/owl-seats":"^1.2.1","@distribusion/alien_utils":"^0.1.0","@distribusion/owl-frontend-ui":"^1.0.11"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.89.2","vite":"^7.0.3","husky":"^9.1.7","is-ci":"^4.1.0","eslint":"^9.30.1","globals":"^16.3.0","prettier":"^3.6.2","@types/qs":"^6.14.0","react-dom":"^18.2.0","stylelint":"^16.21.1","@eslint/js":"^9.30.1","typescript":"~5.8.3","@types/node":"^22.10.10","lint-staged":"^15.5.0","@types/react":"^19.1.8","@types/lodash":"^4.17.20","@popperjs/core":"^2.11.8","@types/js-yaml":"^4.0.9","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","typescript-eslint":"^8.35.1","@types/react-window":"^1.8.8","@vitejs/plugin-react":"^4.6.0","eslint-plugin-import":"^2.32.0","eslint-plugin-i18next":"^6.1.2","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.5.1","eslint-plugin-storybook":"^9.0.15","@microsoft/api-extractor":"^7.52.8","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-react-refresh":"^0.4.20","stylelint-config-standard-scss":"^15.0.1","eslint-import-resolver-typescript":"^4.4.4"},"bundleDependencies":["@distribusion/alien_utils","@distribusion/owl-frontend-ui","@distribusion/owl-seats"],"_npmOperationalInternal":{"tmp":"tmp/seats-sdk_1.1.0-rc.10_1758632163287_0.3434483809917548","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@distribusion/seats-sdk","version":"1.1.0","_id":"@distribusion/seats-sdk@1.1.0","maintainers":[{"name":"npm-devs-distribusion","email":"npm-devs@distribusion.com"},{"name":"topaz.guerrero.distribusion","email":"topaz.guerrero@distribusion.com"}],"dist":{"shasum":"0748b50435c8dae090e37ed612967530d9f69558","tarball":"https://registry.npmjs.org/@distribusion/seats-sdk/-/seats-sdk-1.1.0.tgz","fileCount":6825,"integrity":"sha512-uOyRU8ZlL6/IvqJjH3I25a/QyaX47c50aU1KnZqzfpoX3NFUK3ubhueo2SYtej5oBvpEG5T7/46HEqbvONiTnw==","signatures":[{"sig":"MEUCIQC7Hm/5/ZppUL7yZ+WfHWptTEJ8HQElHrdgRRiPHoaQ6wIgRt5T4ykdNNnJ/AEO/UNAPmtbl1zhIvK5Klx3775T8mg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31953638},"main":"./dist/seats-sdk.js","type":"module","types":"./dist/seats-sdk.d.ts","exports":{".":{"type":"./dist/seats-sdk.d.ts","default":"./dist/seats-sdk.js"},"./styles":"./dist/seats-sdk.css","./seats-sdk.css":"./dist/seats-sdk.css"},"gitHead":"221e445e89b7c5ece8776d9d14e64490abae03cb","scripts":{"lint":"npm run prettier && npm run eslint","build":"npx tsc -p tsconfig.app.json && vite build","eslint":"npx eslint ./src","example":"vite","prepare":"npx is-ci || npx husky","prettier":"npx prettier src/**/* -c","prettier:fix":"npm run prettier -- -w"},"_npmUser":{"name":"npm-devs-distribusion","email":"npm-devs@distribusion.com"},"_npmVersion":"10.9.3","description":"A React SDK for integrating seat selection functionality into transportation booking applications. This library provides a complete seat selection modal with support for both bus and train bookings.","directories":{},"_nodeVersion":"22.19.0","dependencies":{"qs":"^6.14.0","react":"^18.2.0","lodash":"^4.17.21","i18next":"^22.5.1","js-yaml":"^4.1.0","react-query":"^3.39.2","react-i18next":"^12.1.4","react-router-dom":"^6.30.1","i18next-http-backend":"^3.0.2","@tanstack/react-query":"^5.83.0","@distribusion/owl-seats":"^1.2.1","@distribusion/alien_utils":"^0.1.0","@distribusion/owl-frontend-ui":"^1.0.11"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.89.2","vite":"^7.0.3","husky":"^9.1.7","is-ci":"^4.1.0","eslint":"^9.30.1","globals":"^16.3.0","prettier":"^3.6.2","@types/qs":"^6.14.0","react-dom":"^18.2.0","stylelint":"^16.21.1","@eslint/js":"^9.30.1","typescript":"~5.8.3","@types/node":"^22.10.10","lint-staged":"^15.5.0","@types/react":"^19.1.8","@types/lodash":"^4.17.20","@popperjs/core":"^2.11.8","@types/js-yaml":"^4.0.9","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","typescript-eslint":"^8.35.1","@types/react-window":"^1.8.8","@vitejs/plugin-react":"^4.6.0","eslint-plugin-import":"^2.32.0","eslint-plugin-i18next":"^6.1.2","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.5.1","eslint-plugin-storybook":"^9.0.15","@microsoft/api-extractor":"^7.52.8","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-react-refresh":"^0.4.20","stylelint-config-standard-scss":"^15.0.1","eslint-import-resolver-typescript":"^4.4.4"},"bundleDependencies":["@distribusion/alien_utils","@distribusion/owl-frontend-ui","@distribusion/owl-seats"],"_npmOperationalInternal":{"tmp":"tmp/seats-sdk_1.1.0_1758706620088_0.28531023320522464","host":"s3://npm-registry-packages-npm-production"}},"1.1.0-experimental.1":{"name":"@distribusion/seats-sdk","version":"1.1.0-experimental.1","_id":"@distribusion/seats-sdk@1.1.0-experimental.1","maintainers":[{"name":"npm-devs-distribusion","email":"npm-devs@distribusion.com"},{"name":"topaz.guerrero.distribusion","email":"topaz.guerrero@distribusion.com"}],"dist":{"shasum":"1133a811c55d627291bf1e3f7fcb16ecabd79ace","tarball":"https://registry.npmjs.org/@distribusion/seats-sdk/-/seats-sdk-1.1.0-experimental.1.tgz","fileCount":6904,"integrity":"sha512-uIoPIm6uHK+2v4LGyuGVQUlAPaYh+RkEYOWIXnPDdSUUen/xdZlunvN2qkVSRHmDOP1AhsvISgt7FFzcI5WUJw==","signatures":[{"sig":"MEYCIQDaXRX5zCmFqukh65y86idiqAXDf+rCbE0dnn8qw0rMBgIhAJ0038uRgX8CJdZmRobMEtmdcu+VR6XWyAreb431p3x1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30727618},"main":"./dist/seats-sdk.js","type":"module","types":"./dist/seats-sdk.d.ts","exports":{".":{"type":"./dist/seats-sdk.d.ts","default":"./dist/seats-sdk.js"},"./styles":"./dist/seats-sdk.css","./seats-sdk.css":"./dist/seats-sdk.css"},"gitHead":"608a1525b064d7eda87e551417b86e8b166d7cfa","scripts":{"lint":"npm run prettier && npm run eslint","build":"npx tsc -p tsconfig.app.json && vite build","eslint":"npx eslint ./src","example":"vite","prepare":"npx is-ci || npx husky","prettier":"npx prettier src/**/* -c","prettier:fix":"npm run prettier -- -w"},"_npmUser":{"name":"npm-devs-distribusion","email":"npm-devs@distribusion.com"},"_npmVersion":"10.9.4","description":"A React SDK for integrating seat selection functionality into transportation booking applications. This library provides a complete seat selection modal with support for both bus and train bookings.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"qs":"^6.14.0","react":"^18.2.0","lodash":"^4.17.21","i18next":"^22.5.1","js-yaml":"^4.1.0","date-fns":"^4.1.0","date-fns-tz":"^3.2.0","react-i18next":"^12.1.4","react-router-dom":"^6.30.1","i18next-http-backend":"^3.0.2","@tanstack/react-query":"^5.83.0","@distribusion/owl-seats":"1.2.6-experimental.1","@distribusion/alien_utils":"^0.1.0","@distribusion/owl-frontend-ui":"^1.0.11"},"_hasShrinkwrap":false,"devDependencies":{"sass":"^1.89.2","vite":"^7.0.3","husky":"^9.1.7","is-ci":"^4.1.0","eslint":"^9.30.1","globals":"^16.3.0","prettier":"^3.6.2","@types/qs":"^6.14.0","react-dom":"^18.2.0","stylelint":"^16.21.1","@eslint/js":"^9.30.1","typescript":"~5.8.3","@types/node":"^22.10.10","lint-staged":"^15.5.0","@types/react":"^19.1.8","@types/lodash":"^4.17.20","@popperjs/core":"^2.11.8","@types/js-yaml":"^4.0.9","vite-plugin-dts":"^4.5.4","@types/react-dom":"^19.1.6","typescript-eslint":"^8.35.1","@types/react-window":"^1.8.8","@vitejs/plugin-react":"^4.6.0","eslint-plugin-import":"^2.32.0","eslint-plugin-i18next":"^6.1.2","eslint-config-prettier":"^10.1.5","eslint-plugin-prettier":"^5.5.1","eslint-plugin-storybook":"^9.0.15","@microsoft/api-extractor":"^7.52.8","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-react-refresh":"^0.4.20","stylelint-config-standard-scss":"^15.0.1","eslint-import-resolver-typescript":"^4.4.4"},"bundleDependencies":["@distribusion/alien_utils","@distribusion/owl-frontend-ui","@distribusion/owl-seats"],"_npmOperationalInternal":{"tmp":"tmp/seats-sdk_1.1.0-experimental.1_1761773278758_0.2455451006252385","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@distribusion/seats-sdk","version":"1.1.2","type":"module","main":"./dist/seats-sdk.js","types":"./dist/seats-sdk.d.ts","exports":{".":{"type":"./dist/seats-sdk.d.ts","default":"./dist/seats-sdk.js"},"./seats-sdk.css":"./dist/seats-sdk.css","./styles":"./dist/seats-sdk.css"},"scripts":{"example":"vite","build":"npx tsc -p tsconfig.app.json && vite build","eslint":"npx eslint ./src","prettier":"npx prettier src/**/* -c","prettier:fix":"npm run prettier -- -w","lint":"npm run prettier && npm run eslint","prepare":"npx is-ci || npx husky"},"dependencies":{"@distribusion/alien_utils":"^0.1.0","@distribusion/owl-frontend-ui":"^1.0.11","@distribusion/owl-seats":"^1.2.1","@tanstack/react-query":"^5.83.0","i18next":"^22.5.1","i18next-http-backend":"^3.0.2","js-yaml":"^4.1.0","lodash":"^4.17.21","qs":"^6.14.0","react":"^18.2.0","react-i18next":"^12.1.4","react-router-dom":"^6.30.1","react-query":"^3.39.2"},"devDependencies":{"@eslint/js":"^9.30.1","@microsoft/api-extractor":"^7.52.8","@popperjs/core":"^2.11.8","@types/js-yaml":"^4.0.9","@types/lodash":"^4.17.20","@types/node":"^22.10.10","@types/qs":"^6.14.0","@types/react":"^19.1.8","@types/react-dom":"^19.1.6","@types/react-window":"^1.8.8","@vitejs/plugin-react":"^4.6.0","eslint":"^9.30.1","eslint-config-prettier":"^10.1.5","eslint-import-resolver-typescript":"^4.4.4","eslint-plugin-i18next":"^6.1.2","eslint-plugin-import":"^2.32.0","eslint-plugin-no-only-tests":"^3.3.0","eslint-plugin-prettier":"^5.5.1","eslint-plugin-react-hooks":"^5.2.0","eslint-plugin-react-refresh":"^0.4.20","eslint-plugin-storybook":"^9.0.15","globals":"^16.3.0","husky":"^9.1.7","is-ci":"^4.1.0","lint-staged":"^15.5.0","prettier":"^3.6.2","react-dom":"^18.2.0","sass":"^1.89.2","stylelint":"^16.21.1","stylelint-config-standard-scss":"^15.0.1","typescript":"~5.8.3","typescript-eslint":"^8.35.1","vite":"^7.0.3","vite-plugin-dts":"^4.5.4"},"_id":"@distribusion/seats-sdk@1.1.2","bundleDependencies":["@distribusion/alien_utils","@distribusion/owl-frontend-ui","@distribusion/owl-seats"],"gitHead":"30fcf979b5c77ea56f7787a926937d66726857d2","description":"A React SDK for integrating seat selection functionality into transportation booking applications. This library provides a complete seat selection modal with support for both bus and train bookings.","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-O1s1rD8CTX6/vVd9x8Of+1JGurJsjTPsOkzNaQ0tTYIfzAkwIJ1L+ekLbObQA+P+GOv2mZhEnKPMnDe41ZzecA==","shasum":"5c232d4340be248572ad12bc8d39788c7d5b05a8","tarball":"https://registry.npmjs.org/@distribusion/seats-sdk/-/seats-sdk-1.1.2.tgz","fileCount":6825,"unpackedSize":31953638,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICC5oegbBzpMqPjTVGfjWXBnxwOZwjGOjx0tCuBWIur2AiEAthVOGBSr2yPJvhyHMM3ANB8PuFEbWyJq+7ppUV/kKxA="}]},"_npmUser":{"name":"npm-devs-distribusion","email":"npm-devs@distribusion.com"},"directories":{},"maintainers":[{"name":"npm-devs-distribusion","email":"npm-devs@distribusion.com"},{"name":"topaz.guerrero.distribusion","email":"topaz.guerrero@distribusion.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/seats-sdk_1.1.2_1770895471136_0.671284525351481"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-23T12:47:32.977Z","modified":"2026-02-12T11:24:31.746Z","1.1.0-rc.9":"2025-09-23T12:47:33.356Z","1.1.0-rc.10":"2025-09-23T12:56:03.601Z","1.1.0":"2025-09-24T09:37:00.426Z","1.1.0-experimental.1":"2025-10-29T21:27:59.120Z","1.1.2":"2026-02-12T11:24:31.586Z"},"description":"A React SDK for integrating seat selection functionality into transportation booking applications. This library provides a complete seat selection modal with support for both bus and train bookings.","maintainers":[{"name":"npm-devs-distribusion","email":"npm-devs@distribusion.com"},{"name":"topaz.guerrero.distribusion","email":"topaz.guerrero@distribusion.com"}],"readme":"# Seats SDK\n\nA React SDK for integrating seat selection functionality into transportation booking applications. This library provides a complete seat selection modal with support for both bus and train bookings.\n\n## Features\n\n- **Seat Selection Modal**: Complete modal interface for selecting seats on buses and trains\n- **Internationalization**: Built-in i18n support for multiple locales\n- **Environment Configuration**: Support for demo, playground, and production environments\n\n## Components\n\n### SeatsModal\nThe main component that provides the seat selection interface. Supports various transportation modes and booking flows.\n\n**Key Props:**\n- `retailerPartnerNumber`: Partner identification number\n- `locale`: Language locale (e.g., \"en\", \"de\")\n- `currency`: Currency code (e.g., \"EUR\", \"USD\") \n- `env`: Environment (\"demo\", \"production\", \"playground\")\n- `passengers`: Array of passenger configurations\n- `connections`: Journey connection details\n- `flowType`: Optional flow type (\"two_step\")\n- `selectedFares`: Selected fare information for two-step flow\n\n## Installation\n\n```bash\n# Using npm\nnpm install @distribusion/seats-sdk\n```\n\n## Usage\n\n### Basic Usage\n\n```tsx\nimport React, { useState } from 'react';\nimport { SeatsModal, type SeatsModalProps } from '@distribusion/seats-sdk';\nimport type { Seat } from '@distribusion/seats-sdk';\n\nfunction App() {\n  const [selectedSeats, setSelectedSeats] = useState<Seat.SubmitData>();\n  const [modalOpen, setModalOpen] = useState(false);\n\n  const handleSeatsSubmit = (data: Seat.SubmitData) => {\n    setSelectedSeats(data);\n    setModalOpen(false);\n  };\n\n  return (\n    <div>\n      <button onClick={() => setModalOpen(true)}>Select Seats</button>\n      \n      <SeatsModal\n        retailerPartnerNumber={222222}\n        locale=\"en\"\n        currency=\"EUR\"\n        env=\"demo\"\n        passengers={[{ type: 'PNOS', pax: 1, maxAge: 65 }]}\n        connections={{\n          outbound: {\n            marketingCarrierCode: 'APBE',\n            departureStation: 'FRPARLDE',\n            arrivalStation: 'FRPARPBE',\n            departureStartTime: '07:00',\n            departureEndTime: '07:00',\n            departureDate: '2025-09-03',\n          }\n        }}\n        opened={modalOpen}\n        onSubmit={handleSeatsSubmit}\n        onClose={() => setModalOpen(false)}\n      />\n    </div>\n  );\n}\n```\n\n### Two-Step Flow (Train Bookings)\n\nFor train bookings with fare selection:\n\n```tsx\n<SeatsModal\n  retailerPartnerNumber={222222}\n  locale=\"en\"\n  currency=\"EUR\"\n  env=\"production\"\n  flowType=\"two_step\"\n  passengers={[{ type: 'PNOS', pax: 1, maxAge: 65 }]}\n  selectedFares={{ outbound: 'FARE-1', inbound: 'FARE-1' }}\n  connections={{\n    outbound: {\n      departureStation: 'DEMUCMHU',\n      arrivalStation: 'DEBEROST',\n      departureStartTime: '00:00',\n      departureEndTime: '00:00',\n      departureDate: '2025-09-01',\n    },\n    inbound: {\n      departureStation: 'DEBEROST',\n      arrivalStation: 'DEMUCMHU',\n      departureStartTime: '03:01',\n      departureEndTime: '03:01',\n      departureDate: '2025-10-02',\n    },\n  }}\n  opened={modalOpen}\n  onSubmit={handleSeatsSubmit}\n  onClose={() => setModalOpen(false)}\n/>\n```\n\n## Using Selected Seats in API Calls\n\nAfter users select seats through the `SeatsModal`, you need to transform the returned seat data for use in your booking and reservation API calls to the Distribusion API.\n\n### Seat Data Format\n\nThe `SeatsModal` returns seat selections through the `onSubmit` callback in this format:\n\n```tsx\ninterface Seat.SubmitData {\n  seats: {\n    outbound?: Record<number, Seat.Selected[]>  // Seats by segment index\n    inbound?: Record<number, Seat.Selected[]>   // Seats by segment index  \n  }\n  passengerCard?: DiscountCard.Item | null\n}\n\ninterface Seat.Selected {\n  code: string           // Seat identifier (e.g., \"1A\", \"SEAT-0-3-0\")\n  fareClass: string | null\n  price?: number | null\n  label?: string\n  carIndex?: number\n  segmentIndex?: number  // Journey segment index (0-based)\n  limitations?: Discount[]\n}\n```\n\n### Transforming Seat Data for API Calls\n\nThe Distribusion API expects seat codes to be specified per passenger. You'll need to transform the SDK data:\n\n```tsx\nconst handleSeatsSubmit = async (seatData: Seat.SubmitData) => {\n  // Transform SDK seat data to API format\n  const transformedSeats: Array<{ seatCode: string, segmentIndex: number }> = []\n  \n  // Process outbound seats\n  if (seatData.seats.outbound) {\n    Object.entries(seatData.seats.outbound).forEach(([segmentIndex, seats]) => {\n      seats.forEach(seat => {\n        transformedSeats.push({\n          seatCode: seat.code,\n          segmentIndex: parseInt(segmentIndex)\n        })\n      })\n    })\n  }\n  \n  // Process inbound seats  \n  if (seatData.seats.inbound) {\n    Object.entries(seatData.seats.inbound).forEach(([segmentIndex, seats]) => {\n      seats.forEach(seat => {\n        transformedSeats.push({\n          seatCode: seat.code,\n          segmentIndex: parseInt(segmentIndex)\n        })\n      })\n    })\n  }\n  \n  // Use in booking/reservation request\n  const bookingRequest = {\n    // ... other booking fields\n    passengers: [\n      {\n        type: 'PNOS',\n        seats: transformedSeats,\n        // ... other passenger fields\n      }\n    ]\n  }\n}\n```\n\n### Integration Examples\n\n**For Bookings API (`/bookings/create`):**\n\n```tsx\nconst handleSeatsSubmit = async (seatData: Seat.SubmitData) => {\n  const bookingRequest = {\n    passengers: [{\n      type: 'PNOS',\n      seats: extractSeatCodes(seatData), // Use transformation function above\n      // ... other passenger fields\n    }]\n  }\n  \n  const response = await fetch('/api/bookings/create', {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },\n    body: JSON.stringify(bookingRequest)\n  })\n}\n```\n\n**For Reservations API (`/reservations/create`):**\n\n```tsx  \nconst createReservation = async (seatData: Seat.SubmitData) => {\n  const reservationRequest = {\n    passengers: [{\n      type: 'PNOS',\n      seats: extractSeatCodes(seatData), // Use transformation function above  \n      // ... other passenger fields\n    }]\n  }\n  \n  const response = await fetch('/api/reservations/create', {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json' },\n    body: JSON.stringify(reservationRequest)\n  })\n}\n```\n\n### Important Notes\n\n- **Data Transformation Required**: The SDK returns a complex nested structure that must be flattened for API use\n- **Multi-Segment Support**: For journeys with multiple segments, seats are organized by segment index\n- **Direction-Based**: Seats are separated by trip direction (outbound/inbound)\n- **Seat Codes**: The `code` property contains the actual seat identifier needed by the API\n- **Carrier Support**: Not all carriers support seat selection - verify support via the marketing carrier endpoint\n\nFor complete API documentation and seat selection workflow, visit the [Distribusion API docs](https://docs.distribusion.com/dt/api/getting-started).\n\n## Browser Support\n\n- Chrome (latest)\n- Firefox (latest)\n- Safari (latest)\n- Edge (latest)\n- Mobile browsers (iOS Safari, Chrome Mobile)\n\n---\n\nBuilt by the Distribusion Whitelabel team.","readmeFilename":"README.md"}