analytica-frontend-lib 1.0.91 → 1.0.92

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 (298) hide show
  1. package/dist/Accordation/index.d.mts +12 -0
  2. package/dist/Accordation/index.d.ts +12 -1
  3. package/dist/Accordation/index.js +1 -0
  4. package/dist/Accordation/index.js.map +1 -0
  5. package/dist/Accordation/index.mjs +1 -0
  6. package/dist/Accordation/index.mjs.map +1 -0
  7. package/dist/Alert/index.d.mts +13 -0
  8. package/dist/Alert/index.d.ts +13 -1
  9. package/dist/Alert/index.js +1 -0
  10. package/dist/Alert/index.js.map +1 -0
  11. package/dist/Alert/index.mjs +1 -0
  12. package/dist/Alert/index.mjs.map +1 -0
  13. package/dist/AlertDialog/index.d.mts +36 -0
  14. package/dist/AlertDialog/index.d.ts +36 -1
  15. package/dist/AlertDialog/index.js +1 -0
  16. package/dist/AlertDialog/index.js.map +1 -0
  17. package/dist/AlertDialog/index.mjs +1 -0
  18. package/dist/AlertDialog/index.mjs.map +1 -0
  19. package/dist/Alternative/index.d.mts +81 -0
  20. package/dist/Alternative/index.d.ts +81 -1
  21. package/dist/Alternative/index.js +1 -0
  22. package/dist/Alternative/index.js.map +1 -0
  23. package/dist/Alternative/index.mjs +1 -0
  24. package/dist/Alternative/index.mjs.map +1 -0
  25. package/dist/Auth/AuthProvider/index.d.mts +3 -0
  26. package/dist/Auth/AuthProvider/index.d.ts +3 -1
  27. package/dist/Auth/AuthProvider/index.js +1 -0
  28. package/dist/Auth/AuthProvider/index.js.map +1 -0
  29. package/dist/Auth/AuthProvider/index.mjs +1 -0
  30. package/dist/Auth/AuthProvider/index.mjs.map +1 -0
  31. package/dist/Auth/ProtectedRoute/index.d.mts +3 -0
  32. package/dist/Auth/ProtectedRoute/index.d.ts +3 -1
  33. package/dist/Auth/ProtectedRoute/index.js +1 -0
  34. package/dist/Auth/ProtectedRoute/index.js.map +1 -0
  35. package/dist/Auth/ProtectedRoute/index.mjs +1 -0
  36. package/dist/Auth/ProtectedRoute/index.mjs.map +1 -0
  37. package/dist/Auth/PublicRoute/index.d.mts +3 -0
  38. package/dist/Auth/PublicRoute/index.d.ts +3 -1
  39. package/dist/Auth/PublicRoute/index.js +1 -0
  40. package/dist/Auth/PublicRoute/index.js.map +1 -0
  41. package/dist/Auth/PublicRoute/index.mjs +1 -0
  42. package/dist/Auth/PublicRoute/index.mjs.map +1 -0
  43. package/dist/Auth/getRootDomain/index.d.mts +3 -0
  44. package/dist/Auth/getRootDomain/index.d.ts +3 -1
  45. package/dist/Auth/getRootDomain/index.js +1 -0
  46. package/dist/Auth/getRootDomain/index.js.map +1 -0
  47. package/dist/Auth/getRootDomain/index.mjs +1 -0
  48. package/dist/Auth/getRootDomain/index.mjs.map +1 -0
  49. package/dist/Auth/index.d.mts +312 -0
  50. package/dist/Auth/index.d.ts +312 -1
  51. package/dist/Auth/index.js +1 -0
  52. package/dist/Auth/index.js.map +1 -0
  53. package/dist/Auth/index.mjs +1 -0
  54. package/dist/Auth/index.mjs.map +1 -0
  55. package/dist/Auth/useApiConfig/index.d.mts +43 -0
  56. package/dist/Auth/useApiConfig/index.d.ts +43 -1
  57. package/dist/Auth/useApiConfig/index.js +1 -0
  58. package/dist/Auth/useApiConfig/index.js.map +1 -0
  59. package/dist/Auth/useApiConfig/index.mjs +1 -0
  60. package/dist/Auth/useApiConfig/index.mjs.map +1 -0
  61. package/dist/Auth/useAuth/index.d.mts +3 -0
  62. package/dist/Auth/useAuth/index.d.ts +3 -1
  63. package/dist/Auth/useAuth/index.js +1 -0
  64. package/dist/Auth/useAuth/index.js.map +1 -0
  65. package/dist/Auth/useAuth/index.mjs +1 -0
  66. package/dist/Auth/useAuth/index.mjs.map +1 -0
  67. package/dist/Auth/useAuthGuard/index.d.mts +3 -0
  68. package/dist/Auth/useAuthGuard/index.d.ts +3 -1
  69. package/dist/Auth/useAuthGuard/index.js +1 -0
  70. package/dist/Auth/useAuthGuard/index.js.map +1 -0
  71. package/dist/Auth/useAuthGuard/index.mjs +1 -0
  72. package/dist/Auth/useAuthGuard/index.mjs.map +1 -0
  73. package/dist/Auth/useRouteAuth/index.d.mts +3 -0
  74. package/dist/Auth/useRouteAuth/index.d.ts +3 -1
  75. package/dist/Auth/useRouteAuth/index.js +1 -0
  76. package/dist/Auth/useRouteAuth/index.js.map +1 -0
  77. package/dist/Auth/useRouteAuth/index.mjs +1 -0
  78. package/dist/Auth/useRouteAuth/index.mjs.map +1 -0
  79. package/dist/Auth/useUrlAuthentication/index.d.mts +58 -0
  80. package/dist/Auth/useUrlAuthentication/index.d.ts +58 -1
  81. package/dist/Auth/useUrlAuthentication/index.js +1 -0
  82. package/dist/Auth/useUrlAuthentication/index.js.map +1 -0
  83. package/dist/Auth/useUrlAuthentication/index.mjs +1 -0
  84. package/dist/Auth/useUrlAuthentication/index.mjs.map +1 -0
  85. package/dist/Auth/withAuth/index.d.mts +3 -0
  86. package/dist/Auth/withAuth/index.d.ts +3 -1
  87. package/dist/Auth/withAuth/index.js +1 -0
  88. package/dist/Auth/withAuth/index.js.map +1 -0
  89. package/dist/Auth/withAuth/index.mjs +1 -0
  90. package/dist/Auth/withAuth/index.mjs.map +1 -0
  91. package/dist/Auth/zustandAuthAdapter/index.d.mts +75 -0
  92. package/dist/Auth/zustandAuthAdapter/index.d.ts +75 -1
  93. package/dist/Auth/zustandAuthAdapter/index.js +1 -0
  94. package/dist/Auth/zustandAuthAdapter/index.js.map +1 -0
  95. package/dist/Auth/zustandAuthAdapter/index.mjs +1 -0
  96. package/dist/Auth/zustandAuthAdapter/index.mjs.map +1 -0
  97. package/dist/Badge/index.d.mts +46 -0
  98. package/dist/Badge/index.d.ts +46 -1
  99. package/dist/Badge/index.js +1 -0
  100. package/dist/Badge/index.js.map +1 -0
  101. package/dist/Badge/index.mjs +1 -0
  102. package/dist/Badge/index.mjs.map +1 -0
  103. package/dist/Button/index.d.mts +45 -0
  104. package/dist/Button/index.d.ts +45 -1
  105. package/dist/Button/index.js +1 -0
  106. package/dist/Button/index.js.map +1 -0
  107. package/dist/Button/index.mjs +1 -0
  108. package/dist/Button/index.mjs.map +1 -0
  109. package/dist/Calendar/index.d.mts +60 -0
  110. package/dist/Calendar/index.d.ts +60 -1
  111. package/dist/Calendar/index.js +1 -0
  112. package/dist/Calendar/index.js.map +1 -0
  113. package/dist/Calendar/index.mjs +1 -0
  114. package/dist/Calendar/index.mjs.map +1 -0
  115. package/dist/Card/index.d.mts +150 -0
  116. package/dist/Card/index.d.ts +150 -1
  117. package/dist/Card/index.js +1 -0
  118. package/dist/Card/index.js.map +1 -0
  119. package/dist/Card/index.mjs +1 -0
  120. package/dist/Card/index.mjs.map +1 -0
  121. package/dist/CheckBox/index.d.mts +74 -0
  122. package/dist/CheckBox/index.d.ts +74 -1
  123. package/dist/CheckBox/index.js +1 -0
  124. package/dist/CheckBox/index.js.map +1 -0
  125. package/dist/CheckBox/index.mjs +1 -0
  126. package/dist/CheckBox/index.mjs.map +1 -0
  127. package/dist/Chips/index.d.mts +41 -0
  128. package/dist/Chips/index.d.ts +41 -1
  129. package/dist/Chips/index.js +1 -0
  130. package/dist/Chips/index.js.map +1 -0
  131. package/dist/Chips/index.mjs +1 -0
  132. package/dist/Chips/index.mjs.map +1 -0
  133. package/dist/Divider/index.d.mts +32 -0
  134. package/dist/Divider/index.d.ts +32 -1
  135. package/dist/Divider/index.js +1 -0
  136. package/dist/Divider/index.js.map +1 -0
  137. package/dist/Divider/index.mjs +1 -0
  138. package/dist/Divider/index.mjs.map +1 -0
  139. package/dist/DropdownMenu/index.d.mts +68 -0
  140. package/dist/DropdownMenu/index.d.ts +68 -1
  141. package/dist/DropdownMenu/index.js +1 -0
  142. package/dist/DropdownMenu/index.js.map +1 -0
  143. package/dist/DropdownMenu/index.mjs +1 -0
  144. package/dist/DropdownMenu/index.mjs.map +1 -0
  145. package/dist/IconButton/index.d.mts +76 -0
  146. package/dist/IconButton/index.d.ts +76 -1
  147. package/dist/IconButton/index.js +1 -0
  148. package/dist/IconButton/index.js.map +1 -0
  149. package/dist/IconButton/index.mjs +1 -0
  150. package/dist/IconButton/index.mjs.map +1 -0
  151. package/dist/IconRoundedButton/index.d.mts +34 -0
  152. package/dist/IconRoundedButton/index.d.ts +34 -1
  153. package/dist/IconRoundedButton/index.js +1 -0
  154. package/dist/IconRoundedButton/index.js.map +1 -0
  155. package/dist/IconRoundedButton/index.mjs +1 -0
  156. package/dist/IconRoundedButton/index.mjs.map +1 -0
  157. package/dist/Input/index.d.mts +27 -0
  158. package/dist/Input/index.d.ts +27 -1
  159. package/dist/Input/index.js +1 -0
  160. package/dist/Input/index.js.map +1 -0
  161. package/dist/Input/index.mjs +1 -0
  162. package/dist/Input/index.mjs.map +1 -0
  163. package/dist/Menu/index.d.mts +48 -0
  164. package/dist/Menu/index.d.ts +48 -1
  165. package/dist/Menu/index.js +1 -0
  166. package/dist/Menu/index.js.map +1 -0
  167. package/dist/Menu/index.mjs +1 -0
  168. package/dist/Menu/index.mjs.map +1 -0
  169. package/dist/Modal/index.d.mts +66 -0
  170. package/dist/Modal/index.d.ts +66 -1
  171. package/dist/Modal/index.js +1 -0
  172. package/dist/Modal/index.js.map +1 -0
  173. package/dist/Modal/index.mjs +1 -0
  174. package/dist/Modal/index.mjs.map +1 -0
  175. package/dist/MultipleChoice/index.d.mts +20 -0
  176. package/dist/MultipleChoice/index.d.ts +20 -1
  177. package/dist/MultipleChoice/index.js +1 -0
  178. package/dist/MultipleChoice/index.js.map +1 -0
  179. package/dist/MultipleChoice/index.mjs +1 -0
  180. package/dist/MultipleChoice/index.mjs.map +1 -0
  181. package/dist/NavButton/index.d.mts +57 -0
  182. package/dist/NavButton/index.d.ts +57 -1
  183. package/dist/NavButton/index.js +1 -0
  184. package/dist/NavButton/index.js.map +1 -0
  185. package/dist/NavButton/index.mjs +1 -0
  186. package/dist/NavButton/index.mjs.map +1 -0
  187. package/dist/NotFound/index.d.mts +58 -0
  188. package/dist/NotFound/index.d.ts +58 -1
  189. package/dist/NotFound/index.js +1 -0
  190. package/dist/NotFound/index.js.map +1 -0
  191. package/dist/NotFound/index.mjs +1 -0
  192. package/dist/NotFound/index.mjs.map +1 -0
  193. package/dist/ProgressBar/index.d.mts +95 -0
  194. package/dist/ProgressBar/index.d.ts +95 -1
  195. package/dist/ProgressBar/index.js +1 -0
  196. package/dist/ProgressBar/index.js.map +1 -0
  197. package/dist/ProgressBar/index.mjs +1 -0
  198. package/dist/ProgressBar/index.mjs.map +1 -0
  199. package/dist/ProgressCircle/index.d.mts +60 -0
  200. package/dist/ProgressCircle/index.d.ts +60 -1
  201. package/dist/ProgressCircle/index.js +1 -0
  202. package/dist/ProgressCircle/index.js.map +1 -0
  203. package/dist/ProgressCircle/index.mjs +1 -0
  204. package/dist/ProgressCircle/index.mjs.map +1 -0
  205. package/dist/Quiz/index.d.mts +57 -0
  206. package/dist/Quiz/index.d.ts +57 -1
  207. package/dist/Quiz/index.js +3 -2
  208. package/dist/Quiz/index.js.map +1 -0
  209. package/dist/Quiz/index.mjs +3 -2
  210. package/dist/Quiz/index.mjs.map +1 -0
  211. package/dist/Quiz/useQuizStore/index.d.mts +139 -0
  212. package/dist/Quiz/useQuizStore/index.d.ts +139 -1
  213. package/dist/Quiz/useQuizStore/index.js +1 -0
  214. package/dist/Quiz/useQuizStore/index.js.map +1 -0
  215. package/dist/Quiz/useQuizStore/index.mjs +1 -0
  216. package/dist/Quiz/useQuizStore/index.mjs.map +1 -0
  217. package/dist/Radio/index.d.mts +203 -0
  218. package/dist/Radio/index.d.ts +203 -1
  219. package/dist/Radio/index.js +1 -0
  220. package/dist/Radio/index.js.map +1 -0
  221. package/dist/Radio/index.mjs +1 -0
  222. package/dist/Radio/index.mjs.map +1 -0
  223. package/dist/Select/index.d.mts +58 -0
  224. package/dist/Select/index.d.ts +58 -1
  225. package/dist/Select/index.js +1 -0
  226. package/dist/Select/index.js.map +1 -0
  227. package/dist/Select/index.mjs +1 -0
  228. package/dist/Select/index.mjs.map +1 -0
  229. package/dist/SelectionButton/index.d.mts +57 -0
  230. package/dist/SelectionButton/index.d.ts +57 -1
  231. package/dist/SelectionButton/index.js +1 -0
  232. package/dist/SelectionButton/index.js.map +1 -0
  233. package/dist/SelectionButton/index.mjs +1 -0
  234. package/dist/SelectionButton/index.mjs.map +1 -0
  235. package/dist/Skeleton/index.d.mts +40 -0
  236. package/dist/Skeleton/index.d.ts +40 -1
  237. package/dist/Skeleton/index.js +1 -0
  238. package/dist/Skeleton/index.js.map +1 -0
  239. package/dist/Skeleton/index.mjs +1 -0
  240. package/dist/Skeleton/index.mjs.map +1 -0
  241. package/dist/Stepper/index.d.mts +169 -0
  242. package/dist/Stepper/index.d.ts +169 -1
  243. package/dist/Stepper/index.js +1 -0
  244. package/dist/Stepper/index.js.map +1 -0
  245. package/dist/Stepper/index.mjs +1 -0
  246. package/dist/Stepper/index.mjs.map +1 -0
  247. package/dist/Table/index.d.mts +17 -0
  248. package/dist/Table/index.d.ts +17 -1
  249. package/dist/Table/index.js +1 -0
  250. package/dist/Table/index.js.map +1 -0
  251. package/dist/Table/index.mjs +1 -0
  252. package/dist/Table/index.mjs.map +1 -0
  253. package/dist/Text/index.d.mts +58 -0
  254. package/dist/Text/index.d.ts +58 -1
  255. package/dist/Text/index.js +1 -0
  256. package/dist/Text/index.js.map +1 -0
  257. package/dist/Text/index.mjs +1 -0
  258. package/dist/Text/index.mjs.map +1 -0
  259. package/dist/TextArea/index.d.mts +70 -0
  260. package/dist/TextArea/index.d.ts +70 -1
  261. package/dist/TextArea/index.js +1 -0
  262. package/dist/TextArea/index.js.map +1 -0
  263. package/dist/TextArea/index.mjs +1 -0
  264. package/dist/TextArea/index.mjs.map +1 -0
  265. package/dist/Toast/ToastStore/index.d.mts +19 -0
  266. package/dist/Toast/ToastStore/index.d.ts +19 -1
  267. package/dist/Toast/ToastStore/index.js +1 -0
  268. package/dist/Toast/ToastStore/index.js.map +1 -0
  269. package/dist/Toast/ToastStore/index.mjs +1 -0
  270. package/dist/Toast/ToastStore/index.mjs.map +1 -0
  271. package/dist/Toast/Toaster/index.d.mts +16 -0
  272. package/dist/Toast/Toaster/index.d.ts +16 -1
  273. package/dist/Toast/Toaster/index.js +1 -0
  274. package/dist/Toast/Toaster/index.js.map +1 -0
  275. package/dist/Toast/Toaster/index.mjs +1 -0
  276. package/dist/Toast/Toaster/index.mjs.map +1 -0
  277. package/dist/Toast/index.d.mts +17 -0
  278. package/dist/Toast/index.d.ts +17 -1
  279. package/dist/Toast/index.js +1 -0
  280. package/dist/Toast/index.js.map +1 -0
  281. package/dist/Toast/index.mjs +1 -0
  282. package/dist/Toast/index.mjs.map +1 -0
  283. package/dist/index.css +5 -4
  284. package/dist/index.css.map +1 -0
  285. package/dist/index.d.mts +42 -2142
  286. package/dist/index.d.ts +42 -2142
  287. package/dist/index.js +3 -23
  288. package/dist/index.js.map +1 -0
  289. package/dist/index.mjs +3 -20
  290. package/dist/index.mjs.map +1 -0
  291. package/dist/styles.css +5 -4
  292. package/dist/styles.css.map +1 -0
  293. package/dist/styles.d.mts +2 -0
  294. package/dist/styles.d.ts +2 -0
  295. package/package.json +4 -5
  296. package/dist/CheckBox/CheckboxList/index.d.ts +0 -1
  297. package/dist/CheckBox/CheckboxList/index.js +0 -429
  298. package/dist/CheckBox/CheckboxList/index.mjs +0 -415
