{"_id":"@aphrody/m3-react","_rev":"5-ef607875b441fc7e4e84c40655743e8a","name":"@aphrody/m3-react","dist-tags":{"latest":"3.2.5"},"versions":{"3.2.1":{"name":"@aphrody/m3-react","version":"3.2.1","author":"aphrody-code","license":"Apache-2.0","_id":"@aphrody/m3-react@3.2.1","maintainers":[{"name":"yohan971","email":"yohanpierre@live.fr"}],"homepage":"https://github.com/aphrody-code/material-web/tree/main/packages/react#readme","bugs":{"url":"https://github.com/aphrody-code/material-web/issues"},"dist":{"shasum":"853282b578b3a7bb49ad7187766494128c060d28","tarball":"https://registry.npmjs.org/@aphrody/m3-react/-/m3-react-3.2.1.tgz","fileCount":412,"integrity":"sha512-EG3y63HIQh9IMOI0AMjREjL8LmFEAY2oVH/UJUoIEnLmPcCTvzV3sPw5UWDNBnXRhHVOzboz+jeB8xIJJW221A==","signatures":[{"sig":"MEUCIQC7i0Q3LUd8xidF27RBGu/w/ZY/8CFoNFzmH4W1e8g1bwIgf40/fl1ru9OUI0UukErFKKcwjOzj8n2mrWClqNmv9qU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":303680},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"853282b578b3a7bb49ad7187766494128c060d28","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/wrappers/*.d.ts","default":"./dist/wrappers/*.js"},"./state":{"types":"./dist/state/index.d.ts","default":"./dist/state/index.js"},"./adaptive":{"types":"./dist/adaptive/index.d.ts","default":"./dist/adaptive/index.js"},"./transitions":{"types":"./dist/transitions/index.d.ts","default":"./dist/transitions/index.js"},"./package.json":"./package.json"},"scripts":{"test":"bun test","build":"tsup && tsc -p tsconfig.build.json","generate":"bun run generate.ts","typecheck":"tsc --noEmit","typecheck:fast":"tsgo --noEmit"},"_npmUser":{"name":"yohan971","email":"yohanpierre@live.fr"},"_integrity":"sha512-EG3y63HIQh9IMOI0AMjREjL8LmFEAY2oVH/UJUoIEnLmPcCTvzV3sPw5UWDNBnXRhHVOzboz+jeB8xIJJW221A==","repository":{"url":"git+https://github.com/aphrody-code/material-web.git","type":"git","directory":"packages/react"},"_npmVersion":"10.8.3","description":"React wrappers (@lit/react createComponent) for every <md-*> element of the @aphrody/material-web fork.","directories":{},"sideEffects":["./dist/index.js","./dist/**/*.js"],"_nodeVersion":"24.3.0","dependencies":{"@lit/react":"^1.0.8","@aphrody/m3-tokens":"3.2.1","@aphrody/material-web":"3.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19.2.6","three":"^0.184.0","react-dom":"^19.2.6","typescript":"^6.0.3","@types/react":"^19.2.15","@types/three":"^0.184.0","@types/react-dom":"^19.2.3","element-internals-polyfill":"^3.0.2","@happy-dom/global-registrator":"^20.9.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/m3-react_3.2.1_1780527342157_0.7494119924262737","host":"s3://npm-registry-packages-npm-production"}},"3.2.2":{"name":"@aphrody/m3-react","version":"3.2.2","author":"aphrody-code","license":"Apache-2.0","_id":"@aphrody/m3-react@3.2.2","maintainers":[{"name":"yohan971","email":"yohanpierre@live.fr"}],"homepage":"https://github.com/aphrody-code/material-web/tree/main/packages/react#readme","bugs":{"url":"https://github.com/aphrody-code/material-web/issues"},"dist":{"shasum":"82b8ff637f1241443e8c20bcf1fbf5e3a76b8edd","tarball":"https://registry.npmjs.org/@aphrody/m3-react/-/m3-react-3.2.2.tgz","fileCount":412,"integrity":"sha512-CKLrGSB11ICTW4CkPf462JfM/XSiZBiq0gHKuvJUuZqKP780/ytPHmW8jy8cFqsWl3ZOvtiVcDlMssMqIYYe8Q==","signatures":[{"sig":"MEUCIHygv7H0x0foRf6T1S6kDgvJqL10l93mT6tLJJ9Vh0TQAiEAiLM8RFvwuvcNIZKyZA9mtBKfQLn8J8GAVARiW7di7jc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301865},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"82b8ff637f1241443e8c20bcf1fbf5e3a76b8edd","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/wrappers/*.d.ts","default":"./dist/wrappers/*.js"},"./state":{"types":"./dist/state/index.d.ts","default":"./dist/state/index.js"},"./adaptive":{"types":"./dist/adaptive/index.d.ts","default":"./dist/adaptive/index.js"},"./transitions":{"types":"./dist/transitions/index.d.ts","default":"./dist/transitions/index.js"},"./package.json":"./package.json"},"scripts":{"test":"bun test","build":"tsup && tsc -p tsconfig.build.json","generate":"bun run generate.ts","typecheck":"tsc --noEmit","typecheck:fast":"tsgo --noEmit"},"_npmUser":{"name":"yohan971","email":"yohanpierre@live.fr"},"_integrity":"sha512-CKLrGSB11ICTW4CkPf462JfM/XSiZBiq0gHKuvJUuZqKP780/ytPHmW8jy8cFqsWl3ZOvtiVcDlMssMqIYYe8Q==","repository":{"url":"git+https://github.com/aphrody-code/material-web.git","type":"git","directory":"packages/react"},"_npmVersion":"10.8.3","description":"React wrappers (@lit/react createComponent) for every <md-*> element of the @aphrody/material-web fork.","directories":{},"sideEffects":["./dist/index.js","./dist/**/*.js"],"_nodeVersion":"24.3.0","dependencies":{"@lit/react":"^1.0.8","@aphrody/m3-tokens":"3.2.1","@aphrody/material-web":"3.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19.2.6","three":"^0.184.0","react-dom":"^19.2.6","typescript":"^6.0.3","@types/react":"^19.2.15","@types/three":"^0.184.0","@types/react-dom":"^19.2.3","element-internals-polyfill":"^3.0.2","@happy-dom/global-registrator":"^20.9.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/m3-react_3.2.2_1780528061613_0.5182273454840609","host":"s3://npm-registry-packages-npm-production"}},"3.2.3":{"name":"@aphrody/m3-react","version":"3.2.3","author":"aphrody-code","license":"Apache-2.0","_id":"@aphrody/m3-react@3.2.3","maintainers":[{"name":"yohan971","email":"yohanpierre@live.fr"}],"homepage":"https://github.com/aphrody-code/material-web/tree/main/packages/react#readme","bugs":{"url":"https://github.com/aphrody-code/material-web/issues"},"dist":{"shasum":"fe635bad332af2fa77d4b8adc0c52de8ba968600","tarball":"https://registry.npmjs.org/@aphrody/m3-react/-/m3-react-3.2.3.tgz","fileCount":412,"integrity":"sha512-cN897mXjVFEW+57zJQRbqNaDgv74hmfcWM1mu9vxdAsGQvL+MyXrl8NIlAeUfBXNaOucCwGspRMi2Q9wZgsjYw==","signatures":[{"sig":"MEQCIE/G6MbA2O1AQOPAKc9pd6RI4UdMWwV/jrfZLiTW7GePAiAOnqnY4JLBvyEkQebKcPhTRIPyR726g02igpDi+m4/Gg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301867},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"fe635bad332af2fa77d4b8adc0c52de8ba968600","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/wrappers/*.d.ts","default":"./dist/wrappers/*.js"},"./state":{"types":"./dist/state/index.d.ts","default":"./dist/state/index.js"},"./adaptive":{"types":"./dist/adaptive/index.d.ts","default":"./dist/adaptive/index.js"},"./transitions":{"types":"./dist/transitions/index.d.ts","default":"./dist/transitions/index.js"},"./package.json":"./package.json"},"scripts":{"test":"bun test","build":"tsup && tsc -p tsconfig.build.json","generate":"bun run generate.ts","typecheck":"tsc --noEmit","typecheck:fast":"tsgo --noEmit"},"_npmUser":{"name":"yohan971","email":"yohanpierre@live.fr"},"_integrity":"sha512-cN897mXjVFEW+57zJQRbqNaDgv74hmfcWM1mu9vxdAsGQvL+MyXrl8NIlAeUfBXNaOucCwGspRMi2Q9wZgsjYw==","repository":{"url":"git+https://github.com/aphrody-code/material-web.git","type":"git","directory":"packages/react"},"_npmVersion":"10.8.3","description":"React wrappers (@lit/react createComponent) for every <md-*> element of the @aphrody/material-web fork.","directories":{},"sideEffects":["./dist/index.js","./dist/**/*.js"],"_nodeVersion":"24.3.0","dependencies":{"@lit/react":"^1.0.8","@aphrody/m3-tokens":"^3.2.2","@aphrody/material-web":"^3.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19.2.6","three":"^0.184.0","react-dom":"^19.2.6","typescript":"^6.0.3","@types/react":"^19.2.15","@types/three":"^0.184.0","@types/react-dom":"^19.2.3","element-internals-polyfill":"^3.0.2","@happy-dom/global-registrator":"^20.9.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/m3-react_3.2.3_1780528326805_0.9492775443562385","host":"s3://npm-registry-packages-npm-production"}},"3.2.4":{"name":"@aphrody/m3-react","version":"3.2.4","author":"aphrody-code","license":"Apache-2.0","_id":"@aphrody/m3-react@3.2.4","maintainers":[{"name":"yohan971","email":"yohanpierre@live.fr"}],"homepage":"https://github.com/aphrody-code/material-web/tree/main/packages/react#readme","bugs":{"url":"https://github.com/aphrody-code/material-web/issues"},"dist":{"shasum":"54c93fccb73f4b07da13d138e8b2ccca3834f4f6","tarball":"https://registry.npmjs.org/@aphrody/m3-react/-/m3-react-3.2.4.tgz","fileCount":412,"integrity":"sha512-S7rb0DyN5kKmDceYsaf/R+g8udiV0jp6KtuouSVZIkGwCRhvd4+HEFLkxB2zg77A6F8SjxY8XU/RfuidS6h+gg==","signatures":[{"sig":"MEUCIEtS3N0cEfIHi9zQaU4b2d5qdDwBYiOA3kPN9xGYNFzHAiEA9YqSAu03YrpTX1nTSlRvgwnQuWrBKwmzFF10MWjntDA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290888},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"54c93fccb73f4b07da13d138e8b2ccca3834f4f6","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./*":{"types":"./dist/wrappers/*.d.ts","default":"./dist/wrappers/*.js"},"./state":{"types":"./dist/state/index.d.ts","default":"./dist/state/index.js"},"./adaptive":{"types":"./dist/adaptive/index.d.ts","default":"./dist/adaptive/index.js"},"./transitions":{"types":"./dist/transitions/index.d.ts","default":"./dist/transitions/index.js"},"./package.json":"./package.json"},"scripts":{"test":"bun test","build":"tsup && tsc -p tsconfig.build.json","generate":"bun run generate.ts","typecheck":"tsc --noEmit","typecheck:fast":"tsgo --noEmit"},"_npmUser":{"name":"yohan971","email":"yohanpierre@live.fr"},"_integrity":"sha512-S7rb0DyN5kKmDceYsaf/R+g8udiV0jp6KtuouSVZIkGwCRhvd4+HEFLkxB2zg77A6F8SjxY8XU/RfuidS6h+gg==","repository":{"url":"git+https://github.com/aphrody-code/material-web.git","type":"git","directory":"packages/react"},"_npmVersion":"10.8.3","description":"React wrappers (@lit/react createComponent) for every <md-*> element of the @aphrody/material-web fork.","directories":{},"sideEffects":["./dist/index.js","./dist/**/*.js"],"_nodeVersion":"24.3.0","dependencies":{"@lit/react":"^1.0.8","@aphrody/m3-tokens":"^3.2.4","@aphrody/material-web":"^3.2.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19.2.6","three":"^0.184.0","react-dom":"^19.2.6","typescript":"^6.0.3","@types/react":"^19.2.15","@types/three":"^0.184.0","@types/react-dom":"^19.2.3","element-internals-polyfill":"^3.0.2","@happy-dom/global-registrator":"^20.9.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/m3-react_3.2.4_1786525665960_0.17661875917573688","host":"s3://npm-registry-packages-npm-production"}},"3.2.5":{"name":"@aphrody/m3-react","version":"3.2.5","description":"React wrappers (@lit/react createComponent) for every <md-*> element of the @aphrody/material-web fork.","homepage":"https://github.com/aphrody-code/material-web/tree/main/packages/react#readme","bugs":{"url":"https://github.com/aphrody-code/material-web/issues"},"license":"Apache-2.0","author":{"name":"aphrody-code"},"repository":{"type":"git","url":"git+https://github.com/aphrody-code/material-web.git","directory":"packages/react"},"type":"module","sideEffects":["./dist/index.js","./dist/**/*.js"],"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./transitions":{"types":"./dist/transitions/index.d.ts","default":"./dist/transitions/index.js"},"./adaptive":{"types":"./dist/adaptive/index.d.ts","default":"./dist/adaptive/index.js"},"./state":{"types":"./dist/state/index.d.ts","default":"./dist/state/index.js"},"./package.json":"./package.json","./*":{"types":"./dist/wrappers/*.d.ts","default":"./dist/wrappers/*.js"}},"publishConfig":{"access":"public"},"scripts":{"generate":"bun run generate.ts","build":"tsup && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","typecheck:fast":"tsgo --noEmit","test":"bun test"},"dependencies":{"@aphrody/m3-tokens":"^3.2.4","@aphrody/material-web":"^3.2.4","@lit/react":"catalog:"},"devDependencies":{"@happy-dom/global-registrator":"catalog:","@types/react":"catalog:","@types/react-dom":"catalog:","@types/three":"catalog:","element-internals-polyfill":"catalog:","react":"catalog:","react-dom":"catalog:","three":"catalog:","tsup":"catalog:","typescript":"catalog:"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"gitHead":"6981e124848acb9ce5364d87af955fd5fe992e23","_id":"@aphrody/m3-react@3.2.5","_nodeVersion":"24.3.0","_npmVersion":"9.2.0","dist":{"integrity":"sha512-T9yIiIGgYNWP+veXeRDRfWqF711pb8LkQvyCRDk82PVG1sknSul6pUjOwDEZHo/Vcd5IqyfFnA0JxyMYaBV/4g==","shasum":"5c3021803fe95195ff0d8cc870af7a58647aad70","tarball":"https://registry.npmjs.org/@aphrody/m3-react/-/m3-react-3.2.5.tgz","fileCount":2,"unpackedSize":24548,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCcpxOtdR7m918vK+Xkznjf6r/2CZA7XJOyN7TIgktY6gIhAIrfhzW7tLkF4wWCVogjUOdgexbI2Q+0b7FAHZhhjf0h"}]},"_npmUser":{"name":"yohan971","email":"yohanpierre@live.fr"},"directories":{},"maintainers":[{"name":"yohan971","email":"yohanpierre@live.fr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/m3-react_3.2.5_1789022181769_0.6933263818406366"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-03T22:55:42.004Z","modified":"2026-09-10T06:36:22.051Z","3.2.1":"2026-06-03T22:55:42.343Z","3.2.2":"2026-06-03T23:07:41.756Z","3.2.3":"2026-06-03T23:12:06.940Z","3.2.4":"2026-08-12T09:07:46.185Z","3.2.5":"2026-09-10T06:36:21.892Z"},"bugs":{"url":"https://github.com/aphrody-code/material-web/issues"},"author":{"name":"aphrody-code"},"license":"Apache-2.0","homepage":"https://github.com/aphrody-code/material-web/tree/main/packages/react#readme","repository":{"type":"git","url":"git+https://github.com/aphrody-code/material-web.git","directory":"packages/react"},"description":"React wrappers (@lit/react createComponent) for every <md-*> element of the @aphrody/material-web fork.","maintainers":[{"name":"yohan971","email":"yohanpierre@live.fr"}],"readme":"<!-- SPDX-License-Identifier: Apache-2.0 -->\n\n# `@aphrody/m3-react`\n\nWrappers React **par élément `md-*`** du fork aphrody `@material/web` (v2.4.1, 119 éléments),\ngénérés avec [`@lit/react`](https://www.npmjs.com/package/@lit/react) `createComponent`.\n\nCe package réalise le plan que le fork prévoit (`apps/m3-react`) mais ne livre pas sur disque\n(cf. `migration/00-CONVENTIONS.md` §0). Il expose un composant React typé pour chacun des\n**119 tags** listés dans `migration/scripts/md-elements.txt`.\n\n- **Statut compilation : 119 / 119 wrappers générés, `tsc --noEmit` → 0 erreur.**\n- 1 wrapper React par élément `md-*`, nom = PascalCase du tag (CONVENTIONS §2).\n- Events natifs réels mappés par élément (vérifiés dans le code Lit, voir plus bas).\n\n## Install\n\n> **bun uniquement** (jamais npm/pnpm — CONVENTIONS §7.1).\n\nLe package est déjà installé dans ce dossier (`migration/wrappers/`) :\n\n```bash\ncd migration/wrappers\nbun install            # @lit/react + @material/web (file:../../material-web) + react/react-dom\nbun run typecheck      # tsc --noEmit → 0 erreur\nbun run generate       # régénère wrappers/ + index.ts depuis md-elements.txt\n```\n\nDans un projet consommateur :\n\n```jsonc\n// package.json\n{\n  \"dependencies\": {\n    \"@aphrody/m3-react\": \"file:../migration/wrappers\",\n    \"react\": \"^19\",\n    \"react-dom\": \"^19\",\n  },\n}\n```\n\n## Usage\n\nImporter un wrapper enregistre l'élément custom correspondant **comme effet de bord**\n(le wrapper importe le module `@material/web/...` qui appelle `customElements.define`).\nAucun import side-effect supplémentaire n'est nécessaire.\n\n```tsx\nimport { MdFilledButton, MdOutlinedTextField, MdCheckbox } from \"@aphrody/m3-react\";\n\nfunction LoginForm() {\n  const [email, setEmail] = React.useState(\"\");\n  const [accept, setAccept] = React.useState(false);\n\n  return (\n    <form>\n      {/* controlled : la signature React change — e.target.value, PAS (e, value) */}\n      <MdOutlinedTextField\n        label=\"Email\"\n        value={email}\n        onInput={(e) => setEmail((e.target as HTMLInputElement).value)}\n      />\n\n      <label>\n        <MdCheckbox\n          checked={accept}\n          onChange={(e) => setAccept((e.target as HTMLInputElement).checked)}\n        />\n        J'accepte\n      </label>\n\n      <MdFilledButton onClick={() => console.log({ email, accept })}>Valider</MdFilledButton>\n    </form>\n  );\n}\n```\n\n### Slots & icônes (CONVENTIONS §4)\n\nLes sous-composants MUI (`DialogTitle`, `CardHeader`, `startIcon`…) deviennent du contenu slotté :\n\n```tsx\nimport { MdDialog, MdFilledButton, MdTextButton, MdIcon } from \"@aphrody/m3-react\";\n\n<MdDialog open onClosed={(e) => console.log((e.target as any).returnValue)}>\n  <div slot=\"headline\">Supprimer ?</div>\n  <form slot=\"content\" method=\"dialog\">\n    Cette action est irréversible.\n  </form>\n  <div slot=\"actions\">\n    <MdTextButton value=\"cancel\">Annuler</MdTextButton>\n    <MdFilledButton value=\"delete\">\n      <MdIcon slot=\"icon\">delete</MdIcon>\n      Supprimer\n    </MdFilledButton>\n  </div>\n</MdDialog>;\n```\n\n> **`MdIcon` exige la police Material Symbols.** La lib ne la charge pas. Une fois,\n> au démarrage de l'app :\n>\n> ```ts\n> import { ensureMaterialSymbols } from \"@aphrody/material-web/icon/material-symbols.js\";\n> ensureMaterialSymbols(); // ou { iconNames: [\"delete\", \"search\", …] } pour subseter\n> ```\n>\n> Le texte enfant est le **nom du glyphe** (snake_case Material Symbols). Les axes\n> variables se pilotent par token : `--md-icon-fill` (0..1), `--md-icon-wght`\n> (100..700), `--md-icon-grad`, `--md-icon-opsz`. Migration depuis\n> `@mui/icons-material` : codemod `migration/codemods/transforms/icons.ts` (96 % auto).\n\n## Architecture\n\n- `index.ts` — réexporte les 119 wrappers (un `export *` par catégorie).\n- `wrappers/<categorie>.ts` — 45 fichiers groupés par dossier source de `material-web/`\n  (`button.ts`, `select.ts`, `labs.ts`, …). Chaque export :\n\n  ```ts\n  export const MdFilledButton = createComponent({\n    react: React,\n    tagName: \"md-filled-button\",\n    elementClass: MdFilledButtonElement, // importé depuis @material/web/button/filled-button.js\n    events: {}, // events natifs réels (voir tableau)\n  });\n  ```\n\n- `generate.ts` — générateur **bun** : lit `md-elements.txt`, scanne `material-web/` pour\n  résoudre chaque tag → `{fichier d'entrée, classe exportée}` via le motif\n  `@customElement('md-x') export class Foo`, applique la table d'events vérifiés, et émet\n  les fichiers. Préfère le chemin canonique (bundlé par `all.ts` / `aphrody-components.ts` /\n  `aphrody-labs.ts`), puis non-`labs/gb`, sinon `labs/gb` (pour les tags `md-button`,\n  `md-card`, `md-menu-group`, `md-split-button` qui n'existent que là).\n- `material-web-shims.d.ts` — voir « Détail compilation ».\n\n## Événements mappés (vérifiés dans le code Lit)\n\nNoms d'events extraits par grep de `@fires` / `new (Custom)?Event('…')` dans\n`material-web/<dir>/internal/*.ts`. Les composants **upstream** utilisent des noms simples\n(`input`, `change`, `opening`…) ; les composants **fork** namespacent les leurs\n(`paginator:page`, `table:sort`, `side-sheet:opening`, `tree:select`…).\n\n| Élément                                                         | Events React → event natif                                                |\n| --------------------------------------------------------------- | ------------------------------------------------------------------------- |\n| `MdCheckbox`, `MdRadio`, `MdSwitch`, `MdSlider`, `Md*TextField` | `onChange:change`, `onInput:input`                                        |\n| `MdFilledSelect`, `MdOutlinedSelect`                            | `+onOpening/onOpened/onClosing/onClosed`                                  |\n| `MdDialog`                                                      | `onOpen:open`, `onOpened`, `onClose:close`, `onClosed`, `onCancel:cancel` |\n| `MdMenu`, `MdSubMenu`                                           | `onOpening/onOpened/onClosing/onClosed`                                   |\n| `MdMenuItem`                                                    | `onCloseMenu:close-menu`                                                  |\n| `MdSnackbar`                                                    | `onOpening/onOpened/onClosing/onClosed` (bare)                            |\n| `MdBottomSheet` / `MdSideSheet`                                 | `onOpening:bottom-sheet:opening` … (fork, namespacés)                     |\n| `MdSearchBar`                                                   | `onInput`, `onSearch:search`, `onSearchOpen/onSearchClose`                |\n| `MdAutocomplete`                                                | `onInput`, `onSelect:autocomplete:select`                                 |\n| `MdNavigationBar`                                               | `onActivated:navigation-bar-activated`                                    |\n| `MdNavigationRail`                                              | `onChange:navigation-rail:change`, `onItemActivate`                       |\n| `MdNavigationDrawer(Modal)`                                     | `onNavigationDrawerChanged:navigation-drawer-changed`                     |\n| `MdInputChip`                                                   | `onRemove:remove`, `onUpdateFocus:update-focus`                           |\n| `MdButtonGroup`                                                 | `onChange:button-group:change`                                            |\n| `MdFabMenu` / `MdFabMenuItem`                                   | `onOpen/onClose:fab-menu:*`, `onClick:fab-menu-item:click`                |\n| `MdExpansionPanel`                                              | `onToggle:expansion:toggle`                                               |\n| `MdStepper`                                                     | `onChange:stepper:change`                                                 |\n| `MdDatePicker` / `MdTimePicker`                                 | `onChange:date-picker:change` / `time-picker:change`                      |\n| `MdTable`                                                       | `onSort:table:sort`, `onSelectionChange:table:selection-change`           |\n| `MdPaginator`                                                   | `onPage:paginator:page`                                                   |\n| `MdTree` / `MdTreeItem`                                         | `onSelect:tree:select` / `onToggle:tree-item:toggle`, `onActivate`        |\n| `MdVirtualScroller`                                             | `onRange:virtual-scroll:range`                                            |\n| `MdTooltip`                                                     | `onShow:tooltip-show`, `onHide:tooltip-hide`                              |\n| `MdTabs`                                                        | `onChange:change`                                                         |\n\nLes éléments purement présentationnels (`md-icon`, `md-divider`, `md-elevation`, `md-ripple`,\n`md-focus-ring`, chips assist/filter/suggestion, cards, fab, boutons, `md-item`, `md-toolbar`,\n`md-carousel`, `md-accordion`, `md-loading-indicator`, panes/scaffold…) n'émettent pas d'event\ndocumenté : `events: {}`.\n\n## Détail compilation\n\n`bunx tsc --noEmit` compile **toute la chaîne** (les wrappers _et_ les sources `.ts` de\n`material-web/` qu'ils importent). Trois ajustements ont été nécessaires côté `tsconfig.json` /\nshims, **sans toucher** à `material-web/src` :\n\n1. **`experimentalDecorators: true` + `useDefineForClassFields: false`** — les éléments Lit du\n   fork utilisent les décorateurs _expérimentaux_ (`@property()`, `@customElement()`).\n2. **`material-web-shims.d.ts`** — déclare `*.cssresult.js` et `*.css` comme modules ambiants.\n   Ces fichiers de styles sont des **artefacts du build SASS** (`build:sass` → `build:css-to-ts`)\n   **absents de ce checkout source** du fork. Le wrapper React ne touche jamais ces valeurs\n   (les styles voyagent avec l'élément au runtime), d'où un typage `any` — qui évite aussi le\n   conflit nominal entre le `lit@2.8.0` imbriqué de `material-web` et le `lit@3.3.3` du package.\n3. **`moduleResolution: bundler`** — résout les imports bare `@material/web/x/y.js` vers les\n   sources `.ts` (le fork n'a pas de `.js`/`.d.ts` compilés ni de champ `exports`).\n\n> En contexte de **build réel** du fork (`material-web` buildé : `*.cssresult.js` et `*.css`\n> présents), les shims deviennent inutiles ; ils ne servent qu'à faire compiler le wrapper\n> contre les **sources** du fork tel que livré ici.\n\n### Blocages réels\n\n**Aucun.** Les 119 éléments de `md-elements.txt` résolvent vers un fichier d'entrée réel avec\nclasse exportée, et compilent. Les 4 tags `md-button`, `md-card`, `md-menu-group`,\n`md-split-button` n'existent que sous `labs/gb/components/` (composants « Google Sans » du fork) :\nleurs classes exportées ne suivent pas la convention `Md*` (`Button`, `Card`, `MenuGroup`,\n`SplitButton`) — le wrapper les ré-alias correctement (`MdButton`, `MdCard`, …).\n\n## Liste complète des wrappers (119)\n\n> Régénérée par `generate.ts` (`.manifest.json`). 0 non résolu(s).\n\n| Wrapper | Tag | Import élément | # events |\n| --- | --- | --- | --- |\n| `Md3dCanvas` | `md-3d-canvas` | `@aphrody/material-web/canvas3d/canvas-3d.js` | — |\n| `Md3dCard` | `md-3d-card` | `@aphrody/material-web/card3d/card-3d.js` | — |\n| `Md3dGlobe` | `md-3d-globe` | `@aphrody/material-web/globe3d/globe-3d.js` | — |\n| `MdAccordion` | `md-accordion` | `@aphrody/material-web/expansion/accordion.js` | — |\n| `MdAlert` | `md-alert` | `@aphrody/material-web/alert/alert.js` | 1 |\n| `MdAreaChart` | `md-area-chart` | `@aphrody/material-web/charts/area-chart.js` | — |\n| `MdAssistChip` | `md-assist-chip` | `@aphrody/material-web/chips/assist-chip.js` | — |\n| `MdAutocomplete` | `md-autocomplete` | `@aphrody/material-web/autocomplete/autocomplete.js` | 2 |\n| `MdAvatar` | `md-avatar` | `@aphrody/material-web/avatar/avatar.js` | 1 |\n| `MdAvatarGroup` | `md-avatar-group` | `@aphrody/material-web/avatar/avatar-group.js` | — |\n| `MdBackdrop` | `md-backdrop` | `@aphrody/material-web/backdrop/backdrop.js` | — |\n| `MdBadge` | `md-badge` | `@aphrody/material-web/badge/badge.js` | — |\n| `MdBarChart` | `md-bar-chart` | `@aphrody/material-web/charts/bar-chart.js` | — |\n| `MdBottomAppBar` | `md-bottom-app-bar` | `@aphrody/material-web/appbar/bottom-app-bar.js` | — |\n| `MdBottomSheet` | `md-bottom-sheet` | `@aphrody/material-web/sheet/bottom-sheet.js` | 4 |\n| `MdBrandedFab` | `md-branded-fab` | `@aphrody/material-web/fab/branded-fab.js` | — |\n| `MdBreadcrumbs` | `md-breadcrumbs` | `@aphrody/material-web/breadcrumbs/breadcrumbs.js` | — |\n| `MdButton` | `md-button` | `@aphrody/material-web/labs/gb/components/button/md-button.js` | — |\n| `MdButtonGroup` | `md-button-group` | `@aphrody/material-web/buttongroup/button-group.js` | 1 |\n| `MdCard` | `md-card` | `@aphrody/material-web/card/card.js` | — |\n| `MdCarousel` | `md-carousel` | `@aphrody/material-web/carousel/carousel.js` | 1 |\n| `MdCarouselItem` | `md-carousel-item` | `@aphrody/material-web/carousel/carousel-item.js` | — |\n| `MdCheckbox` | `md-checkbox` | `@aphrody/material-web/checkbox/checkbox.js` | 2 |\n| `MdChipSet` | `md-chip-set` | `@aphrody/material-web/chips/chip-set.js` | — |\n| `MdCircularProgress` | `md-circular-progress` | `@aphrody/material-web/progress/circular-progress.js` | — |\n| `MdDatePicker` | `md-date-picker` | `@aphrody/material-web/datepicker/date-picker.js` | 1 |\n| `MdDateRangePicker` | `md-date-range-picker` | `@aphrody/material-web/datepicker/date-range-picker.js` | 3 |\n| `MdDateTimePicker` | `md-date-time-picker` | `@aphrody/material-web/datepicker/date-time-picker.js` | 3 |\n| `MdDialog` | `md-dialog` | `@aphrody/material-web/dialog/dialog.js` | 5 |\n| `MdDivider` | `md-divider` | `@aphrody/material-web/divider/divider.js` | — |\n| `MdElevatedButton` | `md-elevated-button` | `@aphrody/material-web/button/elevated-button.js` | — |\n| `MdElevatedCard` | `md-elevated-card` | `@aphrody/material-web/labs/card/elevated-card.js` | — |\n| `MdElevation` | `md-elevation` | `@aphrody/material-web/elevation/elevation.js` | — |\n| `MdExpansionPanel` | `md-expansion-panel` | `@aphrody/material-web/expansion/expansion-panel.js` | 1 |\n| `MdFab` | `md-fab` | `@aphrody/material-web/fab/fab.js` | — |\n| `MdFabMenu` | `md-fab-menu` | `@aphrody/material-web/fabmenu/fab-menu.js` | 2 |\n| `MdFabMenuItem` | `md-fab-menu-item` | `@aphrody/material-web/fabmenu/fab-menu-item.js` | 1 |\n| `MdFilledButton` | `md-filled-button` | `@aphrody/material-web/button/filled-button.js` | — |\n| `MdFilledCard` | `md-filled-card` | `@aphrody/material-web/labs/card/filled-card.js` | — |\n| `MdFilledField` | `md-filled-field` | `@aphrody/material-web/field/filled-field.js` | — |\n| `MdFilledIconButton` | `md-filled-icon-button` | `@aphrody/material-web/iconbutton/filled-icon-button.js` | — |\n| `MdFilledSelect` | `md-filled-select` | `@aphrody/material-web/select/filled-select.js` | 6 |\n| `MdFilledTextField` | `md-filled-text-field` | `@aphrody/material-web/textfield/filled-text-field.js` | 2 |\n| `MdFilledTonalButton` | `md-filled-tonal-button` | `@aphrody/material-web/button/filled-tonal-button.js` | — |\n| `MdFilledTonalIconButton` | `md-filled-tonal-icon-button` | `@aphrody/material-web/iconbutton/filled-tonal-icon-button.js` | — |\n| `MdFilterChip` | `md-filter-chip` | `@aphrody/material-web/chips/filter-chip.js` | — |\n| `MdFocusRing` | `md-focus-ring` | `@aphrody/material-web/focus/md-focus-ring.js` | — |\n| `MdGauge` | `md-gauge` | `@aphrody/material-web/charts/gauge.js` | — |\n| `MdGridList` | `md-grid-list` | `@aphrody/material-web/gridlist/grid-list.js` | — |\n| `MdGridTile` | `md-grid-tile` | `@aphrody/material-web/gridlist/grid-tile.js` | — |\n| `MdIcon` | `md-icon` | `@aphrody/material-web/icon/icon.js` | — |\n| `MdIconButton` | `md-icon-button` | `@aphrody/material-web/iconbutton/icon-button.js` | — |\n| `MdInputChip` | `md-input-chip` | `@aphrody/material-web/chips/input-chip.js` | 2 |\n| `MdItem` | `md-item` | `@aphrody/material-web/labs/item/item.js` | — |\n| `MdLinearProgress` | `md-linear-progress` | `@aphrody/material-web/progress/linear-progress.js` | — |\n| `MdLineChart` | `md-line-chart` | `@aphrody/material-web/charts/line-chart.js` | — |\n| `MdLink` | `md-link` | `@aphrody/material-web/link/link.js` | — |\n| `MdList` | `md-list` | `@aphrody/material-web/list/list.js` | — |\n| `MdListDetail` | `md-list-detail` | `@aphrody/material-web/layout/md-list-detail.js` | — |\n| `MdListItem` | `md-list-item` | `@aphrody/material-web/list/list-item.js` | — |\n| `MdLoadingIndicator` | `md-loading-indicator` | `@aphrody/material-web/loadingindicator/loading-indicator.js` | — |\n| `MdMenu` | `md-menu` | `@aphrody/material-web/menu/menu.js` | 4 |\n| `MdMenuGroup` | `md-menu-group` | `@aphrody/material-web/labs/gb/components/menu/md-menu-group.js` | — |\n| `MdMenuItem` | `md-menu-item` | `@aphrody/material-web/menu/menu-item.js` | 1 |\n| `MdMobileStepper` | `md-mobile-stepper` | `@aphrody/material-web/mobilestepper/mobile-stepper.js` | — |\n| `MdNavigationBar` | `md-navigation-bar` | `@aphrody/material-web/labs/navigationbar/navigation-bar.js` | 1 |\n| `MdNavigationDrawer` | `md-navigation-drawer` | `@aphrody/material-web/labs/navigationdrawer/navigation-drawer.js` | 1 |\n| `MdNavigationDrawerModal` | `md-navigation-drawer-modal` | `@aphrody/material-web/labs/navigationdrawer/navigation-drawer-modal.js` | 1 |\n| `MdNavigationRail` | `md-navigation-rail` | `@aphrody/material-web/navigationrail/navigation-rail.js` | 2 |\n| `MdNavigationRailItem` | `md-navigation-rail-item` | `@aphrody/material-web/navigationrail/navigation-rail-item.js` | — |\n| `MdNavigationTab` | `md-navigation-tab` | `@aphrody/material-web/labs/navigationtab/navigation-tab.js` | — |\n| `MdOutlinedButton` | `md-outlined-button` | `@aphrody/material-web/button/outlined-button.js` | — |\n| `MdOutlinedCard` | `md-outlined-card` | `@aphrody/material-web/labs/card/outlined-card.js` | — |\n| `MdOutlinedField` | `md-outlined-field` | `@aphrody/material-web/field/outlined-field.js` | — |\n| `MdOutlinedIconButton` | `md-outlined-icon-button` | `@aphrody/material-web/iconbutton/outlined-icon-button.js` | — |\n| `MdOutlinedSegmentedButton` | `md-outlined-segmented-button` | `@aphrody/material-web/labs/segmentedbutton/outlined-segmented-button.js` | — |\n| `MdOutlinedSegmentedButtonSet` | `md-outlined-segmented-button-set` | `@aphrody/material-web/labs/segmentedbuttonset/outlined-segmented-button-set.js` | — |\n| `MdOutlinedSelect` | `md-outlined-select` | `@aphrody/material-web/select/outlined-select.js` | 6 |\n| `MdOutlinedTextField` | `md-outlined-text-field` | `@aphrody/material-web/textfield/outlined-text-field.js` | 2 |\n| `MdPaginator` | `md-paginator` | `@aphrody/material-web/paginator/paginator.js` | 1 |\n| `MdPane` | `md-pane` | `@aphrody/material-web/layout/md-pane.js` | — |\n| `MdPieChart` | `md-pie-chart` | `@aphrody/material-web/charts/pie-chart.js` | — |\n| `MdPopover` | `md-popover` | `@aphrody/material-web/popover/popover.js` | 2 |\n| `MdPrimaryTab` | `md-primary-tab` | `@aphrody/material-web/tabs/primary-tab.js` | — |\n| `MdRadarChart` | `md-radar-chart` | `@aphrody/material-web/charts/radar-chart.js` | — |\n| `MdRadio` | `md-radio` | `@aphrody/material-web/radio/radio.js` | 2 |\n| `MdRating` | `md-rating` | `@aphrody/material-web/rating/rating.js` | 2 |\n| `MdRipple` | `md-ripple` | `@aphrody/material-web/ripple/ripple.js` | — |\n| `MdScaffold` | `md-scaffold` | `@aphrody/material-web/layout/md-scaffold.js` | — |\n| `MdScatterChart` | `md-scatter-chart` | `@aphrody/material-web/charts/scatter-chart.js` | — |\n| `MdScheduler` | `md-scheduler` | `@aphrody/material-web/scheduler/scheduler.js` | 3 |\n| `MdSearchBar` | `md-search-bar` | `@aphrody/material-web/search/search-bar.js` | 4 |\n| `MdSecondaryTab` | `md-secondary-tab` | `@aphrody/material-web/tabs/secondary-tab.js` | — |\n| `MdSelectOption` | `md-select-option` | `@aphrody/material-web/select/select-option.js` | — |\n| `MdSideSheet` | `md-side-sheet` | `@aphrody/material-web/sheet/side-sheet.js` | 4 |\n| `MdSkeleton` | `md-skeleton` | `@aphrody/material-web/skeleton/skeleton.js` | — |\n| `MdSlider` | `md-slider` | `@aphrody/material-web/slider/slider.js` | 2 |\n| `MdSnackbar` | `md-snackbar` | `@aphrody/material-web/snackbar/snackbar.js` | 4 |\n| `MdSparkline` | `md-sparkline` | `@aphrody/material-web/charts/sparkline.js` | — |\n| `MdSplitButton` | `md-split-button` | `@aphrody/material-web/labs/gb/components/splitbutton/md-split-button.js` | — |\n| `MdStep` | `md-step` | `@aphrody/material-web/stepper/step.js` | — |\n| `MdStepper` | `md-stepper` | `@aphrody/material-web/stepper/stepper.js` | 1 |\n| `MdSubMenu` | `md-sub-menu` | `@aphrody/material-web/menu/sub-menu.js` | 4 |\n| `MdSuggestionChip` | `md-suggestion-chip` | `@aphrody/material-web/chips/suggestion-chip.js` | — |\n| `MdSupportingPane` | `md-supporting-pane` | `@aphrody/material-web/layout/md-supporting-pane.js` | — |\n| `MdSurface` | `md-surface` | `@aphrody/material-web/surface/surface.js` | — |\n| `MdSwitch` | `md-switch` | `@aphrody/material-web/switch/switch.js` | 2 |\n| `MdTable` | `md-table` | `@aphrody/material-web/table/table.js` | 2 |\n| `MdTabs` | `md-tabs` | `@aphrody/material-web/tabs/tabs.js` | 1 |\n| `MdTextButton` | `md-text-button` | `@aphrody/material-web/button/text-button.js` | — |\n| `MdTimePicker` | `md-time-picker` | `@aphrody/material-web/timepicker/time-picker.js` | 1 |\n| `MdToolbar` | `md-toolbar` | `@aphrody/material-web/toolbar/md-toolbar.js` | — |\n| `MdTooltip` | `md-tooltip` | `@aphrody/material-web/tooltip/tooltip.js` | 2 |\n| `MdTopAppBar` | `md-top-app-bar` | `@aphrody/material-web/appbar/top-app-bar.js` | — |\n| `MdTree` | `md-tree` | `@aphrody/material-web/tree/tree.js` | 1 |\n| `MdTreeItem` | `md-tree-item` | `@aphrody/material-web/tree/tree-item.js` | 2 |\n| `MdType` | `md-type` | `@aphrody/material-web/typography/md-type.js` | — |\n| `MdVirtualScroller` | `md-virtual-scroller` | `@aphrody/material-web/virtualscroll/virtual-scroller.js` | 1 |\n| `MdWebgpuCanvas` | `md-webgpu-canvas` | `@aphrody/material-web/effects/webgpu-canvas.js` | — |\n","readmeFilename":"README.md"}