@sybilion/uilib 1.2.10 → 1.2.12
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/README.md +10 -7
- package/dist/esm/components/ui/AppHeader/AppHeader.styl.js +1 -1
- package/dist/esm/components/ui/Logo/Logo.js +2 -1
- package/dist/esm/components/ui/NavUserHeader/NavUserHeader.js +11 -3
- package/dist/esm/components/ui/NavUserHeader/NavUserHeader.styl.js +2 -2
- package/dist/esm/components/ui/Sidebar/Sidebar.styl.js +1 -1
- package/dist/esm/components/widgets/SidebarDatasetsItemsGrouped/SidebarDatasetsItemsGrouped.js +8 -2
- package/dist/esm/components/widgets/SignInPage/SignInPage.js +3 -3
- package/dist/esm/components/widgets/SybilionAuthLayout/SybilionAuthHeadline.styl.js +1 -1
- package/dist/esm/components/widgets/SybilionAuthLayout/SybilionAuthLayout.js +3 -8
- package/dist/esm/components/widgets/SybilionAuthLayout/SybilionAuthLayout.styl.js +2 -2
- package/dist/esm/components/widgets/SybilionSignInPanel/SybilionSignInPanel.styl.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/sybilion-auth/SybilionAuthProvider.js +54 -24
- package/dist/esm/types/src/components/ui/Logo/Logo.d.ts +2 -1
- package/dist/esm/types/src/components/widgets/SidebarDatasetsItemsGrouped/SidebarDatasetsItemsGrouped.d.ts +4 -1
- package/dist/esm/types/src/components/widgets/SignInPage/SignInPage.d.ts +2 -2
- package/dist/esm/types/src/components/widgets/SybilionAuthLayout/SybilionAuthLayout.d.ts +2 -5
- package/dist/esm/types/src/components/widgets/SybilionAuthLayout/index.d.ts +1 -1
- package/dist/esm/types/src/docs/pages/SybilionAuthLayoutPage.d.ts +1 -0
- package/dist/esm/types/src/sybilion-auth/SybilionAuthProvider.d.ts +11 -2
- package/package.json +2 -4
- package/src/components/ui/AppHeader/AppHeader.styl +2 -0
- package/src/components/ui/Logo/Logo.tsx +2 -1
- package/src/components/ui/NavUserHeader/NavUserHeader.styl +2 -20
- package/src/components/ui/NavUserHeader/NavUserHeader.styl.d.ts +0 -3
- package/src/components/ui/NavUserHeader/NavUserHeader.tsx +30 -28
- package/src/components/ui/Sidebar/Sidebar.styl +2 -2
- package/src/components/widgets/SidebarDatasetsItemsGrouped/SidebarDatasetsItemsGrouped.tsx +14 -3
- package/src/components/widgets/SignInPage/SignInPage.tsx +4 -5
- package/src/components/widgets/SybilionAuthLayout/SybilionAuthHeadline.styl +2 -2
- package/src/components/widgets/SybilionAuthLayout/SybilionAuthHeadline.styl.d.ts +10 -2
- package/src/components/widgets/SybilionAuthLayout/SybilionAuthLayout.styl +20 -9
- package/src/components/widgets/SybilionAuthLayout/SybilionAuthLayout.styl.d.ts +16 -2
- package/src/components/widgets/SybilionAuthLayout/SybilionAuthLayout.tsx +4 -17
- package/src/components/widgets/SybilionAuthLayout/index.ts +0 -1
- package/src/components/widgets/SybilionSignInPanel/SybilionSignInPanel.styl +1 -1
- package/src/components/widgets/SybilionSignInPanel/SybilionSignInPanel.styl.d.ts +12 -2
- package/src/docs/DocsShell.tsx +16 -7
- package/src/docs/components/DocsSidebar/DocsSidebar.tsx +1 -0
- package/src/docs/pages/ChartAreaInteractivePage.tsx +1 -1
- package/src/docs/pages/StandaloneAppLayoutPage/StandaloneAppLayoutPage.styl +1 -1
- package/src/docs/pages/StandaloneAppLayoutPage/StandaloneAppLayoutPage.tsx +5 -4
- package/src/docs/pages/SybilionAuthLayoutPage.tsx +47 -0
- package/src/docs/registry.ts +3 -3
- package/src/sybilion-auth/SybilionAuthProvider.tsx +71 -23
- package/assets/standalone-global.css +0 -257
- package/dist/esm/types/src/docs/pages/SybilionAuthProviderPage.d.ts +0 -1
- package/docs/standalone-apps.md +0 -553
- package/src/docs/pages/SybilionAuthProviderPage.tsx +0 -40
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
type RedirectLoginOptions,
|
|
4
4
|
useAuth0,
|
|
5
5
|
} from '@auth0/auth0-react';
|
|
6
|
-
import type { LoginTokenResponse, SybilionSDK } from '@sybilion/sdk';
|
|
7
6
|
import type { JSX, ReactNode } from 'react';
|
|
8
7
|
import {
|
|
9
8
|
createContext,
|
|
@@ -16,6 +15,7 @@ import {
|
|
|
16
15
|
} from 'react';
|
|
17
16
|
|
|
18
17
|
import { normalizeApiBaseUrl } from '#uilib/sybilion-auth/authPaths';
|
|
18
|
+
import type { LoginTokenResponse, SybilionSDK } from '@sybilion/sdk';
|
|
19
19
|
|
|
20
20
|
const DEFAULT_TOKEN_KEY = 'sybilion.standalone.jwt';
|
|
21
21
|
|
|
@@ -57,7 +57,16 @@ export type SybilionAuthProviderProps = {
|
|
|
57
57
|
redirect_uri?: string;
|
|
58
58
|
};
|
|
59
59
|
sybilionTokenStorageKey?: string;
|
|
60
|
+
/**
|
|
61
|
+
* When set, passed to Auth0 `logout({ logoutParams: { returnTo } })` if
|
|
62
|
+
* {@link SybilionAuthProviderProps.useFederatedLogout} is true.
|
|
63
|
+
*/
|
|
60
64
|
logoutReturnTo?: string;
|
|
65
|
+
/**
|
|
66
|
+
* If true, redirect to Auth0 `/v2/logout` (clears IdP session). Default false matches
|
|
67
|
+
* sybilion-client: local session clear only, no redirect (`openUrl: false`).
|
|
68
|
+
*/
|
|
69
|
+
useFederatedLogout?: boolean;
|
|
61
70
|
};
|
|
62
71
|
|
|
63
72
|
export type SybilionAuthContextValue = {
|
|
@@ -129,6 +138,15 @@ export function useSybilionApiFetch(): (
|
|
|
129
138
|
);
|
|
130
139
|
}
|
|
131
140
|
|
|
141
|
+
function readTokenFromLs(key: string): string | null {
|
|
142
|
+
if (typeof localStorage === 'undefined') return null;
|
|
143
|
+
try {
|
|
144
|
+
return localStorage.getItem(key);
|
|
145
|
+
} catch {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
132
150
|
function writeLs(key: string, value: string | null): void {
|
|
133
151
|
if (typeof localStorage === 'undefined') return;
|
|
134
152
|
try {
|
|
@@ -144,19 +162,24 @@ function InnerSybilionSession({
|
|
|
144
162
|
sdk,
|
|
145
163
|
storageKey,
|
|
146
164
|
logoutReturnTo,
|
|
165
|
+
useFederatedLogout = false,
|
|
147
166
|
}: {
|
|
148
167
|
children: ReactNode;
|
|
149
168
|
sdk: SybilionSDK;
|
|
150
169
|
storageKey: string;
|
|
151
170
|
logoutReturnTo?: string;
|
|
171
|
+
useFederatedLogout?: boolean;
|
|
152
172
|
}): JSX.Element {
|
|
153
173
|
const auth0 = useAuth0();
|
|
154
174
|
const auth0Ref = useRef(auth0);
|
|
155
175
|
auth0Ref.current = auth0;
|
|
156
176
|
|
|
157
|
-
const [sybilionToken, setSybilionToken] = useState<string | null>(
|
|
177
|
+
const [sybilionToken, setSybilionToken] = useState<string | null>(() =>
|
|
178
|
+
typeof window === 'undefined' ? null : readTokenFromLs(storageKey),
|
|
179
|
+
);
|
|
158
180
|
const [exchangeLoading, setExchangeLoading] = useState(false);
|
|
159
181
|
const [exchangeError, setExchangeError] = useState<string | null>(null);
|
|
182
|
+
const [isLoggingOut, setIsLoggingOut] = useState(false);
|
|
160
183
|
|
|
161
184
|
const persistToken = useCallback(
|
|
162
185
|
(t: string | null) => {
|
|
@@ -167,23 +190,39 @@ function InnerSybilionSession({
|
|
|
167
190
|
);
|
|
168
191
|
|
|
169
192
|
const doLogout = useCallback(() => {
|
|
193
|
+
setIsLoggingOut(true);
|
|
170
194
|
persistToken(null);
|
|
171
195
|
setExchangeError(null);
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
196
|
+
if (useFederatedLogout) {
|
|
197
|
+
const returnTo =
|
|
198
|
+
logoutReturnTo ??
|
|
199
|
+
(typeof window !== 'undefined' ? window.location.origin : undefined);
|
|
200
|
+
void auth0Ref.current.logout({
|
|
201
|
+
logoutParams: returnTo ? { returnTo } : undefined,
|
|
202
|
+
});
|
|
203
|
+
} else {
|
|
204
|
+
void auth0Ref.current.logout({ openUrl: false });
|
|
205
|
+
}
|
|
206
|
+
}, [persistToken, logoutReturnTo, useFederatedLogout]);
|
|
207
|
+
|
|
208
|
+
useEffect(() => {
|
|
209
|
+
if (!auth0.isAuthenticated) {
|
|
210
|
+
setIsLoggingOut(false);
|
|
211
|
+
}
|
|
212
|
+
}, [auth0.isAuthenticated]);
|
|
179
213
|
|
|
180
214
|
const apiBaseUrl = useMemo(() => getSybilionApiOriginFromSdk(sdk), [sdk]);
|
|
181
215
|
|
|
182
216
|
useEffect(() => {
|
|
217
|
+
// While Auth0 restores from localStorage, `isAuthenticated` is false — do not
|
|
218
|
+
// wipe the Sybilion JWT (would break reload: sign-in flash / lost session).
|
|
219
|
+
if (auth0.isLoading) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
183
222
|
if (!auth0.isAuthenticated || !auth0.user?.sub) {
|
|
184
223
|
persistToken(null);
|
|
185
224
|
}
|
|
186
|
-
}, [auth0.isAuthenticated, auth0.user?.sub, persistToken]);
|
|
225
|
+
}, [auth0.isLoading, auth0.isAuthenticated, auth0.user?.sub, persistToken]);
|
|
187
226
|
|
|
188
227
|
useEffect(() => {
|
|
189
228
|
if (!auth0.isAuthenticated || !auth0.user?.sub) {
|
|
@@ -219,13 +258,7 @@ function InnerSybilionSession({
|
|
|
219
258
|
return () => {
|
|
220
259
|
cancelled = true;
|
|
221
260
|
};
|
|
222
|
-
}, [
|
|
223
|
-
sdk,
|
|
224
|
-
auth0.isAuthenticated,
|
|
225
|
-
auth0.user?.sub,
|
|
226
|
-
persistToken,
|
|
227
|
-
doLogout,
|
|
228
|
-
]);
|
|
261
|
+
}, [sdk, auth0.isAuthenticated, auth0.user?.sub, persistToken, doLogout]);
|
|
229
262
|
|
|
230
263
|
const getAuth0AccessToken = useCallback(async () => {
|
|
231
264
|
if (!auth0.isAuthenticated) return undefined;
|
|
@@ -246,16 +279,29 @@ function InnerSybilionSession({
|
|
|
246
279
|
doLogout();
|
|
247
280
|
}, [doLogout]);
|
|
248
281
|
|
|
282
|
+
const hasAuth0User = Boolean(auth0.isAuthenticated && auth0.user?.sub);
|
|
283
|
+
|
|
284
|
+
/** Auth0 session is enough for app routes; Sybilion JWT is filled by exchange. */
|
|
249
285
|
const isAuthenticated = Boolean(
|
|
250
|
-
|
|
286
|
+
!exchangeError &&
|
|
287
|
+
!isLoggingOut &&
|
|
288
|
+
(hasAuth0User ||
|
|
289
|
+
(Boolean(sybilionToken) && (auth0.isAuthenticated || auth0.isLoading))),
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
const needsFirstSybilionToken = Boolean(
|
|
293
|
+
auth0.isAuthenticated &&
|
|
294
|
+
auth0.user &&
|
|
295
|
+
sybilionToken === null &&
|
|
296
|
+
exchangeError === null &&
|
|
297
|
+
!isLoggingOut,
|
|
251
298
|
);
|
|
252
299
|
|
|
300
|
+
/** Omit Auth0/exchange "busy" once we already have a Sybilion JWT — avoids header skeleton flicker on refresh. */
|
|
253
301
|
const isLoading =
|
|
254
|
-
auth0.isLoading ||
|
|
255
|
-
exchangeLoading ||
|
|
256
|
-
|
|
257
|
-
sybilionToken === null &&
|
|
258
|
-
exchangeError === null);
|
|
302
|
+
(auth0.isLoading && sybilionToken === null) ||
|
|
303
|
+
(exchangeLoading && sybilionToken === null) ||
|
|
304
|
+
needsFirstSybilionToken;
|
|
259
305
|
|
|
260
306
|
const value = useMemo(
|
|
261
307
|
(): SybilionAuthContextValue => ({
|
|
@@ -299,6 +345,7 @@ export function SybilionAuthProvider({
|
|
|
299
345
|
authorizationParams,
|
|
300
346
|
sybilionTokenStorageKey = DEFAULT_TOKEN_KEY,
|
|
301
347
|
logoutReturnTo,
|
|
348
|
+
useFederatedLogout = false,
|
|
302
349
|
}: SybilionAuthProviderProps): JSX.Element {
|
|
303
350
|
const mergedAuthParams = useMemo(
|
|
304
351
|
() => ({
|
|
@@ -336,6 +383,7 @@ export function SybilionAuthProvider({
|
|
|
336
383
|
sdk={sdk}
|
|
337
384
|
storageKey={sybilionTokenStorageKey}
|
|
338
385
|
logoutReturnTo={logoutReturnTo}
|
|
386
|
+
useFederatedLogout={useFederatedLogout}
|
|
339
387
|
>
|
|
340
388
|
{children}
|
|
341
389
|
</InnerSybilionSession>
|
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Standalone Sybilion app token sheet token sheet — keep in sync with assets/globals.css (:root, breakpoints, .dark).
|
|
3
|
-
* Omits @theme inline and @layer base (Tailwind/@apply). For full parity use globals.css from this repo.
|
|
4
|
-
*/
|
|
5
|
-
@import './fonts/fonts.css';
|
|
6
|
-
|
|
7
|
-
* {
|
|
8
|
-
box-sizing: border-box;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
:root {
|
|
12
|
-
--sb-cyan-50: oklch(0.964 0.006 204);
|
|
13
|
-
--sb-cyan-100: oklch(0.933 0.011 204);
|
|
14
|
-
--sb-cyan-200: oklch(0.76 0.089 204);
|
|
15
|
-
--sb-cyan-300: oklch(0.7 0.098 204);
|
|
16
|
-
--sb-cyan-400: oklch(0.625 0.234 204);
|
|
17
|
-
--sb-cyan-500: oklch(0.518 0.258 204);
|
|
18
|
-
--sb-cyan-600: oklch(0.421 0.231 204);
|
|
19
|
-
--sb-cyan-700: oklch(0.388 0.042 204);
|
|
20
|
-
--sb-cyan-800: oklch(0.338 0.026 204);
|
|
21
|
-
--sb-cyan-900: oklch(0.23 0.017 204);
|
|
22
|
-
--sb-purple-50: oklch(0.964 0.021 304);
|
|
23
|
-
--sb-purple-100: oklch(0.933 0.039 303.4);
|
|
24
|
-
--sb-purple-200: oklch(0.76 0.148 301.5);
|
|
25
|
-
--sb-purple-300: oklch(0.719 0.174 300.6);
|
|
26
|
-
--sb-purple-400: oklch(0.625 0.234 297.8);
|
|
27
|
-
--sb-purple-500: oklch(0.518 0.258 292.6);
|
|
28
|
-
--sb-purple-600: oklch(0.421 0.231 289);
|
|
29
|
-
--sb-purple-700: oklch(0.33 0.179 289.7);
|
|
30
|
-
--sb-purple-800: oklch(0.238 0.123 292.3);
|
|
31
|
-
--sb-purple-900: oklch(0.23 0.049 301.1);
|
|
32
|
-
--sb-red-50: oklch(0.969 0.015 22.4);
|
|
33
|
-
--sb-red-100: oklch(0.942 0.029 23);
|
|
34
|
-
--sb-red-200: oklch(0.8 0.114 24.5);
|
|
35
|
-
--sb-red-300: oklch(0.769 0.137 25);
|
|
36
|
-
--sb-red-400: oklch(0.7 0.191 27.2);
|
|
37
|
-
--sb-red-500: oklch(0.606 0.194 28.6);
|
|
38
|
-
--sb-red-600: oklch(0.539 0.183 28.8);
|
|
39
|
-
--sb-red-700: oklch(0.427 0.155 29.5);
|
|
40
|
-
--sb-red-800: oklch(0.311 0.107 29.3);
|
|
41
|
-
--sb-red-900: oklch(0.232 0.019 24.1);
|
|
42
|
-
--sb-green-50: oklch(0.981 0.028 158.7);
|
|
43
|
-
--sb-green-100: oklch(0.949 0.08 157.2);
|
|
44
|
-
--sb-green-200: oklch(0.909 0.154 154.2);
|
|
45
|
-
--sb-green-300: oklch(0.859 0.196 151.7);
|
|
46
|
-
--sb-green-400: oklch(0.823 0.216 149.8);
|
|
47
|
-
--sb-green-500: oklch(0.748 0.208 148.6);
|
|
48
|
-
--sb-green-600: oklch(0.641 0.155 151.1);
|
|
49
|
-
--sb-green-700: oklch(0.482 0.107 152.1);
|
|
50
|
-
--sb-green-800: oklch(0.365 0.079 152.3);
|
|
51
|
-
--sb-green-900: oklch(0.254 0.023 157.2);
|
|
52
|
-
--sb-yellow-50: oklch(0.984 0.014 78.3);
|
|
53
|
-
--sb-yellow-100: oklch(0.956 0.025 78.9);
|
|
54
|
-
--sb-yellow-200: oklch(0.927 0.041 76.7);
|
|
55
|
-
--sb-yellow-300: oklch(0.844 0.1 75.5);
|
|
56
|
-
--sb-yellow-400: oklch(0.771 0.128 73.6);
|
|
57
|
-
--sb-yellow-500: oklch(0.691 0.128 71.8);
|
|
58
|
-
--sb-yellow-600: oklch(0.624 0.109 73.2);
|
|
59
|
-
--sb-yellow-700: oklch(0.481 0.083 73.3);
|
|
60
|
-
--sb-yellow-800: oklch(0.356 0.058 73.8);
|
|
61
|
-
--sb-yellow-900: oklch(0.251 0.016 79.5);
|
|
62
|
-
--sb-gray-50: oklch(0.98 0 0);
|
|
63
|
-
--sb-gray-100: oklch(0.949 0 0);
|
|
64
|
-
--sb-gray-200: oklch(0.909 0 0);
|
|
65
|
-
--sb-gray-300: oklch(0.859 0 0);
|
|
66
|
-
--sb-gray-400: oklch(0.823 0 0);
|
|
67
|
-
--sb-gray-500: oklch(0.748 0 0);
|
|
68
|
-
--sb-gray-600: oklch(0.641 0 0);
|
|
69
|
-
--sb-gray-700: oklch(0.482 0 0);
|
|
70
|
-
--sb-gray-800: oklch(0.365 0 0);
|
|
71
|
-
--sb-gray-900: oklch(0.254 0 0);
|
|
72
|
-
--sb-slate-50: oklch(0.9843 0.0011 197.14);
|
|
73
|
-
--sb-slate-100: oklch(0.9622 0.0035 219.53);
|
|
74
|
-
--sb-slate-200: oklch(0.8882 0.0101 212.52);
|
|
75
|
-
--sb-slate-300: oklch(0.8119 0.0139 214.37);
|
|
76
|
-
--sb-slate-400: oklch(0.7315 0.0168 216.72);
|
|
77
|
-
--sb-slate-500: oklch(0.6489 0.0179 211.06);
|
|
78
|
-
--sb-slate-600: oklch(0.5648 0.0184 211.07);
|
|
79
|
-
--sb-slate-700: oklch(0.4723 0.0152 208.74);
|
|
80
|
-
--sb-slate-800: oklch(0.3759 0.0107 205.8);
|
|
81
|
-
--sb-slate-900: oklch(0.2732 0.0061 214.4);
|
|
82
|
-
--sb-slate-950: oklch(0.1579 0.0017 196.99);
|
|
83
|
-
--bp-mobile: 384px;
|
|
84
|
-
--bp-tablet: 768px;
|
|
85
|
-
--bp-desktop: 1024px;
|
|
86
|
-
--p-24: 96px;
|
|
87
|
-
--p-23: 92px;
|
|
88
|
-
--p-20: 80px;
|
|
89
|
-
--p-19: 76px;
|
|
90
|
-
--p-18: 72px;
|
|
91
|
-
--p-17: 68px;
|
|
92
|
-
--p-16: 64px;
|
|
93
|
-
--p-12: 48px;
|
|
94
|
-
--p-11: 44px;
|
|
95
|
-
--p-10: 40px;
|
|
96
|
-
--p-9: 36px;
|
|
97
|
-
--p-8: 32px;
|
|
98
|
-
--p-7: 28px;
|
|
99
|
-
--p-6: 24px;
|
|
100
|
-
--p-5: 20px;
|
|
101
|
-
--p-4: 16px;
|
|
102
|
-
--p-3: 12px;
|
|
103
|
-
--p-2: 8px;
|
|
104
|
-
--p-1: 4px;
|
|
105
|
-
--text-xs: 12px;
|
|
106
|
-
--text-sm: 14px;
|
|
107
|
-
--text-base: 16px;
|
|
108
|
-
--text-lg: 18px;
|
|
109
|
-
--text-xl: 20px;
|
|
110
|
-
--text-2xl: 24px;
|
|
111
|
-
--text-3xl: 30px;
|
|
112
|
-
--text-4xl: 36px;
|
|
113
|
-
--text-5xl: 48px;
|
|
114
|
-
|
|
115
|
-
--spacing-3xs: 2px;
|
|
116
|
-
--spacing-2xs: 4px;
|
|
117
|
-
--spacing-xs: 6px;
|
|
118
|
-
--spacing-sm: 8px;
|
|
119
|
-
--spacing-md: 12px;
|
|
120
|
-
--spacing-lg: 16px;
|
|
121
|
-
--spacing-xl: 20px;
|
|
122
|
-
--spacing-2xl: 24px;
|
|
123
|
-
--spacing-3xl: 32px;
|
|
124
|
-
|
|
125
|
-
--font-family-heading: 'KMR Apparat', sans-serif;
|
|
126
|
-
--font-family-body: 'Manrope', sans-serif;
|
|
127
|
-
|
|
128
|
-
/* Same mapping as sybilion-client/assets/globals.css (app variables) */
|
|
129
|
-
--brand-color: var(--sb-cyan-400);
|
|
130
|
-
--brand-color-50: var(--sb-cyan-50);
|
|
131
|
-
--brand-color-100: var(--sb-cyan-100);
|
|
132
|
-
--brand-color-200: var(--sb-cyan-200);
|
|
133
|
-
--brand-color-300: var(--sb-cyan-300);
|
|
134
|
-
--brand-color-400: var(--sb-cyan-400);
|
|
135
|
-
--brand-color-500: var(--sb-cyan-500);
|
|
136
|
-
--brand-color-600: var(--sb-cyan-600);
|
|
137
|
-
--brand-color-700: var(--sb-cyan-700);
|
|
138
|
-
--brand-color-800: var(--sb-cyan-800);
|
|
139
|
-
--brand-color-900: var(--sb-cyan-900);
|
|
140
|
-
--header-height: 94px;
|
|
141
|
-
--page-x-padding: var(--p-16);
|
|
142
|
-
--page-y-padding: var(--p-12);
|
|
143
|
-
--page-color: var(--sb-slate-100);
|
|
144
|
-
--page-color-alpha-800: var(--sb-slate-100);
|
|
145
|
-
--background: oklch(1 0 0);
|
|
146
|
-
--background-alpha-800: oklch(0.99 0 0 / 0.8);
|
|
147
|
-
--background-alpha-700: oklch(0.99 0 0 / 0.7);
|
|
148
|
-
--background-alpha-500: oklch(0.99 0 0 / 0.5);
|
|
149
|
-
--foreground: oklch(0.15 0 0);
|
|
150
|
-
--card: oklch(1 0 0);
|
|
151
|
-
--card-foreground: oklch(0.15 0 0);
|
|
152
|
-
--popover: oklch(1 0 0);
|
|
153
|
-
--popover-foreground: oklch(0.15 0 0);
|
|
154
|
-
--primary: oklch(0.25 0 0);
|
|
155
|
-
--primary-foreground: oklch(0.99 0 0);
|
|
156
|
-
--secondary: oklch(0.96 0 0);
|
|
157
|
-
--secondary-800: oklch(0.96 0 0 / 0.8);
|
|
158
|
-
--secondary-foreground: oklch(0.25 0 0);
|
|
159
|
-
--muted: oklch(0.965 0 0);
|
|
160
|
-
--muted-50: oklch(0.98 0 0);
|
|
161
|
-
--muted-foreground: var(--sb-slate-600);
|
|
162
|
-
--muted-border: var(--sb-slate-400);
|
|
163
|
-
--accent: var(--sb-slate-100);
|
|
164
|
-
--accent-500: oklch(0.96 0 0 / 0.5);
|
|
165
|
-
--accent-foreground: oklch(0.25 0 0);
|
|
166
|
-
--destructive: oklch(0.577 0.245 27.325);
|
|
167
|
-
--destructive-100: oklch(0.577 0.245 27.325 / 0.1);
|
|
168
|
-
--destructive-200: oklch(0.577 0.245 27.325 / 0.2);
|
|
169
|
-
--destructive-400: oklch(0.577 0.245 27.325 / 0.4);
|
|
170
|
-
--destructive-600: oklch(0.577 0.245 27.325 / 0.6);
|
|
171
|
-
--destructive-900: oklch(0.577 0.245 27.325 / 0.9);
|
|
172
|
-
--border: oklch(0.9 0 0);
|
|
173
|
-
--input: oklch(0.94 0 0);
|
|
174
|
-
--input-30: oklch(0.94 0 0 / 0.3);
|
|
175
|
-
--ring: oklch(0.65 0 0);
|
|
176
|
-
--ring-50: oklch(0.65 0 0 / 0.5);
|
|
177
|
-
--sidebar: oklch(1 0 0);
|
|
178
|
-
--sidebar-foreground: oklch(0.2 0 0);
|
|
179
|
-
--sidebar-primary: oklch(0.25 0 0);
|
|
180
|
-
--sidebar-primary-foreground: oklch(0.99 0 0);
|
|
181
|
-
--sidebar-accent: var(--sb-slate-100);
|
|
182
|
-
--sidebar-accent-foreground: oklch(0.25 0 0);
|
|
183
|
-
--sidebar-border: oklch(0.9 0 0);
|
|
184
|
-
--sidebar-ring: oklch(0.65 0 0);
|
|
185
|
-
|
|
186
|
-
--sb-link-color: var(--brand-color-500);
|
|
187
|
-
--sb-link-visited-color: var(--brand-color-700);
|
|
188
|
-
--sb-link-color-hover: var(--brand-color-600);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
@media (max-width: var(--bp-mobile)) {
|
|
192
|
-
:root {
|
|
193
|
-
--header-height: 84px;
|
|
194
|
-
--page-x-padding: var(--p-6);
|
|
195
|
-
--page-y-padding: var(--p-6);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
.dark {
|
|
200
|
-
--page-color: oklch(0.22 0 0);
|
|
201
|
-
--page-color-alpha-800: oklch(0.2242 0 0 / 0.8);
|
|
202
|
-
--background: oklch(0.14 0 0);
|
|
203
|
-
--background-alpha-800: oklch(0.14 0 0 / 0.95);
|
|
204
|
-
--background-alpha-700: oklch(0.14 0 0 / 0.7);
|
|
205
|
-
--background-alpha-500: oklch(0.14 0 0 / 0.5);
|
|
206
|
-
--foreground: oklch(0.95 0 0);
|
|
207
|
-
--card: oklch(0.1 0 0);
|
|
208
|
-
--card-foreground: oklch(0.95 0 0);
|
|
209
|
-
--popover: oklch(0.16 0 0);
|
|
210
|
-
--popover-foreground: oklch(0.95 0 0);
|
|
211
|
-
--primary: oklch(0.9 0 0);
|
|
212
|
-
--primary-foreground: oklch(0.14 0 0);
|
|
213
|
-
--secondary: oklch(0.22 0 0);
|
|
214
|
-
--secondary-800: oklch(0.22 0 0 / 0.8);
|
|
215
|
-
--secondary-foreground: oklch(0.95 0 0);
|
|
216
|
-
--muted: oklch(0.2 0 0);
|
|
217
|
-
--muted-50: oklch(0.2 0 0);
|
|
218
|
-
--muted-foreground: oklch(0.6 0 0);
|
|
219
|
-
--muted-border: var(--sb-slate-600);
|
|
220
|
-
--accent: oklch(0.27 0 0);
|
|
221
|
-
--accent-500: oklch(0.27 0 0 / 0.5);
|
|
222
|
-
--accent-foreground: oklch(0.95 0 0);
|
|
223
|
-
--destructive: oklch(0.704 0.191 22.216);
|
|
224
|
-
--destructive-200: oklch(0.704 0.191 22.216 / 0.2);
|
|
225
|
-
--destructive-400: oklch(0.704 0.191 22.216 / 0.4);
|
|
226
|
-
--destructive-600: oklch(0.704 0.191 22.216 / 0.6);
|
|
227
|
-
--destructive-900: oklch(0.704 0.191 22.216 / 0.9);
|
|
228
|
-
--border: oklch(0.3 0 0 / 0.8);
|
|
229
|
-
--input: oklch(1 0 0 / 16%);
|
|
230
|
-
--input-30: oklch(1 0 0 / 0.3);
|
|
231
|
-
--ring: oklch(0.5 0 0);
|
|
232
|
-
--ring-50: oklch(0.5 0 0 / 0.5);
|
|
233
|
-
--sidebar: oklch(0.16 0 0);
|
|
234
|
-
--sidebar-foreground: oklch(0.9 0 0);
|
|
235
|
-
--sidebar-primary: oklch(0.9 0 0);
|
|
236
|
-
--sidebar-primary-foreground: oklch(0.14 0 0);
|
|
237
|
-
--sidebar-accent: oklch(0.22 0 0);
|
|
238
|
-
--sidebar-accent-foreground: oklch(0.95 0 0);
|
|
239
|
-
--sidebar-border: oklch(0.3 0 0);
|
|
240
|
-
--sidebar-ring: oklch(0.5 0 0);
|
|
241
|
-
--sb-link-color: var(--brand-color-400);
|
|
242
|
-
--sb-link-visited-color: var(--brand-color-600);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
html {
|
|
246
|
-
background-color: var(--background);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
body {
|
|
250
|
-
min-height: 100vh;
|
|
251
|
-
margin: 0;
|
|
252
|
-
background-color: var(--background);
|
|
253
|
-
color: var(--foreground);
|
|
254
|
-
font-family: var(--font-family-body);
|
|
255
|
-
font-size: var(--text-sm);
|
|
256
|
-
line-height: 1.6;
|
|
257
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function SybilionAuthProviderPage(): import("react/jsx-runtime").JSX.Element;
|