@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.
- package/LICENSE +33 -0
- package/README.md +22 -0
- package/dist/auth/MkAuthContext.d.ts +43 -0
- package/dist/auth/MkAuthContext.d.ts.map +1 -0
- package/dist/auth/MkAuthContext.js +3 -0
- package/dist/auth/MkAuthContext.js.map +1 -0
- package/dist/auth/MkAuthForm.d.ts +42 -0
- package/dist/auth/MkAuthForm.d.ts.map +1 -0
- package/dist/auth/MkAuthForm.js +53 -0
- package/dist/auth/MkAuthForm.js.map +1 -0
- package/dist/auth/MkAuthProvider.d.ts +30 -0
- package/dist/auth/MkAuthProvider.d.ts.map +1 -0
- package/dist/auth/MkAuthProvider.js +319 -0
- package/dist/auth/MkAuthProvider.js.map +1 -0
- package/dist/auth/auth/MkAuthContext.d.ts +42 -0
- package/dist/auth/auth/MkAuthForm.d.ts +41 -0
- package/dist/auth/auth/MkAuthProvider.d.ts +29 -0
- package/dist/auth/auth/types.d.ts +62 -0
- package/dist/auth/auth/useMkAuth.d.ts +18 -0
- package/dist/auth/components/MkButton.d.ts +10 -0
- package/dist/auth/components/MkInput.d.ts +12 -0
- package/dist/auth/types.d.ts +63 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +20 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/auth/useMkAuth.d.ts +19 -0
- package/dist/auth/useMkAuth.d.ts.map +1 -0
- package/dist/auth/useMkAuth.js +26 -0
- package/dist/auth/useMkAuth.js.map +1 -0
- package/dist/components/MkAccordion.d.ts +36 -0
- package/dist/components/MkAccordion.d.ts.map +1 -0
- package/dist/components/MkAccordion.js +25 -0
- package/dist/components/MkAccordion.js.map +1 -0
- package/dist/components/MkAccordion.module.css +79 -0
- package/dist/components/MkAlert.d.ts +25 -0
- package/dist/components/MkAlert.d.ts.map +1 -0
- package/dist/components/MkAlert.js +23 -0
- package/dist/components/MkAlert.js.map +1 -0
- package/dist/components/MkAlert.module.css +103 -0
- package/dist/components/MkAvatar.d.ts +16 -0
- package/dist/components/MkAvatar.d.ts.map +1 -0
- package/dist/components/MkAvatar.js +25 -0
- package/dist/components/MkAvatar.js.map +1 -0
- package/dist/components/MkAvatar.module.css +62 -0
- package/dist/components/MkBadge.d.ts +15 -0
- package/dist/components/MkBadge.d.ts.map +1 -0
- package/dist/components/MkBadge.js +9 -0
- package/dist/components/MkBadge.js.map +1 -0
- package/dist/components/MkBadge.module.css +74 -0
- package/dist/components/MkButton.d.ts +11 -0
- package/dist/components/MkButton.d.ts.map +1 -0
- package/dist/components/MkButton.js +20 -0
- package/dist/components/MkButton.js.map +1 -0
- package/dist/components/MkButton.module.css +85 -0
- package/dist/components/MkButton.test.d.ts +2 -0
- package/dist/components/MkButton.test.d.ts.map +1 -0
- package/dist/components/MkButton.test.js +58 -0
- package/dist/components/MkButton.test.js.map +1 -0
- package/dist/components/MkCard.d.ts +18 -0
- package/dist/components/MkCard.d.ts.map +1 -0
- package/dist/components/MkCard.js +8 -0
- package/dist/components/MkCard.js.map +1 -0
- package/dist/components/MkCard.module.css +63 -0
- package/dist/components/MkCheck.d.ts +32 -0
- package/dist/components/MkCheck.d.ts.map +1 -0
- package/dist/components/MkCheck.js +14 -0
- package/dist/components/MkCheck.js.map +1 -0
- package/dist/components/MkCheck.module.css +87 -0
- package/dist/components/MkDatePicker.d.ts +29 -0
- package/dist/components/MkDatePicker.d.ts.map +1 -0
- package/dist/components/MkDatePicker.js +12 -0
- package/dist/components/MkDatePicker.js.map +1 -0
- package/dist/components/MkDatePicker.module.css +77 -0
- package/dist/components/MkDivider.d.ts +14 -0
- package/dist/components/MkDivider.d.ts.map +1 -0
- package/dist/components/MkDivider.js +14 -0
- package/dist/components/MkDivider.js.map +1 -0
- package/dist/components/MkDivider.module.css +39 -0
- package/dist/components/MkDropDown.d.ts +22 -0
- package/dist/components/MkDropDown.d.ts.map +1 -0
- package/dist/components/MkDropDown.js +26 -0
- package/dist/components/MkDropDown.js.map +1 -0
- package/dist/components/MkDropDown.module.css +108 -0
- package/dist/components/MkEmptyState.d.ts +14 -0
- package/dist/components/MkEmptyState.d.ts.map +1 -0
- package/dist/components/MkEmptyState.js +8 -0
- package/dist/components/MkEmptyState.js.map +1 -0
- package/dist/components/MkEmptyState.module.css +35 -0
- package/dist/components/MkFileUpload.d.ts +36 -0
- package/dist/components/MkFileUpload.d.ts.map +1 -0
- package/dist/components/MkFileUpload.js +52 -0
- package/dist/components/MkFileUpload.js.map +1 -0
- package/dist/components/MkFileUpload.module.css +74 -0
- package/dist/components/MkIcons.d.ts +14 -0
- package/dist/components/MkIcons.d.ts.map +1 -0
- package/dist/components/MkIcons.js +38 -0
- package/dist/components/MkIcons.js.map +1 -0
- package/dist/components/MkInfiniteList.d.ts +15 -0
- package/dist/components/MkInfiniteList.d.ts.map +1 -0
- package/dist/components/MkInfiniteList.js +31 -0
- package/dist/components/MkInfiniteList.js.map +1 -0
- package/dist/components/MkInfiniteList.module.css +69 -0
- package/dist/components/MkInput.d.ts +13 -0
- package/dist/components/MkInput.d.ts.map +1 -0
- package/dist/components/MkInput.js +23 -0
- package/dist/components/MkInput.js.map +1 -0
- package/dist/components/MkInput.module.css +94 -0
- package/dist/components/MkLoading.d.ts +20 -0
- package/dist/components/MkLoading.d.ts.map +1 -0
- package/dist/components/MkLoading.js +16 -0
- package/dist/components/MkLoading.js.map +1 -0
- package/dist/components/MkLoading.module.css +39 -0
- package/dist/components/MkModal.d.ts +20 -0
- package/dist/components/MkModal.d.ts.map +1 -0
- package/dist/components/MkModal.js +33 -0
- package/dist/components/MkModal.js.map +1 -0
- package/dist/components/MkModal.module.css +107 -0
- package/dist/components/MkProgressBar.d.ts +17 -0
- package/dist/components/MkProgressBar.d.ts.map +1 -0
- package/dist/components/MkProgressBar.js +9 -0
- package/dist/components/MkProgressBar.js.map +1 -0
- package/dist/components/MkProgressBar.module.css +48 -0
- package/dist/components/MkRadio.d.ts +34 -0
- package/dist/components/MkRadio.d.ts.map +1 -0
- package/dist/components/MkRadio.js +21 -0
- package/dist/components/MkRadio.js.map +1 -0
- package/dist/components/MkRadio.module.css +74 -0
- package/dist/components/MkSearchInput.d.ts +30 -0
- package/dist/components/MkSearchInput.d.ts.map +1 -0
- package/dist/components/MkSearchInput.js +29 -0
- package/dist/components/MkSearchInput.js.map +1 -0
- package/dist/components/MkSearchInput.module.css +80 -0
- package/dist/components/MkSelect.d.ts +23 -0
- package/dist/components/MkSelect.d.ts.map +1 -0
- package/dist/components/MkSelect.js +61 -0
- package/dist/components/MkSelect.js.map +1 -0
- package/dist/components/MkSelect.module.css +177 -0
- package/dist/components/MkSkeleton.d.ts +22 -0
- package/dist/components/MkSkeleton.d.ts.map +1 -0
- package/dist/components/MkSkeleton.js +23 -0
- package/dist/components/MkSkeleton.js.map +1 -0
- package/dist/components/MkSkeleton.module.css +28 -0
- package/dist/components/MkSwitch.d.ts +22 -0
- package/dist/components/MkSwitch.d.ts.map +1 -0
- package/dist/components/MkSwitch.js +16 -0
- package/dist/components/MkSwitch.js.map +1 -0
- package/dist/components/MkSwitch.module.css +108 -0
- package/dist/components/MkTable.d.ts +27 -0
- package/dist/components/MkTable.d.ts.map +1 -0
- package/dist/components/MkTable.js +13 -0
- package/dist/components/MkTable.js.map +1 -0
- package/dist/components/MkTable.module.css +163 -0
- package/dist/components/MkTabs.d.ts +22 -0
- package/dist/components/MkTabs.d.ts.map +1 -0
- package/dist/components/MkTabs.js +19 -0
- package/dist/components/MkTabs.js.map +1 -0
- package/dist/components/MkTabs.module.css +117 -0
- package/dist/components/MkTextArea.d.ts +21 -0
- package/dist/components/MkTextArea.d.ts.map +1 -0
- package/dist/components/MkTextArea.js +10 -0
- package/dist/components/MkTextArea.js.map +1 -0
- package/dist/components/MkThemeEditor.d.ts +8 -0
- package/dist/components/MkThemeEditor.d.ts.map +1 -0
- package/dist/components/MkThemeEditor.js +45 -0
- package/dist/components/MkThemeEditor.js.map +1 -0
- package/dist/components/MkThemeEditor.module.css +177 -0
- package/dist/components/MkToastContainer.d.ts +3 -0
- package/dist/components/MkToastContainer.d.ts.map +1 -0
- package/dist/components/MkToastContainer.js +81 -0
- package/dist/components/MkToastContainer.js.map +1 -0
- package/dist/components/MkToastContainer.module.css +95 -0
- package/dist/components/MkTooltip.d.ts +14 -0
- package/dist/components/MkTooltip.d.ts.map +1 -0
- package/dist/components/MkTooltip.js +19 -0
- package/dist/components/MkTooltip.js.map +1 -0
- package/dist/components/MkTooltip.module.css +43 -0
- package/dist/components/MkWindowList.d.ts +20 -0
- package/dist/components/MkWindowList.d.ts.map +1 -0
- package/dist/components/MkWindowList.js +61 -0
- package/dist/components/MkWindowList.js.map +1 -0
- package/dist/components/MkWindowList.module.css +59 -0
- package/dist/components/index.d.ts +31 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +34 -0
- package/dist/components/index.js.map +1 -0
- package/dist/context/MkApiContext.d.ts +15 -0
- package/dist/context/MkApiContext.d.ts.map +1 -0
- package/dist/context/MkApiContext.js +30 -0
- package/dist/context/MkApiContext.js.map +1 -0
- package/dist/context/MkAuthContext.d.ts +20 -0
- package/dist/context/MkAuthContext.d.ts.map +1 -0
- package/dist/context/MkAuthContext.js +90 -0
- package/dist/context/MkAuthContext.js.map +1 -0
- package/dist/context/MkConfirmContext.d.ts +8 -0
- package/dist/context/MkConfirmContext.d.ts.map +1 -0
- package/dist/context/MkConfirmContext.js +39 -0
- package/dist/context/MkConfirmContext.js.map +1 -0
- package/dist/context/MkToastContext.d.ts +8 -0
- package/dist/context/MkToastContext.d.ts.map +1 -0
- package/dist/context/MkToastContext.js +64 -0
- package/dist/context/MkToastContext.js.map +1 -0
- package/dist/hooks/useApi.d.ts +19 -0
- package/dist/hooks/useApi.d.ts.map +1 -0
- package/dist/hooks/useApi.js +82 -0
- package/dist/hooks/useApi.js.map +1 -0
- package/dist/hooks/useApi.test.d.ts +2 -0
- package/dist/hooks/useApi.test.d.ts.map +1 -0
- package/dist/hooks/useApi.test.js +186 -0
- package/dist/hooks/useApi.test.js.map +1 -0
- package/dist/hooks/useMkClickOutside.d.ts +8 -0
- package/dist/hooks/useMkClickOutside.d.ts.map +1 -0
- package/dist/hooks/useMkClickOutside.js +26 -0
- package/dist/hooks/useMkClickOutside.js.map +1 -0
- package/dist/hooks/useMkCrud.d.ts +39 -0
- package/dist/hooks/useMkCrud.d.ts.map +1 -0
- package/dist/hooks/useMkCrud.js +121 -0
- package/dist/hooks/useMkCrud.js.map +1 -0
- package/dist/hooks/useMkCrud.test.d.ts +2 -0
- package/dist/hooks/useMkCrud.test.d.ts.map +1 -0
- package/dist/hooks/useMkCrud.test.js +89 -0
- package/dist/hooks/useMkCrud.test.js.map +1 -0
- package/dist/hooks/useMkDebounce.d.ts +24 -0
- package/dist/hooks/useMkDebounce.d.ts.map +1 -0
- package/dist/hooks/useMkDebounce.js +38 -0
- package/dist/hooks/useMkDebounce.js.map +1 -0
- package/dist/hooks/useMkEffectDebug.d.ts +7 -0
- package/dist/hooks/useMkEffectDebug.d.ts.map +1 -0
- package/dist/hooks/useMkEffectDebug.js +26 -0
- package/dist/hooks/useMkEffectDebug.js.map +1 -0
- package/dist/hooks/useMkEvent.d.ts +31 -0
- package/dist/hooks/useMkEvent.d.ts.map +1 -0
- package/dist/hooks/useMkEvent.js +56 -0
- package/dist/hooks/useMkEvent.js.map +1 -0
- package/dist/hooks/useMkForm.d.ts +43 -0
- package/dist/hooks/useMkForm.d.ts.map +1 -0
- package/dist/hooks/useMkForm.js +115 -0
- package/dist/hooks/useMkForm.js.map +1 -0
- package/dist/hooks/useMkForm.test.d.ts +2 -0
- package/dist/hooks/useMkForm.test.d.ts.map +1 -0
- package/dist/hooks/useMkForm.test.js +81 -0
- package/dist/hooks/useMkForm.test.js.map +1 -0
- package/dist/hooks/useMkInViewPort.d.ts +14 -0
- package/dist/hooks/useMkInViewPort.d.ts.map +1 -0
- package/dist/hooks/useMkInViewPort.js +31 -0
- package/dist/hooks/useMkInViewPort.js.map +1 -0
- package/dist/hooks/useMkInfiniteList.d.ts +15 -0
- package/dist/hooks/useMkInfiniteList.d.ts.map +1 -0
- package/dist/hooks/useMkInfiniteList.js +47 -0
- package/dist/hooks/useMkInfiniteList.js.map +1 -0
- package/dist/hooks/useMkList.d.ts +61 -0
- package/dist/hooks/useMkList.d.ts.map +1 -0
- package/dist/hooks/useMkList.js +54 -0
- package/dist/hooks/useMkList.js.map +1 -0
- package/dist/hooks/useMkLocalStorage.d.ts +6 -0
- package/dist/hooks/useMkLocalStorage.d.ts.map +1 -0
- package/dist/hooks/useMkLocalStorage.js +33 -0
- package/dist/hooks/useMkLocalStorage.js.map +1 -0
- package/dist/hooks/useMkLongPress.d.ts +37 -0
- package/dist/hooks/useMkLongPress.d.ts.map +1 -0
- package/dist/hooks/useMkLongPress.js +59 -0
- package/dist/hooks/useMkLongPress.js.map +1 -0
- package/dist/hooks/useMkMediaQuery.d.ts +14 -0
- package/dist/hooks/useMkMediaQuery.d.ts.map +1 -0
- package/dist/hooks/useMkMediaQuery.js +31 -0
- package/dist/hooks/useMkMediaQuery.js.map +1 -0
- package/dist/hooks/useMkPrevious.d.ts +7 -0
- package/dist/hooks/useMkPrevious.d.ts.map +1 -0
- package/dist/hooks/useMkPrevious.js +14 -0
- package/dist/hooks/useMkPrevious.js.map +1 -0
- package/dist/hooks/useMkScreenSize.d.ts +25 -0
- package/dist/hooks/useMkScreenSize.d.ts.map +1 -0
- package/dist/hooks/useMkScreenSize.js +43 -0
- package/dist/hooks/useMkScreenSize.js.map +1 -0
- package/dist/hooks/useMkStore.d.ts +22 -0
- package/dist/hooks/useMkStore.d.ts.map +1 -0
- package/dist/hooks/useMkStore.js +58 -0
- package/dist/hooks/useMkStore.js.map +1 -0
- package/dist/hooks/useMkToggle.d.ts +6 -0
- package/dist/hooks/useMkToggle.d.ts.map +1 -0
- package/dist/hooks/useMkToggle.js +13 -0
- package/dist/hooks/useMkToggle.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/styles/index.css +124 -0
- package/dist/test-setup.d.ts +2 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +2 -0
- package/dist/test-setup.js.map +1 -0
- package/dist/theme/MkThemeProvider.d.ts +20 -0
- package/dist/theme/MkThemeProvider.d.ts.map +1 -0
- package/dist/theme/MkThemeProvider.js +91 -0
- package/dist/theme/MkThemeProvider.js.map +1 -0
- package/dist/utils/images.d.ts +9 -0
- package/dist/utils/images.d.ts.map +1 -0
- package/dist/utils/images.js +50 -0
- package/dist/utils/images.js.map +1 -0
- package/eslint-plugin-mk/__tests__/no-cross-module-import.test.js +66 -0
- package/eslint-plugin-mk/index.js +29 -0
- package/eslint-plugin-mk/rules/no-cross-module-import.js +71 -0
- 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"}
|