@lukoweb/apitogo 0.1.39 → 0.1.41
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/cli/cli.js +120 -117
- package/dist/declarations/config/validators/HeaderNavigationSchema.d.ts +96 -0
- package/dist/declarations/config/validators/ZudokuConfig.d.ts +36 -0
- package/dist/declarations/lib/authentication/providers/dev-portal-constants.d.ts +2 -0
- package/dist/declarations/lib/authentication/providers/dev-portal.d.ts +1 -2
- package/dist/declarations/lib/authentication/state.d.ts +1 -0
- package/dist/declarations/lib/components/context/ZudokuProvider.d.ts +1 -1
- package/dist/flat-config.d.ts +32 -30
- package/package.json +1 -1
- package/src/config/validators/HeaderNavigationSchema.ts +3 -0
- package/src/lib/authentication/providers/dev-portal-constants.ts +2 -0
- package/src/lib/authentication/providers/dev-portal-utils.ts +39 -2
- package/src/lib/authentication/providers/dev-portal.tsx +8 -8
- package/src/lib/authentication/state.ts +9 -1
- package/src/lib/components/Header.tsx +2 -8
- package/src/lib/components/HeaderNavigation.tsx +33 -7
- package/src/lib/components/MobileTopNavigation.tsx +2 -8
- package/src/lib/components/Zudoku.tsx +4 -5
- package/src/lib/components/context/ZudokuProvider.tsx +1 -3
- package/src/lib/core/RouteGuard.tsx +16 -4
- package/src/lib/testing/index.tsx +1 -0
- package/src/vite/plugin-auth.ts +1 -5
package/dist/cli/cli.js
CHANGED
|
@@ -2914,100 +2914,66 @@ var init_icon_types = __esm({
|
|
|
2914
2914
|
}
|
|
2915
2915
|
});
|
|
2916
2916
|
|
|
2917
|
-
// src/config/validators/HeaderNavigationSchema.ts
|
|
2918
|
-
import { z as z5 } from "zod";
|
|
2919
|
-
var IconSchema, HeaderNavLinkItemSchema, HeaderNavGroupSchema, HeaderNavItemSchema, HeaderNavigationSchema;
|
|
2920
|
-
var init_HeaderNavigationSchema = __esm({
|
|
2921
|
-
"src/config/validators/HeaderNavigationSchema.ts"() {
|
|
2922
|
-
init_icon_types();
|
|
2923
|
-
IconSchema = z5.enum(IconNames);
|
|
2924
|
-
HeaderNavLinkItemSchema = z5.object({
|
|
2925
|
-
label: z5.string(),
|
|
2926
|
-
icon: IconSchema.optional(),
|
|
2927
|
-
description: z5.string().optional(),
|
|
2928
|
-
to: z5.string(),
|
|
2929
|
-
target: z5.enum(["_self", "_blank"]).optional()
|
|
2930
|
-
});
|
|
2931
|
-
HeaderNavGroupSchema = z5.object({
|
|
2932
|
-
label: z5.string(),
|
|
2933
|
-
items: z5.array(HeaderNavLinkItemSchema)
|
|
2934
|
-
});
|
|
2935
|
-
HeaderNavItemSchema = z5.union([
|
|
2936
|
-
z5.object({
|
|
2937
|
-
label: z5.string(),
|
|
2938
|
-
icon: IconSchema.optional(),
|
|
2939
|
-
to: z5.string(),
|
|
2940
|
-
target: z5.enum(["_self", "_blank"]).optional()
|
|
2941
|
-
}),
|
|
2942
|
-
z5.object({
|
|
2943
|
-
label: z5.string(),
|
|
2944
|
-
items: z5.array(z5.union([HeaderNavLinkItemSchema, HeaderNavGroupSchema]))
|
|
2945
|
-
})
|
|
2946
|
-
]);
|
|
2947
|
-
HeaderNavigationSchema = z5.array(HeaderNavItemSchema);
|
|
2948
|
-
}
|
|
2949
|
-
});
|
|
2950
|
-
|
|
2951
2917
|
// src/config/validators/InputNavigationSchema.ts
|
|
2952
|
-
import { z as
|
|
2953
|
-
var
|
|
2918
|
+
import { z as z5 } from "zod";
|
|
2919
|
+
var IconSchema, BadgeSchema, InputNavigationCategoryLinkDocSchema, DisplaySchema, NavigationModifyRuleSchema, NavigationInsertRuleSchema, NavigationRemoveRuleSchema, NavigationSortRuleSchema, NavigationMoveRuleSchema, NavigationRuleSchema, NavigationRulesSchema, InputNavigationDocSchema, InputNavigationLinkSchema, InputNavigationCustomPageSchema, InputNavigationSeparatorSchema, InputNavigationSectionSchema, InputNavigationFilterSchema, BaseInputNavigationCategorySchema, InputNavigationCategorySchema, InputNavigationItemSchema, InputNavigationSchema;
|
|
2954
2920
|
var init_InputNavigationSchema = __esm({
|
|
2955
2921
|
"src/config/validators/InputNavigationSchema.ts"() {
|
|
2956
|
-
|
|
2957
|
-
BadgeSchema =
|
|
2958
|
-
label:
|
|
2922
|
+
IconSchema = z5.custom((f) => typeof f === "string");
|
|
2923
|
+
BadgeSchema = z5.object({
|
|
2924
|
+
label: z5.string(),
|
|
2959
2925
|
// prettier-ignore
|
|
2960
|
-
color:
|
|
2961
|
-
invert:
|
|
2962
|
-
className:
|
|
2926
|
+
color: z5.enum(["green", "blue", "yellow", "red", "purple", "indigo", "gray", "outline"]),
|
|
2927
|
+
invert: z5.boolean().optional(),
|
|
2928
|
+
className: z5.string().optional()
|
|
2963
2929
|
});
|
|
2964
|
-
InputNavigationCategoryLinkDocSchema =
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
type:
|
|
2968
|
-
file:
|
|
2969
|
-
label:
|
|
2970
|
-
path:
|
|
2930
|
+
InputNavigationCategoryLinkDocSchema = z5.union([
|
|
2931
|
+
z5.string(),
|
|
2932
|
+
z5.object({
|
|
2933
|
+
type: z5.literal("doc"),
|
|
2934
|
+
file: z5.string(),
|
|
2935
|
+
label: z5.string().optional(),
|
|
2936
|
+
path: z5.string().optional()
|
|
2971
2937
|
})
|
|
2972
2938
|
]);
|
|
2973
|
-
DisplaySchema =
|
|
2974
|
-
|
|
2975
|
-
|
|
2939
|
+
DisplaySchema = z5.union([
|
|
2940
|
+
z5.enum(["auth", "anon", "always", "hide"]),
|
|
2941
|
+
z5.custom((val) => typeof val === "function")
|
|
2976
2942
|
]).optional();
|
|
2977
|
-
NavigationModifyRuleSchema =
|
|
2978
|
-
type:
|
|
2979
|
-
match:
|
|
2980
|
-
set:
|
|
2981
|
-
label:
|
|
2982
|
-
icon:
|
|
2943
|
+
NavigationModifyRuleSchema = z5.object({
|
|
2944
|
+
type: z5.literal("modify"),
|
|
2945
|
+
match: z5.string(),
|
|
2946
|
+
set: z5.object({
|
|
2947
|
+
label: z5.string().optional(),
|
|
2948
|
+
icon: IconSchema.optional(),
|
|
2983
2949
|
badge: BadgeSchema.optional(),
|
|
2984
|
-
collapsed:
|
|
2985
|
-
collapsible:
|
|
2950
|
+
collapsed: z5.boolean().optional(),
|
|
2951
|
+
collapsible: z5.boolean().optional(),
|
|
2986
2952
|
display: DisplaySchema
|
|
2987
2953
|
})
|
|
2988
2954
|
});
|
|
2989
|
-
NavigationInsertRuleSchema =
|
|
2990
|
-
type:
|
|
2991
|
-
match:
|
|
2992
|
-
position:
|
|
2993
|
-
items:
|
|
2955
|
+
NavigationInsertRuleSchema = z5.object({
|
|
2956
|
+
type: z5.literal("insert"),
|
|
2957
|
+
match: z5.string(),
|
|
2958
|
+
position: z5.enum(["before", "after"]),
|
|
2959
|
+
items: z5.lazy(() => InputNavigationItemSchema.array())
|
|
2994
2960
|
});
|
|
2995
|
-
NavigationRemoveRuleSchema =
|
|
2996
|
-
type:
|
|
2997
|
-
match:
|
|
2961
|
+
NavigationRemoveRuleSchema = z5.object({
|
|
2962
|
+
type: z5.literal("remove"),
|
|
2963
|
+
match: z5.string()
|
|
2998
2964
|
});
|
|
2999
|
-
NavigationSortRuleSchema =
|
|
3000
|
-
type:
|
|
3001
|
-
match:
|
|
3002
|
-
by:
|
|
2965
|
+
NavigationSortRuleSchema = z5.object({
|
|
2966
|
+
type: z5.literal("sort"),
|
|
2967
|
+
match: z5.string(),
|
|
2968
|
+
by: z5.custom((val) => typeof val === "function")
|
|
3003
2969
|
});
|
|
3004
|
-
NavigationMoveRuleSchema =
|
|
3005
|
-
type:
|
|
3006
|
-
match:
|
|
3007
|
-
to:
|
|
3008
|
-
position:
|
|
2970
|
+
NavigationMoveRuleSchema = z5.object({
|
|
2971
|
+
type: z5.literal("move"),
|
|
2972
|
+
match: z5.string(),
|
|
2973
|
+
to: z5.string(),
|
|
2974
|
+
position: z5.enum(["before", "after"])
|
|
3009
2975
|
});
|
|
3010
|
-
NavigationRuleSchema =
|
|
2976
|
+
NavigationRuleSchema = z5.discriminatedUnion("type", [
|
|
3011
2977
|
NavigationModifyRuleSchema,
|
|
3012
2978
|
NavigationInsertRuleSchema,
|
|
3013
2979
|
NavigationRemoveRuleSchema,
|
|
@@ -3015,65 +2981,65 @@ var init_InputNavigationSchema = __esm({
|
|
|
3015
2981
|
NavigationMoveRuleSchema
|
|
3016
2982
|
]);
|
|
3017
2983
|
NavigationRulesSchema = NavigationRuleSchema.array();
|
|
3018
|
-
InputNavigationDocSchema =
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
type:
|
|
3022
|
-
file:
|
|
2984
|
+
InputNavigationDocSchema = z5.union([
|
|
2985
|
+
z5.string(),
|
|
2986
|
+
z5.object({
|
|
2987
|
+
type: z5.literal("doc"),
|
|
2988
|
+
file: z5.string(),
|
|
3023
2989
|
// Custom URL path for this document (overrides file-based path)
|
|
3024
|
-
path:
|
|
3025
|
-
icon:
|
|
3026
|
-
label:
|
|
2990
|
+
path: z5.string().optional(),
|
|
2991
|
+
icon: IconSchema.optional(),
|
|
2992
|
+
label: z5.string().optional(),
|
|
3027
2993
|
badge: BadgeSchema.optional(),
|
|
3028
2994
|
display: DisplaySchema
|
|
3029
2995
|
})
|
|
3030
2996
|
]);
|
|
3031
|
-
InputNavigationLinkSchema =
|
|
3032
|
-
type:
|
|
3033
|
-
to:
|
|
3034
|
-
label:
|
|
3035
|
-
target:
|
|
3036
|
-
icon:
|
|
2997
|
+
InputNavigationLinkSchema = z5.object({
|
|
2998
|
+
type: z5.literal("link"),
|
|
2999
|
+
to: z5.string(),
|
|
3000
|
+
label: z5.string(),
|
|
3001
|
+
target: z5.enum(["_self", "_blank"]).optional(),
|
|
3002
|
+
icon: IconSchema.optional(),
|
|
3037
3003
|
badge: BadgeSchema.optional(),
|
|
3038
3004
|
display: DisplaySchema
|
|
3039
3005
|
});
|
|
3040
|
-
InputNavigationCustomPageSchema =
|
|
3041
|
-
type:
|
|
3042
|
-
path:
|
|
3043
|
-
label:
|
|
3044
|
-
element:
|
|
3045
|
-
icon:
|
|
3006
|
+
InputNavigationCustomPageSchema = z5.object({
|
|
3007
|
+
type: z5.literal("custom-page"),
|
|
3008
|
+
path: z5.string(),
|
|
3009
|
+
label: z5.string().optional(),
|
|
3010
|
+
element: z5.any(),
|
|
3011
|
+
icon: IconSchema.optional(),
|
|
3046
3012
|
badge: BadgeSchema.optional(),
|
|
3047
3013
|
display: DisplaySchema,
|
|
3048
|
-
layout:
|
|
3014
|
+
layout: z5.enum(["default", "none"]).optional()
|
|
3049
3015
|
});
|
|
3050
|
-
InputNavigationSeparatorSchema =
|
|
3051
|
-
type:
|
|
3016
|
+
InputNavigationSeparatorSchema = z5.object({
|
|
3017
|
+
type: z5.literal("separator"),
|
|
3052
3018
|
display: DisplaySchema
|
|
3053
3019
|
});
|
|
3054
|
-
InputNavigationSectionSchema =
|
|
3055
|
-
type:
|
|
3056
|
-
label:
|
|
3020
|
+
InputNavigationSectionSchema = z5.object({
|
|
3021
|
+
type: z5.literal("section"),
|
|
3022
|
+
label: z5.string(),
|
|
3057
3023
|
display: DisplaySchema
|
|
3058
3024
|
});
|
|
3059
|
-
InputNavigationFilterSchema =
|
|
3060
|
-
type:
|
|
3061
|
-
placeholder:
|
|
3025
|
+
InputNavigationFilterSchema = z5.object({
|
|
3026
|
+
type: z5.literal("filter"),
|
|
3027
|
+
placeholder: z5.string().optional(),
|
|
3062
3028
|
display: DisplaySchema
|
|
3063
3029
|
});
|
|
3064
|
-
BaseInputNavigationCategorySchema =
|
|
3065
|
-
type:
|
|
3066
|
-
icon:
|
|
3067
|
-
label:
|
|
3068
|
-
collapsible:
|
|
3069
|
-
collapsed:
|
|
3030
|
+
BaseInputNavigationCategorySchema = z5.object({
|
|
3031
|
+
type: z5.literal("category"),
|
|
3032
|
+
icon: IconSchema.optional(),
|
|
3033
|
+
label: z5.string(),
|
|
3034
|
+
collapsible: z5.boolean().optional(),
|
|
3035
|
+
collapsed: z5.boolean().optional(),
|
|
3070
3036
|
link: InputNavigationCategoryLinkDocSchema.optional(),
|
|
3071
3037
|
display: DisplaySchema
|
|
3072
3038
|
});
|
|
3073
3039
|
InputNavigationCategorySchema = BaseInputNavigationCategorySchema.extend({
|
|
3074
|
-
items:
|
|
3040
|
+
items: z5.lazy(() => InputNavigationItemSchema.array())
|
|
3075
3041
|
});
|
|
3076
|
-
InputNavigationItemSchema =
|
|
3042
|
+
InputNavigationItemSchema = z5.union([
|
|
3077
3043
|
InputNavigationDocSchema,
|
|
3078
3044
|
InputNavigationLinkSchema,
|
|
3079
3045
|
InputNavigationCustomPageSchema,
|
|
@@ -3086,6 +3052,43 @@ var init_InputNavigationSchema = __esm({
|
|
|
3086
3052
|
}
|
|
3087
3053
|
});
|
|
3088
3054
|
|
|
3055
|
+
// src/config/validators/HeaderNavigationSchema.ts
|
|
3056
|
+
import { z as z6 } from "zod";
|
|
3057
|
+
var IconSchema2, HeaderNavLinkItemSchema, HeaderNavGroupSchema, HeaderNavItemSchema, HeaderNavigationSchema;
|
|
3058
|
+
var init_HeaderNavigationSchema = __esm({
|
|
3059
|
+
"src/config/validators/HeaderNavigationSchema.ts"() {
|
|
3060
|
+
init_icon_types();
|
|
3061
|
+
init_InputNavigationSchema();
|
|
3062
|
+
IconSchema2 = z6.enum(IconNames);
|
|
3063
|
+
HeaderNavLinkItemSchema = z6.object({
|
|
3064
|
+
label: z6.string(),
|
|
3065
|
+
icon: IconSchema2.optional(),
|
|
3066
|
+
description: z6.string().optional(),
|
|
3067
|
+
to: z6.string(),
|
|
3068
|
+
target: z6.enum(["_self", "_blank"]).optional(),
|
|
3069
|
+
display: DisplaySchema
|
|
3070
|
+
});
|
|
3071
|
+
HeaderNavGroupSchema = z6.object({
|
|
3072
|
+
label: z6.string(),
|
|
3073
|
+
items: z6.array(HeaderNavLinkItemSchema)
|
|
3074
|
+
});
|
|
3075
|
+
HeaderNavItemSchema = z6.union([
|
|
3076
|
+
z6.object({
|
|
3077
|
+
label: z6.string(),
|
|
3078
|
+
icon: IconSchema2.optional(),
|
|
3079
|
+
to: z6.string(),
|
|
3080
|
+
target: z6.enum(["_self", "_blank"]).optional(),
|
|
3081
|
+
display: DisplaySchema
|
|
3082
|
+
}),
|
|
3083
|
+
z6.object({
|
|
3084
|
+
label: z6.string(),
|
|
3085
|
+
items: z6.array(z6.union([HeaderNavLinkItemSchema, HeaderNavGroupSchema]))
|
|
3086
|
+
})
|
|
3087
|
+
]);
|
|
3088
|
+
HeaderNavigationSchema = z6.array(HeaderNavItemSchema);
|
|
3089
|
+
}
|
|
3090
|
+
});
|
|
3091
|
+
|
|
3089
3092
|
// src/lib/util/joinUrl.ts
|
|
3090
3093
|
var defaultUrlRegExp, normalizeParts, parseParts, buildUrl, joinUrl;
|
|
3091
3094
|
var init_joinUrl = __esm({
|
|
@@ -4121,7 +4124,7 @@ import {
|
|
|
4121
4124
|
// package.json
|
|
4122
4125
|
var package_default = {
|
|
4123
4126
|
name: "@lukoweb/apitogo",
|
|
4124
|
-
version: "0.1.
|
|
4127
|
+
version: "0.1.41",
|
|
4125
4128
|
type: "module",
|
|
4126
4129
|
sideEffects: [
|
|
4127
4130
|
"**/*.css",
|
|
@@ -6758,7 +6761,7 @@ var viteAuthPlugin = () => {
|
|
|
6758
6761
|
async load(id) {
|
|
6759
6762
|
if (id === resolvedVirtualModuleId4) {
|
|
6760
6763
|
const config2 = getCurrentConfig();
|
|
6761
|
-
if (!config2.authentication ||
|
|
6764
|
+
if (!config2.authentication || config2.__meta.mode === "standalone") {
|
|
6762
6765
|
return `export const configuredAuthProvider = undefined;`;
|
|
6763
6766
|
}
|
|
6764
6767
|
return [
|
|
@@ -1960,6 +1960,18 @@ declare const HeaderNavLinkItemSchema: z.ZodObject<{
|
|
|
1960
1960
|
_self: "_self";
|
|
1961
1961
|
_blank: "_blank";
|
|
1962
1962
|
}>>;
|
|
1963
|
+
display: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
1964
|
+
auth: "auth";
|
|
1965
|
+
anon: "anon";
|
|
1966
|
+
always: "always";
|
|
1967
|
+
hide: "hide";
|
|
1968
|
+
}>, z.ZodCustom<(params: {
|
|
1969
|
+
context: import("../../index.js").ZudokuContext;
|
|
1970
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
1971
|
+
}) => boolean, (params: {
|
|
1972
|
+
context: import("../../index.js").ZudokuContext;
|
|
1973
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
1974
|
+
}) => boolean>]>>;
|
|
1963
1975
|
}, z.core.$strip>;
|
|
1964
1976
|
declare const HeaderNavGroupSchema: z.ZodObject<{
|
|
1965
1977
|
label: z.ZodString;
|
|
@@ -3924,6 +3936,18 @@ declare const HeaderNavGroupSchema: z.ZodObject<{
|
|
|
3924
3936
|
_self: "_self";
|
|
3925
3937
|
_blank: "_blank";
|
|
3926
3938
|
}>>;
|
|
3939
|
+
display: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
3940
|
+
auth: "auth";
|
|
3941
|
+
anon: "anon";
|
|
3942
|
+
always: "always";
|
|
3943
|
+
hide: "hide";
|
|
3944
|
+
}>, z.ZodCustom<(params: {
|
|
3945
|
+
context: import("../../index.js").ZudokuContext;
|
|
3946
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
3947
|
+
}) => boolean, (params: {
|
|
3948
|
+
context: import("../../index.js").ZudokuContext;
|
|
3949
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
3950
|
+
}) => boolean>]>>;
|
|
3927
3951
|
}, z.core.$strip>>;
|
|
3928
3952
|
}, z.core.$strip>;
|
|
3929
3953
|
declare const HeaderNavItemSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
@@ -5886,6 +5910,18 @@ declare const HeaderNavItemSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
5886
5910
|
_self: "_self";
|
|
5887
5911
|
_blank: "_blank";
|
|
5888
5912
|
}>>;
|
|
5913
|
+
display: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
5914
|
+
auth: "auth";
|
|
5915
|
+
anon: "anon";
|
|
5916
|
+
always: "always";
|
|
5917
|
+
hide: "hide";
|
|
5918
|
+
}>, z.ZodCustom<(params: {
|
|
5919
|
+
context: import("../../index.js").ZudokuContext;
|
|
5920
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
5921
|
+
}) => boolean, (params: {
|
|
5922
|
+
context: import("../../index.js").ZudokuContext;
|
|
5923
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
5924
|
+
}) => boolean>]>>;
|
|
5889
5925
|
}, z.core.$strip>, z.ZodObject<{
|
|
5890
5926
|
label: z.ZodString;
|
|
5891
5927
|
items: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
@@ -7849,6 +7885,18 @@ declare const HeaderNavItemSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
7849
7885
|
_self: "_self";
|
|
7850
7886
|
_blank: "_blank";
|
|
7851
7887
|
}>>;
|
|
7888
|
+
display: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
7889
|
+
auth: "auth";
|
|
7890
|
+
anon: "anon";
|
|
7891
|
+
always: "always";
|
|
7892
|
+
hide: "hide";
|
|
7893
|
+
}>, z.ZodCustom<(params: {
|
|
7894
|
+
context: import("../../index.js").ZudokuContext;
|
|
7895
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
7896
|
+
}) => boolean, (params: {
|
|
7897
|
+
context: import("../../index.js").ZudokuContext;
|
|
7898
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
7899
|
+
}) => boolean>]>>;
|
|
7852
7900
|
}, z.core.$strip>, z.ZodObject<{
|
|
7853
7901
|
label: z.ZodString;
|
|
7854
7902
|
items: z.ZodArray<z.ZodObject<{
|
|
@@ -9812,6 +9860,18 @@ declare const HeaderNavItemSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
|
9812
9860
|
_self: "_self";
|
|
9813
9861
|
_blank: "_blank";
|
|
9814
9862
|
}>>;
|
|
9863
|
+
display: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
9864
|
+
auth: "auth";
|
|
9865
|
+
anon: "anon";
|
|
9866
|
+
always: "always";
|
|
9867
|
+
hide: "hide";
|
|
9868
|
+
}>, z.ZodCustom<(params: {
|
|
9869
|
+
context: import("../../index.js").ZudokuContext;
|
|
9870
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
9871
|
+
}) => boolean, (params: {
|
|
9872
|
+
context: import("../../index.js").ZudokuContext;
|
|
9873
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
9874
|
+
}) => boolean>]>>;
|
|
9815
9875
|
}, z.core.$strip>>;
|
|
9816
9876
|
}, z.core.$strip>]>>;
|
|
9817
9877
|
}, z.core.$strip>]>;
|
|
@@ -11775,6 +11835,18 @@ export declare const HeaderNavigationSchema: z.ZodArray<z.ZodUnion<readonly [z.Z
|
|
|
11775
11835
|
_self: "_self";
|
|
11776
11836
|
_blank: "_blank";
|
|
11777
11837
|
}>>;
|
|
11838
|
+
display: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
11839
|
+
auth: "auth";
|
|
11840
|
+
anon: "anon";
|
|
11841
|
+
always: "always";
|
|
11842
|
+
hide: "hide";
|
|
11843
|
+
}>, z.ZodCustom<(params: {
|
|
11844
|
+
context: import("../../index.js").ZudokuContext;
|
|
11845
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
11846
|
+
}) => boolean, (params: {
|
|
11847
|
+
context: import("../../index.js").ZudokuContext;
|
|
11848
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
11849
|
+
}) => boolean>]>>;
|
|
11778
11850
|
}, z.core.$strip>, z.ZodObject<{
|
|
11779
11851
|
label: z.ZodString;
|
|
11780
11852
|
items: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
@@ -13738,6 +13810,18 @@ export declare const HeaderNavigationSchema: z.ZodArray<z.ZodUnion<readonly [z.Z
|
|
|
13738
13810
|
_self: "_self";
|
|
13739
13811
|
_blank: "_blank";
|
|
13740
13812
|
}>>;
|
|
13813
|
+
display: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
13814
|
+
auth: "auth";
|
|
13815
|
+
anon: "anon";
|
|
13816
|
+
always: "always";
|
|
13817
|
+
hide: "hide";
|
|
13818
|
+
}>, z.ZodCustom<(params: {
|
|
13819
|
+
context: import("../../index.js").ZudokuContext;
|
|
13820
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
13821
|
+
}) => boolean, (params: {
|
|
13822
|
+
context: import("../../index.js").ZudokuContext;
|
|
13823
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
13824
|
+
}) => boolean>]>>;
|
|
13741
13825
|
}, z.core.$strip>, z.ZodObject<{
|
|
13742
13826
|
label: z.ZodString;
|
|
13743
13827
|
items: z.ZodArray<z.ZodObject<{
|
|
@@ -15701,6 +15785,18 @@ export declare const HeaderNavigationSchema: z.ZodArray<z.ZodUnion<readonly [z.Z
|
|
|
15701
15785
|
_self: "_self";
|
|
15702
15786
|
_blank: "_blank";
|
|
15703
15787
|
}>>;
|
|
15788
|
+
display: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
15789
|
+
auth: "auth";
|
|
15790
|
+
anon: "anon";
|
|
15791
|
+
always: "always";
|
|
15792
|
+
hide: "hide";
|
|
15793
|
+
}>, z.ZodCustom<(params: {
|
|
15794
|
+
context: import("../../index.js").ZudokuContext;
|
|
15795
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
15796
|
+
}) => boolean, (params: {
|
|
15797
|
+
context: import("../../index.js").ZudokuContext;
|
|
15798
|
+
auth: import("../../lib/authentication/hook.js").UseAuthReturn;
|
|
15799
|
+
}) => boolean>]>>;
|
|
15704
15800
|
}, z.core.$strip>>;
|
|
15705
15801
|
}, z.core.$strip>]>>;
|
|
15706
15802
|
}, z.core.$strip>]>>;
|
|
@@ -2487,6 +2487,18 @@ export declare const ZudokuConfig: z.ZodObject<{
|
|
|
2487
2487
|
_self: "_self";
|
|
2488
2488
|
_blank: "_blank";
|
|
2489
2489
|
}>>;
|
|
2490
|
+
display: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
2491
|
+
auth: "auth";
|
|
2492
|
+
anon: "anon";
|
|
2493
|
+
always: "always";
|
|
2494
|
+
hide: "hide";
|
|
2495
|
+
}>, z.ZodCustom<(params: {
|
|
2496
|
+
context: ZudokuContext;
|
|
2497
|
+
auth: UseAuthReturn;
|
|
2498
|
+
}) => boolean, (params: {
|
|
2499
|
+
context: ZudokuContext;
|
|
2500
|
+
auth: UseAuthReturn;
|
|
2501
|
+
}) => boolean>]>>;
|
|
2490
2502
|
}, z.core.$strip>, z.ZodObject<{
|
|
2491
2503
|
label: z.ZodString;
|
|
2492
2504
|
items: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
@@ -4450,6 +4462,18 @@ export declare const ZudokuConfig: z.ZodObject<{
|
|
|
4450
4462
|
_self: "_self";
|
|
4451
4463
|
_blank: "_blank";
|
|
4452
4464
|
}>>;
|
|
4465
|
+
display: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
4466
|
+
auth: "auth";
|
|
4467
|
+
anon: "anon";
|
|
4468
|
+
always: "always";
|
|
4469
|
+
hide: "hide";
|
|
4470
|
+
}>, z.ZodCustom<(params: {
|
|
4471
|
+
context: ZudokuContext;
|
|
4472
|
+
auth: UseAuthReturn;
|
|
4473
|
+
}) => boolean, (params: {
|
|
4474
|
+
context: ZudokuContext;
|
|
4475
|
+
auth: UseAuthReturn;
|
|
4476
|
+
}) => boolean>]>>;
|
|
4453
4477
|
}, z.core.$strip>, z.ZodObject<{
|
|
4454
4478
|
label: z.ZodString;
|
|
4455
4479
|
items: z.ZodArray<z.ZodObject<{
|
|
@@ -6413,6 +6437,18 @@ export declare const ZudokuConfig: z.ZodObject<{
|
|
|
6413
6437
|
_self: "_self";
|
|
6414
6438
|
_blank: "_blank";
|
|
6415
6439
|
}>>;
|
|
6440
|
+
display: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
|
|
6441
|
+
auth: "auth";
|
|
6442
|
+
anon: "anon";
|
|
6443
|
+
always: "always";
|
|
6444
|
+
hide: "hide";
|
|
6445
|
+
}>, z.ZodCustom<(params: {
|
|
6446
|
+
context: ZudokuContext;
|
|
6447
|
+
auth: UseAuthReturn;
|
|
6448
|
+
}) => boolean, (params: {
|
|
6449
|
+
context: ZudokuContext;
|
|
6450
|
+
auth: UseAuthReturn;
|
|
6451
|
+
}) => boolean>]>>;
|
|
6416
6452
|
}, z.core.$strip>>;
|
|
6417
6453
|
}, z.core.$strip>]>>;
|
|
6418
6454
|
}, z.core.$strip>]>>>;
|
|
@@ -18,7 +18,6 @@ export declare class DevPortalAuthenticationProvider extends CoreAuthenticationP
|
|
|
18
18
|
private readonly redirectToAfterSignIn;
|
|
19
19
|
private readonly redirectToAfterSignUp;
|
|
20
20
|
private readonly redirectToAfterSignOut;
|
|
21
|
-
private authMode;
|
|
22
21
|
private backendAvailable;
|
|
23
22
|
private refreshGeneration;
|
|
24
23
|
private refreshInFlight;
|
|
@@ -27,7 +26,7 @@ export declare class DevPortalAuthenticationProvider extends CoreAuthenticationP
|
|
|
27
26
|
onPageLoad: () => Promise<void>;
|
|
28
27
|
private syncBackendAvailability;
|
|
29
28
|
private setPreviewState;
|
|
30
|
-
private
|
|
29
|
+
private ensureConfiguredBackend;
|
|
31
30
|
refreshUserProfile(): Promise<boolean>;
|
|
32
31
|
private refreshUserProfileInternal;
|
|
33
32
|
signIn(_: AuthActionContext, { redirectTo }?: AuthActionOptions): Promise<void>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { PropsWithChildren } from "react";
|
|
2
2
|
import type { ZudokuContext } from "../../core/ZudokuContext.js";
|
|
3
3
|
export declare const ZudokuProvider: ({ children, context, }: PropsWithChildren<{
|
|
4
4
|
context: ZudokuContext;
|
package/dist/flat-config.d.ts
CHANGED
|
@@ -1,44 +1,45 @@
|
|
|
1
1
|
export type _Schema1 = ("a-arrow-down" | "a-arrow-up" | "a-large-small" | "accessibility" | "activity" | "activity-square" | "air-vent" | "airplay" | "alarm-check" | "alarm-clock" | "alarm-clock-check" | "alarm-clock-minus" | "alarm-clock-off" | "alarm-clock-plus" | "alarm-minus" | "alarm-plus" | "alarm-smoke" | "album" | "alert-circle" | "alert-octagon" | "alert-triangle" | "align-center" | "align-center-horizontal" | "align-center-vertical" | "align-end-horizontal" | "align-end-vertical" | "align-horizontal-distribute-center" | "align-horizontal-distribute-end" | "align-horizontal-distribute-start" | "align-horizontal-justify-center" | "align-horizontal-justify-end" | "align-horizontal-justify-start" | "align-horizontal-space-around" | "align-horizontal-space-between" | "align-justify" | "align-left" | "align-right" | "align-start-horizontal" | "align-start-vertical" | "align-vertical-distribute-center" | "align-vertical-distribute-end" | "align-vertical-distribute-start" | "align-vertical-justify-center" | "align-vertical-justify-end" | "align-vertical-justify-start" | "align-vertical-space-around" | "align-vertical-space-between" | "ambulance" | "ampersand" | "ampersands" | "amphora" | "anchor" | "angry" | "annoyed" | "antenna" | "anvil" | "aperture" | "app-window" | "app-window-mac" | "apple" | "archive" | "archive-restore" | "archive-x" | "area-chart" | "armchair" | "arrow-big-down" | "arrow-big-down-dash" | "arrow-big-left" | "arrow-big-left-dash" | "arrow-big-right" | "arrow-big-right-dash" | "arrow-big-up" | "arrow-big-up-dash" | "arrow-down" | "arrow-down-0-1" | "arrow-down-01" | "arrow-down-1-0" | "arrow-down-10" | "arrow-down-a-z" | "arrow-down-az" | "arrow-down-circle" | "arrow-down-from-line" | "arrow-down-left" | "arrow-down-left-from-circle" | "arrow-down-left-from-square" | "arrow-down-left-square" | "arrow-down-narrow-wide" | "arrow-down-right" | "arrow-down-right-from-circle" | "arrow-down-right-from-square" | "arrow-down-right-square" | "arrow-down-square" | "arrow-down-to-dot" | "arrow-down-to-line" | "arrow-down-up" | "arrow-down-wide-narrow" | "arrow-down-z-a" | "arrow-down-za" | "arrow-left" | "arrow-left-circle" | "arrow-left-from-line" | "arrow-left-right" | "arrow-left-square" | "arrow-left-to-line" | "arrow-right" | "arrow-right-circle" | "arrow-right-from-line" | "arrow-right-left" | "arrow-right-square" | "arrow-right-to-line" | "arrow-up" | "arrow-up-0-1" | "arrow-up-01" | "arrow-up-1-0" | "arrow-up-10" | "arrow-up-a-z" | "arrow-up-az" | "arrow-up-circle" | "arrow-up-down" | "arrow-up-from-dot" | "arrow-up-from-line" | "arrow-up-left" | "arrow-up-left-from-circle" | "arrow-up-left-from-square" | "arrow-up-left-square" | "arrow-up-narrow-wide" | "arrow-up-right" | "arrow-up-right-from-circle" | "arrow-up-right-from-square" | "arrow-up-right-square" | "arrow-up-square" | "arrow-up-to-line" | "arrow-up-wide-narrow" | "arrow-up-z-a" | "arrow-up-za" | "arrows-up-from-line" | "asterisk" | "asterisk-square" | "at-sign" | "atom" | "audio-lines" | "audio-waveform" | "award" | "axe" | "axis-3-d" | "axis-3d" | "baby" | "backpack" | "badge" | "badge-alert" | "badge-cent" | "badge-check" | "badge-dollar-sign" | "badge-euro" | "badge-help" | "badge-indian-rupee" | "badge-info" | "badge-japanese-yen" | "badge-minus" | "badge-percent" | "badge-plus" | "badge-pound-sterling" | "badge-question-mark" | "badge-russian-ruble" | "badge-swiss-franc" | "badge-turkish-lira" | "badge-x" | "baggage-claim" | "balloon" | "ban" | "banana" | "bandage" | "banknote" | "banknote-arrow-down" | "banknote-arrow-up" | "banknote-x" | "bar-chart" | "bar-chart-2" | "bar-chart-3" | "bar-chart-4" | "bar-chart-big" | "bar-chart-horizontal" | "bar-chart-horizontal-big" | "barcode" | "barrel" | "baseline" | "bath" | "battery" | "battery-charging" | "battery-full" | "battery-low" | "battery-medium" | "battery-plus" | "battery-warning" | "beaker" | "bean" | "bean-off" | "bed" | "bed-double" | "bed-single" | "beef" | "beer" | "beer-off" | "bell" | "bell-dot" | "bell-electric" | "bell-minus" | "bell-off" | "bell-plus" | "bell-ring" | "between-horizonal-end" | "between-horizonal-start" | "between-horizontal-end" | "between-horizontal-start" | "between-vertical-end" | "between-vertical-start" | "biceps-flexed" | "bike" | "binary" | "binoculars" | "biohazard" | "bird" | "birdhouse" | "bitcoin" | "blend" | "blinds" | "blocks" | "bluetooth" | "bluetooth-connected" | "bluetooth-off" | "bluetooth-searching" | "bold" | "bolt" | "bomb" | "bone" | "book" | "book-a" | "book-alert" | "book-audio" | "book-check" | "book-copy" | "book-dashed" | "book-down" | "book-headphones" | "book-heart" | "book-image" | "book-key" | "book-lock" | "book-marked" | "book-minus" | "book-open" | "book-open-check" | "book-open-text" | "book-plus" | "book-search" | "book-template" | "book-text" | "book-type" | "book-up" | "book-up-2" | "book-user" | "book-x" | "bookmark" | "bookmark-check" | "bookmark-minus" | "bookmark-plus" | "bookmark-x" | "boom-box" | "bot" | "bot-message-square" | "bot-off" | "bottle-wine" | "bow-arrow" | "box" | "box-select" | "boxes" | "braces" | "brackets" | "brain" | "brain-circuit" | "brain-cog" | "brick-wall" | "brick-wall-fire" | "brick-wall-shield" | "briefcase" | "briefcase-business" | "briefcase-conveyor-belt" | "briefcase-medical" | "bring-to-front" | "brush" | "brush-cleaning" | "bubbles" | "bug" | "bug-off" | "bug-play" | "building" | "building-2" | "bus" | "bus-front" | "cable" | "cable-car" | "cake" | "cake-slice" | "calculator" | "calendar" | "calendar-1" | "calendar-arrow-down" | "calendar-arrow-up" | "calendar-check" | "calendar-check-2" | "calendar-clock" | "calendar-cog" | "calendar-days" | "calendar-fold" | "calendar-heart" | "calendar-minus" | "calendar-minus-2" | "calendar-off" | "calendar-plus" | "calendar-plus-2" | "calendar-range" | "calendar-search" | "calendar-sync" | "calendar-x" | "calendar-x-2" | "calendars" | "camera" | "camera-off" | "candlestick-chart" | "candy" | "candy-cane" | "candy-off" | "cannabis" | "cannabis-off" | "captions" | "captions-off" | "car" | "car-front" | "car-taxi-front" | "caravan" | "card-sim" | "carrot" | "case-lower" | "case-sensitive" | "case-upper" | "cassette-tape" | "cast" | "castle" | "cat" | "cctv" | "chart-area" | "chart-bar" | "chart-bar-big" | "chart-bar-decreasing" | "chart-bar-increasing" | "chart-bar-stacked" | "chart-candlestick" | "chart-column" | "chart-column-big" | "chart-column-decreasing" | "chart-column-increasing" | "chart-column-stacked" | "chart-gantt" | "chart-line" | "chart-network" | "chart-no-axes-column" | "chart-no-axes-column-decreasing" | "chart-no-axes-column-increasing" | "chart-no-axes-combined" | "chart-no-axes-gantt" | "chart-pie" | "chart-scatter" | "chart-spline" | "check" | "check-check" | "check-circle" | "check-circle-2" | "check-line" | "check-square" | "check-square-2" | "chef-hat" | "cherry" | "chess-bishop" | "chess-king" | "chess-knight" | "chess-pawn" | "chess-queen" | "chess-rook" | "chevron-down" | "chevron-down-circle" | "chevron-down-square" | "chevron-first" | "chevron-last" | "chevron-left" | "chevron-left-circle" | "chevron-left-square" | "chevron-right" | "chevron-right-circle" | "chevron-right-square" | "chevron-up" | "chevron-up-circle" | "chevron-up-square" | "chevrons-down" | "chevrons-down-up" | "chevrons-left" | "chevrons-left-right" | "chevrons-left-right-ellipsis" | "chevrons-right" | "chevrons-right-left" | "chevrons-up" | "chevrons-up-down" | "chrome" | "chromium" | "church" | "cigarette" | "cigarette-off" | "circle" | "circle-alert" | "circle-arrow-down" | "circle-arrow-left" | "circle-arrow-out-down-left" | "circle-arrow-out-down-right" | "circle-arrow-out-up-left" | "circle-arrow-out-up-right" | "circle-arrow-right" | "circle-arrow-up" | "circle-check" | "circle-check-big" | "circle-chevron-down" | "circle-chevron-left" | "circle-chevron-right" | "circle-chevron-up" | "circle-dashed" | "circle-divide" | "circle-dollar-sign" | "circle-dot" | "circle-dot-dashed" | "circle-ellipsis" | "circle-equal" | "circle-fading-arrow-up" | "circle-fading-plus" | "circle-gauge" | "circle-help" | "circle-minus" | "circle-off" | "circle-parking" | "circle-parking-off" | "circle-pause" | "circle-percent" | "circle-pile" | "circle-play" | "circle-plus" | "circle-pound-sterling" | "circle-power" | "circle-question-mark" | "circle-slash" | "circle-slash-2" | "circle-slashed" | "circle-small" | "circle-star" | "circle-stop" | "circle-user" | "circle-user-round" | "circle-x" | "circuit-board" | "citrus" | "clapperboard" | "clipboard" | "clipboard-check" | "clipboard-clock" | "clipboard-copy" | "clipboard-edit" | "clipboard-list" | "clipboard-minus" | "clipboard-paste" | "clipboard-pen" | "clipboard-pen-line" | "clipboard-plus" | "clipboard-signature" | "clipboard-type" | "clipboard-x" | "clock" | "clock-1" | "clock-10" | "clock-11" | "clock-12" | "clock-2" | "clock-3" | "clock-4" | "clock-5" | "clock-6" | "clock-7" | "clock-8" | "clock-9" | "clock-alert" | "clock-arrow-down" | "clock-arrow-up" | "clock-check" | "clock-fading" | "clock-plus" | "closed-caption" | "cloud" | "cloud-alert" | "cloud-backup" | "cloud-check" | "cloud-cog" | "cloud-download" | "cloud-drizzle" | "cloud-fog" | "cloud-hail" | "cloud-lightning" | "cloud-moon" | "cloud-moon-rain" | "cloud-off" | "cloud-rain" | "cloud-rain-wind" | "cloud-snow" | "cloud-sun" | "cloud-sun-rain" | "cloud-sync" | "cloud-upload" | "cloudy" | "clover" | "club" | "code" | "code-2" | "code-square" | "code-xml" | "codepen" | "codesandbox" | "coffee" | "cog" | "coins" | "columns" | "columns-2" | "columns-3" | "columns-3-cog" | "columns-4" | "columns-settings" | "combine" | "command" | "compass" | "component" | "computer" | "concierge-bell" | "cone" | "construction" | "contact" | "contact-2" | "contact-round" | "container" | "contrast" | "cookie" | "cooking-pot" | "copy" | "copy-check" | "copy-minus" | "copy-plus" | "copy-slash" | "copy-x" | "copyleft" | "copyright" | "corner-down-left" | "corner-down-right" | "corner-left-down" | "corner-left-up" | "corner-right-down" | "corner-right-up" | "corner-up-left" | "corner-up-right" | "cpu" | "creative-commons" | "credit-card" | "croissant" | "crop" | "cross" | "crosshair" | "crown" | "cuboid" | "cup-soda" | "curly-braces" | "currency" | "cylinder" | "dam" | "database" | "database-backup" | "database-search" | "database-zap" | "decimals-arrow-left" | "decimals-arrow-right" | "delete" | "dessert" | "diameter" | "diamond" | "diamond-minus" | "diamond-percent" | "diamond-plus" | "dice-1" | "dice-2" | "dice-3" | "dice-4" | "dice-5" | "dice-6" | "dices" | "diff" | "disc" | "disc-2" | "disc-3" | "disc-album" | "divide" | "divide-circle" | "divide-square" | "dna" | "dna-off" | "dock" | "dog" | "dollar-sign" | "donut" | "door-closed" | "door-closed-locked" | "door-open" | "dot" | "dot-square" | "download" | "download-cloud" | "drafting-compass" | "drama" | "dribbble" | "drill" | "drone" | "droplet" | "droplet-off" | "droplets" | "drum" | "drumstick" | "dumbbell" | "ear" | "ear-off" | "earth" | "earth-lock" | "eclipse" | "edit" | "edit-2" | "edit-3" | "egg" | "egg-fried" | "egg-off" | "ellipse" | "ellipsis" | "ellipsis-vertical" | "equal" | "equal-approximately" | "equal-not" | "equal-square" | "eraser" | "ethernet-port" | "euro" | "ev-charger" | "expand" | "external-link" | "eye" | "eye-closed" | "eye-off" | "facebook" | "factory" | "fan" | "fast-forward" | "feather" | "fence" | "ferris-wheel" | "figma" | "file" | "file-archive" | "file-audio" | "file-audio-2" | "file-axis-3-d" | "file-axis-3d" | "file-badge" | "file-badge-2" | "file-bar-chart" | "file-bar-chart-2" | "file-box" | "file-braces" | "file-braces-corner" | "file-chart-column" | "file-chart-column-increasing" | "file-chart-line" | "file-chart-pie" | "file-check" | "file-check-2" | "file-check-corner" | "file-clock" | "file-code" | "file-code-2" | "file-code-corner" | "file-cog" | "file-cog-2" | "file-diff" | "file-digit" | "file-down" | "file-edit" | "file-exclamation-point" | "file-headphone" | "file-heart" | "file-image" | "file-input" | "file-json" | "file-json-2" | "file-key" | "file-key-2" | "file-line-chart" | "file-lock" | "file-lock-2" | "file-minus" | "file-minus-2" | "file-minus-corner" | "file-music" | "file-output" | "file-pen" | "file-pen-line" | "file-pie-chart" | "file-play" | "file-plus" | "file-plus-2" | "file-plus-corner" | "file-question" | "file-question-mark" | "file-scan" | "file-search" | "file-search-2" | "file-search-corner" | "file-signal" | "file-signature" | "file-sliders" | "file-spreadsheet" | "file-stack" | "file-symlink" | "file-terminal" | "file-text" | "file-type" | "file-type-2" | "file-type-corner" | "file-up" | "file-user" | "file-video" | "file-video-2" | "file-video-camera" | "file-volume" | "file-volume-2" | "file-warning" | "file-x" | "file-x-2" | "file-x-corner" | "files" | "film" | "filter" | "filter-x" | "fingerprint" | "fingerprint-pattern" | "fire-extinguisher" | "fish" | "fish-off" | "fish-symbol" | "fishing-hook" | "fishing-rod" | "flag" | "flag-off" | "flag-triangle-left" | "flag-triangle-right" | "flame" | "flame-kindling" | "flashlight" | "flashlight-off" | "flask-conical" | "flask-conical-off" | "flask-round" | "flip-horizontal" | "flip-horizontal-2" | "flip-vertical" | "flip-vertical-2" | "flower" | "flower-2" | "focus" | "fold-horizontal" | "fold-vertical" | "folder" | "folder-archive" | "folder-check" | "folder-clock" | "folder-closed" | "folder-code" | "folder-cog" | "folder-cog-2" | "folder-dot" | "folder-down" | "folder-edit" | "folder-git" | "folder-git-2" | "folder-heart" | "folder-input" | "folder-kanban" | "folder-key" | "folder-lock" | "folder-minus" | "folder-open" | "folder-open-dot" | "folder-output" | "folder-pen" | "folder-plus" | "folder-root" | "folder-search" | "folder-search-2" | "folder-symlink" | "folder-sync" | "folder-tree" | "folder-up" | "folder-x" | "folders" | "footprints" | "fork-knife" | "fork-knife-crossed" | "forklift" | "form" | "form-input" | "forward" | "frame" | "framer" | "frown" | "fuel" | "fullscreen" | "function-square" | "funnel" | "funnel-plus" | "funnel-x" | "gallery-horizontal" | "gallery-horizontal-end" | "gallery-thumbnails" | "gallery-vertical" | "gallery-vertical-end" | "gamepad" | "gamepad-2" | "gamepad-directional" | "gantt-chart" | "gantt-chart-square" | "gauge" | "gauge-circle" | "gavel" | "gem" | "georgian-lari" | "ghost" | "gift" | "git-branch" | "git-branch-minus" | "git-branch-plus" | "git-commit" | "git-commit-horizontal" | "git-commit-vertical" | "git-compare" | "git-compare-arrows" | "git-fork" | "git-graph" | "git-merge" | "git-merge-conflict" | "git-pull-request" | "git-pull-request-arrow" | "git-pull-request-closed" | "git-pull-request-create" | "git-pull-request-create-arrow" | "git-pull-request-draft" | "github" | "gitlab" | "glass-water" | "glasses" | "globe" | "globe-2" | "globe-lock" | "globe-off" | "globe-x" | "goal" | "gpu" | "grab" | "graduation-cap" | "grape" | "grid" | "grid-2-x-2" | "grid-2-x-2-check" | "grid-2-x-2-plus" | "grid-2-x-2-x" | "grid-2x2" | "grid-2x2-check" | "grid-2x2-plus" | "grid-2x2-x" | "grid-3-x-3" | "grid-3x2" | "grid-3x3" | "grip" | "grip-horizontal" | "grip-vertical" | "group" | "guitar" | "ham" | "hamburger" | "hammer" | "hand" | "hand-coins" | "hand-fist" | "hand-grab" | "hand-heart" | "hand-helping" | "hand-metal" | "hand-platter" | "handbag" | "handshake" | "hard-drive" | "hard-drive-download" | "hard-drive-upload" | "hard-hat" | "hash" | "hat-glasses" | "haze" | "hd" | "hdmi-port" | "heading" | "heading-1" | "heading-2" | "heading-3" | "heading-4" | "heading-5" | "heading-6" | "headphone-off" | "headphones" | "headset" | "heart" | "heart-crack" | "heart-handshake" | "heart-minus" | "heart-off" | "heart-plus" | "heart-pulse" | "heater" | "helicopter" | "help-circle" | "helping-hand" | "hexagon" | "highlighter" | "history" | "home" | "hop" | "hop-off" | "hospital" | "hotel" | "hourglass" | "house" | "house-heart" | "house-plug" | "house-plus" | "house-wifi" | "ice-cream" | "ice-cream-2" | "ice-cream-bowl" | "ice-cream-cone" | "id-card" | "id-card-lanyard" | "image" | "image-down" | "image-minus" | "image-off" | "image-play" | "image-plus" | "image-up" | "image-upscale" | "images" | "import" | "inbox" | "indent" | "indent-decrease" | "indent-increase" | "indian-rupee" | "infinity" | "info" | "inspect" | "inspection-panel" | "instagram" | "italic" | "iteration-ccw" | "iteration-cw" | "japanese-yen" | "joystick" | "kanban" | "kanban-square" | "kanban-square-dashed" | "kayak" | "key" | "key-round" | "key-square" | "keyboard" | "keyboard-music" | "keyboard-off" | "lamp" | "lamp-ceiling" | "lamp-desk" | "lamp-floor" | "lamp-wall-down" | "lamp-wall-up" | "land-plot" | "landmark" | "languages" | "laptop" | "laptop-2" | "laptop-minimal" | "laptop-minimal-check" | "lasso" | "lasso-select" | "laugh" | "layers" | "layers-2" | "layers-3" | "layers-plus" | "layout" | "layout-dashboard" | "layout-grid" | "layout-list" | "layout-panel-left" | "layout-panel-top" | "layout-template" | "leaf" | "leafy-green" | "lectern" | "lens-concave" | "lens-convex" | "letter-text" | "library" | "library-big" | "library-square" | "life-buoy" | "ligature" | "lightbulb" | "lightbulb-off" | "line-chart" | "line-dot-right-horizontal" | "line-squiggle" | "link" | "link-2" | "link-2-off" | "linkedin" | "list" | "list-check" | "list-checks" | "list-chevrons-down-up" | "list-chevrons-up-down" | "list-collapse" | "list-end" | "list-filter" | "list-filter-plus" | "list-indent-decrease" | "list-indent-increase" | "list-minus" | "list-music" | "list-ordered" | "list-plus" | "list-restart" | "list-start" | "list-todo" | "list-tree" | "list-video" | "list-x" | "loader" | "loader-2" | "loader-circle" | "loader-pinwheel" | "locate" | "locate-fixed" | "locate-off" | "location-edit" | "lock" | "lock-keyhole" | "lock-keyhole-open" | "lock-open" | "log-in" | "log-out" | "logs" | "lollipop" | "luggage" | "m-square" | "magnet" | "mail" | "mail-check" | "mail-minus" | "mail-open" | "mail-plus" | "mail-question" | "mail-question-mark" | "mail-search" | "mail-warning" | "mail-x" | "mailbox" | "mails" | "map" | "map-minus" | "map-pin" | "map-pin-check" | "map-pin-check-inside" | "map-pin-house" | "map-pin-minus" | "map-pin-minus-inside" | "map-pin-off" | "map-pin-pen" | "map-pin-plus" | "map-pin-plus-inside" | "map-pin-x" | "map-pin-x-inside" | "map-pinned" | "map-plus" | "mars" | "mars-stroke" | "martini" | "maximize" | "maximize-2" | "medal" | "megaphone" | "megaphone-off" | "meh" | "memory-stick" | "menu" | "menu-square" | "merge" | "message-circle" | "message-circle-check" | "message-circle-code" | "message-circle-dashed" | "message-circle-heart" | "message-circle-more" | "message-circle-off" | "message-circle-plus" | "message-circle-question" | "message-circle-question-mark" | "message-circle-reply" | "message-circle-warning" | "message-circle-x" | "message-square" | "message-square-check" | "message-square-code" | "message-square-dashed" | "message-square-diff" | "message-square-dot" | "message-square-heart" | "message-square-lock" | "message-square-more" | "message-square-off" | "message-square-plus" | "message-square-quote" | "message-square-reply" | "message-square-share" | "message-square-text" | "message-square-warning" | "message-square-x" | "messages-square" | "metronome" | "mic" | "mic-2" | "mic-off" | "mic-vocal" | "microchip" | "microscope" | "microwave" | "milestone" | "milk" | "milk-off" | "minimize" | "minimize-2" | "minus" | "minus-circle" | "minus-square" | "mirror-rectangular" | "mirror-round" | "monitor" | "monitor-check" | "monitor-cloud" | "monitor-cog" | "monitor-dot" | "monitor-down" | "monitor-off" | "monitor-pause" | "monitor-play" | "monitor-smartphone" | "monitor-speaker" | "monitor-stop" | "monitor-up" | "monitor-x" | "moon" | "moon-star" | "more-horizontal" | "more-vertical" | "motorbike" | "mountain" | "mountain-snow" | "mouse" | "mouse-left" | "mouse-off" | "mouse-pointer" | "mouse-pointer-2" | "mouse-pointer-2-off" | "mouse-pointer-ban" | "mouse-pointer-click" | "mouse-pointer-square-dashed" | "mouse-right" | "move" | "move-3-d" | "move-3d" | "move-diagonal" | "move-diagonal-2" | "move-down" | "move-down-left" | "move-down-right" | "move-horizontal" | "move-left" | "move-right" | "move-up" | "move-up-left" | "move-up-right" | "move-vertical" | "music" | "music-2" | "music-3" | "music-4" | "navigation" | "navigation-2" | "navigation-2-off" | "navigation-off" | "network" | "newspaper" | "nfc" | "non-binary" | "notebook" | "notebook-pen" | "notebook-tabs" | "notebook-text" | "notepad-text" | "notepad-text-dashed" | "nut" | "nut-off" | "octagon" | "octagon-alert" | "octagon-minus" | "octagon-pause" | "octagon-x" | "omega" | "option" | "orbit" | "origami" | "outdent" | "package" | "package-2" | "package-check" | "package-minus" | "package-open" | "package-plus" | "package-search" | "package-x" | "paint-bucket" | "paint-roller" | "paintbrush" | "paintbrush-2" | "paintbrush-vertical" | "palette" | "palmtree" | "panda" | "panel-bottom" | "panel-bottom-close" | "panel-bottom-dashed" | "panel-bottom-inactive" | "panel-bottom-open" | "panel-left" | "panel-left-close" | "panel-left-dashed" | "panel-left-inactive" | "panel-left-open" | "panel-left-right-dashed" | "panel-right" | "panel-right-close" | "panel-right-dashed" | "panel-right-inactive" | "panel-right-open" | "panel-top" | "panel-top-bottom-dashed" | "panel-top-close" | "panel-top-dashed" | "panel-top-inactive" | "panel-top-open" | "panels-left-bottom" | "panels-left-right" | "panels-right-bottom" | "panels-top-bottom" | "panels-top-left" | "paperclip" | "parentheses" | "parking-circle" | "parking-circle-off" | "parking-meter" | "parking-square" | "parking-square-off" | "party-popper" | "pause" | "pause-circle" | "pause-octagon" | "paw-print" | "pc-case" | "pen" | "pen-box" | "pen-line" | "pen-off" | "pen-square" | "pen-tool" | "pencil" | "pencil-line" | "pencil-off" | "pencil-ruler" | "pentagon" | "percent" | "percent-circle" | "percent-diamond" | "percent-square" | "person-standing" | "philippine-peso" | "phone" | "phone-call" | "phone-forwarded" | "phone-incoming" | "phone-missed" | "phone-off" | "phone-outgoing" | "pi" | "pi-square" | "piano" | "pickaxe" | "picture-in-picture" | "picture-in-picture-2" | "pie-chart" | "piggy-bank" | "pilcrow" | "pilcrow-left" | "pilcrow-right" | "pilcrow-square" | "pill" | "pill-bottle" | "pin" | "pin-off" | "pipette" | "pizza" | "plane" | "plane-landing" | "plane-takeoff" | "play" | "play-circle" | "play-square" | "plug" | "plug-2" | "plug-zap" | "plug-zap-2" | "plus" | "plus-circle" | "plus-square" | "pocket" | "pocket-knife" | "podcast" | "pointer" | "pointer-off" | "popcorn" | "popsicle" | "pound-sterling" | "power" | "power-circle" | "power-off" | "power-square" | "presentation" | "printer" | "printer-check" | "printer-x" | "projector" | "proportions" | "puzzle" | "pyramid" | "qr-code" | "quote" | "rabbit" | "radar" | "radiation" | "radical" | "radio" | "radio-receiver" | "radio-tower" | "radius" | "rail-symbol" | "rainbow" | "rat" | "ratio" | "receipt" | "receipt-cent" | "receipt-euro" | "receipt-indian-rupee" | "receipt-japanese-yen" | "receipt-pound-sterling" | "receipt-russian-ruble" | "receipt-swiss-franc" | "receipt-text" | "receipt-turkish-lira" | "rectangle-circle" | "rectangle-ellipsis" | "rectangle-goggles" | "rectangle-horizontal" | "rectangle-vertical" | "recycle" | "redo" | "redo-2" | "redo-dot" | "refresh-ccw" | "refresh-ccw-dot" | "refresh-cw" | "refresh-cw-off" | "refrigerator" | "regex" | "remove-formatting" | "repeat" | "repeat-1" | "repeat-2" | "replace" | "replace-all" | "reply" | "reply-all" | "rewind" | "ribbon" | "rocket" | "rocking-chair" | "roller-coaster" | "rose" | "rotate-3-d" | "rotate-3d" | "rotate-ccw" | "rotate-ccw-key" | "rotate-ccw-square" | "rotate-cw" | "rotate-cw-square" | "route" | "route-off" | "router" | "rows" | "rows-2" | "rows-3" | "rows-4" | "rss" | "ruler" | "ruler-dimension-line" | "russian-ruble" | "sailboat" | "salad" | "sandwich" | "satellite" | "satellite-dish" | "saudi-riyal" | "save" | "save-all" | "save-off" | "scale" | "scale-3-d" | "scale-3d" | "scaling" | "scan" | "scan-barcode" | "scan-eye" | "scan-face" | "scan-heart" | "scan-line" | "scan-qr-code" | "scan-search" | "scan-text" | "scatter-chart" | "school" | "school-2" | "scissors" | "scissors-line-dashed" | "scissors-square" | "scissors-square-dashed-bottom" | "scooter" | "screen-share" | "screen-share-off" | "scroll" | "scroll-text" | "search" | "search-alert" | "search-check" | "search-code" | "search-slash" | "search-x" | "section" | "send" | "send-horizonal" | "send-horizontal" | "send-to-back" | "separator-horizontal" | "separator-vertical" | "server" | "server-cog" | "server-crash" | "server-off" | "settings" | "settings-2" | "shapes" | "share" | "share-2" | "sheet" | "shell" | "shelving-unit" | "shield" | "shield-alert" | "shield-ban" | "shield-check" | "shield-close" | "shield-ellipsis" | "shield-half" | "shield-minus" | "shield-off" | "shield-plus" | "shield-question" | "shield-question-mark" | "shield-user" | "shield-x" | "ship" | "ship-wheel" | "shirt" | "shopping-bag" | "shopping-basket" | "shopping-cart" | "shovel" | "shower-head" | "shredder" | "shrimp" | "shrink" | "shrub" | "shuffle" | "sidebar" | "sidebar-close" | "sidebar-open" | "sigma" | "sigma-square" | "signal" | "signal-high" | "signal-low" | "signal-medium" | "signal-zero" | "signature" | "signpost" | "signpost-big" | "siren" | "skip-back" | "skip-forward" | "skull" | "slack" | "slash" | "slash-square" | "slice" | "sliders" | "sliders-horizontal" | "sliders-vertical" | "smartphone" | "smartphone-charging" | "smartphone-nfc" | "smile" | "smile-plus" | "snail" | "snowflake" | "soap-dispenser-droplet" | "sofa" | "solar-panel" | "sort-asc" | "sort-desc" | "soup" | "space" | "spade" | "sparkle" | "sparkles" | "speaker" | "speech" | "spell-check" | "spell-check-2" | "spline" | "spline-pointer" | "split" | "split-square-horizontal" | "split-square-vertical" | "spool" | "spotlight" | "spray-can" | "sprout" | "square" | "square-activity" | "square-arrow-down" | "square-arrow-down-left" | "square-arrow-down-right" | "square-arrow-left" | "square-arrow-out-down-left" | "square-arrow-out-down-right" | "square-arrow-out-up-left" | "square-arrow-out-up-right" | "square-arrow-right" | "square-arrow-right-enter" | "square-arrow-right-exit" | "square-arrow-up" | "square-arrow-up-left" | "square-arrow-up-right" | "square-asterisk" | "square-bottom-dashed-scissors" | "square-centerline-dashed-horizontal" | "square-centerline-dashed-vertical" | "square-chart-gantt" | "square-check" | "square-check-big" | "square-chevron-down" | "square-chevron-left" | "square-chevron-right" | "square-chevron-up" | "square-code" | "square-dashed" | "square-dashed-bottom" | "square-dashed-bottom-code" | "square-dashed-kanban" | "square-dashed-mouse-pointer" | "square-dashed-top-solid" | "square-divide" | "square-dot" | "square-equal" | "square-function" | "square-gantt-chart" | "square-kanban" | "square-library" | "square-m" | "square-menu" | "square-minus" | "square-mouse-pointer" | "square-parking" | "square-parking-off" | "square-pause" | "square-pen" | "square-percent" | "square-pi" | "square-pilcrow" | "square-play" | "square-plus" | "square-power" | "square-radical" | "square-round-corner" | "square-scissors" | "square-sigma" | "square-slash" | "square-split-horizontal" | "square-split-vertical" | "square-square" | "square-stack" | "square-star" | "square-stop" | "square-terminal" | "square-user" | "square-user-round" | "square-x" | "squares-exclude" | "squares-intersect" | "squares-subtract" | "squares-unite" | "squircle" | "squircle-dashed" | "squirrel" | "stamp" | "star" | "star-half" | "star-off" | "stars" | "step-back" | "step-forward" | "stethoscope" | "sticker" | "sticky-note" | "stone" | "stop-circle" | "store" | "stretch-horizontal" | "stretch-vertical" | "strikethrough" | "subscript" | "subtitles" | "sun" | "sun-dim" | "sun-medium" | "sun-moon" | "sun-snow" | "sunrise" | "sunset" | "superscript" | "swatch-book" | "swiss-franc" | "switch-camera" | "sword" | "swords" | "syringe" | "table" | "table-2" | "table-cells-merge" | "table-cells-split" | "table-columns-split" | "table-config" | "table-of-contents" | "table-properties" | "table-rows-split" | "tablet" | "tablet-smartphone" | "tablets" | "tag" | "tags" | "tally-1" | "tally-2" | "tally-3" | "tally-4" | "tally-5" | "tangent" | "target" | "telescope" | "tent" | "tent-tree" | "terminal" | "terminal-square" | "test-tube" | "test-tube-2" | "test-tube-diagonal" | "test-tubes" | "text" | "text-align-center" | "text-align-end" | "text-align-justify" | "text-align-start" | "text-cursor" | "text-cursor-input" | "text-initial" | "text-quote" | "text-search" | "text-select" | "text-selection" | "text-wrap" | "theater" | "thermometer" | "thermometer-snowflake" | "thermometer-sun" | "thumbs-down" | "thumbs-up" | "ticket" | "ticket-check" | "ticket-minus" | "ticket-percent" | "ticket-plus" | "ticket-slash" | "ticket-x" | "tickets" | "tickets-plane" | "timer" | "timer-off" | "timer-reset" | "toggle-left" | "toggle-right" | "toilet" | "tool-case" | "toolbox" | "tornado" | "torus" | "touchpad" | "touchpad-off" | "towel-rack" | "tower-control" | "toy-brick" | "tractor" | "traffic-cone" | "train" | "train-front" | "train-front-tunnel" | "train-track" | "tram-front" | "transgender" | "trash" | "trash-2" | "tree-deciduous" | "tree-palm" | "tree-pine" | "trees" | "trello" | "trending-down" | "trending-up" | "trending-up-down" | "triangle" | "triangle-alert" | "triangle-dashed" | "triangle-right" | "trophy" | "truck" | "truck-electric" | "turkish-lira" | "turntable" | "turtle" | "tv" | "tv-2" | "tv-minimal" | "tv-minimal-play" | "twitch" | "twitter" | "type" | "type-outline" | "umbrella" | "umbrella-off" | "underline" | "undo" | "undo-2" | "undo-dot" | "unfold-horizontal" | "unfold-vertical" | "ungroup" | "university" | "unlink" | "unlink-2" | "unlock" | "unlock-keyhole" | "unplug" | "upload" | "upload-cloud" | "usb" | "user" | "user-2" | "user-check" | "user-check-2" | "user-circle" | "user-circle-2" | "user-cog" | "user-cog-2" | "user-key" | "user-lock" | "user-minus" | "user-minus-2" | "user-pen" | "user-plus" | "user-plus-2" | "user-round" | "user-round-check" | "user-round-cog" | "user-round-key" | "user-round-minus" | "user-round-pen" | "user-round-plus" | "user-round-search" | "user-round-x" | "user-search" | "user-square" | "user-square-2" | "user-star" | "user-x" | "user-x-2" | "users" | "users-2" | "users-round" | "utensils" | "utensils-crossed" | "utility-pole" | "van" | "variable" | "vault" | "vector-square" | "vegan" | "venetian-mask" | "venus" | "venus-and-mars" | "verified" | "vibrate" | "vibrate-off" | "video" | "video-off" | "videotape" | "view" | "voicemail" | "volleyball" | "volume" | "volume-1" | "volume-2" | "volume-off" | "volume-x" | "vote" | "wallet" | "wallet-2" | "wallet-cards" | "wallet-minimal" | "wallpaper" | "wand" | "wand-2" | "wand-sparkles" | "warehouse" | "washing-machine" | "watch" | "waves" | "waves-arrow-down" | "waves-arrow-up" | "waves-ladder" | "waypoints" | "webcam" | "webhook" | "webhook-off" | "weight" | "weight-tilde" | "wheat" | "wheat-off" | "whole-word" | "wifi" | "wifi-cog" | "wifi-high" | "wifi-low" | "wifi-off" | "wifi-pen" | "wifi-sync" | "wifi-zero" | "wind" | "wind-arrow-down" | "wine" | "wine-off" | "workflow" | "worm" | "wrap-text" | "wrench" | "x" | "x-circle" | "x-line-top" | "x-octagon" | "x-square" | "youtube" | "zap" | "zap-off" | "zodiac-aquarius" | "zodiac-aries" | "zodiac-cancer" | "zodiac-capricorn" | "zodiac-gemini" | "zodiac-leo" | "zodiac-libra" | "zodiac-ophiuchus" | "zodiac-pisces" | "zodiac-sagittarius" | "zodiac-scorpio" | "zodiac-taurus" | "zodiac-virgo" | "zoom-in" | "zoom-out")
|
|
2
|
-
export type
|
|
3
|
-
export type _Schema4 = (
|
|
2
|
+
export type _Schema2 = (("auth" | "anon" | "always" | "hide") | unknown)
|
|
3
|
+
export type _Schema4 = ("start" | "center" | "end")
|
|
4
|
+
export type _Schema5 = ((string | {
|
|
4
5
|
type: "doc"
|
|
5
6
|
file: string
|
|
6
7
|
path?: string
|
|
7
|
-
icon?:
|
|
8
|
+
icon?: _Schema6
|
|
8
9
|
label?: string
|
|
9
|
-
badge?:
|
|
10
|
-
display?:
|
|
10
|
+
badge?: _Schema7
|
|
11
|
+
display?: _Schema2
|
|
11
12
|
}) | {
|
|
12
13
|
type: "link"
|
|
13
14
|
to: string
|
|
14
15
|
label: string
|
|
15
16
|
target?: ("_self" | "_blank")
|
|
16
|
-
icon?:
|
|
17
|
-
badge?:
|
|
18
|
-
display?:
|
|
17
|
+
icon?: _Schema6
|
|
18
|
+
badge?: _Schema7
|
|
19
|
+
display?: _Schema2
|
|
19
20
|
} | {
|
|
20
21
|
type: "custom-page"
|
|
21
22
|
path: string
|
|
22
23
|
label?: string
|
|
23
24
|
element: unknown
|
|
24
|
-
icon?:
|
|
25
|
-
badge?:
|
|
26
|
-
display?:
|
|
25
|
+
icon?: _Schema6
|
|
26
|
+
badge?: _Schema7
|
|
27
|
+
display?: _Schema2
|
|
27
28
|
layout?: ("default" | "none")
|
|
28
29
|
} | {
|
|
29
30
|
type: "separator"
|
|
30
|
-
display?:
|
|
31
|
+
display?: _Schema2
|
|
31
32
|
} | {
|
|
32
33
|
type: "section"
|
|
33
34
|
label: string
|
|
34
|
-
display?:
|
|
35
|
+
display?: _Schema2
|
|
35
36
|
} | {
|
|
36
37
|
type: "filter"
|
|
37
38
|
placeholder?: string
|
|
38
|
-
display?:
|
|
39
|
+
display?: _Schema2
|
|
39
40
|
} | {
|
|
40
41
|
type: "category"
|
|
41
|
-
icon?:
|
|
42
|
+
icon?: _Schema6
|
|
42
43
|
label: string
|
|
43
44
|
collapsible?: boolean
|
|
44
45
|
collapsed?: boolean
|
|
@@ -48,11 +49,10 @@ export type _Schema4 = ((string | {
|
|
|
48
49
|
label?: string
|
|
49
50
|
path?: string
|
|
50
51
|
})
|
|
51
|
-
display?:
|
|
52
|
-
items:
|
|
52
|
+
display?: _Schema2
|
|
53
|
+
items: _Schema5[]
|
|
53
54
|
})
|
|
54
|
-
export type
|
|
55
|
-
export type _Schema7 = (("auth" | "anon" | "always" | "hide") | unknown)
|
|
55
|
+
export type _Schema6 = unknown
|
|
56
56
|
export type _Schema9 = (("Inter" | "Roboto" | "Open Sans" | "Poppins" | "Montserrat" | "Outfit" | "Plus Jakarta Sans" | "DM Sans" | "IBM Plex Sans" | "Geist" | "Oxanium" | "Architects Daughter" | "Merriweather" | "Playfair Display" | "Lora" | "Source Serif Pro" | "Libre Baskerville" | "Space Grotesk" | "JetBrains Mono" | "Fira Code" | "Source Code Pro" | "IBM Plex Mono" | "Roboto Mono" | "Space Mono" | "Geist Mono") | {
|
|
57
57
|
url: string
|
|
58
58
|
fontFamily?: string
|
|
@@ -158,36 +158,37 @@ export interface FlatZudokuConfig {
|
|
|
158
158
|
icon?: _Schema1
|
|
159
159
|
to: string
|
|
160
160
|
target?: ("_self" | "_blank")
|
|
161
|
+
display?: _Schema2
|
|
161
162
|
} | {
|
|
162
163
|
label: string
|
|
163
|
-
items: (
|
|
164
|
+
items: (_Schema3 | {
|
|
164
165
|
label: string
|
|
165
|
-
items:
|
|
166
|
+
items: _Schema3[]
|
|
166
167
|
})[]
|
|
167
168
|
})[]
|
|
168
169
|
placements?: {
|
|
169
|
-
navigation?:
|
|
170
|
-
search?:
|
|
170
|
+
navigation?: _Schema4
|
|
171
|
+
search?: _Schema4
|
|
171
172
|
auth?: ("start" | "center" | "end" | "navigation")
|
|
172
173
|
}
|
|
173
174
|
}
|
|
174
|
-
navigation?:
|
|
175
|
+
navigation?: _Schema5[]
|
|
175
176
|
navigationRules?: ({
|
|
176
177
|
type: "modify"
|
|
177
178
|
match: string
|
|
178
179
|
set: {
|
|
179
180
|
label?: string
|
|
180
|
-
icon?:
|
|
181
|
-
badge?:
|
|
181
|
+
icon?: _Schema6
|
|
182
|
+
badge?: _Schema7
|
|
182
183
|
collapsed?: boolean
|
|
183
184
|
collapsible?: boolean
|
|
184
|
-
display?:
|
|
185
|
+
display?: _Schema2
|
|
185
186
|
}
|
|
186
187
|
} | {
|
|
187
188
|
type: "insert"
|
|
188
189
|
match: string
|
|
189
190
|
position: ("before" | "after")
|
|
190
|
-
items:
|
|
191
|
+
items: _Schema5[]
|
|
191
192
|
} | {
|
|
192
193
|
type: "remove"
|
|
193
194
|
match: string
|
|
@@ -412,14 +413,15 @@ export interface _Schema0 {
|
|
|
412
413
|
href?: string
|
|
413
414
|
reloadDocument?: boolean
|
|
414
415
|
}
|
|
415
|
-
export interface
|
|
416
|
+
export interface _Schema3 {
|
|
416
417
|
label: string
|
|
417
418
|
icon?: _Schema1
|
|
418
419
|
description?: string
|
|
419
420
|
to: string
|
|
420
421
|
target?: ("_self" | "_blank")
|
|
422
|
+
display?: _Schema2
|
|
421
423
|
}
|
|
422
|
-
export interface
|
|
424
|
+
export interface _Schema7 {
|
|
423
425
|
label: string
|
|
424
426
|
color: ("green" | "blue" | "yellow" | "red" | "purple" | "indigo" | "gray" | "outline")
|
|
425
427
|
invert?: boolean
|
package/package.json
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { IconNames } from "./icon-types.js";
|
|
3
|
+
import { DisplaySchema } from "./InputNavigationSchema.js";
|
|
3
4
|
|
|
4
5
|
const IconSchema = z.enum(IconNames);
|
|
5
6
|
|
|
@@ -9,6 +10,7 @@ const HeaderNavLinkItemSchema = z.object({
|
|
|
9
10
|
description: z.string().optional(),
|
|
10
11
|
to: z.string(),
|
|
11
12
|
target: z.enum(["_self", "_blank"]).optional(),
|
|
13
|
+
display: DisplaySchema,
|
|
12
14
|
});
|
|
13
15
|
|
|
14
16
|
const HeaderNavGroupSchema = z.object({
|
|
@@ -22,6 +24,7 @@ const HeaderNavItemSchema = z.union([
|
|
|
22
24
|
icon: IconSchema.optional(),
|
|
23
25
|
to: z.string(),
|
|
24
26
|
target: z.enum(["_self", "_blank"]).optional(),
|
|
27
|
+
display: DisplaySchema,
|
|
25
28
|
}),
|
|
26
29
|
z.object({
|
|
27
30
|
label: z.string(),
|
|
@@ -94,13 +94,50 @@ export async function probeDevPortalBackend(
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
+
function readOptionalString(...values: unknown[]): string | undefined {
|
|
98
|
+
for (const value of values) {
|
|
99
|
+
if (typeof value === "string" && value.trim()) {
|
|
100
|
+
return value.trim();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function readOptionalBoolean(...values: unknown[]): boolean | undefined {
|
|
108
|
+
for (const value of values) {
|
|
109
|
+
if (typeof value === "boolean") {
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (value === "true" || value === "True") {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (value === "false" || value === "False") {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
|
|
97
125
|
export function mapEndUserMeToProfile(
|
|
98
126
|
me: EndUserMeResponse,
|
|
99
127
|
): import("../state.js").UserProfile {
|
|
128
|
+
const raw = me as EndUserMeResponse & Record<string, unknown>;
|
|
129
|
+
const email = readOptionalString(raw.email, raw.Email, raw.emailAddress);
|
|
130
|
+
const emailVerified =
|
|
131
|
+
readOptionalBoolean(
|
|
132
|
+
raw.emailVerified,
|
|
133
|
+
raw.EmailVerified,
|
|
134
|
+
raw.email_verified,
|
|
135
|
+
) ?? (email != null ? true : false);
|
|
136
|
+
|
|
100
137
|
return {
|
|
101
138
|
sub: me.userId,
|
|
102
|
-
email
|
|
103
|
-
emailVerified
|
|
139
|
+
email,
|
|
140
|
+
emailVerified,
|
|
104
141
|
name: me.displayName ?? undefined,
|
|
105
142
|
pictureUrl: undefined,
|
|
106
143
|
};
|
|
@@ -45,7 +45,6 @@ export class DevPortalAuthenticationProvider
|
|
|
45
45
|
private readonly redirectToAfterSignIn: string | undefined;
|
|
46
46
|
private readonly redirectToAfterSignUp: string | undefined;
|
|
47
47
|
private readonly redirectToAfterSignOut: string;
|
|
48
|
-
private authMode: DevPortalAuthMode = "preview";
|
|
49
48
|
private backendAvailable = false;
|
|
50
49
|
private refreshGeneration = 0;
|
|
51
50
|
private refreshInFlight: Promise<boolean> | null = null;
|
|
@@ -97,18 +96,17 @@ export class DevPortalAuthenticationProvider
|
|
|
97
96
|
private async syncBackendAvailability(): Promise<void> {
|
|
98
97
|
if (!this.apiBaseUrl || isPlaceholderDevPortalApiUrl(this.apiBaseUrl)) {
|
|
99
98
|
this.backendAvailable = false;
|
|
100
|
-
this.authMode = "preview";
|
|
101
99
|
return;
|
|
102
100
|
}
|
|
103
101
|
|
|
104
102
|
this.backendAvailable = await probeDevPortalBackend(this.apiBaseUrl);
|
|
105
|
-
this.authMode = this.backendAvailable ? "live" : "preview";
|
|
106
103
|
}
|
|
107
104
|
|
|
108
105
|
private setPreviewState(): void {
|
|
109
106
|
useAuthState.setState({
|
|
110
107
|
isAuthenticated: false,
|
|
111
108
|
isPending: false,
|
|
109
|
+
sessionChecked: true,
|
|
112
110
|
profile: null,
|
|
113
111
|
providerData: this.apiBaseUrl
|
|
114
112
|
? {
|
|
@@ -122,8 +120,8 @@ export class DevPortalAuthenticationProvider
|
|
|
122
120
|
});
|
|
123
121
|
}
|
|
124
122
|
|
|
125
|
-
private
|
|
126
|
-
if (!this.apiBaseUrl ||
|
|
123
|
+
private ensureConfiguredBackend(): string {
|
|
124
|
+
if (!this.apiBaseUrl || isPlaceholderDevPortalApiUrl(this.apiBaseUrl)) {
|
|
127
125
|
throw new Error("Dev portal authentication is not available in preview.");
|
|
128
126
|
}
|
|
129
127
|
|
|
@@ -184,6 +182,7 @@ export class DevPortalAuthenticationProvider
|
|
|
184
182
|
useAuthState.setState({
|
|
185
183
|
isAuthenticated: false,
|
|
186
184
|
isPending: false,
|
|
185
|
+
sessionChecked: true,
|
|
187
186
|
profile: null,
|
|
188
187
|
providerData: {
|
|
189
188
|
type: "dev-portal",
|
|
@@ -211,6 +210,7 @@ export class DevPortalAuthenticationProvider
|
|
|
211
210
|
useAuthState.setState({
|
|
212
211
|
isAuthenticated: true,
|
|
213
212
|
isPending: false,
|
|
213
|
+
sessionChecked: true,
|
|
214
214
|
profile,
|
|
215
215
|
providerData: {
|
|
216
216
|
type: "dev-portal",
|
|
@@ -235,7 +235,7 @@ export class DevPortalAuthenticationProvider
|
|
|
235
235
|
_: AuthActionContext,
|
|
236
236
|
{ redirectTo }: AuthActionOptions = {},
|
|
237
237
|
): Promise<void> {
|
|
238
|
-
const apiBaseUrl = this.
|
|
238
|
+
const apiBaseUrl = this.ensureConfiguredBackend();
|
|
239
239
|
const target =
|
|
240
240
|
redirectTo ?? this.redirectToAfterSignIn ?? window.location.href;
|
|
241
241
|
window.location.assign(buildDevPortalLoginUrl(apiBaseUrl, target));
|
|
@@ -245,14 +245,14 @@ export class DevPortalAuthenticationProvider
|
|
|
245
245
|
_: AuthActionContext,
|
|
246
246
|
{ redirectTo }: AuthActionOptions = {},
|
|
247
247
|
): Promise<void> {
|
|
248
|
-
const apiBaseUrl = this.
|
|
248
|
+
const apiBaseUrl = this.ensureConfiguredBackend();
|
|
249
249
|
const target =
|
|
250
250
|
redirectTo ?? this.redirectToAfterSignUp ?? window.location.href;
|
|
251
251
|
window.location.assign(buildDevPortalLoginUrl(apiBaseUrl, target));
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
async signOut(_: AuthActionContext): Promise<void> {
|
|
255
|
-
const apiBaseUrl = this.
|
|
255
|
+
const apiBaseUrl = this.ensureConfiguredBackend();
|
|
256
256
|
window.location.assign(
|
|
257
257
|
buildDevPortalLogoutUrl(apiBaseUrl, this.redirectToAfterSignOut),
|
|
258
258
|
);
|
|
@@ -26,6 +26,8 @@ export type AuthMode = "live" | "preview";
|
|
|
26
26
|
export interface AuthState {
|
|
27
27
|
isAuthenticated: boolean;
|
|
28
28
|
isPending: boolean;
|
|
29
|
+
/** True after the auth provider has finished its first session probe on load. */
|
|
30
|
+
sessionChecked: boolean;
|
|
29
31
|
profile: UserProfile | null;
|
|
30
32
|
providerData: ProviderData | null;
|
|
31
33
|
/** False when dev-portal backend is unavailable (local preview). Defaults true. */
|
|
@@ -57,6 +59,7 @@ function createAuthStateStore(): AuthStateStore {
|
|
|
57
59
|
(set) => ({
|
|
58
60
|
isAuthenticated: false,
|
|
59
61
|
isPending: true,
|
|
62
|
+
sessionChecked: false,
|
|
60
63
|
profile: null,
|
|
61
64
|
providerData: null,
|
|
62
65
|
isBackendAvailable: true,
|
|
@@ -65,6 +68,7 @@ function createAuthStateStore(): AuthStateStore {
|
|
|
65
68
|
set(() => ({
|
|
66
69
|
isAuthenticated: false,
|
|
67
70
|
isPending: false,
|
|
71
|
+
sessionChecked: true,
|
|
68
72
|
profile: null,
|
|
69
73
|
providerData: null,
|
|
70
74
|
isBackendAvailable: true,
|
|
@@ -74,6 +78,7 @@ function createAuthStateStore(): AuthStateStore {
|
|
|
74
78
|
set(() => ({
|
|
75
79
|
isAuthenticated: false,
|
|
76
80
|
isPending: false,
|
|
81
|
+
sessionChecked: true,
|
|
77
82
|
profile: null,
|
|
78
83
|
providerData: null,
|
|
79
84
|
isBackendAvailable: true,
|
|
@@ -83,6 +88,7 @@ function createAuthStateStore(): AuthStateStore {
|
|
|
83
88
|
set(() => ({
|
|
84
89
|
isAuthenticated: true,
|
|
85
90
|
isPending: false,
|
|
91
|
+
sessionChecked: true,
|
|
86
92
|
profile,
|
|
87
93
|
providerData,
|
|
88
94
|
})),
|
|
@@ -113,9 +119,11 @@ function createAuthStateStore(): AuthStateStore {
|
|
|
113
119
|
|
|
114
120
|
// Cookie/session auth is refreshed from the backend on load. Do not
|
|
115
121
|
// restore identity fields from localStorage or OIDC return looks logged out.
|
|
122
|
+
// Keep isPending true until the auth provider finishes /auth/me (or equivalent).
|
|
116
123
|
return {
|
|
117
124
|
...currentState,
|
|
118
|
-
isPending:
|
|
125
|
+
isPending: true,
|
|
126
|
+
sessionChecked: false,
|
|
119
127
|
isAuthenticated: currentState.isAuthenticated,
|
|
120
128
|
profile: currentState.profile,
|
|
121
129
|
providerData: currentState.providerData,
|
|
@@ -73,15 +73,9 @@ const ProfileMenu = () => {
|
|
|
73
73
|
const context = useZudoku();
|
|
74
74
|
const profileItems = context.getProfileMenuItems();
|
|
75
75
|
const auth = useAuth();
|
|
76
|
-
const {
|
|
77
|
-
isAuthEnabled,
|
|
78
|
-
isAuthenticated,
|
|
79
|
-
isPending,
|
|
80
|
-
profile,
|
|
81
|
-
isBackendAvailable,
|
|
82
|
-
} = auth;
|
|
76
|
+
const { isAuthEnabled, isAuthenticated, isPending, profile } = auth;
|
|
83
77
|
|
|
84
|
-
if (!isAuthEnabled
|
|
78
|
+
if (!isAuthEnabled) return null;
|
|
85
79
|
|
|
86
80
|
return (
|
|
87
81
|
<ClientOnly fallback={<Skeleton className="rounded-sm h-5 w-24 mr-4" />}>
|
|
@@ -6,6 +6,8 @@ import {
|
|
|
6
6
|
type HeaderNavItem,
|
|
7
7
|
type HeaderNavLinkItem,
|
|
8
8
|
} from "../../config/validators/HeaderNavigationSchema.js";
|
|
9
|
+
import { useAuth } from "../authentication/hook.js";
|
|
10
|
+
import type { ZudokuContext } from "../core/ZudokuContext.js";
|
|
9
11
|
import {
|
|
10
12
|
NavigationMenu,
|
|
11
13
|
NavigationMenuContent,
|
|
@@ -17,6 +19,7 @@ import {
|
|
|
17
19
|
} from "../ui/NavigationMenu.js";
|
|
18
20
|
import { cn } from "../util/cn.js";
|
|
19
21
|
import { useZudoku } from "./context/ZudokuContext.js";
|
|
22
|
+
import { shouldShowItem } from "./navigation/utils.js";
|
|
20
23
|
|
|
21
24
|
const NavLinkItem = ({ item }: { item: HeaderNavLinkItem }) => {
|
|
22
25
|
const Icon = item.icon as LucideIcon | undefined;
|
|
@@ -87,7 +90,25 @@ const DropdownContent = ({
|
|
|
87
90
|
);
|
|
88
91
|
};
|
|
89
92
|
|
|
90
|
-
const HeaderNavItemComponent = ({
|
|
93
|
+
const HeaderNavItemComponent = ({
|
|
94
|
+
item,
|
|
95
|
+
auth,
|
|
96
|
+
context,
|
|
97
|
+
}: {
|
|
98
|
+
item: HeaderNavItem;
|
|
99
|
+
auth: ReturnType<typeof useAuth>;
|
|
100
|
+
context: ZudokuContext;
|
|
101
|
+
}) => {
|
|
102
|
+
if ("to" in item) {
|
|
103
|
+
const show = shouldShowItem({ auth, context })({
|
|
104
|
+
type: "link",
|
|
105
|
+
label: item.label,
|
|
106
|
+
to: item.to,
|
|
107
|
+
display: item.display,
|
|
108
|
+
});
|
|
109
|
+
if (!show) return null;
|
|
110
|
+
}
|
|
111
|
+
|
|
91
112
|
if ("to" in item) {
|
|
92
113
|
const Icon = item.icon as LucideIcon | undefined;
|
|
93
114
|
return (
|
|
@@ -123,9 +144,10 @@ const HeaderNavItemComponent = ({ item }: { item: HeaderNavItem }) => {
|
|
|
123
144
|
};
|
|
124
145
|
|
|
125
146
|
export const HeaderNavigation = () => {
|
|
126
|
-
const
|
|
127
|
-
const
|
|
128
|
-
const
|
|
147
|
+
const context = useZudoku();
|
|
148
|
+
const auth = useAuth();
|
|
149
|
+
const items = context.options.header?.navigation;
|
|
150
|
+
const navPosition = context.options.header?.placements?.navigation ?? "end";
|
|
129
151
|
if (!items || items.length === 0) return null;
|
|
130
152
|
|
|
131
153
|
const viewportAlign =
|
|
@@ -138,9 +160,13 @@ export const HeaderNavigation = () => {
|
|
|
138
160
|
return (
|
|
139
161
|
<NavigationMenu className={viewportAlign}>
|
|
140
162
|
<NavigationMenuList>
|
|
141
|
-
{items.map((item
|
|
142
|
-
|
|
143
|
-
|
|
163
|
+
{items.map((item) => (
|
|
164
|
+
<HeaderNavItemComponent
|
|
165
|
+
key={"to" in item ? item.to : item.label}
|
|
166
|
+
item={item}
|
|
167
|
+
auth={auth}
|
|
168
|
+
context={context}
|
|
169
|
+
/>
|
|
144
170
|
))}
|
|
145
171
|
</NavigationMenuList>
|
|
146
172
|
</NavigationMenu>
|
|
@@ -130,13 +130,7 @@ export const MobileTopNavigation = () => {
|
|
|
130
130
|
getProfileMenuItems,
|
|
131
131
|
} = context;
|
|
132
132
|
const headerNavigation = header?.navigation ?? [];
|
|
133
|
-
const {
|
|
134
|
-
isAuthenticated,
|
|
135
|
-
profile,
|
|
136
|
-
isAuthEnabled,
|
|
137
|
-
isBackendAvailable,
|
|
138
|
-
isPending,
|
|
139
|
-
} = authState;
|
|
133
|
+
const { isAuthenticated, profile, isAuthEnabled, isPending } = authState;
|
|
140
134
|
const [drawerOpen, setDrawerOpen] = useState(false);
|
|
141
135
|
|
|
142
136
|
const accountItems = getProfileMenuItems();
|
|
@@ -238,7 +232,7 @@ export const MobileTopNavigation = () => {
|
|
|
238
232
|
</div>
|
|
239
233
|
<div className="border-t shadow-[0_-4px_6px_-1px_rgba(0,0,0,0.05)] px-4 pt-3 flex flex-col gap-2">
|
|
240
234
|
<div className="flex items-center justify-between">
|
|
241
|
-
{isAuthEnabled &&
|
|
235
|
+
{isAuthEnabled && (
|
|
242
236
|
<ClientOnly
|
|
243
237
|
fallback={<Skeleton className="rounded-sm h-8 w-16" />}
|
|
244
238
|
>
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
type PropsWithChildren,
|
|
7
7
|
useEffect,
|
|
8
8
|
useMemo,
|
|
9
|
+
useRef,
|
|
9
10
|
useState,
|
|
10
11
|
} from "react";
|
|
11
12
|
import { ErrorBoundary } from "react-error-boundary";
|
|
@@ -23,8 +24,6 @@ import { ViewportAnchorProvider } from "./context/ViewportAnchorContext.js";
|
|
|
23
24
|
import { ApitogoProvider } from "./context/ZudokuProvider.js";
|
|
24
25
|
import { PluginHeads } from "./PluginHeads.js";
|
|
25
26
|
|
|
26
|
-
let apitogoContext: ZudokuContext | undefined;
|
|
27
|
-
|
|
28
27
|
const ZudokuInner = memo(
|
|
29
28
|
({
|
|
30
29
|
children,
|
|
@@ -53,6 +52,8 @@ const ZudokuInner = memo(
|
|
|
53
52
|
const [didNavigate, setDidNavigate] = useState(false);
|
|
54
53
|
const navigation = useNavigation();
|
|
55
54
|
const queryClient = useQueryClient();
|
|
55
|
+
const apitogoContextRef = useRef<ZudokuContext | undefined>(undefined);
|
|
56
|
+
apitogoContextRef.current ??= new ZudokuContext(props, queryClient, env);
|
|
56
57
|
|
|
57
58
|
useEffect(() => {
|
|
58
59
|
if (didNavigate || !navigation.location) {
|
|
@@ -61,12 +62,10 @@ const ZudokuInner = memo(
|
|
|
61
62
|
setDidNavigate(true);
|
|
62
63
|
}, [didNavigate, navigation.location]);
|
|
63
64
|
|
|
64
|
-
apitogoContext ??= new ZudokuContext(props, queryClient, env);
|
|
65
|
-
|
|
66
65
|
return (
|
|
67
66
|
<>
|
|
68
67
|
<PluginHeads plugins={props.plugins ?? []} location={location} />
|
|
69
|
-
<ApitogoProvider context={
|
|
68
|
+
<ApitogoProvider context={apitogoContextRef.current}>
|
|
70
69
|
<RouterEventsEmitter />
|
|
71
70
|
<SlotProvider slots={props.slots ?? props.UNSAFE_slotlets}>
|
|
72
71
|
<MDXProvider components={mdxComponents}>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { PropsWithChildren } from "react";
|
|
2
2
|
import type { ZudokuContext } from "../../core/ZudokuContext.js";
|
|
3
3
|
import { ZudokuReactContext } from "./ZudokuReactContext.js";
|
|
4
4
|
|
|
@@ -6,8 +6,6 @@ const ZudokuProviderImpl = ({
|
|
|
6
6
|
children,
|
|
7
7
|
context,
|
|
8
8
|
}: PropsWithChildren<{ context: ZudokuContext }>) => {
|
|
9
|
-
if (context.initialize) use(context.initialize);
|
|
10
|
-
|
|
11
9
|
return (
|
|
12
10
|
<ZudokuReactContext.Provider value={context}>
|
|
13
11
|
{children}
|
|
@@ -172,17 +172,17 @@ export const RouteGuard = () => {
|
|
|
172
172
|
? blocker.location.pathname + blocker.location.search
|
|
173
173
|
: location.pathname + location.search;
|
|
174
174
|
const showDialog =
|
|
175
|
-
auth.isBackendAvailable &&
|
|
176
|
-
needsAuth &&
|
|
177
|
-
auth.hasDistinctSignUpFlow;
|
|
175
|
+
auth.isBackendAvailable && needsAuth && auth.hasDistinctSignUpFlow;
|
|
178
176
|
const unifiedRedirectKeyRef = useRef<string | null>(null);
|
|
179
177
|
|
|
180
178
|
useEffect(() => {
|
|
181
179
|
if (
|
|
182
180
|
!auth.isBackendAvailable ||
|
|
183
181
|
auth.isPending ||
|
|
182
|
+
!auth.sessionChecked ||
|
|
184
183
|
!needsAuth ||
|
|
185
|
-
auth.hasDistinctSignUpFlow
|
|
184
|
+
auth.hasDistinctSignUpFlow ||
|
|
185
|
+
!auth.isAuthEnabled
|
|
186
186
|
) {
|
|
187
187
|
unifiedRedirectKeyRef.current = null;
|
|
188
188
|
return;
|
|
@@ -197,7 +197,10 @@ export const RouteGuard = () => {
|
|
|
197
197
|
}, [
|
|
198
198
|
auth.isBackendAvailable,
|
|
199
199
|
auth.isPending,
|
|
200
|
+
auth.sessionChecked,
|
|
200
201
|
auth.hasDistinctSignUpFlow,
|
|
202
|
+
auth.isAuthEnabled,
|
|
203
|
+
auth.login,
|
|
201
204
|
needsAuth,
|
|
202
205
|
redirectTo,
|
|
203
206
|
]);
|
|
@@ -211,6 +214,11 @@ export const RouteGuard = () => {
|
|
|
211
214
|
}
|
|
212
215
|
|
|
213
216
|
if (isProtectedRoute && !auth.isAuthEnabled) {
|
|
217
|
+
// Dev SSR can reuse a stale context before auth plugins hydrate; client decides.
|
|
218
|
+
if (typeof window === "undefined") {
|
|
219
|
+
return <BypassRoute isProtectedRoute={isProtectedRoute} />;
|
|
220
|
+
}
|
|
221
|
+
|
|
214
222
|
throw new ZudokuError("Authentication is not enabled", {
|
|
215
223
|
title: "Authentication is not enabled",
|
|
216
224
|
developerHint:
|
|
@@ -218,6 +226,10 @@ export const RouteGuard = () => {
|
|
|
218
226
|
});
|
|
219
227
|
}
|
|
220
228
|
|
|
229
|
+
if (needsToSignIn && !auth.sessionChecked && typeof window !== "undefined") {
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
|
|
221
233
|
if (needsToSignIn && auth.isPending && typeof window !== "undefined") {
|
|
222
234
|
return null;
|
|
223
235
|
}
|
package/src/vite/plugin-auth.ts
CHANGED
|
@@ -16,11 +16,7 @@ const viteAuthPlugin = (): Plugin => {
|
|
|
16
16
|
if (id === resolvedVirtualModuleId) {
|
|
17
17
|
const config = getCurrentConfig();
|
|
18
18
|
|
|
19
|
-
if (
|
|
20
|
-
!config.authentication ||
|
|
21
|
-
!config.__resolvedModules.userPanel.userManagement.enabled ||
|
|
22
|
-
config.__meta.mode === "standalone"
|
|
23
|
-
) {
|
|
19
|
+
if (!config.authentication || config.__meta.mode === "standalone") {
|
|
24
20
|
return `export const configuredAuthProvider = undefined;`;
|
|
25
21
|
}
|
|
26
22
|
// TODO: Validate that the authConfig.type is a valid authentication provider
|