conexys-elements 1.1.2 → 1.1.23

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.
Files changed (254) hide show
  1. package/README.md +462 -125
  2. package/dist/Auth.d.ts +0 -0
  3. package/dist/Auth.d.ts.map +0 -0
  4. package/dist/ThemeContext.d.ts +0 -0
  5. package/dist/ThemeContext.d.ts.map +0 -0
  6. package/dist/components/AppDataSettings.d.ts +0 -0
  7. package/dist/components/AppDataSettings.d.ts.map +0 -0
  8. package/dist/components/AppDataSettingsHTML.d.ts +0 -0
  9. package/dist/components/AppDataSettingsHTML.d.ts.map +1 -1
  10. package/dist/components/AppError.d.ts +0 -0
  11. package/dist/components/AppError.d.ts.map +0 -0
  12. package/dist/components/AppFormFields.d.ts +1 -1
  13. package/dist/components/AppFormFields.d.ts.map +1 -1
  14. package/dist/components/AppFormFieldsFromConfig.d.ts +0 -0
  15. package/dist/components/AppFormFieldsFromConfig.d.ts.map +0 -0
  16. package/dist/components/AppFormFieldsNoUser.d.ts +0 -0
  17. package/dist/components/AppFormFieldsNoUser.d.ts.map +1 -1
  18. package/dist/components/AppFormFieldsTable.d.ts +0 -0
  19. package/dist/components/AppFormFieldsTable.d.ts.map +1 -1
  20. package/dist/components/AppHeaderPage.d.ts +0 -0
  21. package/dist/components/AppHeaderPage.d.ts.map +1 -1
  22. package/dist/components/AppHeaderPage404.d.ts +0 -0
  23. package/dist/components/AppHeaderPage404.d.ts.map +0 -0
  24. package/dist/components/AppSetHeaderTitle.d.ts +0 -0
  25. package/dist/components/AppSetHeaderTitle.d.ts.map +0 -0
  26. package/dist/components/BackendStatus/BackendOfflinePage.d.ts +0 -0
  27. package/dist/components/BackendStatus/BackendOfflinePage.d.ts.map +0 -0
  28. package/dist/components/BackendStatus/BackendStatusProvider.d.ts +0 -0
  29. package/dist/components/BackendStatus/BackendStatusProvider.d.ts.map +0 -0
  30. package/dist/components/BackendStatus/index.d.ts +0 -0
  31. package/dist/components/BackendStatus/index.d.ts.map +0 -0
  32. package/dist/components/ErrorBoundary.d.ts +0 -0
  33. package/dist/components/ErrorBoundary.d.ts.map +0 -0
  34. package/dist/components/NotFound.d.ts +0 -0
  35. package/dist/components/NotFound.d.ts.map +0 -0
  36. package/dist/components/PermissionGate.d.ts +0 -0
  37. package/dist/components/PermissionGate.d.ts.map +0 -0
  38. package/dist/components/Uservalidationerror.d.ts +0 -0
  39. package/dist/components/Uservalidationerror.d.ts.map +0 -0
  40. package/dist/components/dialog/AppDialogModal.d.ts +0 -0
  41. package/dist/components/dialog/AppDialogModal.d.ts.map +0 -0
  42. package/dist/components/form/RenderForm.d.ts +0 -0
  43. package/dist/components/form/RenderForm.d.ts.map +0 -0
  44. package/dist/components/form/components/Button.d.ts +0 -0
  45. package/dist/components/form/components/Button.d.ts.map +0 -0
  46. package/dist/components/form/components/Checkbox.d.ts +0 -0
  47. package/dist/components/form/components/Checkbox.d.ts.map +0 -0
  48. package/dist/components/form/components/FormLogin.d.ts +0 -0
  49. package/dist/components/form/components/FormLogin.d.ts.map +0 -0
  50. package/dist/components/form/components/Heading.d.ts +0 -0
  51. package/dist/components/form/components/Heading.d.ts.map +0 -0
  52. package/dist/components/form/components/Image.d.ts +0 -0
  53. package/dist/components/form/components/Image.d.ts.map +0 -0
  54. package/dist/components/form/components/Info.d.ts +0 -0
  55. package/dist/components/form/components/Info.d.ts.map +1 -1
  56. package/dist/components/form/components/InputFile.d.ts +0 -0
  57. package/dist/components/form/components/InputFile.d.ts.map +0 -0
  58. package/dist/components/form/components/InputPassword.d.ts +0 -0
  59. package/dist/components/form/components/InputPassword.d.ts.map +0 -0
  60. package/dist/components/form/components/InputText.d.ts +0 -0
  61. package/dist/components/form/components/InputText.d.ts.map +1 -1
  62. package/dist/components/form/components/InputWYSIWYG.d.ts +0 -0
  63. package/dist/components/form/components/InputWYSIWYG.d.ts.map +1 -1
  64. package/dist/components/form/components/Radiobutton.d.ts +0 -0
  65. package/dist/components/form/components/Radiobutton.d.ts.map +0 -0
  66. package/dist/components/form/components/Select.d.ts +0 -0
  67. package/dist/components/form/components/Select.d.ts.map +0 -0
  68. package/dist/components/form/components/Switch.d.ts +0 -0
  69. package/dist/components/form/components/Switch.d.ts.map +0 -0
  70. package/dist/components/form/components/Text.d.ts +0 -0
  71. package/dist/components/form/components/Text.d.ts.map +0 -0
  72. package/dist/components/form/components/index.d.ts +0 -0
  73. package/dist/components/form/components/index.d.ts.map +0 -0
  74. package/dist/components/form/components/validation/Validation.d.ts +4 -1
  75. package/dist/components/form/components/validation/Validation.d.ts.map +1 -1
  76. package/dist/components/index.d.ts +0 -0
  77. package/dist/components/index.d.ts.map +0 -0
  78. package/dist/components/login/LanguageSet.d.ts +0 -0
  79. package/dist/components/login/LanguageSet.d.ts.map +1 -1
  80. package/dist/components/theme/Card.d.ts +0 -0
  81. package/dist/components/theme/Card.d.ts.map +0 -0
  82. package/dist/components/theme/CardDashboard.d.ts +0 -0
  83. package/dist/components/theme/CardDashboard.d.ts.map +0 -0
  84. package/dist/components/theme/CardUser.d.ts +0 -0
  85. package/dist/components/theme/CardUser.d.ts.map +0 -0
  86. package/dist/components/theme/Loading.d.ts +0 -0
  87. package/dist/components/theme/Loading.d.ts.map +0 -0
  88. package/dist/components/theme/MailTemplateWidget.d.ts +0 -0
  89. package/dist/components/theme/MailTemplateWidget.d.ts.map +1 -1
  90. package/dist/components/theme/Mailbox.d.ts +0 -0
  91. package/dist/components/theme/Mailbox.d.ts.map +1 -1
  92. package/dist/components/theme/MessagesBlock.d.ts +0 -0
  93. package/dist/components/theme/MessagesBlock.d.ts.map +0 -0
  94. package/dist/components/theme/Timeline.d.ts +0 -0
  95. package/dist/components/theme/Timeline.d.ts.map +0 -0
  96. package/dist/components/theme/UserWidget.d.ts +0 -0
  97. package/dist/components/theme/UserWidget.d.ts.map +1 -1
  98. package/dist/components/theme/index.d.ts +0 -0
  99. package/dist/components/theme/index.d.ts.map +0 -0
  100. package/dist/config/ConexysConfig.d.ts +0 -0
  101. package/dist/config/ConexysConfig.d.ts.map +0 -0
  102. package/dist/constants/global.d.ts +0 -0
  103. package/dist/constants/global.d.ts.map +1 -1
  104. package/dist/context/PermissionContext.d.ts +0 -0
  105. package/dist/context/PermissionContext.d.ts.map +0 -0
  106. package/dist/hooks/FormHooksNormal.d.ts +1 -1
  107. package/dist/hooks/FormHooksNormal.d.ts.map +1 -1
  108. package/dist/hooks/FormHooksNormalGetPost.d.ts +0 -0
  109. package/dist/hooks/FormHooksNormalGetPost.d.ts.map +1 -1
  110. package/dist/hooks/FormHooksNormalMulti.d.ts +0 -0
  111. package/dist/hooks/FormHooksNormalMulti.d.ts.map +0 -0
  112. package/dist/hooks/FormHooksNormalNoUser.d.ts +0 -0
  113. package/dist/hooks/FormHooksNormalNoUser.d.ts.map +1 -1
  114. package/dist/hooks/FormHooksUpload.d.ts +0 -0
  115. package/dist/hooks/FormHooksUpload.d.ts.map +1 -1
  116. package/dist/hooks/FormHooksUploadPatch.d.ts +0 -0
  117. package/dist/hooks/FormHooksUploadPatch.d.ts.map +1 -1
  118. package/dist/hooks/MRT_Localization.d.ts +0 -0
  119. package/dist/hooks/MRT_Localization.d.ts.map +0 -0
  120. package/dist/hooks/useFingerprintJS.d.ts +0 -0
  121. package/dist/hooks/useFingerprintJS.d.ts.map +0 -0
  122. package/dist/hooks/useLanguageSync.d.ts +0 -0
  123. package/dist/hooks/useLanguageSync.d.ts.map +0 -0
  124. package/dist/hooks/usePermission.d.ts +0 -0
  125. package/dist/hooks/usePermission.d.ts.map +0 -0
  126. package/dist/hooks/useSocket.d.ts +0 -0
  127. package/dist/hooks/useSocket.d.ts.map +1 -1
  128. package/dist/hooks/useZoomPrevention.d.ts +0 -0
  129. package/dist/hooks/useZoomPrevention.d.ts.map +0 -0
  130. package/dist/index.css +0 -0
  131. package/dist/index.css.map +1 -1
  132. package/dist/index.d.ts +1 -0
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.esm.css +0 -0
  135. package/dist/index.esm.css.map +1 -1
  136. package/dist/index.esm.js +3285 -273
  137. package/dist/index.esm.js.map +1 -1
  138. package/dist/index.js +3285 -272
  139. package/dist/index.js.map +1 -1
  140. package/dist/services/deleteFormService.d.ts +0 -0
  141. package/dist/services/deleteFormService.d.ts.map +1 -1
  142. package/dist/services/deleteService.d.ts +0 -0
  143. package/dist/services/deleteService.d.ts.map +1 -1
  144. package/dist/services/deleteServiceExtended.d.ts +0 -0
  145. package/dist/services/deleteServiceExtended.d.ts.map +0 -0
  146. package/dist/services/getService.d.ts +0 -0
  147. package/dist/services/getService.d.ts.map +1 -1
  148. package/dist/services/getServiceExtended.d.ts +0 -0
  149. package/dist/services/getServiceExtended.d.ts.map +1 -1
  150. package/dist/services/patchFormService.d.ts +0 -0
  151. package/dist/services/patchFormService.d.ts.map +1 -1
  152. package/dist/services/patchService.d.ts +0 -0
  153. package/dist/services/patchService.d.ts.map +1 -1
  154. package/dist/services/patchServiceExtended.d.ts +0 -0
  155. package/dist/services/patchServiceExtended.d.ts.map +0 -0
  156. package/dist/services/postFormService.d.ts +0 -0
  157. package/dist/services/postFormService.d.ts.map +1 -1
  158. package/dist/services/postFormServiceGetPost.d.ts +0 -0
  159. package/dist/services/postFormServiceGetPost.d.ts.map +1 -1
  160. package/dist/services/postService.d.ts +0 -0
  161. package/dist/services/postService.d.ts.map +1 -1
  162. package/dist/services/postServiceExtended.d.ts +0 -0
  163. package/dist/services/postServiceExtended.d.ts.map +1 -1
  164. package/dist/services/restoreFormService.d.ts +0 -0
  165. package/dist/services/restoreFormService.d.ts.map +1 -1
  166. package/dist/shared/baseFingerprintService.d.ts +0 -0
  167. package/dist/shared/baseFingerprintService.d.ts.map +0 -0
  168. package/dist/shared/crudtable/ActionButtons.d.ts +0 -0
  169. package/dist/shared/crudtable/ActionButtons.d.ts.map +0 -0
  170. package/dist/shared/crudtable/Table.d.ts +0 -0
  171. package/dist/shared/crudtable/Table.d.ts.map +0 -0
  172. package/dist/shared/crudtable/useTableData.d.ts +0 -0
  173. package/dist/shared/crudtable/useTableData.d.ts.map +0 -0
  174. package/dist/shared/crudtable/useTableDataInstall.d.ts +0 -0
  175. package/dist/shared/crudtable/useTableDataInstall.d.ts.map +0 -0
  176. package/dist/shared/sharedComponentsAPI.d.ts +0 -0
  177. package/dist/shared/sharedComponentsAPI.d.ts.map +0 -0
  178. package/dist/shared/sharedServicesAPI.d.ts +0 -0
  179. package/dist/shared/sharedServicesAPI.d.ts.map +1 -1
  180. package/dist/types/auth.types.d.ts +1 -1
  181. package/dist/types/auth.types.d.ts.map +1 -1
  182. package/dist/types/common/form.types.d.ts +0 -0
  183. package/dist/types/common/form.types.d.ts.map +0 -0
  184. package/dist/types/common/index.d.ts +0 -0
  185. package/dist/types/common/index.d.ts.map +0 -0
  186. package/dist/types/common/props.types.d.ts +0 -0
  187. package/dist/types/common/props.types.d.ts.map +0 -0
  188. package/dist/types/common/request.types.d.ts +1 -0
  189. package/dist/types/common/request.types.d.ts.map +1 -1
  190. package/dist/types/common/service.types.d.ts +0 -0
  191. package/dist/types/common/service.types.d.ts.map +0 -0
  192. package/dist/types/common/user.types.d.ts +0 -0
  193. package/dist/types/common/user.types.d.ts.map +0 -0
  194. package/dist/types/components/appFormFields.types.d.ts +1 -0
  195. package/dist/types/components/appFormFields.types.d.ts.map +1 -1
  196. package/dist/types/components/appFormFieldsFromConfig.types.d.ts +0 -0
  197. package/dist/types/components/appFormFieldsFromConfig.types.d.ts.map +0 -0
  198. package/dist/types/components/appFormFieldsNoUser.types.d.ts +0 -0
  199. package/dist/types/components/appFormFieldsNoUser.types.d.ts.map +0 -0
  200. package/dist/types/components/appFormFieldsTable.types.d.ts +0 -0
  201. package/dist/types/components/appFormFieldsTable.types.d.ts.map +0 -0
  202. package/dist/types/components/backendStatus.types.d.ts +0 -0
  203. package/dist/types/components/backendStatus.types.d.ts.map +0 -0
  204. package/dist/types/components/components.types.d.ts +0 -0
  205. package/dist/types/components/components.types.d.ts.map +0 -0
  206. package/dist/types/components/dialog.types.d.ts +0 -0
  207. package/dist/types/components/dialog.types.d.ts.map +0 -0
  208. package/dist/types/components/form.types.d.ts +16 -0
  209. package/dist/types/components/form.types.d.ts.map +1 -1
  210. package/dist/types/components/login.types.d.ts +0 -0
  211. package/dist/types/components/login.types.d.ts.map +0 -0
  212. package/dist/types/components/pages.types.d.ts +0 -0
  213. package/dist/types/components/pages.types.d.ts.map +0 -0
  214. package/dist/types/components/theme.types.d.ts +0 -0
  215. package/dist/types/components/theme.types.d.ts.map +0 -0
  216. package/dist/types/hooks/formHooksNormal.types.d.ts +0 -0
  217. package/dist/types/hooks/formHooksNormal.types.d.ts.map +0 -0
  218. package/dist/types/hooks/formHooksNormalGetPost.types.d.ts +0 -0
  219. package/dist/types/hooks/formHooksNormalGetPost.types.d.ts.map +0 -0
  220. package/dist/types/hooks/formHooksNormalMulti.types.d.ts +0 -0
  221. package/dist/types/hooks/formHooksNormalMulti.types.d.ts.map +0 -0
  222. package/dist/types/hooks/formHooksNormalNoUser.types.d.ts +0 -0
  223. package/dist/types/hooks/formHooksNormalNoUser.types.d.ts.map +0 -0
  224. package/dist/types/hooks/formHooksUpload.types.d.ts +0 -0
  225. package/dist/types/hooks/formHooksUpload.types.d.ts.map +0 -0
  226. package/dist/types/hooks/mrt_Localization.types.d.ts +0 -0
  227. package/dist/types/hooks/mrt_Localization.types.d.ts.map +0 -0
  228. package/dist/types/permission.types.d.ts +0 -0
  229. package/dist/types/permission.types.d.ts.map +0 -0
  230. package/dist/types/services/postFormService.types.d.ts +0 -0
  231. package/dist/types/services/postFormService.types.d.ts.map +0 -0
  232. package/dist/types/services/postFormServiceGetPost.types.d.ts +0 -0
  233. package/dist/types/services/postFormServiceGetPost.types.d.ts.map +0 -0
  234. package/dist/types/services/postServiceExtended.types.d.ts +0 -0
  235. package/dist/types/services/postServiceExtended.types.d.ts.map +0 -0
  236. package/dist/types/shared/crudtable.types.d.ts +0 -0
  237. package/dist/types/shared/crudtable.types.d.ts.map +0 -0
  238. package/dist/types/themecontext.types.d.ts +0 -0
  239. package/dist/types/themecontext.types.d.ts.map +0 -0
  240. package/dist/types/utilities/generateRandomPassword.types.d.ts +0 -0
  241. package/dist/types/utilities/generateRandomPassword.types.d.ts.map +0 -0
  242. package/dist/utilities/GenerateRandomPassword.d.ts +0 -0
  243. package/dist/utilities/GenerateRandomPassword.d.ts.map +0 -0
  244. package/dist/utilities/authStorage.d.ts +9 -5
  245. package/dist/utilities/authStorage.d.ts.map +1 -1
  246. package/dist/utilities/authStorage2.d.ts +20 -0
  247. package/dist/utilities/authStorage2.d.ts.map +1 -0
  248. package/dist/utilities/checkAuth.d.ts +0 -0
  249. package/dist/utilities/checkAuth.d.ts.map +1 -1
  250. package/dist/utilities/logConsole.d.ts +0 -0
  251. package/dist/utilities/logConsole.d.ts.map +0 -0
  252. package/dist/utilities/sanitizeHtml.d.ts +2 -0
  253. package/dist/utilities/sanitizeHtml.d.ts.map +1 -0
  254. package/package.json +83 -82
