ptechcore_ui 1.0.4 → 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 +362 -168
- package/dist/index.d.cts +58 -1
- package/dist/index.d.ts +58 -1
- package/dist/index.js +352 -165
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -29,11 +29,18 @@ 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
46
|
ToastProvider: () => ToastProvider,
|
|
@@ -75,9 +82,189 @@ var SecondaryButton = ({
|
|
|
75
82
|
);
|
|
76
83
|
var Buttons_default = PrimaryButton;
|
|
77
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
|
+
|
|
78
265
|
// src/components/layout/ModernDoubleSidebarLayout.tsx
|
|
79
266
|
var import_react2 = __toESM(require("react"), 1);
|
|
80
|
-
var
|
|
267
|
+
var import_react_router_dom2 = require("react-router-dom");
|
|
81
268
|
var import_lucide_react = require("lucide-react");
|
|
82
269
|
|
|
83
270
|
// src/utils/utils.ts
|
|
@@ -420,7 +607,7 @@ var getThemeCSSVariables = (theme) => {
|
|
|
420
607
|
};
|
|
421
608
|
|
|
422
609
|
// src/contexts/ThemeContext.tsx
|
|
423
|
-
var
|
|
610
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
424
611
|
var ThemeContext = (0, import_react.createContext)(void 0);
|
|
425
612
|
var useTheme = () => {
|
|
426
613
|
const context = (0, import_react.useContext)(ThemeContext);
|
|
@@ -451,15 +638,15 @@ var ThemeProvider = ({ children }) => {
|
|
|
451
638
|
setThemeState(themes[type]);
|
|
452
639
|
}
|
|
453
640
|
};
|
|
454
|
-
return /* @__PURE__ */ (0,
|
|
641
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ThemeContext.Provider, { value: { theme, themeType, setTheme }, children });
|
|
455
642
|
};
|
|
456
643
|
var ThemeContext_default = ThemeProvider;
|
|
457
644
|
|
|
458
645
|
// src/components/layout/ModernDoubleSidebarLayout.tsx
|
|
459
|
-
var
|
|
646
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
460
647
|
var RewiseLayout = ({ children, module_name = "Rewise", module_description = "Description du module", primaryMenuItems, secondaryMenuItems }) => {
|
|
461
|
-
const location = (0,
|
|
462
|
-
const navigate = (0,
|
|
648
|
+
const location = (0, import_react_router_dom2.useLocation)();
|
|
649
|
+
const navigate = (0, import_react_router_dom2.useNavigate)();
|
|
463
650
|
const { theme, themeType, setTheme } = useTheme();
|
|
464
651
|
const [primaryCollapsed, setPrimaryCollapsed] = (0, import_react2.useState)(false);
|
|
465
652
|
const [secondaryCollapsed, setSecondaryCollapsed] = (0, import_react2.useState)(false);
|
|
@@ -542,8 +729,8 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
542
729
|
(prev) => prev.map((n) => n.id === id ? { ...n, read: true } : n)
|
|
543
730
|
);
|
|
544
731
|
};
|
|
545
|
-
return /* @__PURE__ */ (0,
|
|
546
|
-
/* @__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)(
|
|
547
734
|
"a",
|
|
548
735
|
{
|
|
549
736
|
href: "#main-content",
|
|
@@ -551,7 +738,7 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
551
738
|
children: "Aller au contenu principal"
|
|
552
739
|
}
|
|
553
740
|
),
|
|
554
|
-
/* @__PURE__ */ (0,
|
|
741
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
555
742
|
"aside",
|
|
556
743
|
{
|
|
557
744
|
className: cn(
|
|
@@ -561,38 +748,38 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
561
748
|
role: "navigation",
|
|
562
749
|
"aria-label": "Navigation principale",
|
|
563
750
|
children: [
|
|
564
|
-
/* @__PURE__ */ (0,
|
|
565
|
-
/* @__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(
|
|
566
753
|
"flex items-center gap-3",
|
|
567
754
|
primaryCollapsed && "justify-center"
|
|
568
755
|
), children: [
|
|
569
|
-
/* @__PURE__ */ (0,
|
|
570
|
-
!primaryCollapsed && /* @__PURE__ */ (0,
|
|
571
|
-
/* @__PURE__ */ (0,
|
|
572
|
-
/* @__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 })
|
|
573
760
|
] })
|
|
574
761
|
] }),
|
|
575
|
-
/* @__PURE__ */ (0,
|
|
762
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
576
763
|
"button",
|
|
577
764
|
{
|
|
578
765
|
onClick: () => setPrimaryCollapsed(!primaryCollapsed),
|
|
579
766
|
className: "text-[var(--color-sidebar-text-secondary)] hover:text-[var(--color-sidebar-text)] transition-colors",
|
|
580
767
|
"aria-label": primaryCollapsed ? "D\xE9velopper le menu" : "R\xE9duire le menu",
|
|
581
768
|
"aria-expanded": !primaryCollapsed,
|
|
582
|
-
children: /* @__PURE__ */ (0,
|
|
769
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.ChevronLeft, { className: cn(
|
|
583
770
|
"w-5 h-5 transition-transform",
|
|
584
771
|
primaryCollapsed && "rotate-180"
|
|
585
772
|
) })
|
|
586
773
|
}
|
|
587
774
|
)
|
|
588
775
|
] }),
|
|
589
|
-
/* @__PURE__ */ (0,
|
|
776
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
590
777
|
"nav",
|
|
591
778
|
{
|
|
592
779
|
className: "flex-1 py-4 overflow-y-auto",
|
|
593
780
|
role: "menubar",
|
|
594
781
|
"aria-label": "Modules principaux",
|
|
595
|
-
children: primaryMenuItems.map((item) => /* @__PURE__ */ (0,
|
|
782
|
+
children: primaryMenuItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
596
783
|
"button",
|
|
597
784
|
{
|
|
598
785
|
onClick: () => {
|
|
@@ -612,48 +799,48 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
612
799
|
"aria-label": item.ariaLabel || item.label,
|
|
613
800
|
"aria-current": isModuleActive(item.id) ? "page" : void 0,
|
|
614
801
|
children: [
|
|
615
|
-
/* @__PURE__ */ (0,
|
|
802
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn(
|
|
616
803
|
"transition-colors",
|
|
617
804
|
isModuleActive(item.id) ? "text-[var(--color-primary)]" : "text-[var(--color-sidebar-text-secondary)] group-hover:text-[var(--color-sidebar-text)]"
|
|
618
805
|
), children: item.icon }),
|
|
619
|
-
!primaryCollapsed && /* @__PURE__ */ (0,
|
|
620
|
-
/* @__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(
|
|
621
808
|
"flex-1 text-left text-sm font-medium transition-colors",
|
|
622
809
|
isModuleActive(item.id) ? "text-[var(--color-sidebar-text)]" : "text-[var(--color-sidebar-text-secondary)] group-hover:text-[var(--color-sidebar-text)]"
|
|
623
810
|
), children: item.label }),
|
|
624
|
-
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 })
|
|
625
812
|
] }),
|
|
626
|
-
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 })
|
|
627
814
|
]
|
|
628
815
|
},
|
|
629
816
|
item.id
|
|
630
817
|
))
|
|
631
818
|
}
|
|
632
819
|
),
|
|
633
|
-
/* @__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(
|
|
634
821
|
"flex items-center gap-3",
|
|
635
822
|
primaryCollapsed && "justify-center"
|
|
636
823
|
), children: [
|
|
637
|
-
/* @__PURE__ */ (0,
|
|
638
|
-
!primaryCollapsed && /* @__PURE__ */ (0,
|
|
639
|
-
/* @__PURE__ */ (0,
|
|
640
|
-
/* @__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" })
|
|
641
828
|
] })
|
|
642
829
|
] }) })
|
|
643
830
|
]
|
|
644
831
|
}
|
|
645
832
|
),
|
|
646
|
-
secondaryMenuItems[selectedModule] && /* @__PURE__ */ (0,
|
|
647
|
-
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)(
|
|
648
835
|
"button",
|
|
649
836
|
{
|
|
650
837
|
onClick: () => setSecondaryCollapsed(false),
|
|
651
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",
|
|
652
839
|
"aria-label": "Ouvrir le sous-menu",
|
|
653
|
-
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)]" })
|
|
654
841
|
}
|
|
655
842
|
),
|
|
656
|
-
/* @__PURE__ */ (0,
|
|
843
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
657
844
|
"aside",
|
|
658
845
|
{
|
|
659
846
|
className: cn(
|
|
@@ -663,28 +850,28 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
663
850
|
role: "navigation",
|
|
664
851
|
"aria-label": "Navigation secondaire",
|
|
665
852
|
children: [
|
|
666
|
-
/* @__PURE__ */ (0,
|
|
667
|
-
/* @__PURE__ */ (0,
|
|
668
|
-
/* @__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)(
|
|
669
856
|
"button",
|
|
670
857
|
{
|
|
671
858
|
onClick: () => setSecondaryCollapsed(!secondaryCollapsed),
|
|
672
859
|
className: "text-[var(--color-text-tertiary)] hover:text-[var(--color-text-primary)] flex-shrink-0",
|
|
673
860
|
"aria-label": secondaryCollapsed ? "D\xE9velopper le sous-menu" : "R\xE9duire le sous-menu",
|
|
674
|
-
children: /* @__PURE__ */ (0,
|
|
861
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.ChevronLeft, { className: cn(
|
|
675
862
|
"w-4 h-4 transition-transform",
|
|
676
863
|
secondaryCollapsed && "rotate-180"
|
|
677
864
|
) })
|
|
678
865
|
}
|
|
679
866
|
)
|
|
680
867
|
] }),
|
|
681
|
-
/* @__PURE__ */ (0,
|
|
868
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
682
869
|
"nav",
|
|
683
870
|
{
|
|
684
871
|
className: "flex-1 py-4 overflow-y-auto",
|
|
685
872
|
role: "menu",
|
|
686
873
|
"aria-label": "Sous-navigation",
|
|
687
|
-
children: secondaryMenuItems[selectedModule]?.map((item) => /* @__PURE__ */ (0,
|
|
874
|
+
children: secondaryMenuItems[selectedModule]?.map((item) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
688
875
|
"button",
|
|
689
876
|
{
|
|
690
877
|
onClick: () => item.path && navigate(item.path),
|
|
@@ -696,15 +883,15 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
696
883
|
role: "menuitem",
|
|
697
884
|
"aria-current": isActive(item.path || "") ? "page" : void 0,
|
|
698
885
|
children: [
|
|
699
|
-
item.icon && /* @__PURE__ */ (0,
|
|
886
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn(
|
|
700
887
|
"transition-colors",
|
|
701
888
|
isActive(item.path || "") ? "text-[var(--color-primary)]" : "text-[var(--color-text-tertiary)]"
|
|
702
889
|
), children: item.icon }),
|
|
703
|
-
/* @__PURE__ */ (0,
|
|
890
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn(
|
|
704
891
|
"flex-1 text-left text-sm",
|
|
705
892
|
isActive(item.path || "") ? "text-[var(--color-primary)] font-medium" : "text-[var(--color-text-secondary)]"
|
|
706
893
|
), children: item.label }),
|
|
707
|
-
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 })
|
|
708
895
|
]
|
|
709
896
|
},
|
|
710
897
|
item.id
|
|
@@ -715,13 +902,13 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
715
902
|
}
|
|
716
903
|
)
|
|
717
904
|
] }),
|
|
718
|
-
mobileMenuOpen && /* @__PURE__ */ (0,
|
|
905
|
+
mobileMenuOpen && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
719
906
|
"div",
|
|
720
907
|
{
|
|
721
908
|
className: "fixed inset-0 bg-black bg-opacity-50 z-50 lg:hidden",
|
|
722
909
|
onClick: () => setMobileMenuOpen(false),
|
|
723
910
|
"aria-hidden": "true",
|
|
724
|
-
children: /* @__PURE__ */ (0,
|
|
911
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
725
912
|
"aside",
|
|
726
913
|
{
|
|
727
914
|
className: "w-80 h-full bg-[var(--color-sidebar-bg)]",
|
|
@@ -729,26 +916,26 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
729
916
|
role: "navigation",
|
|
730
917
|
"aria-label": "Navigation mobile",
|
|
731
918
|
children: [
|
|
732
|
-
/* @__PURE__ */ (0,
|
|
733
|
-
/* @__PURE__ */ (0,
|
|
734
|
-
/* @__PURE__ */ (0,
|
|
735
|
-
/* @__PURE__ */ (0,
|
|
736
|
-
/* @__PURE__ */ (0,
|
|
737
|
-
/* @__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" })
|
|
738
925
|
] })
|
|
739
926
|
] }),
|
|
740
|
-
/* @__PURE__ */ (0,
|
|
927
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
741
928
|
"button",
|
|
742
929
|
{
|
|
743
930
|
onClick: () => setMobileMenuOpen(false),
|
|
744
931
|
className: "text-[var(--color-sidebar-text-secondary)]",
|
|
745
932
|
"aria-label": "Fermer le menu",
|
|
746
|
-
children: /* @__PURE__ */ (0,
|
|
933
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.X, { className: "w-6 h-6" })
|
|
747
934
|
}
|
|
748
935
|
)
|
|
749
936
|
] }),
|
|
750
|
-
/* @__PURE__ */ (0,
|
|
751
|
-
/* @__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)(
|
|
752
939
|
"button",
|
|
753
940
|
{
|
|
754
941
|
onClick: () => {
|
|
@@ -767,19 +954,19 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
767
954
|
role: "menuitem",
|
|
768
955
|
"aria-current": isModuleActive(item.id) ? "page" : void 0,
|
|
769
956
|
children: [
|
|
770
|
-
/* @__PURE__ */ (0,
|
|
957
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: cn(
|
|
771
958
|
"transition-colors",
|
|
772
959
|
isModuleActive(item.id) ? "text-[var(--color-primary)]" : "text-[var(--color-sidebar-text-secondary)]"
|
|
773
960
|
), children: item.icon }),
|
|
774
|
-
/* @__PURE__ */ (0,
|
|
961
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn(
|
|
775
962
|
"flex-1 text-left text-sm font-medium",
|
|
776
963
|
isModuleActive(item.id) ? "text-[var(--color-sidebar-text)]" : "text-[var(--color-sidebar-text-secondary)]"
|
|
777
964
|
), children: item.label }),
|
|
778
|
-
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 })
|
|
779
966
|
]
|
|
780
967
|
}
|
|
781
968
|
),
|
|
782
|
-
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)(
|
|
783
970
|
"button",
|
|
784
971
|
{
|
|
785
972
|
onClick: () => {
|
|
@@ -795,7 +982,7 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
795
982
|
),
|
|
796
983
|
children: [
|
|
797
984
|
subItem.icon,
|
|
798
|
-
/* @__PURE__ */ (0,
|
|
985
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: cn(
|
|
799
986
|
isActive(subItem.path || "") ? "text-[var(--color-primary)]" : "text-[var(--color-sidebar-text-secondary)]"
|
|
800
987
|
), children: subItem.label })
|
|
801
988
|
]
|
|
@@ -808,31 +995,31 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
808
995
|
)
|
|
809
996
|
}
|
|
810
997
|
),
|
|
811
|
-
/* @__PURE__ */ (0,
|
|
812
|
-
/* @__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)(
|
|
813
1000
|
"header",
|
|
814
1001
|
{
|
|
815
1002
|
className: "h-14 bg-[var(--color-background)] border-b border-[var(--color-border)] flex items-center justify-between px-3 lg:px-4",
|
|
816
1003
|
role: "banner",
|
|
817
1004
|
children: [
|
|
818
|
-
/* @__PURE__ */ (0,
|
|
819
|
-
/* @__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)(
|
|
820
1007
|
"button",
|
|
821
1008
|
{
|
|
822
1009
|
onClick: () => setMobileMenuOpen(true),
|
|
823
1010
|
className: "lg:hidden text-[var(--color-text-primary)]",
|
|
824
1011
|
"aria-label": "Ouvrir le menu mobile",
|
|
825
|
-
children: /* @__PURE__ */ (0,
|
|
1012
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_lucide_react.Menu, { className: "w-6 h-6" })
|
|
826
1013
|
}
|
|
827
1014
|
),
|
|
828
|
-
/* @__PURE__ */ (0,
|
|
1015
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
829
1016
|
"nav",
|
|
830
1017
|
{
|
|
831
1018
|
className: "hidden sm:flex items-center gap-2 text-sm",
|
|
832
1019
|
"aria-label": "Fil d'Ariane",
|
|
833
|
-
children: getBreadcrumbs().map((crumb, index) => /* @__PURE__ */ (0,
|
|
834
|
-
index > 0 && /* @__PURE__ */ (0,
|
|
835
|
-
/* @__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)(
|
|
836
1023
|
"button",
|
|
837
1024
|
{
|
|
838
1025
|
onClick: () => navigate(crumb.path),
|
|
@@ -846,9 +1033,9 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
846
1033
|
] }, crumb.path))
|
|
847
1034
|
}
|
|
848
1035
|
),
|
|
849
|
-
/* @__PURE__ */ (0,
|
|
850
|
-
/* @__PURE__ */ (0,
|
|
851
|
-
/* @__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)(
|
|
852
1039
|
"input",
|
|
853
1040
|
{
|
|
854
1041
|
id: "global-search",
|
|
@@ -862,9 +1049,9 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
862
1049
|
)
|
|
863
1050
|
] })
|
|
864
1051
|
] }),
|
|
865
|
-
/* @__PURE__ */ (0,
|
|
866
|
-
/* @__PURE__ */ (0,
|
|
867
|
-
/* @__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)(
|
|
868
1055
|
"button",
|
|
869
1056
|
{
|
|
870
1057
|
onClick: () => setShowThemeMenu(!showThemeMenu),
|
|
@@ -872,18 +1059,18 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
872
1059
|
title: "Changer le th\xE8me",
|
|
873
1060
|
"aria-label": "S\xE9lecteur de th\xE8me",
|
|
874
1061
|
"aria-expanded": showThemeMenu,
|
|
875
|
-
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)]" })
|
|
876
1063
|
}
|
|
877
1064
|
),
|
|
878
|
-
showThemeMenu && /* @__PURE__ */ (0,
|
|
1065
|
+
showThemeMenu && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
879
1066
|
"div",
|
|
880
1067
|
{
|
|
881
1068
|
className: "absolute right-0 mt-2 w-64 bg-[var(--color-background)] rounded-lg shadow-xl border border-[var(--color-border)] z-50",
|
|
882
1069
|
role: "menu",
|
|
883
1070
|
"aria-label": "S\xE9lection du th\xE8me",
|
|
884
|
-
children: /* @__PURE__ */ (0,
|
|
885
|
-
/* @__PURE__ */ (0,
|
|
886
|
-
/* @__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)(
|
|
887
1074
|
"button",
|
|
888
1075
|
{
|
|
889
1076
|
onClick: () => handleThemeChange("elegant"),
|
|
@@ -893,15 +1080,15 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
893
1080
|
),
|
|
894
1081
|
role: "menuitem",
|
|
895
1082
|
children: [
|
|
896
|
-
/* @__PURE__ */ (0,
|
|
897
|
-
/* @__PURE__ */ (0,
|
|
898
|
-
/* @__PURE__ */ (0,
|
|
899
|
-
/* @__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" })
|
|
900
1087
|
] })
|
|
901
1088
|
]
|
|
902
1089
|
}
|
|
903
1090
|
),
|
|
904
|
-
/* @__PURE__ */ (0,
|
|
1091
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
905
1092
|
"button",
|
|
906
1093
|
{
|
|
907
1094
|
onClick: () => handleThemeChange("fintech"),
|
|
@@ -911,15 +1098,15 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
911
1098
|
),
|
|
912
1099
|
role: "menuitem",
|
|
913
1100
|
children: [
|
|
914
|
-
/* @__PURE__ */ (0,
|
|
915
|
-
/* @__PURE__ */ (0,
|
|
916
|
-
/* @__PURE__ */ (0,
|
|
917
|
-
/* @__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" })
|
|
918
1105
|
] })
|
|
919
1106
|
]
|
|
920
1107
|
}
|
|
921
1108
|
),
|
|
922
|
-
/* @__PURE__ */ (0,
|
|
1109
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
923
1110
|
"button",
|
|
924
1111
|
{
|
|
925
1112
|
onClick: () => handleThemeChange("minimalist"),
|
|
@@ -929,10 +1116,10 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
929
1116
|
),
|
|
930
1117
|
role: "menuitem",
|
|
931
1118
|
children: [
|
|
932
|
-
/* @__PURE__ */ (0,
|
|
933
|
-
/* @__PURE__ */ (0,
|
|
934
|
-
/* @__PURE__ */ (0,
|
|
935
|
-
/* @__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" })
|
|
936
1123
|
] })
|
|
937
1124
|
]
|
|
938
1125
|
}
|
|
@@ -941,12 +1128,12 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
941
1128
|
}
|
|
942
1129
|
)
|
|
943
1130
|
] }),
|
|
944
|
-
/* @__PURE__ */ (0,
|
|
945
|
-
/* @__PURE__ */ (0,
|
|
946
|
-
/* @__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" })
|
|
947
1134
|
] }),
|
|
948
|
-
/* @__PURE__ */ (0,
|
|
949
|
-
/* @__PURE__ */ (0,
|
|
1135
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "relative", children: [
|
|
1136
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
950
1137
|
"button",
|
|
951
1138
|
{
|
|
952
1139
|
className: "relative p-2 hover:bg-[var(--color-surface-hover)] rounded-lg transition-colors",
|
|
@@ -954,20 +1141,20 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
954
1141
|
"aria-label": `Notifications ${notifications.filter((n) => !n.read).length > 0 ? `(${notifications.filter((n) => !n.read).length} non lues)` : ""}`,
|
|
955
1142
|
"aria-expanded": showNotifications,
|
|
956
1143
|
children: [
|
|
957
|
-
/* @__PURE__ */ (0,
|
|
958
|
-
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" })
|
|
959
1146
|
]
|
|
960
1147
|
}
|
|
961
1148
|
),
|
|
962
|
-
showNotifications && /* @__PURE__ */ (0,
|
|
1149
|
+
showNotifications && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
963
1150
|
"div",
|
|
964
1151
|
{
|
|
965
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",
|
|
966
1153
|
role: "region",
|
|
967
1154
|
"aria-label": "Centre de notifications",
|
|
968
1155
|
children: [
|
|
969
|
-
/* @__PURE__ */ (0,
|
|
970
|
-
/* @__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)(
|
|
971
1158
|
"div",
|
|
972
1159
|
{
|
|
973
1160
|
className: cn(
|
|
@@ -975,18 +1162,18 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
975
1162
|
!notif.read && "bg-[var(--color-primary-light)] bg-opacity-10"
|
|
976
1163
|
),
|
|
977
1164
|
onClick: () => markNotificationAsRead(notif.id),
|
|
978
|
-
children: /* @__PURE__ */ (0,
|
|
979
|
-
/* @__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(
|
|
980
1167
|
"w-2 h-2 rounded-full mt-2",
|
|
981
1168
|
notif.type === "error" && "bg-[var(--color-error)]",
|
|
982
1169
|
notif.type === "warning" && "bg-[var(--color-warning)]",
|
|
983
1170
|
notif.type === "success" && "bg-[var(--color-success)]",
|
|
984
1171
|
notif.type === "info" && "bg-[var(--color-info)]"
|
|
985
1172
|
) }),
|
|
986
|
-
/* @__PURE__ */ (0,
|
|
987
|
-
/* @__PURE__ */ (0,
|
|
988
|
-
/* @__PURE__ */ (0,
|
|
989
|
-
/* @__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() })
|
|
990
1177
|
] })
|
|
991
1178
|
] })
|
|
992
1179
|
},
|
|
@@ -996,36 +1183,36 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
996
1183
|
}
|
|
997
1184
|
)
|
|
998
1185
|
] }),
|
|
999
|
-
/* @__PURE__ */ (0,
|
|
1000
|
-
/* @__PURE__ */ (0,
|
|
1186
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "relative", children: [
|
|
1187
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1001
1188
|
"button",
|
|
1002
1189
|
{
|
|
1003
1190
|
onClick: () => setShowUserMenu(!showUserMenu),
|
|
1004
1191
|
className: "flex items-center gap-2 p-2 hover:bg-[var(--color-surface-hover)] rounded-lg transition-colors",
|
|
1005
1192
|
"aria-label": "Menu utilisateur",
|
|
1006
1193
|
"aria-expanded": showUserMenu,
|
|
1007
|
-
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)]" }) })
|
|
1008
1195
|
}
|
|
1009
1196
|
),
|
|
1010
|
-
showUserMenu && /* @__PURE__ */ (0,
|
|
1197
|
+
showUserMenu && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1011
1198
|
"div",
|
|
1012
1199
|
{
|
|
1013
1200
|
className: "absolute right-0 mt-2 w-56 bg-[var(--color-background)] rounded-lg shadow-xl border border-[var(--color-border)] z-50",
|
|
1014
1201
|
role: "menu",
|
|
1015
1202
|
"aria-label": "Menu utilisateur",
|
|
1016
|
-
children: /* @__PURE__ */ (0,
|
|
1017
|
-
/* @__PURE__ */ (0,
|
|
1203
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "p-2", children: [
|
|
1204
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1018
1205
|
"button",
|
|
1019
1206
|
{
|
|
1020
1207
|
className: "w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
1021
1208
|
role: "menuitem",
|
|
1022
1209
|
children: [
|
|
1023
|
-
/* @__PURE__ */ (0,
|
|
1024
|
-
/* @__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" })
|
|
1025
1212
|
]
|
|
1026
1213
|
}
|
|
1027
1214
|
),
|
|
1028
|
-
/* @__PURE__ */ (0,
|
|
1215
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1029
1216
|
"button",
|
|
1030
1217
|
{
|
|
1031
1218
|
onClick: () => {
|
|
@@ -1035,31 +1222,31 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
1035
1222
|
className: "w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
1036
1223
|
role: "menuitem",
|
|
1037
1224
|
children: [
|
|
1038
|
-
/* @__PURE__ */ (0,
|
|
1039
|
-
/* @__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" })
|
|
1040
1227
|
]
|
|
1041
1228
|
}
|
|
1042
1229
|
),
|
|
1043
|
-
/* @__PURE__ */ (0,
|
|
1230
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1044
1231
|
"button",
|
|
1045
1232
|
{
|
|
1046
1233
|
className: "w-full flex items-center gap-3 px-3 py-2 rounded-lg hover:bg-[var(--color-surface-hover)] transition-colors",
|
|
1047
1234
|
role: "menuitem",
|
|
1048
1235
|
children: [
|
|
1049
|
-
/* @__PURE__ */ (0,
|
|
1050
|
-
/* @__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" })
|
|
1051
1238
|
]
|
|
1052
1239
|
}
|
|
1053
1240
|
),
|
|
1054
|
-
/* @__PURE__ */ (0,
|
|
1055
|
-
/* @__PURE__ */ (0,
|
|
1241
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("hr", { className: "my-2 border-[var(--color-border)]" }),
|
|
1242
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
1056
1243
|
"button",
|
|
1057
1244
|
{
|
|
1058
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",
|
|
1059
1246
|
role: "menuitem",
|
|
1060
1247
|
children: [
|
|
1061
|
-
/* @__PURE__ */ (0,
|
|
1062
|
-
/* @__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" })
|
|
1063
1250
|
]
|
|
1064
1251
|
}
|
|
1065
1252
|
)
|
|
@@ -1071,13 +1258,13 @@ var RewiseLayout = ({ children, module_name = "Rewise", module_description = "De
|
|
|
1071
1258
|
]
|
|
1072
1259
|
}
|
|
1073
1260
|
),
|
|
1074
|
-
/* @__PURE__ */ (0,
|
|
1261
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1075
1262
|
"main",
|
|
1076
1263
|
{
|
|
1077
1264
|
id: "main-content",
|
|
1078
1265
|
className: "flex-1 overflow-y-auto bg-[var(--color-background)]",
|
|
1079
1266
|
role: "main",
|
|
1080
|
-
children: /* @__PURE__ */ (0,
|
|
1267
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "p-3 lg:p-4", children })
|
|
1081
1268
|
}
|
|
1082
1269
|
)
|
|
1083
1270
|
] })
|
|
@@ -1090,7 +1277,7 @@ var import_react4 = require("react");
|
|
|
1090
1277
|
|
|
1091
1278
|
// src/contexts/ToastContext.tsx
|
|
1092
1279
|
var import_react3 = require("react");
|
|
1093
|
-
var
|
|
1280
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
1094
1281
|
var ToastContext = (0, import_react3.createContext)(void 0);
|
|
1095
1282
|
var useToast = () => {
|
|
1096
1283
|
const context = (0, import_react3.useContext)(ToastContext);
|
|
@@ -1142,12 +1329,12 @@ var ToastProvider = ({ children }) => {
|
|
|
1142
1329
|
warning,
|
|
1143
1330
|
info
|
|
1144
1331
|
};
|
|
1145
|
-
return /* @__PURE__ */ (0,
|
|
1332
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(ToastContext.Provider, { value, children });
|
|
1146
1333
|
};
|
|
1147
1334
|
|
|
1148
1335
|
// src/components/ui/Toast.tsx
|
|
1149
1336
|
var import_lucide_react2 = require("lucide-react");
|
|
1150
|
-
var
|
|
1337
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
1151
1338
|
var ToastItem = ({ toast }) => {
|
|
1152
1339
|
const { removeToast } = useToast();
|
|
1153
1340
|
const [isVisible, setIsVisible] = (0, import_react4.useState)(false);
|
|
@@ -1165,13 +1352,13 @@ var ToastItem = ({ toast }) => {
|
|
|
1165
1352
|
const getIcon = () => {
|
|
1166
1353
|
switch (toast.type) {
|
|
1167
1354
|
case "success":
|
|
1168
|
-
return /* @__PURE__ */ (0,
|
|
1355
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.CheckCircle, { className: "w-5 h-5 text-green-600" });
|
|
1169
1356
|
case "error":
|
|
1170
|
-
return /* @__PURE__ */ (0,
|
|
1357
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.XCircle, { className: "w-5 h-5 text-red-600" });
|
|
1171
1358
|
case "warning":
|
|
1172
|
-
return /* @__PURE__ */ (0,
|
|
1359
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.AlertTriangle, { className: "w-5 h-5 text-yellow-600" });
|
|
1173
1360
|
case "info":
|
|
1174
|
-
return /* @__PURE__ */ (0,
|
|
1361
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.Info, { className: "w-5 h-5 text-blue-600" });
|
|
1175
1362
|
}
|
|
1176
1363
|
};
|
|
1177
1364
|
const getBackgroundColor = () => {
|
|
@@ -1186,7 +1373,7 @@ var ToastItem = ({ toast }) => {
|
|
|
1186
1373
|
return "bg-blue-50 border-blue-200";
|
|
1187
1374
|
}
|
|
1188
1375
|
};
|
|
1189
|
-
return /* @__PURE__ */ (0,
|
|
1376
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
1190
1377
|
"div",
|
|
1191
1378
|
{
|
|
1192
1379
|
className: `
|
|
@@ -1197,14 +1384,14 @@ var ToastItem = ({ toast }) => {
|
|
|
1197
1384
|
flex items-start space-x-3
|
|
1198
1385
|
`,
|
|
1199
1386
|
children: [
|
|
1200
|
-
/* @__PURE__ */ (0,
|
|
1201
|
-
/* @__PURE__ */ (0,
|
|
1202
|
-
/* @__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)(
|
|
1203
1390
|
"button",
|
|
1204
1391
|
{
|
|
1205
1392
|
onClick: handleClose,
|
|
1206
1393
|
className: "flex-shrink-0 ml-4 text-gray-400 hover:text-gray-600 transition-colors",
|
|
1207
|
-
children: /* @__PURE__ */ (0,
|
|
1394
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_lucide_react2.X, { className: "w-4 h-4" })
|
|
1208
1395
|
}
|
|
1209
1396
|
)
|
|
1210
1397
|
]
|
|
@@ -1213,7 +1400,7 @@ var ToastItem = ({ toast }) => {
|
|
|
1213
1400
|
};
|
|
1214
1401
|
var ToastContainer = () => {
|
|
1215
1402
|
const { toasts } = useToast();
|
|
1216
|
-
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)) });
|
|
1217
1404
|
};
|
|
1218
1405
|
var Toast_default = ToastContainer;
|
|
1219
1406
|
|
|
@@ -1267,7 +1454,7 @@ var AuthServices = {
|
|
|
1267
1454
|
};
|
|
1268
1455
|
|
|
1269
1456
|
// src/contexts/SessionContext.tsx
|
|
1270
|
-
var
|
|
1457
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
1271
1458
|
var SessionContext = (0, import_react5.createContext)(void 0);
|
|
1272
1459
|
var useSession = () => {
|
|
1273
1460
|
const context = (0, import_react5.useContext)(SessionContext);
|
|
@@ -1307,7 +1494,7 @@ var SessionProvider = ({ children }) => {
|
|
|
1307
1494
|
setLoggedUser(null);
|
|
1308
1495
|
}
|
|
1309
1496
|
}, [token]);
|
|
1310
|
-
return /* @__PURE__ */ (0,
|
|
1497
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SessionContext.Provider, { value: {
|
|
1311
1498
|
isAuthenticated: !!token,
|
|
1312
1499
|
loggedUser,
|
|
1313
1500
|
token,
|
|
@@ -1319,7 +1506,7 @@ var SessionProvider = ({ children }) => {
|
|
|
1319
1506
|
// src/components/common/Pages.tsx
|
|
1320
1507
|
var import_lucide_react3 = require("lucide-react");
|
|
1321
1508
|
var import_react6 = require("react");
|
|
1322
|
-
var
|
|
1509
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
1323
1510
|
var Pages = ({
|
|
1324
1511
|
title = "",
|
|
1325
1512
|
description = "",
|
|
@@ -1329,17 +1516,17 @@ var Pages = ({
|
|
|
1329
1516
|
children
|
|
1330
1517
|
}) => {
|
|
1331
1518
|
const [sidebarOpen, setSidebarOpen] = (0, import_react6.useState)(false);
|
|
1332
|
-
return /* @__PURE__ */ (0,
|
|
1333
|
-
/* @__PURE__ */ (0,
|
|
1334
|
-
/* @__PURE__ */ (0,
|
|
1335
|
-
/* @__PURE__ */ (0,
|
|
1336
|
-
/* @__PURE__ */ (0,
|
|
1337
|
-
/* @__PURE__ */ (0,
|
|
1338
|
-
/* @__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 })
|
|
1339
1526
|
] }) }),
|
|
1340
|
-
/* @__PURE__ */ (0,
|
|
1527
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex items-center space-x-3", children: sideAction })
|
|
1341
1528
|
] }),
|
|
1342
|
-
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)(
|
|
1343
1530
|
"button",
|
|
1344
1531
|
{
|
|
1345
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"}`,
|
|
@@ -1348,43 +1535,43 @@ var Pages = ({
|
|
|
1348
1535
|
tab.id
|
|
1349
1536
|
)) })
|
|
1350
1537
|
] }),
|
|
1351
|
-
/* @__PURE__ */ (0,
|
|
1538
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex-1 p-6 space-y-6", children })
|
|
1352
1539
|
] }),
|
|
1353
|
-
sidebar && /* @__PURE__ */ (0,
|
|
1354
|
-
/* @__PURE__ */ (0,
|
|
1355
|
-
/* @__PURE__ */ (0,
|
|
1356
|
-
/* @__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)(
|
|
1357
1544
|
"button",
|
|
1358
1545
|
{
|
|
1359
1546
|
onClick: () => setSidebarOpen(!sidebarOpen),
|
|
1360
1547
|
className: "p-2 hover:bg-[var(--color-surface-hover)] rounded-lg transition-colors",
|
|
1361
1548
|
"aria-label": sidebarOpen ? "R\xE9duire" : "Ouvrir",
|
|
1362
|
-
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" })
|
|
1363
1550
|
}
|
|
1364
1551
|
)
|
|
1365
1552
|
] }) }),
|
|
1366
|
-
/* @__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)(
|
|
1367
1554
|
"button",
|
|
1368
1555
|
{
|
|
1369
1556
|
onClick: () => {
|
|
1370
1557
|
},
|
|
1371
1558
|
className: `w-full flex items-center gap-3 px-4 py-3 transition-all relative group hover:bg-[var(--color-surface-hover)]`,
|
|
1372
|
-
children: /* @__PURE__ */ (0,
|
|
1559
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
1373
1560
|
"div",
|
|
1374
1561
|
{
|
|
1375
1562
|
className: `flex-shrink-0 w-10 h-10 rounded-lg flex items-center justify-center transition-colors bg-[var(--color-background)]`,
|
|
1376
|
-
children: /* @__PURE__ */ (0,
|
|
1563
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "font-bold text-lg", children: 1 })
|
|
1377
1564
|
}
|
|
1378
1565
|
)
|
|
1379
1566
|
}
|
|
1380
1567
|
) }),
|
|
1381
|
-
sidebarOpen && /* @__PURE__ */ (0,
|
|
1382
|
-
/* @__PURE__ */ (0,
|
|
1383
|
-
/* @__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" }),
|
|
1384
1571
|
"Exporter le plan"
|
|
1385
1572
|
] }),
|
|
1386
|
-
/* @__PURE__ */ (0,
|
|
1387
|
-
/* @__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" }),
|
|
1388
1575
|
"Configuration"
|
|
1389
1576
|
] })
|
|
1390
1577
|
] }) })
|
|
@@ -1394,11 +1581,18 @@ var Pages = ({
|
|
|
1394
1581
|
var Pages_default = Pages;
|
|
1395
1582
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1396
1583
|
0 && (module.exports = {
|
|
1584
|
+
DateInput,
|
|
1585
|
+
FileInput,
|
|
1586
|
+
InputField,
|
|
1587
|
+
Modal,
|
|
1588
|
+
NumberInput,
|
|
1397
1589
|
Pages,
|
|
1398
1590
|
PrimaryButton,
|
|
1399
1591
|
RewiseLayout,
|
|
1400
1592
|
SecondaryButton,
|
|
1593
|
+
SelectInput,
|
|
1401
1594
|
SessionProvider,
|
|
1595
|
+
TextInput,
|
|
1402
1596
|
ThemeProvider,
|
|
1403
1597
|
ToastContainer,
|
|
1404
1598
|
ToastProvider,
|