ptechcore_ui 1.0.57 → 1.0.60

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 CHANGED
@@ -127,6 +127,7 @@ __export(index_exports, {
127
127
  WorkSpace: () => WorkSpace_default,
128
128
  WorkSpaceRoutes: () => WorkSpaceRoutes,
129
129
  WorkspaceServices: () => WorkspaceServices,
130
+ defaultTheme: () => defaultTheme,
130
131
  fileManagerApi: () => fileManagerApi,
131
132
  findFolderById: () => findFolderById2,
132
133
  formatCurrency: () => formatCurrency,
@@ -139,13 +140,17 @@ __export(index_exports, {
139
140
  getFileIcon: () => getFileIcon,
140
141
  getFileIconColor: () => getFileIconColor,
141
142
  getMimeTypeFromExtension: () => getMimeTypeFromExtension,
143
+ getThemeCSSVariables: () => getThemeCSSVariables,
142
144
  isImageFile: () => isImageFile,
143
145
  numberToWords: () => numberToWords,
146
+ themes: () => themes,
144
147
  useAlert: () => useAlert,
145
148
  useFileManager: () => useFileManager,
146
149
  useFileManagerApi: () => useFileManagerApi,
150
+ usePermissions: () => usePermissions,
147
151
  useRootFileManagerApi: () => useRootFileManagerApi,
148
152
  useSession: () => useSession,
153
+ useTheme: () => useTheme,
149
154
  useToast: () => useToast
150
155
  });
151
156
  module.exports = __toCommonJS(index_exports);
@@ -188,23 +193,35 @@ var Buttons_default = PrimaryButton;
188
193
  // src/components/common/Modals.tsx
189
194
  var import_react_dom = require("react-dom");
190
195
  var import_jsx_runtime2 = require("react/jsx-runtime");
191
- var Modal = ({ title, description, width = "max-w-md", minContentHeight, open, onClose, children }) => {
196
+ var Modal = ({
197
+ title,
198
+ description,
199
+ sideactions,
200
+ width = "max-w-md",
201
+ minContentHeight,
202
+ open,
203
+ onClose,
204
+ children
205
+ }) => {
192
206
  if (!open) return null;
193
207
  const modalContent = /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: "fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-[9999]", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: `bg-[var(--color-surface)] rounded-lg p-6 mx-4 w-full ${width}`, children: [
194
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "flex justify-between items-start mb-6", children: [
208
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "flex justify-between items-start mb-2", children: [
195
209
  /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
196
210
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("h3", { className: "text-xl font-semibold text-[var(--color-text-primary)] flex items-center space-x-2", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: title }) }),
197
211
  description && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { className: "text-sm text-[var(--color-text-secondary)] mt-1", children: description })
198
212
  ] }),
199
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
200
- "button",
201
- {
202
- onClick: onClose,
203
- className: "text-[var(--color-text-tertiary)] hover:text-[var(--color-text-primary)] text-xl transition-colors",
204
- "aria-label": "Close modal",
205
- children: "\u2715"
206
- }
207
- )
213
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "flex justify-end space-x-2", children: [
214
+ sideactions && sideactions,
215
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
216
+ "button",
217
+ {
218
+ onClick: onClose,
219
+ className: "text-[var(--color-text-tertiary)] hover:text-[var(--color-text-primary)] text-xl transition-colors",
220
+ "aria-label": "Close modal",
221
+ children: "\u2715"
222
+ }
223
+ )
224
+ ] })
208
225
  ] }),
209
226
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
210
227
  "div",
@@ -3687,11 +3704,21 @@ var import_jsx_runtime12 = require("react/jsx-runtime");
3687
3704
  var variantStyles = {
3688
3705
  filled: {
3689
3706
  active: "bg-[var(--color-primary)] text-white shadow-md",
3690
- inactive: "text-gray-600 hover:bg-gray-100"
3707
+ inactive: "text-gray-600 hover:bg-gray-100",
3708
+ base: "rounded-lg",
3709
+ badge: "bg-red-500 text-white"
3691
3710
  },
3692
3711
  outline: {
3693
3712
  active: "bg-blue-100 text-blue-700",
3694
- inactive: "text-gray-500 hover:text-gray-700 hover:bg-gray-100"
3713
+ inactive: "text-gray-500 hover:text-gray-700 hover:bg-gray-100",
3714
+ base: "rounded-lg",
3715
+ badge: "bg-red-500 text-white"
3716
+ },
3717
+ underline: {
3718
+ active: "border-[var(--color-primary)] text-[var(--color-primary)] bg-[var(--color-primary)]/5",
3719
+ inactive: "border-transparent text-gray-500 hover:text-gray-700 hover:bg-gray-100",
3720
+ base: "border-b-2",
3721
+ badge: "bg-[var(--color-primary)] text-white"
3695
3722
  }
3696
3723
  };
3697
3724
  var Tabs = ({ tabs, activeTab, onChange, variant = "filled", className = "" }) => {
@@ -3702,11 +3729,11 @@ var Tabs = ({ tabs, activeTab, onChange, variant = "filled", className = "" }) =
3702
3729
  "button",
3703
3730
  {
3704
3731
  onClick: () => onChange(tab.id),
3705
- className: `flex items-center space-x-2 px-4 py-2 text-sm font-medium rounded-lg transition-all whitespace-nowrap ${activeTab === tab.id ? styles.active : styles.inactive}`,
3732
+ className: `flex items-center space-x-2 px-4 py-2 text-sm font-semibold transition-all whitespace-nowrap ${styles.base} ${activeTab === tab.id ? styles.active : styles.inactive}`,
3706
3733
  children: [
3707
3734
  Icon && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Icon, { className: "w-4 h-4" }),
3708
3735
  /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { children: tab.label }),
3709
- tab.badge !== void 0 && tab.badge !== 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "ml-1 px-1.5 py-0.5 text-xs bg-red-500 text-white rounded-full", children: tab.badge })
3736
+ tab.badge !== void 0 && tab.badge !== 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: `ml-1 px-1.5 py-0.5 text-xs rounded-full ${styles.badge}`, children: tab.badge })
3710
3737
  ]
3711
3738
  },
3712
3739
  tab.id
