@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.
Files changed (50) hide show
  1. package/README.md +10 -7
  2. package/dist/esm/components/ui/AppHeader/AppHeader.styl.js +1 -1
  3. package/dist/esm/components/ui/Logo/Logo.js +2 -1
  4. package/dist/esm/components/ui/NavUserHeader/NavUserHeader.js +11 -3
  5. package/dist/esm/components/ui/NavUserHeader/NavUserHeader.styl.js +2 -2
  6. package/dist/esm/components/ui/Sidebar/Sidebar.styl.js +1 -1
  7. package/dist/esm/components/widgets/SidebarDatasetsItemsGrouped/SidebarDatasetsItemsGrouped.js +8 -2
  8. package/dist/esm/components/widgets/SignInPage/SignInPage.js +3 -3
  9. package/dist/esm/components/widgets/SybilionAuthLayout/SybilionAuthHeadline.styl.js +1 -1
  10. package/dist/esm/components/widgets/SybilionAuthLayout/SybilionAuthLayout.js +3 -8
  11. package/dist/esm/components/widgets/SybilionAuthLayout/SybilionAuthLayout.styl.js +2 -2
  12. package/dist/esm/components/widgets/SybilionSignInPanel/SybilionSignInPanel.styl.js +1 -1
  13. package/dist/esm/index.js +1 -1
  14. package/dist/esm/sybilion-auth/SybilionAuthProvider.js +54 -24
  15. package/dist/esm/types/src/components/ui/Logo/Logo.d.ts +2 -1
  16. package/dist/esm/types/src/components/widgets/SidebarDatasetsItemsGrouped/SidebarDatasetsItemsGrouped.d.ts +4 -1
  17. package/dist/esm/types/src/components/widgets/SignInPage/SignInPage.d.ts +2 -2
  18. package/dist/esm/types/src/components/widgets/SybilionAuthLayout/SybilionAuthLayout.d.ts +2 -5
  19. package/dist/esm/types/src/components/widgets/SybilionAuthLayout/index.d.ts +1 -1
  20. package/dist/esm/types/src/docs/pages/SybilionAuthLayoutPage.d.ts +1 -0
  21. package/dist/esm/types/src/sybilion-auth/SybilionAuthProvider.d.ts +11 -2
  22. package/package.json +2 -4
  23. package/src/components/ui/AppHeader/AppHeader.styl +2 -0
  24. package/src/components/ui/Logo/Logo.tsx +2 -1
  25. package/src/components/ui/NavUserHeader/NavUserHeader.styl +2 -20
  26. package/src/components/ui/NavUserHeader/NavUserHeader.styl.d.ts +0 -3
  27. package/src/components/ui/NavUserHeader/NavUserHeader.tsx +30 -28
  28. package/src/components/ui/Sidebar/Sidebar.styl +2 -2
  29. package/src/components/widgets/SidebarDatasetsItemsGrouped/SidebarDatasetsItemsGrouped.tsx +14 -3
  30. package/src/components/widgets/SignInPage/SignInPage.tsx +4 -5
  31. package/src/components/widgets/SybilionAuthLayout/SybilionAuthHeadline.styl +2 -2
  32. package/src/components/widgets/SybilionAuthLayout/SybilionAuthHeadline.styl.d.ts +10 -2
  33. package/src/components/widgets/SybilionAuthLayout/SybilionAuthLayout.styl +20 -9
  34. package/src/components/widgets/SybilionAuthLayout/SybilionAuthLayout.styl.d.ts +16 -2
  35. package/src/components/widgets/SybilionAuthLayout/SybilionAuthLayout.tsx +4 -17
  36. package/src/components/widgets/SybilionAuthLayout/index.ts +0 -1
  37. package/src/components/widgets/SybilionSignInPanel/SybilionSignInPanel.styl +1 -1
  38. package/src/components/widgets/SybilionSignInPanel/SybilionSignInPanel.styl.d.ts +12 -2
  39. package/src/docs/DocsShell.tsx +16 -7
  40. package/src/docs/components/DocsSidebar/DocsSidebar.tsx +1 -0
  41. package/src/docs/pages/ChartAreaInteractivePage.tsx +1 -1
  42. package/src/docs/pages/StandaloneAppLayoutPage/StandaloneAppLayoutPage.styl +1 -1
  43. package/src/docs/pages/StandaloneAppLayoutPage/StandaloneAppLayoutPage.tsx +5 -4
  44. package/src/docs/pages/SybilionAuthLayoutPage.tsx +47 -0
  45. package/src/docs/registry.ts +3 -3
  46. package/src/sybilion-auth/SybilionAuthProvider.tsx +71 -23
  47. package/assets/standalone-global.css +0 -257
  48. package/dist/esm/types/src/docs/pages/SybilionAuthProviderPage.d.ts +0 -1
  49. package/docs/standalone-apps.md +0 -553
  50. 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>(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
- const returnTo =
173
- logoutReturnTo ??
174
- (typeof window !== 'undefined' ? window.location.origin : undefined);
175
- auth0Ref.current.logout({
176
- logoutParams: returnTo ? { returnTo } : undefined,
177
- });
178
- }, [persistToken, logoutReturnTo]);
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
- auth0.isAuthenticated && sybilionToken && !exchangeError,
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
- (Boolean(auth0.isAuthenticated && auth0.user) &&
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;