@cgi-learning-hub/ui 1.4.0-dev.1741961819 → 1.4.0-dev.1741974011

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=require("./TreeView.cjs.js");exports.TreeView=e;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./TreeView.cjs.js");exports.ICON_TYPE=e.ICON_TYPE;exports.TreeView=e.default;
@@ -1,4 +1,5 @@
1
- import { default as a } from "./TreeView.es.js";
1
+ import { ICON_TYPE as a, default as f } from "./TreeView.es.js";
2
2
  export {
3
- a as TreeView
3
+ a as ICON_TYPE,
4
+ f as TreeView
4
5
  };
@@ -1 +1,34 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const l=require("react/jsx-runtime"),o=require("../../createSvgIcon-DJMYlO0S.cjs"),i=require("../TreeView/TreeView.cjs.js"),n=o.createSvgIcon(l.jsx("path",{d:"M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2m0 12H4V8h16z"}),"FolderOpen"),c={title:"Components/TreeView",component:i,argTypes:{items:{description:"Liste des éléments à afficher dans le TreeView.",control:"object",table:{type:{summary:"TreeViewBaseItem[]"}}},onItemSelect:{description:"Fonction appelée lorsqu'un élément est sélectionné.",table:{type:{summary:"(event: React.SyntheticEvent, itemId: string) => void"}}},folderIcon:{description:"Icône de dossier personnalisée.",control:!1,table:{type:{summary:"SvgIconComponent"}}}}},e=[{id:"root",label:"Root",children:[{id:"child1",label:"Child 1",children:[{id:"child1-1",label:"Child 1.1"},{id:"child1-2",label:"Child 1.2"}]},{id:"child2",label:"Child 2",children:[{id:"child2-1",label:"Child 2.1"}]}]}],s={args:{items:e}},r={args:{items:e,folderIcon:n}},d={args:{items:e,onItemSelect:(a,t)=>{console.log(`Selected item: ${t}`)}}};exports.Default=s;exports.WithCustomIcon=r;exports.WithItemSelect=d;exports.default=c;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("react/jsx-runtime"),c=require("../../createSvgIcon-DJMYlO0S.cjs"),r=require("react"),e=require("../TreeView/TreeView.cjs.js"),u=require("../../Box-DYA49L7w.cjs"),m=require("../../Typography-DPij13XT.cjs"),l=c.createSvgIcon(n.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=c.createSvgIcon(n.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"),I={title:"Components/TreeView",component:e.default,argTypes:{items:{description:"Liste des éléments à afficher dans le TreeView.",control:"object",table:{type:{summary:"CustomTreeViewItem[]"}}},onItemSelect:{description:"Fonction appelée lorsqu'un élément est sélectionné.",control:"none",table:{type:{summary:"(event: React.SyntheticEvent, itemId: string) => void"}}},expandedItemId:{description:"ID de l'élément à développer automatiquement.",control:"text",table:{type:{summary:"string"}}},iconColor:{description:"Couleur des icônes.",control:"select",options:["primary","secondary","success","error","info","warning"],defaultValue:"primary",table:{type:{summary:"string"},defaultValue:{summary:"primary"}}}},parameters:{docs:{description:{component:`
2
+ ## TreeView
3
+
4
+ Un composant pour afficher des données hiérarchiques sous forme d'arborescence.
5
+
6
+ ### Utilisation des icônes
7
+
8
+ Le TreeView permet de personnaliser les icônes selon les types suivants:
9
+ - \`ICON_TYPE.FOLDER\`: Icône de dossier (défaut)
10
+ - \`ICON_TYPE.SHARE\`: Icône de partage
11
+ - \`ICON_TYPE.TRASH\`: Icône de corbeille
12
+ - \`ICON_TYPE.CUSTOM\`: Icône personnalisée (nécessite de définir \`customIcon\`)
13
+
14
+ Vous pouvez également passer directement un composant SvgIcon comme valeur de \`iconType\`.
15
+
16
+ ### Navigation et sélection
17
+
18
+ - \`onItemSelect\`: Permet de réagir quand un utilisateur clique sur un élément
19
+ - \`expandedItemId\`: Permet d'ouvrir automatiquement un dossier spécifique
20
+
21
+ ### Structure des données
22
+
23
+ Le composant attend un tableau d'objets \`CustomTreeViewItem\` qui étend l'interface \`TreeViewBaseItem\` de MUI:
24
+
25
+ \`\`\`typescript
26
+ interface CustomTreeViewItem extends TreeViewBaseItem {
27
+ id: string; // Identifiant unique de l'élément (obligatoire)
28
+ label: string; // Libellé à afficher (obligatoire)
29
+ children?: CustomTreeViewItem[]; // Sous-éléments (facultatif)
30
+ iconType?: IconType; // Type d'icône (facultatif)
31
+ customIcon?: SvgIconComponent; // Icône personnalisée si iconType est CUSTOM (facultatif)
32
+ }
33
+ \`\`\`
34
+ `}}}},T=({items:o})=>{const[t,a]=r.useState(void 0),d=r.useCallback((O,s)=>{console.log(`Élément sélectionné: ${s}`),a(s)},[]);return n.jsxs(u.Box,{children:[n.jsxs(m.Typography,{variant:"subtitle1",gutterBottom:!0,children:["Sélection actuelle: ",t||"Aucun élément sélectionné"]}),n.jsx(e.default,{items:o,onItemSelect:d,expandedItemId:t})]})},i=[{id:"documents",label:"Mes formulaires",iconType:e.ICON_TYPE.FOLDER,children:[{id:"folder1",label:"Premier dossier",iconType:e.ICON_TYPE.FOLDER,children:[{id:"subfolder1",label:"Sous-dossier 1",iconType:e.ICON_TYPE.FOLDER},{id:"subfolder2",label:"Sous-dossier 2",iconType:e.ICON_TYPE.FOLDER}]},{id:"folder2",label:"Deuxième dossier",iconType:e.ICON_TYPE.FOLDER},{id:"folder3",label:"Troisième dossier",iconType:e.ICON_TYPE.FOLDER}]},{id:"shared",label:"Formulaires partagés avec moi",iconType:e.ICON_TYPE.SHARE},{id:"trash",label:"Corbeille",iconType:e.ICON_TYPE.TRASH}],y=[{id:"bookmarks",label:"Favoris",iconType:l,children:[{id:"important",label:"Important",iconType:e.ICON_TYPE.CUSTOM,customIcon:p}]},...i],v={render:()=>n.jsx(T,{items:i}),parameters:{docs:{description:{story:"Exemple de base avec des icônes standard et démonstration de sélection."}}}},b={args:{items:i,expandedItemId:"subfolder1",onItemSelect:(o,t)=>{console.log(`Élément sélectionné: ${t}`)}},parameters:{docs:{description:{story:"Exemple avec développement automatique d'un dossier spécifique."}}}},E={args:{items:y,onItemSelect:(o,t)=>{console.log(`Élément sélectionné: ${t}`)}},parameters:{docs:{description:{story:"Exemple utilisant à la fois des icônes prédéfinies et des icônes personnalisées."}}}},f={args:{items:[{id:"root",label:"Structure imbriquée complexe",iconType:e.ICON_TYPE.FOLDER,children:[{id:"level1-1",label:"Niveau 1.1",iconType:e.ICON_TYPE.FOLDER,children:[{id:"level2-1",label:"Niveau 2.1",iconType:e.ICON_TYPE.FOLDER,children:[{id:"level3-1",label:"Niveau 3.1",iconType:e.ICON_TYPE.FOLDER},{id:"level3-2",label:"Niveau 3.2",iconType:e.ICON_TYPE.SHARE}]},{id:"level2-2",label:"Niveau 2.2",iconType:e.ICON_TYPE.TRASH}]},{id:"level1-2",label:"Niveau 1.2",iconType:e.ICON_TYPE.CUSTOM,customIcon:l}]}],onItemSelect:(o,t)=>{console.log(`Élément sélectionné: ${t}`)}},parameters:{docs:{description:{story:"Exemple d'une structure profondément imbriquée avec différents types d'icônes à chaque niveau."}}}};exports.AvecIconesPersonnalisees=E;exports.Default=v;exports.StructureImbriquee=f;exports.WithExplicitExpand=b;exports.default=I;
@@ -4,5 +4,6 @@ declare const meta: Meta<typeof TreeView>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof TreeView>;
6
6
  export declare const Default: Story;
