@makroz/web 1.0.1

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 (302) hide show
  1. package/LICENSE +33 -0
  2. package/README.md +22 -0
  3. package/dist/auth/MkAuthContext.d.ts +43 -0
  4. package/dist/auth/MkAuthContext.d.ts.map +1 -0
  5. package/dist/auth/MkAuthContext.js +3 -0
  6. package/dist/auth/MkAuthContext.js.map +1 -0
  7. package/dist/auth/MkAuthForm.d.ts +42 -0
  8. package/dist/auth/MkAuthForm.d.ts.map +1 -0
  9. package/dist/auth/MkAuthForm.js +53 -0
  10. package/dist/auth/MkAuthForm.js.map +1 -0
  11. package/dist/auth/MkAuthProvider.d.ts +30 -0
  12. package/dist/auth/MkAuthProvider.d.ts.map +1 -0
  13. package/dist/auth/MkAuthProvider.js +319 -0
  14. package/dist/auth/MkAuthProvider.js.map +1 -0
  15. package/dist/auth/auth/MkAuthContext.d.ts +42 -0
  16. package/dist/auth/auth/MkAuthForm.d.ts +41 -0
  17. package/dist/auth/auth/MkAuthProvider.d.ts +29 -0
  18. package/dist/auth/auth/types.d.ts +62 -0
  19. package/dist/auth/auth/useMkAuth.d.ts +18 -0
  20. package/dist/auth/components/MkButton.d.ts +10 -0
  21. package/dist/auth/components/MkInput.d.ts +12 -0
  22. package/dist/auth/types.d.ts +63 -0
  23. package/dist/auth/types.d.ts.map +1 -0
  24. package/dist/auth/types.js +20 -0
  25. package/dist/auth/types.js.map +1 -0
  26. package/dist/auth/useMkAuth.d.ts +19 -0
  27. package/dist/auth/useMkAuth.d.ts.map +1 -0
  28. package/dist/auth/useMkAuth.js +26 -0
  29. package/dist/auth/useMkAuth.js.map +1 -0
  30. package/dist/components/MkAccordion.d.ts +36 -0
  31. package/dist/components/MkAccordion.d.ts.map +1 -0
  32. package/dist/components/MkAccordion.js +25 -0
  33. package/dist/components/MkAccordion.js.map +1 -0
  34. package/dist/components/MkAccordion.module.css +79 -0
  35. package/dist/components/MkAlert.d.ts +25 -0
  36. package/dist/components/MkAlert.d.ts.map +1 -0
  37. package/dist/components/MkAlert.js +23 -0
  38. package/dist/components/MkAlert.js.map +1 -0
  39. package/dist/components/MkAlert.module.css +103 -0
  40. package/dist/components/MkAvatar.d.ts +16 -0
  41. package/dist/components/MkAvatar.d.ts.map +1 -0
  42. package/dist/components/MkAvatar.js +25 -0
  43. package/dist/components/MkAvatar.js.map +1 -0
  44. package/dist/components/MkAvatar.module.css +62 -0
  45. package/dist/components/MkBadge.d.ts +15 -0
  46. package/dist/components/MkBadge.d.ts.map +1 -0
  47. package/dist/components/MkBadge.js +9 -0
  48. package/dist/components/MkBadge.js.map +1 -0
  49. package/dist/components/MkBadge.module.css +74 -0
  50. package/dist/components/MkButton.d.ts +11 -0
  51. package/dist/components/MkButton.d.ts.map +1 -0
  52. package/dist/components/MkButton.js +20 -0
  53. package/dist/components/MkButton.js.map +1 -0
  54. package/dist/components/MkButton.module.css +85 -0
  55. package/dist/components/MkButton.test.d.ts +2 -0
  56. package/dist/components/MkButton.test.d.ts.map +1 -0
  57. package/dist/components/MkButton.test.js +58 -0
  58. package/dist/components/MkButton.test.js.map +1 -0
  59. package/dist/components/MkCard.d.ts +18 -0
  60. package/dist/components/MkCard.d.ts.map +1 -0
  61. package/dist/components/MkCard.js +8 -0
  62. package/dist/components/MkCard.js.map +1 -0
  63. package/dist/components/MkCard.module.css +63 -0
  64. package/dist/components/MkCheck.d.ts +32 -0
  65. package/dist/components/MkCheck.d.ts.map +1 -0
  66. package/dist/components/MkCheck.js +14 -0
  67. package/dist/components/MkCheck.js.map +1 -0
  68. package/dist/components/MkCheck.module.css +87 -0
  69. package/dist/components/MkDatePicker.d.ts +29 -0
  70. package/dist/components/MkDatePicker.d.ts.map +1 -0
  71. package/dist/components/MkDatePicker.js +12 -0
  72. package/dist/components/MkDatePicker.js.map +1 -0
  73. package/dist/components/MkDatePicker.module.css +77 -0
  74. package/dist/components/MkDivider.d.ts +14 -0
  75. package/dist/components/MkDivider.d.ts.map +1 -0
  76. package/dist/components/MkDivider.js +14 -0
  77. package/dist/components/MkDivider.js.map +1 -0
  78. package/dist/components/MkDivider.module.css +39 -0
  79. package/dist/components/MkDropDown.d.ts +22 -0
  80. package/dist/components/MkDropDown.d.ts.map +1 -0
  81. package/dist/components/MkDropDown.js +26 -0
  82. package/dist/components/MkDropDown.js.map +1 -0
  83. package/dist/components/MkDropDown.module.css +108 -0
  84. package/dist/components/MkEmptyState.d.ts +14 -0
  85. package/dist/components/MkEmptyState.d.ts.map +1 -0
  86. package/dist/components/MkEmptyState.js +8 -0
  87. package/dist/components/MkEmptyState.js.map +1 -0
  88. package/dist/components/MkEmptyState.module.css +35 -0
  89. package/dist/components/MkFileUpload.d.ts +36 -0
  90. package/dist/components/MkFileUpload.d.ts.map +1 -0
  91. package/dist/components/MkFileUpload.js +52 -0
  92. package/dist/components/MkFileUpload.js.map +1 -0
  93. package/dist/components/MkFileUpload.module.css +74 -0
  94. package/dist/components/MkIcons.d.ts +14 -0
  95. package/dist/components/MkIcons.d.ts.map +1 -0
  96. package/dist/components/MkIcons.js +38 -0
  97. package/dist/components/MkIcons.js.map +1 -0
  98. package/dist/components/MkInfiniteList.d.ts +15 -0
  99. package/dist/components/MkInfiniteList.d.ts.map +1 -0
  100. package/dist/components/MkInfiniteList.js +31 -0
  101. package/dist/components/MkInfiniteList.js.map +1 -0
  102. package/dist/components/MkInfiniteList.module.css +69 -0
  103. package/dist/components/MkInput.d.ts +13 -0
  104. package/dist/components/MkInput.d.ts.map +1 -0
  105. package/dist/components/MkInput.js +23 -0
  106. package/dist/components/MkInput.js.map +1 -0
  107. package/dist/components/MkInput.module.css +94 -0
  108. package/dist/components/MkLoading.d.ts +20 -0
  109. package/dist/components/MkLoading.d.ts.map +1 -0
  110. package/dist/components/MkLoading.js +16 -0
  111. package/dist/components/MkLoading.js.map +1 -0
  112. package/dist/components/MkLoading.module.css +39 -0
  113. package/dist/components/MkModal.d.ts +20 -0
  114. package/dist/components/MkModal.d.ts.map +1 -0
  115. package/dist/components/MkModal.js +33 -0
  116. package/dist/components/MkModal.js.map +1 -0
  117. package/dist/components/MkModal.module.css +107 -0
  118. package/dist/components/MkProgressBar.d.ts +17 -0
  119. package/dist/components/MkProgressBar.d.ts.map +1 -0
  120. package/dist/components/MkProgressBar.js +9 -0
  121. package/dist/components/MkProgressBar.js.map +1 -0
  122. package/dist/components/MkProgressBar.module.css +48 -0
  123. package/dist/components/MkRadio.d.ts +34 -0
  124. package/dist/components/MkRadio.d.ts.map +1 -0
  125. package/dist/components/MkRadio.js +21 -0
  126. package/dist/components/MkRadio.js.map +1 -0
  127. package/dist/components/MkRadio.module.css +74 -0
  128. package/dist/components/MkSearchInput.d.ts +30 -0
  129. package/dist/components/MkSearchInput.d.ts.map +1 -0
  130. package/dist/components/MkSearchInput.js +29 -0
  131. package/dist/components/MkSearchInput.js.map +1 -0
  132. package/dist/components/MkSearchInput.module.css +80 -0
  133. package/dist/components/MkSelect.d.ts +23 -0
  134. package/dist/components/MkSelect.d.ts.map +1 -0
  135. package/dist/components/MkSelect.js +61 -0
  136. package/dist/components/MkSelect.js.map +1 -0
  137. package/dist/components/MkSelect.module.css +177 -0
  138. package/dist/components/MkSkeleton.d.ts +22 -0
  139. package/dist/components/MkSkeleton.d.ts.map +1 -0
  140. package/dist/components/MkSkeleton.js +23 -0
  141. package/dist/components/MkSkeleton.js.map +1 -0
  142. package/dist/components/MkSkeleton.module.css +28 -0
  143. package/dist/components/MkSwitch.d.ts +22 -0
  144. package/dist/components/MkSwitch.d.ts.map +1 -0
  145. package/dist/components/MkSwitch.js +16 -0
  146. package/dist/components/MkSwitch.js.map +1 -0
  147. package/dist/components/MkSwitch.module.css +108 -0
  148. package/dist/components/MkTable.d.ts +27 -0
  149. package/dist/components/MkTable.d.ts.map +1 -0
  150. package/dist/components/MkTable.js +13 -0
  151. package/dist/components/MkTable.js.map +1 -0
  152. package/dist/components/MkTable.module.css +163 -0
  153. package/dist/components/MkTabs.d.ts +22 -0
  154. package/dist/components/MkTabs.d.ts.map +1 -0
  155. package/dist/components/MkTabs.js +19 -0
  156. package/dist/components/MkTabs.js.map +1 -0
  157. package/dist/components/MkTabs.module.css +117 -0
  158. package/dist/components/MkTextArea.d.ts +21 -0
  159. package/dist/components/MkTextArea.d.ts.map +1 -0
  160. package/dist/components/MkTextArea.js +10 -0
  161. package/dist/components/MkTextArea.js.map +1 -0
  162. package/dist/components/MkThemeEditor.d.ts +8 -0
  163. package/dist/components/MkThemeEditor.d.ts.map +1 -0
  164. package/dist/components/MkThemeEditor.js +45 -0
  165. package/dist/components/MkThemeEditor.js.map +1 -0
  166. package/dist/components/MkThemeEditor.module.css +177 -0
  167. package/dist/components/MkToastContainer.d.ts +3 -0
  168. package/dist/components/MkToastContainer.d.ts.map +1 -0
  169. package/dist/components/MkToastContainer.js +81 -0
  170. package/dist/components/MkToastContainer.js.map +1 -0
  171. package/dist/components/MkToastContainer.module.css +95 -0
  172. package/dist/components/MkTooltip.d.ts +14 -0
  173. package/dist/components/MkTooltip.d.ts.map +1 -0
  174. package/dist/components/MkTooltip.js +19 -0
  175. package/dist/components/MkTooltip.js.map +1 -0
  176. package/dist/components/MkTooltip.module.css +43 -0
  177. package/dist/components/MkWindowList.d.ts +20 -0
  178. package/dist/components/MkWindowList.d.ts.map +1 -0
  179. package/dist/components/MkWindowList.js +61 -0
  180. package/dist/components/MkWindowList.js.map +1 -0
  181. package/dist/components/MkWindowList.module.css +59 -0
  182. package/dist/components/index.d.ts +31 -0
  183. package/dist/components/index.d.ts.map +1 -0
  184. package/dist/components/index.js +34 -0
  185. package/dist/components/index.js.map +1 -0
  186. package/dist/context/MkApiContext.d.ts +15 -0
  187. package/dist/context/MkApiContext.d.ts.map +1 -0
  188. package/dist/context/MkApiContext.js +30 -0
  189. package/dist/context/MkApiContext.js.map +1 -0
  190. package/dist/context/MkAuthContext.d.ts +20 -0
  191. package/dist/context/MkAuthContext.d.ts.map +1 -0
  192. package/dist/context/MkAuthContext.js +90 -0
  193. package/dist/context/MkAuthContext.js.map +1 -0
  194. package/dist/context/MkConfirmContext.d.ts +8 -0
  195. package/dist/context/MkConfirmContext.d.ts.map +1 -0
  196. package/dist/context/MkConfirmContext.js +39 -0
  197. package/dist/context/MkConfirmContext.js.map +1 -0
  198. package/dist/context/MkToastContext.d.ts +8 -0
  199. package/dist/context/MkToastContext.d.ts.map +1 -0
  200. package/dist/context/MkToastContext.js +64 -0
  201. package/dist/context/MkToastContext.js.map +1 -0
  202. package/dist/hooks/useApi.d.ts +19 -0
  203. package/dist/hooks/useApi.d.ts.map +1 -0
  204. package/dist/hooks/useApi.js +82 -0
  205. package/dist/hooks/useApi.js.map +1 -0
  206. package/dist/hooks/useApi.test.d.ts +2 -0
  207. package/dist/hooks/useApi.test.d.ts.map +1 -0
  208. package/dist/hooks/useApi.test.js +186 -0
  209. package/dist/hooks/useApi.test.js.map +1 -0
  210. package/dist/hooks/useMkClickOutside.d.ts +8 -0
  211. package/dist/hooks/useMkClickOutside.d.ts.map +1 -0
  212. package/dist/hooks/useMkClickOutside.js +26 -0
  213. package/dist/hooks/useMkClickOutside.js.map +1 -0
  214. package/dist/hooks/useMkCrud.d.ts +39 -0
  215. package/dist/hooks/useMkCrud.d.ts.map +1 -0
  216. package/dist/hooks/useMkCrud.js +121 -0
  217. package/dist/hooks/useMkCrud.js.map +1 -0
  218. package/dist/hooks/useMkCrud.test.d.ts +2 -0
  219. package/dist/hooks/useMkCrud.test.d.ts.map +1 -0
  220. package/dist/hooks/useMkCrud.test.js +89 -0
  221. package/dist/hooks/useMkCrud.test.js.map +1 -0
  222. package/dist/hooks/useMkDebounce.d.ts +24 -0
  223. package/dist/hooks/useMkDebounce.d.ts.map +1 -0
  224. package/dist/hooks/useMkDebounce.js +38 -0
  225. package/dist/hooks/useMkDebounce.js.map +1 -0
  226. package/dist/hooks/useMkEffectDebug.d.ts +7 -0
  227. package/dist/hooks/useMkEffectDebug.d.ts.map +1 -0
  228. package/dist/hooks/useMkEffectDebug.js +26 -0
  229. package/dist/hooks/useMkEffectDebug.js.map +1 -0
  230. package/dist/hooks/useMkEvent.d.ts +31 -0
  231. package/dist/hooks/useMkEvent.d.ts.map +1 -0
  232. package/dist/hooks/useMkEvent.js +56 -0
  233. package/dist/hooks/useMkEvent.js.map +1 -0
  234. package/dist/hooks/useMkForm.d.ts +43 -0
  235. package/dist/hooks/useMkForm.d.ts.map +1 -0
  236. package/dist/hooks/useMkForm.js +115 -0
  237. package/dist/hooks/useMkForm.js.map +1 -0
  238. package/dist/hooks/useMkForm.test.d.ts +2 -0
  239. package/dist/hooks/useMkForm.test.d.ts.map +1 -0
  240. package/dist/hooks/useMkForm.test.js +81 -0
  241. package/dist/hooks/useMkForm.test.js.map +1 -0
  242. package/dist/hooks/useMkInViewPort.d.ts +14 -0
  243. package/dist/hooks/useMkInViewPort.d.ts.map +1 -0
  244. package/dist/hooks/useMkInViewPort.js +31 -0
  245. package/dist/hooks/useMkInViewPort.js.map +1 -0
  246. package/dist/hooks/useMkInfiniteList.d.ts +15 -0
  247. package/dist/hooks/useMkInfiniteList.d.ts.map +1 -0
  248. package/dist/hooks/useMkInfiniteList.js +47 -0
  249. package/dist/hooks/useMkInfiniteList.js.map +1 -0
  250. package/dist/hooks/useMkList.d.ts +61 -0
  251. package/dist/hooks/useMkList.d.ts.map +1 -0
  252. package/dist/hooks/useMkList.js +54 -0
  253. package/dist/hooks/useMkList.js.map +1 -0
  254. package/dist/hooks/useMkLocalStorage.d.ts +6 -0
  255. package/dist/hooks/useMkLocalStorage.d.ts.map +1 -0
  256. package/dist/hooks/useMkLocalStorage.js +33 -0
  257. package/dist/hooks/useMkLocalStorage.js.map +1 -0
  258. package/dist/hooks/useMkLongPress.d.ts +37 -0
  259. package/dist/hooks/useMkLongPress.d.ts.map +1 -0
  260. package/dist/hooks/useMkLongPress.js +59 -0
  261. package/dist/hooks/useMkLongPress.js.map +1 -0
  262. package/dist/hooks/useMkMediaQuery.d.ts +14 -0
  263. package/dist/hooks/useMkMediaQuery.d.ts.map +1 -0
  264. package/dist/hooks/useMkMediaQuery.js +31 -0
  265. package/dist/hooks/useMkMediaQuery.js.map +1 -0
  266. package/dist/hooks/useMkPrevious.d.ts +7 -0
  267. package/dist/hooks/useMkPrevious.d.ts.map +1 -0
  268. package/dist/hooks/useMkPrevious.js +14 -0
  269. package/dist/hooks/useMkPrevious.js.map +1 -0
  270. package/dist/hooks/useMkScreenSize.d.ts +25 -0
  271. package/dist/hooks/useMkScreenSize.d.ts.map +1 -0
  272. package/dist/hooks/useMkScreenSize.js +43 -0
  273. package/dist/hooks/useMkScreenSize.js.map +1 -0
  274. package/dist/hooks/useMkStore.d.ts +22 -0
  275. package/dist/hooks/useMkStore.d.ts.map +1 -0
  276. package/dist/hooks/useMkStore.js +58 -0
  277. package/dist/hooks/useMkStore.js.map +1 -0
  278. package/dist/hooks/useMkToggle.d.ts +6 -0
  279. package/dist/hooks/useMkToggle.d.ts.map +1 -0
  280. package/dist/hooks/useMkToggle.js +13 -0
  281. package/dist/hooks/useMkToggle.js.map +1 -0
  282. package/dist/index.d.ts +33 -0
  283. package/dist/index.d.ts.map +1 -0
  284. package/dist/index.js +37 -0
  285. package/dist/index.js.map +1 -0
  286. package/dist/styles/index.css +124 -0
  287. package/dist/test-setup.d.ts +2 -0
  288. package/dist/test-setup.d.ts.map +1 -0
  289. package/dist/test-setup.js +2 -0
  290. package/dist/test-setup.js.map +1 -0
  291. package/dist/theme/MkThemeProvider.d.ts +20 -0
  292. package/dist/theme/MkThemeProvider.d.ts.map +1 -0
  293. package/dist/theme/MkThemeProvider.js +91 -0
  294. package/dist/theme/MkThemeProvider.js.map +1 -0
  295. package/dist/utils/images.d.ts +9 -0
  296. package/dist/utils/images.d.ts.map +1 -0
  297. package/dist/utils/images.js +50 -0
  298. package/dist/utils/images.js.map +1 -0
  299. package/eslint-plugin-mk/__tests__/no-cross-module-import.test.js +66 -0
  300. package/eslint-plugin-mk/index.js +29 -0
  301. package/eslint-plugin-mk/rules/no-cross-module-import.js +71 -0
  302. package/package.json +62 -0
