@cgi-learning-hub/ui 1.4.0-dev.1742394029 → 1.4.0-dev.1742469130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e="50px",t={minHeight:200,minWidth:200},n={display:"flex",alignItems:"center",width:"100%"},o={display:"flex",marginLeft:"auto"},r={borderLeft:"1px solid #bdbdbd",paddingLeft:"12px",marginLeft:"15px",marginTop:"4px",marginBottom:"4px"};exports.DEFAULT_CHILDREN_INDENT=e;exports.arrowContainerStyle=o;exports.expandedGroupStyle=r;exports.treeContainerStyle=t;exports.treeContentStyle=n;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("@mui/material"),o="50px",r=t.styled(t.Box,{shouldForwardProp:e=>e!=="height"})(({height:e})=>({minHeight:200,minWidth:200,height:typeof e=="number"?`${e}px`:e,overflowY:"auto"})),n={display:"flex",alignItems:"center",width:"100%"},a={display:"flex",marginLeft:"auto"},i={borderLeft:"1px solid #bdbdbd",paddingLeft:"12px",marginLeft:"15px",marginTop:"4px",marginBottom:"4px"};exports.DEFAULT_CHILDREN_INDENT=o;exports.TreeContainer=r;exports.arrowContainerStyle=a;exports.expandedGroupStyle=i;exports.treeContentStyle=n;
@@ -1,14 +1,19 @@
1
- const t = "50px", e = {
1
+ import { styled as e, Box as o } from "@mui/material";
2
+ const r = "50px", i = e(o, {
3
+ shouldForwardProp: (t) => t !== "height"
4
+ })(({ height: t }) => ({
2
5
  minHeight: 200,
3
- minWidth: 200
4
- }, n = {
6
+ minWidth: 200,
7
+ height: typeof t == "number" ? `${t}px` : t,
8
+ overflowY: "auto"
9
+ })), p = {
5
10
  display: "flex",
6
11
  alignItems: "center",
7
12
  width: "100%"
8
- }, o = {
13
+ }, d = {
9
14
  display: "flex",
10
15
  marginLeft: "auto"
11
- }, i = {
16
+ }, a = {
12
17
  borderLeft: "1px solid #bdbdbd",
13
18
  paddingLeft: "12px",
14
19
  marginLeft: "15px",
@@ -16,9 +21,9 @@ const t = "50px", e = {
16
21
  marginBottom: "4px"
17
22
  };
18
23
  export {
19
- t as DEFAULT_CHILDREN_INDENT,
20
- o as arrowContainerStyle,
21
- i as expandedGroupStyle,
22
- e as treeContainerStyle,
23
- n as treeContentStyle
24
+ r as DEFAULT_CHILDREN_INDENT,
25
+ i as TreeContainer,
26
+ d as arrowContainerStyle,
27
+ a as expandedGroupStyle,
28
+ p as treeContentStyle
24
29
  };
@@ -27,6 +27,7 @@ export interface TreeViewProps {
27
27
  selectedItemId: string;
28
28
  handleSelectedItemChange: (event: React.SyntheticEvent, itemIds: string | null) => void;
29
29
  iconColor?: string;
30
+ height?: string | number;
30
31
  }
31
32
  export interface ExtendedTreeItem2Props extends TreeItem2Props {
32
33
  itemData?: CustomTreeViewItem;
@@ -35,3 +36,6 @@ export interface ExtendedTreeItem2Props extends TreeItem2Props {
35
36
  export interface ItemDataMap {
36
37
  [key: string]: CustomTreeViewItem;
37
38
  }
39
+ export interface TreeContainerProps {
40
+ height: number | string;
41
+ }
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),j=require("../../createSvgIcon-2wwaxLPT.cjs"),c=require("react"),I=require("../TreeView/TreeView.cjs.js"),r=require("../TreeView/types.cjs.js"),l=require("../../Box-BmfpLwYG.cjs"),d=require("../../Typography-3CpuuLtj.cjs"),p=require("../../ListItemText-BhxrnTkb.cjs"),y=require("../../Paper-ByOgFIEE.cjs"),O=require("../../Button-BGWvL_UD.cjs"),P=require("../../Divider-iYLSpFUc.cjs"),R=require("../../List-PQXGlDbt.cjs"),L=require("../../ListItem-CWEvdMjN.cjs"),w=j.createSvgIcon(e.jsx("path",{d:"M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2"}),"Bookmark"),Y=j.createSvgIcon(e.jsx("path",{d:"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8zm2 16H8v-2h8zm0-4H8v-2h8zm-3-5V3.5L18.5 9z"}),"Description"),N=j.createSvgIcon(e.jsx("path",{d:"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4"}),"Person"),V={title:"Components/TreeView",component:I,argTypes:{items:{description:"**[Requis]** Liste des éléments à afficher dans le TreeView.",control:"object",table:{required:!0,type:{summary:"CustomTreeViewItem[]"}}},selectedItemId:{description:"**[Requis]** Identifiant de l'élément sélectionné.",control:"text",table:{required:!0,type:{summary:"string"}}},handleSelectedItemChange:{description:"**[Requis]** Fonction appelée lorsqu'un élément est sélectionné.",table:{required:!0,type:{summary:"(event: React.SyntheticEvent, itemIds: string | null) => void"}}},iconColor:{description:"**[Optionnel]** Couleur des icônes.",control:"select",options:["primary","secondary","success","error","info","warning"],defaultValue:"primary",table:{required:!1,type:{summary:"string"},defaultValue:{summary:"primary"}}}},parameters:{docs:{description:{component:`
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),E=require("../../createSvgIcon-2wwaxLPT.cjs"),m=require("react"),h=require("../TreeView/TreeView.cjs.js"),n=require("../TreeView/types.cjs.js"),l=require("../../Box-BmfpLwYG.cjs"),c=require("../../Typography-3CpuuLtj.cjs"),I=require("../../ListItemText-BhxrnTkb.cjs"),b=require("../../Paper-ByOgFIEE.cjs"),w=require("../../Button-BGWvL_UD.cjs"),R=require("../../Divider-iYLSpFUc.cjs"),L=require("../../List-PQXGlDbt.cjs"),V=require("../../ListItem-CWEvdMjN.cjs"),O=E.createSvgIcon(e.jsx("path",{d:"M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2"}),"Bookmark"),P=E.createSvgIcon(e.jsx("path",{d:"M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8zm2 16H8v-2h8zm0-4H8v-2h8zm-3-5V3.5L18.5 9z"}),"Description"),Y=E.createSvgIcon(e.jsx("path",{d:"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4"}),"Person"),N={title:"Components/TreeView",component:h,argTypes:{items:{description:"**[Requis]** Liste des éléments à afficher dans le TreeView.",control:"object",table:{required:!0,type:{summary:"CustomTreeViewItem[]"}}},selectedItemId:{description:"**[Requis]** Identifiant de l'élément sélectionné.",control:"text",table:{required:!0,type:{summary:"string"}}},handleSelectedItemChange:{description:"**[Requis]** Fonction appelée lorsqu'un élément est sélectionné.",table:{required:!0,type:{summary:"(event: React.SyntheticEvent, itemIds: string | null) => void"}}},iconColor:{description:"**[Optionnel]** Couleur des icônes.",control:"select",options:["primary","secondary","success","error","info","warning"],defaultValue:"primary",table:{required:!1,type:{summary:"string"},defaultValue:{summary:"primary"}}},height:{description:"**[Optionnel]** Hauteur du TreeView avec gestion automatique du défilement.",control:"number",table:{required:!1,type:{summary:"number | string"},defaultValue:{summary:"auto"}}}},parameters:{docs:{description:{component:`
2
2
  ## TreeView
3
3
 
4
4
  Un composant pour afficher des données hiérarchiques sous forme d'arborescence.
@@ -18,6 +18,12 @@ Vous pouvez également passer directement un composant SvgIcon comme valeur de \
18
18
  - \`handleSelectedItemChange\`: Permet de réagir quand un utilisateur clique sur un élément
19
19
  - \`selectedItemId\`: Permet de définir l'élément sélectionné
20
20
 
21
+ ### Contrôle de la hauteur et du défilement
22
+
23
+ - \`height\`: Définit une hauteur fixe pour le TreeView et active le défilement vertical automatique
24
+ - Accepte une valeur numérique (en pixels) ou une chaîne (par exemple "400px", "100%")
25
+ - Quand spécifié, le TreeView sera limité à cette hauteur et affichera une barre de défilement si nécessaire
26
+
21
27
  ### Gestion du Drag and Drop
22
28
 
23
29
  Le TreeView inclut des attributs \`data-\` qui vous permettent d'identifier facilement les éléments lors d'opérations de glisser-déposer :
@@ -41,7 +47,7 @@ interface CustomTreeViewItemProps {
41
47
 
42
48
  type CustomTreeViewItem = TreeViewBaseItem<CustomTreeViewItemProps>;
43
49
  \`\`\`
44
- `}}}},S=n=>{const o=[],i=s=>{o.push(s),s.children&&s.children.forEach(t=>i(t))};return n.forEach(s=>i(s)),o},_=({items:n,selectedItemId:o,onItemSelect:i})=>{const s=S(n);return e.jsxs(y.Paper,{sx:{width:"100%",maxHeight:300,overflow:"auto"},children:[e.jsx(d.Typography,{variant:"h6",sx:{p:2},children:"Sélection externe"}),e.jsx(P.Divider,{}),e.jsx(R.List,{children:s.map(t=>e.jsx(L.ListItem,{disablePadding:!0,children:e.jsx(p.ListItemButton,{selected:o===t.internalId,onClick:()=>i(t.internalId),children:e.jsx(p.ListItemText,{primary:t.label})})},t.internalId))})]})},q=({items:n,onRandomSelect:o})=>{const i=S(n),s=()=>{const t=Math.floor(Math.random()*i.length);o(i[t].internalId)};return e.jsx(l.Box,{sx:{mt:2,mb:2},children:e.jsx(O.Button,{variant:"contained",color:"primary",onClick:s,children:"Sélection aléatoire"})})},B=({id:n,label:o})=>e.jsx(l.Box,{draggable:!0,onDragStart:i=>{i.dataTransfer.setData("application/json",JSON.stringify({id:n,label:o}))},sx:{padding:1,margin:1,backgroundColor:"grey.100",borderRadius:1,display:"inline-block",cursor:"grab","&:hover":{backgroundColor:"grey.200"}},children:e.jsxs(d.Typography,{variant:"body2",display:"flex",alignItems:"center",children:[e.jsx(Y,{fontSize:"small",sx:{mr:1}}),o]})}),g=[{internalId:"documents",label:"Mes formulaires",iconType:r.ICON_TYPE.FOLDER,children:[{internalId:"folder1",label:"Premier dossier",iconType:r.ICON_TYPE.FOLDER,children:[{internalId:"subfolder1",label:"Sous-dossier 1",iconType:r.ICON_TYPE.FOLDER},{internalId:"subfolder2",label:"Sous-dossier 2",iconType:r.ICON_TYPE.FOLDER}]},{internalId:"folder2",label:"Deuxième dossier",iconType:r.ICON_TYPE.FOLDER},{internalId:"folder3",label:"Troisième dossier",iconType:r.ICON_TYPE.FOLDER}]},{internalId:"shared",label:"Formulaires partagés avec moi",iconType:r.ICON_TYPE.SHARE},{internalId:"trash",label:"Corbeille",iconType:r.ICON_TYPE.TRASH}],F=[{internalId:"bookmarks",label:"Favoris",iconType:w,children:[{internalId:"important",label:"Important",iconType:r.ICON_TYPE.CUSTOM,customIcon:N}]},...g],T=[{internalId:"documents",label:"Documents",iconType:r.ICON_TYPE.SHARE,children:[{internalId:"reports",label:"Rapports",iconType:r.ICON_TYPE.FOLDER,children:[{internalId:"report1",label:"Rapport Janvier",iconType:r.ICON_TYPE.FOLDER},{internalId:"report2",label:"Rapport Février",iconType:r.ICON_TYPE.FOLDER},{internalId:"report3",label:"Rapport Mars",iconType:r.ICON_TYPE.FOLDER}]},{internalId:"invoices",label:"Factures",iconType:r.ICON_TYPE.FOLDER}]},{internalId:"media",label:"Médias",iconType:r.ICON_TYPE.FOLDER,children:[{internalId:"images",label:"Images",iconType:r.ICON_TYPE.FOLDER},{internalId:"videos",label:"Vidéos",iconType:r.ICON_TYPE.FOLDER}]},{internalId:"downloads",label:"Téléchargements",iconType:r.ICON_TYPE.FOLDER}],k={render:()=>{const[n,o]=c.useState(""),i=c.useCallback((s,t)=>{console.log(`Élément sélectionné: ${t}`),t&&o(t)},[]);return e.jsx(l.Box,{sx:{maxWidth:300,overflowY:"hidden"},children:e.jsx(I,{items:g,selectedItemId:n,handleSelectedItemChange:i})})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Exemple de base avec des icônes standard et démonstration de sélection."}}}},A={args:{items:g,selectedItemId:"folder1",handleSelectedItemChange:(n,o)=>{console.log(`Élément sélectionné: ${o}`)},iconColor:"success"},render:n=>e.jsx(l.Box,{sx:{maxWidth:300,overflowY:"hidden"},children:e.jsx(I,{...n})}),parameters:{docs:{description:{story:"Cette story permet de contrôler les propriétés du TreeView directement via le panneau de contrôle de Storybook. Essayez de changer la couleur des icônes pour voir l'effet en temps réel."}}}},H={render:()=>{const[n,o]=c.useState("bookmarks"),i=c.useCallback((s,t)=>{console.log(`Élément sélectionné: ${t}`),t&&o(t)},[]);return e.jsx(l.Box,{sx:{maxWidth:300,overflowY:"hidden"},children:e.jsx(I,{items:F,selectedItemId:n,handleSelectedItemChange:i})})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Exemple utilisant à la fois des icônes prédéfinies et des icônes personnalisées."}}}},M={render:()=>{const n=[{internalId:"root",label:"Structure imbriquée complexe",iconType:r.ICON_TYPE.FOLDER,children:[{internalId:"level1-1",label:"Niveau 1.1",iconType:r.ICON_TYPE.FOLDER,children:[{internalId:"level2-1",label:"Niveau 2.1",iconType:r.ICON_TYPE.FOLDER,children:[{internalId:"level3-1V",label:"VOUS M'AVEZ TROUVÉ HIHIHI",iconType:r.ICON_TYPE.FOLDER},{internalId:"level3-2",label:"Niveau 3.2",iconType:r.ICON_TYPE.SHARE}]},{internalId:"level2-2",label:"Niveau 2.2",iconType:r.ICON_TYPE.TRASH}]},{internalId:"level1-2",label:"Niveau 1.2",iconType:r.ICON_TYPE.CUSTOM,customIcon:w}]}],[o,i]=c.useState("level2-1"),s=c.useCallback((t,a)=>{console.log(`Élément sélectionné: ${a}`),a&&i(a)},[]);return e.jsx(l.Box,{sx:{maxWidth:400,overflowY:"hidden"},children:e.jsx(I,{items:n,selectedItemId:o,handleSelectedItemChange:s})})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Exemple d'une structure profondément imbriquée."}}}},z={render:()=>{const n=["primary","secondary","info"],[o,i]=c.useState({primary:"",secondary:"",info:""});return e.jsx(l.Box,{sx:{display:"flex",flexDirection:"row",gap:3,overflowY:"hidden"},children:n.map(s=>e.jsxs(l.Box,{sx:{maxWidth:250,overflowY:"hidden"},children:[e.jsxs(d.Typography,{variant:"subtitle2",gutterBottom:!0,children:["Icônes ",s]}),e.jsx(I,{items:g,selectedItemId:o[s],handleSelectedItemChange:(t,a)=>{a&&i(u=>({...u,[s]:a}))},iconColor:s})]},s))})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Démonstration des principales options de couleurs disponibles pour les icônes."}}}},G={render:()=>{const[n,o]=c.useState("reports"),i=(a,u)=>{console.log("TreeView sélection:",u),u&&o(u)},s=a=>{console.log("Sélection externe:",a),o(a)},t=()=>{const u=S(T).find(v=>v.internalId===n);return u?u.label:"Aucun élément sélectionné"};return e.jsxs(l.Box,{sx:{width:"100%",overflowY:"hidden"},children:[e.jsxs(d.Typography,{variant:"subtitle1",gutterBottom:!0,children:["Élément sélectionné: ",e.jsx("strong",{children:t()})," (ID:"," ",n,")"]}),e.jsx(q,{items:T,onRandomSelect:s}),e.jsxs(p.Grid,{container:!0,spacing:3,sx:{overflowY:"hidden"},children:[e.jsx(p.Grid,{item:!0,xs:12,md:6,children:e.jsxs(y.Paper,{sx:{p:2,overflowY:"hidden"},children:[e.jsx(d.Typography,{variant:"h6",gutterBottom:!0,children:"TreeView"}),e.jsx(I,{items:T,selectedItemId:n,handleSelectedItemChange:i})]})}),e.jsx(p.Grid,{item:!0,xs:12,md:6,children:e.jsx(_,{items:T,selectedItemId:n,onItemSelect:s})})]})]})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Démonstration de la synchronisation entre le TreeView et d'autres composants. Cette story montre comment le TreeView peut être intégré dans une interface complexe où la sélection peut provenir de différentes sources mais reste synchronisée."}}}},U={render:()=>{var E,D;const[n,o]=c.useState([...g]),[i,s]=c.useState("folder1"),[t,a]=c.useState(null),u=[{id:"doc1",label:"Document 1"},{id:"doc2",label:"Document 2"},{id:"doc3",label:"Document 3"}],v=m=>{m.preventDefault();const h=m.target,f=h.closest("[data-treeview-item]");let x=null,C=null;f?(x=f.getAttribute("data-treeview-item"),C=f.getAttribute("data-treeview-item-label")):h.closest("[data-treeview-root]")&&(x=null,C="Racine du TreeView");try{const b=JSON.parse(m.dataTransfer.getData("application/json"));a({itemId:x,itemLabel:C,droppedItem:b}),x&&s(x)}catch(b){console.error("Erreur lors de la récupération des données",b)}};return e.jsxs(l.Box,{sx:{maxWidth:700,overflowY:"hidden"},children:[e.jsx(d.Typography,{variant:"h6",gutterBottom:!0,children:"Exemple de Drag & Drop avec le TreeView"}),e.jsx(d.Typography,{variant:"body2",gutterBottom:!0,children:"Glissez-déposez un des documents ci-dessous sur un élément du TreeView."}),e.jsx(l.Box,{sx:{display:"flex",mb:2},children:u.map(m=>e.jsx(B,{id:m.id,label:m.label},m.id))}),e.jsxs(p.Grid,{container:!0,spacing:3,children:[e.jsx(p.Grid,{item:!0,xs:12,md:6,children:e.jsxs(l.Box,{sx:{p:2,border:"1px dashed gray",borderRadius:1,minHeight:300,overflowY:"hidden",backgroundColor:"background.paper"},onDragOver:m=>m.preventDefault(),onDrop:v,children:[e.jsx(d.Typography,{variant:"subtitle1",gutterBottom:!0,children:"Zone de drop"}),e.jsx(I,{items:n,selectedItemId:i,handleSelectedItemChange:(m,h)=>{h&&s(h)}})]})}),e.jsx(p.Grid,{item:!0,xs:12,md:6,children:e.jsxs(y.Paper,{sx:{p:2,minHeight:300},children:[e.jsx(d.Typography,{variant:"subtitle1",gutterBottom:!0,children:"Informations du dernier drop"}),t?e.jsxs(l.Box,{children:[e.jsxs(d.Typography,{variant:"body2",children:[e.jsx("strong",{children:"Élément cible :"})," ",t.itemLabel," ",t.itemId&&`(ID: ${t.itemId})`]}),e.jsxs(d.Typography,{variant:"body2",children:[e.jsx("strong",{children:"Élément déposé :"})," ",(E=t.droppedItem)==null?void 0:E.label," (ID:"," ",(D=t.droppedItem)==null?void 0:D.id,")"]}),e.jsxs(l.Box,{sx:{mt:2},children:[e.jsx(d.Typography,{variant:"body2",children:e.jsx("strong",{children:"Code pour gérer ce drop :"})}),e.jsx(y.Paper,{sx:{p:1,mt:1,backgroundColor:"grey.100"},children:e.jsx("pre",{style:{margin:0,fontSize:"0.8rem",whiteSpace:"pre-wrap"},children:`// Dans votre gestionnaire d'événements
50
+ `}}}},D=s=>{const i=[],o=r=>{i.push(r),r.children&&r.children.forEach(t=>o(t))};return s.forEach(r=>o(r)),i},B=({items:s,selectedItemId:i,onItemSelect:o})=>{const r=D(s);return e.jsxs(b.Paper,{sx:{width:"100%",maxHeight:300,overflow:"auto"},children:[e.jsx(c.Typography,{variant:"h6",sx:{p:2},children:"Sélection externe"}),e.jsx(R.Divider,{}),e.jsx(L.List,{children:r.map(t=>e.jsx(V.ListItem,{disablePadding:!0,children:e.jsx(I.ListItemButton,{selected:i===t.internalId,onClick:()=>o(t.internalId),children:e.jsx(I.ListItemText,{primary:t.label})})},t.internalId))})]})},_=({items:s,onRandomSelect:i})=>{const o=D(s),r=()=>{const t=Math.floor(Math.random()*o.length);i(o[t].internalId)};return e.jsx(l.Box,{sx:{mt:2,mb:2},children:e.jsx(w.Button,{variant:"contained",color:"primary",onClick:r,children:"Sélection aléatoire"})})},q=({id:s,label:i})=>e.jsx(l.Box,{draggable:!0,onDragStart:o=>{o.dataTransfer.setData("application/json",JSON.stringify({id:s,label:i}))},sx:{padding:1,margin:1,backgroundColor:"grey.100",borderRadius:1,display:"inline-block",cursor:"grab","&:hover":{backgroundColor:"grey.200"}},children:e.jsxs(c.Typography,{variant:"body2",display:"flex",alignItems:"center",children:[e.jsx(P,{fontSize:"small",sx:{mr:1}}),i]})}),f=[{internalId:"documents",label:"Mes formulaires",iconType:n.ICON_TYPE.FOLDER,children:[{internalId:"folder1",label:"Premier dossier",iconType:n.ICON_TYPE.FOLDER,children:[{internalId:"subfolder1",label:"Sous-dossier 1",iconType:n.ICON_TYPE.FOLDER},{internalId:"subfolder2",label:"Sous-dossier 2",iconType:n.ICON_TYPE.FOLDER}]},{internalId:"folder2",label:"Deuxième dossier",iconType:n.ICON_TYPE.FOLDER},{internalId:"folder3",label:"Troisième dossier",iconType:n.ICON_TYPE.FOLDER}]},{internalId:"shared",label:"Formulaires partagés avec moi",iconType:n.ICON_TYPE.SHARE},{internalId:"trash",label:"Corbeille",iconType:n.ICON_TYPE.TRASH}],F=[{internalId:"bookmarks",label:"Favoris",iconType:O,children:[{internalId:"important",label:"Important",iconType:n.ICON_TYPE.CUSTOM,customIcon:Y}]},...f],C=[{internalId:"documents",label:"Documents",iconType:n.ICON_TYPE.SHARE,children:[{internalId:"reports",label:"Rapports",iconType:n.ICON_TYPE.FOLDER,children:[{internalId:"report1",label:"Rapport Janvier",iconType:n.ICON_TYPE.FOLDER},{internalId:"report2",label:"Rapport Février",iconType:n.ICON_TYPE.FOLDER},{internalId:"report3",label:"Rapport Mars",iconType:n.ICON_TYPE.FOLDER}]},{internalId:"invoices",label:"Factures",iconType:n.ICON_TYPE.FOLDER}]},{internalId:"media",label:"Médias",iconType:n.ICON_TYPE.FOLDER,children:[{internalId:"images",label:"Images",iconType:n.ICON_TYPE.FOLDER},{internalId:"videos",label:"Vidéos",iconType:n.ICON_TYPE.FOLDER}]},{internalId:"downloads",label:"Téléchargements",iconType:n.ICON_TYPE.FOLDER}],k={render:()=>{const[s,i]=m.useState(""),o=m.useCallback((r,t)=>{console.log(`Élément sélectionné: ${t}`),t&&i(t)},[]);return e.jsx(l.Box,{sx:{maxWidth:300,overflowY:"hidden"},children:e.jsx(h,{items:f,selectedItemId:s,handleSelectedItemChange:o})})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Exemple de base avec des icônes standard et démonstration de sélection."}}}},H={args:{items:f,selectedItemId:"folder1",handleSelectedItemChange:(s,i)=>{console.log(`Élément sélectionné: ${i}`)},iconColor:"success"},render:s=>e.jsx(l.Box,{sx:{maxWidth:300,overflowY:"hidden"},children:e.jsx(h,{...s})}),parameters:{docs:{description:{story:"Cette story permet de contrôler les propriétés du TreeView directement via le panneau de contrôle de Storybook. Essayez de changer la couleur des icônes pour voir l'effet en temps réel."}}}},A={render:()=>{const[s,i]=m.useState("bookmarks"),o=m.useCallback((r,t)=>{console.log(`Élément sélectionné: ${t}`),t&&i(t)},[]);return e.jsx(l.Box,{sx:{maxWidth:300,overflowY:"hidden"},children:e.jsx(h,{items:F,selectedItemId:s,handleSelectedItemChange:o})})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Exemple utilisant à la fois des icônes prédéfinies et des icônes personnalisées."}}}},$={render:()=>{const s=[{internalId:"root",label:"Structure imbriquée complexe",iconType:n.ICON_TYPE.FOLDER,children:[{internalId:"level1-1",label:"Niveau 1.1",iconType:n.ICON_TYPE.FOLDER,children:[{internalId:"level2-1",label:"Niveau 2.1",iconType:n.ICON_TYPE.FOLDER,children:[{internalId:"level3-1V",label:"VOUS M'AVEZ TROUVÉ HIHIHI",iconType:n.ICON_TYPE.FOLDER},{internalId:"level3-2",label:"Niveau 3.2",iconType:n.ICON_TYPE.SHARE}]},{internalId:"level2-2",label:"Niveau 2.2",iconType:n.ICON_TYPE.TRASH}]},{internalId:"level1-2",label:"Niveau 1.2",iconType:n.ICON_TYPE.CUSTOM,customIcon:O}]}],[i,o]=m.useState("level2-1"),r=m.useCallback((t,a)=>{console.log(`Élément sélectionné: ${a}`),a&&o(a)},[]);return e.jsx(l.Box,{sx:{maxWidth:400,overflowY:"hidden"},children:e.jsx(h,{items:s,selectedItemId:i,handleSelectedItemChange:r})})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Exemple d'une structure profondément imbriquée."}}}},M={render:()=>{const s=["primary","secondary","info"],[i,o]=m.useState({primary:"",secondary:"",info:""});return e.jsx(l.Box,{sx:{display:"flex",flexDirection:"row",gap:3,overflowY:"hidden"},children:s.map(r=>e.jsxs(l.Box,{sx:{maxWidth:250,overflowY:"hidden"},children:[e.jsxs(c.Typography,{variant:"subtitle2",gutterBottom:!0,children:["Icônes ",r]}),e.jsx(h,{items:f,selectedItemId:i[r],handleSelectedItemChange:(t,a)=>{a&&o(u=>({...u,[r]:a}))},iconColor:r})]},r))})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Démonstration des principales options de couleurs disponibles pour les icônes."}}}},G={render:()=>{const s=()=>{var u,T;const a=[];for(let p=1;p<=5;p++){const y={internalId:`main-folder-${p}`,label:`Dossier principal ${p}`,iconType:n.ICON_TYPE.FOLDER,children:[]};for(let d=1;d<=10;d++){const x={internalId:`subfolder-${p}-${d}`,label:`Sous-dossier ${p}.${d}`,iconType:n.ICON_TYPE.FOLDER,children:[]};for(let g=1;g<=5;g++)(u=x.children)==null||u.push({internalId:`item-${p}-${d}-${g}`,label:`Élément ${p}.${d}.${g}`,iconType:n.ICON_TYPE.CUSTOM,customIcon:P});(T=y.children)==null||T.push(x)}a.push(y)}return a},[i,o]=m.useState(""),r=s(),t=m.useCallback((a,u)=>{u&&o(u)},[]);return e.jsxs(l.Box,{children:[e.jsx(c.Typography,{variant:"h6",gutterBottom:!0,children:"TreeView avec hauteur limitée et défilement vertical"}),e.jsxs(I.Grid,{container:!0,spacing:3,children:[e.jsx(I.Grid,{item:!0,xs:12,md:6,children:e.jsxs(b.Paper,{sx:{p:2},children:[e.jsx(c.Typography,{variant:"subtitle2",gutterBottom:!0,children:"Hauteur de 300px avec overflow"}),e.jsx(l.Box,{sx:{border:"1px solid #e0e0e0",borderRadius:1},children:e.jsx(h,{items:r,selectedItemId:i,handleSelectedItemChange:t,height:300})})]})}),e.jsx(I.Grid,{item:!0,xs:12,md:6,children:e.jsxs(b.Paper,{sx:{p:2},children:[e.jsx(c.Typography,{variant:"subtitle2",gutterBottom:!0,children:"Hauteur de 500px avec overflow"}),e.jsx(l.Box,{sx:{border:"1px solid #e0e0e0",borderRadius:1},children:e.jsx(h,{items:r,selectedItemId:i,handleSelectedItemChange:t,height:500})})]})})]}),e.jsx(l.Box,{mt:4,children:e.jsxs(b.Paper,{sx:{p:2},children:[e.jsx(c.Typography,{variant:"subtitle2",gutterBottom:!0,children:"TreeView expansé manuellement"}),e.jsxs(l.Box,{sx:{display:"flex",mb:2},children:[e.jsx(w.Button,{variant:"outlined",onClick:()=>o("subfolder-1-1"),sx:{mr:1},children:"Sélectionner Sous-dossier 1.1"}),e.jsx(w.Button,{variant:"outlined",onClick:()=>o("item-3-5-2"),children:"Sélectionner Élément 3.5.2"})]}),e.jsx(l.Box,{sx:{borderRadius:1},children:e.jsx(h,{items:r,selectedItemId:i,handleSelectedItemChange:t,height:400})})]})})]})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Cette story démontre l'utilisation de la prop `height` pour contrôler la hauteur du TreeView. Elle permet de vérifier le comportement du défilement (overflow) lorsque le contenu dépasse la hauteur définie. Différentes hauteurs sont utilisées pour voir l'impact sur l'expérience utilisateur."}}}},z={render:()=>{const[s,i]=m.useState("reports"),o=(a,u)=>{console.log("TreeView sélection:",u),u&&i(u)},r=a=>{console.log("Sélection externe:",a),i(a)},t=()=>{const u=D(C).find(T=>T.internalId===s);return u?u.label:"Aucun élément sélectionné"};return e.jsxs(l.Box,{sx:{width:"100%",overflowY:"hidden"},children:[e.jsxs(c.Typography,{variant:"subtitle1",gutterBottom:!0,children:["Élément sélectionné: ",e.jsx("strong",{children:t()})," (ID:"," ",s,")"]}),e.jsx(_,{items:C,onRandomSelect:r}),e.jsxs(I.Grid,{container:!0,spacing:3,sx:{overflowY:"hidden"},children:[e.jsx(I.Grid,{item:!0,xs:12,md:6,children:e.jsxs(b.Paper,{sx:{p:2,overflowY:"hidden"},children:[e.jsx(c.Typography,{variant:"h6",gutterBottom:!0,children:"TreeView"}),e.jsx(h,{items:C,selectedItemId:s,handleSelectedItemChange:o})]})}),e.jsx(I.Grid,{item:!0,xs:12,md:6,children:e.jsx(B,{items:C,selectedItemId:s,onItemSelect:r})})]})]})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Démonstration de la synchronisation entre le TreeView et d'autres composants. Cette story montre comment le TreeView peut être intégré dans une interface complexe où la sélection peut provenir de différentes sources mais reste synchronisée."}}}},U={render:()=>{var p,y;const[s,i]=m.useState([...f]),[o,r]=m.useState("folder1"),[t,a]=m.useState(null),u=[{id:"doc1",label:"Document 1"},{id:"doc2",label:"Document 2"},{id:"doc3",label:"Document 3"}],T=d=>{d.preventDefault();const x=d.target,g=x.closest("[data-treeview-item]");let v=null,S=null;g?(v=g.getAttribute("data-treeview-item"),S=g.getAttribute("data-treeview-item-label")):x.closest("[data-treeview-root]")&&(v=null,S="Racine du TreeView");try{const j=JSON.parse(d.dataTransfer.getData("application/json"));a({itemId:v,itemLabel:S,droppedItem:j}),v&&r(v)}catch(j){console.error("Erreur lors de la récupération des données",j)}};return e.jsxs(l.Box,{sx:{maxWidth:700,overflowY:"hidden"},children:[e.jsx(c.Typography,{variant:"h6",gutterBottom:!0,children:"Exemple de Drag & Drop avec le TreeView"}),e.jsx(c.Typography,{variant:"body2",gutterBottom:!0,children:"Glissez-déposez un des documents ci-dessous sur un élément du TreeView."}),e.jsx(l.Box,{sx:{display:"flex",mb:2},children:u.map(d=>e.jsx(q,{id:d.id,label:d.label},d.id))}),e.jsxs(I.Grid,{container:!0,spacing:3,children:[e.jsx(I.Grid,{item:!0,xs:12,md:6,children:e.jsxs(l.Box,{sx:{p:2,border:"1px dashed gray",borderRadius:1,minHeight:300,overflowY:"hidden",backgroundColor:"background.paper"},onDragOver:d=>d.preventDefault(),onDrop:T,children:[e.jsx(c.Typography,{variant:"subtitle1",gutterBottom:!0,children:"Zone de drop"}),e.jsx(h,{items:s,selectedItemId:o,handleSelectedItemChange:(d,x)=>{x&&r(x)}})]})}),e.jsx(I.Grid,{item:!0,xs:12,md:6,children:e.jsxs(b.Paper,{sx:{p:2,minHeight:300},children:[e.jsx(c.Typography,{variant:"subtitle1",gutterBottom:!0,children:"Informations du dernier drop"}),t?e.jsxs(l.Box,{children:[e.jsxs(c.Typography,{variant:"body2",children:[e.jsx("strong",{children:"Élément cible :"})," ",t.itemLabel," ",t.itemId&&`(ID: ${t.itemId})`]}),e.jsxs(c.Typography,{variant:"body2",children:[e.jsx("strong",{children:"Élément déposé :"})," ",(p=t.droppedItem)==null?void 0:p.label," (ID:"," ",(y=t.droppedItem)==null?void 0:y.id,")"]}),e.jsxs(l.Box,{sx:{mt:2},children:[e.jsx(c.Typography,{variant:"body2",children:e.jsx("strong",{children:"Code pour gérer ce drop :"})}),e.jsx(b.Paper,{sx:{p:1,mt:1,backgroundColor:"grey.100"},children:e.jsx("pre",{style:{margin:0,fontSize:"0.8rem",whiteSpace:"pre-wrap"},children:`// Dans votre gestionnaire d'événements
45
51
  const handleDrop = (e) => {
46
52
  e.preventDefault();
47
53
 
@@ -60,4 +66,4 @@ const handleDrop = (e) => {
60
66
 
61
67
  // Votre logique pour traiter le drop...
62
68
  }
63
- };`})})]})]}):e.jsx(d.Typography,{variant:"body2",children:"Aucun élément déposé pour le moment. Glissez un document sur le TreeView pour voir les informations ici."})]})})]})]})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Cette story démontre comment utiliser les attributs `data-` du TreeView pour implémenter une fonctionnalité de drag and drop. Glissez un document sur un élément du TreeView pour voir comment accéder aux informations de l'élément cible."}}}};exports.AvecDragAndDrop=U;exports.AvecIconesPersonnalisees=H;exports.Controlable=A;exports.Default=k;exports.OptionsDeCouleurs=z;exports.StructureImbriquee=M;exports.Synchronicite=G;exports.default=V;
69
+ };`})})]})]}):e.jsx(c.Typography,{variant:"body2",children:"Aucun élément déposé pour le moment. Glissez un document sur le TreeView pour voir les informations ici."})]})})]})]})},parameters:{controls:{disable:!0},actions:{disable:!0},docs:{description:{story:"Cette story démontre comment utiliser les attributs `data-` du TreeView pour implémenter une fonctionnalité de drag and drop. Glissez un document sur un élément du TreeView pour voir comment accéder aux informations de l'élément cible."}}}};exports.AvecDragAndDrop=U;exports.AvecIconesPersonnalisees=A;exports.Controlable=H;exports.Default=k;exports.GrandeHauteurLimitee=G;exports.OptionsDeCouleurs=M;exports.StructureImbriquee=$;exports.Synchronicite=z;exports.default=N;
@@ -8,5 +8,6 @@ export declare const Controlable: Story;
8
8
  export declare const AvecIconesPersonnalisees: Story;
9
9
  export declare const StructureImbriquee: Story;
10
10
  export declare const OptionsDeCouleurs: Story;
11
+ export declare const GrandeHauteurLimitee: Story;
11
12
  export declare const Synchronicite: Story;
12
13
  export declare const AvecDragAndDrop: Story;