@vef-framework-react/starter 2.1.11 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/login/index.cjs +1 -1
- package/dist/es/components/access-denied/access-denied-icon.js +1 -1
- package/dist/es/components/access-denied/index.js +1 -1
- package/dist/es/components/app/index.js +1 -1
- package/dist/es/components/base-layout/index.js +1 -1
- package/dist/es/components/base-layout/styles.js +1 -1
- package/dist/es/components/base-layout/use-base-layout.js +1 -1
- package/dist/es/components/error/error-icon.js +1 -1
- package/dist/es/components/error/index.js +1 -1
- package/dist/es/components/index.js +1 -1
- package/dist/es/components/layout/components/footer.js +1 -1
- package/dist/es/components/layout/components/header/boy-icon.js +1 -1
- package/dist/es/components/layout/components/header/breadcrumb-navigation.js +1 -1
- package/dist/es/components/layout/components/header/color-scheme.js +1 -1
- package/dist/es/components/layout/components/header/fullscreen.js +1 -1
- package/dist/es/components/layout/components/header/girl-icon.js +1 -1
- package/dist/es/components/layout/components/header/index.js +1 -1
- package/dist/es/components/layout/components/header/menu-burger.js +1 -1
- package/dist/es/components/layout/components/header/menu-fold-left-icon.js +1 -1
- package/dist/es/components/layout/components/header/menu-unfold-left-icon.js +1 -1
- package/dist/es/components/layout/components/header/search.js +1 -1
- package/dist/es/components/layout/components/header/theme-config.js +1 -1
- package/dist/es/components/layout/components/header/user-avatar.js +1 -1
- package/dist/es/components/layout/components/honeycomb-pattern.js +1 -1
- package/dist/es/components/layout/components/index.js +1 -1
- package/dist/es/components/layout/components/logo.js +1 -1
- package/dist/es/components/layout/components/menu.js +1 -1
- package/dist/es/components/layout/components/search/index.js +1 -1
- package/dist/es/components/layout/components/search/keyboard-arrow-down-icon.js +1 -1
- package/dist/es/components/layout/components/search/keyboard-arrow-up-icon.js +1 -1
- package/dist/es/components/layout/components/search/keyboard-control-icon.js +1 -1
- package/dist/es/components/layout/components/search/keyboard-esc-icon.js +1 -1
- package/dist/es/components/layout/components/search/keyboard-help.js +1 -1
- package/dist/es/components/layout/components/search/keyboard-return-icon.js +1 -1
- package/dist/es/components/layout/components/search/keyboard-shift-icon.js +1 -1
- package/dist/es/components/layout/components/search/keyboard.js +1 -1
- package/dist/es/components/layout/components/search/letter-s-icon.js +1 -1
- package/dist/es/components/layout/components/search/search-result-item.js +1 -1
- package/dist/es/components/layout/components/search/search-result.js +1 -1
- package/dist/es/components/layout/components/sidebar.js +1 -1
- package/dist/es/components/layout/components/tabs/context-menu.js +1 -1
- package/dist/es/components/layout/components/tabs/index.js +1 -1
- package/dist/es/components/layout/components/tabs/main-content-maximum.js +1 -1
- package/dist/es/components/layout/components/tabs/reload.js +1 -1
- package/dist/es/components/layout/components/tabs/tab-item.js +1 -1
- package/dist/es/components/layout/components/tabs/tab-list.js +1 -1
- package/dist/es/components/layout/components/tabs/tabs-container.js +1 -1
- package/dist/es/components/layout/components/theme-config/color-scheme-switcher.js +1 -1
- package/dist/es/components/layout/components/theme-config/color-scheme.js +1 -1
- package/dist/es/components/layout/components/theme-config/config-item.js +1 -1
- package/dist/es/components/layout/components/theme-config/index.js +1 -1
- package/dist/es/components/layout/components/theme-config/menu-layout-card.js +1 -1
- package/dist/es/components/layout/components/theme-config/menu-layout.js +1 -1
- package/dist/es/components/layout/components/theme-config/operations.js +1 -1
- package/dist/es/components/layout/components/theme-config/theme-color-picker.js +1 -1
- package/dist/es/components/layout/components/theme-config/theme-colors.js +1 -1
- package/dist/es/components/layout/hooks/index.js +1 -1
- package/dist/es/components/layout/hooks/use-color-scheme-updater.js +1 -1
- package/dist/es/components/layout/hooks/use-menu-navigate.js +1 -1
- package/dist/es/components/layout/hooks/use-tab-navigate.js +1 -1
- package/dist/es/components/layout/index.js +1 -1
- package/dist/es/components/layout/store.js +1 -1
- package/dist/es/components/layout/styles.js +1 -1
- package/dist/es/components/login/icon-login.js +1 -1
- package/dist/es/components/login/index.js +148 -73
- package/dist/es/components/login/styles.js +1 -1
- package/dist/es/components/login/welcome-messages.js +1 -1
- package/dist/es/components/n-progress/components/bar.js +1 -1
- package/dist/es/components/n-progress/components/container.js +1 -1
- package/dist/es/components/n-progress/components/index.js +1 -1
- package/dist/es/components/n-progress/event.js +1 -1
- package/dist/es/components/n-progress/index.js +1 -1
- package/dist/es/components/not-found/index.js +1 -1
- package/dist/es/components/not-found/not-found-icon.js +1 -1
- package/dist/es/components/router-provider/context.js +1 -1
- package/dist/es/components/router-provider/index.js +1 -1
- package/dist/es/components/theme-config-provider/global-style.js +1 -1
- package/dist/es/components/theme-config-provider/index.js +1 -1
- package/dist/es/components/theme-config-provider/use-color-mode-effect.js +1 -1
- package/dist/es/components/theme-config-provider/use-theme-config.js +1 -1
- package/dist/es/constants/event.js +1 -1
- package/dist/es/constants/index.js +1 -1
- package/dist/es/constants/router.js +1 -1
- package/dist/es/constants/storage.js +1 -0
- package/dist/es/helpers/api.js +1 -1
- package/dist/es/helpers/app-version.js +1 -1
- package/dist/es/helpers/app.js +1 -1
- package/dist/es/helpers/auth.js +1 -1
- package/dist/es/helpers/event.js +1 -1
- package/dist/es/helpers/index.js +1 -1
- package/dist/es/helpers/query.js +1 -1
- package/dist/es/helpers/router.js +1 -1
- package/dist/es/hooks/index.js +1 -1
- package/dist/es/hooks/use-route-full-path.js +1 -1
- package/dist/es/index.js +1 -1
- package/dist/es/routes/access-denied.js +1 -1
- package/dist/es/routes/index.js +1 -1
- package/dist/es/routes/layout.js +1 -1
- package/dist/es/routes/login.js +1 -1
- package/dist/es/routes/root.js +1 -1
- package/dist/es/stores/app.js +1 -1
- package/dist/es/stores/index.js +1 -1
- package/dist/es/stores/tab.js +1 -1
- package/dist/es/stores/theme.js +1 -1
- package/dist/types/components/index.d.ts +1 -1
- package/dist/types/components/login/index.d.ts +3 -3
- package/dist/types/components/login/payload.d.ts +20 -0
- package/dist/types/components/login/props.d.ts +76 -4
- package/dist/types/index.d.ts +1 -1
- package/package.json +10 -10
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { Bar as e } from "./components/bar.js";
|
|
3
3
|
import { Container as t } from "./components/container.js";
|
|
4
4
|
import { nProgressEventEmitter as n } from "./event.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import "../../constants/router.js";
|
|
3
3
|
import { NotFoundIcon as e } from "./not-found-icon.js";
|
|
4
4
|
import { Button as t, Center as n, Icon as r, Result as i } from "@vef-framework-react/components";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { jsx as e, jsxs as t } from "@emotion/react/jsx-runtime";
|
|
3
3
|
//#region src/components/not-found/not-found-icon.tsx
|
|
4
4
|
function n(n) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { createContext as e, use as t } from "react";
|
|
3
3
|
//#region src/components/router-provider/context.ts
|
|
4
4
|
var n = e(null);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { useRouterContextHook as e } from "./context.js";
|
|
3
3
|
import { useMemo as t } from "react";
|
|
4
4
|
import { jsx as n } from "@emotion/react/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import "@emotion/react";
|
|
3
3
|
//#region src/components/theme-config-provider/global-style.ts
|
|
4
4
|
function e() {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { useColorModeEffect as e } from "./use-color-mode-effect.js";
|
|
3
3
|
import { useThemeConfig as t } from "./use-theme-config.js";
|
|
4
4
|
import { ConfigProvider as n } from "@vef-framework-react/components";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { useThemeStore as e } from "../../stores/theme.js";
|
|
3
3
|
import { useEffect as t } from "react";
|
|
4
4
|
//#region src/components/theme-config-provider/use-color-mode-effect.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { useThemeStore as e } from "../../stores/theme.js";
|
|
3
3
|
import { globalStyle as t } from "./global-style.js";
|
|
4
4
|
import { useShallow as n } from "@vef-framework-react/core";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
//#region src/constants/event.ts
|
|
3
3
|
var e = "__vef_access_denied_event", t = "__vef_unauthenticated_event";
|
|
4
4
|
//#endregion
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
//#region src/constants/router.ts
|
|
3
3
|
var e = "/login", t = "/_common/login", n = "/", r = "/_layout", i = "/access-denied", a = "/_common/access-denied";
|
|
4
4
|
//#endregion
|
package/dist/es/helpers/api.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { useAppStore as e } from "../stores/app.js";
|
|
3
3
|
import { emitAccessDenied as t, emitUnauthenticated as n } from "./event.js";
|
|
4
4
|
import { showErrorMessage as r, showInfoMessage as i, showSuccessMessage as a, showWarningMessage as o } from "@vef-framework-react/components";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { Button as e, Group as t, Icon as n, Text as r, globalCssVars as i, showInfoNotification as a } from "@vef-framework-react/components";
|
|
3
3
|
import { joinPaths as o } from "@vef-framework-react/shared";
|
|
4
4
|
import { Fragment as s, jsx as c, jsxs as l } from "@emotion/react/jsx-runtime";
|
package/dist/es/helpers/app.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { RouterContextHookProvider as e } from "../components/router-provider/context.js";
|
|
3
3
|
import { App as t } from "../components/app/index.js";
|
|
4
4
|
import { StrictMode as n } from "react";
|
package/dist/es/helpers/auth.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { LOGIN_ROUTE_PATH as e } from "../constants/router.js";
|
|
3
3
|
import { useAppStore as t } from "../stores/app.js";
|
|
4
4
|
//#region src/helpers/auth.ts
|
package/dist/es/helpers/event.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { ACCESS_DENIED_EVENT as e, UNAUTHENTICATED_EVENT as t } from "../constants/event.js";
|
|
3
3
|
import { createEventEmitter as n } from "@vef-framework-react/shared";
|
|
4
4
|
//#region src/helpers/event.ts
|
package/dist/es/helpers/index.js
CHANGED
package/dist/es/helpers/query.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { SYMBOL_PAGINATION as e, SYMBOL_SORT as t } from "@vef-framework-react/components";
|
|
3
3
|
//#region src/helpers/query.ts
|
|
4
4
|
function n(...e) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { ACCESS_DENIED_ROUTE_PATH as e } from "../constants/router.js";
|
|
3
3
|
import { useAppStore as t } from "../stores/app.js";
|
|
4
4
|
import { useTabStore as n } from "../stores/tab.js";
|
package/dist/es/hooks/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import "./use-route-full-path.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { useMemo as e } from "react";
|
|
3
3
|
import { useLocation as t, useRouter as n } from "@tanstack/react-router";
|
|
4
4
|
//#region src/hooks/use-route-full-path.ts
|
package/dist/es/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { ACCESS_DENIED_ROUTE_ID as e, ACCESS_DENIED_ROUTE_PATH as t, INDEX_ROUTE_ID as n, INDEX_ROUTE_PATH as r, LOGIN_ROUTE_ID as i, LOGIN_ROUTE_PATH as a } from "./constants/router.js";
|
|
3
3
|
import { useAppStore as o } from "./stores/app.js";
|
|
4
4
|
import { useTabStore as s } from "./stores/tab.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import "../constants/router.js";
|
|
3
3
|
import { AccessDenied as e } from "../components/access-denied/index.js";
|
|
4
4
|
//#region src/routes/access-denied.ts
|
package/dist/es/routes/index.js
CHANGED
package/dist/es/routes/layout.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { ACCESS_DENIED_ROUTE_PATH as e, LOGIN_ROUTE_PATH as t } from "../constants/router.js";
|
|
3
3
|
import { useAppStore as n } from "../stores/app.js";
|
|
4
4
|
import { Error as r } from "../components/error/index.js";
|
package/dist/es/routes/login.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import "../constants/router.js";
|
|
3
3
|
import { useAppStore as e } from "../stores/app.js";
|
|
4
4
|
import { Login as t } from "../components/login/index.js";
|
package/dist/es/routes/root.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { useAppStore as e } from "../stores/app.js";
|
|
3
3
|
import { jsx as t } from "@emotion/react/jsx-runtime";
|
|
4
4
|
import { Outlet as n, useLocation as r, useRouteContext as i } from "@tanstack/react-router";
|
package/dist/es/stores/app.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { createPersistedStore as e } from "@vef-framework-react/core";
|
|
3
3
|
//#region src/stores/app.ts
|
|
4
4
|
var t = e(() => ({ isAuthenticated: !1 }), {
|
package/dist/es/stores/index.js
CHANGED
package/dist/es/stores/tab.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import "../constants/router.js";
|
|
3
3
|
import { createPersistedStore as e, originalState as t } from "@vef-framework-react/core";
|
|
4
4
|
//#region src/stores/tab.ts
|
package/dist/es/stores/theme.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @vef-framework-react/starter v2.
|
|
1
|
+
/*! @vef-framework-react/starter v2.2.0 made by Venus | 2026-05-18T05:49:20.358Z */
|
|
2
2
|
import { createPersistedStore as e } from "@vef-framework-react/core";
|
|
3
3
|
import { omit as t } from "@vef-framework-react/shared";
|
|
4
4
|
//#region src/stores/theme.ts
|
|
@@ -3,7 +3,7 @@ export { App, type AppProps } from './app';
|
|
|
3
3
|
export { BaseLayout, type BaseLayoutProps } from './base-layout';
|
|
4
4
|
export { Error } from './error';
|
|
5
5
|
export { Layout, type LayoutProps } from './layout';
|
|
6
|
-
export { Login, type LoginChallenge, type LoginParams, type LoginProps, type LoginResult, type PasswordLoginParams } from './login';
|
|
6
|
+
export { Login, type LoginChallenge, type LoginChallengeRenderer, type LoginChallengeRendererProps, type LoginParams, type LoginProps, type LoginResult, type PasswordLoginParams, type ResolveChallengeParams } from './login';
|
|
7
7
|
export { NProgress, nProgressEventEmitter } from './n-progress';
|
|
8
8
|
export { NotFound } from './not-found';
|
|
9
9
|
export { RouterContextHookProvider, RouterProvider, type RouterProviderProps, type UseRouterContext } from './router-provider';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { LoginProps } from './props';
|
|
2
|
-
export declare function Login({ logo, title, description, publicKey, onLogin }: LoginProps):
|
|
3
|
-
export { type LoginChallenge, type LoginParams, type LoginResult, type PasswordLoginParams } from './payload';
|
|
4
|
-
export { type LoginProps } from './props';
|
|
2
|
+
export declare function Login({ logo, title, description, publicKey, onLogin, onResolveChallenge, challengeRenderers }: LoginProps): import("@emotion/react/jsx-runtime").JSX.Element;
|
|
3
|
+
export { type LoginChallenge, type LoginParams, type LoginResult, type PasswordLoginParams, type ResolveChallengeParams } from './payload';
|
|
4
|
+
export { type LoginChallengeRenderer, type LoginChallengeRendererProps, type LoginProps } from './props';
|
|
@@ -69,4 +69,24 @@ export interface LoginResult {
|
|
|
69
69
|
*/
|
|
70
70
|
challenge?: LoginChallenge;
|
|
71
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* The payload for submitting a challenge response back to the server.
|
|
74
|
+
* Shape mirrors the backend security/auth.resolve_challenge action.
|
|
75
|
+
*/
|
|
76
|
+
export interface ResolveChallengeParams {
|
|
77
|
+
/**
|
|
78
|
+
* The token returned with the pending challenge that carries intermediate state.
|
|
79
|
+
*/
|
|
80
|
+
challengeToken: string;
|
|
81
|
+
/**
|
|
82
|
+
* The challenge type identifier being resolved (must match the pending challenge).
|
|
83
|
+
*/
|
|
84
|
+
type: string;
|
|
85
|
+
/**
|
|
86
|
+
* The user's answer to the challenge. The concrete shape is decided by each
|
|
87
|
+
* challenge type — e.g. a department id string for "department_selection",
|
|
88
|
+
* a TOTP code string for "totp", etc.
|
|
89
|
+
*/
|
|
90
|
+
response: unknown;
|
|
91
|
+
}
|
|
72
92
|
export {};
|
|
@@ -1,9 +1,57 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import { LoginParams, LoginResult } from './payload';
|
|
2
|
+
import { LoginChallenge, LoginParams, LoginResult, ResolveChallengeParams } from './payload';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Arguments passed to a challenge renderer. Renderers are stateless from the
|
|
5
|
+
* Login component's perspective — they consume `challenge` for prompt data
|
|
6
|
+
* and call `resolve` / `cancel` to drive the flow forward or backward.
|
|
5
7
|
*/
|
|
6
|
-
export interface
|
|
8
|
+
export interface LoginChallengeRendererProps {
|
|
9
|
+
/**
|
|
10
|
+
* The pending challenge to present (type identifier and challenge-specific data).
|
|
11
|
+
*/
|
|
12
|
+
challenge: LoginChallenge;
|
|
13
|
+
/**
|
|
14
|
+
* Submit the user's answer to the current challenge. The concrete shape of
|
|
15
|
+
* `response` is decided by each challenge type — renderers narrow it
|
|
16
|
+
* internally before calling this.
|
|
17
|
+
* Returns once the resulting `LoginResult` has been applied — either the
|
|
18
|
+
* next challenge is shown or authentication completes and navigation runs.
|
|
19
|
+
*/
|
|
20
|
+
resolve: (response: unknown) => Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Abandon the challenge and return to the initial credentials form.
|
|
23
|
+
* The held challenge token is discarded; the user must log in again.
|
|
24
|
+
*/
|
|
25
|
+
cancel: () => void;
|
|
26
|
+
/**
|
|
27
|
+
* Whether a resolve call is currently in flight. Useful for disabling
|
|
28
|
+
* submit buttons inside the renderer.
|
|
29
|
+
*/
|
|
30
|
+
pending: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Encrypts a sensitive plaintext using the same scheme the initial login
|
|
33
|
+
* uses for credentials. Present only when the Login component received a
|
|
34
|
+
* `publicKey`; renderers handling sensitive responses (e.g. a new password
|
|
35
|
+
* for `password_change`) should call this before invoking `resolve`.
|
|
36
|
+
* Absent when no `publicKey` was configured.
|
|
37
|
+
*
|
|
38
|
+
* May throw if the underlying RSA encryption fails (invalid key, empty
|
|
39
|
+
* plaintext, etc.). Renderers should catch in their submit handler and
|
|
40
|
+
* surface a user-visible error rather than letting the rejection escape.
|
|
41
|
+
*/
|
|
42
|
+
encrypt?: (plaintext: string) => string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A renderer responsible for displaying and resolving a single challenge type.
|
|
46
|
+
* Business apps register one per challenge type they support; the Login
|
|
47
|
+
* component looks up the renderer by `challenge.type` at runtime.
|
|
48
|
+
*/
|
|
49
|
+
export type LoginChallengeRenderer = (props: LoginChallengeRendererProps) => ReactNode;
|
|
50
|
+
/**
|
|
51
|
+
* The shared subset of LoginProps, independent of whether the flow may
|
|
52
|
+
* surface challenges.
|
|
53
|
+
*/
|
|
54
|
+
interface BaseLoginProps {
|
|
7
55
|
/**
|
|
8
56
|
* The logo of the login page.
|
|
9
57
|
*/
|
|
@@ -17,7 +65,8 @@ export interface LoginProps {
|
|
|
17
65
|
*/
|
|
18
66
|
description?: string;
|
|
19
67
|
/**
|
|
20
|
-
* The public key for encrypting
|
|
68
|
+
* The public key for encrypting credentials (and sensitive challenge
|
|
69
|
+
* responses via `LoginChallengeRendererProps.encrypt`).
|
|
21
70
|
*/
|
|
22
71
|
publicKey?: string;
|
|
23
72
|
/**
|
|
@@ -25,3 +74,26 @@ export interface LoginProps {
|
|
|
25
74
|
*/
|
|
26
75
|
onLogin: (params: LoginParams) => Promise<LoginResult>;
|
|
27
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Challenge-aware Login wiring. `onResolveChallenge` and `challengeRenderers`
|
|
79
|
+
* are required together: a server that can return challenges needs both a
|
|
80
|
+
* transport (`onResolveChallenge`) and a presenter (`challengeRenderers`).
|
|
81
|
+
*/
|
|
82
|
+
interface LoginPropsWithChallenge {
|
|
83
|
+
onResolveChallenge: (params: ResolveChallengeParams) => Promise<LoginResult>;
|
|
84
|
+
challengeRenderers: Record<string, LoginChallengeRenderer>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Login wiring for backends that never issue challenges.
|
|
88
|
+
*/
|
|
89
|
+
interface LoginPropsWithoutChallenge {
|
|
90
|
+
onResolveChallenge?: never;
|
|
91
|
+
challengeRenderers?: never;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The props of the Login component. Either both challenge hooks are wired
|
|
95
|
+
* up, or neither is — partial wiring would leave the UI stranded on a
|
|
96
|
+
* challenge it cannot dispatch.
|
|
97
|
+
*/
|
|
98
|
+
export type LoginProps = BaseLoginProps & (LoginPropsWithChallenge | LoginPropsWithoutChallenge);
|
|
99
|
+
export {};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { type LoginChallenge, type LoginParams, type LoginResult, type PasswordLoginParams } from './components';
|
|
1
|
+
export { type LoginChallenge, type LoginChallengeRenderer, type LoginChallengeRendererProps, type LoginParams, type LoginProps, type LoginResult, type PasswordLoginParams, type ResolveChallengeParams } from './components';
|
|
2
2
|
export { ACCESS_DENIED_ROUTE_ID, ACCESS_DENIED_ROUTE_PATH, INDEX_ROUTE_ID, INDEX_ROUTE_PATH, LOGIN_ROUTE_ID, LOGIN_ROUTE_PATH } from './constants';
|
|
3
3
|
export { createApiClient, createApp, createRouter, dispatchCustomEvent, emitAccessDenied, emitUnauthenticated, extractQueryParams, handleClientLogout, noopMutationFn, setupAppVersionNotification, type ApiClientOptions, type AppChangelog, type AppVersionNotificationOptions, type RouterOptions } from './helpers';
|
|
4
4
|
export { createAccessDeniedRouteOptions, createLayoutRouteOptions, createLoginRouteOptions, createRootRouteOptions } from './routes';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vef-framework-react/starter",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.2.0",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "Starter for VEF framework",
|
|
7
7
|
"author": {
|
|
@@ -54,20 +54,20 @@
|
|
|
54
54
|
"react-dom": ">=19"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@ant-design/icons": "^6.
|
|
57
|
+
"@ant-design/icons": "^6.2.2",
|
|
58
58
|
"@emotion/react": "^11.14.0",
|
|
59
59
|
"@tanem/react-nprogress": "^6.0.3",
|
|
60
60
|
"compare-versions": "^6.1.1",
|
|
61
|
-
"lucide-react": "^1.
|
|
61
|
+
"lucide-react": "^1.16.0"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@tanstack/react-router": "^1.
|
|
65
|
-
"react": "^19.2.
|
|
66
|
-
"react-dom": "^19.2.
|
|
67
|
-
"@vef-framework-react/
|
|
68
|
-
"@vef-framework-react/core": "2.
|
|
69
|
-
"@vef-framework-react/
|
|
70
|
-
"@vef-framework-react/
|
|
64
|
+
"@tanstack/react-router": "^1.170.1",
|
|
65
|
+
"react": "^19.2.6",
|
|
66
|
+
"react-dom": "^19.2.6",
|
|
67
|
+
"@vef-framework-react/components": "2.2.0",
|
|
68
|
+
"@vef-framework-react/core": "2.2.0",
|
|
69
|
+
"@vef-framework-react/hooks": "2.2.0",
|
|
70
|
+
"@vef-framework-react/shared": "2.2.0"
|
|
71
71
|
},
|
|
72
72
|
"scripts": {
|
|
73
73
|
"clean": "rimraf dist",
|