package/README.md CHANGED
@@ -1,125 +1,462 @@
1
- # Conexys Components
2
-
3
- React component library for Conexys projects.
4
-
5
- > 🚀 **Now with TypeScript support!** This project is in the process of migrating to TypeScript for a better development experience and type safety.
6
-
7
- ## Installation
8
-
9
- ```bash
10
- npm install conexys-elements
11
- # or using yarn
12
- yarn add conexys-elements
13
- ```
14
-
15
- ## Dependencies
16
-
17
- This package has the following peer dependencies:
18
-
19
- - @fingerprintjs/fingerprintjs >= 5.0.1
20
- - @mui/icons-material >= 7.3.7
21
- - @mui/material >= 7.3.7
22
- - axios >= 1.13.2
23
- - date-fns >= 4.1.0
24
- - jodit-react >= 5.2.38
25
- - react >= 19.2.3
26
- - react-dom >= 19.2.3
27
- - react-helmet-async >= 2.0.5
28
- - react-hook-form >= 7.71.1
29
- - react-i18next >= 16.5.3
30
- - react-router-dom >= 7.12.0
31
- - react-select >= 5.10.2
32
- - react-transition-group >= 4.4.5
33
- - sweetalert2 >= 11.26.17
34
- - sweetalert2-react-content >= 5.1.1
35
-
36
- Make sure to install these dependencies in your project:
37
-
38
- ```bash
39
- npm install react react-dom @mui/material @mui/icons-material axios react-i18next react-helmet-async react-router-dom sweetalert2 sweetalert2-react-content date-fns jodit-react react-select react-hook-form react-transition-group @fingerprintjs/fingerprintjs
40
- ```
41
-
42
- ## Usage
43
-
44
- ### JavaScript
45
-
46
- ```jsx
47
- import { Card, Loading, ActionButtons } from 'conexys-elements';
48
-
49
- function MyComponent() {
50
- return (
51
- <div>
52
- <Card title="My Card">
53
- Card content
54
- </Card>
55
-
56
- <ActionButtons
57
- onCancel={() => console.log('Cancelled')}
58
- onSubmit={() => console.log('Submitted')}
59
- cancelText="Cancel"
60
- submitText="Submit"
61
- />
62
- </div>
63
- );
64
- }
65
- ```
66
-
67
- ## Initializing Shared Services
68
-
69
- To initialize shared services in your application:
70
-
71
- ```jsx
72
- import { initializeSharedServices, initializeSharedComponents } from 'conexys-elements';
73
-
74
- // In your main component or initialization file
75
- useEffect(() => {
76
- initializeSharedServices();
77
- initializeSharedComponents();
78
- }, []);
79
- ```
80
-
81
- ### TypeScript
82
-
83
- ```tsx
84
- import { Card, Loading, ActionButtons } from 'conexys-elements';
85
- import type { ButtonProps } from 'conexys-elements';
86
-
87
- function MyComponent() {
88
- return (
89
- <div>
90
- <Card title="My Card">
91
- Card content
92
- </Card>
93
-
94
- <ActionButtons
95
- onCancel={() => console.log('Cancelled')}
96
- onSubmit={() => console.log('Submitted')}
97
- cancelText="Cancel"
98
- submitText="Submit"
99
- />
100
- </div>
101
- );
102
- }
103
- ```
104
-
105
- Types are automatically included, and your IDE will provide full autocompletion.
106
-
107
- ## Language Files
108
-
109
- The package includes basic translations in Spanish and Catalan. To use them, configure i18next with the correct path to the language files located in `node_modules/conexys-elements/dist/language/`.
110
-
111
- ## Development
112
-
113
- ### Migration to TypeScript
114
-
115
- This project is in the process of migrating to TypeScript. For more information about the migration process, see [MIGRACION_TYPESCRIPT.md](./MIGRACION_TYPESCRIPT.md).
116
-
117
- ### Available Scripts
118
-
119
- - `npm run build` - Compiles the project
120
- - `npm run type-check` - Checks TypeScript types without compiling
121
- - `npm run type-check:watch` - Checks types in watch mode
122
-
123
- ## License
124
-
125
- MIT
1
+ # Conexys Elements
2
+
3
+ A React (TypeScript) component library that centralizes the user interface of the **Conexys** ecosystem: forms, headers, dialogs, light/dark theme, backend status, permission system, HTTP services, WebSocket, and authentication utilities.
4
+
5
+ > **Native TypeScript.** Types included: your IDE will give you full autocomplete with no extra configuration.
6
+
7
+ ---
8
+
9
+ ## Table of Contents
10
+
11
+ - [Installation](#installation)
12
+ - [Dependencies (peerDependencies)](#dependencies-peerdependencies)
13
+ - [Initialization](#initialization)
14
+ - [Providers and configuration](#providers-and-configuration)
15
+ - [Authentication system (`authStorage`)](#authentication-system-authstorage)
16
+ - [Components](#components)
17
+ - [Forms](#forms)
18
+ - [Hooks](#hooks)
19
+ - [HTTP services](#http-services)
20
+ - [Permission system](#permission-system)
21
+ - [Utilities](#utilities)
22
+ - [Internationalization (i18n)](#internationalization-i18n)
23
+ - [Development](#development)
24
+ - [License](#license)
25
+
26
+ ---
27
+
28
+ ## Installation
29
+
30
+ ```bash
31
+ npm install conexys-elements
32
+ # or with yarn
33
+ yarn add conexys-elements
34
+ # or with pnpm
35
+ pnpm add conexys-elements
36
+ ```
37
+
38
+ ## Dependencies (peerDependencies)
39
+
40
+ These dependencies must be installed in your consumer project (they are not bundled):
41
+
42
+ ```
43
+ @fingerprintjs/fingerprintjs ^5.2.0
44
+ @mui/icons-material ^9.1.1
45
+ @mui/material ^9.1.2
46
+ axios ^1.18.1
47
+ date-fns ^4.4.0
48
+ jodit-react ^5.3.21
49
+ prop-types ^15.8.1
50
+ react ^19.2.7
51
+ react-dom ^19.2.7
52
+ react-helmet-async ^3.0.0
53
+ react-hook-form ^7.80.0
54
+ react-i18next ^17.0.8
55
+ react-router-dom ^7.18.0
56
+ react-select ^5.10.2
57
+ react-transition-group ^4.4.5
58
+ socket.io-client ^4.8.3
59
+ sweetalert2 ^11.26.25
60
+ sweetalert2-react-content ^5.1.2
61
+ ```
62
+
63
+ Install them all at once:
64
+
65
+ ```bash
66
+ npm install react react-dom @mui/material @mui/icons-material axios react-i18next react-helmet-async react-router-dom sweetalert2 sweetalert2-react-content date-fns jodit-react react-select react-hook-form react-transition-group @fingerprintjs/fingerprintjs socket.io-client prop-types
67
+ ```
68
+
69
+ > ⚙️ **Internal dependencies** (resolved automatically): `dompurify`, `material-react-table`, `react-bootstrap`, `react-icons`.
70
+
71
+ ---
72
+
73
+ ## Initialization
74
+
75
+ In your application's root component, initialize the shared services and components **only once**:
76
+
77
+ ```tsx
78
+ import {
79
+ initializeSharedServices,
80
+ initializeSharedComponents,
81
+ } from 'conexys-elements';
82
+ import { useEffect } from 'react';
83
+
84
+ function App() {
85
+ useEffect(() => {
86
+ initializeSharedServices(); // configures HTTP services (base URL, auth)
87
+ initializeSharedComponents(); // configures shared UI services
88
+ }, []);
89
+
90
+ return <></>;
91
+ }
92
+ ```
93
+
94
+ ---
95
+
96
+ ## Providers and configuration
97
+
98
+ ### `ConexysConfigProvider` (required)
99
+
100
+ Provides global configuration (development mode, logging flags). **Wrap your whole app** with it:
101
+
102
+ ```tsx
103
+ import { ConexysConfigProvider } from 'conexys-elements';
104
+
105
+ function App() {
106
+ return (
107
+ <ConexysConfigProvider
108
+ config={{
109
+ enableLogs: import.meta.env.VITE_SHOW_CONSOLE === 'true',
110
+ enableLogsError: import.meta.env.VITE_SHOW_CONSOLE_ERROR === 'true',
111
+ enableLogsWarning: import.meta.env.VITE_SHOW_CONSOLE_WARNING === 'true',
112
+ enableLogsInfo: import.meta.env.VITE_SHOW_CONSOLE_INFO === 'true',
113
+ enableLogsData: import.meta.env.VITE_SHOW_CONSOLE_DATA === 'true',
114
+ developmentMode: import.meta.env.VITE_DEVELOPMENT_MODE === 'true',
115
+ }}
116
+ >
117
+ {/* rest of the app */}
118
+ </ConexysConfigProvider>
119
+ );
120
+ }
121
+ ```
122
+
123
+ Exposed helpers: `useConexysConfig()`, `isDevelopmentMode`.
124
+
125
+ ### `ThemeContextProvider`
126
+
127
+ Light/dark theme based on MUI. Detects the system preference (`prefers-color-scheme`) and persists the choice in `localStorage.displaymode`:
128
+
129
+ ```tsx
130
+ import { ThemeContextProvider } from 'conexys-elements';
131
+
132
+ function App() {
133
+ return (
134
+ <ThemeContextProvider>
135
+ {/* your UI */}
136
+ </ThemeContextProvider>
137
+ );
138
+ }
139
+ ```
140
+
141
+ ### `BackendStatusProvider`
142
+
143
+ Detects whether the backend is available. Renders the children immediately (optimistic startup) and checks the connection periodically; if it goes down, it shows an "offline" page and reloads once it recovers:
144
+
145
+ ```tsx
146
+ import { BackendStatusProvider } from 'conexys-elements';
147
+
148
+ <BackendStatusProvider
149
+ checkInterval={30000} // ms between checks (default 30000)
150
+ healthEndpoint="health" // health endpoint (default 'health')
151
+ // fallbackComponent={<MyOffline/>}
152
+ >
153
+ {children}
154
+ </BackendStatusProvider>
155
+ ```
156
+
157
+ It also exposes `useBackendStatus()` → `{ isConnected, isChecking, lastCheck, checkConnection }` and the `BackendOfflinePage` component.
158
+
159
+ ---
160
+
161
+ ## Authentication system (`authStorage`)
162
+
163
+ > 🔐 **Cookie mode (current).** The JWT is stored **only in `HttpOnly` cookies** (`cxauthxc`), inaccessible from JavaScript. The token is never written to `localStorage`, preventing its theft via XSS.
164
+
165
+ Main API:
166
+
167
+ | Method | Description |
168
+ |---|---|
169
+ | `initialize(configLogs)` | Initializes the session config (deduplicated, without a cascade of `getsettings`). |
170
+ | `getAuthToken()` | Returns the `'cookie'` marker (truthy, never the real JWT; the cookie is HttpOnly). |
171
+ | `hasActiveSession()` | Checks for a real active session (`cx_session` + `csrf_token` cookies). **Use it in the gates that decide whether to show the dashboard.** |
172
+ | `getCsrfToken()` | CSRF token (`csrf_token`) for the *double-submit* scheme. |
173
+ | `getSessionId()` / `setSessionId()` | Session ID via the readable `cx_session` cookie. |
174
+ | `getSessionTypeValue()` | Returns `'cookie'`. |
175
+ | `removeAuthData()` | Clears cookies and `localStorage` on logout. |
176
+ | `refreshTypeSession()` | Re-reads the session medium from the DB (only on auth boundaries, e.g. login). |
177
+
178
+ Typical login flow:
179
+
180
+ ```tsx
181
+ import { authStorage } from 'conexys-elements';
182
+
183
+ await authStorage.initialize(configLogs); // resolves the session medium
184
+ await authStorage.setSessionId(sessionId, configLogs);
185
+ // the backend sets cxauthxc (HttpOnly) + csrf_token; JS only sees the marker
186
+ ```
187
+
188
+ ---
189
+
190
+ ## Components
191
+
192
+ Import the components from the package:
193
+
194
+ ```tsx
195
+ import { Card, Loading, AppHeaderPage, NotFound } from 'conexys-elements';
196
+ ```
197
+
198
+ ### Headers and pages
199
+
200
+ | Component | Description |
201
+ |---|---|
202
+ | `AppHeaderPage` | Page header with title, breadcrumb, favorites button and menu toggle. |
203
+ | `AppHeaderPage404` | Simplified header for the 404 page (no favorites). |
204
+ | `AppSetHeaderTitle` | Sets the `<title>` dynamically (Helmet + site name from the backend). |
205
+ | `AppError` | Error page with SVG illustration and translated instructions. |
206
+ | `NotFound` | Translated 404 page with a link back home. |
207
+ | `ErrorBoundary` | Catches render errors and shows a modal (Close/Reload). Filters "known" errors. |
208
+ | `Uservalidationerror` | Clears user data and redirects to `/login`. |
209
+
210
+ ### Content and data
211
+
212
+ | Component | Description |
213
+ |---|---|
214
+ | `AppDataSettings` | Requests config from the backend (`getsettings`) and renders the returned content. |
215
+ | `AppDataSettingsHTML` | Same, but renders sanitized HTML (`sanitizeHtml`). |
216
+ | `AppFormFields` | Complete authenticated-user form from field config. |
217
+ | `AppFormFieldsTable` | Table-oriented form variant (CRUD). |
218
+ | `AppFormFieldsNoUser` | Form without a user (registration/recovery). |
219
+ | `AppFormFieldsFromConfig` | 100% config-driven form (multi-form). |
220
+
221
+ ### Dialogs and login
222
+
223
+ | Component | Description |
224
+ |---|---|
225
+ | `AppDialogModal` | Styled MUI modal with types (`Normal`, `Delete`, `DeleteMax`, `Restore`). |
226
+ | `LanguageSet` | Language selector for login/registration. |
227
+
228
+ ### Theme
229
+
230
+ | Component | Description |
231
+ |---|---|
232
+ | `Card` | Base content card. |
233
+ | `CardDashboard` | Dashboard card (header/statistics). |
234
+ | `CardUser` | User profile card. |
235
+ | `Loading` | Loading state with spinner; handles `loading`/`error`. |
236
+ | `Mailbox` | Inbox/mail widget. |
237
+ | `MailTemplateWidget` | Mail templates widget. |
238
+ | `MessagesBlock` | Messages/chat block. |
239
+ | `Timeline` | Event timeline. |
240
+ | `UserWidget` | User widget (avatar/status). |
241
+
242
+ ### CRUD tables
243
+
244
+ | Export | Description |
245
+ |---|---|
246
+ | `Table` | CRUD table based on Material React Table with actions. |
247
+ | `ActionButtons` | Row action buttons (edit/delete/restore). |
248
+ | `useTableData` | Data-fetching hook for tables. |
249
+ | `useTableDataInstall` | Table data hook for the installer. |
250
+
251
+ Example with `Card` + `Loading` + `ActionButtons`:
252
+
253
+ ```tsx
254
+ import { Card, Loading, ActionButtons } from 'conexys-elements';
255
+
256
+ function MyComponent() {
257
+ return (
258
+ <Card title="My card">
259
+ <Loading type="appnotifications" loading={false} error={undefined}>
260
+ Content
261
+ </Loading>
262
+ <ActionButtons
263
+ onSubmit={() => console.log('Saved')}
264
+ onCancel={() => console.log('Cancelled')}
265
+ submitText="Save"
266
+ cancelText="Cancel"
267
+ />
268
+ </Card>
269
+ );
270
+ }
271
+ ```
272
+
273
+ ---
274
+
275
+ ## Forms
276
+
277
+ The core engine is `RenderForm`, which receives a list of `FormInputs` and renders the appropriate controls. The atomic components available:
278
+
279
+ `Button` · `Checkbox` · `Heading` · `Image` · `Info` · `InputFile` · `InputPassword` · `InputText` · `InputWYSIWYG` · `Radiobutton` · `Select` · `Switch` · `Text`
280
+
281
+ Rendering + validation:
282
+
283
+ ```tsx
284
+ import { RenderForm } from 'conexys-elements';
285
+
286
+ <RenderForm
287
+ config={formInputs} // FormInputs[]
288
+ onSubmit={handleSubmit}
289
+ // change/validation callbacks handled internally
290
+ />
291
+ ```
292
+
293
+ The associated form hooks are `useCustomForm*` (see [Hooks](#hooks)).
294
+
295
+ ---
296
+
297
+ ## Hooks
298
+
299
+ | Hook | Description |
300
+ |---|---|
301
+ | `useCustomFormNormal` | Authenticated form (POST). |
302
+ | `useCustomFormGetPost` | Prior GET (load) + POST (save). |
303
+ | `useCustomFormMulti` | Multiple/configurable forms. |
304
+ | `useCustomFormNoUser` | Forms without a user (registration/recovery). |
305
+ | `useCustomFormUpload` | File upload (multipart). |
306
+ | `useCustomFormUploadPatch` | PATCH upload variant. |
307
+ | `useFingerprintJS` | Browser fingerprint (device identification). |
308
+ | `useLanguageSync` | Synchronizes language with storage/context. |
309
+ | `usePermission` | Granular permission checking against the backend. |
310
+ | `useSocket` | WebSocket connection (socket.io) with automatic reconnection. |
311
+ | `useZoomPrevention` | Prevents zoom (gestures/keys) in specific contexts. |
312
+ | `MRT_Localization` | Spanish localization for Material React Table. |
313
+
314
+ ### `useSocket`
315
+
316
+ ```tsx
317
+ import { useSocket } from 'conexys-elements';
318
+
319
+ const { socketRef, socketState } = useSocket();
320
+ // socketState: { connected: boolean, socketId: string | null }
321
+ ```
322
+
323
+ It connects automatically if there is a token; in cookie mode it authenticates via `withCredentials` (same-origin cookies) and reconnects indefinitely.
324
+
325
+ ---
326
+
327
+ ## HTTP services
328
+
329
+ Generic and extended services for consuming the Conexys REST API.
330
+
331
+ ### Generic
332
+
333
+ | Service | Description |
334
+ |---|---|
335
+ | `postservice` / `postService` | Generic POST. |
336
+ | `getservice` / `getService` | Generic GET. |
337
+ | `patchservice` / `patchService` | Generic PATCH. |
338
+ | `deleteservice` / `deleteService` | Generic DELETE. |
339
+ | `postFormService` | Form POST. |
340
+ | `patchFormService` | Form PATCH. |
341
+ | `deleteFormService` | Form DELETE. |
342
+ | `restoreFormService` | Item restore. |
343
+
344
+ ### Extended (domain)
345
+
346
+ - `postServiceExtended` → `servicePostBasic`, `serviceData`, `servicePost`, `servicePost2`, `servicePostData`, `serviceLockscreen`, `serviceLogout`, `serviceFavorites`, `serviceGetFavorites`.
347
+ - `getServiceExtended` → `getServiceBasic`, `getservice2`, `getServiceData`.
348
+ - `patchServiceExtended` → `servicePatch2`.
349
+ - `deleteServiceExtended` → `serviceDelete2`.
350
+
351
+ Example with an extended service:
352
+
353
+ ```tsx
354
+ import { serviceData } from 'conexys-elements';
355
+
356
+ await serviceData(
357
+ url,
358
+ { keys: 'site_name' },
359
+ { headers: { 'Content-Type': 'application/json' } },
360
+ (value) => setData(value),
361
+ configLogs,
362
+ );
363
+ ```
364
+
365
+ ---
366
+
367
+ ## Permission system
368
+
369
+ Granular per-module access control.
370
+
371
+ - **Context:** `PermissionProvider`, `usePermissionContext`.
372
+ - **Hook:** `usePermission(options)` → `{ hasPermission, loading }`.
373
+ - **Component:** `PermissionGate` — renders `children` if permission is granted, `fallback` if not, and `loadingComponent` while loading.
374
+
375
+ ```tsx
376
+ import { PermissionGate } from 'conexys-elements';
377
+
378
+ <PermissionGate
379
+ permissionrequired="users.edit"
380
+ permissiontype="module"
381
+ fallback={<span>No access</span>}
382
+ >
383
+ <EditButton />
384
+ </PermissionGate>
385
+ ```
386
+
387
+ ---
388
+
389
+ ## Utilities
390
+
391
+ | Utility | Description |
392
+ |---|---|
393
+ | `authStorage` | Credentials/token management (see the dedicated section). |
394
+ | `checkAuth` | Authentication check. |
395
+ | `sanitizeHtml` | HTML sanitization (DOMPurify). |
396
+ | `GenerateRandomPassword` | Random password generator. |
397
+ | `logConsole` | Centralized config-conditional logging. |
398
+ | `getOrSetFingerprint` | Gets or generates the device fingerprint. |
399
+ | `Url` | Backend base URL (constant). |
400
+
401
+ ### `GenerateRandomPassword`
402
+
403
+ ```tsx
404
+ import { GenerateRandomPassword } from 'conexys-elements';
405
+
406
+ const pass = GenerateRandomPassword({
407
+ numbers: true,
408
+ symbols: true,
409
+ capitalletters: true,
410
+ lowercase: true,
411
+ numberOfCharacters: 16,
412
+ });
413
+ ```
414
+
415
+ ---
416
+
417
+ ## Internationalization (i18n)
418
+
419
+ The package includes translations for the `global` namespace in **9 languages**: `ca`, `de`, `en`, `es`, `eu`, `fr`, `gl`, `it`, `pt`.
420
+
421
+ `global.json` structure: `general`, `error`, `languages`.
422
+
423
+ Configure `i18next` pointing to `node_modules/conexys-elements/dist/language/`:
424
+
425
+ ```tsx
426
+ i18n.use(initReactI18next).init({
427
+ resources: {
428
+ es: { global: () => import('conexys-elements/dist/language/es/global.json') },
429
+ },
430
+ // ...
431
+ });
432
+ ```
433
+
434
+ ---
435
+
436
+ ## Development
437
+
438
+ ```bash
439
+ npm install # installs dependencies
440
+ npm run build # builds (rollup → CJS + ESM in dist/)
441
+ npm run type-check # type-checks without building
442
+ npm run type-check:watch
443
+ npm run lint # eslint
444
+ npm run format:check # prettier --check
445
+ npm run format:write # prettier --write
446
+ ```
447
+
448
+ The build generates in `dist/`: `index.js` (CommonJS), `index.esm.js` (ESM), sourcemaps and the `language/` folder.
449
+
450
+ ### Publishing
451
+
452
+ ```bash
453
+ npm pack # generates the .tgz to test locally
454
+ npm version patch # (or minor/major) before publishing an update
455
+ npm publish
456
+ ```
457
+
458
+ ---
459
+
460
+ ## License
461
+
462
+ MIT © Braulio Rodriguez
package/dist/Auth.d.ts CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"AppDataSettingsHTML.d.ts","sourceRoot":"","sources":["../../src/components/AppDataSettingsHTML.tsx"],"names":[],"mappings":"AASA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAGxE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAiBrF,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,IAAI,GACL,EAAE,wBAAwB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA2CrD"}
1
+ {"version":3,"file":"AppDataSettingsHTML.d.ts","sourceRoot":"","sources":["../../src/components/AppDataSettingsHTML.tsx"],"names":[],"mappings":"AASA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAGxE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAkBrF,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,IAAI,GACL,EAAE,wBAAwB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA2CrD"}
File without changes
File without changes
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import type { AppFormFieldsProps } from '../types/components/appFormFields.types';
3
- export default function AppFormFields({ children, fpHash, name, postURL, postServerURL, getServerURL, deleteServerURL, id, additionalfields, className, permission, show, feedback, method, }: AppFormFieldsProps): React.JSX.Element | null;
3
+ export default function AppFormFields({ children, fpHash, name, postURL, postServerURL, getServerURL, deleteServerURL, id, additionalfields, className, permission, show, feedback, method, allowEmptyIdFetch, }: AppFormFieldsProps): React.JSX.Element | null;
4
4
  //# sourceMappingURL=AppFormFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppFormFields.d.ts","sourceRoot":"","sources":["../../src/components/AppFormFields.tsx"],"names":[],"mappings":"AASA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAOzE,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,yCAAyC,CAAC;AAuBjD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,OAAO,EACP,aAAa,EACb,YAAY,EACZ,eAAe,EACf,EAAE,EACF,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,MAAe,GAChB,EAAE,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAoK/C"}
1
+ {"version":3,"file":"AppFormFields.d.ts","sourceRoot":"","sources":["../../src/components/AppFormFields.tsx"],"names":[],"mappings":"AASA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAOzE,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,yCAAyC,CAAC;AAuBjD,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,QAAQ,EACR,MAAM,EACN,IAAI,EACJ,OAAO,EACP,aAAa,EACb,YAAY,EACZ,eAAe,EACf,EAAE,EACF,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,MAAe,EACf,iBAAyB,GAC1B,EAAE,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAuK/C"}
File without changes
File without changes
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"AppFormFieldsNoUser.d.ts","sourceRoot":"","sources":["../../src/components/AppFormFieldsNoUser.tsx"],"names":[],"mappings":"AASA,OAAO,KAMN,MAAM,OAAO,CAAC;AAQf,OAAO,KAAK,EAIV,wBAAwB,EACzB,MAAM,+CAA+C,CAAC;AASvD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,SAAS,GACV,EAAE,wBAAwB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAyIrD"}
1
+ {"version":3,"file":"AppFormFieldsNoUser.d.ts","sourceRoot":"","sources":["../../src/components/AppFormFieldsNoUser.tsx"],"names":[],"mappings":"AASA,OAAO,KAMN,MAAM,OAAO,CAAC;AAQf,OAAO,KAAK,EAIV,wBAAwB,EACzB,MAAM,+CAA+C,CAAC;AASvD,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAC1C,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,aAAa,EACb,gBAAgB,EAChB,SAAS,GACV,EAAE,wBAAwB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA2IrD"}
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"AppFormFieldsTable.d.ts","sourceRoot":"","sources":["../../src/components/AppFormFieldsTable.tsx"],"names":[],"mappings":"AASA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAQzE,OAAO,KAAK,EAKV,uBAAuB,EACxB,MAAM,8CAA8C,CAAC;AA6BtD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,IAAI,EACJ,MAAM,EACN,OAAO,EACP,aAAa,EACb,YAAY,EACZ,eAAe,EACf,EAAE,EACF,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,IAAI,EACJ,MAAM,EACN,WAAW,GACZ,EAAE,uBAAuB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAsPpD"}
1
+ {"version":3,"file":"AppFormFieldsTable.d.ts","sourceRoot":"","sources":["../../src/components/AppFormFieldsTable.tsx"],"names":[],"mappings":"AASA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAQzE,OAAO,KAAK,EAKV,uBAAuB,EACxB,MAAM,8CAA8C,CAAC;AA6BtD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,IAAI,EACJ,MAAM,EACN,OAAO,EACP,aAAa,EACb,YAAY,EACZ,eAAe,EACf,EAAE,EACF,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,IAAI,EACJ,MAAM,EACN,WAAW,GACZ,EAAE,uBAAuB,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CA8PpD"}
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"AppHeaderPage.d.ts","sourceRoot":"","sources":["../../src/components/AppHeaderPage.tsx"],"names":[],"mappings":"AAWA,OAAO,KAMN,MAAM,OAAO,CAAC;AAkBf,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,iCAAiC,CAAC;AAYzC,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAqM/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"AppHeaderPage.d.ts","sourceRoot":"","sources":["../../src/components/AppHeaderPage.tsx"],"names":[],"mappings":"AAWA,OAAO,KAMN,MAAM,OAAO,CAAC;AAkBf,OAAO,KAAK,EACV,kBAAkB,EAEnB,MAAM,iCAAiC,CAAC;AAYzC,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA6N/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
File without changes
File without changes
File without changes
File without changes