7
- export declare const WithCustomIcon: Story;
8
- export declare const WithItemSelect: Story;
7
+ export declare const WithExplicitExpand: Story;
8
+ export declare const AvecIconesPersonnalisees: Story;
9
+ export declare const StructureImbriquee: Story;
@@ -1,86 +1,272 @@
1
- import { jsx as o } from "react/jsx-runtime";
1
+ import { jsx as n, jsxs as r } from "react/jsx-runtime";
2
2
  import { c as l } from "../../createSvgIcon-K1Hd8ryN.js";
3
- import i from "../TreeView/TreeView.es.js";
4
- const n = l(/* @__PURE__ */ o("path", {
5
- d: "M20 6h-8l-2-2H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2m0 12H4V8h16z"
6
- }), "FolderOpen"), m = {
3
+ import { useState as p, useCallback as u } from "react";
4
+ import c, { ICON_TYPE as e } from "../TreeView/TreeView.es.js";
5
+ import { B as I } from "../../Box-DgqaLb7j.js";
6
+ import { T } from "../../Typography-SIQ6eleU.js";
7
+ const a = l(/* @__PURE__ */ n("path", {
8
+ d: "M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2"
9
+ }), "Bookmark"), y = l(/* @__PURE__ */ n("path", {
10
+ 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"
11
+ }), "Person"), x = {
7
12
  title: "Components/TreeView",
8
- component: i,
13
+ component: c,
9
14
  argTypes: {
10
15
  items: {
11
16
  description: "Liste des éléments à afficher dans le TreeView.",
12
17
  control: "object",
13
18
  table: {
14
- type: { summary: "TreeViewBaseItem[]" }
19
+ type: { summary: "CustomTreeViewItem[]" }
15
20
  }
16
21
  },
17
22
  onItemSelect: {
18
23
  description: "Fonction appelée lorsqu'un élément est sélectionné.",
24
+ control: "none",
19
25
  table: {
20
26
  type: {
21
27
  summary: "(event: React.SyntheticEvent, itemId: string) => void"
22
28
  }
23
29
  }
24
30
  },
25
- folderIcon: {
26
- description: "Icône de dossier personnalisée.",
27
- control: !1,
31
+ expandedItemId: {
32
+ description: "ID de l'élément à développer automatiquement.",
33
+ control: "text",
28
34
  table: {
29
- type: { summary: "SvgIconComponent" }
35
+ type: { summary: "string" }
36
+ }
37
+ },
38
+ iconColor: {
39
+ description: "Couleur des icônes.",
40
+ control: "select",
41
+ options: ["primary", "secondary", "success", "error", "info", "warning"],
42
+ defaultValue: "primary",
43
+ table: {
44
+ type: { summary: "string" },
45
+ defaultValue: { summary: "primary" }
46
+ }
47
+ }
48
+ },
49
+ parameters: {
50
+ docs: {
51
+ description: {
52
+ component: `
53
+ ## TreeView
54
+
55
+ Un composant pour afficher des données hiérarchiques sous forme d'arborescence.
56
+
57
+ ### Utilisation des icônes
58
+
59
+ Le TreeView permet de personnaliser les icônes selon les types suivants:
60
+ - \`ICON_TYPE.FOLDER\`: Icône de dossier (défaut)
61
+ - \`ICON_TYPE.SHARE\`: Icône de partage
62
+ - \`ICON_TYPE.TRASH\`: Icône de corbeille
63
+ - \`ICON_TYPE.CUSTOM\`: Icône personnalisée (nécessite de définir \`customIcon\`)
64
+
65
+ Vous pouvez également passer directement un composant SvgIcon comme valeur de \`iconType\`.
66
+
67
+ ### Navigation et sélection
68
+
69
+ - \`onItemSelect\`: Permet de réagir quand un utilisateur clique sur un élément
70
+ - \`expandedItemId\`: Permet d'ouvrir automatiquement un dossier spécifique
71
+
72
+ ### Structure des données
73
+
74
+ Le composant attend un tableau d'objets \`CustomTreeViewItem\` qui étend l'interface \`TreeViewBaseItem\` de MUI:
75
+
76
+ \`\`\`typescript
77
+ interface CustomTreeViewItem extends TreeViewBaseItem {
78
+ id: string; // Identifiant unique de l'élément (obligatoire)
79
+ label: string; // Libellé à afficher (obligatoire)
80
+ children?: CustomTreeViewItem[]; // Sous-éléments (facultatif)
81
+ iconType?: IconType; // Type d'icône (facultatif)
82
+ customIcon?: SvgIconComponent; // Icône personnalisée si iconType est CUSTOM (facultatif)
83
+ }
84
+ \`\`\`
85
+ `
30
86
  }
31
87
  }
32
88
  }
33
- }, e = [
89
+ }, f = ({ items: o }) => {
90
+ const [t, d] = p(void 0), m = u(
91
+ (v, s) => {
92
+ console.log(`Élément sélectionné: ${s}`), d(s);
93
+ },
94
+ []
95
+ );
96
+ return /* @__PURE__ */ r(I, { children: [
97
+ /* @__PURE__ */ r(T, { variant: "subtitle1", gutterBottom: !0, children: [
98
+ "Sélection actuelle: ",
99
+ t || "Aucun élément sélectionné"
100
+ ] }),
101
+ /* @__PURE__ */ n(
102
+ c,
103
+ {
104
+ items: o,
105
+ onItemSelect: m,
106
+ expandedItemId: t
107
+ }
108
+ )
109
+ ] });
110
+ }, i = [
34
111
  {
35
- id: "root",
36
- label: "Root",
112
+ id: "documents",
113
+ label: "Mes formulaires",
114
+ iconType: e.FOLDER,
37
115
  children: [
38
116
  {
39
- id: "child1",
40
- label: "Child 1",
117
+ id: "folder1",
118
+ label: "Premier dossier",
119
+ iconType: e.FOLDER,
41
120
  children: [
42
121
  {
43
- id: "child1-1",
44
- label: "Child 1.1"
122
+ id: "subfolder1",
123
+ label: "Sous-dossier 1",
124
+ iconType: e.FOLDER
45
125
  },
46
126
  {
47
- id: "child1-2",
48
- label: "Child 1.2"
127
+ id: "subfolder2",
128
+ label: "Sous-dossier 2",
129
+ iconType: e.FOLDER
49
130
  }
50
131
  ]
51
132
  },
52
133
  {
53
- id: "child2",
54
- label: "Child 2",
55
- children: [
56
- {
57
- id: "child2-1",
58
- label: "Child 2.1"
59
- }
60
- ]
134
+ id: "folder2",
135
+ label: "Deuxième dossier",
136
+ iconType: e.FOLDER
137
+ },
138
+ {
139
+ id: "folder3",
140
+ label: "Troisième dossier",
141
+ iconType: e.FOLDER
142
+ }
143
+ ]
144
+ },
145
+ {
146
+ id: "shared",
147
+ label: "Formulaires partagés avec moi",
148
+ iconType: e.SHARE
149
+ },
150
+ {
151
+ id: "trash",
152
+ label: "Corbeille",
153
+ iconType: e.TRASH
154
+ }
155
+ ], b = [
156
+ {
157
+ id: "bookmarks",
158
+ label: "Favoris",
159
+ iconType: a,
160
+ children: [
161
+ {
162
+ id: "important",
163
+ label: "Important",
164
+ iconType: e.CUSTOM,
165
+ customIcon: y
61
166
  }
62
167
  ]
168
+ },
169
+ ...i
170
+ ], R = {
171
+ render: () => /* @__PURE__ */ n(f, { items: i }),
172
+ parameters: {
173
+ docs: {
174
+ description: {
175
+ story: "Exemple de base avec des icônes standard et démonstration de sélection."
176
+ }
177
+ }
63
178
  }
64
- ], a = {
179
+ }, L = {
65
180
  args: {
66
- items: e
181
+ items: i,
182
+ expandedItemId: "subfolder1",
183
+ onItemSelect: (o, t) => {
184
+ console.log(`Élément sélectionné: ${t}`);
185
+ }
186
+ },
187
+ parameters: {
188
+ docs: {
189
+ description: {
190
+ story: "Exemple avec développement automatique d'un dossier spécifique."
191
+ }
192
+ }
67
193
  }
68
- }, h = {
194
+ }, q = {
69
195
  args: {
70
- items: e,
71
- folderIcon: n
196
+ items: b,
197
+ onItemSelect: (o, t) => {
198
+ console.log(`Élément sélectionné: ${t}`);
199
+ }
200
+ },
201
+ parameters: {
202
+ docs: {
203
+ description: {
204
+ story: "Exemple utilisant à la fois des icônes prédéfinies et des icônes personnalisées."
205
+ }
206
+ }
72
207
  }
73
- }, p = {
208
+ }, D = {
74
209
  args: {
75
- items: e,
76
- onItemSelect: (c, t) => {
77
- console.log(`Selected item: ${t}`);
210
+ items: [
211
+ {
212
+ id: "root",
213
+ label: "Structure imbriquée complexe",
214
+ iconType: e.FOLDER,
215
+ children: [
216
+ {
217
+ id: "level1-1",
218
+ label: "Niveau 1.1",
219
+ iconType: e.FOLDER,
220
+ children: [
221
+ {
222
+ id: "level2-1",
223
+ label: "Niveau 2.1",
224
+ iconType: e.FOLDER,
225
+ children: [
226
+ {
227
+ id: "level3-1",
228
+ label: "Niveau 3.1",
229
+ iconType: e.FOLDER
230
+ },
231
+ {
232
+ id: "level3-2",
233
+ label: "Niveau 3.2",
234
+ iconType: e.SHARE
235
+ }
236
+ ]
237
+ },
238
+ {
239
+ id: "level2-2",
240
+ label: "Niveau 2.2",
241
+ iconType: e.TRASH
242
+ }
243
+ ]
244
+ },
245
+ {
246
+ id: "level1-2",
247
+ label: "Niveau 1.2",
248
+ iconType: e.CUSTOM,
249
+ customIcon: a
250
+ }
251
+ ]
252
+ }
253
+ ],
254
+ onItemSelect: (o, t) => {
255
+ console.log(`Élément sélectionné: ${t}`);
256
+ }
257
+ },
258
+ parameters: {
259
+ docs: {
260
+ description: {
261
+ story: "Exemple d'une structure profondément imbriquée avec différents types d'icônes à chaque niveau."
262
+ }
78
263
  }
79
264
  }
80
265
  };
81
266
  export {
82
- a as Default,
83
- h as WithCustomIcon,
84
- p as WithItemSelect,
85
- m as default
267
+ q as AvecIconesPersonnalisees,
268
+ R as Default,
269
+ D as StructureImbriquee,
270
+ L as WithExplicitExpand,
271
+ x as default
86
272
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cgi-learning-hub/ui",
3
- "version": "1.4.0-dev.1741961819",
3
+ "version": "1.4.0-dev.1741974011",
4
4
  "private": false,
5
5
  "author": "CGI Learning-hub Team",
6
6
  "description": "@cgi-learning-hub/ui is an open-source React component library that implements UI for HUB's features",