@@ -8960,7 +8987,7 @@ var FormVendor = ({
8960
8987
  label: "Raison sociale",
8961
8988
  name: "legal_name",
8962
8989
  value: formData.legal_name || "",
8963
- placeholder: "Nom l\\u00e9gal de l'entit\\u00e9",
8990
+ placeholder: "Nom l\xE9gal de l'entit\xE9",
8964
8991
  required: true,
8965
8992
  error: errors.legal_name,
8966
8993
  onChange: handleInputChange
@@ -8980,10 +9007,10 @@ var FormVendor = ({
8980
9007
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
8981
9008
  TextInput,
8982
9009
  {
8983
- label: "Num\\u00e9ro d'identification fiscale (NCC)",
9010
+ label: "Num\xE9ro d'identification fiscale (NCC)",
8984
9011
  name: "tax_account",
8985
9012
  value: formData.tax_account || "",
8986
- placeholder: "Num\\u00e9ro d'identification fiscale",
9013
+ placeholder: "Num\xE9ro d'identification fiscale",
8987
9014
  onChange: handleInputChange
8988
9015
  }
8989
9016
  ),
@@ -8993,7 +9020,7 @@ var FormVendor = ({
8993
9020
  label: "RCCM",
8994
9021
  name: "rccm",
8995
9022
  value: formData.rccm || "",
8996
- placeholder: "Registre du Commerce et du Cr\\u00e9dit Mobilier",
9023
+ placeholder: "Registre du Commerce et du Cr\xE9dit Mobilier",
8997
9024
  onChange: handleInputChange
8998
9025
  }
8999
9026
  ),
@@ -9010,17 +9037,17 @@ var FormVendor = ({
9010
9037
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9011
9038
  TextInput,
9012
9039
  {
9013
- label: "R\\u00e9gime fiscal",
9040
+ label: "R\xE9gime fiscal",
9014
9041
  name: "tax_regime",
9015
9042
  value: formData.tax_regime || "",
9016
- placeholder: "R\\u00e9gime fiscal",
9043
+ placeholder: "R\xE9gime fiscal",
9017
9044
  onChange: handleInputChange
9018
9045
  }
9019
9046
  ),
9020
9047
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9021
9048
  TextInput,
9022
9049
  {
9023
- label: "Ann\\u00e9e de fondation",
9050
+ label: "Ann\xE9e de fondation",
9024
9051
  name: "year_founded",
9025
9052
  value: formData.year_founded || "",
9026
9053
  placeholder: "2020",
@@ -9030,7 +9057,7 @@ var FormVendor = ({
9030
9057
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9031
9058
  TextInput,
9032
9059
  {
9033
- label: "Secteur d'activit\\u00e9",
9060
+ label: "Secteur d'activit\xE9",
9034
9061
  name: "activity_sector",
9035
9062
  value: formData.activity_sector || "",
9036
9063
  placeholder: "Informatique, Commerce, etc.",
@@ -9048,7 +9075,7 @@ var FormVendor = ({
9048
9075
  onChange: handleTextareaChange,
9049
9076
  rows: 3,
9050
9077
  className: "w-full px-4 py-3 border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-[#6B7C92] focus:border-transparent placeholder-gray-400",
9051
- placeholder: "Description de l'activit\\u00e9 de l'entit\\u00e9"
9078
+ placeholder: "Description de l'activit\xE9 de l'entit\xE9"
9052
9079
  }
9053
9080
  )
9054
9081
  ] })
@@ -9059,7 +9086,7 @@ var FormVendor = ({
9059
9086
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9060
9087
  InputField,
9061
9088
  {
9062
- label: "T\\u00e9l\\u00e9phone",
9089
+ label: "T\xE9l\xE9phone",
9063
9090
  name: "phone",
9064
9091
  type: "tel",
9065
9092
  value: formData.phone || "",
@@ -9112,7 +9139,7 @@ var FormVendor = ({
9112
9139
  onChange: handleTextareaChange,
9113
9140
  rows: 3,
9114
9141
  className: "w-full px-4 py-3 border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-[#6B7C92] focus:border-transparent placeholder-gray-400",
9115
- placeholder: "Adresse compl\\u00e8te de l'entit\\u00e9"
9142
+ placeholder: "Adresse compl\\u00e8te de l'entit\xE9"
9116
9143
  }
9117
9144
  )
9118
9145
  ] })
@@ -9122,20 +9149,20 @@ var FormVendor = ({
9122
9149
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9123
9150
  TextInput,
9124
9151
  {
9125
- label: "Nom du repr\\u00e9sentant l\\u00e9gal",
9152
+ label: "Nom du repr\xE9sentant l\xE9gal",
9126
9153
  name: "legal_representative_name",
9127
9154
  value: formData.legal_representative_name || "",
9128
- placeholder: "Nom et pr\\u00e9nom du repr\\u00e9sentant",
9155
+ placeholder: "Nom et pr\xE9nom du repr\xE9sentant",
9129
9156
  onChange: handleInputChange
9130
9157
  }
9131
9158
  ),
9132
9159
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9133
9160
  TextInput,
9134
9161
  {
9135
- label: "Fonction du repr\\u00e9sentant",
9162
+ label: "Fonction du repr\xE9sentant",
9136
9163
  name: "legal_representative_fonction",
9137
9164
  value: formData.legal_representative_fonction || "",
9138
- placeholder: "Directeur G\\u00e9n\\u00e9ral, G\\u00e9rant, etc.",
9165
+ placeholder: "Directeur G\xE9n\xE9ral, G\xE9rant, etc.",
9139
9166
  onChange: handleInputChange
9140
9167
  }
9141
9168
  ),
@@ -9143,7 +9170,7 @@ var FormVendor = ({
9143
9170
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9144
9171
  InputField,
9145
9172
  {
9146
- label: "T\\u00e9l\\u00e9phone du repr\\u00e9sentant",
9173
+ label: "T\xE9l\xE9phone du repr\xE9sentant",
9147
9174
  name: "legal_representative_phone",
9148
9175
  type: "tel",
9149
9176
  value: formData.legal_representative_phone || "",
@@ -9154,7 +9181,7 @@ var FormVendor = ({
9154
9181
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9155
9182
  InputField,
9156
9183
  {
9157
- label: "Email du repr\\u00e9sentant",
9184
+ label: "Email du repr\xE9sentant",
9158
9185
  name: "legal_representative_email",
9159
9186
  type: "email",
9160
9187
  value: formData.legal_representative_email || "",
@@ -9165,7 +9192,7 @@ var FormVendor = ({
9165
9192
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9166
9193
  TextInput,
9167
9194
  {
9168
- label: "Type de document d'identit\\u00e9",
9195
+ label: "Type de document d'identit\xE9",
9169
9196
  name: "legal_representative_id_document",
9170
9197
  value: formData.legal_representative_id_document || "",
9171
9198
  placeholder: "CNI, Passeport, etc.",
@@ -9175,16 +9202,16 @@ var FormVendor = ({
9175
9202
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9176
9203
  TextInput,
9177
9204
  {
9178
- label: "Num\\u00e9ro de document d'identit\\u00e9",
9205
+ label: "Num\xE9ro de document d'identit\xE9",
9179
9206
  name: "legal_representative_id_number",
9180
9207
  value: formData.legal_representative_id_number || "",
9181
- placeholder: "Num\\u00e9ro du document",
9208
+ placeholder: "Num\xE9ro du document",
9182
9209
  onChange: handleInputChange
9183
9210
  }
9184
9211
  )
9185
9212
  ] }),
9186
9213
  /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { children: [
9187
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: "Adresse du repr\\u00e9sentant" }),
9214
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: "Adresse du repr\xE9sentant" }),
9188
9215
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9189
9216
  "textarea",
9190
9217
  {
@@ -9193,7 +9220,7 @@ var FormVendor = ({
9193
9220
  onChange: handleTextareaChange,
9194
9221
  rows: 3,
9195
9222
  className: "w-full px-4 py-3 border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-[#6B7C92] focus:border-transparent placeholder-gray-400",
9196
- placeholder: "Adresse du repr\\u00e9sentant l\\u00e9gal"
9223
+ placeholder: "Adresse du repr\xE9sentant l\xE9gal"
9197
9224
  }
9198
9225
  )
9199
9226
  ] })
@@ -9266,7 +9293,7 @@ var FormVendor = ({
9266
9293
  label: "RIB",
9267
9294
  name: "rib",
9268
9295
  value: formData.rib || "",
9269
- placeholder: "Relev\\u00e9 d'Identit\\u00e9 Bancaire",
9296
+ placeholder: "Relev\xE9 d'Identit\xE9 Bancaire",
9270
9297
  onChange: handleInputChange
9271
9298
  }
9272
9299
  ),
@@ -9307,7 +9334,7 @@ var FormVendor = ({
9307
9334
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
9308
9335
  InputField,
9309
9336
  {
9310
- label: "T\\u00e9l\\u00e9phone de la banque",
9337
+ label: "T\xE9l\xE9phone de la banque",
9311
9338
  name: "bank_phone",
9312
9339
  type: "tel",
9313
9340
  value: formData.bank_phone || "",
@@ -21559,6 +21586,7 @@ var WorkSpaceRoutes = ({ module_name = "Rewise", module_id = "core", module_desc
21559
21586
  WorkSpace,
21560
21587
  WorkSpaceRoutes,
21561
21588
  WorkspaceServices,
21589
+ defaultTheme,
21562
21590
  fileManagerApi,
21563
21591
  findFolderById,
21564
21592
  formatCurrency,
@@ -21571,12 +21599,16 @@ var WorkSpaceRoutes = ({ module_name = "Rewise", module_id = "core", module_desc
21571
21599
  getFileIcon,
21572
21600
  getFileIconColor,
21573
21601
  getMimeTypeFromExtension,
21602
+ getThemeCSSVariables,
21574
21603
  isImageFile,
21575
21604
  numberToWords,
21605
+ themes,
21576
21606
  useAlert,
21577
21607
  useFileManager,
21578
21608
  useFileManagerApi,
21609
+ usePermissions,
21579
21610
  useRootFileManagerApi,
21580
21611
  useSession,
21612
+ useTheme,
21581
21613
  useToast
21582
21614
  });
package/dist/index.d.cts CHANGED
@@ -14,6 +14,7 @@ declare const SecondaryButton: React$1.FC<PrimaryButtonProps>;
14
14
  interface ModalProps {
15
15
  title: string;
16
16
  description?: string;
17
+ sideactions?: React$1.ReactNode;
17
18
  width?: string;
18
19
  minContentHeight?: string;
19
20
  open: boolean;
@@ -280,6 +281,120 @@ declare const SessionProvider: ({ children }: {
280
281
  children: ReactNode;
281
282
  }) => react_jsx_runtime.JSX.Element;
282
283
 
284
+ interface ThemeColors {
285
+ primary: string;
286
+ primaryHover: string;
287
+ primaryLight: string;
288
+ secondary: string;
289
+ accent: string;
290
+ background: string;
291
+ surface: string;
292
+ surfaceHover: string;
293
+ text: {
294
+ primary: string;
295
+ secondary: string;
296
+ tertiary: string;
297
+ inverse: string;
298
+ };
299
+ border: string;
300
+ borderLight: string;
301
+ success: string;
302
+ successLight: string;
303
+ error: string;
304
+ errorLight: string;
305
+ warning: string;
306
+ warningLight: string;
307
+ info: string;
308
+ infoLight: string;
309
+ sidebar: {
310
+ bg: string;
311
+ bgHover: string;
312
+ text: string;
313
+ textHover: string;
314
+ border: string;
315
+ active: string;
316
+ activeBg: string;
317
+ };
318
+ card: {
319
+ bg: string;
320
+ border: string;
321
+ shadow: string;
322
+ };
323
+ }
324
+ interface Theme {
325
+ name: string;
326
+ description: string;
327
+ colors: ThemeColors;
328
+ shadows: {
329
+ sm: string;
330
+ md: string;
331
+ lg: string;
332
+ xl: string;
333
+ };
334
+ transitions: {
335
+ fast: string;
336
+ normal: string;
337
+ slow: string;
338
+ };
339
+ borderRadius: {
340
+ sm: string;
341
+ md: string;
342
+ lg: string;
343
+ xl: string;
344
+ full: string;
345
+ };
346
+ }
347
+ declare const themes: {
348
+ elegant: Theme;
349
+ fintech: Theme;
350
+ minimalist: Theme;
351
+ neutralOdyssey: Theme;
352
+ };
353
+ declare const defaultTheme: Theme;
354
+ declare const getThemeCSSVariables: (theme: Theme) => {
355
+ '--color-primary': string;
356
+ '--color-primary-hover': string;
357
+ '--color-primary-light': string;
358
+ '--color-secondary': string;
359
+ '--color-accent': string;
360
+ '--color-background': string;
361
+ '--color-surface': string;
362
+ '--color-surface-hover': string;
363
+ '--color-text-primary': string;
364
+ '--color-text-secondary': string;
365
+ '--color-text-tertiary': string;
366
+ '--color-text-inverse': string;
367
+ '--color-border': string;
368
+ '--color-border-light': string;
369
+ '--color-success': string;
370
+ '--color-success-light': string;
371
+ '--color-error': string;
372
+ '--color-error-light': string;
373
+ '--color-warning': string;
374
+ '--color-warning-light': string;
375
+ '--color-info': string;
376
+ '--color-info-light': string;
377
+ '--shadow-sm': string;
378
+ '--shadow-md': string;
379
+ '--shadow-lg': string;
380
+ '--shadow-xl': string;
381
+ '--transition-fast': string;
382
+ '--transition-normal': string;
383
+ '--transition-slow': string;
384
+ '--radius-sm': string;
385
+ '--radius-md': string;
386
+ '--radius-lg': string;
387
+ '--radius-xl': string;
388
+ '--radius-full': string;
389
+ };
390
+ type ThemeType = 'elegant' | 'fintech' | 'minimalist' | 'neutralOdyssey';
391
+ interface ThemeContextValue {
392
+ theme: Theme;
393
+ themeType: ThemeType;
394
+ setTheme: (type: ThemeType) => void;
395
+ }
396
+
397
+ declare const useTheme: () => ThemeContextValue;
283
398
  interface ThemeProviderProps {
284
399
  children: React$1.ReactNode;
285
400
  }
@@ -755,7 +870,7 @@ interface TabsProps {
755
870
  tabs: Tab[];
756
871
  activeTab: string;
757
872
  onChange: (tabId: string) => void;
758
- variant?: 'filled' | 'outline';
873
+ variant?: 'filled' | 'outline' | 'underline';
759
874
  className?: string;
760
875
  }
761
876
  declare const Tabs: React$1.FC<TabsProps>;
@@ -901,6 +1016,14 @@ declare const AlertProvider: React$1.FC<{
901
1016
  }>;
902
1017
  declare const useAlert: () => AlertContextType;
903
1018
 
1019
+ declare const usePermissions: () => {
1020
+ hasPermission: (permissionCode: string) => boolean;
1021
+ hasAnyPermission: (permissionCodes: string[]) => boolean;
1022
+ hasAllPermissions: (permissionCodes: string[]) => boolean;
1023
+ isSuperuser: boolean;
1024
+ permissions: string[];
1025
+ };
1026
+
904
1027
  interface SearchableSelectOption {
905
1028
  value: string | number;
906
1029
  label: string;
@@ -2144,4 +2267,4 @@ declare const WorkSpaceRoutes: React.FC<{
2144
2267
  module_description: string;
2145
2268
  }>;
2146
2269
 
2147
- export { ACCOUNT_TYPE_LABELS, type Account, type AccountListResponse, AccountServices, type AccountType, AccountingWorkspace, AssetsDashboard as ActifsPage, Alert, AlertProvider, ApprovalAnswerModal, ApprovalAnswerPage, ApprovalPreviewAnswer, ApprovalServices, ApprovalWorkflow, AttachmentUploader, type AttachmentUploaderProps, AuthServices, BALANCE_TYPE_LABELS, type BackendFile, type BackendFolder, Badge, type BalanceType, Breadcrumb, BudgetPage, CHOICES, CardBody, CardHeader, TeamChat as ChatEquipePage, type Client, type ClientListResponse, ClientServices, type ConfirmOptions, ContextMenu, type ContextMenuAction, type ContextMenuPosition, CountrySelector, CrmWorkspace, DataTable, DateInput, DocumentFooter, DocumentHeader, EntityFileManager, type EntityFileManagerProps, type EntityType, FDrawer, FROM_MODULE_CHOICES, FacilityWorkspace, FetchApi, FileCard, FileGrid, FileInput, type FileItem, FileList, FileManager, type FileManagerContextValue, type FileManagerProps, FileManagerProvider, type FileManagerTexts, FolderTree, ForeignCurrencySelector, FormClient, FormVendor, type FromModule, HRConnectPage, InfoBox, InputField, InvoiceTypeSelector, LegalFormSelector, MeetingHubPage, type MenuItem, MinimalVendorForm, Modal, ModernCard, type ModuleConfig, type ModuleType, NumberInput, PRINT_GREEN, Pages, PaymentMethodSelector, type PendingTask, TeamCalendar as PlanningPage, PrimaryButton, PrintPreview, type PrintPreviewProps, PrintableDocument, type PrintableDocumentProps, type ProcurementWorkspaceStats, PurchaseRequestsPage, PurchaseWorkspace, type RecentActivity, RewiseBasicCard, RewiseCard, RewiseLayout, RootFileManager, SYSCOHADA_CLASSES, SearchableSelect, type SearchableSelectOption, SecondaryButton, SelectAccount, SelectClient, SelectCostCenter, SelectDepartment, SelectInput, SelectUnit, SelectUser, SelectVendor, SessionProvider, SignatureSection, StatCard, TEMPLATE_FNE_CHOICES, type Tab, Tabs, type TabsProps, TaskPilot, TaxSelector, type TemplateFNE, TemplateFNESelector, TextInput, ThemeProvider, ToastContainer, ToastProvider, Toolbar, TotalsSection, type Unit, UnitServices, type UseFileManagerApiReturn, type User, UserServices, type Vendor, type VendorListResponse, VendorServices, type ViewMode, WorkSpace, WorkSpaceRoutes, WorkspaceServices, fileManagerApi, findFolderById, formatCurrency, formatDate, formatDateFR, formatDateTime, formatFileSize, getAllFolders, getFileExtension, getFileIcon, getFileIconColor, getMimeTypeFromExtension, isImageFile, numberToWords, useAlert, useFileManager, useFileManagerApi, useRootFileManagerApi, useSession, useToast };
2270
+ export { ACCOUNT_TYPE_LABELS, type Account, type AccountListResponse, AccountServices, type AccountType, AccountingWorkspace, AssetsDashboard as ActifsPage, Alert, AlertProvider, ApprovalAnswerModal, ApprovalAnswerPage, ApprovalPreviewAnswer, ApprovalServices, ApprovalWorkflow, AttachmentUploader, type AttachmentUploaderProps, AuthServices, BALANCE_TYPE_LABELS, type BackendFile, type BackendFolder, Badge, type BalanceType, Breadcrumb, BudgetPage, CHOICES, CardBody, CardHeader, TeamChat as ChatEquipePage, type Client, type ClientListResponse, ClientServices, type ConfirmOptions, ContextMenu, type ContextMenuAction, type ContextMenuPosition, CountrySelector, CrmWorkspace, DataTable, DateInput, DocumentFooter, DocumentHeader, EntityFileManager, type EntityFileManagerProps, type EntityType, FDrawer, FROM_MODULE_CHOICES, FacilityWorkspace, FetchApi, FileCard, FileGrid, FileInput, type FileItem, FileList, FileManager, type FileManagerContextValue, type FileManagerProps, FileManagerProvider, type FileManagerTexts, FolderTree, ForeignCurrencySelector, FormClient, FormVendor, type FromModule, HRConnectPage, InfoBox, InputField, InvoiceTypeSelector, LegalFormSelector, MeetingHubPage, type MenuItem, MinimalVendorForm, Modal, ModernCard, type ModuleConfig, type ModuleType, NumberInput, PRINT_GREEN, Pages, PaymentMethodSelector, type PendingTask, TeamCalendar as PlanningPage, PrimaryButton, PrintPreview, type PrintPreviewProps, PrintableDocument, type PrintableDocumentProps, type ProcurementWorkspaceStats, PurchaseRequestsPage, PurchaseWorkspace, type RecentActivity, RewiseBasicCard, RewiseCard, RewiseLayout, RootFileManager, SYSCOHADA_CLASSES, SearchableSelect, type SearchableSelectOption, SecondaryButton, SelectAccount, SelectClient, SelectCostCenter, SelectDepartment, SelectInput, SelectUnit, SelectUser, SelectVendor, SessionProvider, SignatureSection, StatCard, TEMPLATE_FNE_CHOICES, type Tab, Tabs, type TabsProps, TaskPilot, TaxSelector, type TemplateFNE, TemplateFNESelector, TextInput, type Theme, type ThemeColors, type ThemeContextValue, ThemeProvider, type ThemeType, ToastContainer, ToastProvider, Toolbar, TotalsSection, type Unit, UnitServices, type UseFileManagerApiReturn, type User, UserServices, type Vendor, type VendorListResponse, VendorServices, type ViewMode, WorkSpace, WorkSpaceRoutes, WorkspaceServices, defaultTheme, fileManagerApi, findFolderById, formatCurrency, formatDate, formatDateFR, formatDateTime, formatFileSize, getAllFolders, getFileExtension, getFileIcon, getFileIconColor, getMimeTypeFromExtension, getThemeCSSVariables, isImageFile, numberToWords, themes, useAlert, useFileManager, useFileManagerApi, usePermissions, useRootFileManagerApi, useSession, useTheme, useToast };
package/dist/index.d.ts CHANGED
@@ -14,6 +14,7 @@ declare const SecondaryButton: React$1.FC<PrimaryButtonProps>;
14
14
  interface ModalProps {
15
15
  title: string;
16
16
  description?: string;
17
+ sideactions?: React$1.ReactNode;
17
18
  width?: string;
18
19
  minContentHeight?: string;
19
20
  open: boolean;
@@ -280,6 +281,120 @@ declare const SessionProvider: ({ children }: {
280
281
  children: ReactNode;
281
282
  }) => react_jsx_runtime.JSX.Element;
282
283
 
284
+ interface ThemeColors {
285
+ primary: string;
286
+ primaryHover: string;
287
+ primaryLight: string;
288
+ secondary: string;
289
+ accent: string;
290
+ background: string;
291
+ surface: string;
292
+ surfaceHover: string;
293
+ text: {
294
+ primary: string;
295
+ secondary: string;
296
+ tertiary: string;
297
+ inverse: string;
298
+ };
299
+ border: string;
300
+ borderLight: string;
301
+ success: string;
302
+ successLight: string;
303
+ error: string;
304
+ errorLight: string;
305
+ warning: string;
306
+ warningLight: string;
307
+ info: string;
308
+ infoLight: string;
309
+ sidebar: {
310
+ bg: string;
311
+ bgHover: string;
312
+ text: string;
313
+ textHover: string;
314
+ border: string;
315
+ active: string;
316
+ activeBg: string;
317
+ };
318
+ card: {
319
+ bg: string;
320
+ border: string;
321
+ shadow: string;
322
+ };
323
+ }
324
+ interface Theme {
325
+ name: string;
326
+ description: string;
327
+ colors: ThemeColors;
328
+ shadows: {
329
+ sm: string;
330
+ md: string;
331
+ lg: string;
332
+ xl: string;
333
+ };
334
+ transitions: {
335
+ fast: string;
336
+ normal: string;
337
+ slow: string;
338
+ };
339
+ borderRadius: {
340
+ sm: string;
341
+ md: string;
342
+ lg: string;
343
+ xl: string;
344
+ full: string;
345
+ };
346
+ }
347
+ declare const themes: {
348
+ elegant: Theme;
349
+ fintech: Theme;
350
+ minimalist: Theme;
351
+ neutralOdyssey: Theme;
352
+ };
353
+ declare const defaultTheme: Theme;
354
+ declare const getThemeCSSVariables: (theme: Theme) => {
355
+ '--color-primary': string;
356
+ '--color-primary-hover': string;
357
+ '--color-primary-light': string;
358
+ '--color-secondary': string;
359
+ '--color-accent': string;
360
+ '--color-background': string;
361
+ '--color-surface': string;
362
+ '--color-surface-hover': string;
363
+ '--color-text-primary': string;
364
+ '--color-text-secondary': string;
365
+ '--color-text-tertiary': string;
366
+ '--color-text-inverse': string;
367
+ '--color-border': string;
368
+ '--color-border-light': string;
369
+ '--color-success': string;
370
+ '--color-success-light': string;
371
+ '--color-error': string;
372
+ '--color-error-light': string;
373
+ '--color-warning': string;
374
+ '--color-warning-light': string;
375
+ '--color-info': string;
376
+ '--color-info-light': string;
377
+ '--shadow-sm': string;
378
+ '--shadow-md': string;
379
+ '--shadow-lg': string;
380
+ '--shadow-xl': string;
381
+ '--transition-fast': string;
382
+ '--transition-normal': string;
383
+ '--transition-slow': string;
384
+ '--radius-sm': string;
385
+ '--radius-md': string;
386
+ '--radius-lg': string;
387
+ '--radius-xl': string;
388
+ '--radius-full': string;
389
+ };
390
+ type ThemeType = 'elegant' | 'fintech' | 'minimalist' | 'neutralOdyssey';
391
+ interface ThemeContextValue {
392
+ theme: Theme;
393
+ themeType: ThemeType;
394
+ setTheme: (type: ThemeType) => void;
395
+ }
396
+
397
+ declare const useTheme: () => ThemeContextValue;
283
398
  interface ThemeProviderProps {
284
399
  children: React$1.ReactNode;
285
400
  }
@@ -755,7 +870,7 @@ interface TabsProps {
755
870
  tabs: Tab[];
756
871
  activeTab: string;
757
872
  onChange: (tabId: string) => void;
758
- variant?: 'filled' | 'outline';
873
+ variant?: 'filled' | 'outline' | 'underline';
759
874
  className?: string;
760
875
  }
761
876
  declare const Tabs: React$1.FC<TabsProps>;
@@ -901,6 +1016,14 @@ declare const AlertProvider: React$1.FC<{
901
1016
  }>;
902
1017
  declare const useAlert: () => AlertContextType;
903
1018
 
1019
+ declare const usePermissions: () => {
1020
+ hasPermission: (permissionCode: string) => boolean;
1021
+ hasAnyPermission: (permissionCodes: string[]) => boolean;
1022
+ hasAllPermissions: (permissionCodes: string[]) => boolean;
1023
+ isSuperuser: boolean;
1024
+ permissions: string[];
1025
+ };
1026
+
904
1027
  interface SearchableSelectOption {
905
1028
  value: string | number;
906
1029
  label: string;
@@ -2144,4 +2267,4 @@ declare const WorkSpaceRoutes: React.FC<{
2144
2267
  module_description: string;
2145
2268
  }>;
2146
2269
 
2147
- export { ACCOUNT_TYPE_LABELS, type Account, type AccountListResponse, AccountServices, type AccountType, AccountingWorkspace, AssetsDashboard as ActifsPage, Alert, AlertProvider, ApprovalAnswerModal, ApprovalAnswerPage, ApprovalPreviewAnswer, ApprovalServices, ApprovalWorkflow, AttachmentUploader, type AttachmentUploaderProps, AuthServices, BALANCE_TYPE_LABELS, type BackendFile, type BackendFolder, Badge, type BalanceType, Breadcrumb, BudgetPage, CHOICES, CardBody, CardHeader, TeamChat as ChatEquipePage, type Client, type ClientListResponse, ClientServices, type ConfirmOptions, ContextMenu, type ContextMenuAction, type ContextMenuPosition, CountrySelector, CrmWorkspace, DataTable, DateInput, DocumentFooter, DocumentHeader, EntityFileManager, type EntityFileManagerProps, type EntityType, FDrawer, FROM_MODULE_CHOICES, FacilityWorkspace, FetchApi, FileCard, FileGrid, FileInput, type FileItem, FileList, FileManager, type FileManagerContextValue, type FileManagerProps, FileManagerProvider, type FileManagerTexts, FolderTree, ForeignCurrencySelector, FormClient, FormVendor, type FromModule, HRConnectPage, InfoBox, InputField, InvoiceTypeSelector, LegalFormSelector, MeetingHubPage, type MenuItem, MinimalVendorForm, Modal, ModernCard, type ModuleConfig, type ModuleType, NumberInput, PRINT_GREEN, Pages, PaymentMethodSelector, type PendingTask, TeamCalendar as PlanningPage, PrimaryButton, PrintPreview, type PrintPreviewProps, PrintableDocument, type PrintableDocumentProps, type ProcurementWorkspaceStats, PurchaseRequestsPage, PurchaseWorkspace, type RecentActivity, RewiseBasicCard, RewiseCard, RewiseLayout, RootFileManager, SYSCOHADA_CLASSES, SearchableSelect, type SearchableSelectOption, SecondaryButton, SelectAccount, SelectClient, SelectCostCenter, SelectDepartment, SelectInput, SelectUnit, SelectUser, SelectVendor, SessionProvider, SignatureSection, StatCard, TEMPLATE_FNE_CHOICES, type Tab, Tabs, type TabsProps, TaskPilot, TaxSelector, type TemplateFNE, TemplateFNESelector, TextInput, ThemeProvider, ToastContainer, ToastProvider, Toolbar, TotalsSection, type Unit, UnitServices, type UseFileManagerApiReturn, type User, UserServices, type Vendor, type VendorListResponse, VendorServices, type ViewMode, WorkSpace, WorkSpaceRoutes, WorkspaceServices, fileManagerApi, findFolderById, formatCurrency, formatDate, formatDateFR, formatDateTime, formatFileSize, getAllFolders, getFileExtension, getFileIcon, getFileIconColor, getMimeTypeFromExtension, isImageFile, numberToWords, useAlert, useFileManager, useFileManagerApi, useRootFileManagerApi, useSession, useToast };
2270
+ export { ACCOUNT_TYPE_LABELS, type Account, type AccountListResponse, AccountServices, type AccountType, AccountingWorkspace, AssetsDashboard as ActifsPage, Alert, AlertProvider, ApprovalAnswerModal, ApprovalAnswerPage, ApprovalPreviewAnswer, ApprovalServices, ApprovalWorkflow, AttachmentUploader, type AttachmentUploaderProps, AuthServices, BALANCE_TYPE_LABELS, type BackendFile, type BackendFolder, Badge, type BalanceType, Breadcrumb, BudgetPage, CHOICES, CardBody, CardHeader, TeamChat as ChatEquipePage, type Client, type ClientListResponse, ClientServices, type ConfirmOptions, ContextMenu, type ContextMenuAction, type ContextMenuPosition, CountrySelector, CrmWorkspace, DataTable, DateInput, DocumentFooter, DocumentHeader, EntityFileManager, type EntityFileManagerProps, type EntityType, FDrawer, FROM_MODULE_CHOICES, FacilityWorkspace, FetchApi, FileCard, FileGrid, FileInput, type FileItem, FileList, FileManager, type FileManagerContextValue, type FileManagerProps, FileManagerProvider, type FileManagerTexts, FolderTree, ForeignCurrencySelector, FormClient, FormVendor, type FromModule, HRConnectPage, InfoBox, InputField, InvoiceTypeSelector, LegalFormSelector, MeetingHubPage, type MenuItem, MinimalVendorForm, Modal, ModernCard, type ModuleConfig, type ModuleType, NumberInput, PRINT_GREEN, Pages, PaymentMethodSelector, type PendingTask, TeamCalendar as PlanningPage, PrimaryButton, PrintPreview, type PrintPreviewProps, PrintableDocument, type PrintableDocumentProps, type ProcurementWorkspaceStats, PurchaseRequestsPage, PurchaseWorkspace, type RecentActivity, RewiseBasicCard, RewiseCard, RewiseLayout, RootFileManager, SYSCOHADA_CLASSES, SearchableSelect, type SearchableSelectOption, SecondaryButton, SelectAccount, SelectClient, SelectCostCenter, SelectDepartment, SelectInput, SelectUnit, SelectUser, SelectVendor, SessionProvider, SignatureSection, StatCard, TEMPLATE_FNE_CHOICES, type Tab, Tabs, type TabsProps, TaskPilot, TaxSelector, type TemplateFNE, TemplateFNESelector, TextInput, type Theme, type ThemeColors, type ThemeContextValue, ThemeProvider, type ThemeType, ToastContainer, ToastProvider, Toolbar, TotalsSection, type Unit, UnitServices, type UseFileManagerApiReturn, type User, UserServices, type Vendor, type VendorListResponse, VendorServices, type ViewMode, WorkSpace, WorkSpaceRoutes, WorkspaceServices, defaultTheme, fileManagerApi, findFolderById, formatCurrency, formatDate, formatDateFR, formatDateTime, formatFileSize, getAllFolders, getFileExtension, getFileIcon, getFileIconColor, getMimeTypeFromExtension, getThemeCSSVariables, isImageFile, numberToWords, themes, useAlert, useFileManager, useFileManagerApi, usePermissions, useRootFileManagerApi, useSession, useTheme, useToast };
package/dist/index.js CHANGED
@@ -36,23 +36,35 @@ var Buttons_default = PrimaryButton;
36
36
  // src/components/common/Modals.tsx
37
37
  import { createPortal } from "react-dom";
38
38
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
39
- var Modal = ({ title, description, width = "max-w-md", minContentHeight, open, onClose, children }) => {
39
+ var Modal = ({
40
+ title,
41
+ description,
42
+ sideactions,
43
+ width = "max-w-md",
44
+ minContentHeight,
45
+ open,
46
+ onClose,
47
+ children
48
+ }) => {
40
49
  if (!open) return null;
41
50
  const modalContent = /* @__PURE__ */ jsx2("div", { className: "fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-[9999]", children: /* @__PURE__ */ jsxs("div", { className: `bg-[var(--color-surface)] rounded-lg p-6 mx-4 w-full ${width}`, children: [
42
- /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-start mb-6", children: [
51
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-between items-start mb-2", children: [
43
52
  /* @__PURE__ */ jsxs("div", { children: [
44
53
  /* @__PURE__ */ jsx2("h3", { className: "text-xl font-semibold text-[var(--color-text-primary)] flex items-center space-x-2", children: /* @__PURE__ */ jsx2("span", { children: title }) }),
45
54
  description && /* @__PURE__ */ jsx2("p", { className: "text-sm text-[var(--color-text-secondary)] mt-1", children: description })
46
55
  ] }),
47
- /* @__PURE__ */ jsx2(
48
- "button",
49
- {
50
- onClick: onClose,
51
- className: "text-[var(--color-text-tertiary)] hover:text-[var(--color-text-primary)] text-xl transition-colors",
52
- "aria-label": "Close modal",
53
- children: "\u2715"
54
- }
55
- )
56
+ /* @__PURE__ */ jsxs("div", { className: "flex justify-end space-x-2", children: [
57
+ sideactions && sideactions,
58
+ /* @__PURE__ */ jsx2(
59
+ "button",
60
+ {
61
+ onClick: onClose,
62
+ className: "text-[var(--color-text-tertiary)] hover:text-[var(--color-text-primary)] text-xl transition-colors",
63
+ "aria-label": "Close modal",
64
+ children: "\u2715"
65
+ }
66
+ )
67
+ ] })
56
68
  ] }),
57
69
  /* @__PURE__ */ jsx2(
58
70
  "div",
@@ -3563,11 +3575,21 @@ import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
3563
3575
  var variantStyles = {
3564
3576
  filled: {
3565
3577
  active: "bg-[var(--color-primary)] text-white shadow-md",
3566
- inactive: "text-gray-600 hover:bg-gray-100"
3578
+ inactive: "text-gray-600 hover:bg-gray-100",
3579
+ base: "rounded-lg",
3580
+ badge: "bg-red-500 text-white"
3567
3581
  },
3568
3582
  outline: {
3569
3583
  active: "bg-blue-100 text-blue-700",
3570
- inactive: "text-gray-500 hover:text-gray-700 hover:bg-gray-100"
3584
+ inactive: "text-gray-500 hover:text-gray-700 hover:bg-gray-100",
3585
+ base: "rounded-lg",
3586
+ badge: "bg-red-500 text-white"
3587
+ },
3588
+ underline: {
3589
+ active: "border-[var(--color-primary)] text-[var(--color-primary)] bg-[var(--color-primary)]/5",
3590
+ inactive: "border-transparent text-gray-500 hover:text-gray-700 hover:bg-gray-100",
3591
+ base: "border-b-2",
3592
+ badge: "bg-[var(--color-primary)] text-white"
3571
3593
  }
3572
3594
  };
3573
3595
  var Tabs = ({ tabs, activeTab, onChange, variant = "filled", className = "" }) => {
@@ -3578,11 +3600,11 @@ var Tabs = ({ tabs, activeTab, onChange, variant = "filled", className = "" }) =
3578
3600
  "button",
3579
3601
  {
3580
3602
  onClick: () => onChange(tab.id),
3581
- className: `flex items-center space-x-2 px-4 py-2 text-sm font-medium rounded-lg transition-all whitespace-nowrap ${activeTab === tab.id ? styles.active : styles.inactive}`,
3603
+ className: `flex items-center space-x-2 px-4 py-2 text-sm font-semibold transition-all whitespace-nowrap ${styles.base} ${activeTab === tab.id ? styles.active : styles.inactive}`,
3582
3604
  children: [
3583
3605
  Icon && /* @__PURE__ */ jsx12(Icon, { className: "w-4 h-4" }),
3584
3606
  /* @__PURE__ */ jsx12("span", { children: tab.label }),
3585
- tab.badge !== void 0 && tab.badge !== 0 && /* @__PURE__ */ jsx12("span", { className: "ml-1 px-1.5 py-0.5 text-xs bg-red-500 text-white rounded-full", children: tab.badge })
3607
+ tab.badge !== void 0 && tab.badge !== 0 && /* @__PURE__ */ jsx12("span", { className: `ml-1 px-1.5 py-0.5 text-xs rounded-full ${styles.badge}`, children: tab.badge })
3586
3608
  ]
3587
3609
  },
3588
3610
  tab.id
@@ -8877,7 +8899,7 @@ var FormVendor = ({
8877
8899
  label: "Raison sociale",
8878
8900
  name: "legal_name",
8879
8901
  value: formData.legal_name || "",
8880
- placeholder: "Nom l\\u00e9gal de l'entit\\u00e9",
8902
+ placeholder: "Nom l\xE9gal de l'entit\xE9",
8881
8903
  required: true,
8882
8904
  error: errors.legal_name,
8883
8905
  onChange: handleInputChange
@@ -8897,10 +8919,10 @@ var FormVendor = ({
8897
8919
  /* @__PURE__ */ jsx29(
8898
8920
  TextInput,
8899
8921
  {
8900
- label: "Num\\u00e9ro d'identification fiscale (NCC)",
8922
+ label: "Num\xE9ro d'identification fiscale (NCC)",
8901
8923
  name: "tax_account",
8902
8924
  value: formData.tax_account || "",
8903
- placeholder: "Num\\u00e9ro d'identification fiscale",
8925
+ placeholder: "Num\xE9ro d'identification fiscale",
8904
8926
  onChange: handleInputChange
8905
8927
  }
8906
8928
  ),
@@ -8910,7 +8932,7 @@ var FormVendor = ({
8910
8932
  label: "RCCM",
8911
8933
  name: "rccm",
8912
8934
  value: formData.rccm || "",
8913
- placeholder: "Registre du Commerce et du Cr\\u00e9dit Mobilier",
8935
+ placeholder: "Registre du Commerce et du Cr\xE9dit Mobilier",
8914
8936
  onChange: handleInputChange
8915
8937
  }
8916
8938
  ),
@@ -8927,17 +8949,17 @@ var FormVendor = ({
8927
8949
  /* @__PURE__ */ jsx29(
8928
8950
  TextInput,
8929
8951
  {
8930
- label: "R\\u00e9gime fiscal",
8952
+ label: "R\xE9gime fiscal",
8931
8953
  name: "tax_regime",
8932
8954
  value: formData.tax_regime || "",
8933
- placeholder: "R\\u00e9gime fiscal",
8955
+ placeholder: "R\xE9gime fiscal",
8934
8956
  onChange: handleInputChange
8935
8957
  }
8936
8958
  ),
8937
8959
  /* @__PURE__ */ jsx29(
8938
8960
  TextInput,
8939
8961
  {
8940
- label: "Ann\\u00e9e de fondation",
8962
+ label: "Ann\xE9e de fondation",
8941
8963
  name: "year_founded",
8942
8964
  value: formData.year_founded || "",
8943
8965
  placeholder: "2020",
@@ -8947,7 +8969,7 @@ var FormVendor = ({
8947
8969
  /* @__PURE__ */ jsx29(
8948
8970
  TextInput,
8949
8971
  {
8950
- label: "Secteur d'activit\\u00e9",
8972
+ label: "Secteur d'activit\xE9",
8951
8973
  name: "activity_sector",
8952
8974
  value: formData.activity_sector || "",
8953
8975
  placeholder: "Informatique, Commerce, etc.",
@@ -8965,7 +8987,7 @@ var FormVendor = ({
8965
8987
  onChange: handleTextareaChange,
8966
8988
  rows: 3,
8967
8989
  className: "w-full px-4 py-3 border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-[#6B7C92] focus:border-transparent placeholder-gray-400",
8968
- placeholder: "Description de l'activit\\u00e9 de l'entit\\u00e9"
8990
+ placeholder: "Description de l'activit\xE9 de l'entit\xE9"
8969
8991
  }
8970
8992
  )
8971
8993
  ] })
@@ -8976,7 +8998,7 @@ var FormVendor = ({
8976
8998
  /* @__PURE__ */ jsx29(
8977
8999
  InputField,
8978
9000
  {
8979
- label: "T\\u00e9l\\u00e9phone",
9001
+ label: "T\xE9l\xE9phone",
8980
9002
  name: "phone",
8981
9003
  type: "tel",
8982
9004
  value: formData.phone || "",
@@ -9029,7 +9051,7 @@ var FormVendor = ({
9029
9051
  onChange: handleTextareaChange,
9030
9052
  rows: 3,
9031
9053
  className: "w-full px-4 py-3 border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-[#6B7C92] focus:border-transparent placeholder-gray-400",
9032
- placeholder: "Adresse compl\\u00e8te de l'entit\\u00e9"
9054
+ placeholder: "Adresse compl\\u00e8te de l'entit\xE9"
9033
9055
  }
9034
9056
  )
9035
9057
  ] })
@@ -9039,20 +9061,20 @@ var FormVendor = ({
9039
9061
  /* @__PURE__ */ jsx29(
9040
9062
  TextInput,
9041
9063
  {
9042
- label: "Nom du repr\\u00e9sentant l\\u00e9gal",
9064
+ label: "Nom du repr\xE9sentant l\xE9gal",
9043
9065
  name: "legal_representative_name",
9044
9066
  value: formData.legal_representative_name || "",
9045
- placeholder: "Nom et pr\\u00e9nom du repr\\u00e9sentant",
9067
+ placeholder: "Nom et pr\xE9nom du repr\xE9sentant",
9046
9068
  onChange: handleInputChange
9047
9069
  }
9048
9070
  ),
9049
9071
  /* @__PURE__ */ jsx29(
9050
9072
  TextInput,
9051
9073
  {
9052
- label: "Fonction du repr\\u00e9sentant",
9074
+ label: "Fonction du repr\xE9sentant",
9053
9075
  name: "legal_representative_fonction",
9054
9076
  value: formData.legal_representative_fonction || "",
9055
- placeholder: "Directeur G\\u00e9n\\u00e9ral, G\\u00e9rant, etc.",
9077
+ placeholder: "Directeur G\xE9n\xE9ral, G\xE9rant, etc.",
9056
9078
  onChange: handleInputChange
9057
9079
  }
9058
9080
  ),
@@ -9060,7 +9082,7 @@ var FormVendor = ({
9060
9082
  /* @__PURE__ */ jsx29(
9061
9083
  InputField,
9062
9084
  {
9063
- label: "T\\u00e9l\\u00e9phone du repr\\u00e9sentant",
9085
+ label: "T\xE9l\xE9phone du repr\xE9sentant",
9064
9086
  name: "legal_representative_phone",
9065
9087
  type: "tel",
9066
9088
  value: formData.legal_representative_phone || "",
@@ -9071,7 +9093,7 @@ var FormVendor = ({
9071
9093
  /* @__PURE__ */ jsx29(
9072
9094
  InputField,
9073
9095
  {
9074
- label: "Email du repr\\u00e9sentant",
9096
+ label: "Email du repr\xE9sentant",
9075
9097
  name: "legal_representative_email",
9076
9098
  type: "email",
9077
9099
  value: formData.legal_representative_email || "",
@@ -9082,7 +9104,7 @@ var FormVendor = ({
9082
9104
  /* @__PURE__ */ jsx29(
9083
9105
  TextInput,
9084
9106
  {
9085
- label: "Type de document d'identit\\u00e9",
9107
+ label: "Type de document d'identit\xE9",
9086
9108
  name: "legal_representative_id_document",
9087
9109
  value: formData.legal_representative_id_document || "",
9088
9110
  placeholder: "CNI, Passeport, etc.",
@@ -9092,16 +9114,16 @@ var FormVendor = ({
9092
9114
  /* @__PURE__ */ jsx29(
9093
9115
  TextInput,
9094
9116
  {
9095
- label: "Num\\u00e9ro de document d'identit\\u00e9",
9117
+ label: "Num\xE9ro de document d'identit\xE9",
9096
9118
  name: "legal_representative_id_number",
9097
9119
  value: formData.legal_representative_id_number || "",
9098
- placeholder: "Num\\u00e9ro du document",
9120
+ placeholder: "Num\xE9ro du document",
9099
9121
  onChange: handleInputChange
9100
9122
  }
9101
9123
  )
9102
9124
  ] }),
9103
9125
  /* @__PURE__ */ jsxs24("div", { children: [
9104
- /* @__PURE__ */ jsx29("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: "Adresse du repr\\u00e9sentant" }),
9126
+ /* @__PURE__ */ jsx29("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: "Adresse du repr\xE9sentant" }),
9105
9127
  /* @__PURE__ */ jsx29(
9106
9128
  "textarea",
9107
9129
  {
@@ -9110,7 +9132,7 @@ var FormVendor = ({
9110
9132
  onChange: handleTextareaChange,
9111
9133
  rows: 3,
9112
9134
  className: "w-full px-4 py-3 border border-gray-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-[#6B7C92] focus:border-transparent placeholder-gray-400",
9113
- placeholder: "Adresse du repr\\u00e9sentant l\\u00e9gal"
9135
+ placeholder: "Adresse du repr\xE9sentant l\xE9gal"
9114
9136
  }
9115
9137
  )
9116
9138
  ] })
@@ -9183,7 +9205,7 @@ var FormVendor = ({
9183
9205
  label: "RIB",
9184
9206
  name: "rib",
9185
9207
  value: formData.rib || "",
9186
- placeholder: "Relev\\u00e9 d'Identit\\u00e9 Bancaire",
9208
+ placeholder: "Relev\xE9 d'Identit\xE9 Bancaire",
9187
9209
  onChange: handleInputChange
9188
9210
  }
9189
9211
  ),
@@ -9224,7 +9246,7 @@ var FormVendor = ({
9224
9246
  /* @__PURE__ */ jsx29(
9225
9247
  InputField,
9226
9248
  {
9227
- label: "T\\u00e9l\\u00e9phone de la banque",
9249
+ label: "T\xE9l\xE9phone de la banque",
9228
9250
  name: "bank_phone",
9229
9251
  type: "tel",
9230
9252
  value: formData.bank_phone || "",
@@ -21699,6 +21721,7 @@ export {
21699
21721
  WorkSpace_default as WorkSpace,
21700
21722
  WorkSpaceRoutes,
21701
21723
  WorkspaceServices,
21724
+ defaultTheme,
21702
21725
  fileManagerApi,
21703
21726
  findFolderById2 as findFolderById,
21704
21727
  formatCurrency,
@@ -21711,12 +21734,16 @@ export {
21711
21734
  getFileIcon,
21712
21735
  getFileIconColor,
21713
21736
  getMimeTypeFromExtension,
21737
+ getThemeCSSVariables,
21714
21738
  isImageFile,
21715
21739
  numberToWords,
21740
+ themes,
21716
21741
  useAlert,
21717
21742
  useFileManager,
21718
21743
  useFileManagerApi,
21744
+ usePermissions,
21719
21745
  useRootFileManagerApi,
21720
21746
  useSession,
21747
+ useTheme,
21721
21748
  useToast
21722
21749
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ptechcore_ui",
3
- "version": "1.0.57",
3
+ "version": "1.0.60",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",