ptechcore_ui 1.0.3 → 1.0.5
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.
- package/dist/index.cjs +375 -170
- package/dist/index.d.cts +104 -1
- package/dist/index.d.ts +104 -1
- package/dist/index.js +362 -166
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -29,14 +29,23 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
// src/index.ts
|
|
30
30
|
var index_exports = {};
|
|
31
31
|
__export(index_exports, {
|
|
32
|
+
DateInput: () => DateInput,
|
|
33
|
+
FileInput: () => FileInput,
|
|
34
|
+
InputField: () => InputField,
|
|
35
|
+
Modal: () => Modals_default,
|
|
36
|
+
NumberInput: () => NumberInput,
|
|
32
37
|
Pages: () => Pages_default,
|
|
33
38
|
PrimaryButton: () => Buttons_default,
|
|
34
39
|
RewiseLayout: () => ModernDoubleSidebarLayout_default,
|
|
35
40
|
SecondaryButton: () => SecondaryButton,
|
|
41
|
+
SelectInput: () => SelectInput,
|
|
36
42
|
SessionProvider: () => SessionProvider,
|
|
43
|
+
TextInput: () => TextInput,
|
|
37
44
|
ThemeProvider: () => ThemeContext_default,
|
|
38
45
|
ToastContainer: () => Toast_default,
|
|
39
|
-
ToastProvider: () => ToastProvider
|
|
46
|
+
ToastProvider: () => ToastProvider,
|
|
47
|
+
useSession: () => useSession,
|
|
48
|
+
useToast: () => useToast
|
|
40
49
|
});
|
|
41
50
|
module.exports = __toCommonJS(index_exports);
|
|
42
51
|
|
|
@@ -73,9 +82,189 @@ var SecondaryButton = ({
|
|
|
73
82
|
);
|
|
74
83
|
var Buttons_default = PrimaryButton;
|
|
75
84
|
|
|
85
|
+
// src/components/common/Modals.tsx
|
|
86
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
87
|
+
var Modal = ({ title, description, width, open, onClose, children }) => {
|
|
88
|
+
if (!open) return null;
|
|
89
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: `bg-white rounded-lg py-4 px-6 mx-4 w-[${width ? width : "60%"}]`, children: [
|
|
90
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "flex justify-between items-start mb-6", children: [
|
|
91
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
|
|
92
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h3", { className: "text-xl font-semibold text-tuatara flex items-center space-x-2", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: title }) }),
|
|
93
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "text-sm text-gray-600 mt-1", children: description })
|
|
94
|
+
] }),
|
|
95
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
96
|
+
"button",
|
|
97
|
+
{
|
|
98
|
+
onClick: onClose,
|
|
99
|
+
className: "text-gray-400 hover:text-gray-600 text-xl",
|
|
100
|
+
"aria-label": "Close modal",
|
|
101
|
+
children: "\u2715"
|
|
102
|
+
}
|
|
103
|
+
)
|
|
104
|
+
] }),
|
|
105
|
+
children
|
|
106
|
+
] }) });
|
|
107
|
+
};
|
|
108
|
+
var Modals_default = Modal;
|
|
109
|
+
|
|
110
|
+
// src/components/common/Inputs.tsx
|
|
111
|
+
var import_react_router_dom = require("react-router-dom");
|
|
112
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
113
|
+
var InputField = ({
|
|
114
|
+
label,
|
|
115
|
+
name,
|
|
116
|
+
type = "text",
|
|
117
|
+
value,
|
|
118
|
+
placeholder,
|
|
119
|
+
required = false,
|
|
120
|
+
disabled = false,
|
|
121
|
+
error,
|
|
122
|
+
onChange,
|
|
123
|
+
onBlur
|
|
124
|
+
}) => {
|
|
125
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex flex-col gap-1 w-full", children: [
|
|
126
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { htmlFor: name, className: "block text-gray-700 text-sm font-medium mb-2", children: [
|
|
127
|
+
label,
|
|
128
|
+
" ",
|
|
129
|
+
required && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-red-500", children: "*" })
|
|
130
|
+
] }),
|
|
131
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
132
|
+
"input",
|
|
133
|
+
{
|
|
134
|
+
id: name,
|
|
135
|
+
name,
|
|
136
|
+
type,
|
|
137
|
+
value,
|
|
138
|
+
placeholder,
|
|
139
|
+
required,
|
|
140
|
+
disabled,
|
|
141
|
+
onChange,
|
|
142
|
+
onBlur,
|
|
143
|
+
className: `w-full px-3 py-2 border border-[#D9D9D9] focus:ring-2 focus:ring-[#6A8A82]/20
|
|
144
|
+
${error ? "border-red-500" : "border-gray-300"}
|
|
145
|
+
${disabled ? "bg-gray-100 cursor-not-allowed" : ""}
|
|
146
|
+
`
|
|
147
|
+
}
|
|
148
|
+
),
|
|
149
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "text-xs text-red-500", children: error })
|
|
150
|
+
] });
|
|
151
|
+
};
|
|
152
|
+
var TextInput = (props) => {
|
|
153
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(InputField, { ...props, type: "text" });
|
|
154
|
+
};
|
|
155
|
+
var NumberInput = (props) => {
|
|
156
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(InputField, { type: "number", ...props });
|
|
157
|
+
};
|
|
158
|
+
var DateInput = (props) => {
|
|
159
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(InputField, { type: "date", ...props });
|
|
160
|
+
};
|
|
161
|
+
var SelectInput = ({
|
|
162
|
+
label,
|
|
163
|
+
name,
|
|
164
|
+
value,
|
|
165
|
+
options,
|
|
166
|
+
defaultValue = "",
|
|
167
|
+
required = false,
|
|
168
|
+
disabled = false,
|
|
169
|
+
error,
|
|
170
|
+
className = "",
|
|
171
|
+
onChange,
|
|
172
|
+
onBlur
|
|
173
|
+
}) => {
|
|
174
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: `${className} flex flex-col gap-1 w-full`, children: [
|
|
175
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
176
|
+
"label",
|
|
177
|
+
{
|
|
178
|
+
htmlFor: name,
|
|
179
|
+
className: "block text-gray-700 text-sm font-medium mb-2",
|
|
180
|
+
children: [
|
|
181
|
+
label,
|
|
182
|
+
" ",
|
|
183
|
+
required && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-red-500", children: "*" })
|
|
184
|
+
]
|
|
185
|
+
}
|
|
186
|
+
),
|
|
187
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
188
|
+
"select",
|
|
189
|
+
{
|
|
190
|
+
id: name,
|
|
191
|
+
name,
|
|
192
|
+
value: value ?? "",
|
|
193
|
+
required,
|
|
194
|
+
disabled,
|
|
195
|
+
onChange,
|
|
196
|
+
onBlur,
|
|
197
|
+
className: `w-full px-4 py-2 border rounded-lg text-sm
|
|
198
|
+
focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent
|
|
199
|
+
${error ? "border-red-500" : "border-gray-300"}
|
|
200
|
+
${disabled ? "bg-gray-100 cursor-not-allowed" : ""}
|
|
201
|
+
`,
|
|
202
|
+
children: [
|
|
203
|
+
defaultValue !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("option", { value: "", children: typeof defaultValue === "string" ? defaultValue : "S\xE9lectionnez une option" }),
|
|
204
|
+
options.map(({ label: label2, value: optionValue }) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("option", { value: optionValue, children: label2 }, optionValue))
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
),
|
|
208
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "text-xs text-red-500", children: error })
|
|
209
|
+
] });
|
|
210
|
+
};
|
|
211
|
+
var addressIpformMedia = "http://localhost:8000/media/";
|
|
212
|
+
var FileInput = ({
|
|
213
|
+
label,
|
|
214
|
+
name,
|
|
215
|
+
file,
|
|
216
|
+
required = false,
|
|
217
|
+
disabled = false,
|
|
218
|
+
readOnly = false,
|
|
219
|
+
error,
|
|
220
|
+
onChange
|
|
221
|
+
}) => {
|
|
222
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex flex-col gap-1 w-full", children: [
|
|
223
|
+
label && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
224
|
+
"label",
|
|
225
|
+
{
|
|
226
|
+
htmlFor: name,
|
|
227
|
+
className: "block text-gray-700 text-sm font-medium mb-2",
|
|
228
|
+
children: [
|
|
229
|
+
label,
|
|
230
|
+
" ",
|
|
231
|
+
required && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "text-red-500", children: "*" }),
|
|
232
|
+
file && typeof file === "string" && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
233
|
+
import_react_router_dom.Link,
|
|
234
|
+
{
|
|
235
|
+
to: addressIpformMedia + file,
|
|
236
|
+
target: "_blank",
|
|
237
|
+
className: "ml-2 text-blue-600 underline text-sm",
|
|
238
|
+
children: file.split("/").pop()
|
|
239
|
+
}
|
|
240
|
+
) })
|
|
241
|
+
]
|
|
242
|
+
}
|
|
243
|
+
),
|
|
244
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
245
|
+
"input",
|
|
246
|
+
{
|
|
247
|
+
id: name,
|
|
248
|
+
type: "file",
|
|
249
|
+
name,
|
|
250
|
+
onChange,
|
|
251
|
+
readOnly,
|
|
252
|
+
disabled,
|
|
253
|
+
required,
|
|
254
|
+
className: `w-full px-4 py-2 border rounded-lg text-sm
|
|
255
|
+
focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent
|
|
256
|
+
${error ? "border-red-500" : "border-gray-300"}
|
|
257
|
+
${disabled ? "bg-gray-100 cursor-not-allowed" : ""}
|
|
258
|
+
`
|
|
259
|
+
}
|
|
260
|
+
),
|
|
261
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "text-xs text-red-500", children: error })
|
|
262
|
+
] });
|
|
263
|
+
};
|
|
264
|
+
|
|
76
265
|
// src/components/layout/ModernDoubleSidebarLayout.tsx
|
|
77
266
|
var import_react2 = __toESM(require("react"), 1);
|
|
78
|
-
var
|
|
267
|
+
var import_react_router_dom2 = require("react-router-dom");
|
|
79
268
|
var import_lucide_react = require("lucide-react");
|
|
80
269
|
|
|
81
270
|
// src/utils/utils.ts
|
|
@@ -418,7 +607,7 @@ var getThemeCSSVariables = (theme) => {
|
|
|
418
607
|
};
|
|
419
608
|
|
|
420
609
|
// src/contexts/ThemeContext.tsx
|
|
421
|
-
var
|
|
610
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
422
611
|
var ThemeContext = (0, import_react.createContext)(void 0);
|
|
423
612
|
var useTheme = () => {
|
|
424
613
|
const context = (0, import_react.useContext)(ThemeContext);
|
|
@@ -449,15 +638,15 @@ var ThemeProvider = ({ children }) => {
|
|
|
449
638
|
setThemeState(themes[type]);
|
|
450
639
|
}
|
|
451
640
|
};
|
|
452
|
-
return /* @__PURE__ */ (0,
|
|
641
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ThemeContext.Provider, { value: { theme, themeType, setTheme }, children });
|
|
453
642
|
};
|
|
454
643
|
var ThemeContext_default = ThemeProvider;
|
|
455
644
|
|
|
456
645
|
// src/components/layout/ModernDoubleSidebarLayout.tsx
|
|
457
|
-
var
|
|
646
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
458
647
|
var RewiseLayout = ({ children, module_name = "Rewise", module_description = "Description du module", primaryMenuItems, secondaryMenuItems }) => {
|
|
459
|
-
const location = (0,
|
|
460
|
-
const navigate = (0,
|
|
648
|
+
const location = (0, import_react_router_dom2.useLocation)();
|
|
649
|
+
const navigate = (0, import_react_router_dom2.useNavigate)();
|
|
461
650
|
const { theme, themeType, setTheme } = useTheme();
|
|
462
651
|
const [primaryCollapsed, setPrimaryCollapsed] = (0, import_react2.useState)(false);
|
|
463
652
|
const [secondaryCollapsed, setSecondaryCollapsed] = (0, import_react2.useState)(false);
|
|
@@ -540,8 +729,8 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
540
729
|
(prev) => prev.map((n) => n.id === id ? { ...n, read: true } : n)
|
|
541
730
|
);
|
|
542
731
|
};
|
|
543
|
-
return /* @__PURE__ */ (0,
|
|
544
|
-
/* @__PURE__ */ (0,
|
|
732
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex h-screen bg-[var(--color-background)] overflow-hidden", children: [
|
|
733
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
545
734
|
"a",
|
|
546
735
|
{
|
|
547
736
|
href: "#main-content",
|
|
@@ -549,7 +738,7 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
549
738
|
children: "Aller au contenu principal"
|
|
550
739
|
}
|
|
551
740
|
),
|
|
552
|
-
/* @__PURE__ */ (0,
|
|
741
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
553
742
|
"aside",
|
|
554
743
|
{
|
|
555
744
|
className: cn(
|
|
@@ -559,38 +748,38 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
559
748
|
role: "navigation",
|
|
560
749
|
"aria-label": "Navigation principale",
|
|
561
750
|
children: [
|
|
562
|
-
/* @__PURE__ */ (0,
|
|
563
|
-
/* @__PURE__ */ (0,
|
|
751
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "h-16 flex items-center justify-between px-4 border-b border-[var(--color-sidebar-border)]", children: [
|
|
752
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: cn(
|
|
564
753
|
"flex items-center gap-3",
|
|
565
754
|
primaryCollapsed && "justify-center"
|
|
566
755
|
), children: [
|
|
567
|
-
/* @__PURE__ */ (0,
|
|
568
|
-
!primaryCollapsed && /* @__PURE__ */ (0,
|
|
569
|
-
/* @__PURE__ */ (0,
|
|
570
|
-
/* @__PURE__ */ (0,
|
|
756
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "w-10 h-10 bg-[var(--color-primary)] rounded-lg flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-[var(--color-background)] font-bold text-xl", children: "W" }) }),
|
|
757
|
+
!primaryCollapsed && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
758
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { className: "text-[var(--color-sidebar-text)] font-bold text-lg", children: module_name }),
|
|
759
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-[var(--color-sidebar-text-secondary)] text-xs", children: module_description })
|
|
571
760
|
] })
|
|
572
761
|
] }),
|
|
573
|
-
/* @__PURE__ */ (0,
|
|
762
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
574
763
|
"button",
|
|
575
764
|
{
|
|
576
765
|
onClick: () => setPrimaryCollapsed(!primaryCollapsed),
|
|
577
766
|
className: "text-[var(--color-sidebar-text-secondary)] hover:text-[var(--color-sidebar-text)] transition-colors",
|
|
578
767
|
"aria-label": primaryCollapsed ? "D\xE9velopper le menu" : "R\xE9duire le menu",
|
|
579
768
|
"aria-expanded": !primaryCollapsed,
|
|
580
|
-
children: /* @__PURE__ */ (0,
|
|
769
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.ChevronLeft, { className: cn(
|
|
581
770
|
"w-5 h-5 transition-transform",
|
|
582
771
|
primaryCollapsed && "rotate-180"
|
|
583
772
|
) })
|
|
584
773
|
}
|
|
585
774
|
)
|
|
586
775
|
] }),
|
|
587
|
-
/* @__PURE__ */ (0,
|
|
776
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
588
777
|
"nav",
|
|
589
778
|
{
|
|
590
779
|
className: "flex-1 py-4 overflow-y-auto",
|
|
591
780
|
role: "menubar",
|
|
592
781
|
"aria-label": "Modules principaux",
|
|
593
|
-
children: primaryMenuItems.map((item) => /* @__PURE__ */ (0,
|
|
782
|
+
children: primaryMenuItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
594
783
|
"button",
|
|
595
784
|
{
|
|
596
785
|
onClick: () => {
|
|
@@ -610,48 +799,48 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
610
799
|
"aria-label": item.ariaLabel || item.label,
|
|
611
800
|
"aria-current": isModuleActive(item.id) ? "page" : void 0,
|
|
612
801
|
children: [
|
|
613
|
-
/* @__PURE__ */ (0,
|
|
802
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn(
|
|
614
803
|
"transition-colors",
|
|
615
804
|
isModuleActive(item.id) ? "text-[var(--color-primary)]" : "text-[var(--color-sidebar-text-secondary)] group-hover:text-[var(--color-sidebar-text)]"
|
|
616
805
|
), children: item.icon }),
|
|
617
|
-
!primaryCollapsed && /* @__PURE__ */ (0,
|
|
618
|
-
/* @__PURE__ */ (0,
|
|
806
|
+
!primaryCollapsed && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
807
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn(
|
|
619
808
|
"flex-1 text-left text-sm font-medium transition-colors",
|
|
620
809
|
isModuleActive(item.id) ? "text-[var(--color-sidebar-text)]" : "text-[var(--color-sidebar-text-secondary)] group-hover:text-[var(--color-sidebar-text)]"
|
|
621
810
|
), children: item.label }),
|
|
622
|
-
item.badge && /* @__PURE__ */ (0,
|
|
811
|
+
item.badge && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "px-2 py-0.5 text-xs bg-[var(--color-primary)] text-[var(--color-background)] rounded-full", children: item.badge })
|
|
623
812
|
] }),
|
|
624
|
-
primaryCollapsed && /* @__PURE__ */ (0,
|
|
813
|
+
primaryCollapsed && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "absolute left-full ml-2 px-2 py-1 bg-[var(--color-sidebar-active)] text-[var(--color-sidebar-text)] text-xs rounded opacity-0 group-hover:opacity-100 pointer-events-none whitespace-nowrap z-50", children: item.label })
|
|
625
814
|
]
|
|
626
815
|
},
|
|
627
816
|
item.id
|
|
628
817
|
))
|
|
629
818
|
}
|
|
630
819
|
),
|
|
631
|
-
/* @__PURE__ */ (0,
|
|
820
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "p-4 border-t border-[var(--color-sidebar-border)]", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: cn(
|
|
632
821
|
"flex items-center gap-3",
|
|
633
822
|
primaryCollapsed && "justify-center"
|
|
634
823
|
), children: [
|
|
635
|
-
/* @__PURE__ */ (0,
|
|
636
|
-
!primaryCollapsed && /* @__PURE__ */ (0,
|
|
637
|
-
/* @__PURE__ */ (0,
|
|
638
|
-
/* @__PURE__ */ (0,
|
|
824
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "w-10 h-10 bg-[var(--color-sidebar-avatar-bg)] rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.User, { className: "w-5 h-5 text-[var(--color-sidebar-text-secondary)]" }) }),
|
|
825
|
+
!primaryCollapsed && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex-1", children: [
|
|
826
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm font-medium text-[var(--color-sidebar-text)]", children: "Admin" }),
|
|
827
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-xs text-[var(--color-sidebar-text-secondary)]", children: "admin@wisebook.com" })
|
|
639
828
|
] })
|
|
640
829
|
] }) })
|
|
641
830
|
]
|
|
642
831
|
}
|
|
643
832
|
),
|
|
644
|
-
secondaryMenuItems[selectedModule] && /* @__PURE__ */ (0,
|
|
645
|
-
secondaryCollapsed && /* @__PURE__ */ (0,
|
|
833
|
+
secondaryMenuItems[selectedModule] && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
|
|
834
|
+
secondaryCollapsed && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
646
835
|
"button",
|
|
647
836
|
{
|
|
648
837
|
onClick: () => setSecondaryCollapsed(false),
|
|
649
838
|
className: "hidden lg:flex items-center justify-center w-12 h-full bg-[var(--color-background)] border-r border-[var(--color-border)] hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
650
839
|
"aria-label": "Ouvrir le sous-menu",
|
|
651
|
-
children: /* @__PURE__ */ (0,
|
|
840
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.ChevronRight, { className: "w-5 h-5 text-[var(--color-text-tertiary)]" })
|
|
652
841
|
}
|
|
653
842
|
),
|
|
654
|
-
/* @__PURE__ */ (0,
|
|
843
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
655
844
|
"aside",
|
|
656
845
|
{
|
|
657
846
|
className: cn(
|
|
@@ -661,28 +850,28 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
661
850
|
role: "navigation",
|
|
662
851
|
"aria-label": "Navigation secondaire",
|
|
663
852
|
children: [
|
|
664
|
-
/* @__PURE__ */ (0,
|
|
665
|
-
/* @__PURE__ */ (0,
|
|
666
|
-
/* @__PURE__ */ (0,
|
|
853
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "h-16 flex items-center justify-between px-4 border-b border-[var(--color-border)]", children: [
|
|
854
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "text-sm font-semibold text-[var(--color-text-secondary)] uppercase tracking-wider whitespace-nowrap", children: primaryMenuItems.find((item) => item.id === selectedModule)?.label }),
|
|
855
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
667
856
|
"button",
|
|
668
857
|
{
|
|
669
858
|
onClick: () => setSecondaryCollapsed(!secondaryCollapsed),
|
|
670
859
|
className: "text-[var(--color-text-tertiary)] hover:text-[var(--color-text-primary)] flex-shrink-0",
|
|
671
860
|
"aria-label": secondaryCollapsed ? "D\xE9velopper le sous-menu" : "R\xE9duire le sous-menu",
|
|
672
|
-
children: /* @__PURE__ */ (0,
|
|
861
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.ChevronLeft, { className: cn(
|
|
673
862
|
"w-4 h-4 transition-transform",
|
|
674
863
|
secondaryCollapsed && "rotate-180"
|
|
675
864
|
) })
|
|
676
865
|
}
|
|
677
866
|
)
|
|
678
867
|
] }),
|
|
679
|
-
/* @__PURE__ */ (0,
|
|
868
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
680
869
|
"nav",
|
|
681
870
|
{
|
|
682
871
|
className: "flex-1 py-4 overflow-y-auto",
|
|
683
872
|
role: "menu",
|
|
684
873
|
"aria-label": "Sous-navigation",
|
|
685
|
-
children: secondaryMenuItems[selectedModule]?.map((item) => /* @__PURE__ */ (0,
|
|
874
|
+
children: secondaryMenuItems[selectedModule]?.map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
686
875
|
"button",
|
|
687
876
|
{
|
|
688
877
|
onClick: () => item.path && navigate(item.path),
|
|
@@ -694,15 +883,15 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
694
883
|
role: "menuitem",
|
|
695
884
|
"aria-current": isActive(item.path || "") ? "page" : void 0,
|
|
696
885
|
children: [
|
|
697
|
-
item.icon && /* @__PURE__ */ (0,
|
|
886
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn(
|
|
698
887
|
"transition-colors",
|
|
699
888
|
isActive(item.path || "") ? "text-[var(--color-primary)]" : "text-[var(--color-text-tertiary)]"
|
|
700
889
|
), children: item.icon }),
|
|
701
|
-
/* @__PURE__ */ (0,
|
|
890
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn(
|
|
702
891
|
"flex-1 text-left text-sm",
|
|
703
892
|
isActive(item.path || "") ? "text-[var(--color-primary)] font-medium" : "text-[var(--color-text-secondary)]"
|
|
704
893
|
), children: item.label }),
|
|
705
|
-
item.badge && /* @__PURE__ */ (0,
|
|
894
|
+
item.badge && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "px-2 py-0.5 text-xs bg-[var(--color-primary)] text-white rounded-full", children: item.badge })
|
|
706
895
|
]
|
|
707
896
|
},
|
|
708
897
|
item.id
|
|
@@ -713,13 +902,13 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
713
902
|
}
|
|
714
903
|
)
|
|
715
904
|
] }),
|
|
716
|
-
mobileMenuOpen && /* @__PURE__ */ (0,
|
|
905
|
+
mobileMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
717
906
|
"div",
|
|
718
907
|
{
|
|
719
908
|
className: "fixed inset-0 bg-black bg-opacity-50 z-50 lg:hidden",
|
|
720
909
|
onClick: () => setMobileMenuOpen(false),
|
|
721
910
|
"aria-hidden": "true",
|
|
722
|
-
children: /* @__PURE__ */ (0,
|
|
911
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
723
912
|
"aside",
|
|
724
913
|
{
|
|
725
914
|
className: "w-80 h-full bg-[var(--color-sidebar-bg)]",
|
|
@@ -727,26 +916,26 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
727
916
|
role: "navigation",
|
|
728
917
|
"aria-label": "Navigation mobile",
|
|
729
918
|
children: [
|
|
730
|
-
/* @__PURE__ */ (0,
|
|
731
|
-
/* @__PURE__ */ (0,
|
|
732
|
-
/* @__PURE__ */ (0,
|
|
733
|
-
/* @__PURE__ */ (0,
|
|
734
|
-
/* @__PURE__ */ (0,
|
|
735
|
-
/* @__PURE__ */ (0,
|
|
919
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "h-16 flex items-center justify-between px-4 border-b border-[var(--color-sidebar-border)]", children: [
|
|
920
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
921
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "w-10 h-10 bg-[var(--color-primary)] rounded-lg flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-[var(--color-background)] font-bold text-xl", children: "W" }) }),
|
|
922
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
923
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { className: "text-white font-bold text-lg", children: "WiseBook" }),
|
|
924
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-gray-400 text-xs", children: "ERP Next-Gen" })
|
|
736
925
|
] })
|
|
737
926
|
] }),
|
|
738
|
-
/* @__PURE__ */ (0,
|
|
927
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
739
928
|
"button",
|
|
740
929
|
{
|
|
741
930
|
onClick: () => setMobileMenuOpen(false),
|
|
742
931
|
className: "text-[var(--color-sidebar-text-secondary)]",
|
|
743
932
|
"aria-label": "Fermer le menu",
|
|
744
|
-
children: /* @__PURE__ */ (0,
|
|
933
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.X, { className: "w-6 h-6" })
|
|
745
934
|
}
|
|
746
935
|
)
|
|
747
936
|
] }),
|
|
748
|
-
/* @__PURE__ */ (0,
|
|
749
|
-
/* @__PURE__ */ (0,
|
|
937
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("nav", { className: "py-4", role: "menubar", children: primaryMenuItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { children: [
|
|
938
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
750
939
|
"button",
|
|
751
940
|
{
|
|
752
941
|
onClick: () => {
|
|
@@ -765,19 +954,19 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
765
954
|
role: "menuitem",
|
|
766
955
|
"aria-current": isModuleActive(item.id) ? "page" : void 0,
|
|
767
956
|
children: [
|
|
768
|
-
/* @__PURE__ */ (0,
|
|
957
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn(
|
|
769
958
|
"transition-colors",
|
|
770
959
|
isModuleActive(item.id) ? "text-[var(--color-primary)]" : "text-[var(--color-sidebar-text-secondary)]"
|
|
771
960
|
), children: item.icon }),
|
|
772
|
-
/* @__PURE__ */ (0,
|
|
961
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn(
|
|
773
962
|
"flex-1 text-left text-sm font-medium",
|
|
774
963
|
isModuleActive(item.id) ? "text-[var(--color-sidebar-text)]" : "text-[var(--color-sidebar-text-secondary)]"
|
|
775
964
|
), children: item.label }),
|
|
776
|
-
item.badge && /* @__PURE__ */ (0,
|
|
965
|
+
item.badge && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "px-2 py-0.5 text-xs bg-[var(--color-primary)] text-[var(--color-background)] rounded-full", children: item.badge })
|
|
777
966
|
]
|
|
778
967
|
}
|
|
779
968
|
),
|
|
780
|
-
isModuleActive(item.id) && secondaryMenuItems[item.id] && /* @__PURE__ */ (0,
|
|
969
|
+
isModuleActive(item.id) && secondaryMenuItems[item.id] && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "bg-[var(--color-sidebar-submenu-bg)] py-2", children: secondaryMenuItems[item.id].map((subItem) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
781
970
|
"button",
|
|
782
971
|
{
|
|
783
972
|
onClick: () => {
|
|
@@ -793,7 +982,7 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
793
982
|
),
|
|
794
983
|
children: [
|
|
795
984
|
subItem.icon,
|
|
796
|
-
/* @__PURE__ */ (0,
|
|
985
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn(
|
|
797
986
|
isActive(subItem.path || "") ? "text-[var(--color-primary)]" : "text-[var(--color-sidebar-text-secondary)]"
|
|
798
987
|
), children: subItem.label })
|
|
799
988
|
]
|
|
@@ -806,31 +995,31 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
806
995
|
)
|
|
807
996
|
}
|
|
808
997
|
),
|
|
809
|
-
/* @__PURE__ */ (0,
|
|
810
|
-
/* @__PURE__ */ (0,
|
|
998
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex-1 flex flex-col overflow-hidden", children: [
|
|
999
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
811
1000
|
"header",
|
|
812
1001
|
{
|
|
813
1002
|
className: "h-14 bg-[var(--color-background)] border-b border-[var(--color-border)] flex items-center justify-between px-3 lg:px-4",
|
|
814
1003
|
role: "banner",
|
|
815
1004
|
children: [
|
|
816
|
-
/* @__PURE__ */ (0,
|
|
817
|
-
/* @__PURE__ */ (0,
|
|
1005
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center gap-4 flex-1", children: [
|
|
1006
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
818
1007
|
"button",
|
|
819
1008
|
{
|
|
820
1009
|
onClick: () => setMobileMenuOpen(true),
|
|
821
1010
|
className: "lg:hidden text-[var(--color-text-primary)]",
|
|
822
1011
|
"aria-label": "Ouvrir le menu mobile",
|
|
823
|
-
children: /* @__PURE__ */ (0,
|
|
1012
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.Menu, { className: "w-6 h-6" })
|
|
824
1013
|
}
|
|
825
1014
|
),
|
|
826
|
-
/* @__PURE__ */ (0,
|
|
1015
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
827
1016
|
"nav",
|
|
828
1017
|
{
|
|
829
1018
|
className: "hidden sm:flex items-center gap-2 text-sm",
|
|
830
1019
|
"aria-label": "Fil d'Ariane",
|
|
831
|
-
children: getBreadcrumbs().map((crumb, index) => /* @__PURE__ */ (0,
|
|
832
|
-
index > 0 && /* @__PURE__ */ (0,
|
|
833
|
-
/* @__PURE__ */ (0,
|
|
1020
|
+
children: getBreadcrumbs().map((crumb, index) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_react2.default.Fragment, { children: [
|
|
1021
|
+
index > 0 && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.ChevronRight, { className: "w-4 h-4 text-[var(--color-text-tertiary)]" }),
|
|
1022
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
834
1023
|
"button",
|
|
835
1024
|
{
|
|
836
1025
|
onClick: () => navigate(crumb.path),
|
|
@@ -844,9 +1033,9 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
844
1033
|
] }, crumb.path))
|
|
845
1034
|
}
|
|
846
1035
|
),
|
|
847
|
-
/* @__PURE__ */ (0,
|
|
848
|
-
/* @__PURE__ */ (0,
|
|
849
|
-
/* @__PURE__ */ (0,
|
|
1036
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "relative max-w-md flex-1 hidden lg:block", children: [
|
|
1037
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 text-[var(--color-text-tertiary)] w-5 h-5" }),
|
|
1038
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
850
1039
|
"input",
|
|
851
1040
|
{
|
|
852
1041
|
id: "global-search",
|
|
@@ -860,9 +1049,9 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
860
1049
|
)
|
|
861
1050
|
] })
|
|
862
1051
|
] }),
|
|
863
|
-
/* @__PURE__ */ (0,
|
|
864
|
-
/* @__PURE__ */ (0,
|
|
865
|
-
/* @__PURE__ */ (0,
|
|
1052
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center gap-3", children: [
|
|
1053
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "relative", children: [
|
|
1054
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
866
1055
|
"button",
|
|
867
1056
|
{
|
|
868
1057
|
onClick: () => setShowThemeMenu(!showThemeMenu),
|
|
@@ -870,18 +1059,18 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
870
1059
|
title: "Changer le th\xE8me",
|
|
871
1060
|
"aria-label": "S\xE9lecteur de th\xE8me",
|
|
872
1061
|
"aria-expanded": showThemeMenu,
|
|
873
|
-
children: /* @__PURE__ */ (0,
|
|
1062
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.Palette, { className: "w-5 h-5 text-[var(--color-text-secondary)]" })
|
|
874
1063
|
}
|
|
875
1064
|
),
|
|
876
|
-
showThemeMenu && /* @__PURE__ */ (0,
|
|
1065
|
+
showThemeMenu && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
877
1066
|
"div",
|
|
878
1067
|
{
|
|
879
1068
|
className: "absolute right-0 mt-2 w-64 bg-[var(--color-background)] rounded-lg shadow-xl border border-[var(--color-border)] z-50",
|
|
880
1069
|
role: "menu",
|
|
881
1070
|
"aria-label": "S\xE9lection du th\xE8me",
|
|
882
|
-
children: /* @__PURE__ */ (0,
|
|
883
|
-
/* @__PURE__ */ (0,
|
|
884
|
-
/* @__PURE__ */ (0,
|
|
1071
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "p-2", children: [
|
|
1072
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "px-3 py-2 text-xs font-semibold text-[var(--color-text-tertiary)] uppercase", children: "Th\xE8mes disponibles" }),
|
|
1073
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
885
1074
|
"button",
|
|
886
1075
|
{
|
|
887
1076
|
onClick: () => handleThemeChange("elegant"),
|
|
@@ -891,15 +1080,15 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
891
1080
|
),
|
|
892
1081
|
role: "menuitem",
|
|
893
1082
|
children: [
|
|
894
|
-
/* @__PURE__ */ (0,
|
|
895
|
-
/* @__PURE__ */ (0,
|
|
896
|
-
/* @__PURE__ */ (0,
|
|
897
|
-
/* @__PURE__ */ (0,
|
|
1083
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "w-10 h-10 rounded-lg bg-gradient-to-br from-[var(--color-primary)] to-[var(--color-accent)]" }),
|
|
1084
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "text-left", children: [
|
|
1085
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm font-medium", children: "\xC9l\xE9gance Sobre" }),
|
|
1086
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-xs text-[var(--color-text-tertiary)]", children: "Finance traditionnelle" })
|
|
898
1087
|
] })
|
|
899
1088
|
]
|
|
900
1089
|
}
|
|
901
1090
|
),
|
|
902
|
-
/* @__PURE__ */ (0,
|
|
1091
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
903
1092
|
"button",
|
|
904
1093
|
{
|
|
905
1094
|
onClick: () => handleThemeChange("fintech"),
|
|
@@ -909,15 +1098,15 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
909
1098
|
),
|
|
910
1099
|
role: "menuitem",
|
|
911
1100
|
children: [
|
|
912
|
-
/* @__PURE__ */ (0,
|
|
913
|
-
/* @__PURE__ */ (0,
|
|
914
|
-
/* @__PURE__ */ (0,
|
|
915
|
-
/* @__PURE__ */ (0,
|
|
1101
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "w-10 h-10 rounded-lg bg-gradient-to-br from-[var(--color-success)] to-[var(--color-text-primary)]" }),
|
|
1102
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "text-left", children: [
|
|
1103
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm font-medium", children: "Modern Fintech" }),
|
|
1104
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-xs text-[var(--color-text-tertiary)]", children: "Tableau de bord moderne" })
|
|
916
1105
|
] })
|
|
917
1106
|
]
|
|
918
1107
|
}
|
|
919
1108
|
),
|
|
920
|
-
/* @__PURE__ */ (0,
|
|
1109
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
921
1110
|
"button",
|
|
922
1111
|
{
|
|
923
1112
|
onClick: () => handleThemeChange("minimalist"),
|
|
@@ -927,10 +1116,10 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
927
1116
|
),
|
|
928
1117
|
role: "menuitem",
|
|
929
1118
|
children: [
|
|
930
|
-
/* @__PURE__ */ (0,
|
|
931
|
-
/* @__PURE__ */ (0,
|
|
932
|
-
/* @__PURE__ */ (0,
|
|
933
|
-
/* @__PURE__ */ (0,
|
|
1119
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "w-10 h-10 rounded-lg bg-gradient-to-br from-[var(--color-text-secondary)] to-[var(--color-accent)]" }),
|
|
1120
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "text-left", children: [
|
|
1121
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm font-medium", children: "Minimaliste Premium" }),
|
|
1122
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-xs text-[var(--color-text-tertiary)]", children: "\xC9l\xE9gance minimaliste" })
|
|
934
1123
|
] })
|
|
935
1124
|
]
|
|
936
1125
|
}
|
|
@@ -939,12 +1128,12 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
939
1128
|
}
|
|
940
1129
|
)
|
|
941
1130
|
] }),
|
|
942
|
-
/* @__PURE__ */ (0,
|
|
943
|
-
/* @__PURE__ */ (0,
|
|
944
|
-
/* @__PURE__ */ (0,
|
|
1131
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-center px-3 py-1.5 bg-[var(--color-surface)] rounded-lg border border-[var(--color-border)]", children: [
|
|
1132
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.DollarSign, { className: "w-4 h-4 text-[var(--color-primary)] mr-2" }),
|
|
1133
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-sm font-medium text-[var(--color-text-primary)]", children: "FCFA" })
|
|
945
1134
|
] }),
|
|
946
|
-
/* @__PURE__ */ (0,
|
|
947
|
-
/* @__PURE__ */ (0,
|
|
1135
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "relative", children: [
|
|
1136
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
948
1137
|
"button",
|
|
949
1138
|
{
|
|
950
1139
|
className: "relative p-2 hover:bg-[var(--color-surface-hover)] rounded-lg transition-colors",
|
|
@@ -952,20 +1141,20 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
952
1141
|
"aria-label": `Notifications ${notifications.filter((n) => !n.read).length > 0 ? `(${notifications.filter((n) => !n.read).length} non lues)` : ""}`,
|
|
953
1142
|
"aria-expanded": showNotifications,
|
|
954
1143
|
children: [
|
|
955
|
-
/* @__PURE__ */ (0,
|
|
956
|
-
notifications.filter((n) => !n.read).length > 0 && /* @__PURE__ */ (0,
|
|
1144
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.Bell, { className: "w-5 h-5 text-[var(--color-text-secondary)]" }),
|
|
1145
|
+
notifications.filter((n) => !n.read).length > 0 && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "absolute top-1 right-1 w-2 h-2 bg-[var(--color-error)] rounded-full" })
|
|
957
1146
|
]
|
|
958
1147
|
}
|
|
959
1148
|
),
|
|
960
|
-
showNotifications && /* @__PURE__ */ (0,
|
|
1149
|
+
showNotifications && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
961
1150
|
"div",
|
|
962
1151
|
{
|
|
963
1152
|
className: "absolute right-0 mt-2 w-80 bg-[var(--color-background)] rounded-lg shadow-xl border border-[var(--color-border)] z-50 max-h-96 overflow-y-auto",
|
|
964
1153
|
role: "region",
|
|
965
1154
|
"aria-label": "Centre de notifications",
|
|
966
1155
|
children: [
|
|
967
|
-
/* @__PURE__ */ (0,
|
|
968
|
-
/* @__PURE__ */ (0,
|
|
1156
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "p-4 border-b border-[var(--color-border)]", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { className: "font-semibold text-[var(--color-text-primary)]", children: "Notifications" }) }),
|
|
1157
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "divide-y divide-[var(--color-border)]", children: notifications.map((notif) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
969
1158
|
"div",
|
|
970
1159
|
{
|
|
971
1160
|
className: cn(
|
|
@@ -973,18 +1162,18 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
973
1162
|
!notif.read && "bg-[var(--color-primary-light)] bg-opacity-10"
|
|
974
1163
|
),
|
|
975
1164
|
onClick: () => markNotificationAsRead(notif.id),
|
|
976
|
-
children: /* @__PURE__ */ (0,
|
|
977
|
-
/* @__PURE__ */ (0,
|
|
1165
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex items-start gap-3", children: [
|
|
1166
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn(
|
|
978
1167
|
"w-2 h-2 rounded-full mt-2",
|
|
979
1168
|
notif.type === "error" && "bg-[var(--color-error)]",
|
|
980
1169
|
notif.type === "warning" && "bg-[var(--color-warning)]",
|
|
981
1170
|
notif.type === "success" && "bg-[var(--color-success)]",
|
|
982
1171
|
notif.type === "info" && "bg-[var(--color-info)]"
|
|
983
1172
|
) }),
|
|
984
|
-
/* @__PURE__ */ (0,
|
|
985
|
-
/* @__PURE__ */ (0,
|
|
986
|
-
/* @__PURE__ */ (0,
|
|
987
|
-
/* @__PURE__ */ (0,
|
|
1173
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex-1", children: [
|
|
1174
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-sm font-medium text-[var(--color-text-primary)]", children: notif.title }),
|
|
1175
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-xs text-[var(--color-text-secondary)] mt-1", children: notif.message }),
|
|
1176
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-xs text-[var(--color-text-tertiary)] mt-2", children: notif.timestamp.toLocaleTimeString() })
|
|
988
1177
|
] })
|
|
989
1178
|
] })
|
|
990
1179
|
},
|
|
@@ -994,36 +1183,36 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
994
1183
|
}
|
|
995
1184
|
)
|
|
996
1185
|
] }),
|
|
997
|
-
/* @__PURE__ */ (0,
|
|
998
|
-
/* @__PURE__ */ (0,
|
|
1186
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "relative", children: [
|
|
1187
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
999
1188
|
"button",
|
|
1000
1189
|
{
|
|
1001
1190
|
onClick: () => setShowUserMenu(!showUserMenu),
|
|
1002
1191
|
className: "flex items-center gap-2 p-2 hover:bg-[var(--color-surface-hover)] rounded-lg transition-colors",
|
|
1003
1192
|
"aria-label": "Menu utilisateur",
|
|
1004
1193
|
"aria-expanded": showUserMenu,
|
|
1005
|
-
children: /* @__PURE__ */ (0,
|
|
1194
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "w-8 h-8 bg-[var(--color-primary)] rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.User, { className: "w-4 h-4 text-[var(--color-background)]" }) })
|
|
1006
1195
|
}
|
|
1007
1196
|
),
|
|
1008
|
-
showUserMenu && /* @__PURE__ */ (0,
|
|
1197
|
+
showUserMenu && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1009
1198
|
"div",
|
|
1010
1199
|
{
|
|
1011
1200
|
className: "absolute right-0 mt-2 w-56 bg-[var(--color-background)] rounded-lg shadow-xl border border-[var(--color-border)] z-50",
|
|
1012
1201
|
role: "menu",
|
|
1013
1202
|
"aria-label": "Menu utilisateur",
|
|
1014
|
-
children: /* @__PURE__ */ (0,
|
|
1015
|
-
/* @__PURE__ */ (0,
|
|
1203
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "p-2", children: [
|
|
1204
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1016
1205
|
"button",
|
|
1017
1206
|
{
|
|
1018
1207
|
className: "w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
1019
1208
|
role: "menuitem",
|
|
1020
1209
|
children: [
|
|
1021
|
-
/* @__PURE__ */ (0,
|
|
1022
|
-
/* @__PURE__ */ (0,
|
|
1210
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.User, { className: "w-4 h-4" }),
|
|
1211
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-sm", children: "Mon profil" })
|
|
1023
1212
|
]
|
|
1024
1213
|
}
|
|
1025
1214
|
),
|
|
1026
|
-
/* @__PURE__ */ (0,
|
|
1215
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1027
1216
|
"button",
|
|
1028
1217
|
{
|
|
1029
1218
|
onClick: () => {
|
|
@@ -1033,31 +1222,31 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
1033
1222
|
className: "w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
1034
1223
|
role: "menuitem",
|
|
1035
1224
|
children: [
|
|
1036
|
-
/* @__PURE__ */ (0,
|
|
1037
|
-
/* @__PURE__ */ (0,
|
|
1225
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.Settings, { className: "w-4 h-4" }),
|
|
1226
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-sm", children: "Param\xE8tres" })
|
|
1038
1227
|
]
|
|
1039
1228
|
}
|
|
1040
1229
|
),
|
|
1041
|
-
/* @__PURE__ */ (0,
|
|
1230
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1042
1231
|
"button",
|
|
1043
1232
|
{
|
|
1044
1233
|
className: "w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
1045
1234
|
role: "menuitem",
|
|
1046
1235
|
children: [
|
|
1047
|
-
/* @__PURE__ */ (0,
|
|
1048
|
-
/* @__PURE__ */ (0,
|
|
1236
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.HelpCircle, { className: "w-4 h-4" }),
|
|
1237
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-sm", children: "Aide" })
|
|
1049
1238
|
]
|
|
1050
1239
|
}
|
|
1051
1240
|
),
|
|
1052
|
-
/* @__PURE__ */ (0,
|
|
1053
|
-
/* @__PURE__ */ (0,
|
|
1241
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("hr", { className: "my-2 border-[var(--color-border)]" }),
|
|
1242
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1054
1243
|
"button",
|
|
1055
1244
|
{
|
|
1056
1245
|
className: "w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-[var(--color-surface-hover)] text-[var(--color-error)] transition-colors",
|
|
1057
1246
|
role: "menuitem",
|
|
1058
1247
|
children: [
|
|
1059
|
-
/* @__PURE__ */ (0,
|
|
1060
|
-
/* @__PURE__ */ (0,
|
|
1248
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.LogOut, { className: "w-4 h-4" }),
|
|
1249
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "text-sm", children: "D\xE9connexion" })
|
|
1061
1250
|
]
|
|
1062
1251
|
}
|
|
1063
1252
|
)
|
|
@@ -1069,13 +1258,13 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
1069
1258
|
]
|
|
1070
1259
|
}
|
|
1071
1260
|
),
|
|
1072
|
-
/* @__PURE__ */ (0,
|
|
1261
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1073
1262
|
"main",
|
|
1074
1263
|
{
|
|
1075
1264
|
id: "main-content",
|
|
1076
1265
|
className: "flex-1 overflow-y-auto bg-[var(--color-background)]",
|
|
1077
1266
|
role: "main",
|
|
1078
|
-
children: /* @__PURE__ */ (0,
|
|
1267
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "p-3 lg:p-4", children })
|
|
1079
1268
|
}
|
|
1080
1269
|
)
|
|
1081
1270
|
] })
|
|
@@ -1088,7 +1277,7 @@ var import_react4 = require("react");
|
|
|
1088
1277
|
|
|
1089
1278
|
// src/contexts/ToastContext.tsx
|
|
1090
1279
|
var import_react3 = require("react");
|
|
1091
|
-
var
|
|
1280
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
1092
1281
|
var ToastContext = (0, import_react3.createContext)(void 0);
|
|
1093
1282
|
var useToast = () => {
|
|
1094
1283
|
const context = (0, import_react3.useContext)(ToastContext);
|
|
@@ -1140,12 +1329,12 @@ var ToastProvider = ({ children }) => {
|
|
|
1140
1329
|
warning,
|
|
1141
1330
|
info
|
|
1142
1331
|
};
|
|
1143
|
-
return /* @__PURE__ */ (0,
|
|
1332
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ToastContext.Provider, { value, children });
|
|
1144
1333
|
};
|
|
1145
1334
|
|
|
1146
1335
|
// src/components/ui/Toast.tsx
|
|
1147
1336
|
var import_lucide_react2 = require("lucide-react");
|
|
1148
|
-
var
|
|
1337
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
1149
1338
|
var ToastItem = ({ toast }) => {
|
|
1150
1339
|
const { removeToast } = useToast();
|
|
1151
1340
|
const [isVisible, setIsVisible] = (0, import_react4.useState)(false);
|
|
@@ -1163,13 +1352,13 @@ var ToastItem = ({ toast }) => {
|
|
|
1163
1352
|
const getIcon = () => {
|
|
1164
1353
|
switch (toast.type) {
|
|
1165
1354
|
case "success":
|
|
1166
|
-
return /* @__PURE__ */ (0,
|
|
1355
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.CheckCircle, { className: "w-5 h-5 text-green-600" });
|
|
1167
1356
|
case "error":
|
|
1168
|
-
return /* @__PURE__ */ (0,
|
|
1357
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.XCircle, { className: "w-5 h-5 text-red-600" });
|
|
1169
1358
|
case "warning":
|
|
1170
|
-
return /* @__PURE__ */ (0,
|
|
1359
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.AlertTriangle, { className: "w-5 h-5 text-yellow-600" });
|
|
1171
1360
|
case "info":
|
|
1172
|
-
return /* @__PURE__ */ (0,
|
|
1361
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.Info, { className: "w-5 h-5 text-blue-600" });
|
|
1173
1362
|
}
|
|
1174
1363
|
};
|
|
1175
1364
|
const getBackgroundColor = () => {
|
|
@@ -1184,7 +1373,7 @@ var ToastItem = ({ toast }) => {
|
|
|
1184
1373
|
return "bg-blue-50 border-blue-200";
|
|
1185
1374
|
}
|
|
1186
1375
|
};
|
|
1187
|
-
return /* @__PURE__ */ (0,
|
|
1376
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
1188
1377
|
"div",
|
|
1189
1378
|
{
|
|
1190
1379
|
className: `
|
|
@@ -1195,14 +1384,14 @@ var ToastItem = ({ toast }) => {
|
|
|
1195
1384
|
flex items-start space-x-3
|
|
1196
1385
|
`,
|
|
1197
1386
|
children: [
|
|
1198
|
-
/* @__PURE__ */ (0,
|
|
1199
|
-
/* @__PURE__ */ (0,
|
|
1200
|
-
/* @__PURE__ */ (0,
|
|
1387
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex-shrink-0", children: getIcon() }),
|
|
1388
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "text-sm text-gray-900 font-medium", children: toast.message }) }),
|
|
1389
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1201
1390
|
"button",
|
|
1202
1391
|
{
|
|
1203
1392
|
onClick: handleClose,
|
|
1204
1393
|
className: "flex-shrink-0 ml-4 text-gray-400 hover:text-gray-600 transition-colors",
|
|
1205
|
-
children: /* @__PURE__ */ (0,
|
|
1394
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.X, { className: "w-4 h-4" })
|
|
1206
1395
|
}
|
|
1207
1396
|
)
|
|
1208
1397
|
]
|
|
@@ -1211,7 +1400,7 @@ var ToastItem = ({ toast }) => {
|
|
|
1211
1400
|
};
|
|
1212
1401
|
var ToastContainer = () => {
|
|
1213
1402
|
const { toasts } = useToast();
|
|
1214
|
-
return /* @__PURE__ */ (0,
|
|
1403
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "fixed top-4 right-4 z-50 space-y-3", children: toasts.map((toast) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ToastItem, { toast }, toast.id)) });
|
|
1215
1404
|
};
|
|
1216
1405
|
var Toast_default = ToastContainer;
|
|
1217
1406
|
|
|
@@ -1265,8 +1454,15 @@ var AuthServices = {
|
|
|
1265
1454
|
};
|
|
1266
1455
|
|
|
1267
1456
|
// src/contexts/SessionContext.tsx
|
|
1268
|
-
var
|
|
1457
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
1269
1458
|
var SessionContext = (0, import_react5.createContext)(void 0);
|
|
1459
|
+
var useSession = () => {
|
|
1460
|
+
const context = (0, import_react5.useContext)(SessionContext);
|
|
1461
|
+
if (!context) {
|
|
1462
|
+
throw new Error("useSession must be used within a SessionProvider");
|
|
1463
|
+
}
|
|
1464
|
+
return context;
|
|
1465
|
+
};
|
|
1270
1466
|
var SessionProvider = ({ children }) => {
|
|
1271
1467
|
const [token, setToken] = (0, import_react5.useState)(localStorage.getItem("token"));
|
|
1272
1468
|
const [loggedUser, setLoggedUser] = (0, import_react5.useState)(null);
|
|
@@ -1298,7 +1494,7 @@ var SessionProvider = ({ children }) => {
|
|
|
1298
1494
|
setLoggedUser(null);
|
|
1299
1495
|
}
|
|
1300
1496
|
}, [token]);
|
|
1301
|
-
return /* @__PURE__ */ (0,
|
|
1497
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SessionContext.Provider, { value: {
|
|
1302
1498
|
isAuthenticated: !!token,
|
|
1303
1499
|
loggedUser,
|
|
1304
1500
|
token,
|
|
@@ -1310,7 +1506,7 @@ var SessionProvider = ({ children }) => {
|
|
|
1310
1506
|
// src/components/common/Pages.tsx
|
|
1311
1507
|
var import_lucide_react3 = require("lucide-react");
|
|
1312
1508
|
var import_react6 = require("react");
|
|
1313
|
-
var
|
|
1509
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
1314
1510
|
var Pages = ({
|
|
1315
1511
|
title = "",
|
|
1316
1512
|
description = "",
|
|
@@ -1320,17 +1516,17 @@ var Pages = ({
|
|
|
1320
1516
|
children
|
|
1321
1517
|
}) => {
|
|
1322
1518
|
const [sidebarOpen, setSidebarOpen] = (0, import_react6.useState)(false);
|
|
1323
|
-
return /* @__PURE__ */ (0,
|
|
1324
|
-
/* @__PURE__ */ (0,
|
|
1325
|
-
/* @__PURE__ */ (0,
|
|
1326
|
-
/* @__PURE__ */ (0,
|
|
1327
|
-
/* @__PURE__ */ (0,
|
|
1328
|
-
/* @__PURE__ */ (0,
|
|
1329
|
-
/* @__PURE__ */ (0,
|
|
1519
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex h-full bg-gray-50", children: [
|
|
1520
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex-1 flex flex-col", children: [
|
|
1521
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "bg-white border-b border-gray-200 p-6", children: [
|
|
1522
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
1523
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex items-center space-x-4", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { children: [
|
|
1524
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h1", { className: "text-2xl font-bold text-gray-900", children: title }),
|
|
1525
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-sm text-gray-600", children: description })
|
|
1330
1526
|
] }) }),
|
|
1331
|
-
/* @__PURE__ */ (0,
|
|
1527
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex items-center space-x-3", children: sideAction })
|
|
1332
1528
|
] }),
|
|
1333
|
-
tabs.length > 0 && /* @__PURE__ */ (0,
|
|
1529
|
+
tabs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex space-x-1 mt-4 overflow-x-auto", children: tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1334
1530
|
"button",
|
|
1335
1531
|
{
|
|
1336
1532
|
className: `px-4 py-2 text-sm rounded-lg transition-all whitespace-nowrap ${tab.id === "manual" ? "bg-[#6A8A82] text-white shadow-md" : "text-gray-600 hover:bg-gray-100"}`,
|
|
@@ -1339,43 +1535,43 @@ var Pages = ({
|
|
|
1339
1535
|
tab.id
|
|
1340
1536
|
)) })
|
|
1341
1537
|
] }),
|
|
1342
|
-
/* @__PURE__ */ (0,
|
|
1538
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex-1 p-6 space-y-6", children })
|
|
1343
1539
|
] }),
|
|
1344
|
-
sidebar && /* @__PURE__ */ (0,
|
|
1345
|
-
/* @__PURE__ */ (0,
|
|
1346
|
-
/* @__PURE__ */ (0,
|
|
1347
|
-
/* @__PURE__ */ (0,
|
|
1540
|
+
sidebar && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: `${sidebarOpen ? "w-80" : "w-16"} bg-[var(--color-surface)] border-r border-[var(--color-border)] transition-all duration-300 flex flex-col`, children: [
|
|
1541
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "p-4 ", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center justify-between", children: [
|
|
1542
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h2", { className: `font-semibold text-[var(--color-text-primary)] ${!sidebarOpen && "hidden"}`, children: "Classes SYSCOHADA" }),
|
|
1543
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1348
1544
|
"button",
|
|
1349
1545
|
{
|
|
1350
1546
|
onClick: () => setSidebarOpen(!sidebarOpen),
|
|
1351
1547
|
className: "p-2 hover:bg-[var(--color-surface-hover)] rounded-lg transition-colors",
|
|
1352
1548
|
"aria-label": sidebarOpen ? "R\xE9duire" : "Ouvrir",
|
|
1353
|
-
children: sidebarOpen ? /* @__PURE__ */ (0,
|
|
1549
|
+
children: sidebarOpen ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.ChevronLeft, { className: "w-5 h-5" }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.Menu, { className: "w-5 h-5" })
|
|
1354
1550
|
}
|
|
1355
1551
|
)
|
|
1356
1552
|
] }) }),
|
|
1357
|
-
/* @__PURE__ */ (0,
|
|
1553
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex-1 overflow-y-auto py-2", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1358
1554
|
"button",
|
|
1359
1555
|
{
|
|
1360
1556
|
onClick: () => {
|
|
1361
1557
|
},
|
|
1362
1558
|
className: `w-full flex items-center gap-3 px-4 py-3 transition-all relative group hover:bg-[var(--color-surface-hover)]`,
|
|
1363
|
-
children: /* @__PURE__ */ (0,
|
|
1559
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1364
1560
|
"div",
|
|
1365
1561
|
{
|
|
1366
1562
|
className: `flex-shrink-0 w-10 h-10 rounded-lg flex items-center justify-center transition-colors bg-[var(--color-background)]`,
|
|
1367
|
-
children: /* @__PURE__ */ (0,
|
|
1563
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "font-bold text-lg", children: 1 })
|
|
1368
1564
|
}
|
|
1369
1565
|
)
|
|
1370
1566
|
}
|
|
1371
1567
|
) }),
|
|
1372
|
-
sidebarOpen && /* @__PURE__ */ (0,
|
|
1373
|
-
/* @__PURE__ */ (0,
|
|
1374
|
-
/* @__PURE__ */ (0,
|
|
1568
|
+
sidebarOpen && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "p-4 border-t border-[var(--color-border)]", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "space-y-2", children: [
|
|
1569
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { className: "w-full px-3 py-2 bg-[var(--color-background)] rounded-lg text-sm text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] transition-colors flex items-center gap-2", children: [
|
|
1570
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.Download, { className: "w-4 h-4" }),
|
|
1375
1571
|
"Exporter le plan"
|
|
1376
1572
|
] }),
|
|
1377
|
-
/* @__PURE__ */ (0,
|
|
1378
|
-
/* @__PURE__ */ (0,
|
|
1573
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { className: "w-full px-3 py-2 bg-[var(--color-background)] rounded-lg text-sm text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-hover)] transition-colors flex items-center gap-2", children: [
|
|
1574
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_lucide_react3.Settings, { className: "w-4 h-4" }),
|
|
1379
1575
|
"Configuration"
|
|
1380
1576
|
] })
|
|
1381
1577
|
] }) })
|
|
@@ -1385,12 +1581,21 @@ var Pages = ({
|
|
|
1385
1581
|
var Pages_default = Pages;
|
|
1386
1582
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1387
1583
|
0 && (module.exports = {
|
|
1584
|
+
DateInput,
|
|
1585
|
+
FileInput,
|
|
1586
|
+
InputField,
|
|
1587
|
+
Modal,
|
|
1588
|
+
NumberInput,
|
|
1388
1589
|
Pages,
|
|
1389
1590
|
PrimaryButton,
|
|
1390
1591
|
RewiseLayout,
|
|
1391
1592
|
SecondaryButton,
|
|
1593
|
+
SelectInput,
|
|
1392
1594
|
SessionProvider,
|
|
1595
|
+
TextInput,
|
|
1393
1596
|
ThemeProvider,
|
|
1394
1597
|
ToastContainer,
|
|
1395
|
-
ToastProvider
|
|
1598
|
+
ToastProvider,
|
|
1599
|
+
useSession,
|
|
1600
|
+
useToast
|
|
1396
1601
|
});
|