# Assets de front-end na frota andmore Convenção fixada a 2026-09-01, quando os oito sites deixaram de carregar JavaScript e CSS de CDNs. ## A regra **Nada de front-end sai para a rede em produção.** Tudo é servido do próprio domínio, está no git, e tem a versão no nome da pasta. public/vendor/-/… (o hub usa public/assets/vendor/, que é onde já tinha o Bootstrap) Porquê, e não é gosto por arrumação: - um CDN em baixo leva o back-office com ele — e o CSS do Bootstrap a faltar não é «sem estilo», é uma página ilegível; - um CDN comprometido corre código de terceiros **na sessão de quem está autenticado como administrador**, e nenhuma destas tags tinha SRI; - e uma versão que vem de `@1` ou `@5.3` muda debaixo dos pés sem ninguém decidir nada. ## De onde vem cada coisa **Composer, sempre que o pacote exista.** Instala-se com `composer require` e copia-se o ficheiro de distribuição para `public/vendor/`: twbs/bootstrap → bootstrap-/{css,js}/ twbs/bootstrap-icons → bootstrap-icons-/ (+ fonts/) components/jquery → jquery-/jquery.min.js **Vendorizado à mão**, quando não há pacote. Descarrega-se uma vez, commita-se, e deixa-se um `ORIGEM.md` ao lado com o URL de origem e o comando para actualizar. É o caso do DataTables, Chart.js, Cropper, Flatpickr, SortableJS, html2canvas, qrcodejs, signature_pad, html5-qrcode, Font Awesome, jszip e pdfmake. ## DataTables: build combinado, e porque não vem do composer O único pacote no packagist é `datatables/datatables`, **congelado na 1.10.21 (2020)**, que usa `$.isArray` e `$.trim` — ambas removidas na jQuery 4. Ir pelo composer prendia a frota à jQuery 3 para sempre. Usa-se o build combinado do construtor oficial, que é **um ficheiro** com o core, os Buttons, o Responsive e a integração Bootstrap 5: https://cdn.datatables.net/v/bs5/dt-2.3.4/b-3.2.6/r-3.0.6/datatables.min.js https://cdn.datatables.net/v/bs5/dt-2.3.4/b-3.2.6/r-3.0.6/datatables.min.css Substituiu até cinco `