diff --git a/Bootstrap_new/css/theme-modern.css b/Bootstrap_new/css/theme-modern.css
index 869732a6..8c1170c0 100644
--- a/Bootstrap_new/css/theme-modern.css
+++ b/Bootstrap_new/css/theme-modern.css
@@ -1483,3 +1483,95 @@ select[class*="selectpicker"],
display: flex !important;
align-items: center;
}
+
+/* Styles sidebar toggle + ligne sélectionnée */
+/* ── Ligne DataTable sélectionnée ── */
+ .table tbody tr.row-selected > td {
+ background: rgba(26, 107, 74, 0.08) !important;
+ border-left: 3px solid var(--color-accent, #0abf7c);
+ }
+
+ /* ── Transitions fluides (doivent être déclarées ici, APRÈS le CSS du template,
+ pour ne pas être écrasées par Bootstrap/css/style.css) ── */
+ /*
+ #sidebar {
+ transition: width 0.3s cubic-bezier(.4,0,.2,1),
+ transform 0.3s cubic-bezier(.4,0,.2,1) !important;
+ overflow: hidden !important;
+ will-change: width;
+ }
+ */
+
+ /*
+ #main {
+ transition: margin-left 0.3s cubic-bezier(.4,0,.2,1) !important;
+ will-change: margin-left;
+ }
+ */
+
+ /* ── Mode réduit (icônes seules) — desktop ── */
+ body.toggle-sidebar #sidebar {
+ width: 68px !important;
+ min-width: 68px !important;
+ }
+
+ body.toggle-sidebar #main {
+ margin-left: 68px !important;
+ }
+ /* Masquer textes et chevrons */
+ body.toggle-sidebar #sidebar .nav-link span,
+ body.toggle-sidebar #sidebar .nav-link .bi-chevron-down,
+ body.toggle-sidebar #sidebar .sidebar-section-label {
+ opacity: 0;
+ width: 0;
+ overflow: hidden;
+ white-space: nowrap;
+ display: inline-block; /* garder dans le flux mais invisible — évite le reflow brutal */
+ transition: opacity 0.2s ease, width 0.2s ease;
+ }
+ body:not(.toggle-sidebar) #sidebar .nav-link span,
+ body:not(.toggle-sidebar) #sidebar .nav-link .bi-chevron-down {
+ opacity: 1;
+ width: auto;
+ transition: opacity 0.25s ease 0.05s, width 0.25s ease;
+ }
+ /* Centrer les icônes et agrandir légèrement */
+ body.toggle-sidebar #sidebar .nav-link {
+ justify-content: center !important;
+ padding: 11px 0 !important;
+ }
+ body.toggle-sidebar #sidebar .nav-link i:first-child {
+ font-size: 1.25rem !important;
+ width: auto !important;
+ margin: 0 !important;
+ }
+ /* Fermer les sous-menus */
+ body.toggle-sidebar #sidebar .nav-content {
+ display: none !important;
+ }
+ /* Tooltip natif au survol en mode réduit */
+ body.toggle-sidebar #sidebar .nav-link {
+ position: relative;
+ }
+
+ /* ── Mobile : slide depuis la gauche ── */
+ @media (max-width: 1199px) {
+ #sidebar {
+ transform: translateX(-100%);
+ width: var(--sidebar-width, 240px) !important;
+ }
+ #sidebar.sidebar-mobile-open {
+ transform: translateX(0);
+ }
+ /* Overlay semi-transparent derrière le sidebar mobile */
+ #sidebar.sidebar-mobile-open::after {
+ content: '';
+ position: fixed;
+ inset: 0;
+ background: rgba(0,0,0,0.35);
+ z-index: -1;
+ }
+ #main {
+ margin-left: 0 !important;
+ }
+ }
\ No newline at end of file
diff --git a/Controleur/gabarit.php b/Controleur/gabarit.php
deleted file mode 100755
index b094d3f7..00000000
--- a/Controleur/gabarit.php
+++ /dev/null
@@ -1,320 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- = $_SESSION['vue'] ?>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
-
-
-
-
-
-
-
-
- = _("Retour") ?>
-
-
-
-
\ No newline at end of file
diff --git a/Js/fonctions.js b/Js/fonctions.js
index 4c74fbbd..00fe184c 100755
--- a/Js/fonctions.js
+++ b/Js/fonctions.js
@@ -48120,13 +48120,11 @@ function filtreTableReference(numeroTable) {
const racineWeb = $("#racineWeb").val();
const $divListe = $("#div_listetables");
- // 1. DESTRUCTION TOTALE de l'existant
+ // Nettoyage radical
if ($("#listetables").length) {
- $("#listetables").selectpicker('destroy'); // Tue l'instance JS
+ $("#listetables").selectpicker('destroy');
}
- // Supprime physiquement tous les menus détachés du body
$('.bootstrap-select.bs-container').remove();
- // Vide le conteneur pour repartir de zéro
$divListe.empty();
$.ajax({
@@ -48134,35 +48132,30 @@ function filtreTableReference(numeroTable) {
type : 'post',
data: { numeroTable: numeroTable },
success: function(data) {
- // 1. On injecte le HTML brut
- $divListe.html(data);
+ // Injection du HTML
+ $divListe.html(data);
- const $select = $("#listetables");
+ const $select = $("#listetables");
- // 2. NETTOYAGE CHIRURGICAL des options
- // On force le texte à être propre et on supprime l'attribut title
- // qui cause souvent le doublon dans le rendu du plugin
- $select.find('option').each(function() {
- const propre = $(this).text().trim();
- $(this).text(propre); // Nettoie le texte interne
- $(this).attr('data-content', ''); // Supprime d'éventuels attributs parasites
- $(this).removeAttr('title'); // Supprime le titre qui double le rendu
- });
+ // On retire la classe 'selectpicker' temporairement pour éviter
+ // que le script global ne l'attrape avant nous
+ $select.removeClass('selectpicker');
- // 3. INITIALISATION avec paramètres de sécurité
- $select.selectpicker({
- liveSearch: true,
- size: 10,
- container: 'body',
- style: 'btn-form-select', // Utilise votre classe de style
- noneSelectedText: (typeof _ !== 'undefined') ? _("-- Sélectionner --") : "-- Sélectionner --"
- });
+ setTimeout(function() {
+ $select.selectpicker({
+ liveSearch: true,
+ size: 10,
+ container: 'body',
+ width: '100%'
+ });
+
+ // On remet la classe après initialisation si nécessaire pour le CSS
+ $select.addClass('selectpicker');
- // 4. Focus UX
- setTimeout(function() {
- $divListe.find('.dropdown-toggle').focus();
- }, 200);
- }
+ // Focus sur le bouton généré
+ $divListe.find('.dropdown-toggle').focus();
+ }, 100);
+ }
});
}
diff --git a/Vue/gabarit.php b/Vue/gabarit.php
index 32b5b8d7..5ddea837 100755
--- a/Vue/gabarit.php
+++ b/Vue/gabarit.php
@@ -2,7 +2,7 @@
/*
* INTER SANTÉ — gabarit.php
* Point d'entrée principal — Structure modulaire SaaS Premium
- * Refonte UI/UX v2025
+ * Refonte UI/UX v2026
*/
require_once 'gabarit_queries.php';
diff --git a/Vue/includes/scripts-footer.php b/Vue/includes/scripts-footer.php
index 326728c2..bc0e1d6e 100644
--- a/Vue/includes/scripts-footer.php
+++ b/Vue/includes/scripts-footer.php
@@ -96,9 +96,15 @@
});
}
- /* --- Bootstrap Select global --- */
+ /* --- Bootstrap Select global (Version Corrigée) --- */
if ($.fn.selectpicker) {
- $('select.selectpicker').selectpicker('refresh');
+ // On n'utilise plus 'refresh' à l'aveugle sur tout ce qui bouge
+ // On laisse les fonctions spécifiques gérer leurs propres instances
+ $('.selectpicker').each(function() {
+ if (!$(this).parent().hasClass('bootstrap-select')) {
+ $(this).selectpicker();
+ }
+ });
}
/* --- Sidebar toggle ---
@@ -151,94 +157,5 @@
}); // end document.ready
-
-
-
-