@stackframe/react 2.7.20
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/CHANGELOG.md +1415 -0
- package/LICENSE +7 -0
- package/README.md +26 -0
- package/dist/components/credential-sign-in.d.mts +5 -0
- package/dist/components/credential-sign-in.d.ts +5 -0
- package/dist/components/credential-sign-in.js +103 -0
- package/dist/components/credential-sign-in.js.map +1 -0
- package/dist/components/credential-sign-up.d.mts +7 -0
- package/dist/components/credential-sign-up.d.ts +7 -0
- package/dist/components/credential-sign-up.js +138 -0
- package/dist/components/credential-sign-up.js.map +1 -0
- package/dist/components/elements/form-warning.d.mts +7 -0
- package/dist/components/elements/form-warning.d.ts +7 -0
- package/dist/components/elements/form-warning.js +39 -0
- package/dist/components/elements/form-warning.js.map +1 -0
- package/dist/components/elements/maybe-full-page.d.mts +11 -0
- package/dist/components/elements/maybe-full-page.d.ts +11 -0
- package/dist/components/elements/maybe-full-page.js +74 -0
- package/dist/components/elements/maybe-full-page.js.map +1 -0
- package/dist/components/elements/separator-with-text.d.mts +7 -0
- package/dist/components/elements/separator-with-text.d.ts +7 -0
- package/dist/components/elements/separator-with-text.js +41 -0
- package/dist/components/elements/separator-with-text.js.map +1 -0
- package/dist/components/elements/sidebar-layout.d.mts +19 -0
- package/dist/components/elements/sidebar-layout.d.ts +19 -0
- package/dist/components/elements/sidebar-layout.js +126 -0
- package/dist/components/elements/sidebar-layout.js.map +1 -0
- package/dist/components/elements/ssr-layout-effect.d.mts +8 -0
- package/dist/components/elements/ssr-layout-effect.d.ts +8 -0
- package/dist/components/elements/ssr-layout-effect.js +47 -0
- package/dist/components/elements/ssr-layout-effect.js.map +1 -0
- package/dist/components/elements/user-avatar.d.mts +13 -0
- package/dist/components/elements/user-avatar.d.ts +13 -0
- package/dist/components/elements/user-avatar.js +41 -0
- package/dist/components/elements/user-avatar.js.map +1 -0
- package/dist/components/iframe-preventer.d.mts +8 -0
- package/dist/components/iframe-preventer.d.ts +8 -0
- package/dist/components/iframe-preventer.js +52 -0
- package/dist/components/iframe-preventer.js.map +1 -0
- package/dist/components/link.d.mts +14 -0
- package/dist/components/link.d.ts +14 -0
- package/dist/components/link.js +51 -0
- package/dist/components/link.js.map +1 -0
- package/dist/components/magic-link-sign-in.d.mts +5 -0
- package/dist/components/magic-link-sign-in.d.ts +5 -0
- package/dist/components/magic-link-sign-in.js +151 -0
- package/dist/components/magic-link-sign-in.js.map +1 -0
- package/dist/components/message-cards/known-error-message-card.d.mts +9 -0
- package/dist/components/message-cards/known-error-message-card.d.ts +9 -0
- package/dist/components/message-cards/known-error-message-card.js +61 -0
- package/dist/components/message-cards/known-error-message-card.js.map +1 -0
- package/dist/components/message-cards/message-card.d.mts +14 -0
- package/dist/components/message-cards/message-card.d.ts +14 -0
- package/dist/components/message-cards/message-card.js +45 -0
- package/dist/components/message-cards/message-card.js.map +1 -0
- package/dist/components/message-cards/predefined-message-card.d.mts +8 -0
- package/dist/components/message-cards/predefined-message-card.d.ts +8 -0
- package/dist/components/message-cards/predefined-message-card.js +107 -0
- package/dist/components/message-cards/predefined-message-card.js.map +1 -0
- package/dist/components/oauth-button-group.d.mts +14 -0
- package/dist/components/oauth-button-group.d.ts +14 -0
- package/dist/components/oauth-button-group.js +43 -0
- package/dist/components/oauth-button-group.js.map +1 -0
- package/dist/components/oauth-button.d.mts +8 -0
- package/dist/components/oauth-button.d.ts +8 -0
- package/dist/components/oauth-button.js +210 -0
- package/dist/components/oauth-button.js.map +1 -0
- package/dist/components/passkey-button.d.mts +7 -0
- package/dist/components/passkey-button.d.ts +7 -0
- package/dist/components/passkey-button.js +58 -0
- package/dist/components/passkey-button.js.map +1 -0
- package/dist/components/profile-image-editor.d.mts +11 -0
- package/dist/components/profile-image-editor.d.ts +11 -0
- package/dist/components/profile-image-editor.js +162 -0
- package/dist/components/profile-image-editor.js.map +1 -0
- package/dist/components/selected-team-switcher.d.mts +21 -0
- package/dist/components/selected-team-switcher.d.ts +21 -0
- package/dist/components/selected-team-switcher.js +119 -0
- package/dist/components/selected-team-switcher.js.map +1 -0
- package/dist/components/team-icon.d.mts +18 -0
- package/dist/components/team-icon.d.ts +18 -0
- package/dist/components/team-icon.js +39 -0
- package/dist/components/team-icon.js.map +1 -0
- package/dist/components/user-button.d.mts +15 -0
- package/dist/components/user-button.d.ts +15 -0
- package/dist/components/user-button.js +120 -0
- package/dist/components/user-button.js.map +1 -0
- package/dist/components-page/account-settings.d.mts +24 -0
- package/dist/components-page/account-settings.d.ts +24 -0
- package/dist/components-page/account-settings.js +1095 -0
- package/dist/components-page/account-settings.js.map +1 -0
- package/dist/components-page/auth-page.d.mts +24 -0
- package/dist/components-page/auth-page.d.ts +24 -0
- package/dist/components-page/auth-page.js +123 -0
- package/dist/components-page/auth-page.js.map +1 -0
- package/dist/components-page/email-verification.d.mts +8 -0
- package/dist/components-page/email-verification.d.ts +8 -0
- package/dist/components-page/email-verification.js +100 -0
- package/dist/components-page/email-verification.js.map +1 -0
- package/dist/components-page/error-page.d.mts +8 -0
- package/dist/components-page/error-page.d.ts +8 -0
- package/dist/components-page/error-page.js +97 -0
- package/dist/components-page/error-page.js.map +1 -0
- package/dist/components-page/forgot-password.d.mts +10 -0
- package/dist/components-page/forgot-password.d.ts +10 -0
- package/dist/components-page/forgot-password.js +117 -0
- package/dist/components-page/forgot-password.js.map +1 -0
- package/dist/components-page/magic-link-callback.d.mts +8 -0
- package/dist/components-page/magic-link-callback.d.ts +8 -0
- package/dist/components-page/magic-link-callback.js +110 -0
- package/dist/components-page/magic-link-callback.js.map +1 -0
- package/dist/components-page/oauth-callback.d.mts +7 -0
- package/dist/components-page/oauth-callback.d.ts +7 -0
- package/dist/components-page/oauth-callback.js +75 -0
- package/dist/components-page/oauth-callback.js.map +1 -0
- package/dist/components-page/password-reset.d.mts +12 -0
- package/dist/components-page/password-reset.d.ts +12 -0
- package/dist/components-page/password-reset.js +179 -0
- package/dist/components-page/password-reset.js.map +1 -0
- package/dist/components-page/sign-in.d.mts +10 -0
- package/dist/components-page/sign-in.d.ts +10 -0
- package/dist/components-page/sign-in.js +44 -0
- package/dist/components-page/sign-in.js.map +1 -0
- package/dist/components-page/sign-out.d.mts +7 -0
- package/dist/components-page/sign-out.d.ts +7 -0
- package/dist/components-page/sign-out.js +57 -0
- package/dist/components-page/sign-out.js.map +1 -0
- package/dist/components-page/sign-up.d.mts +11 -0
- package/dist/components-page/sign-up.d.ts +11 -0
- package/dist/components-page/sign-up.js +47 -0
- package/dist/components-page/sign-up.js.map +1 -0
- package/dist/components-page/stack-handler.d.mts +51 -0
- package/dist/components-page/stack-handler.d.ts +51 -0
- package/dist/components-page/stack-handler.js +244 -0
- package/dist/components-page/stack-handler.js.map +1 -0
- package/dist/components-page/team-creation.d.mts +7 -0
- package/dist/components-page/team-creation.d.ts +7 -0
- package/dist/components-page/team-creation.js +92 -0
- package/dist/components-page/team-creation.js.map +1 -0
- package/dist/components-page/team-invitation.d.mts +8 -0
- package/dist/components-page/team-invitation.d.ts +8 -0
- package/dist/components-page/team-invitation.js +144 -0
- package/dist/components-page/team-invitation.js.map +1 -0
- package/dist/esm/components/credential-sign-in.js +79 -0
- package/dist/esm/components/credential-sign-in.js.map +1 -0
- package/dist/esm/components/credential-sign-up.js +104 -0
- package/dist/esm/components/credential-sign-up.js.map +1 -0
- package/dist/esm/components/elements/form-warning.js +15 -0
- package/dist/esm/components/elements/form-warning.js.map +1 -0
- package/dist/esm/components/elements/maybe-full-page.js +50 -0
- package/dist/esm/components/elements/maybe-full-page.js.map +1 -0
- package/dist/esm/components/elements/separator-with-text.js +17 -0
- package/dist/esm/components/elements/separator-with-text.js.map +1 -0
- package/dist/esm/components/elements/sidebar-layout.js +102 -0
- package/dist/esm/components/elements/sidebar-layout.js.map +1 -0
- package/dist/esm/components/elements/ssr-layout-effect.js +23 -0
- package/dist/esm/components/elements/ssr-layout-effect.js.map +1 -0
- package/dist/esm/components/elements/user-avatar.js +16 -0
- package/dist/esm/components/elements/user-avatar.js.map +1 -0
- package/dist/esm/components/iframe-preventer.js +28 -0
- package/dist/esm/components/iframe-preventer.js.map +1 -0
- package/dist/esm/components/link.js +26 -0
- package/dist/esm/components/link.js.map +1 -0
- package/dist/esm/components/magic-link-sign-in.js +127 -0
- package/dist/esm/components/magic-link-sign-in.js.map +1 -0
- package/dist/esm/components/message-cards/known-error-message-card.js +37 -0
- package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -0
- package/dist/esm/components/message-cards/message-card.js +21 -0
- package/dist/esm/components/message-cards/message-card.js.map +1 -0
- package/dist/esm/components/message-cards/predefined-message-card.js +83 -0
- package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -0
- package/dist/esm/components/oauth-button-group.js +19 -0
- package/dist/esm/components/oauth-button-group.js.map +1 -0
- package/dist/esm/components/oauth-button.js +176 -0
- package/dist/esm/components/oauth-button.js.map +1 -0
- package/dist/esm/components/passkey-button.js +34 -0
- package/dist/esm/components/passkey-button.js.map +1 -0
- package/dist/esm/components/profile-image-editor.js +126 -0
- package/dist/esm/components/profile-image-editor.js.map +1 -0
- package/dist/esm/components/selected-team-switcher.js +107 -0
- package/dist/esm/components/selected-team-switcher.js.map +1 -0
- package/dist/esm/components/team-icon.js +14 -0
- package/dist/esm/components/team-icon.js.map +1 -0
- package/dist/esm/components/user-button.js +96 -0
- package/dist/esm/components/user-button.js.map +1 -0
- package/dist/esm/components-page/account-settings.js +1058 -0
- package/dist/esm/components-page/account-settings.js.map +1 -0
- package/dist/esm/components-page/auth-page.js +99 -0
- package/dist/esm/components-page/auth-page.js.map +1 -0
- package/dist/esm/components-page/email-verification.js +66 -0
- package/dist/esm/components-page/email-verification.js.map +1 -0
- package/dist/esm/components-page/error-page.js +73 -0
- package/dist/esm/components-page/error-page.js.map +1 -0
- package/dist/esm/components-page/forgot-password.js +92 -0
- package/dist/esm/components-page/forgot-password.js.map +1 -0
- package/dist/esm/components-page/magic-link-callback.js +76 -0
- package/dist/esm/components-page/magic-link-callback.js.map +1 -0
- package/dist/esm/components-page/oauth-callback.js +51 -0
- package/dist/esm/components-page/oauth-callback.js.map +1 -0
- package/dist/esm/components-page/password-reset.js +145 -0
- package/dist/esm/components-page/password-reset.js.map +1 -0
- package/dist/esm/components-page/sign-in.js +19 -0
- package/dist/esm/components-page/sign-in.js.map +1 -0
- package/dist/esm/components-page/sign-out.js +23 -0
- package/dist/esm/components-page/sign-out.js.map +1 -0
- package/dist/esm/components-page/sign-up.js +23 -0
- package/dist/esm/components-page/sign-up.js.map +1 -0
- package/dist/esm/components-page/stack-handler.js +223 -0
- package/dist/esm/components-page/stack-handler.js.map +1 -0
- package/dist/esm/components-page/team-creation.js +68 -0
- package/dist/esm/components-page/team-creation.js.map +1 -0
- package/dist/esm/components-page/team-invitation.js +110 -0
- package/dist/esm/components-page/team-invitation.js.map +1 -0
- package/dist/esm/generated/global-css.js +6 -0
- package/dist/esm/generated/global-css.js.map +1 -0
- package/dist/esm/generated/quetzal-translations.js +2397 -0
- package/dist/esm/generated/quetzal-translations.js.map +1 -0
- package/dist/esm/global.d.js +1 -0
- package/dist/esm/global.d.js.map +1 -0
- package/dist/esm/index.js +46 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/auth.js +98 -0
- package/dist/esm/lib/auth.js.map +1 -0
- package/dist/esm/lib/cookie.js +244 -0
- package/dist/esm/lib/cookie.js.map +1 -0
- package/dist/esm/lib/hooks.js +30 -0
- package/dist/esm/lib/hooks.js.map +1 -0
- package/dist/esm/lib/stack-app.js +2398 -0
- package/dist/esm/lib/stack-app.js.map +1 -0
- package/dist/esm/lib/translations.js +23 -0
- package/dist/esm/lib/translations.js.map +1 -0
- package/dist/esm/providers/stack-provider-client.js +29 -0
- package/dist/esm/providers/stack-provider-client.js.map +1 -0
- package/dist/esm/providers/stack-provider.js +25 -0
- package/dist/esm/providers/stack-provider.js.map +1 -0
- package/dist/esm/providers/theme-provider.js +71 -0
- package/dist/esm/providers/theme-provider.js.map +1 -0
- package/dist/esm/providers/translation-provider-client.js +18 -0
- package/dist/esm/providers/translation-provider-client.js.map +1 -0
- package/dist/esm/providers/translation-provider.js +18 -0
- package/dist/esm/providers/translation-provider.js.map +1 -0
- package/dist/esm/utils/browser-script.js +112 -0
- package/dist/esm/utils/browser-script.js.map +1 -0
- package/dist/esm/utils/constants.js +66 -0
- package/dist/esm/utils/constants.js.map +1 -0
- package/dist/esm/utils/url.js +30 -0
- package/dist/esm/utils/url.js.map +1 -0
- package/dist/generated/global-css.d.mts +3 -0
- package/dist/generated/global-css.d.ts +3 -0
- package/dist/generated/global-css.js +31 -0
- package/dist/generated/global-css.js.map +1 -0
- package/dist/generated/quetzal-translations.d.mts +4 -0
- package/dist/generated/quetzal-translations.d.ts +4 -0
- package/dist/generated/quetzal-translations.js +2423 -0
- package/dist/generated/quetzal-translations.js.map +1 -0
- package/dist/global.d.d.mts +2 -0
- package/dist/global.d.d.ts +2 -0
- package/dist/global.d.js +2 -0
- package/dist/global.d.js.map +1 -0
- package/dist/index.d.mts +41 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.js +103 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth.d.mts +33 -0
- package/dist/lib/auth.d.ts +33 -0
- package/dist/lib/auth.js +125 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/cookie.d.mts +33 -0
- package/dist/lib/cookie.d.ts +33 -0
- package/dist/lib/cookie.js +291 -0
- package/dist/lib/cookie.js.map +1 -0
- package/dist/lib/hooks.d.mts +41 -0
- package/dist/lib/hooks.d.ts +41 -0
- package/dist/lib/hooks.js +56 -0
- package/dist/lib/hooks.js.map +1 -0
- package/dist/lib/stack-app.d.mts +775 -0
- package/dist/lib/stack-app.d.ts +775 -0
- package/dist/lib/stack-app.js +2438 -0
- package/dist/lib/stack-app.js.map +1 -0
- package/dist/lib/translations.d.mts +5 -0
- package/dist/lib/translations.d.ts +5 -0
- package/dist/lib/translations.js +58 -0
- package/dist/lib/translations.js.map +1 -0
- package/dist/providers/stack-provider-client.d.mts +27 -0
- package/dist/providers/stack-provider-client.d.ts +27 -0
- package/dist/providers/stack-provider-client.js +65 -0
- package/dist/providers/stack-provider-client.js.map +1 -0
- package/dist/providers/stack-provider.d.mts +30 -0
- package/dist/providers/stack-provider.d.ts +30 -0
- package/dist/providers/stack-provider.js +46 -0
- package/dist/providers/stack-provider.js.map +1 -0
- package/dist/providers/theme-provider.d.mts +40 -0
- package/dist/providers/theme-provider.d.ts +40 -0
- package/dist/providers/theme-provider.js +105 -0
- package/dist/providers/theme-provider.js.map +1 -0
- package/dist/providers/translation-provider-client.d.mts +14 -0
- package/dist/providers/translation-provider-client.d.ts +14 -0
- package/dist/providers/translation-provider-client.js +43 -0
- package/dist/providers/translation-provider-client.js.map +1 -0
- package/dist/providers/translation-provider.d.mts +10 -0
- package/dist/providers/translation-provider.d.ts +10 -0
- package/dist/providers/translation-provider.js +43 -0
- package/dist/providers/translation-provider.js.map +1 -0
- package/dist/utils/browser-script.d.mts +7 -0
- package/dist/utils/browser-script.d.ts +7 -0
- package/dist/utils/browser-script.js +137 -0
- package/dist/utils/browser-script.js.map +1 -0
- package/dist/utils/constants.d.mts +79 -0
- package/dist/utils/constants.d.ts +79 -0
- package/dist/utils/constants.js +99 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/url.d.mts +4 -0
- package/dist/utils/url.d.ts +4 -0
- package/dist/utils/url.js +56 -0
- package/dist/utils/url.js.map +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// src/providers/stack-provider.tsx
|
|
2
|
+
import { Suspense } from "react";
|
|
3
|
+
import { StackProviderClient, UserSetter } from "./stack-provider-client";
|
|
4
|
+
import { TranslationProvider } from "./translation-provider";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
function UserFetcher(props) {
|
|
7
|
+
const userPromise = props.app.getUser().then((user) => user?.toClientJson() ?? null);
|
|
8
|
+
return /* @__PURE__ */ jsx(UserSetter, { userJsonPromise: userPromise });
|
|
9
|
+
}
|
|
10
|
+
function ReactStackProvider({
|
|
11
|
+
children,
|
|
12
|
+
app,
|
|
13
|
+
lang,
|
|
14
|
+
translationOverrides
|
|
15
|
+
}) {
|
|
16
|
+
return /* @__PURE__ */ jsxs(StackProviderClient, { app, serialized: false, children: [
|
|
17
|
+
/* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(UserFetcher, { app }) }),
|
|
18
|
+
/* @__PURE__ */ jsx(TranslationProvider, { lang, translationOverrides, children })
|
|
19
|
+
] });
|
|
20
|
+
}
|
|
21
|
+
var stack_provider_default = ReactStackProvider;
|
|
22
|
+
export {
|
|
23
|
+
stack_provider_default as default
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=stack-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/providers/stack-provider.tsx"],"sourcesContent":["//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\nimport React, { Suspense } from 'react';\nimport { StackAdminApp, StackClientApp, StackServerApp, stackAppInternalsSymbol } from '../lib/stack-app';\nimport { StackProviderClient, UserSetter } from './stack-provider-client';\nimport { TranslationProvider } from './translation-provider';\n\nfunction UserFetcher(props: { app: StackClientApp<true> }) {\n const userPromise = props.app.getUser().then((user) => user?.toClientJson() ?? null);\n return <UserSetter userJsonPromise={userPromise} />;\n}\n\nfunction ReactStackProvider({\n children,\n app,\n lang,\n translationOverrides,\n}: {\n lang?: React.ComponentProps<typeof TranslationProvider>['lang'],\n /**\n * A mapping of English translations to translated equivalents.\n *\n * These will take priority over the translations from the language specified in the `lang` property. Note that the\n * keys are case-sensitive.\n */\n translationOverrides?: Record<string, string>,\n children: React.ReactNode,\n // list all three types of apps even though server and admin are subclasses of client so it's clear that you can pass any\n app: StackClientApp<true>,\n}) {\n return (\n <StackProviderClient app={app as any} serialized={false}>\n <Suspense fallback={null}>\n <UserFetcher app={app} />\n </Suspense>\n <TranslationProvider lang={lang} translationOverrides={translationOverrides}>\n {children}\n </TranslationProvider>\n </StackProviderClient>\n );\n}\n\nexport default ReactStackProvider;\n"],"mappings":";AAIA,SAAgB,gBAAgB;AAEhC,SAAS,qBAAqB,kBAAkB;AAChD,SAAS,2BAA2B;AAI3B,cAsBL,YAtBK;AAFT,SAAS,YAAY,OAAsC;AACzD,QAAM,cAAc,MAAM,IAAI,QAAQ,EAAE,KAAK,CAAC,SAAS,MAAM,aAAa,KAAK,IAAI;AACnF,SAAO,oBAAC,cAAW,iBAAiB,aAAa;AACnD;AAEA,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAYG;AACD,SACE,qBAAC,uBAAoB,KAAiB,YAAY,OAChD;AAAA,wBAAC,YAAS,UAAU,MAClB,8BAAC,eAAY,KAAU,GACzB;AAAA,IACA,oBAAC,uBAAoB,MAAY,sBAC9B,UACH;AAAA,KACF;AAEJ;AAEA,IAAO,yBAAQ;","names":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
// src/providers/theme-provider.tsx
|
|
5
|
+
import { globalCSS } from "../generated/global-css";
|
|
6
|
+
import { BrowserScript } from "../utils/browser-script";
|
|
7
|
+
import { DEFAULT_THEME } from "../utils/constants";
|
|
8
|
+
import Color from "color";
|
|
9
|
+
import { deindent } from "@stackframe/stack-shared/dist/utils/strings";
|
|
10
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
function convertColorToCSSVars(obj) {
|
|
12
|
+
return Object.fromEntries(Object.entries(obj).map(([key, value]) => {
|
|
13
|
+
const color = Color(value).hsl().array();
|
|
14
|
+
return [
|
|
15
|
+
// Convert camelCase key to dash-case
|
|
16
|
+
key.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`),
|
|
17
|
+
// Convert color to CSS HSL string
|
|
18
|
+
`${color[0]} ${color[1]}% ${color[2]}%`
|
|
19
|
+
];
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
function convertColorsToCSS(theme) {
|
|
23
|
+
const { dark, light, ...rest } = theme;
|
|
24
|
+
const colors = {
|
|
25
|
+
light: { ...convertColorToCSSVars(light), ...rest },
|
|
26
|
+
dark: convertColorToCSSVars(dark)
|
|
27
|
+
};
|
|
28
|
+
function colorsToCSSVars(colors2) {
|
|
29
|
+
return Object.entries(colors2).map((params) => {
|
|
30
|
+
return `--${params[0]}: ${params[1]};
|
|
31
|
+
`;
|
|
32
|
+
}).join("");
|
|
33
|
+
}
|
|
34
|
+
return deindent`
|
|
35
|
+
.stack-scope {
|
|
36
|
+
${colorsToCSSVars(colors.light)}
|
|
37
|
+
}
|
|
38
|
+
html:has(head > [data-stack-theme="dark"]) .stack-scope {
|
|
39
|
+
${colorsToCSSVars(colors.dark)}
|
|
40
|
+
}`;
|
|
41
|
+
}
|
|
42
|
+
function StackTheme({
|
|
43
|
+
theme,
|
|
44
|
+
children,
|
|
45
|
+
nonce
|
|
46
|
+
}) {
|
|
47
|
+
const themeValue = {
|
|
48
|
+
...DEFAULT_THEME,
|
|
49
|
+
...theme,
|
|
50
|
+
dark: { ...DEFAULT_THEME.dark, ...theme?.dark },
|
|
51
|
+
light: { ...DEFAULT_THEME.light, ...theme?.light }
|
|
52
|
+
};
|
|
53
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
54
|
+
/* @__PURE__ */ jsx(BrowserScript, { nonce }),
|
|
55
|
+
/* @__PURE__ */ jsx(
|
|
56
|
+
"style",
|
|
57
|
+
{
|
|
58
|
+
suppressHydrationWarning: true,
|
|
59
|
+
nonce,
|
|
60
|
+
dangerouslySetInnerHTML: {
|
|
61
|
+
__html: globalCSS + "\n" + convertColorsToCSS(themeValue)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
),
|
|
65
|
+
children
|
|
66
|
+
] });
|
|
67
|
+
}
|
|
68
|
+
export {
|
|
69
|
+
StackTheme
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=theme-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/providers/theme-provider.tsx"],"sourcesContent":["'use client';\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\n\nimport React from \"react\";\nimport { globalCSS } from \"../generated/global-css\";\nimport { BrowserScript } from \"../utils/browser-script\";\nimport { DEFAULT_THEME } from \"../utils/constants\";\nimport Color from \"color\";\nimport { deindent } from \"@stackframe/stack-shared/dist/utils/strings\";\n\ntype Colors = {\n background: string,\n foreground: string,\n card: string,\n cardForeground: string,\n popover: string,\n popoverForeground: string,\n primary: string,\n primaryForeground: string,\n secondary: string,\n secondaryForeground: string,\n muted: string,\n mutedForeground: string,\n accent: string,\n accentForeground: string,\n destructive: string,\n destructiveForeground: string,\n border: string,\n input: string,\n ring: string,\n}\n\nexport type Theme = {\n light: Colors,\n dark: Colors,\n radius: string,\n};\n\ntype ThemeConfig = {\n light?: Partial<Colors>,\n dark?: Partial<Colors>,\n} & Partial<Omit<Theme, 'light' | 'dark'>>;\n\nfunction convertColorToCSSVars(obj: Record<string, string>) {\n return Object.fromEntries(Object.entries(obj).map(([key, value]) => {\n const color = Color(value).hsl().array();\n return [\n // Convert camelCase key to dash-case\n key.replace(/[A-Z]/g, m => `-${m.toLowerCase()}`),\n // Convert color to CSS HSL string\n `${color[0]} ${color[1]}% ${color[2]}%`\n ];\n }));\n}\n\nfunction convertColorsToCSS(theme: Theme) {\n const { dark, light, ...rest } = theme;\n const colors = {\n light: { ...convertColorToCSSVars(light), ...rest },\n dark: convertColorToCSSVars(dark),\n };\n\n function colorsToCSSVars(colors: Record<string, string>) {\n return Object.entries(colors).map((params) => {\n return `--${params[0]}: ${params[1]};\\n`;\n }).join('');\n }\n\n return deindent`\n .stack-scope {\n ${colorsToCSSVars(colors.light)}\n }\n html:has(head > [data-stack-theme=\"dark\"]) .stack-scope {\n ${colorsToCSSVars(colors.dark)}\n }`;\n}\n\n\nexport function StackTheme({\n theme,\n children,\n nonce,\n} : {\n theme?: ThemeConfig,\n children?: React.ReactNode,\n nonce?: string,\n}) {\n const themeValue: Theme = {\n ...DEFAULT_THEME,\n ...theme,\n dark: { ...DEFAULT_THEME.dark, ...theme?.dark },\n light: { ...DEFAULT_THEME.light, ...theme?.light },\n };\n\n return (\n <>\n <BrowserScript nonce={nonce} />\n <style\n suppressHydrationWarning // we need this since the nonce can differ between client and server\n nonce={nonce}\n dangerouslySetInnerHTML={{\n __html: globalCSS + \"\\n\" + convertColorsToCSS(themeValue),\n }}\n />\n {children}\n </>\n );\n}\n"],"mappings":";;;AAQA,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,OAAO,WAAW;AAClB,SAAS,gBAAgB;AAuFrB,mBACE,KADF;AApDJ,SAAS,sBAAsB,KAA6B;AAC1D,SAAO,OAAO,YAAY,OAAO,QAAQ,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAClE,UAAM,QAAQ,MAAM,KAAK,EAAE,IAAI,EAAE,MAAM;AACvC,WAAO;AAAA;AAAA,MAEL,IAAI,QAAQ,UAAU,OAAK,IAAI,EAAE,YAAY,CAAC,EAAE;AAAA;AAAA,MAEhD,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;AAAA,IACtC;AAAA,EACF,CAAC,CAAC;AACJ;AAEA,SAAS,mBAAmB,OAAc;AACxC,QAAM,EAAE,MAAM,OAAO,GAAG,KAAK,IAAI;AACjC,QAAM,SAAS;AAAA,IACb,OAAO,EAAE,GAAG,sBAAsB,KAAK,GAAG,GAAG,KAAK;AAAA,IAClD,MAAM,sBAAsB,IAAI;AAAA,EAClC;AAEA,WAAS,gBAAgBA,SAAgC;AACvD,WAAO,OAAO,QAAQA,OAAM,EAAE,IAAI,CAAC,WAAW;AAC5C,aAAO,KAAK,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;AAAA;AAAA,IACrC,CAAC,EAAE,KAAK,EAAE;AAAA,EACZ;AAEA,SAAO;AAAA;AAAA,IAEL,gBAAgB,OAAO,KAAK,CAAC;AAAA;AAAA;AAAA,IAG7B,gBAAgB,OAAO,IAAI,CAAC;AAAA;AAEhC;AAGO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,aAAoB;AAAA,IACxB,GAAG;AAAA,IACH,GAAG;AAAA,IACH,MAAM,EAAE,GAAG,cAAc,MAAM,GAAG,OAAO,KAAK;AAAA,IAC9C,OAAO,EAAE,GAAG,cAAc,OAAO,GAAG,OAAO,MAAM;AAAA,EACnD;AAEA,SACE,iCACE;AAAA,wBAAC,iBAAc,OAAc;AAAA,IAC7B;AAAA,MAAC;AAAA;AAAA,QACC,0BAAwB;AAAA,QACxB;AAAA,QACA,yBAAyB;AAAA,UACvB,QAAQ,YAAY,OAAO,mBAAmB,UAAU;AAAA,QAC1D;AAAA;AAAA,IACF;AAAA,IACC;AAAA,KACH;AAEJ;","names":["colors"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
// src/providers/translation-provider-client.tsx
|
|
5
|
+
import { createContext } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
var TranslationContext = createContext(null);
|
|
8
|
+
function TranslationProviderClient(props) {
|
|
9
|
+
return /* @__PURE__ */ jsx(TranslationContext.Provider, { value: {
|
|
10
|
+
quetzalKeys: props.quetzalKeys,
|
|
11
|
+
quetzalLocale: props.quetzalLocale
|
|
12
|
+
}, children: props.children });
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
TranslationContext,
|
|
16
|
+
TranslationProviderClient
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=translation-provider-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/providers/translation-provider-client.tsx"],"sourcesContent":["\"use client\";\n\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\n\nimport { createContext, useContext } from \"react\";\n\nexport const TranslationContext = createContext<null | {\n quetzalKeys: Map<string, string>,\n quetzalLocale: Map<string, string>,\n}>(null);\n\nexport function TranslationProviderClient(props: {\n children: React.ReactNode,\n quetzalKeys: Map<string, string>,\n quetzalLocale: Map<string, string>,\n}) {\n return (\n <TranslationContext.Provider value={{\n quetzalKeys: props.quetzalKeys,\n quetzalLocale: props.quetzalLocale,\n }}>\n {props.children}\n </TranslationContext.Provider>\n );\n}\n"],"mappings":";;;AAOA,SAAS,qBAAiC;AAatC;AAXG,IAAM,qBAAqB,cAG/B,IAAI;AAEA,SAAS,0BAA0B,OAIvC;AACD,SACE,oBAAC,mBAAmB,UAAnB,EAA4B,OAAO;AAAA,IAClC,aAAa,MAAM;AAAA,IACnB,eAAe,MAAM;AAAA,EACvB,GACG,gBAAM,UACT;AAEJ;","names":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// src/providers/translation-provider.tsx
|
|
2
|
+
import { throwErr } from "@stackframe/stack-shared/dist/utils/errors";
|
|
3
|
+
import { quetzalKeys, quetzalLocales } from "../generated/quetzal-translations";
|
|
4
|
+
import { TranslationProviderClient } from "./translation-provider-client";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
function TranslationProvider({ lang, translationOverrides, children }) {
|
|
7
|
+
const locale = quetzalLocales.get(lang ?? void 0);
|
|
8
|
+
const localeWithOverrides = new Map(locale);
|
|
9
|
+
for (const [orig, override] of Object.entries(translationOverrides ?? {})) {
|
|
10
|
+
const key = quetzalKeys.get(orig) ?? throwErr(new Error(`Invalid translation override: Original key ${JSON.stringify(orig)} not found. Make sure you are passing the correct values into the translationOverrides property of the component.`));
|
|
11
|
+
localeWithOverrides.set(key, override);
|
|
12
|
+
}
|
|
13
|
+
return /* @__PURE__ */ jsx(TranslationProviderClient, { quetzalKeys, quetzalLocale: localeWithOverrides, children });
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
TranslationProvider
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=translation-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/providers/translation-provider.tsx"],"sourcesContent":["//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\nimport { throwErr } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { quetzalKeys, quetzalLocales } from \"../generated/quetzal-translations\";\nimport { TranslationProviderClient } from \"./translation-provider-client\";\n\nexport function TranslationProvider({ lang, translationOverrides, children }: {\n lang: Parameters<typeof quetzalLocales.get>[0] | undefined,\n translationOverrides?: Record<string, string>,\n children: React.ReactNode,\n}) {\n const locale = quetzalLocales.get(lang ?? (undefined as never));\n\n const localeWithOverrides = new Map<string, string>(locale);\n for (const [orig, override] of Object.entries(translationOverrides ?? {})) {\n const key = quetzalKeys.get(orig as never) ?? throwErr(new Error(`Invalid translation override: Original key ${JSON.stringify(orig)} not found. Make sure you are passing the correct values into the translationOverrides property of the component.`));\n localeWithOverrides.set(key, override);\n }\n\n return <TranslationProviderClient quetzalKeys={quetzalKeys} quetzalLocale={localeWithOverrides}>\n {children}\n </TranslationProviderClient>;\n}\n"],"mappings":";AAIA,SAAS,gBAAgB;AACzB,SAAS,aAAa,sBAAsB;AAC5C,SAAS,iCAAiC;AAejC;AAbF,SAAS,oBAAoB,EAAE,MAAM,sBAAsB,SAAS,GAIxE;AACD,QAAM,SAAS,eAAe,IAAI,QAAS,MAAmB;AAE9D,QAAM,sBAAsB,IAAI,IAAoB,MAAM;AAC1D,aAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,wBAAwB,CAAC,CAAC,GAAG;AACzE,UAAM,MAAM,YAAY,IAAI,IAAa,KAAK,SAAS,IAAI,MAAM,8CAA8C,KAAK,UAAU,IAAI,CAAC,mHAAmH,CAAC;AACvP,wBAAoB,IAAI,KAAK,QAAQ;AAAA,EACvC;AAEA,SAAO,oBAAC,6BAA0B,aAA0B,eAAe,qBACxE,UACH;AACF;","names":[]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// src/utils/browser-script.tsx
|
|
2
|
+
import { SsrScript } from "../components/elements/ssr-layout-effect";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
var script = () => {
|
|
5
|
+
const attributes = ["data-joy-color-scheme", "data-mui-color-scheme", "data-theme", "data-color-scheme", "class"];
|
|
6
|
+
const getColorMode = (value) => {
|
|
7
|
+
if (value.includes("dark")) {
|
|
8
|
+
return "dark";
|
|
9
|
+
}
|
|
10
|
+
if (value.includes("light")) {
|
|
11
|
+
return "light";
|
|
12
|
+
}
|
|
13
|
+
return null;
|
|
14
|
+
};
|
|
15
|
+
const setTheme = (mode) => {
|
|
16
|
+
let el = document.getElementById(`--stack-theme-mode`);
|
|
17
|
+
if (!el) {
|
|
18
|
+
el = document.createElement("style");
|
|
19
|
+
el.id = `--stack-theme-mode`;
|
|
20
|
+
el.innerHTML = `/* This tag is used by Stack Auth to set the theme in the browser without causing a hydration error (since React ignores additional tags in the <head>). We later use the \`html:has(head > [data-stack-theme=XYZ])\` selector to apply styles based on the theme. */`;
|
|
21
|
+
document.head.appendChild(el);
|
|
22
|
+
}
|
|
23
|
+
el.setAttribute("data-stack-theme", mode);
|
|
24
|
+
};
|
|
25
|
+
const colorToRGB = (color) => {
|
|
26
|
+
const temp = document.createElement("div");
|
|
27
|
+
temp.style.color = color;
|
|
28
|
+
document.body.appendChild(temp);
|
|
29
|
+
const computedColor = getComputedStyle(temp).color;
|
|
30
|
+
document.body.removeChild(temp);
|
|
31
|
+
const match = computedColor.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
|
|
32
|
+
if (match) {
|
|
33
|
+
return [parseInt(match[1]), parseInt(match[2]), parseInt(match[3])];
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
};
|
|
37
|
+
const rgbToLuma = (rgb) => {
|
|
38
|
+
return (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1e3;
|
|
39
|
+
};
|
|
40
|
+
const copyFromColorScheme = () => {
|
|
41
|
+
const colorScheme = getComputedStyle(document.documentElement).getPropertyValue("color-scheme");
|
|
42
|
+
if (colorScheme) {
|
|
43
|
+
const mode = getColorMode(colorScheme);
|
|
44
|
+
if (mode) {
|
|
45
|
+
setTheme(mode);
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
};
|
|
51
|
+
const copyFromVariables = () => {
|
|
52
|
+
let backgroundColor = getComputedStyle(document.documentElement).getPropertyValue("--background");
|
|
53
|
+
if (backgroundColor) {
|
|
54
|
+
if (/^\d+\s\d+%\s\d+(\.\d+)?%$/.test(backgroundColor)) {
|
|
55
|
+
backgroundColor = `hsl(${backgroundColor})`;
|
|
56
|
+
}
|
|
57
|
+
const rgb = colorToRGB(backgroundColor);
|
|
58
|
+
if (rgb) {
|
|
59
|
+
const luma = rgbToLuma(rgb);
|
|
60
|
+
if (luma < 128) {
|
|
61
|
+
setTheme("dark");
|
|
62
|
+
} else {
|
|
63
|
+
setTheme("light");
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
};
|
|
70
|
+
const copyFromAttributes = () => {
|
|
71
|
+
for (const attributeName of attributes) {
|
|
72
|
+
const colorTheme = document.documentElement.getAttribute(attributeName);
|
|
73
|
+
if (colorTheme) {
|
|
74
|
+
const mode = getColorMode(colorTheme);
|
|
75
|
+
if (mode) {
|
|
76
|
+
setTheme(mode);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
};
|
|
83
|
+
const observer = new MutationObserver((mutations) => {
|
|
84
|
+
mutations.forEach((mutation) => {
|
|
85
|
+
if (copyFromColorScheme()) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (mutation.attributeName && attributes.includes(mutation.attributeName) && copyFromAttributes()) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (copyFromVariables()) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
observer.observe(document.documentElement, {
|
|
97
|
+
attributes: true,
|
|
98
|
+
attributeFilter: attributes
|
|
99
|
+
});
|
|
100
|
+
if (!copyFromColorScheme()) {
|
|
101
|
+
if (!copyFromAttributes()) {
|
|
102
|
+
copyFromVariables();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
function BrowserScript(props) {
|
|
107
|
+
return /* @__PURE__ */ jsx(SsrScript, { nonce: props.nonce, script: `(${script.toString()})()` });
|
|
108
|
+
}
|
|
109
|
+
export {
|
|
110
|
+
BrowserScript
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=browser-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/browser-script.tsx"],"sourcesContent":["//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\n// Note that this script can not import anything from outside as it will be converted to a string and executed in the browser.\n\nimport { SsrScript } from \"../components/elements/ssr-layout-effect\";\n\nconst script = () => {\n const attributes = ['data-joy-color-scheme', 'data-mui-color-scheme', 'data-theme', 'data-color-scheme', 'class'];\n\n const getColorMode = (value: string) => {\n if (value.includes('dark')) {\n return 'dark';\n }\n if (value.includes('light')) {\n return 'light';\n }\n return null;\n };\n\n const setTheme = (mode: 'dark' | 'light') => {\n let el = document.getElementById(`--stack-theme-mode`);\n if (!el) {\n el = document.createElement(\"style\");\n el.id = `--stack-theme-mode`;\n el.innerHTML = `/* This tag is used by Stack Auth to set the theme in the browser without causing a hydration error (since React ignores additional tags in the <head>). We later use the \\`html:has(head > [data-stack-theme=XYZ])\\` selector to apply styles based on the theme. */`;\n document.head.appendChild(el);\n }\n el.setAttribute(\"data-stack-theme\", mode);\n };\n\n const colorToRGB = (color: string): [number, number, number] | null => {\n // Create a temporary element to use for color conversion\n const temp = document.createElement('div');\n temp.style.color = color;\n document.body.appendChild(temp);\n\n // Get the computed style\n const computedColor = getComputedStyle(temp).color;\n document.body.removeChild(temp);\n\n // Parse the RGB values\n const match = computedColor.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\n if (match) {\n return [parseInt(match[1]), parseInt(match[2]), parseInt(match[3])];\n }\n\n return null;\n };\n\n const rgbToLuma = (rgb: [number, number, number]) => {\n return (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n };\n\n const copyFromColorScheme = () => {\n const colorScheme = getComputedStyle(document.documentElement).getPropertyValue('color-scheme');\n\n if (colorScheme) {\n const mode = getColorMode(colorScheme);\n if (mode) {\n setTheme(mode);\n return true;\n }\n }\n return false;\n };\n\n const copyFromVariables = () => {\n let backgroundColor = getComputedStyle(document.documentElement).getPropertyValue('--background');\n if (backgroundColor) {\n // shadcn by default uses the hsl values with the format \"123 45% 6.5%\"\n if (/^\\d+\\s\\d+%\\s\\d+(\\.\\d+)?%$/.test(backgroundColor)) {\n backgroundColor = `hsl(${backgroundColor})`;\n }\n\n // convert backgroundColor to luma and check if it's dark\n const rgb = colorToRGB(backgroundColor);\n if (rgb) {\n const luma = rgbToLuma(rgb);\n if (luma < 128) {\n setTheme('dark');\n } else {\n setTheme('light');\n }\n return true;\n }\n }\n return false;\n };\n\n const copyFromAttributes = () => {\n for (const attributeName of attributes) {\n const colorTheme = document.documentElement.getAttribute(attributeName);\n if (colorTheme) {\n const mode = getColorMode(colorTheme);\n if (mode) {\n setTheme(mode);\n return true;\n }\n }\n }\n return false;\n };\n\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (copyFromColorScheme()) {\n return;\n }\n if (mutation.attributeName && attributes.includes(mutation.attributeName) && copyFromAttributes()) {\n return;\n }\n if (copyFromVariables()) {\n return;\n }\n });\n });\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: attributes,\n });\n\n // Initial check on page load\n if (!copyFromColorScheme()) {\n if (!copyFromAttributes()) {\n copyFromVariables();\n }\n }\n};\n\nexport function BrowserScript(props : { nonce?: string }) {\n return <SsrScript nonce={props.nonce} script={`(${script.toString()})()`}/>;\n}\n"],"mappings":";AAMA,SAAS,iBAAiB;AA+HjB;AA7HT,IAAM,SAAS,MAAM;AACnB,QAAM,aAAa,CAAC,yBAAyB,yBAAyB,cAAc,qBAAqB,OAAO;AAEhH,QAAM,eAAe,CAAC,UAAkB;AACtC,QAAI,MAAM,SAAS,MAAM,GAAG;AAC1B,aAAO;AAAA,IACT;AACA,QAAI,MAAM,SAAS,OAAO,GAAG;AAC3B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,CAAC,SAA2B;AAC3C,QAAI,KAAK,SAAS,eAAe,oBAAoB;AACrD,QAAI,CAAC,IAAI;AACP,WAAK,SAAS,cAAc,OAAO;AACnC,SAAG,KAAK;AACR,SAAG,YAAY;AACf,eAAS,KAAK,YAAY,EAAE;AAAA,IAC9B;AACA,OAAG,aAAa,oBAAoB,IAAI;AAAA,EAC1C;AAEA,QAAM,aAAa,CAAC,UAAmD;AAErE,UAAM,OAAO,SAAS,cAAc,KAAK;AACzC,SAAK,MAAM,QAAQ;AACnB,aAAS,KAAK,YAAY,IAAI;AAG9B,UAAM,gBAAgB,iBAAiB,IAAI,EAAE;AAC7C,aAAS,KAAK,YAAY,IAAI;AAG9B,UAAM,QAAQ,cAAc,MAAM,kCAAkC;AACpE,QAAI,OAAO;AACT,aAAO,CAAC,SAAS,MAAM,CAAC,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC,CAAC;AAAA,IACpE;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,CAAC,QAAkC;AACnD,YAAQ,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,OAAO;AAAA,EACxD;AAEA,QAAM,sBAAsB,MAAM;AAChC,UAAM,cAAc,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,cAAc;AAE9F,QAAI,aAAa;AACf,YAAM,OAAO,aAAa,WAAW;AACrC,UAAI,MAAM;AACR,iBAAS,IAAI;AACb,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,MAAM;AAC9B,QAAI,kBAAkB,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,cAAc;AAChG,QAAI,iBAAiB;AAEnB,UAAI,4BAA4B,KAAK,eAAe,GAAG;AACrD,0BAAkB,OAAO,eAAe;AAAA,MAC1C;AAGA,YAAM,MAAM,WAAW,eAAe;AACtC,UAAI,KAAK;AACP,cAAM,OAAO,UAAU,GAAG;AAC1B,YAAI,OAAO,KAAK;AACd,mBAAS,MAAM;AAAA,QACjB,OAAO;AACL,mBAAS,OAAO;AAAA,QAClB;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,qBAAqB,MAAM;AAC/B,eAAW,iBAAiB,YAAY;AACtC,YAAM,aAAa,SAAS,gBAAgB,aAAa,aAAa;AACtE,UAAI,YAAY;AACd,cAAM,OAAO,aAAa,UAAU;AACpC,YAAI,MAAM;AACR,mBAAS,IAAI;AACb,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,IAAI,iBAAiB,CAAC,cAAc;AACnD,cAAU,QAAQ,CAAC,aAAa;AAC9B,UAAI,oBAAoB,GAAG;AACzB;AAAA,MACF;AACA,UAAI,SAAS,iBAAiB,WAAW,SAAS,SAAS,aAAa,KAAK,mBAAmB,GAAG;AACjG;AAAA,MACF;AACA,UAAI,kBAAkB,GAAG;AACvB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,WAAS,QAAQ,SAAS,iBAAiB;AAAA,IACzC,YAAY;AAAA,IACZ,iBAAiB;AAAA,EACnB,CAAC;AAGD,MAAI,CAAC,oBAAoB,GAAG;AAC1B,QAAI,CAAC,mBAAmB,GAAG;AACzB,wBAAkB;AAAA,IACpB;AAAA,EACF;AACF;AAEO,SAAS,cAAc,OAA4B;AACxD,SAAO,oBAAC,aAAU,OAAO,MAAM,OAAO,QAAQ,IAAI,OAAO,SAAS,CAAC,OAAM;AAC3E;","names":[]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// src/utils/constants.tsx
|
|
2
|
+
var FONT_SIZES = { "xs": "0.75rem", "sm": "0.875rem", "md": "1rem", "lg": "1.125rem", "xl": "1.25rem" };
|
|
3
|
+
var LINE_HEIGHTS = { "xs": "1rem", "sm": "1.25rem", "md": "1.5rem", "lg": "1.75rem", "xl": "2rem" };
|
|
4
|
+
var FONT_FAMILY = 'ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"';
|
|
5
|
+
var PRIMARY_FONT_COLORS = { "dark": "white", "light": "black" };
|
|
6
|
+
var SECONDARY_FONT_COLORS = { "dark": "#a8a8a8", "light": "#737373" };
|
|
7
|
+
var SELECTED_BACKGROUND_COLORS = { "dark": "rgba(255, 255, 255, 0.1)", "light": "rgba(0, 0, 0, 0.04)" };
|
|
8
|
+
var LINK_COLORS = { "dark": "#fff", "light": "#000" };
|
|
9
|
+
var SHADOW = "0 1px 2px 0 rgba(0, 0, 0, 0.05)";
|
|
10
|
+
var DEFAULT_THEME = {
|
|
11
|
+
light: {
|
|
12
|
+
background: "hsl(0 0% 100%)",
|
|
13
|
+
foreground: "hsl(240 10% 3.9%)",
|
|
14
|
+
card: "hsl(0 0% 100%)",
|
|
15
|
+
cardForeground: "hsl(240 10% 3.9%)",
|
|
16
|
+
popover: "hsl(0 0% 100%)",
|
|
17
|
+
popoverForeground: "hsl(240 10% 3.9%)",
|
|
18
|
+
primary: "hsl(240 5.9% 10%)",
|
|
19
|
+
primaryForeground: "hsl(0 0% 98%)",
|
|
20
|
+
secondary: "hsl(240 4.8% 95.9%)",
|
|
21
|
+
secondaryForeground: "hsl(240 5.9% 10%)",
|
|
22
|
+
muted: "hsl(240 4.8% 95.9%)",
|
|
23
|
+
mutedForeground: "hsl(240 3.8% 46.1%)",
|
|
24
|
+
accent: "hsl(240 4.8% 95.9%)",
|
|
25
|
+
accentForeground: "hsl(240 5.9% 10%)",
|
|
26
|
+
destructive: "hsl(0 84.2% 60.2%)",
|
|
27
|
+
destructiveForeground: "hsl(0 0% 98%)",
|
|
28
|
+
border: "hsl(240 5.9% 90%)",
|
|
29
|
+
input: "hsl(240 5.9% 90%)",
|
|
30
|
+
ring: "hsl(240 10% 3.9%)"
|
|
31
|
+
},
|
|
32
|
+
dark: {
|
|
33
|
+
background: "hsl(240 10% 3.9%)",
|
|
34
|
+
foreground: "hsl(0 0% 98%)",
|
|
35
|
+
card: "hsl(240 10% 3.9%)",
|
|
36
|
+
cardForeground: "hsl(0 0% 98%)",
|
|
37
|
+
popover: "hsl(240 10% 3.9%)",
|
|
38
|
+
popoverForeground: "hsl(0 0% 98%)",
|
|
39
|
+
primary: "hsl(0 0% 98%)",
|
|
40
|
+
primaryForeground: "hsl(240 5.9% 10%)",
|
|
41
|
+
secondary: "hsl(240 3.7% 15.9%)",
|
|
42
|
+
secondaryForeground: "hsl(0 0% 98%)",
|
|
43
|
+
muted: "hsl(240 3.7% 15.9%)",
|
|
44
|
+
mutedForeground: "hsl(240 5% 64.9%)",
|
|
45
|
+
accent: "hsl(240 3.7% 15.9%)",
|
|
46
|
+
accentForeground: "hsl(0 0% 98%)",
|
|
47
|
+
destructive: "hsl(0 62.8% 50%)",
|
|
48
|
+
destructiveForeground: "hsl(0 0% 98%)",
|
|
49
|
+
border: "hsl(240 3.7% 15.9%)",
|
|
50
|
+
input: "hsl(240 3.7% 15.9%)",
|
|
51
|
+
ring: "hsl(240 4.9% 83.9%)"
|
|
52
|
+
},
|
|
53
|
+
radius: "0.5rem"
|
|
54
|
+
};
|
|
55
|
+
export {
|
|
56
|
+
DEFAULT_THEME,
|
|
57
|
+
FONT_FAMILY,
|
|
58
|
+
FONT_SIZES,
|
|
59
|
+
LINE_HEIGHTS,
|
|
60
|
+
LINK_COLORS,
|
|
61
|
+
PRIMARY_FONT_COLORS,
|
|
62
|
+
SECONDARY_FONT_COLORS,
|
|
63
|
+
SELECTED_BACKGROUND_COLORS,
|
|
64
|
+
SHADOW
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/constants.tsx"],"sourcesContent":["//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\nexport const FONT_SIZES = { 'xs': '0.75rem', 'sm': '0.875rem', 'md': '1rem', 'lg': '1.125rem', 'xl': '1.25rem' } as const;\nexport const LINE_HEIGHTS = { 'xs': '1rem', 'sm': '1.25rem', 'md': '1.5rem', 'lg': '1.75rem', 'xl': '2rem' } as const;\nexport const FONT_FAMILY = 'ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"';\nexport const PRIMARY_FONT_COLORS = { 'dark': 'white', 'light': 'black' } as const;\nexport const SECONDARY_FONT_COLORS = { 'dark': '#a8a8a8', 'light': '#737373' } as const;\nexport const SELECTED_BACKGROUND_COLORS = { 'dark': 'rgba(255, 255, 255, 0.1)', 'light': 'rgba(0, 0, 0, 0.04)' } as const;\nexport const LINK_COLORS = { 'dark': '#fff', 'light': '#000' } as const;\nexport const SHADOW = '0 1px 2px 0 rgba(0, 0, 0, 0.05)';\n\nexport const DEFAULT_THEME = {\n light: {\n background: 'hsl(0 0% 100%)',\n foreground: 'hsl(240 10% 3.9%)',\n card: 'hsl(0 0% 100%)',\n cardForeground: 'hsl(240 10% 3.9%)',\n popover: 'hsl(0 0% 100%)',\n popoverForeground: 'hsl(240 10% 3.9%)',\n primary: 'hsl(240 5.9% 10%)',\n primaryForeground: 'hsl(0 0% 98%)',\n secondary: 'hsl(240 4.8% 95.9%)',\n secondaryForeground: 'hsl(240 5.9% 10%)',\n muted: 'hsl(240 4.8% 95.9%)',\n mutedForeground: 'hsl(240 3.8% 46.1%)',\n accent: 'hsl(240 4.8% 95.9%)',\n accentForeground: 'hsl(240 5.9% 10%)',\n destructive: 'hsl(0 84.2% 60.2%)',\n destructiveForeground: 'hsl(0 0% 98%)',\n border: 'hsl(240 5.9% 90%)',\n input: 'hsl(240 5.9% 90%)',\n ring: 'hsl(240 10% 3.9%)',\n },\n dark: {\n background: 'hsl(240 10% 3.9%)',\n foreground: 'hsl(0 0% 98%)',\n card: 'hsl(240 10% 3.9%)',\n cardForeground: 'hsl(0 0% 98%)',\n popover: 'hsl(240 10% 3.9%)',\n popoverForeground: 'hsl(0 0% 98%)',\n primary: 'hsl(0 0% 98%)',\n primaryForeground: 'hsl(240 5.9% 10%)',\n secondary: 'hsl(240 3.7% 15.9%)',\n secondaryForeground: 'hsl(0 0% 98%)',\n muted: 'hsl(240 3.7% 15.9%)',\n mutedForeground: 'hsl(240 5% 64.9%)',\n accent: 'hsl(240 3.7% 15.9%)',\n accentForeground: 'hsl(0 0% 98%)',\n destructive: 'hsl(0 62.8% 50%)',\n destructiveForeground: 'hsl(0 0% 98%)',\n border: 'hsl(240 3.7% 15.9%)',\n input: 'hsl(240 3.7% 15.9%)',\n ring: 'hsl(240 4.9% 83.9%)',\n },\n radius: '0.5rem',\n} as const;\n"],"mappings":";AAIO,IAAM,aAAa,EAAE,MAAM,WAAW,MAAM,YAAY,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;AACxG,IAAM,eAAe,EAAE,MAAM,QAAQ,MAAM,WAAW,MAAM,UAAU,MAAM,WAAW,MAAM,OAAO;AACpG,IAAM,cAAc;AACpB,IAAM,sBAAsB,EAAE,QAAQ,SAAS,SAAS,QAAQ;AAChE,IAAM,wBAAwB,EAAE,QAAQ,WAAW,SAAS,UAAU;AACtE,IAAM,6BAA6B,EAAE,QAAQ,4BAA4B,SAAS,sBAAsB;AACxG,IAAM,cAAc,EAAE,QAAQ,QAAQ,SAAS,OAAO;AACtD,IAAM,SAAS;AAEf,IAAM,gBAAgB;AAAA,EAC3B,OAAO;AAAA,IACL,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,qBAAqB;AAAA,IACrB,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,uBAAuB;AAAA,IACvB,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACJ,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,qBAAqB;AAAA,IACrB,OAAO;AAAA,IACP,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,uBAAuB;AAAA,IACvB,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA,QAAQ;AACV;","names":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// src/utils/url.ts
|
|
2
|
+
function autoRedirect() {
|
|
3
|
+
const url = new URL(window.location.href);
|
|
4
|
+
const redirectUrl = url.searchParams.get("auto-redirect-url");
|
|
5
|
+
if (redirectUrl) {
|
|
6
|
+
const urlObject = new URL(redirectUrl);
|
|
7
|
+
if (urlObject.origin !== window.location.origin) {
|
|
8
|
+
throw new Error("auto-redirect-url is not same origin (" + urlObject.origin + " !== " + window.location.origin + ")");
|
|
9
|
+
}
|
|
10
|
+
url.searchParams.delete("auto-redirect-url");
|
|
11
|
+
window.location.replace(urlObject.href);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function constructRedirectUrl(redirectUrl) {
|
|
15
|
+
const retainedQueryParams = ["after_auth_return_to"];
|
|
16
|
+
const currentUrl = new URL(window.location.href);
|
|
17
|
+
const url = redirectUrl ? new URL(redirectUrl, window.location.href) : new URL(window.location.href);
|
|
18
|
+
for (const param of retainedQueryParams) {
|
|
19
|
+
if (currentUrl.searchParams.has(param)) {
|
|
20
|
+
url.searchParams.set(param, currentUrl.searchParams.get(param));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
url.hash = "";
|
|
24
|
+
return url.toString();
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
autoRedirect,
|
|
28
|
+
constructRedirectUrl
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/url.ts"],"sourcesContent":["//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\n\nexport function autoRedirect() {\n const url = new URL(window.location.href);\n const redirectUrl = url.searchParams.get(\"auto-redirect-url\");\n if (redirectUrl) {\n const urlObject = new URL(redirectUrl);\n if (urlObject.origin !== window.location.origin) {\n throw new Error(\"auto-redirect-url is not same origin (\" + urlObject.origin + \" !== \" + window.location.origin + \")\");\n }\n url.searchParams.delete(\"auto-redirect-url\");\n window.location.replace(urlObject.href);\n }\n}\n\nexport function constructRedirectUrl(redirectUrl: URL | string | undefined) {\n const retainedQueryParams = [\"after_auth_return_to\"];\n const currentUrl = new URL(window.location.href);\n const url = redirectUrl ? new URL(redirectUrl, window.location.href) : new URL(window.location.href);\n for (const param of retainedQueryParams) {\n if (currentUrl.searchParams.has(param)) {\n url.searchParams.set(param, currentUrl.searchParams.get(param)!);\n }\n }\n url.hash = \"\";\n return url.toString();\n}\n"],"mappings":";AAIO,SAAS,eAAe;AAC7B,QAAM,MAAM,IAAI,IAAI,OAAO,SAAS,IAAI;AACxC,QAAM,cAAc,IAAI,aAAa,IAAI,mBAAmB;AAC5D,MAAI,aAAa;AACf,UAAM,YAAY,IAAI,IAAI,WAAW;AACrC,QAAI,UAAU,WAAW,OAAO,SAAS,QAAQ;AAC/C,YAAM,IAAI,MAAM,2CAA2C,UAAU,SAAS,UAAU,OAAO,SAAS,SAAS,GAAG;AAAA,IACtH;AACA,QAAI,aAAa,OAAO,mBAAmB;AAC3C,WAAO,SAAS,QAAQ,UAAU,IAAI;AAAA,EACxC;AACF;AAEO,SAAS,qBAAqB,aAAuC;AAC1E,QAAM,sBAAsB,CAAC,sBAAsB;AACnD,QAAM,aAAa,IAAI,IAAI,OAAO,SAAS,IAAI;AAC/C,QAAM,MAAM,cAAc,IAAI,IAAI,aAAa,OAAO,SAAS,IAAI,IAAI,IAAI,IAAI,OAAO,SAAS,IAAI;AACnG,aAAW,SAAS,qBAAqB;AACvC,QAAI,WAAW,aAAa,IAAI,KAAK,GAAG;AACtC,UAAI,aAAa,IAAI,OAAO,WAAW,aAAa,IAAI,KAAK,CAAE;AAAA,IACjE;AAAA,EACF;AACA,MAAI,OAAO;AACX,SAAO,IAAI,SAAS;AACtB;","names":[]}
|