@@ -0,0 +1,41 @@
1
+ export interface MkAuthFormProps {
2
+ /** Auth scope to use, e.g. "admin", "member", "guard". */
3
+ scope: string;
4
+ /**
5
+ * Path to navigate to after a successful login. Defaults to
6
+ * `/{scope}/dashboard`. Use a fully qualified path or a relative one
7
+ * — this component only triggers a callback.
8
+ */
9
+ redirectAfterLogin?: string;
10
+ /**
11
+ * Show a "¿Olvidaste tu contraseña?" link below the submit button.
12
+ * Defaults to `true`.
13
+ */
14
+ showForgotPassword?: boolean;
15
+ /**
16
+ * Optional: invoked after a successful login. Receives the resolved
17
+ * `AdminDto` and the `redirectAfterLogin` value so the host can do
18
+ * `router.push(...)` with its own router. When omitted, the
19
+ * component only logs the success.
20
+ */
21
+ onLoginSuccess?: (admin: {
22
+ id: string;
23
+ email: string;
24
+ }, redirectTo: string) => void;
25
+ /**
26
+ * Optional: invoked when the user clicks the forgot-password link.
27
+ * When omitted, the link is rendered as a plain `<a href="/{scope}/forgot">`
28
+ * — sufficient for any routing setup.
29
+ */
30
+ onForgotPassword?: () => void;
31
+ }
32
+ /**
33
+ * Minimal, dependency-free login form. Renders email + password fields,
34
+ * a submit button, an inline error region, and an optional
35
+ * "¿Olvidaste tu contraseña?" link.
36
+ *
37
+ * Validation is intentionally simple (non-empty + email shape) — the
38
+ * server is the source of truth, and this keeps the component focused
39
+ * on the auth lifecycle.
40
+ */
41
+ export declare function MkAuthForm({ scope, redirectAfterLogin, showForgotPassword, onLoginSuccess, onForgotPassword, }: MkAuthFormProps): React.JSX.Element;
@@ -0,0 +1,29 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { AuthStorageAdapter } from './types';
3
+ export interface MkAuthProviderProps {
4
+ /** Logical scope of this provider, e.g. "admin", "member", "guard". */
5
+ scope: string;
6
+ /**
7
+ * Base URL of the API. The provider appends `/api/${scope}/auth/...`
8
+ * to it. Trailing slashes are tolerated.
9
+ */
10
+ apiBaseUrl: string;
11
+ /** Children wrapped by the provider. */
12
+ children: ReactNode;
13
+ /**
14
+ * Optional storage adapter. Defaults to `window.localStorage` when
15
+ * available. Tests pass an in-memory adapter.
16
+ */
17
+ storage?: AuthStorageAdapter;
18
+ /**
19
+ * Optional: inject a custom `fetch` implementation (e.g. for tests
20
+ * that polyfill `global.fetch` differently). Defaults to `globalThis.fetch`.
21
+ */
22
+ fetcher?: typeof fetch;
23
+ }
24
+ /**
25
+ * `<QueryClientProvider>` + `<MkAuthProviderInner>`. The outer wrapper
26
+ * exists so consumers don't have to remember to also mount a
27
+ * `QueryClient` — the auth provider is self-contained.
28
+ */
29
+ export declare function MkAuthProvider(props: MkAuthProviderProps): React.JSX.Element;
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Auth types for @mk/web.
3
+ *
4
+ * Mirrors the JSON contract produced by the Laravel backend's
5
+ * `AuthTokenResource` and `AdminResource` (see
6
+ * `apps/sandbox-laravel/app/Modules/Admin/Http/Resources/*`):
7
+ *
8
+ * - `AdminDto` — shape returned by `/api/{scope}/auth/me` and embedded in
9
+ * login/refresh responses under `admin`.
10
+ * - `AuthTokens` — the `access_token` / `refresh_token` bundle issued on
11
+ * successful login and refresh.
12
+ * - `LoginInput` — payload POSTed to `/api/{scope}/auth/login`.
13
+ * - `RefreshResponse` — shape returned by `/api/{scope}/auth/refresh`.
14
+ *
15
+ * These types are intentionally local to the auth module (not exported as
16
+ * a generic MK contract) so that future scopes (e.g. `member`, `guard`)
17
+ * can reuse the same provider with their own DTOs.
18
+ */
19
+ export interface AdminDto {
20
+ id: string;
21
+ name: string;
22
+ email: string;
23
+ auth_scope: string;
24
+ email_verified_at: string | null;
25
+ abilities: string[];
26
+ roles: string[];
27
+ }
28
+ export interface AuthTokens {
29
+ access_token: string;
30
+ refresh_token: string;
31
+ token_type: 'Bearer';
32
+ expires_in: number;
33
+ }
34
+ export interface LoginInput {
35
+ email: string;
36
+ password: string;
37
+ }
38
+ export interface RefreshResponse extends AuthTokens {
39
+ admin: AdminDto;
40
+ }
41
+ export interface AuthStorageAdapter {
42
+ getItem: (key: string) => string | null;
43
+ setItem: (key: string, value: string) => void;
44
+ removeItem: (key: string) => void;
45
+ }
46
+ /**
47
+ * JSON shape returned by a login attempt. Login responses nest the user
48
+ * under `admin` (matches the backend's `AuthTokenResource`).
49
+ */
50
+ export interface LoginResponse {
51
+ access_token: string;
52
+ refresh_token: string;
53
+ token_type: 'Bearer';
54
+ expires_in: number;
55
+ admin: AdminDto;
56
+ }
57
+ /**
58
+ * JSON shape returned by the `/me` endpoint.
59
+ */
60
+ export interface MeResponse {
61
+ data: AdminDto;
62
+ }
@@ -0,0 +1,18 @@
1
+ import type { MkAuthContextValue } from './MkAuthContext';
2
+ /**
3
+ * Hook to consume the value exposed by `<MkAuthProvider>`.
4
+ *
5
+ * Throws if used outside of a provider — this is intentional. We don't
6
+ * want auth code to silently no-op when the provider is missing, which
7
+ * is a real source of bugs (e.g. a deeply nested page that forgets to
8
+ * mount the auth context).
9
+ *
10
+ * The error message is deliberately short and includes the provider name
11
+ * so the dev can grep for it.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * const { user, isAuthenticated, hasAbility, login, logout } = useMkAuth();
16
+ * ```
17
+ */
18
+ export declare function useMkAuth(): MkAuthContextValue;
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { MkTheme } from '@mk/core';
3
+ interface MkButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
4
+ variant?: 'primary' | 'outline' | 'ghost' | 'error';
5
+ loading?: boolean;
6
+ /** @deprecated Theme is now controlled via CSS variables */
7
+ _theme?: MkTheme;
8
+ }
9
+ export declare const MkButton: React.FC<MkButtonProps>;
10
+ export {};
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ interface MkInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'> {
3
+ label?: string;
4
+ error?: string;
5
+ success?: boolean;
6
+ helperText?: string;
7
+ iconLeft?: React.ReactNode;
8
+ iconRight?: React.ReactNode;
9
+ onChange?: (value: string) => void;
10
+ }
11
+ export declare const MkInput: React.FC<MkInputProps>;
12
+ export {};
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Auth types for @mk/web.
3
+ *
4
+ * Mirrors the JSON contract produced by the Laravel backend's
5
+ * `AuthTokenResource` and `AdminResource` (see
6
+ * `apps/sandbox-laravel/app/Modules/Admin/Http/Resources/*`):
7
+ *
8
+ * - `AdminDto` — shape returned by `/api/{scope}/auth/me` and embedded in
9
+ * login/refresh responses under `admin`.
10
+ * - `AuthTokens` — the `access_token` / `refresh_token` bundle issued on
11
+ * successful login and refresh.
12
+ * - `LoginInput` — payload POSTed to `/api/{scope}/auth/login`.
13
+ * - `RefreshResponse` — shape returned by `/api/{scope}/auth/refresh`.
14
+ *
15
+ * These types are intentionally local to the auth module (not exported as
16
+ * a generic MK contract) so that future scopes (e.g. `member`, `guard`)
17
+ * can reuse the same provider with their own DTOs.
18
+ */
19
+ export interface AdminDto {
20
+ id: string;
21
+ name: string;
22
+ email: string;
23
+ auth_scope: string;
24
+ email_verified_at: string | null;
25
+ abilities: string[];
26
+ roles: string[];
27
+ }
28
+ export interface AuthTokens {
29
+ access_token: string;
30
+ refresh_token: string;
31
+ token_type: 'Bearer';
32
+ expires_in: number;
33
+ }
34
+ export interface LoginInput {
35
+ email: string;
36
+ password: string;
37
+ }
38
+ export interface RefreshResponse extends AuthTokens {
39
+ admin: AdminDto;
40
+ }
41
+ export interface AuthStorageAdapter {
42
+ getItem: (key: string) => string | null;
43
+ setItem: (key: string, value: string) => void;
44
+ removeItem: (key: string) => void;
45
+ }
46
+ /**
47
+ * JSON shape returned by a login attempt. Login responses nest the user
48
+ * under `admin` (matches the backend's `AuthTokenResource`).
49
+ */
50
+ export interface LoginResponse {
51
+ access_token: string;
52
+ refresh_token: string;
53
+ token_type: 'Bearer';
54
+ expires_in: number;
55
+ admin: AdminDto;
56
+ }
57
+ /**
58
+ * JSON shape returned by the `/me` endpoint.
59
+ */
60
+ export interface MeResponse {
61
+ data: AdminDto;
62
+ }
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,QAAQ,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IAC/C,KAAK,EAAE,QAAQ,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,QAAQ,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,QAAQ,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,QAAQ,CAAC;CAClB"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Auth types for @mk/web.
3
+ *
4
+ * Mirrors the JSON contract produced by the Laravel backend's
5
+ * `AuthTokenResource` and `AdminResource` (see
6
+ * `apps/sandbox-laravel/app/Modules/Admin/Http/Resources/*`):
7
+ *
8
+ * - `AdminDto` — shape returned by `/api/{scope}/auth/me` and embedded in
9
+ * login/refresh responses under `admin`.
10
+ * - `AuthTokens` — the `access_token` / `refresh_token` bundle issued on
11
+ * successful login and refresh.
12
+ * - `LoginInput` — payload POSTed to `/api/{scope}/auth/login`.
13
+ * - `RefreshResponse` — shape returned by `/api/{scope}/auth/refresh`.
14
+ *
15
+ * These types are intentionally local to the auth module (not exported as
16
+ * a generic MK contract) so that future scopes (e.g. `member`, `guard`)
17
+ * can reuse the same provider with their own DTOs.
18
+ */
19
+ export {};
20
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
@@ -0,0 +1,19 @@
1
+ import type { MkAuthContextValue } from './MkAuthContext';
2
+ /**
3
+ * Hook to consume the value exposed by `<MkAuthProvider>`.
4
+ *
5
+ * Throws if used outside of a provider — this is intentional. We don't
6
+ * want auth code to silently no-op when the provider is missing, which
7
+ * is a real source of bugs (e.g. a deeply nested page that forgets to
8
+ * mount the auth context).
9
+ *
10
+ * The error message is deliberately short and includes the provider name
11
+ * so the dev can grep for it.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * const { user, isAuthenticated, hasAbility, login, logout } = useMkAuth();
16
+ * ```
17
+ */
18
+ export declare function useMkAuth(): MkAuthContextValue;
19
+ //# sourceMappingURL=useMkAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkAuth.d.ts","sourceRoot":"","sources":["../../src/auth/useMkAuth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,IAAI,kBAAkB,CAM9C"}
@@ -0,0 +1,26 @@
1
+ import { useContext } from 'react';
2
+ import { MkAuthContext } from './MkAuthContext';
3
+ /**
4
+ * Hook to consume the value exposed by `<MkAuthProvider>`.
5
+ *
6
+ * Throws if used outside of a provider — this is intentional. We don't
7
+ * want auth code to silently no-op when the provider is missing, which
8
+ * is a real source of bugs (e.g. a deeply nested page that forgets to
9
+ * mount the auth context).
10
+ *
11
+ * The error message is deliberately short and includes the provider name
12
+ * so the dev can grep for it.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const { user, isAuthenticated, hasAbility, login, logout } = useMkAuth();
17
+ * ```
18
+ */
19
+ export function useMkAuth() {
20
+ const ctx = useContext(MkAuthContext);
21
+ if (!ctx) {
22
+ throw new Error('MkAuthProvider missing');
23
+ }
24
+ return ctx;
25
+ }
26
+ //# sourceMappingURL=useMkAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMkAuth.js","sourceRoot":"","sources":["../../src/auth/useMkAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,SAAS;IACrB,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ /**
3
+ * @module MkAccordion
4
+ * @description Collapsible accordion sections. Supports single or multiple open items.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * <MkAccordion
9
+ * items={[
10
+ * { key: 'faq1', title: '¿Cómo funciona?', content: <p>Explicación aquí...</p> },
11
+ * { key: 'faq2', title: 'Precios', content: <p>Gratis para siempre</p> },
12
+ * ]}
13
+ * multiple
14
+ * />
15
+ * ```
16
+ */
17
+ export interface MkAccordionItem {
18
+ key: string;
19
+ title: string | React.ReactNode;
20
+ content: React.ReactNode;
21
+ disabled?: boolean;
22
+ }
23
+ export interface MkAccordionProps {
24
+ items: MkAccordionItem[];
25
+ /** Allow multiple items open at once. Default false. */
26
+ multiple?: boolean;
27
+ /** Initially expanded keys. */
28
+ defaultExpanded?: string[];
29
+ /** Controlled expanded keys. */
30
+ expanded?: string[];
31
+ onChange?: (expandedKeys: string[]) => void;
32
+ variant?: 'default' | 'bordered' | 'separated';
33
+ className?: string;
34
+ }
35
+ export declare const MkAccordion: React.FC<MkAccordionProps>;
36
+ //# sourceMappingURL=MkAccordion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MkAccordion.d.ts","sourceRoot":"","sources":["../../src/components/MkAccordion.tsx"],"names":[],"mappings":"AACA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAGrD;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IAChC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAqDlD,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ use;
3
+ client;
4
+ import { useState, useCallback } from 'react';
5
+ import styles from './MkAccordion.module.css';
6
+ export const MkAccordion = ({ items = [], multiple = false, defaultExpanded = [], expanded: controlledExpanded, onChange, variant = 'default', className, }) => {
7
+ const [internalExpanded, setInternalExpanded] = useState(defaultExpanded);
8
+ const expandedKeys = controlledExpanded !== null && controlledExpanded !== void 0 ? controlledExpanded : internalExpanded;
9
+ const toggleItem = useCallback((key) => {
10
+ let next;
11
+ if (expandedKeys.includes(key)) {
12
+ next = expandedKeys.filter((k) => k !== key);
13
+ }
14
+ else {
15
+ next = multiple ? [...expandedKeys, key] : [key];
16
+ }
17
+ setInternalExpanded(next);
18
+ onChange === null || onChange === void 0 ? void 0 : onChange(next);
19
+ }, [expandedKeys, multiple, onChange]);
20
+ return (_jsx("div", { className: `${styles.accordion} ${styles[variant]} ${className || ''}`, children: items.map((item) => {
21
+ const isOpen = expandedKeys.includes(item.key);
22
+ return (_jsxs("div", { className: `${styles.item} ${isOpen ? styles.open : ''}`, children: [_jsxs("button", { className: styles.header, onClick: () => !item.disabled && toggleItem(item.key), disabled: item.disabled, "aria-expanded": isOpen, children: [_jsx("span", { className: styles.title, children: item.title }), _jsx("span", { className: `${styles.chevron} ${isOpen ? styles.chevronOpen : ''}`, children: _jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", children: _jsx("polyline", { points: "4 6 8 10 12 6" }) }) })] }), _jsx("div", { className: `${styles.body} ${isOpen ? styles.bodyOpen : ''}`, children: _jsx("div", { className: styles.content, children: item.content }) })] }, item.key));
23
+ }) }));
24
+ };
25
+ //# sourceMappingURL=MkAccordion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MkAccordion.js","sourceRoot":"","sources":["../../src/components/MkAccordion.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ .accordion {
2
+ --mk-accordion-border: var(--mk-border);
3
+ --mk-accordion-bg: transparent;
4
+ --mk-accordion-header-hover: var(--mk-muted);
5
+ --mk-accordion-radius: var(--mk-radius, 8px);
6
+ --mk-accordion-color: var(--mk-foreground);
7
+ --mk-accordion-muted-color: var(--mk-muted-foreground);
8
+
9
+ width: 100%;
10
+ color: var(--mk-accordion-color);
11
+ }
12
+
13
+ /* ── Default ── */
14
+ .default .item { border-bottom: 1px solid var(--mk-accordion-border); }
15
+ .default .item:last-child { border-bottom: none; }
16
+
17
+ /* ── Bordered ── */
18
+ .bordered {
19
+ border: 1px solid var(--mk-accordion-border);
20
+ border-radius: var(--mk-accordion-radius);
21
+ overflow: hidden;
22
+ }
23
+ .bordered .item + .item { border-top: 1px solid var(--mk-accordion-border); }
24
+
25
+ /* ── Separated ── */
26
+ .separated { display: flex; flex-direction: column; gap: 0.5rem; }
27
+ .separated .item {
28
+ border: 1px solid var(--mk-accordion-border);
29
+ border-radius: var(--mk-accordion-radius);
30
+ overflow: hidden;
31
+ }
32
+
33
+ /* ── Header ── */
34
+ .header {
35
+ display: flex;
36
+ justify-content: space-between;
37
+ align-items: center;
38
+ width: 100%;
39
+ padding: 0.875rem 1rem;
40
+ background-color: var(--mk-accordion-bg);
41
+ border: none;
42
+ cursor: pointer;
43
+ color: inherit;
44
+ font-size: 0.9375rem;
45
+ font-weight: 500;
46
+ outline: none;
47
+ transition: background-color 0.15s ease;
48
+ text-align: left;
49
+ }
50
+
51
+ .header:hover { background-color: var(--mk-accordion-header-hover); }
52
+ .header:focus-visible { box-shadow: inset 0 0 0 2px var(--mk-primary); }
53
+ .header:disabled { opacity: 0.4; cursor: not-allowed; }
54
+
55
+ .title { flex: 1; }
56
+
57
+ .chevron {
58
+ display: flex;
59
+ color: var(--mk-accordion-muted-color);
60
+ transition: transform 0.2s ease;
61
+ flex-shrink: 0;
62
+ }
63
+ .chevronOpen { transform: rotate(180deg); }
64
+
65
+ /* ── Body ── */
66
+ .body {
67
+ max-height: 0;
68
+ overflow: hidden;
69
+ transition: max-height 0.25s ease;
70
+ }
71
+
72
+ .bodyOpen { max-height: 1000px; }
73
+
74
+ .content {
75
+ padding: 0 1rem 1rem;
76
+ font-size: 0.875rem;
77
+ color: var(--mk-accordion-muted-color);
78
+ line-height: 1.6;
79
+ }
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ /**
3
+ * @module MkAlert
4
+ * @description Inline alert banner for validation messages, warnings, and info.
5
+ * Not a toast — renders inline in the document flow.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <MkAlert variant="warning" title="Atención">
10
+ * Esta acción no se puede deshacer.
11
+ * </MkAlert>
12
+ * ```
13
+ */
14
+ export interface MkAlertProps {
15
+ variant?: 'info' | 'success' | 'warning' | 'error' | 'default';
16
+ title?: string;
17
+ children?: React.ReactNode;
18
+ icon?: React.ReactNode;
19
+ dismissible?: boolean;
20
+ onDismiss?: () => void;
21
+ action?: React.ReactNode;
22
+ className?: string;
23
+ }
24
+ export declare const MkAlert: React.FC<MkAlertProps>;
25
+ //# sourceMappingURL=MkAlert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MkAlert.d.ts","sourceRoot":"","sources":["../../src/components/MkAlert.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,YAAY;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAUD,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAgC1C,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ use;
3
+ client;
4
+ import React from 'react';
5
+ import styles from './MkAlert.module.css';
6
+ const DEFAULT_ICONS = {
7
+ info: 'ℹ️',
8
+ success: '✅',
9
+ warning: '⚠️',
10
+ error: '❌',
11
+ default: '🔔',
12
+ };
13
+ export const MkAlert = ({ variant = 'default', title, children, icon, dismissible = false, onDismiss, action, className, }) => {
14
+ const [dismissed, setDismissed] = React.useState(false);
15
+ const handleDismiss = () => {
16
+ setDismissed(true);
17
+ onDismiss === null || onDismiss === void 0 ? void 0 : onDismiss();
18
+ };
19
+ if (dismissed)
20
+ return null;
21
+ return (_jsxs("div", { className: `${styles.alert} ${styles[variant]} ${className || ''}`, role: "alert", children: [_jsx("span", { className: styles.icon, children: icon || DEFAULT_ICONS[variant] }), _jsxs("div", { className: styles.body, children: [title && _jsx("strong", { className: styles.title, children: title }), children && _jsx("p", { className: styles.content, children: children }), action && _jsx("div", { className: styles.action, children: action })] }), dismissible && (_jsx("button", { className: styles.dismiss, onClick: handleDismiss, "aria-label": "Cerrar", children: "\u2715" }))] }));
22
+ };
23
+ //# sourceMappingURL=MkAlert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MkAlert.js","sourceRoot":"","sources":["../../src/components/MkAlert.tsx"],"names":[],"mappings":";AAAA,GAAG,CAAA;AAAC,MAAM,CAAA;AACV,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,sBAAsB,CAAC;AA0B1C,MAAM,aAAa,GAA2B;IAC1C,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,IAAI;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAA2B,CAAC,EAC5C,OAAO,GAAG,SAAS,EACnB,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,WAAW,GAAG,KAAK,EACnB,SAAS,EACT,MAAM,EACN,SAAS,GACZ,EAAE,EAAE;IACD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,SAAS,aAAT,SAAS,uBAAT,SAAS,EAAI,CAAC;IAClB,CAAC,CAAC;IAEF,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAE3B,OAAO,CACH,eAAK,SAAS,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,SAAS,IAAI,EAAE,EAAE,EAAE,IAAI,EAAC,OAAO,aACjF,eAAM,SAAS,EAAE,MAAM,CAAC,IAAI,YAAG,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,GAAQ,EACrE,eAAK,SAAS,EAAE,MAAM,CAAC,IAAI,aACtB,KAAK,IAAI,iBAAQ,SAAS,EAAE,MAAM,CAAC,KAAK,YAAG,KAAK,GAAU,EAC1D,QAAQ,IAAI,YAAG,SAAS,EAAE,MAAM,CAAC,OAAO,YAAG,QAAQ,GAAK,EACxD,MAAM,IAAI,cAAK,SAAS,EAAE,MAAM,CAAC,MAAM,YAAG,MAAM,GAAO,IACtD,EACL,WAAW,IAAI,CACZ,iBAAQ,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,gBAAa,QAAQ,uBAAW,CAC5F,IACC,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,103 @@
1
+ .alert {
2
+ --mk-alert-bg: var(--mk-muted);
3
+ --mk-alert-border: var(--mk-primary);
4
+ --mk-alert-color: var(--mk-foreground);
5
+
6
+ display: flex;
7
+ align-items: flex-start;
8
+ gap: 0.75rem;
9
+ padding: 0.875rem 1rem;
10
+ border-radius: var(--mk-radius, 8px);
11
+ border-left: 4px solid var(--mk-alert-border);
12
+ background-color: var(--mk-alert-bg);
13
+ color: var(--mk-alert-color);
14
+ transition: all 0.2s ease;
15
+ }
16
+
17
+ .icon {
18
+ font-size: 1.1rem;
19
+ flex-shrink: 0;
20
+ padding-top: 1px;
21
+ color: var(--mk-alert-border);
22
+ }
23
+
24
+ .body {
25
+ flex: 1;
26
+ min-width: 0;
27
+ }
28
+ .title {
29
+ display: block;
30
+ font-size: 0.9375rem;
31
+ font-weight: 600;
32
+ margin-bottom: 0.25rem;
33
+ }
34
+ .content {
35
+ margin: 0;
36
+ font-size: 0.875rem;
37
+ line-height: 1.5;
38
+ }
39
+ .action {
40
+ margin-top: 0.5rem;
41
+ }
42
+
43
+ .dismiss {
44
+ background: none;
45
+ border: none;
46
+ cursor: pointer;
47
+ font-size: 0.875rem;
48
+ flex-shrink: 0;
49
+ padding: 2px 4px;
50
+ border-radius: 4px;
51
+ line-height: 1;
52
+ color: currentColor;
53
+ opacity: 0.6;
54
+ transition: opacity 0.15s;
55
+ }
56
+ .dismiss:hover {
57
+ opacity: 1;
58
+ background-color: rgba(0, 0, 0, 0.05);
59
+ }
60
+
61
+ /* Variants - solid tinted backgrounds (12% color, not 90% transparent) */
62
+ .info {
63
+ --mk-alert-border: #3b82f6;
64
+ --mk-alert-bg: color-mix(in srgb, #3b82f6 12%, var(--mk-background));
65
+ --mk-alert-color: #1e3a5f;
66
+ }
67
+
68
+ .success {
69
+ --mk-alert-border: #22c55e;
70
+ --mk-alert-bg: color-mix(in srgb, #22c55e 12%, var(--mk-background));
71
+ --mk-alert-color: #14532d;
72
+ }
73
+
74
+ .warning {
75
+ --mk-alert-border: #f59e0b;
76
+ --mk-alert-bg: color-mix(in srgb, #f59e0b 12%, var(--mk-background));
77
+ --mk-alert-color: #78350f;
78
+ }
79
+
80
+ .error {
81
+ --mk-alert-border: #ef4444;
82
+ --mk-alert-bg: color-mix(in srgb, #ef4444 12%, var(--mk-background));
83
+ --mk-alert-color: #7f1d1d;
84
+ }
85
+
86
+ .default {
87
+ --mk-alert-border: var(--mk-primary);
88
+ --mk-alert-bg: var(--mk-muted);
89
+ }
90
+
91
+ /* Dark mode overrides */
92
+ .mk-dark .info {
93
+ --mk-alert-color: #bfdbfe;
94
+ }
95
+ .mk-dark .success {
96
+ --mk-alert-color: #bbf7d0;
97
+ }
98
+ .mk-dark .warning {
99
+ --mk-alert-color: #fde68a;
100
+ }
101
+ .mk-dark .error {
102
+ --mk-alert-color: #fecaca;
103
+ }
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ /**
3
+ * @module MkAvatar
4
+ * @description Avatar with image, initials fallback, and status indicator.
5
+ * Same prop API as mk-mobile MkAvatar.
6
+ */
7
+ export interface MkAvatarProps {
8
+ src?: string | null;
9
+ name?: string;
10
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
11
+ status?: 'online' | 'offline' | 'away' | 'busy' | null;
12
+ className?: string;
13
+ onClick?: () => void;
14
+ }
15
+ export declare const MkAvatar: React.FC<MkAvatarProps>;
16
+ //# sourceMappingURL=MkAvatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MkAvatar.d.ts","sourceRoot":"","sources":["../../src/components/MkAvatar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC;;;;GAIG;AAEH,MAAM,WAAW,aAAa;IAC1B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAOD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAiC5C,CAAC"}