@@ -1 +1,58 @@
1
- export * from '../../index';
1
+ /**
2
+ * Options interface for the useUrlAuthentication hook
3
+ *
4
+ * @template Tokens - Type for authentication tokens
5
+ * @template Session - Type for session information
6
+ * @template Profile - Type for profile information
7
+ *
8
+ * @interface UseUrlAuthOptions
9
+ * @property {(tokens: Tokens) => void} setTokens - Function to set authentication tokens
10
+ * @property {(session: Session) => void} setSessionInfo - Function to set session information
11
+ * @property {(profile: Profile) => void} [setSelectedProfile] - Optional function to set selected profile
12
+ * @property {object} api - API instance with get method
13
+ * @property {(endpoint: string, config: unknown) => Promise<unknown>} api.get - API get method
14
+ * @property {string} endpoint - API endpoint to fetch session data
15
+ * @property {(searchParams: URLSearchParams) => object} [extractParams] - Custom parameter extraction function
16
+ * @property {() => void} [clearParamsFromURL] - Function to clear URL parameters after processing
17
+ */
18
+ interface UseUrlAuthOptions<Tokens = unknown, Session = unknown, Profile = unknown> {
19
+ setTokens: (tokens: Tokens) => void;
20
+ setSessionInfo: (session: Session) => void;
21
+ setSelectedProfile?: (profile: Profile) => void;
22
+ api: {
23
+ get: (endpoint: string, config: unknown) => Promise<unknown>;
24
+ };
25
+ endpoint: string;
26
+ extractParams?: (searchParams: URLSearchParams) => {
27
+ sessionId: string;
28
+ token: string;
29
+ refreshToken: string;
30
+ };
31
+ clearParamsFromURL?: () => void;
32
+ }
33
+ /**
34
+ * Hook for handling URL-based authentication
35
+ * Extracts authentication parameters from URL and processes them
36
+ *
37
+ * @template Tokens - Type for authentication tokens
38
+ * @template Session - Type for session information
39
+ * @template Profile - Type for profile information
40
+ *
41
+ * @param {UseUrlAuthOptions<Tokens, Session, Profile>} options - Configuration options
42
+ * @returns {void}
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * useUrlAuthentication({
47
+ * setTokens: (tokens) => authStore.setTokens(tokens),
48
+ * setSessionInfo: (session) => authStore.setSessionInfo(session),
49
+ * setSelectedProfile: (profile) => authStore.setProfile(profile),
50
+ * api: apiInstance,
51
+ * endpoint: '/auth/session',
52
+ * clearParamsFromURL: () => navigate('/', { replace: true })
53
+ * });
54
+ * ```
55
+ */
56
+ declare function useUrlAuthentication<Tokens = unknown, Session = unknown, Profile = unknown>(options: UseUrlAuthOptions<Tokens, Session, Profile>): void;
57
+
58
+ export { type UseUrlAuthOptions, useUrlAuthentication };
@@ -91,3 +91,4 @@ function useUrlAuthentication(options) {
91
91
  0 && (module.exports = {
92
92
  useUrlAuthentication
93
93
  });
94
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Auth/useUrlAuthentication.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\n/**\n * Options interface for the useUrlAuthentication hook\n *\n * @template Tokens - Type for authentication tokens\n * @template Session - Type for session information\n * @template Profile - Type for profile information\n *\n * @interface UseUrlAuthOptions\n * @property {(tokens: Tokens) => void} setTokens - Function to set authentication tokens\n * @property {(session: Session) => void} setSessionInfo - Function to set session information\n * @property {(profile: Profile) => void} [setSelectedProfile] - Optional function to set selected profile\n * @property {object} api - API instance with get method\n * @property {(endpoint: string, config: unknown) => Promise<unknown>} api.get - API get method\n * @property {string} endpoint - API endpoint to fetch session data\n * @property {(searchParams: URLSearchParams) => object} [extractParams] - Custom parameter extraction function\n * @property {() => void} [clearParamsFromURL] - Function to clear URL parameters after processing\n */\nexport interface UseUrlAuthOptions<\n Tokens = unknown,\n Session = unknown,\n Profile = unknown,\n> {\n setTokens: (tokens: Tokens) => void;\n setSessionInfo: (session: Session) => void;\n setSelectedProfile?: (profile: Profile) => void;\n api: { get: (endpoint: string, config: unknown) => Promise<unknown> };\n endpoint: string;\n extractParams?: (searchParams: URLSearchParams) => {\n sessionId: string;\n token: string;\n refreshToken: string;\n };\n clearParamsFromURL?: () => void;\n}\n\n/**\n * Helper function to extract authentication parameters from URL\n *\n * @param {object} location - Location object with search property\n * @param {string} location.search - URL search string\n * @param {function} [extractParams] - Custom parameter extraction function\n * @returns {object} Object with sessionId, token, and refreshToken\n *\n * @private\n */\nconst getAuthParams = (\n location: { search: string },\n extractParams?: (searchParams: URLSearchParams) => {\n sessionId: string;\n token: string;\n refreshToken: string;\n }\n) => {\n const searchParams = new URLSearchParams(location.search);\n return extractParams\n ? extractParams(searchParams)\n : {\n sessionId: searchParams.get('sessionId'),\n token: searchParams.get('token'),\n refreshToken: searchParams.get('refreshToken'),\n };\n};\n\n/**\n * Helper function to validate authentication parameters\n *\n * @param {object} authParams - Authentication parameters object\n * @param {string | null} authParams.sessionId - Session ID from URL\n * @param {string | null} authParams.token - Authentication token from URL\n * @param {string | null} authParams.refreshToken - Refresh token from URL\n * @returns {boolean} True if all required parameters are present\n *\n * @private\n */\nconst hasValidAuthParams = (authParams: {\n sessionId: string | null;\n token: string | null;\n refreshToken: string | null;\n}) => {\n return !!(\n authParams?.sessionId &&\n authParams?.token &&\n authParams?.refreshToken\n );\n};\n\n/**\n * Helper function to check if response has valid profile data\n *\n * @param {unknown} data - Response data to validate\n * @returns {data is Record<string, unknown>} Type guard for valid profile data\n *\n * @private\n */\nconst hasValidProfileData = (\n data: unknown\n): data is Record<string, unknown> => {\n return data !== null && typeof data === 'object' && data !== undefined;\n};\n\n/**\n * Helper function to handle profile selection from response data\n *\n * @template Profile - Profile type\n * @param {unknown} responseData - Response data from API\n * @param {(profile: Profile) => void} [setSelectedProfile] - Optional function to set selected profile\n * @returns {void}\n *\n * @private\n */\nconst handleProfileSelection = <Profile>(\n responseData: unknown,\n setSelectedProfile?: (profile: Profile) => void\n) => {\n if (!setSelectedProfile) return;\n if (!hasValidProfileData(responseData)) return;\n\n const profileId = responseData.profileId;\n const isValidProfileId = profileId !== null && profileId !== undefined;\n\n if (isValidProfileId) {\n setSelectedProfile({\n id: profileId,\n } as Profile);\n }\n};\n\n/**\n * Hook for handling URL-based authentication\n * Extracts authentication parameters from URL and processes them\n *\n * @template Tokens - Type for authentication tokens\n * @template Session - Type for session information\n * @template Profile - Type for profile information\n *\n * @param {UseUrlAuthOptions<Tokens, Session, Profile>} options - Configuration options\n * @returns {void}\n *\n * @example\n * ```typescript\n * useUrlAuthentication({\n * setTokens: (tokens) => authStore.setTokens(tokens),\n * setSessionInfo: (session) => authStore.setSessionInfo(session),\n * setSelectedProfile: (profile) => authStore.setProfile(profile),\n * api: apiInstance,\n * endpoint: '/auth/session',\n * clearParamsFromURL: () => navigate('/', { replace: true })\n * });\n * ```\n */\nexport function useUrlAuthentication<\n Tokens = unknown,\n Session = unknown,\n Profile = unknown,\n>(options: UseUrlAuthOptions<Tokens, Session, Profile>) {\n const location = useLocation();\n\n useEffect(() => {\n /**\n * Main authentication handler that processes URL parameters\n *\n * @returns {Promise<void>}\n * @private\n */\n const handleAuthentication = async () => {\n const authParams = getAuthParams(location, options.extractParams);\n\n if (!hasValidAuthParams(authParams)) {\n return;\n }\n\n try {\n options.setTokens({\n token: authParams.token,\n refreshToken: authParams.refreshToken,\n } as Tokens);\n\n const response = (await options.api.get(options.endpoint, {\n headers: {\n Authorization: `Bearer ${authParams.token}`,\n },\n })) as { data: { data: unknown; [key: string]: unknown } };\n\n options.setSessionInfo(response.data.data as Session);\n handleProfileSelection(response.data.data, options.setSelectedProfile);\n options.clearParamsFromURL?.();\n } catch (error) {\n console.error('Erro ao obter informações da sessão:', error);\n }\n };\n\n handleAuthentication();\n }, [\n location.search,\n options.setSessionInfo,\n options.setSelectedProfile,\n options.setTokens,\n options.api,\n options.endpoint,\n options.extractParams,\n options.clearParamsFromURL,\n ]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA0B;AAC1B,8BAA4B;AA+C5B,IAAM,gBAAgB,CACpB,UACA,kBAKG;AACH,QAAM,eAAe,IAAI,gBAAgB,SAAS,MAAM;AACxD,SAAO,gBACH,cAAc,YAAY,IAC1B;AAAA,IACE,WAAW,aAAa,IAAI,WAAW;AAAA,IACvC,OAAO,aAAa,IAAI,OAAO;AAAA,IAC/B,cAAc,aAAa,IAAI,cAAc;AAAA,EAC/C;AACN;AAaA,IAAM,qBAAqB,CAAC,eAItB;AACJ,SAAO,CAAC,EACN,YAAY,aACZ,YAAY,SACZ,YAAY;AAEhB;AAUA,IAAM,sBAAsB,CAC1B,SACoC;AACpC,SAAO,SAAS,QAAQ,OAAO,SAAS,YAAY,SAAS;AAC/D;AAYA,IAAM,yBAAyB,CAC7B,cACA,uBACG;AACH,MAAI,CAAC,mBAAoB;AACzB,MAAI,CAAC,oBAAoB,YAAY,EAAG;AAExC,QAAM,YAAY,aAAa;AAC/B,QAAM,mBAAmB,cAAc,QAAQ,cAAc;AAE7D,MAAI,kBAAkB;AACpB,uBAAmB;AAAA,MACjB,IAAI;AAAA,IACN,CAAY;AAAA,EACd;AACF;AAyBO,SAAS,qBAId,SAAsD;AACtD,QAAM,eAAW,qCAAY;AAE7B,8BAAU,MAAM;AAOd,UAAM,uBAAuB,YAAY;AACvC,YAAM,aAAa,cAAc,UAAU,QAAQ,aAAa;AAEhE,UAAI,CAAC,mBAAmB,UAAU,GAAG;AACnC;AAAA,MACF;AAEA,UAAI;AACF,gBAAQ,UAAU;AAAA,UAChB,OAAO,WAAW;AAAA,UAClB,cAAc,WAAW;AAAA,QAC3B,CAAW;AAEX,cAAM,WAAY,MAAM,QAAQ,IAAI,IAAI,QAAQ,UAAU;AAAA,UACxD,SAAS;AAAA,YACP,eAAe,UAAU,WAAW,KAAK;AAAA,UAC3C;AAAA,QACF,CAAC;AAED,gBAAQ,eAAe,SAAS,KAAK,IAAe;AACpD,+BAAuB,SAAS,KAAK,MAAM,QAAQ,kBAAkB;AACrE,gBAAQ,qBAAqB;AAAA,MAC/B,SAAS,OAAO;AACd,gBAAQ,MAAM,iDAAwC,KAAK;AAAA,MAC7D;AAAA,IACF;AAEA,yBAAqB;AAAA,EACvB,GAAG;AAAA,IACD,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AACH;","names":[]}
@@ -66,3 +66,4 @@ function useUrlAuthentication(options) {
66
66
  export {
67
67
  useUrlAuthentication
68
68
  };
69
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Auth/useUrlAuthentication.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { useLocation } from 'react-router-dom';\n\n/**\n * Options interface for the useUrlAuthentication hook\n *\n * @template Tokens - Type for authentication tokens\n * @template Session - Type for session information\n * @template Profile - Type for profile information\n *\n * @interface UseUrlAuthOptions\n * @property {(tokens: Tokens) => void} setTokens - Function to set authentication tokens\n * @property {(session: Session) => void} setSessionInfo - Function to set session information\n * @property {(profile: Profile) => void} [setSelectedProfile] - Optional function to set selected profile\n * @property {object} api - API instance with get method\n * @property {(endpoint: string, config: unknown) => Promise<unknown>} api.get - API get method\n * @property {string} endpoint - API endpoint to fetch session data\n * @property {(searchParams: URLSearchParams) => object} [extractParams] - Custom parameter extraction function\n * @property {() => void} [clearParamsFromURL] - Function to clear URL parameters after processing\n */\nexport interface UseUrlAuthOptions<\n Tokens = unknown,\n Session = unknown,\n Profile = unknown,\n> {\n setTokens: (tokens: Tokens) => void;\n setSessionInfo: (session: Session) => void;\n setSelectedProfile?: (profile: Profile) => void;\n api: { get: (endpoint: string, config: unknown) => Promise<unknown> };\n endpoint: string;\n extractParams?: (searchParams: URLSearchParams) => {\n sessionId: string;\n token: string;\n refreshToken: string;\n };\n clearParamsFromURL?: () => void;\n}\n\n/**\n * Helper function to extract authentication parameters from URL\n *\n * @param {object} location - Location object with search property\n * @param {string} location.search - URL search string\n * @param {function} [extractParams] - Custom parameter extraction function\n * @returns {object} Object with sessionId, token, and refreshToken\n *\n * @private\n */\nconst getAuthParams = (\n location: { search: string },\n extractParams?: (searchParams: URLSearchParams) => {\n sessionId: string;\n token: string;\n refreshToken: string;\n }\n) => {\n const searchParams = new URLSearchParams(location.search);\n return extractParams\n ? extractParams(searchParams)\n : {\n sessionId: searchParams.get('sessionId'),\n token: searchParams.get('token'),\n refreshToken: searchParams.get('refreshToken'),\n };\n};\n\n/**\n * Helper function to validate authentication parameters\n *\n * @param {object} authParams - Authentication parameters object\n * @param {string | null} authParams.sessionId - Session ID from URL\n * @param {string | null} authParams.token - Authentication token from URL\n * @param {string | null} authParams.refreshToken - Refresh token from URL\n * @returns {boolean} True if all required parameters are present\n *\n * @private\n */\nconst hasValidAuthParams = (authParams: {\n sessionId: string | null;\n token: string | null;\n refreshToken: string | null;\n}) => {\n return !!(\n authParams?.sessionId &&\n authParams?.token &&\n authParams?.refreshToken\n );\n};\n\n/**\n * Helper function to check if response has valid profile data\n *\n * @param {unknown} data - Response data to validate\n * @returns {data is Record<string, unknown>} Type guard for valid profile data\n *\n * @private\n */\nconst hasValidProfileData = (\n data: unknown\n): data is Record<string, unknown> => {\n return data !== null && typeof data === 'object' && data !== undefined;\n};\n\n/**\n * Helper function to handle profile selection from response data\n *\n * @template Profile - Profile type\n * @param {unknown} responseData - Response data from API\n * @param {(profile: Profile) => void} [setSelectedProfile] - Optional function to set selected profile\n * @returns {void}\n *\n * @private\n */\nconst handleProfileSelection = <Profile>(\n responseData: unknown,\n setSelectedProfile?: (profile: Profile) => void\n) => {\n if (!setSelectedProfile) return;\n if (!hasValidProfileData(responseData)) return;\n\n const profileId = responseData.profileId;\n const isValidProfileId = profileId !== null && profileId !== undefined;\n\n if (isValidProfileId) {\n setSelectedProfile({\n id: profileId,\n } as Profile);\n }\n};\n\n/**\n * Hook for handling URL-based authentication\n * Extracts authentication parameters from URL and processes them\n *\n * @template Tokens - Type for authentication tokens\n * @template Session - Type for session information\n * @template Profile - Type for profile information\n *\n * @param {UseUrlAuthOptions<Tokens, Session, Profile>} options - Configuration options\n * @returns {void}\n *\n * @example\n * ```typescript\n * useUrlAuthentication({\n * setTokens: (tokens) => authStore.setTokens(tokens),\n * setSessionInfo: (session) => authStore.setSessionInfo(session),\n * setSelectedProfile: (profile) => authStore.setProfile(profile),\n * api: apiInstance,\n * endpoint: '/auth/session',\n * clearParamsFromURL: () => navigate('/', { replace: true })\n * });\n * ```\n */\nexport function useUrlAuthentication<\n Tokens = unknown,\n Session = unknown,\n Profile = unknown,\n>(options: UseUrlAuthOptions<Tokens, Session, Profile>) {\n const location = useLocation();\n\n useEffect(() => {\n /**\n * Main authentication handler that processes URL parameters\n *\n * @returns {Promise<void>}\n * @private\n */\n const handleAuthentication = async () => {\n const authParams = getAuthParams(location, options.extractParams);\n\n if (!hasValidAuthParams(authParams)) {\n return;\n }\n\n try {\n options.setTokens({\n token: authParams.token,\n refreshToken: authParams.refreshToken,\n } as Tokens);\n\n const response = (await options.api.get(options.endpoint, {\n headers: {\n Authorization: `Bearer ${authParams.token}`,\n },\n })) as { data: { data: unknown; [key: string]: unknown } };\n\n options.setSessionInfo(response.data.data as Session);\n handleProfileSelection(response.data.data, options.setSelectedProfile);\n options.clearParamsFromURL?.();\n } catch (error) {\n console.error('Erro ao obter informações da sessão:', error);\n }\n };\n\n handleAuthentication();\n }, [\n location.search,\n options.setSessionInfo,\n options.setSelectedProfile,\n options.setTokens,\n options.api,\n options.endpoint,\n options.extractParams,\n options.clearParamsFromURL,\n ]);\n}\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AA+C5B,IAAM,gBAAgB,CACpB,UACA,kBAKG;AACH,QAAM,eAAe,IAAI,gBAAgB,SAAS,MAAM;AACxD,SAAO,gBACH,cAAc,YAAY,IAC1B;AAAA,IACE,WAAW,aAAa,IAAI,WAAW;AAAA,IACvC,OAAO,aAAa,IAAI,OAAO;AAAA,IAC/B,cAAc,aAAa,IAAI,cAAc;AAAA,EAC/C;AACN;AAaA,IAAM,qBAAqB,CAAC,eAItB;AACJ,SAAO,CAAC,EACN,YAAY,aACZ,YAAY,SACZ,YAAY;AAEhB;AAUA,IAAM,sBAAsB,CAC1B,SACoC;AACpC,SAAO,SAAS,QAAQ,OAAO,SAAS,YAAY,SAAS;AAC/D;AAYA,IAAM,yBAAyB,CAC7B,cACA,uBACG;AACH,MAAI,CAAC,mBAAoB;AACzB,MAAI,CAAC,oBAAoB,YAAY,EAAG;AAExC,QAAM,YAAY,aAAa;AAC/B,QAAM,mBAAmB,cAAc,QAAQ,cAAc;AAE7D,MAAI,kBAAkB;AACpB,uBAAmB;AAAA,MACjB,IAAI;AAAA,IACN,CAAY;AAAA,EACd;AACF;AAyBO,SAAS,qBAId,SAAsD;AACtD,QAAM,WAAW,YAAY;AAE7B,YAAU,MAAM;AAOd,UAAM,uBAAuB,YAAY;AACvC,YAAM,aAAa,cAAc,UAAU,QAAQ,aAAa;AAEhE,UAAI,CAAC,mBAAmB,UAAU,GAAG;AACnC;AAAA,MACF;AAEA,UAAI;AACF,gBAAQ,UAAU;AAAA,UAChB,OAAO,WAAW;AAAA,UAClB,cAAc,WAAW;AAAA,QAC3B,CAAW;AAEX,cAAM,WAAY,MAAM,QAAQ,IAAI,IAAI,QAAQ,UAAU;AAAA,UACxD,SAAS;AAAA,YACP,eAAe,UAAU,WAAW,KAAK;AAAA,UAC3C;AAAA,QACF,CAAC;AAED,gBAAQ,eAAe,SAAS,KAAK,IAAe;AACpD,+BAAuB,SAAS,KAAK,MAAM,QAAQ,kBAAkB;AACrE,gBAAQ,qBAAqB;AAAA,MAC/B,SAAS,OAAO;AACd,gBAAQ,MAAM,iDAAwC,KAAK;AAAA,MAC7D;AAAA,IACF;AAEA,yBAAqB;AAAA,EACvB,GAAG;AAAA,IACD,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV,CAAC;AACH;","names":[]}
@@ -0,0 +1,3 @@
1
+ import 'react/jsx-runtime';
2
+ import 'react';
3
+ export { AuthContextType, AuthProvider, AuthProviderProps, AuthState, AuthTokens, AuthUser, ProtectedRoute, ProtectedRouteProps, PublicRoute, PublicRouteProps, SessionInfo, default, getRootDomain, useAuth, useAuthGuard, useRouteAuth, withAuth } from '../index.mjs';
@@ -1 +1,3 @@
1
- export * from '../../index';
1
+ import 'react/jsx-runtime';
2
+ import 'react';
3
+ export { AuthContextType, AuthProvider, AuthProviderProps, AuthState, AuthTokens, AuthUser, ProtectedRoute, ProtectedRouteProps, PublicRoute, PublicRouteProps, SessionInfo, default, getRootDomain, useAuth, useAuthGuard, useRouteAuth, withAuth } from '../index.js';
@@ -210,3 +210,4 @@ var Auth_default = {
210
210
  useRouteAuth,
211
211
  withAuth
212
212
  });
213
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Auth/Auth.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useEffect,\n useState,\n ReactNode,\n ComponentType,\n useCallback,\n useMemo,\n} from 'react';\nimport { useLocation, Navigate } from 'react-router-dom';\n\n/**\n * Interface for basic authentication tokens\n *\n * @interface AuthTokens\n * @property {string} token - Main authentication token\n * @property {string} refreshToken - Token used to refresh the main token\n * @property {unknown} [key] - Additional properties that can be included\n */\nexport interface AuthTokens {\n token: string;\n refreshToken: string;\n [key: string]: unknown;\n}\n\n/**\n * Interface for basic user information\n *\n * @interface AuthUser\n * @property {string} id - Unique user identifier\n * @property {string} [name] - Optional user name\n * @property {string} [email] - Optional user email\n * @property {unknown} [key] - Additional user properties\n */\nexport interface AuthUser {\n id: string;\n name?: string;\n email?: string;\n [key: string]: unknown;\n}\n\n/**\n * Interface for basic session information\n *\n * @interface SessionInfo\n * @property {string} [institutionId] - Optional institution identifier\n * @property {string} [profileId] - Optional profile identifier\n * @property {string} [schoolId] - Optional school identifier\n * @property {string} [schoolYearId] - Optional school year identifier\n * @property {string} [classId] - Optional class identifier\n * @property {unknown} [key] - Additional session properties\n */\nexport interface SessionInfo {\n institutionId?: string;\n profileId?: string;\n schoolId?: string;\n schoolYearId?: string;\n classId?: string;\n [key: string]: unknown;\n}\n\n/**\n * Interface for authentication state\n *\n * @interface AuthState\n * @property {boolean} isAuthenticated - Whether the user is authenticated\n * @property {boolean} isLoading - Whether authentication is being checked\n * @property {AuthUser | null} [user] - Current user information\n * @property {SessionInfo | null} [sessionInfo] - Current session information\n * @property {AuthTokens | null} [tokens] - Current authentication tokens\n */\nexport interface AuthState {\n isAuthenticated: boolean;\n isLoading: boolean;\n user?: AuthUser | null;\n sessionInfo?: SessionInfo | null;\n tokens?: AuthTokens | null;\n}\n\n/**\n * Interface for authentication context functions and state\n *\n * @interface AuthContextType\n * @extends {AuthState}\n * @property {() => Promise<boolean>} checkAuth - Function to check authentication status\n * @property {() => void} signOut - Function to sign out the user\n */\nexport interface AuthContextType extends AuthState {\n checkAuth: () => Promise<boolean>;\n signOut: () => void;\n}\n\n/**\n * Authentication context for React components\n *\n * @private\n */\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\n/**\n * Props for the AuthProvider component\n *\n * @interface AuthProviderProps\n * @property {ReactNode} children - Child components\n * @property {() => Promise<boolean> | boolean} [checkAuthFn] - Function to check if user is authenticated\n * @property {() => void} [signOutFn] - Function to handle logout\n * @property {Partial<AuthState>} [initialAuthState] - Initial authentication state\n * @property {() => AuthUser | null | undefined} [getUserFn] - Function to get user data\n * @property {() => SessionInfo | null | undefined} [getSessionFn] - Function to get session info\n * @property {() => AuthTokens | null | undefined} [getTokensFn] - Function to get tokens\n */\nexport interface AuthProviderProps {\n children: ReactNode;\n /**\n * Função para verificar se o usuário está autenticado\n * Deve retornar uma Promise<boolean>\n */\n checkAuthFn?: () => Promise<boolean> | boolean;\n /**\n * Função para fazer logout\n */\n signOutFn?: () => void;\n /**\n * Estado de autenticação inicial\n */\n initialAuthState?: Partial<AuthState>;\n /**\n * Função para obter dados do usuário (opcional)\n */\n getUserFn?: () => AuthUser | null | undefined;\n /**\n * Função para obter informações da sessão (opcional)\n */\n getSessionFn?: () => SessionInfo | null | undefined;\n /**\n * Função para obter tokens (opcional)\n */\n getTokensFn?: () => AuthTokens | null | undefined;\n}\n\n/**\n * Authentication provider that manages global auth state\n * Compatible with any store (Zustand, Redux, Context, etc.)\n *\n * @param {AuthProviderProps} props - The provider props\n * @returns {JSX.Element} The provider component\n *\n * @example\n * ```tsx\n * <AuthProvider\n * checkAuthFn={checkAuthFunction}\n * signOutFn={signOutFunction}\n * getUserFn={getUserFunction}\n * >\n * <App />\n * </AuthProvider>\n * ```\n */\nexport const AuthProvider = ({\n children,\n checkAuthFn,\n signOutFn,\n initialAuthState = {},\n getUserFn,\n getSessionFn,\n getTokensFn,\n}: AuthProviderProps) => {\n const [authState, setAuthState] = useState<AuthState>({\n isAuthenticated: false,\n isLoading: true,\n ...initialAuthState,\n });\n\n /**\n * Check authentication status and update state accordingly\n *\n * @returns {Promise<boolean>} Promise that resolves to authentication status\n */\n const checkAuth = useCallback(async (): Promise<boolean> => {\n try {\n setAuthState((prev) => ({ ...prev, isLoading: true }));\n\n // Se não há função de verificação, assume como não autenticado\n if (!checkAuthFn) {\n setAuthState((prev) => ({\n ...prev,\n isAuthenticated: false,\n isLoading: false,\n }));\n return false;\n }\n\n const isAuth = await checkAuthFn();\n\n setAuthState((prev) => ({\n ...prev,\n isAuthenticated: isAuth,\n isLoading: false,\n user: getUserFn ? getUserFn() : prev.user,\n sessionInfo: getSessionFn ? getSessionFn() : prev.sessionInfo,\n tokens: getTokensFn ? getTokensFn() : prev.tokens,\n }));\n\n return isAuth;\n } catch (error) {\n console.error('Erro ao verificar autenticação:', error);\n setAuthState((prev) => ({\n ...prev,\n isAuthenticated: false,\n isLoading: false,\n }));\n return false;\n }\n }, [checkAuthFn, getUserFn, getSessionFn, getTokensFn]);\n\n /**\n * Sign out the current user and clear auth state\n *\n * @returns {void}\n */\n const signOut = useCallback(() => {\n if (signOutFn) {\n signOutFn();\n }\n setAuthState((prev) => ({\n ...prev,\n isAuthenticated: false,\n user: undefined,\n sessionInfo: undefined,\n tokens: undefined,\n }));\n }, [signOutFn]);\n\n useEffect(() => {\n checkAuth();\n }, [checkAuth]);\n\n const contextValue = useMemo(\n (): AuthContextType => ({\n ...authState,\n checkAuth,\n signOut,\n }),\n [authState, checkAuth, signOut]\n );\n\n return (\n <AuthContext.Provider value={contextValue}>{children}</AuthContext.Provider>\n );\n};\n\n/**\n * Hook to use the authentication context\n *\n * @throws {Error} When used outside of AuthProvider\n * @returns {AuthContextType} The authentication context\n *\n * @example\n * ```tsx\n * const { isAuthenticated, user, signOut } = useAuth();\n * ```\n */\nexport const useAuth = (): AuthContextType => {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth deve ser usado dentro de um AuthProvider');\n }\n return context;\n};\n\n/**\n * Props for the ProtectedRoute component\n *\n * @interface ProtectedRouteProps\n * @property {ReactNode} children - Components to render when authenticated\n * @property {string} [redirectTo] - Path to redirect when not authenticated (default: '/')\n * @property {ReactNode} [loadingComponent] - Custom loading component\n * @property {(authState: AuthState) => boolean} [additionalCheck] - Additional authentication check\n */\nexport interface ProtectedRouteProps {\n children: ReactNode;\n /**\n * Path para redirecionamento quando não autenticado\n */\n redirectTo?: string;\n /**\n * Componente de loading personalizado\n */\n loadingComponent?: ReactNode;\n /**\n * Função adicional de verificação (ex: verificar permissões específicas)\n */\n additionalCheck?: (authState: AuthState) => boolean;\n}\n\n/**\n * Componente para proteger rotas que requerem autenticação\n *\n * @example\n * ```tsx\n * <ProtectedRoute redirectTo=\"/login\">\n * <PainelPage />\n * </ProtectedRoute>\n * ```\n */\nexport const ProtectedRoute = ({\n children,\n redirectTo = '/',\n loadingComponent,\n additionalCheck,\n}: ProtectedRouteProps) => {\n const { isAuthenticated, isLoading, ...authState } = useAuth();\n\n // Componente de loading padrão\n const defaultLoadingComponent = (\n <div className=\"flex items-center justify-center min-h-screen\">\n <div className=\"text-text-950 text-lg\">Carregando...</div>\n </div>\n );\n\n // Mostrar loading enquanto verifica autenticação\n if (isLoading) {\n return <>{loadingComponent || defaultLoadingComponent}</>;\n }\n\n // Verificar autenticação básica\n if (!isAuthenticated) {\n if (typeof window !== 'undefined') {\n const rootDomain = getRootDomain();\n // Only redirect if the root domain is different from current location\n const currentLocation = `${window.location.protocol}//${window.location.hostname}${window.location.port ? ':' + window.location.port : ''}`;\n if (rootDomain !== currentLocation) {\n window.location.href = rootDomain;\n return null;\n }\n }\n return <Navigate to={redirectTo} replace />;\n }\n\n // Verificação adicional (ex: permissões)\n if (\n additionalCheck &&\n !additionalCheck({ isAuthenticated, isLoading, ...authState })\n ) {\n return <Navigate to={redirectTo} replace />;\n }\n\n return <>{children}</>;\n};\n\n/**\n * Props for the PublicRoute component\n *\n * @interface PublicRouteProps\n * @property {ReactNode} children - Components to render\n * @property {string} [redirectTo] - Path to redirect to (default: '/painel')\n * @property {boolean} [redirectIfAuthenticated] - Whether to redirect if authenticated\n * @property {boolean} [checkAuthBeforeRender] - Whether to check auth before rendering\n */\nexport interface PublicRouteProps {\n children: ReactNode;\n /**\n * Path para redirecionamento\n */\n redirectTo?: string;\n /**\n * Se deve redirecionar quando usuário estiver autenticado\n */\n redirectIfAuthenticated?: boolean;\n /**\n * Se deve verificar autenticação antes de renderizar\n */\n checkAuthBeforeRender?: boolean;\n}\n\n/**\n * Componente para rotas públicas (login, recuperação de senha, etc.)\n * Opcionalmente redireciona se o usuário já estiver autenticado\n *\n * @example\n * ```tsx\n * <PublicRoute redirectTo=\"/painel\" redirectIfAuthenticated={true}>\n * <LoginPage />\n * </PublicRoute>\n * ```\n */\nexport const PublicRoute = ({\n children,\n redirectTo = '/painel',\n redirectIfAuthenticated = false,\n checkAuthBeforeRender = false,\n}: PublicRouteProps) => {\n const { isAuthenticated, isLoading } = useAuth();\n\n // Se deve aguardar verificação de auth antes de renderizar\n if (checkAuthBeforeRender && isLoading) {\n return (\n <div className=\"flex items-center justify-center min-h-screen\">\n <div className=\"text-text-950 text-lg\">Carregando...</div>\n </div>\n );\n }\n\n // Redirecionar se já autenticado e configurado para isso\n if (isAuthenticated && redirectIfAuthenticated) {\n return <Navigate to={redirectTo} replace />;\n }\n\n return <>{children}</>;\n};\n\n/**\n * Higher-Order Component to protect components with authentication\n *\n * @template P - Component props type\n * @param {ComponentType<P>} Component - Component to wrap with authentication\n * @param {Omit<ProtectedRouteProps, 'children'>} [options] - Protection options\n * @returns {(props: P) => JSX.Element} Wrapped component\n *\n * @example\n * ```tsx\n * const ProtectedComponent = withAuth(MyComponent, {\n * redirectTo: \"/login\",\n * loadingComponent: <CustomSpinner />\n * });\n * ```\n */\nexport const withAuth = <P extends object>(\n Component: ComponentType<P>,\n options: Omit<ProtectedRouteProps, 'children'> = {}\n) => {\n return (props: P) => (\n <ProtectedRoute {...options}>\n <Component {...props} />\n </ProtectedRoute>\n );\n};\n\n/**\n * Hook for authentication guard with custom checks\n *\n * @param {object} [options] - Guard options\n * @param {boolean} [options.requireAuth=true] - Whether authentication is required\n * @param {(authState: AuthState) => boolean} [options.customCheck] - Custom check function\n * @returns {object} Guard result with canAccess, isLoading, and authState\n *\n * @example\n * ```tsx\n * const { canAccess, isLoading } = useAuthGuard({\n * requireAuth: true,\n * customCheck: (authState) => authState.user?.role === 'admin'\n * });\n * ```\n */\nexport const useAuthGuard = (\n options: {\n requireAuth?: boolean;\n customCheck?: (authState: AuthState) => boolean;\n } = {}\n) => {\n const authState = useAuth();\n const { requireAuth = true, customCheck } = options;\n\n const canAccess =\n !authState.isLoading &&\n (requireAuth\n ? authState.isAuthenticated && (!customCheck || customCheck(authState))\n : !authState.isAuthenticated || !customCheck || customCheck(authState));\n\n return {\n canAccess,\n isLoading: authState.isLoading,\n authState,\n };\n};\n\n/**\n * Hook to check authentication on specific routes\n * Useful for conditional checks within components\n *\n * @param {string} [fallbackPath='/'] - Path to redirect when not authenticated\n * @returns {object} Object with isAuthenticated, isLoading, and redirectToLogin function\n *\n * @example\n * ```tsx\n * const { isAuthenticated, redirectToLogin } = useRouteAuth();\n *\n * if (!isAuthenticated) {\n * return redirectToLogin();\n * }\n * ```\n */\nexport const useRouteAuth = (fallbackPath = '/') => {\n const { isAuthenticated, isLoading } = useAuth();\n const location = useLocation();\n\n const redirectToLogin = () => (\n <Navigate to={fallbackPath} state={{ from: location }} replace />\n );\n\n return {\n isAuthenticated,\n isLoading,\n redirectToLogin,\n };\n};\n\n/**\n * Get the root domain from the current window location\n * Handles localhost and subdomain cases\n *\n * @returns {string} The root domain URL\n */\nexport const getRootDomain = () => {\n const { hostname, protocol, port } = window.location;\n const portStr = port ? ':' + port : '';\n if (hostname === 'localhost') {\n return `${protocol}//${hostname}${portStr}`;\n }\n const parts = hostname.split('.');\n // Only treat as subdomain if there are 3+ parts (e.g., subdomain.example.com)\n if (parts.length > 2) {\n // Return the last 2 parts as the root domain (example.com)\n const base = parts.slice(-2).join('.');\n return `${protocol}//${base}${portStr}`;\n }\n // For 2-part domains (example.com) or single domains, return as-is\n return `${protocol}//${hostname}${portStr}`;\n};\n\nexport default {\n AuthProvider,\n ProtectedRoute,\n PublicRoute,\n withAuth,\n useAuth,\n useAuthGuard,\n useRouteAuth,\n};\n"],"mappings":"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","names":[]}
@@ -185,3 +185,4 @@ export {
185
185
  useRouteAuth,
186
186
  withAuth
187
187
  };
188
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Auth/Auth.tsx"],"sourcesContent":["import {\n createContext,\n useContext,\n useEffect,\n useState,\n ReactNode,\n ComponentType,\n useCallback,\n useMemo,\n} from 'react';\nimport { useLocation, Navigate } from 'react-router-dom';\n\n/**\n * Interface for basic authentication tokens\n *\n * @interface AuthTokens\n * @property {string} token - Main authentication token\n * @property {string} refreshToken - Token used to refresh the main token\n * @property {unknown} [key] - Additional properties that can be included\n */\nexport interface AuthTokens {\n token: string;\n refreshToken: string;\n [key: string]: unknown;\n}\n\n/**\n * Interface for basic user information\n *\n * @interface AuthUser\n * @property {string} id - Unique user identifier\n * @property {string} [name] - Optional user name\n * @property {string} [email] - Optional user email\n * @property {unknown} [key] - Additional user properties\n */\nexport interface AuthUser {\n id: string;\n name?: string;\n email?: string;\n [key: string]: unknown;\n}\n\n/**\n * Interface for basic session information\n *\n * @interface SessionInfo\n * @property {string} [institutionId] - Optional institution identifier\n * @property {string} [profileId] - Optional profile identifier\n * @property {string} [schoolId] - Optional school identifier\n * @property {string} [schoolYearId] - Optional school year identifier\n * @property {string} [classId] - Optional class identifier\n * @property {unknown} [key] - Additional session properties\n */\nexport interface SessionInfo {\n institutionId?: string;\n profileId?: string;\n schoolId?: string;\n schoolYearId?: string;\n classId?: string;\n [key: string]: unknown;\n}\n\n/**\n * Interface for authentication state\n *\n * @interface AuthState\n * @property {boolean} isAuthenticated - Whether the user is authenticated\n * @property {boolean} isLoading - Whether authentication is being checked\n * @property {AuthUser | null} [user] - Current user information\n * @property {SessionInfo | null} [sessionInfo] - Current session information\n * @property {AuthTokens | null} [tokens] - Current authentication tokens\n */\nexport interface AuthState {\n isAuthenticated: boolean;\n isLoading: boolean;\n user?: AuthUser | null;\n sessionInfo?: SessionInfo | null;\n tokens?: AuthTokens | null;\n}\n\n/**\n * Interface for authentication context functions and state\n *\n * @interface AuthContextType\n * @extends {AuthState}\n * @property {() => Promise<boolean>} checkAuth - Function to check authentication status\n * @property {() => void} signOut - Function to sign out the user\n */\nexport interface AuthContextType extends AuthState {\n checkAuth: () => Promise<boolean>;\n signOut: () => void;\n}\n\n/**\n * Authentication context for React components\n *\n * @private\n */\nconst AuthContext = createContext<AuthContextType | undefined>(undefined);\n\n/**\n * Props for the AuthProvider component\n *\n * @interface AuthProviderProps\n * @property {ReactNode} children - Child components\n * @property {() => Promise<boolean> | boolean} [checkAuthFn] - Function to check if user is authenticated\n * @property {() => void} [signOutFn] - Function to handle logout\n * @property {Partial<AuthState>} [initialAuthState] - Initial authentication state\n * @property {() => AuthUser | null | undefined} [getUserFn] - Function to get user data\n * @property {() => SessionInfo | null | undefined} [getSessionFn] - Function to get session info\n * @property {() => AuthTokens | null | undefined} [getTokensFn] - Function to get tokens\n */\nexport interface AuthProviderProps {\n children: ReactNode;\n /**\n * Função para verificar se o usuário está autenticado\n * Deve retornar uma Promise<boolean>\n */\n checkAuthFn?: () => Promise<boolean> | boolean;\n /**\n * Função para fazer logout\n */\n signOutFn?: () => void;\n /**\n * Estado de autenticação inicial\n */\n initialAuthState?: Partial<AuthState>;\n /**\n * Função para obter dados do usuário (opcional)\n */\n getUserFn?: () => AuthUser | null | undefined;\n /**\n * Função para obter informações da sessão (opcional)\n */\n getSessionFn?: () => SessionInfo | null | undefined;\n /**\n * Função para obter tokens (opcional)\n */\n getTokensFn?: () => AuthTokens | null | undefined;\n}\n\n/**\n * Authentication provider that manages global auth state\n * Compatible with any store (Zustand, Redux, Context, etc.)\n *\n * @param {AuthProviderProps} props - The provider props\n * @returns {JSX.Element} The provider component\n *\n * @example\n * ```tsx\n * <AuthProvider\n * checkAuthFn={checkAuthFunction}\n * signOutFn={signOutFunction}\n * getUserFn={getUserFunction}\n * >\n * <App />\n * </AuthProvider>\n * ```\n */\nexport const AuthProvider = ({\n children,\n checkAuthFn,\n signOutFn,\n initialAuthState = {},\n getUserFn,\n getSessionFn,\n getTokensFn,\n}: AuthProviderProps) => {\n const [authState, setAuthState] = useState<AuthState>({\n isAuthenticated: false,\n isLoading: true,\n ...initialAuthState,\n });\n\n /**\n * Check authentication status and update state accordingly\n *\n * @returns {Promise<boolean>} Promise that resolves to authentication status\n */\n const checkAuth = useCallback(async (): Promise<boolean> => {\n try {\n setAuthState((prev) => ({ ...prev, isLoading: true }));\n\n // Se não há função de verificação, assume como não autenticado\n if (!checkAuthFn) {\n setAuthState((prev) => ({\n ...prev,\n isAuthenticated: false,\n isLoading: false,\n }));\n return false;\n }\n\n const isAuth = await checkAuthFn();\n\n setAuthState((prev) => ({\n ...prev,\n isAuthenticated: isAuth,\n isLoading: false,\n user: getUserFn ? getUserFn() : prev.user,\n sessionInfo: getSessionFn ? getSessionFn() : prev.sessionInfo,\n tokens: getTokensFn ? getTokensFn() : prev.tokens,\n }));\n\n return isAuth;\n } catch (error) {\n console.error('Erro ao verificar autenticação:', error);\n setAuthState((prev) => ({\n ...prev,\n isAuthenticated: false,\n isLoading: false,\n }));\n return false;\n }\n }, [checkAuthFn, getUserFn, getSessionFn, getTokensFn]);\n\n /**\n * Sign out the current user and clear auth state\n *\n * @returns {void}\n */\n const signOut = useCallback(() => {\n if (signOutFn) {\n signOutFn();\n }\n setAuthState((prev) => ({\n ...prev,\n isAuthenticated: false,\n user: undefined,\n sessionInfo: undefined,\n tokens: undefined,\n }));\n }, [signOutFn]);\n\n useEffect(() => {\n checkAuth();\n }, [checkAuth]);\n\n const contextValue = useMemo(\n (): AuthContextType => ({\n ...authState,\n checkAuth,\n signOut,\n }),\n [authState, checkAuth, signOut]\n );\n\n return (\n <AuthContext.Provider value={contextValue}>{children}</AuthContext.Provider>\n );\n};\n\n/**\n * Hook to use the authentication context\n *\n * @throws {Error} When used outside of AuthProvider\n * @returns {AuthContextType} The authentication context\n *\n * @example\n * ```tsx\n * const { isAuthenticated, user, signOut } = useAuth();\n * ```\n */\nexport const useAuth = (): AuthContextType => {\n const context = useContext(AuthContext);\n if (context === undefined) {\n throw new Error('useAuth deve ser usado dentro de um AuthProvider');\n }\n return context;\n};\n\n/**\n * Props for the ProtectedRoute component\n *\n * @interface ProtectedRouteProps\n * @property {ReactNode} children - Components to render when authenticated\n * @property {string} [redirectTo] - Path to redirect when not authenticated (default: '/')\n * @property {ReactNode} [loadingComponent] - Custom loading component\n * @property {(authState: AuthState) => boolean} [additionalCheck] - Additional authentication check\n */\nexport interface ProtectedRouteProps {\n children: ReactNode;\n /**\n * Path para redirecionamento quando não autenticado\n */\n redirectTo?: string;\n /**\n * Componente de loading personalizado\n */\n loadingComponent?: ReactNode;\n /**\n * Função adicional de verificação (ex: verificar permissões específicas)\n */\n additionalCheck?: (authState: AuthState) => boolean;\n}\n\n/**\n * Componente para proteger rotas que requerem autenticação\n *\n * @example\n * ```tsx\n * <ProtectedRoute redirectTo=\"/login\">\n * <PainelPage />\n * </ProtectedRoute>\n * ```\n */\nexport const ProtectedRoute = ({\n children,\n redirectTo = '/',\n loadingComponent,\n additionalCheck,\n}: ProtectedRouteProps) => {\n const { isAuthenticated, isLoading, ...authState } = useAuth();\n\n // Componente de loading padrão\n const defaultLoadingComponent = (\n <div className=\"flex items-center justify-center min-h-screen\">\n <div className=\"text-text-950 text-lg\">Carregando...</div>\n </div>\n );\n\n // Mostrar loading enquanto verifica autenticação\n if (isLoading) {\n return <>{loadingComponent || defaultLoadingComponent}</>;\n }\n\n // Verificar autenticação básica\n if (!isAuthenticated) {\n if (typeof window !== 'undefined') {\n const rootDomain = getRootDomain();\n // Only redirect if the root domain is different from current location\n const currentLocation = `${window.location.protocol}//${window.location.hostname}${window.location.port ? ':' + window.location.port : ''}`;\n if (rootDomain !== currentLocation) {\n window.location.href = rootDomain;\n return null;\n }\n }\n return <Navigate to={redirectTo} replace />;\n }\n\n // Verificação adicional (ex: permissões)\n if (\n additionalCheck &&\n !additionalCheck({ isAuthenticated, isLoading, ...authState })\n ) {\n return <Navigate to={redirectTo} replace />;\n }\n\n return <>{children}</>;\n};\n\n/**\n * Props for the PublicRoute component\n *\n * @interface PublicRouteProps\n * @property {ReactNode} children - Components to render\n * @property {string} [redirectTo] - Path to redirect to (default: '/painel')\n * @property {boolean} [redirectIfAuthenticated] - Whether to redirect if authenticated\n * @property {boolean} [checkAuthBeforeRender] - Whether to check auth before rendering\n */\nexport interface PublicRouteProps {\n children: ReactNode;\n /**\n * Path para redirecionamento\n */\n redirectTo?: string;\n /**\n * Se deve redirecionar quando usuário estiver autenticado\n */\n redirectIfAuthenticated?: boolean;\n /**\n * Se deve verificar autenticação antes de renderizar\n */\n checkAuthBeforeRender?: boolean;\n}\n\n/**\n * Componente para rotas públicas (login, recuperação de senha, etc.)\n * Opcionalmente redireciona se o usuário já estiver autenticado\n *\n * @example\n * ```tsx\n * <PublicRoute redirectTo=\"/painel\" redirectIfAuthenticated={true}>\n * <LoginPage />\n * </PublicRoute>\n * ```\n */\nexport const PublicRoute = ({\n children,\n redirectTo = '/painel',\n redirectIfAuthenticated = false,\n checkAuthBeforeRender = false,\n}: PublicRouteProps) => {\n const { isAuthenticated, isLoading } = useAuth();\n\n // Se deve aguardar verificação de auth antes de renderizar\n if (checkAuthBeforeRender && isLoading) {\n return (\n <div className=\"flex items-center justify-center min-h-screen\">\n <div className=\"text-text-950 text-lg\">Carregando...</div>\n </div>\n );\n }\n\n // Redirecionar se já autenticado e configurado para isso\n if (isAuthenticated && redirectIfAuthenticated) {\n return <Navigate to={redirectTo} replace />;\n }\n\n return <>{children}</>;\n};\n\n/**\n * Higher-Order Component to protect components with authentication\n *\n * @template P - Component props type\n * @param {ComponentType<P>} Component - Component to wrap with authentication\n * @param {Omit<ProtectedRouteProps, 'children'>} [options] - Protection options\n * @returns {(props: P) => JSX.Element} Wrapped component\n *\n * @example\n * ```tsx\n * const ProtectedComponent = withAuth(MyComponent, {\n * redirectTo: \"/login\",\n * loadingComponent: <CustomSpinner />\n * });\n * ```\n */\nexport const withAuth = <P extends object>(\n Component: ComponentType<P>,\n options: Omit<ProtectedRouteProps, 'children'> = {}\n) => {\n return (props: P) => (\n <ProtectedRoute {...options}>\n <Component {...props} />\n </ProtectedRoute>\n );\n};\n\n/**\n * Hook for authentication guard with custom checks\n *\n * @param {object} [options] - Guard options\n * @param {boolean} [options.requireAuth=true] - Whether authentication is required\n * @param {(authState: AuthState) => boolean} [options.customCheck] - Custom check function\n * @returns {object} Guard result with canAccess, isLoading, and authState\n *\n * @example\n * ```tsx\n * const { canAccess, isLoading } = useAuthGuard({\n * requireAuth: true,\n * customCheck: (authState) => authState.user?.role === 'admin'\n * });\n * ```\n */\nexport const useAuthGuard = (\n options: {\n requireAuth?: boolean;\n customCheck?: (authState: AuthState) => boolean;\n } = {}\n) => {\n const authState = useAuth();\n const { requireAuth = true, customCheck } = options;\n\n const canAccess =\n !authState.isLoading &&\n (requireAuth\n ? authState.isAuthenticated && (!customCheck || customCheck(authState))\n : !authState.isAuthenticated || !customCheck || customCheck(authState));\n\n return {\n canAccess,\n isLoading: authState.isLoading,\n authState,\n };\n};\n\n/**\n * Hook to check authentication on specific routes\n * Useful for conditional checks within components\n *\n * @param {string} [fallbackPath='/'] - Path to redirect when not authenticated\n * @returns {object} Object with isAuthenticated, isLoading, and redirectToLogin function\n *\n * @example\n * ```tsx\n * const { isAuthenticated, redirectToLogin } = useRouteAuth();\n *\n * if (!isAuthenticated) {\n * return redirectToLogin();\n * }\n * ```\n */\nexport const useRouteAuth = (fallbackPath = '/') => {\n const { isAuthenticated, isLoading } = useAuth();\n const location = useLocation();\n\n const redirectToLogin = () => (\n <Navigate to={fallbackPath} state={{ from: location }} replace />\n );\n\n return {\n isAuthenticated,\n isLoading,\n redirectToLogin,\n };\n};\n\n/**\n * Get the root domain from the current window location\n * Handles localhost and subdomain cases\n *\n * @returns {string} The root domain URL\n */\nexport const getRootDomain = () => {\n const { hostname, protocol, port } = window.location;\n const portStr = port ? ':' + port : '';\n if (hostname === 'localhost') {\n return `${protocol}//${hostname}${portStr}`;\n }\n const parts = hostname.split('.');\n // Only treat as subdomain if there are 3+ parts (e.g., subdomain.example.com)\n if (parts.length > 2) {\n // Return the last 2 parts as the root domain (example.com)\n const base = parts.slice(-2).join('.');\n return `${protocol}//${base}${portStr}`;\n }\n // For 2-part domains (example.com) or single domains, return as-is\n return `${protocol}//${hostname}${portStr}`;\n};\n\nexport default {\n AuthProvider,\n ProtectedRoute,\n PublicRoute,\n withAuth,\n useAuth,\n useAuthGuard,\n useRouteAuth,\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Generic adapter for integrating AuthProvider with Zustand stores
3
+ * Users should import this file and pass their store instance
4
+ *
5
+ * @template S - Zustand store type that contains auth-related state
6
+ * @param {object} useAuthStore - Zustand store hook with getState method
7
+ * @param {() => S} useAuthStore.getState - Function to get current store state
8
+ * @returns {object} Adapter object with auth functions
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Define your Zustand store type
13
+ * interface AuthStore {
14
+ * sessionInfo?: SessionInfo;
15
+ * tokens?: AuthTokens;
16
+ * user?: AuthUser;
17
+ * signOut: () => void;
18
+ * }
19
+ *
20
+ * // Create the adapter
21
+ * const authAdapter = createZustandAuthAdapter(useAuthStore);
22
+ *
23
+ * // Use with AuthProvider
24
+ * <AuthProvider
25
+ * checkAuthFn={authAdapter.checkAuth}
26
+ * signOutFn={authAdapter.signOut}
27
+ * getUserFn={authAdapter.getUser}
28
+ * getSessionFn={authAdapter.getSessionInfo}
29
+ * getTokensFn={authAdapter.getTokens}
30
+ * >
31
+ * <App />
32
+ * </AuthProvider>
33
+ * ```
34
+ */
35
+ declare function createZustandAuthAdapter<S extends {
36
+ sessionInfo?: unknown;
37
+ tokens?: unknown;
38
+ user?: unknown;
39
+ signOut?: () => void;
40
+ }>(useAuthStore: {
41
+ getState: () => S;
42
+ }): {
43
+ /**
44
+ * Check if the user is authenticated based on sessionInfo and tokens
45
+ *
46
+ * @returns {Promise<boolean>} Promise that resolves to authentication status
47
+ */
48
+ checkAuth: () => Promise<boolean>;
49
+ /**
50
+ * Get the current user from the store
51
+ *
52
+ * @returns {unknown} Current user data from the store
53
+ */
54
+ getUser: () => unknown;
55
+ /**
56
+ * Get the current session information from the store
57
+ *
58
+ * @returns {unknown} Current session info from the store
59
+ */
60
+ getSessionInfo: () => unknown;
61
+ /**
62
+ * Get the current authentication tokens from the store
63
+ *
64
+ * @returns {unknown} Current tokens from the store
65
+ */
66
+ getTokens: () => unknown;
67
+ /**
68
+ * Sign out the user by calling the store's signOut function if available
69
+ *
70
+ * @returns {void}
71
+ */
72
+ signOut: () => void;
73
+ };
74
+
75
+ export { createZustandAuthAdapter };
@@ -1 +1,75 @@
1
- export * from '../../index';
1
+ /**
2
+ * Generic adapter for integrating AuthProvider with Zustand stores
3
+ * Users should import this file and pass their store instance
4
+ *
5
+ * @template S - Zustand store type that contains auth-related state
6
+ * @param {object} useAuthStore - Zustand store hook with getState method
7
+ * @param {() => S} useAuthStore.getState - Function to get current store state
8
+ * @returns {object} Adapter object with auth functions
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * // Define your Zustand store type
13
+ * interface AuthStore {
14
+ * sessionInfo?: SessionInfo;
15
+ * tokens?: AuthTokens;
16
+ * user?: AuthUser;
17
+ * signOut: () => void;
18
+ * }
19
+ *
20
+ * // Create the adapter
21
+ * const authAdapter = createZustandAuthAdapter(useAuthStore);
22
+ *
23
+ * // Use with AuthProvider
24
+ * <AuthProvider
25
+ * checkAuthFn={authAdapter.checkAuth}
26
+ * signOutFn={authAdapter.signOut}
27
+ * getUserFn={authAdapter.getUser}
28
+ * getSessionFn={authAdapter.getSessionInfo}
29
+ * getTokensFn={authAdapter.getTokens}
30
+ * >
31
+ * <App />
32
+ * </AuthProvider>
33
+ * ```
34
+ */
35
+ declare function createZustandAuthAdapter<S extends {
36
+ sessionInfo?: unknown;
37
+ tokens?: unknown;
38
+ user?: unknown;
39
+ signOut?: () => void;
40
+ }>(useAuthStore: {
41
+ getState: () => S;
42
+ }): {
43
+ /**
44
+ * Check if the user is authenticated based on sessionInfo and tokens
45
+ *
46
+ * @returns {Promise<boolean>} Promise that resolves to authentication status
47
+ */
48
+ checkAuth: () => Promise<boolean>;
49
+ /**
50
+ * Get the current user from the store
51
+ *
52
+ * @returns {unknown} Current user data from the store
53
+ */
54
+ getUser: () => unknown;
55
+ /**
56
+ * Get the current session information from the store
57
+ *
58
+ * @returns {unknown} Current session info from the store
59
+ */
60
+ getSessionInfo: () => unknown;
61
+ /**
62
+ * Get the current authentication tokens from the store
63
+ *
64
+ * @returns {unknown} Current tokens from the store
65
+ */
66
+ getTokens: () => unknown;
67
+ /**
68
+ * Sign out the user by calling the store's signOut function if available
69
+ *
70
+ * @returns {void}
71
+ */
72
+ signOut: () => void;
73
+ };
74
+
75
+ export { createZustandAuthAdapter };
@@ -67,3 +67,4 @@ function createZustandAuthAdapter(useAuthStore) {
67
67
  0 && (module.exports = {
68
68
  createZustandAuthAdapter
69
69
  });
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Auth/zustandAuthAdapter.ts"],"sourcesContent":["/**\n * Generic adapter for integrating AuthProvider with Zustand stores\n * Users should import this file and pass their store instance\n *\n * @template S - Zustand store type that contains auth-related state\n * @param {object} useAuthStore - Zustand store hook with getState method\n * @param {() => S} useAuthStore.getState - Function to get current store state\n * @returns {object} Adapter object with auth functions\n *\n * @example\n * ```typescript\n * // Define your Zustand store type\n * interface AuthStore {\n * sessionInfo?: SessionInfo;\n * tokens?: AuthTokens;\n * user?: AuthUser;\n * signOut: () => void;\n * }\n *\n * // Create the adapter\n * const authAdapter = createZustandAuthAdapter(useAuthStore);\n *\n * // Use with AuthProvider\n * <AuthProvider\n * checkAuthFn={authAdapter.checkAuth}\n * signOutFn={authAdapter.signOut}\n * getUserFn={authAdapter.getUser}\n * getSessionFn={authAdapter.getSessionInfo}\n * getTokensFn={authAdapter.getTokens}\n * >\n * <App />\n * </AuthProvider>\n * ```\n */\nexport function createZustandAuthAdapter<\n S extends {\n sessionInfo?: unknown;\n tokens?: unknown;\n user?: unknown;\n signOut?: () => void;\n },\n>(useAuthStore: { getState: () => S }) {\n return {\n /**\n * Check if the user is authenticated based on sessionInfo and tokens\n *\n * @returns {Promise<boolean>} Promise that resolves to authentication status\n */\n checkAuth: async (): Promise<boolean> => {\n const { sessionInfo, tokens } = useAuthStore.getState();\n return Boolean(sessionInfo && tokens);\n },\n /**\n * Get the current user from the store\n *\n * @returns {unknown} Current user data from the store\n */\n getUser: () => useAuthStore.getState().user,\n /**\n * Get the current session information from the store\n *\n * @returns {unknown} Current session info from the store\n */\n getSessionInfo: () => useAuthStore.getState().sessionInfo,\n /**\n * Get the current authentication tokens from the store\n *\n * @returns {unknown} Current tokens from the store\n */\n getTokens: () => useAuthStore.getState().tokens,\n /**\n * Sign out the user by calling the store's signOut function if available\n *\n * @returns {void}\n */\n signOut: () => {\n const signOutFn = useAuthStore.getState().signOut;\n if (typeof signOutFn === 'function') signOutFn();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkCO,SAAS,yBAOd,cAAqC;AACrC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAML,WAAW,YAA8B;AACvC,YAAM,EAAE,aAAa,OAAO,IAAI,aAAa,SAAS;AACtD,aAAO,QAAQ,eAAe,MAAM;AAAA,IACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,SAAS,MAAM,aAAa,SAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMvC,gBAAgB,MAAM,aAAa,SAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAM9C,WAAW,MAAM,aAAa,SAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMzC,SAAS,MAAM;AACb,YAAM,YAAY,aAAa,SAAS,EAAE;AAC1C,UAAI,OAAO,cAAc,WAAY,WAAU;AAAA,IACjD;AAAA,EACF;AACF;","names":[]}
@@ -42,3 +42,4 @@ function createZustandAuthAdapter(useAuthStore) {
42
42
  export {
43
43
  createZustandAuthAdapter
44
44
  };
45
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/Auth/zustandAuthAdapter.ts"],"sourcesContent":["/**\n * Generic adapter for integrating AuthProvider with Zustand stores\n * Users should import this file and pass their store instance\n *\n * @template S - Zustand store type that contains auth-related state\n * @param {object} useAuthStore - Zustand store hook with getState method\n * @param {() => S} useAuthStore.getState - Function to get current store state\n * @returns {object} Adapter object with auth functions\n *\n * @example\n * ```typescript\n * // Define your Zustand store type\n * interface AuthStore {\n * sessionInfo?: SessionInfo;\n * tokens?: AuthTokens;\n * user?: AuthUser;\n * signOut: () => void;\n * }\n *\n * // Create the adapter\n * const authAdapter = createZustandAuthAdapter(useAuthStore);\n *\n * // Use with AuthProvider\n * <AuthProvider\n * checkAuthFn={authAdapter.checkAuth}\n * signOutFn={authAdapter.signOut}\n * getUserFn={authAdapter.getUser}\n * getSessionFn={authAdapter.getSessionInfo}\n * getTokensFn={authAdapter.getTokens}\n * >\n * <App />\n * </AuthProvider>\n * ```\n */\nexport function createZustandAuthAdapter<\n S extends {\n sessionInfo?: unknown;\n tokens?: unknown;\n user?: unknown;\n signOut?: () => void;\n },\n>(useAuthStore: { getState: () => S }) {\n return {\n /**\n * Check if the user is authenticated based on sessionInfo and tokens\n *\n * @returns {Promise<boolean>} Promise that resolves to authentication status\n */\n checkAuth: async (): Promise<boolean> => {\n const { sessionInfo, tokens } = useAuthStore.getState();\n return Boolean(sessionInfo && tokens);\n },\n /**\n * Get the current user from the store\n *\n * @returns {unknown} Current user data from the store\n */\n getUser: () => useAuthStore.getState().user,\n /**\n * Get the current session information from the store\n *\n * @returns {unknown} Current session info from the store\n */\n getSessionInfo: () => useAuthStore.getState().sessionInfo,\n /**\n * Get the current authentication tokens from the store\n *\n * @returns {unknown} Current tokens from the store\n */\n getTokens: () => useAuthStore.getState().tokens,\n /**\n * Sign out the user by calling the store's signOut function if available\n *\n * @returns {void}\n */\n signOut: () => {\n const signOutFn = useAuthStore.getState().signOut;\n if (typeof signOutFn === 'function') signOutFn();\n },\n };\n}\n"],"mappings":";AAkCO,SAAS,yBAOd,cAAqC;AACrC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAML,WAAW,YAA8B;AACvC,YAAM,EAAE,aAAa,OAAO,IAAI,aAAa,SAAS;AACtD,aAAO,QAAQ,eAAe,MAAM;AAAA,IACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,SAAS,MAAM,aAAa,SAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMvC,gBAAgB,MAAM,aAAa,SAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAM9C,WAAW,MAAM,aAAa,SAAS,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMzC,SAAS,MAAM;AACb,YAAM,YAAY,aAAa,SAAS,EAAE;AAC1C,UAAI,OAAO,cAAc,WAAY,WAAU;AAAA,IACjD;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,46 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode, HTMLAttributes } from 'react';
3
+
4
+ /**
5
+ * Badge component props interface
6
+ */
7
+ type BadgeProps = {
8
+ /** Content to be displayed inside the badge */
9
+ children?: ReactNode;
10
+ /** Ícone à direita do texto */
11
+ iconRight?: ReactNode;
12
+ /** Ícone à esquerda do texto */
13
+ iconLeft?: ReactNode;
14
+ /** Size of the badge */
15
+ size?: 'small' | 'medium' | 'large';
16
+ /** Visual variant of the badge */
17
+ variant?: 'solid' | 'outlined' | 'exams' | 'examsOutlined' | 'resultStatus' | 'notification';
18
+ /** Action type of the badge */
19
+ action?: 'error' | 'warning' | 'success' | 'info' | 'muted' | 'exam1' | 'exam2' | 'exam3' | 'exam4' | 'positive' | 'negative';
20
+ /** Additional CSS classes to apply */
21
+ className?: string;
22
+ notificationActive?: boolean;
23
+ } & HTMLAttributes<HTMLDivElement>;
24
+ /**
25
+ * Badge component for Analytica Ensino platforms
26
+ *
27
+ * A flexible button component with multiple variants, sizes and actions.
28
+ *
29
+ * @param children - The content to display inside the badge
30
+ * @param size - The size variant (extra-small, small, medium, large, extra-large)
31
+ * @param variant - The visual style variant (solid, outline, link)
32
+ * @param action - The action type (primary, positive, negative)
33
+ * @param className - Additional CSS classes
34
+ * @param props - All other standard div HTML attributes
35
+ * @returns A styled badge element
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * <Badge variant="solid" action="info" size="medium">
40
+ * Information
41
+ * </Badge>
42
+ * ```
43
+ */
44
+ declare const Badge: ({ children, iconLeft, iconRight, size, variant, action, className, notificationActive, ...props }: BadgeProps) => react_jsx_runtime.JSX.Element;
45
+
46
+ export { Badge as default };
@@ -1 +1,46 @@
1
- export * from '../index';
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode, HTMLAttributes } from 'react';
3
+
4
+ /**
5
+ * Badge component props interface
6
+ */
7
+ type BadgeProps = {
8
+ /** Content to be displayed inside the badge */
9
+ children?: ReactNode;
10
+ /** Ícone à direita do texto */
11
+ iconRight?: ReactNode;
12
+ /** Ícone à esquerda do texto */
13
+ iconLeft?: ReactNode;
14
+ /** Size of the badge */
15
+ size?: 'small' | 'medium' | 'large';
16
+ /** Visual variant of the badge */
17
+ variant?: 'solid' | 'outlined' | 'exams' | 'examsOutlined' | 'resultStatus' | 'notification';
18
+ /** Action type of the badge */
19
+ action?: 'error' | 'warning' | 'success' | 'info' | 'muted' | 'exam1' | 'exam2' | 'exam3' | 'exam4' | 'positive' | 'negative';
20
+ /** Additional CSS classes to apply */
21
+ className?: string;
22
+ notificationActive?: boolean;
23
+ } & HTMLAttributes<HTMLDivElement>;
24
+ /**
25
+ * Badge component for Analytica Ensino platforms
26
+ *
27
+ * A flexible button component with multiple variants, sizes and actions.
28
+ *
29
+ * @param children - The content to display inside the badge
30
+ * @param size - The size variant (extra-small, small, medium, large, extra-large)
31
+ * @param variant - The visual style variant (solid, outline, link)
32
+ * @param action - The action type (primary, positive, negative)
33
+ * @param className - Additional CSS classes
34
+ * @param props - All other standard div HTML attributes
35
+ * @returns A styled badge element
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * <Badge variant="solid" action="info" size="medium">
40
+ * Information
41
+ * </Badge>
42
+ * ```
43
+ */
44
+ declare const Badge: ({ children, iconLeft, iconRight, size, variant, action, className, notificationActive, ...props }: BadgeProps) => react_jsx_runtime.JSX.Element;
45
+
46
+ export { Badge as default };
@@ -127,3 +127,4 @@ var Badge = ({
127
127
  );
128
128
  };
129
129
  var Badge_default = Badge;
130
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/Badge/Badge.tsx","../../src/utils/utils.ts"],"sourcesContent":["import { HTMLAttributes, ReactNode } from 'react';\nimport { Bell } from 'phosphor-react';\nimport { cn } from '../../utils/utils';\n\n/**\n * Lookup table for variant and action class combinations\n */\nconst VARIANT_ACTION_CLASSES = {\n solid: {\n error: 'bg-error-background text-error-700 focus-visible:outline-none',\n warning: 'bg-warning text-warning-800 focus-visible:outline-none',\n success: 'bg-success text-success-800 focus-visible:outline-none',\n info: 'bg-info text-info-800 focus-visible:outline-none',\n muted: 'bg-background-muted text-background-800 focus-visible:outline-none',\n },\n outlined: {\n error:\n 'bg-error text-error-700 border border-error-300 focus-visible:outline-none',\n warning:\n 'bg-warning text-warning-800 border border-warning-300 focus-visible:outline-none',\n success:\n 'bg-success text-success-800 border border-success-300 focus-visible:outline-none',\n info: 'bg-info text-info-800 border border-info-300 focus-visible:outline-none',\n muted:\n 'bg-background-muted text-background-800 border border-border-300 focus-visible:outline-none',\n },\n exams: {\n exam1: 'bg-exam-1 text-info-700 focus-visible:outline-none',\n exam2: 'bg-exam-2 text-typography-1 focus-visible:outline-none',\n exam3: 'bg-exam-3 text-typography-2 focus-visible:outline-none',\n exam4: 'bg-exam-4 text-success-700 focus-visible:outline-none',\n },\n examsOutlined: {\n exam1:\n 'bg-exam-1 text-info-700 border border-info-700 focus-visible:outline-none',\n exam2:\n 'bg-exam-2 text-typography-1 border border-typography-1 focus-visible:outline-none',\n exam3:\n 'bg-exam-3 text-typography-2 border border-typography-2 focus-visible:outline-none',\n exam4:\n 'bg-exam-4 text-success-700 border border-success-700 focus-visible:outline-none',\n },\n resultStatus: {\n negative: 'bg-error text-error-800 focus-visible:outline-none',\n positive: 'bg-success text-success-800 focus-visible:outline-none',\n },\n notification: 'text-primary',\n} as const;\n\n/**\n * Lookup table for size classes\n */\nconst SIZE_CLASSES = {\n small: 'text-2xs px-2 py-1',\n medium: 'text-xs px-2 py-1',\n large: 'text-sm px-2 py-1',\n} as const;\n\nconst SIZE_CLASSES_ICON = {\n small: 'size-3',\n medium: 'size-3.5',\n large: 'size-4',\n} as const;\n\n/**\n * Badge component props interface\n */\ntype BadgeProps = {\n /** Content to be displayed inside the badge */\n children?: ReactNode;\n /** Ícone à direita do texto */\n iconRight?: ReactNode;\n /** Ícone à esquerda do texto */\n iconLeft?: ReactNode;\n /** Size of the badge */\n size?: 'small' | 'medium' | 'large';\n /** Visual variant of the badge */\n variant?:\n | 'solid'\n | 'outlined'\n | 'exams'\n | 'examsOutlined'\n | 'resultStatus'\n | 'notification';\n /** Action type of the badge */\n action?:\n | 'error'\n | 'warning'\n | 'success'\n | 'info'\n | 'muted'\n | 'exam1'\n | 'exam2'\n | 'exam3'\n | 'exam4'\n | 'positive'\n | 'negative';\n /** Additional CSS classes to apply */\n className?: string;\n notificationActive?: boolean;\n} & HTMLAttributes<HTMLDivElement>;\n\n/**\n * Badge component for Analytica Ensino platforms\n *\n * A flexible button component with multiple variants, sizes and actions.\n *\n * @param children - The content to display inside the badge\n * @param size - The size variant (extra-small, small, medium, large, extra-large)\n * @param variant - The visual style variant (solid, outline, link)\n * @param action - The action type (primary, positive, negative)\n * @param className - Additional CSS classes\n * @param props - All other standard div HTML attributes\n * @returns A styled badge element\n *\n * @example\n * ```tsx\n * <Badge variant=\"solid\" action=\"info\" size=\"medium\">\n * Information\n * </Badge>\n * ```\n */\nconst Badge = ({\n children,\n iconLeft,\n iconRight,\n size = 'medium',\n variant = 'solid',\n action = 'error',\n className = '',\n notificationActive = false,\n ...props\n}: BadgeProps) => {\n // Get classes from lookup tables\n const sizeClasses = SIZE_CLASSES[size];\n const sizeClassesIcon = SIZE_CLASSES_ICON[size];\n const variantActionMap = VARIANT_ACTION_CLASSES[variant] || {};\n const variantClasses =\n typeof variantActionMap === 'string'\n ? variantActionMap\n : ((variantActionMap as Record<string, string>)[action] ??\n (variantActionMap as Record<string, string>).muted ??\n '');\n\n const baseClasses =\n 'inline-flex items-center justify-center rounded-xs font-normal gap-1 relative';\n\n const baseClassesIcon = 'flex items-center';\n if (variant === 'notification') {\n return (\n <div\n className={cn(baseClasses, variantClasses, sizeClasses, className)}\n {...props}\n >\n <Bell size={24} className=\"text-current\" aria-hidden=\"true\" />\n\n {notificationActive && (\n <span\n data-testid=\"notification-dot\"\n className=\"absolute top-[5px] right-[10px] block h-2 w-2 rounded-full bg-indicator-error ring-2 ring-white\"\n />\n )}\n </div>\n );\n }\n return (\n <div\n className={cn(baseClasses, variantClasses, sizeClasses, className)}\n {...props}\n >\n {iconLeft && (\n <span className={cn(baseClassesIcon, sizeClassesIcon)}>{iconLeft}</span>\n )}\n {children}\n {iconRight && (\n <span className={cn(baseClassesIcon, sizeClassesIcon)}>\n {iconRight}\n </span>\n )}\n </div>\n );\n};\n\nexport default Badge;\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4BAAqB;;;ACDrB,kBAAsC;AACtC,4BAAwB;AAEjB,SAAS,MAAM,QAAsB;AAC1C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;;;ADiJM;AA/IN,IAAM,yBAAyB;AAAA,EAC7B,OAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,OACE;AAAA,IACF,SACE;AAAA,IACF,SACE;AAAA,IACF,MAAM;AAAA,IACN,OACE;AAAA,EACJ;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,OACE;AAAA,IACF,OACE;AAAA,IACF,OACE;AAAA,IACF,OACE;AAAA,EACJ;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,cAAc;AAChB;AAKA,IAAM,eAAe;AAAA,EACnB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,IAAM,oBAAoB;AAAA,EACxB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AA4DA,IAAM,QAAQ,CAAC;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,qBAAqB;AAAA,EACrB,GAAG;AACL,MAAkB;AAEhB,QAAM,cAAc,aAAa,IAAI;AACrC,QAAM,kBAAkB,kBAAkB,IAAI;AAC9C,QAAM,mBAAmB,uBAAuB,OAAO,KAAK,CAAC;AAC7D,QAAM,iBACJ,OAAO,qBAAqB,WACxB,mBACE,iBAA4C,MAAM,KACnD,iBAA4C,SAC7C;AAEN,QAAM,cACJ;AAEF,QAAM,kBAAkB;AACxB,MAAI,YAAY,gBAAgB;AAC9B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,aAAa,gBAAgB,aAAa,SAAS;AAAA,QAChE,GAAG;AAAA,QAEJ;AAAA,sDAAC,8BAAK,MAAM,IAAI,WAAU,gBAAe,eAAY,QAAO;AAAA,UAE3D,sBACC;AAAA,YAAC;AAAA;AAAA,cACC,eAAY;AAAA,cACZ,WAAU;AAAA;AAAA,UACZ;AAAA;AAAA;AAAA,IAEJ;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,aAAa,gBAAgB,aAAa,SAAS;AAAA,MAChE,GAAG;AAAA,MAEH;AAAA,oBACC,4CAAC,UAAK,WAAW,GAAG,iBAAiB,eAAe,GAAI,oBAAS;AAAA,QAElE;AAAA,QACA,aACC,4CAAC,UAAK,WAAW,GAAG,iBAAiB,eAAe,GACjD,qBACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,IAAO,gBAAQ;","names":[]}
@@ -106,3 +106,4 @@ var Badge_default = Badge;
106
106
  export {
107
107
  Badge_default as default
108
108
  };
109
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/Badge/Badge.tsx","../../src/utils/utils.ts"],"sourcesContent":["import { HTMLAttributes, ReactNode } from 'react';\nimport { Bell } from 'phosphor-react';\nimport { cn } from '../../utils/utils';\n\n/**\n * Lookup table for variant and action class combinations\n */\nconst VARIANT_ACTION_CLASSES = {\n solid: {\n error: 'bg-error-background text-error-700 focus-visible:outline-none',\n warning: 'bg-warning text-warning-800 focus-visible:outline-none',\n success: 'bg-success text-success-800 focus-visible:outline-none',\n info: 'bg-info text-info-800 focus-visible:outline-none',\n muted: 'bg-background-muted text-background-800 focus-visible:outline-none',\n },\n outlined: {\n error:\n 'bg-error text-error-700 border border-error-300 focus-visible:outline-none',\n warning:\n 'bg-warning text-warning-800 border border-warning-300 focus-visible:outline-none',\n success:\n 'bg-success text-success-800 border border-success-300 focus-visible:outline-none',\n info: 'bg-info text-info-800 border border-info-300 focus-visible:outline-none',\n muted:\n 'bg-background-muted text-background-800 border border-border-300 focus-visible:outline-none',\n },\n exams: {\n exam1: 'bg-exam-1 text-info-700 focus-visible:outline-none',\n exam2: 'bg-exam-2 text-typography-1 focus-visible:outline-none',\n exam3: 'bg-exam-3 text-typography-2 focus-visible:outline-none',\n exam4: 'bg-exam-4 text-success-700 focus-visible:outline-none',\n },\n examsOutlined: {\n exam1:\n 'bg-exam-1 text-info-700 border border-info-700 focus-visible:outline-none',\n exam2:\n 'bg-exam-2 text-typography-1 border border-typography-1 focus-visible:outline-none',\n exam3:\n 'bg-exam-3 text-typography-2 border border-typography-2 focus-visible:outline-none',\n exam4:\n 'bg-exam-4 text-success-700 border border-success-700 focus-visible:outline-none',\n },\n resultStatus: {\n negative: 'bg-error text-error-800 focus-visible:outline-none',\n positive: 'bg-success text-success-800 focus-visible:outline-none',\n },\n notification: 'text-primary',\n} as const;\n\n/**\n * Lookup table for size classes\n */\nconst SIZE_CLASSES = {\n small: 'text-2xs px-2 py-1',\n medium: 'text-xs px-2 py-1',\n large: 'text-sm px-2 py-1',\n} as const;\n\nconst SIZE_CLASSES_ICON = {\n small: 'size-3',\n medium: 'size-3.5',\n large: 'size-4',\n} as const;\n\n/**\n * Badge component props interface\n */\ntype BadgeProps = {\n /** Content to be displayed inside the badge */\n children?: ReactNode;\n /** Ícone à direita do texto */\n iconRight?: ReactNode;\n /** Ícone à esquerda do texto */\n iconLeft?: ReactNode;\n /** Size of the badge */\n size?: 'small' | 'medium' | 'large';\n /** Visual variant of the badge */\n variant?:\n | 'solid'\n | 'outlined'\n | 'exams'\n | 'examsOutlined'\n | 'resultStatus'\n | 'notification';\n /** Action type of the badge */\n action?:\n | 'error'\n | 'warning'\n | 'success'\n | 'info'\n | 'muted'\n | 'exam1'\n | 'exam2'\n | 'exam3'\n | 'exam4'\n | 'positive'\n | 'negative';\n /** Additional CSS classes to apply */\n className?: string;\n notificationActive?: boolean;\n} & HTMLAttributes<HTMLDivElement>;\n\n/**\n * Badge component for Analytica Ensino platforms\n *\n * A flexible button component with multiple variants, sizes and actions.\n *\n * @param children - The content to display inside the badge\n * @param size - The size variant (extra-small, small, medium, large, extra-large)\n * @param variant - The visual style variant (solid, outline, link)\n * @param action - The action type (primary, positive, negative)\n * @param className - Additional CSS classes\n * @param props - All other standard div HTML attributes\n * @returns A styled badge element\n *\n * @example\n * ```tsx\n * <Badge variant=\"solid\" action=\"info\" size=\"medium\">\n * Information\n * </Badge>\n * ```\n */\nconst Badge = ({\n children,\n iconLeft,\n iconRight,\n size = 'medium',\n variant = 'solid',\n action = 'error',\n className = '',\n notificationActive = false,\n ...props\n}: BadgeProps) => {\n // Get classes from lookup tables\n const sizeClasses = SIZE_CLASSES[size];\n const sizeClassesIcon = SIZE_CLASSES_ICON[size];\n const variantActionMap = VARIANT_ACTION_CLASSES[variant] || {};\n const variantClasses =\n typeof variantActionMap === 'string'\n ? variantActionMap\n : ((variantActionMap as Record<string, string>)[action] ??\n (variantActionMap as Record<string, string>).muted ??\n '');\n\n const baseClasses =\n 'inline-flex items-center justify-center rounded-xs font-normal gap-1 relative';\n\n const baseClassesIcon = 'flex items-center';\n if (variant === 'notification') {\n return (\n <div\n className={cn(baseClasses, variantClasses, sizeClasses, className)}\n {...props}\n >\n <Bell size={24} className=\"text-current\" aria-hidden=\"true\" />\n\n {notificationActive && (\n <span\n data-testid=\"notification-dot\"\n className=\"absolute top-[5px] right-[10px] block h-2 w-2 rounded-full bg-indicator-error ring-2 ring-white\"\n />\n )}\n </div>\n );\n }\n return (\n <div\n className={cn(baseClasses, variantClasses, sizeClasses, className)}\n {...props}\n >\n {iconLeft && (\n <span className={cn(baseClassesIcon, sizeClassesIcon)}>{iconLeft}</span>\n )}\n {children}\n {iconRight && (\n <span className={cn(baseClassesIcon, sizeClassesIcon)}>\n {iconRight}\n </span>\n )}\n </div>\n );\n};\n\nexport default Badge;\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":";AACA,SAAS,YAAY;;;ACDrB,SAAS,YAA6B;AACtC,SAAS,eAAe;AAEjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADiJM,SAIE,KAJF;AA/IN,IAAM,yBAAyB;AAAA,EAC7B,OAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,UAAU;AAAA,IACR,OACE;AAAA,IACF,SACE;AAAA,IACF,SACE;AAAA,IACF,MAAM;AAAA,IACN,OACE;AAAA,EACJ;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,eAAe;AAAA,IACb,OACE;AAAA,IACF,OACE;AAAA,IACF,OACE;AAAA,IACF,OACE;AAAA,EACJ;AAAA,EACA,cAAc;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,cAAc;AAChB;AAKA,IAAM,eAAe;AAAA,EACnB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,IAAM,oBAAoB;AAAA,EACxB,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AA4DA,IAAM,QAAQ,CAAC;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,qBAAqB;AAAA,EACrB,GAAG;AACL,MAAkB;AAEhB,QAAM,cAAc,aAAa,IAAI;AACrC,QAAM,kBAAkB,kBAAkB,IAAI;AAC9C,QAAM,mBAAmB,uBAAuB,OAAO,KAAK,CAAC;AAC7D,QAAM,iBACJ,OAAO,qBAAqB,WACxB,mBACE,iBAA4C,MAAM,KACnD,iBAA4C,SAC7C;AAEN,QAAM,cACJ;AAEF,QAAM,kBAAkB;AACxB,MAAI,YAAY,gBAAgB;AAC9B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,aAAa,gBAAgB,aAAa,SAAS;AAAA,QAChE,GAAG;AAAA,QAEJ;AAAA,8BAAC,QAAK,MAAM,IAAI,WAAU,gBAAe,eAAY,QAAO;AAAA,UAE3D,sBACC;AAAA,YAAC;AAAA;AAAA,cACC,eAAY;AAAA,cACZ,WAAU;AAAA;AAAA,UACZ;AAAA;AAAA;AAAA,IAEJ;AAAA,EAEJ;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,aAAa,gBAAgB,aAAa,SAAS;AAAA,MAChE,GAAG;AAAA,MAEH;AAAA,oBACC,oBAAC,UAAK,WAAW,GAAG,iBAAiB,eAAe,GAAI,oBAAS;AAAA,QAElE;AAAA,QACA,aACC,oBAAC,UAAK,WAAW,GAAG,iBAAiB,eAAe,GACjD,qBACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,IAAO,gBAAQ;","names":[]}
@@ -0,0 +1,45 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode, ButtonHTMLAttributes } from 'react';
3
+
4
+ /**
5
+ * Button component props interface
6
+ */
7
+ type ButtonProps = {
8
+ /** Content to be displayed inside the button */
9
+ children: ReactNode;
10
+ /** Ícone à esquerda do texto */
11
+ iconLeft?: ReactNode;
12
+ /** Ícone à direita do texto */
13
+ iconRight?: ReactNode;
14
+ /** Size of the button */
15
+ size?: 'extra-small' | 'small' | 'medium' | 'large' | 'extra-large';
16
+ /** Visual variant of the button */
17
+ variant?: 'solid' | 'outline' | 'link';
18
+ /** Action type of the button */
19
+ action?: 'primary' | 'positive' | 'negative';
20
+ /** Additional CSS classes to apply */
21
+ className?: string;
22
+ } & ButtonHTMLAttributes<HTMLButtonElement>;
23
+ /**
24
+ * Button component for Analytica Ensino platforms
25
+ *
26
+ * A flexible button component with multiple variants, sizes and actions.
27
+ *
28
+ * @param children - The content to display inside the button
29
+ * @param size - The size variant (extra-small, small, medium, large, extra-large)
30
+ * @param variant - The visual style variant (solid, outline, link)
31
+ * @param action - The action type (primary, positive, negative)
32
+ * @param className - Additional CSS classes
33
+ * @param props - All other standard button HTML attributes
34
+ * @returns A styled button element
35
+ *
36
+ * @example
37
+ * ```tsx
38
+ * <Button variant="solid" action="primary" size="medium" onClick={() => console.log('clicked')}>
39
+ * Click me
40
+ * </Button>
41
+ * ```
42
+ */
43
+ declare const Button: ({ children, iconLeft, iconRight, size, variant, action, className, disabled, type, ...props }: ButtonProps) => react_jsx_runtime.JSX.Element;
44
+
45
+ export { Button as default };