{"_id":"@amsom-habitat/nav-tabs","_rev":"8-59a6ea686ccb4e05f25f05a79d405e14","name":"@amsom-habitat/nav-tabs","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.1":{"name":"@amsom-habitat/nav-tabs","version":"1.0.1","_id":"@amsom-habitat/nav-tabs@1.0.1","maintainers":[{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"}],"dist":{"shasum":"db07e7ae211c0eac5177e8d0a07efc5f68f28d01","tarball":"https://registry.npmjs.org/@amsom-habitat/nav-tabs/-/nav-tabs-1.0.1.tgz","fileCount":3,"integrity":"sha512-ibebBGBs6a6BMz4a1qW8zNnxqpd8OmF7dRuJIAayQh5l4vd9lBSeL2lSjgSe8y7TYVLWHzZaWJeMSDNkhS+4cQ==","signatures":[{"sig":"MEYCIQDTIrLv47bwas7vbfVtHuXNgL6Kk2mFe7AsTNhAgFYImAIhALJ1GSmfXU9ESh6ycaeuPxbMh/9M+RMVqGNArxgSO0D4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22672},"main":"./dist/nav-tabs.umd.js","type":"module","module":"./dist/nav-tabs.js","exports":{".":{"import":"./dist/nav-tabs.js","require":"./dist/nav-tabs.umd.js"}},"gitHead":"d6630fc88279b58a58170404292f1d9de3b2439b","scripts":{"dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore","build":"vite build","format":"prettier --write src/","preview":"vite preview","chromatic":"npx chromatic --exit-zero-on-changes","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"},"_npmVersion":"11.5.2","directories":{},"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.0","vite":"^5.4.21","eslint":"^8.57.1","prettier":"^3.8.3","chromatic":"^11.29.0","storybook":"^10.3.5","@storybook/vue3":"^10.3.5","eslint-plugin-vue":"^9.33.0","@vitejs/plugin-vue":"^5.2.4","@storybook/vue3-vite":"^10.3.5","@storybook/addon-links":"^10.3.5","@rushstack/eslint-patch":"^1.16.1","eslint-plugin-storybook":"^0.8.0","@amsom-habitat/bootstrap-5":"^3.1.32","@vue/eslint-config-prettier":"^8.0.0"},"peerDependencies":{"vue":"^3.4.0"},"_npmOperationalInternal":{"tmp":"tmp/nav-tabs_1.0.1_1777458088586_0.8630275719741114","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@amsom-habitat/nav-tabs","version":"1.0.2","_id":"@amsom-habitat/nav-tabs@1.0.2","maintainers":[{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"}],"dist":{"shasum":"a0da5c92e4eda4ec4aeba7b3428f7380ba089fe1","tarball":"https://registry.npmjs.org/@amsom-habitat/nav-tabs/-/nav-tabs-1.0.2.tgz","fileCount":3,"integrity":"sha512-GZ52KqLXBJWDc8BQi8gLSmzk/zmcCOI03PvcgolHlpkQNtkVrA/XrUnGdz2r02e2SDtW1L+EkgHssnRyKPDfQA==","signatures":[{"sig":"MEYCIQDbAvqhqrJgIORB5kX0TAQ7nRAmgB6Y1ek9K96eNxKkzgIhAKNhoHYUWX/M70TvNtG4Slym+0O/bwmaVnDzO0+y26XI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19959},"main":"./dist/nav-tabs.umd.js","type":"module","module":"./dist/nav-tabs.js","exports":{".":{"import":"./dist/nav-tabs.js","require":"./dist/nav-tabs.umd.js"}},"gitHead":"7cc84e7b3279147934d948ee9ab7cd95fda584d4","scripts":{"dev":"vite","lint":"eslint . --fix","build":"vite build","format":"prettier --write src/","preview":"vite preview","chromatic":"npx chromatic --exit-zero-on-changes","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"},"_npmVersion":"11.5.2","directories":{},"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","vite":"^8.0.10","eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","chromatic":"^16.6.1","storybook":"^10.3.5","@eslint/js":"^10.0.1","@storybook/vue3":"^10.3.5","eslint-plugin-vue":"^10.9.0","@vitejs/plugin-vue":"^6.0.6","@storybook/vue3-vite":"^10.3.5","@storybook/addon-links":"^10.3.5","eslint-plugin-storybook":"^10.3.5","@amsom-habitat/bootstrap-5":"^3.1.32","@vue/eslint-config-prettier":"^10.2.0"},"peerDependencies":{"vue":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/nav-tabs_1.0.2_1777462021834_0.9382761766995422","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@amsom-habitat/nav-tabs","version":"1.0.3","_id":"@amsom-habitat/nav-tabs@1.0.3","maintainers":[{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"}],"dist":{"shasum":"d813386657a043fb3bca09cced2263ec8a342dd3","tarball":"https://registry.npmjs.org/@amsom-habitat/nav-tabs/-/nav-tabs-1.0.3.tgz","fileCount":3,"integrity":"sha512-ZY0FBZ6J4xR9f3TjaIRTg7Odf26KSfwHEpjk2NzTR0Kef8piHN67N1gnAjmJNqTvH0h376hN1E57JSmzwcvCJw==","signatures":[{"sig":"MEQCIDiCiiNo6BUyvAZnApCrB7HBDL+uGUDuT7TLeWimqPzuAiAeGbL0aSJnzJmZ4nv+UnxNusg6/sjRq4WOihjZ7cDUFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19959},"main":"./dist/nav-tabs.umd.js","type":"module","module":"./dist/nav-tabs.js","exports":{".":{"import":"./dist/nav-tabs.js","require":"./dist/nav-tabs.umd.js"}},"gitHead":"069c63fab9c56a8e6c15356c4f010b91dc2dffb4","scripts":{"dev":"vite","lint":"eslint . --fix","build":"vite build","format":"prettier --write src/","preview":"vite preview","chromatic":"npx chromatic --exit-zero-on-changes","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"},"_npmVersion":"11.5.2","directories":{},"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","vite":"^8.0.10","eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","chromatic":"^16.6.1","storybook":"^10.3.5","@eslint/js":"^10.0.1","@storybook/vue3":"^10.3.5","eslint-plugin-vue":"^10.9.0","@vitejs/plugin-vue":"^6.0.6","@storybook/vue3-vite":"^10.3.5","@storybook/addon-links":"^10.3.5","eslint-plugin-storybook":"^10.3.5","@amsom-habitat/bootstrap-5":"^3.1.32","@vue/eslint-config-prettier":"^10.2.0"},"peerDependencies":{"vue":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/nav-tabs_1.0.3_1777463413855_0.08736608895985798","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@amsom-habitat/nav-tabs","version":"1.0.4","_id":"@amsom-habitat/nav-tabs@1.0.4","maintainers":[{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"}],"dist":{"shasum":"74e2e495e0079b1f305ff67580623809a9f6a613","tarball":"https://registry.npmjs.org/@amsom-habitat/nav-tabs/-/nav-tabs-1.0.4.tgz","fileCount":3,"integrity":"sha512-vnHxKoRWMD7UewHsZ5GVj6gJyOvC7JbOy0kifjai4ADWN6mzuWiZXvgjgzMY0vvJEgl9RlD8IjoABHjTDaz+Pg==","signatures":[{"sig":"MEQCICdfoL9vPYR6FGCbfNEoh3LYUNZqDCUHExM9OiLj3Az5AiAjYsjGAFTIB6YX3LdvVOcZhv7eGZ3zZWtbktnazPSMCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20003},"main":"./dist/nav-tabs.umd.js","type":"module","module":"./dist/nav-tabs.js","exports":{".":{"import":"./dist/nav-tabs.js","require":"./dist/nav-tabs.umd.js"}},"gitHead":"4fd8e97545f108097a8e6f94121625e2bab417d0","scripts":{"dev":"vite","lint":"eslint . --fix","build":"vite build","format":"prettier --write src/","preview":"vite preview","chromatic":"npx chromatic --exit-zero-on-changes","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"},"_npmVersion":"11.5.2","directories":{},"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","vite":"^8.0.10","eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","chromatic":"^16.6.1","storybook":"^10.3.5","@eslint/js":"^10.0.1","@storybook/vue3":"^10.3.5","eslint-plugin-vue":"^10.9.0","@vitejs/plugin-vue":"^6.0.6","@storybook/vue3-vite":"^10.3.5","@storybook/addon-links":"^10.3.5","eslint-plugin-storybook":"^10.3.5","@amsom-habitat/bootstrap-5":"^3.1.32","@vue/eslint-config-prettier":"^10.2.0"},"peerDependencies":{"vue":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/nav-tabs_1.0.4_1777472200322_0.3106291563693031","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@amsom-habitat/nav-tabs","version":"1.0.5","_id":"@amsom-habitat/nav-tabs@1.0.5","maintainers":[{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"}],"dist":{"shasum":"a4f7b442e24ebb63aa9e87606b0f294f24925d8d","tarball":"https://registry.npmjs.org/@amsom-habitat/nav-tabs/-/nav-tabs-1.0.5.tgz","fileCount":3,"integrity":"sha512-mOvF1pnGvZy6FcQjARNU//H8d7GHItbh+6AWid1gUZq91qngCMnfM8x419VyO7ZbNDswRFe2XUnSvfYeEy9MfA==","signatures":[{"sig":"MEUCIQCbpDyqbdO2CtiUnCe3JczbtFoC0KrTfGjYzR7RSHq3kwIgWPUu8guU+jgGzyHIXSdxIy36+4Y3ErZziM6HWiqTMDk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20123},"main":"./dist/nav-tabs.umd.js","type":"module","module":"./dist/nav-tabs.js","exports":{".":{"import":"./dist/nav-tabs.js","require":"./dist/nav-tabs.umd.js"}},"gitHead":"5d49fc4b2dc9aa14b7bc91b9666240f520c913c5","scripts":{"dev":"vite","lint":"eslint . --fix","build":"vite build","format":"prettier --write src/","preview":"vite preview","chromatic":"npx chromatic --exit-zero-on-changes","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"},"_npmVersion":"11.5.2","directories":{},"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","vite":"^8.0.10","eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","chromatic":"^16.6.1","storybook":"^10.3.5","@eslint/js":"^10.0.1","@storybook/vue3":"^10.3.5","eslint-plugin-vue":"^10.9.0","@vitejs/plugin-vue":"^6.0.6","@storybook/vue3-vite":"^10.3.5","@storybook/addon-links":"^10.3.5","eslint-plugin-storybook":"^10.3.5","@amsom-habitat/bootstrap-5":"^3.1.32","@vue/eslint-config-prettier":"^10.2.0"},"peerDependencies":{"vue":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/nav-tabs_1.0.5_1777472899234_0.49716580885063144","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@amsom-habitat/nav-tabs","version":"1.0.7","_id":"@amsom-habitat/nav-tabs@1.0.7","maintainers":[{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"}],"dist":{"shasum":"e19b62a56a374a41495e3ff25c01a6d07c00e5e0","tarball":"https://registry.npmjs.org/@amsom-habitat/nav-tabs/-/nav-tabs-1.0.7.tgz","fileCount":3,"integrity":"sha512-NFC6yN1vMBDn/FMZbdHJIVJQMsUq+BLFRm+yYocwCQi1wmwXBxBNsCnuJGdAZIlxEzTD60U67lKBBk/ccrmXpw==","signatures":[{"sig":"MEUCIBAs8JVLcnULj3aDNxwJji76kr8zuNwAfgQXnWVKgzstAiEAp0ZqX+kxB+XOwblLcUxWgQpctJHWBnRyPBvS3n3QO8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21864},"main":"./dist/nav-tabs.umd.js","type":"module","module":"./dist/nav-tabs.js","exports":{".":{"import":"./dist/nav-tabs.js","require":"./dist/nav-tabs.umd.js"}},"gitHead":"78bd39c4f9bf3412fc726239d1b24e9786213142","scripts":{"dev":"vite","lint":"eslint . --fix","build":"vite build","format":"prettier --write src/","preview":"vite preview","chromatic":"npx chromatic --exit-zero-on-changes","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"},"_npmVersion":"11.5.2","directories":{},"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","vite":"^8.0.10","eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","chromatic":"^16.6.1","storybook":"^10.3.5","@eslint/js":"^10.0.1","@storybook/vue3":"^10.3.5","eslint-plugin-vue":"^10.9.0","@vitejs/plugin-vue":"^6.0.6","@storybook/vue3-vite":"^10.3.5","@storybook/addon-links":"^10.3.5","eslint-plugin-storybook":"^10.3.5","@amsom-habitat/bootstrap-5":"^3.1.32","@vue/eslint-config-prettier":"^10.2.0"},"peerDependencies":{"vue":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/nav-tabs_1.0.7_1777473561689_0.22849663830492073","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@amsom-habitat/nav-tabs","version":"1.1.0","_id":"@amsom-habitat/nav-tabs@1.1.0","maintainers":[{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"}],"dist":{"shasum":"9e3980be798bc9a7f77c29f15652a3043c18dd77","tarball":"https://registry.npmjs.org/@amsom-habitat/nav-tabs/-/nav-tabs-1.1.0.tgz","fileCount":4,"integrity":"sha512-HnyWcgpL9RKng9LouaQ4tnZT3QesWZUxxpDbc2U81UZmC6AEsd5qXZJD8kIsVlvx6ZGHx+X0v46tXxK4GG5AQg==","signatures":[{"sig":"MEYCIQDJQWOUWLSNPn2cSSmHnOuFSPhvsFqhCJIeCZTb0Py8OAIhAOelWfEb4uwQxsy/nRc3xVLzhbNAGrnU8Cj0NpCEwTh9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31978},"main":"./dist/nav-tabs.umd.js","type":"module","module":"./dist/nav-tabs.js","exports":{".":{"import":"./dist/nav-tabs.js","require":"./dist/nav-tabs.umd.js"}},"gitHead":"1815a009ad9ed723af9832646b73f70e6d2ed4ac","scripts":{"dev":"vite","lint":"eslint . --fix","build":"vite build","format":"prettier --write src/","preview":"vite preview","chromatic":"npx chromatic --exit-zero-on-changes","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"},"_npmVersion":"11.5.2","description":"Deux composants Vue 3 de navigation par onglets : **vertical** (nav à gauche, contenu à droite) et **horizontal** (nav en haut, contenu en dessous).","directories":{},"_nodeVersion":"24.6.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.5.0","vite":"^8.0.10","eslint":"^10.2.1","globals":"^17.5.0","prettier":"^3.8.3","chromatic":"^16.6.1","storybook":"^10.3.5","@eslint/js":"^10.0.1","@storybook/vue3":"^10.3.5","eslint-plugin-vue":"^10.9.0","@vitejs/plugin-vue":"^6.0.6","@storybook/vue3-vite":"^10.3.5","@storybook/addon-links":"^10.3.5","eslint-plugin-storybook":"^10.3.5","@amsom-habitat/bootstrap-5":"^3.1.32","@vue/eslint-config-prettier":"^10.2.0"},"peerDependencies":{"vue":"^3.5.0"},"_npmOperationalInternal":{"tmp":"tmp/nav-tabs_1.1.0_1777973709426_0.5933852039213088","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@amsom-habitat/nav-tabs","version":"1.2.1","type":"module","scripts":{"dev":"vite","build":"vite build","preview":"vite preview","lint":"eslint . --fix","format":"prettier --write src/","storybook":"storybook dev -p 6006","build-storybook":"storybook build","chromatic":"npx chromatic --exit-zero-on-changes"},"peerDependencies":{"vue":"^3.5.0"},"devDependencies":{"@amsom-habitat/bootstrap-5":"^3.1.32","@eslint/js":"^10.0.1","@storybook/addon-links":"^10.3.5","@storybook/vue3":"^10.3.5","@storybook/vue3-vite":"^10.3.5","@vitejs/plugin-vue":"^6.0.6","@vue/eslint-config-prettier":"^10.2.0","chromatic":"^16.6.1","eslint":"^10.2.1","eslint-plugin-storybook":"^10.3.5","eslint-plugin-vue":"^10.9.0","globals":"^17.5.0","prettier":"^3.8.3","storybook":"^10.3.5","vite":"^8.0.10","vue":"^3.5.0"},"main":"./dist/nav-tabs.umd.js","module":"./dist/nav-tabs.js","exports":{".":{"import":"./dist/nav-tabs.js","require":"./dist/nav-tabs.umd.js"}},"_id":"@amsom-habitat/nav-tabs@1.2.1","gitHead":"1815a009ad9ed723af9832646b73f70e6d2ed4ac","description":"Deux composants Vue 3 de navigation par onglets : **vertical** (nav à gauche, contenu à droite) et **horizontal** (nav en haut, contenu en dessous).","_nodeVersion":"24.6.0","_npmVersion":"11.5.2","dist":{"integrity":"sha512-NVO0uHvoPuvezBE9w4/+kOLhhajXvr8ioBdthyeDrhccAEzjv3uUWntCGgq40TLi8NKkkp7ARbSxJEsNgUz0aw==","shasum":"2f0df37da5018d329ac2d4d9a10fea1202ad515a","tarball":"https://registry.npmjs.org/@amsom-habitat/nav-tabs/-/nav-tabs-1.2.1.tgz","fileCount":4,"unpackedSize":32465,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCiJYCkE6WO7RbVxYgqqCYV2Tkg5GBYIhzXMuxhY5KlSwIhAObsBgLc8x8TFF9ZvG/r6m7vSZ06KCJ89/dgVITqCi8V"}]},"_npmUser":{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"},"directories":{},"maintainers":[{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nav-tabs_1.2.1_1782388463775_0.09613575354291082"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-29T10:21:28.465Z","modified":"2026-06-25T11:54:23.982Z","1.0.1":"2026-04-29T10:21:28.730Z","1.0.2":"2026-04-29T11:27:01.989Z","1.0.3":"2026-04-29T11:50:14.002Z","1.0.4":"2026-04-29T14:16:40.476Z","1.0.5":"2026-04-29T14:28:19.347Z","1.0.7":"2026-04-29T14:39:21.811Z","1.1.0":"2026-05-05T09:35:09.567Z","1.2.1":"2026-06-25T11:54:23.894Z"},"description":"Deux composants Vue 3 de navigation par onglets : **vertical** (nav à gauche, contenu à droite) et **horizontal** (nav en haut, contenu en dessous).","maintainers":[{"name":"amsom-habitat","email":"dev@amsom-habitat.fr"}],"readme":"# @amsom-habitat/nav-tabs\n\nDeux composants Vue 3 de navigation par onglets : **vertical** (nav à gauche, contenu à droite) et **horizontal** (nav en haut, contenu en dessous).\n\n## Installation\n\n```bash\nnpm install @amsom-habitat/nav-tabs\n```\n\n```js\nimport { AmsomNavTabsVertical, AmsomNavTabsHorizontal } from '@amsom-habitat/nav-tabs'\n```\n\nNécessite Bootstrap 5 (`@amsom-habitat/bootstrap-5`) dans le projet consommateur.\n\n---\n\n## AmsomNavTabsVertical\n\n### Usage minimal\n\n```html\n<amsom-nav-tabs-vertical v-model=\"selected\" :items=\"items\" item-key=\"id\" item-label=\"label\">\n  <template #content>\n    <div class=\"p-3\">Contenu pour l'onglet {{ selected }}</div>\n  </template>\n</amsom-nav-tabs-vertical>\n```\n\n### Props\n\n#### Données\n\n| Prop | Type | Défaut | Description |\n|------|------|--------|-------------|\n| `items` | `Array` | — (requis) | Liste des items à afficher |\n| `modelValue` (v-model) | `String \\| Number \\| Object` | `null` | Clé de l'onglet sélectionné |\n| `itemKey` | `String` | `'id'` | Propriété de l'item utilisée comme clé |\n| `itemLabel` | `String \\| Function` | `'label'` | Propriété ou fonction `(item) => string` pour le libellé |\n| `itemDisabled` | `String \\| Function` | `null` | Propriété ou fonction `(item) => boolean` pour désactiver un item |\n\n#### Colonne nav\n\n| Prop | Type | Défaut | Description |\n|------|------|--------|-------------|\n| `navWidth` | `'xs' \\| 'sm' \\| 'md' \\| 'lg' \\| 'xl'` | `'md'` | Largeur prédéfinie : xs=80px sm=120px md=180px lg=240px xl=320px |\n| `navMinWidth` | `String` | `null` | Largeur minimale. Ex : `'150px'` |\n| `navMaxWidth` | `String` | `null` | Largeur maximale. Prend le dessus sur `navWidth`. |\n| `navAlign` | `'start' \\| 'center' \\| 'end'` | `'start'` | Alignement vertical de la liste des onglets |\n\n#### Hauteur\n\n| Prop | Type | Défaut | Description |\n|------|------|--------|-------------|\n| `maxHeight` | `String` | `null` | Hauteur max commune à la nav ET au contenu. Chaque colonne scrolle indépendamment. Ex : `'70vh'` |\n| `navMaxHeight` | `String` | `null` | Hauteur max de la **seule** colonne nav (onglets de gauche), qui scrolle si dépassement. Prend le dessus sur `maxHeight` pour la nav, sans impacter le contenu. Utile quand beaucoup d'onglets feraient grandir une modale. Ex : `'30vh'` |\n| `contentHeight` | `String` | `null` | Hauteur explicite du contenu (nécessaire pour que `h-100` fonctionne dans `#content`). Ex : `'500px'` |\n| `contentMinHeight` | `String` | `null` | Hauteur minimale du contenu. Ex : `'200px'` |\n\n#### Onglets\n\n| Prop | Type | Défaut | Description |\n|------|------|--------|-------------|\n| `tabSize` | `'none' \\| 'xs' \\| 'sm' \\| 'md' \\| 'lg' \\| 'xl'` | `'md'` | Padding + taille de police. `'none'` = aucune classe (gérer dans le slot) |\n| `tabSpacing` | `0–5` | `2` | Espacement entre onglets (Bootstrap `gap-*`) |\n| `overflow` | `'ellipsis' \\| 'clip' \\| 'wrap'` | `'ellipsis'` | Comportement du texte trop long dans le slot `#libelle` par défaut |\n| `tabClass` | `String \\| Array \\| Object \\| Function` | `'rounded-start'` | Classes sur le wrapper bordure de chaque onglet. Accepte une fonction `(item) => string` |\n| `activeClass` | `String \\| Array \\| Object \\| Function` | `'bg-white text-primary'` | Classes de l'onglet actif |\n| `inactiveClass` | `String \\| Array \\| Object \\| Function` | `'bg-gray text-secondary'` | Classes des onglets inactifs |\n| `tabMinWidth` | `String` | `null` | Largeur minimale de chaque onglet |\n| `tabMaxWidth` | `String` | `null` | Largeur maximale de chaque onglet |\n| `tabMinHeight` | `String` | `null` | Hauteur minimale de chaque onglet |\n| `tabMaxHeight` | `String` | `null` | Hauteur maximale de chaque onglet |\n\n#### Zone contenu\n\n| Prop | Type | Défaut | Description |\n|------|------|--------|-------------|\n| `contentMinWidth` | `String` | `null` | Largeur minimale du contenu |\n| `contentMaxWidth` | `String` | `null` | Largeur maximale du contenu |\n| `contentClass` | `String \\| Array \\| Object` | `null` | Classes CSS supplémentaires sur la zone contenu |\n\n### Slots\n\nLa hiérarchie des slots permet de choisir le niveau de personnalisation souhaité :\n\n```\nWrapper bordure + actif/inactif (tabClass, activeClass, inactiveClass)\n  └── #nav         → brut, aucun padding — accès à : item, selected, disabled\n        └── Wrapper taille (tabSize)\n              └── #nav-libelle  → remplace badge+libelle — accès à : item, selected, disabled\n                    ├── #badge  → avant le libellé       — accès à : item\n                    └── #libelle → libellé seul           — accès à : item\n#content            → zone contenu à droite\n```\n\n| Slot | Props exposés | Quand l'utiliser |\n|------|--------------|-----------------|\n| `#nav` | `item`, `selected`, `disabled` | Layout entièrement libre à l'intérieur des bordures. Les couleurs actif/inactif et les bordures sont gérées par le composant. |\n| `#nav-libelle` | `item`, `selected`, `disabled` | Remplacer badge+libelle en un bloc tout en conservant le padding/taille géré par `tabSize`. |\n| `#badge` | `item` | Ajouter un badge avant le libellé (compteur, icône…). |\n| `#libelle` | `item` | Personnaliser uniquement le libellé. Utiliser avec `tab-size=\"none\"` pour gérer soi-même le padding. |\n| `#content` | — | Zone de contenu principale à droite. |\n\n### Exemples\n\n#### Hauteur contrainte avec scroll indépendant\n\n```html\n<amsom-nav-tabs-vertical\n  v-model=\"selected\"\n  :items=\"items\"\n  max-height=\"70vh\"\n  content-height=\"70vh\"\n>\n  <template #content>\n    <div class=\"h-100 overflow-auto p-3\">...</div>\n  </template>\n</amsom-nav-tabs-vertical>\n```\n\n#### Slot #nav — icônes + texte, layout libre\n\n```html\n<amsom-nav-tabs-vertical v-model=\"selected\" :items=\"items\">\n  <template #nav=\"{ item, selected }\">\n    <div class=\"d-flex align-items-center gap-2 px-3 py-2\">\n      <font-awesome-icon :icon=\"item.icon\" />\n      <span>{{ item.label }}</span>\n    </div>\n  </template>\n</amsom-nav-tabs-vertical>\n```\n\n#### Slot #nav-libelle — libellé + métadonnée sur une ligne\n\n```html\n<amsom-nav-tabs-vertical v-model=\"selected\" :items=\"pieces\">\n  <template #nav-libelle=\"{ item }\">\n    <span class=\"d-flex justify-content-between w-100 gap-2\">\n      <span class=\"text-wrap\">{{ item.label }}</span>\n      <span class=\"text-muted fs-7\">{{ item.surface }}</span>\n    </span>\n  </template>\n</amsom-nav-tabs-vertical>\n```\n\n#### Slot #libelle avec tab-size=\"none\" — padding libre\n\n```html\n<amsom-nav-tabs-vertical v-model=\"selected\" :items=\"items\" tab-size=\"none\">\n  <template #libelle=\"{ item }\">\n    <span class=\"d-flex justify-content-between w-100 gap-2 ps-3 py-1\">\n      <span class=\"text-wrap\">{{ item.label }}</span>\n      <span class=\"fs-7\">{{ item.surface }}</span>\n    </span>\n  </template>\n</amsom-nav-tabs-vertical>\n```\n\n#### Classes dynamiques par item\n\n```html\n<amsom-nav-tabs-vertical\n  v-model=\"selected\"\n  :items=\"items\"\n  :active-class=\"(item) => `bg-${item.variant} text-white`\"\n  :inactive-class=\"(item) => `bg-${item.variant}-subtle text-${item.variant}`\"\n/>\n```\n\n---\n\n## AmsomNavTabsHorizontal\n\n### Usage minimal\n\n```html\n<amsom-nav-tabs-horizontal v-model=\"selected\" :items=\"items\" item-key=\"id\" item-label=\"label\">\n  <template #content>\n    <p>Contenu pour l'onglet {{ selected }}</p>\n  </template>\n</amsom-nav-tabs-horizontal>\n```\n\n### Props\n\n#### Données\n\nIdentiques à `AmsomNavTabsVertical` : `items`, `modelValue`, `itemKey`, `itemLabel`, `itemDisabled`.\n\n#### Nav horizontale\n\n| Prop | Type | Défaut | Description |\n|------|------|--------|-------------|\n| `justify` | `'start' \\| 'center' \\| 'end' \\| 'between' \\| 'around' \\| 'evenly'` | `'start'` | Justification des onglets dans la barre |\n\n#### Onglets\n\nIdentiques à `AmsomNavTabsVertical` : `tabSize`, `overflow`, `tabClass`, `activeClass`, `inactiveClass`, `tabMinWidth`, `tabMaxWidth`, `tabMinHeight`, `tabMaxHeight`.\n\n> Note : `overflow` n'est actif que si `tabMaxWidth` est défini. La barre elle-même scrolle toujours horizontalement si les onglets dépassent.\n\n#### Zone contenu\n\n| Prop | Type | Défaut | Description |\n|------|------|--------|-------------|\n| `contentClass` | `String \\| Array \\| Object` | `null` | Classes CSS supplémentaires sur la zone contenu |\n| `contentStyle` | `String \\| Object` | `null` | Style inline sur la zone contenu. Ex : `'max-height: 400px; overflow-y: auto'` |\n\n### Slots\n\nMême hiérarchie que le composant vertical :\n\n| Slot | Props exposés | Description |\n|------|--------------|-------------|\n| `#nav` | `item`, `selected`, `disabled` | Layout libre dans les bordures |\n| `#nav-libelle` | `item`, `selected`, `disabled` | Remplace badge+libelle en conservant `tabSize` |\n| `#badge` | `item` | Badge avant le libellé |\n| `#libelle` | `item` | Libellé seul |\n| `#content` | — | Zone de contenu principale |\n","readmeFilename":"README.md"}