@keycloakify/svelte 0.0.1-rc.1
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/LICENSE +21 -0
- package/README.md +50 -0
- package/dist/account/DefaultPage.svelte +42 -0
- package/dist/account/DefaultPage.svelte.d.ts +6 -0
- package/dist/account/KcContext/KcContext.d.ts +1 -0
- package/dist/account/KcContext/KcContext.js +1 -0
- package/dist/account/KcContext/index.d.ts +1 -0
- package/dist/account/KcContext/index.js +1 -0
- package/dist/account/Template.svelte +143 -0
- package/dist/account/Template.svelte.d.ts +6 -0
- package/dist/account/Template.useInitialize.d.ts +12 -0
- package/dist/account/Template.useInitialize.js +19 -0
- package/dist/account/TemplateProps.d.ts +12 -0
- package/dist/account/TemplateProps.js +1 -0
- package/dist/account/i18n/i18n.d.ts +15 -0
- package/dist/account/i18n/i18n.js +1 -0
- package/dist/account/i18n/i18nBuilder.d.ts +18 -0
- package/dist/account/i18n/i18nBuilder.js +26 -0
- package/dist/account/i18n/index.d.ts +1 -0
- package/dist/account/i18n/index.js +1 -0
- package/dist/account/i18n/useI18n.d.ts +28 -0
- package/dist/account/i18n/useI18n.js +65 -0
- package/dist/account/index.d.ts +2 -0
- package/dist/account/index.js +1 -0
- package/dist/account/pages/Account.svelte +182 -0
- package/dist/account/pages/Account.svelte.d.ts +6 -0
- package/dist/account/pages/Applications.svelte +173 -0
- package/dist/account/pages/Applications.svelte.d.ts +6 -0
- package/dist/account/pages/FederatedIdentity.svelte +114 -0
- package/dist/account/pages/FederatedIdentity.svelte.d.ts +6 -0
- package/dist/account/pages/Log.svelte +68 -0
- package/dist/account/pages/Log.svelte.d.ts +6 -0
- package/dist/account/pages/PageProps.d.ts +10 -0
- package/dist/account/pages/PageProps.js +1 -0
- package/dist/account/pages/Password.svelte +233 -0
- package/dist/account/pages/Password.svelte.d.ts +6 -0
- package/dist/account/pages/Sessions.svelte +88 -0
- package/dist/account/pages/Sessions.svelte.d.ts +6 -0
- package/dist/account/pages/Totp.svelte +287 -0
- package/dist/account/pages/Totp.svelte.d.ts +6 -0
- package/dist/additional-svelte-typings.d.ts +6 -0
- package/dist/bin/197.index.js +13 -0
- package/dist/bin/381.index.js +13 -0
- package/dist/bin/504.index.js +13 -0
- package/dist/bin/87.index.js +13 -0
- package/dist/bin/main.js +230 -0
- package/dist/bin/package.json +3 -0
- package/dist/login/DefaultPage.svelte +135 -0
- package/dist/login/DefaultPage.svelte.d.ts +12 -0
- package/dist/login/KcContext/KcContext.d.ts +1 -0
- package/dist/login/KcContext/KcContext.js +1 -0
- package/dist/login/KcContext/index.d.ts +1 -0
- package/dist/login/KcContext/index.js +1 -0
- package/dist/login/Template.svelte +223 -0
- package/dist/login/Template.svelte.d.ts +6 -0
- package/dist/login/Template.useInitialize.d.ts +14 -0
- package/dist/login/Template.useInitialize.js +55 -0
- package/dist/login/TemplateProps.d.ts +20 -0
- package/dist/login/TemplateProps.js +1 -0
- package/dist/login/components/AddRemoveButtonsMultiValuedAttribute.svelte +57 -0
- package/dist/login/components/AddRemoveButtonsMultiValuedAttribute.svelte.d.ts +18 -0
- package/dist/login/components/FieldErrors.svelte +31 -0
- package/dist/login/components/FieldErrors.svelte.d.ts +12 -0
- package/dist/login/components/GroupLabel.svelte +68 -0
- package/dist/login/components/GroupLabel.svelte.d.ts +15 -0
- package/dist/login/components/InputFieldByType.svelte +58 -0
- package/dist/login/components/InputFieldByType.svelte.d.ts +4 -0
- package/dist/login/components/InputFieldByTypeProps.d.ts +16 -0
- package/dist/login/components/InputFieldByTypeProps.js +1 -0
- package/dist/login/components/InputTag.svelte +107 -0
- package/dist/login/components/InputTag.svelte.d.ts +7 -0
- package/dist/login/components/InputTagSelects.svelte +111 -0
- package/dist/login/components/InputTagSelects.svelte.d.ts +4 -0
- package/dist/login/components/LogoutOtherSessions.svelte +29 -0
- package/dist/login/components/LogoutOtherSessions.svelte.d.ts +10 -0
- package/dist/login/components/PasswordWrapper.svelte +43 -0
- package/dist/login/components/PasswordWrapper.svelte.d.ts +13 -0
- package/dist/login/components/SelectTag.svelte +72 -0
- package/dist/login/components/SelectTag.svelte.d.ts +4 -0
- package/dist/login/components/TermsAcceptance.svelte +56 -0
- package/dist/login/components/TermsAcceptance.svelte.d.ts +13 -0
- package/dist/login/components/TextareaTag.svelte +40 -0
- package/dist/login/components/TextareaTag.svelte.d.ts +4 -0
- package/dist/login/components/UserProfileFormFields.svelte +123 -0
- package/dist/login/components/UserProfileFormFields.svelte.d.ts +6 -0
- package/dist/login/components/UserProfileFormFieldsProps.d.ts +27 -0
- package/dist/login/components/UserProfileFormFieldsProps.js +2 -0
- package/dist/login/components/inputLabel.d.ts +3 -0
- package/dist/login/components/inputLabel.js +12 -0
- package/dist/login/i18n/i18n.d.ts +15 -0
- package/dist/login/i18n/i18n.js +1 -0
- package/dist/login/i18n/i18nBuilder.d.ts +18 -0
- package/dist/login/i18n/i18nBuilder.js +26 -0
- package/dist/login/i18n/index.d.ts +1 -0
- package/dist/login/i18n/index.js +1 -0
- package/dist/login/i18n/useI18n.d.ts +28 -0
- package/dist/login/i18n/useI18n.js +65 -0
- package/dist/login/index.d.ts +2 -0
- package/dist/login/index.js +1 -0
- package/dist/login/lib/useUserProfileForm.d.ts +66 -0
- package/dist/login/lib/useUserProfileForm.js +63 -0
- package/dist/login/pages/Code.svelte +46 -0
- package/dist/login/pages/Code.svelte.d.ts +6 -0
- package/dist/login/pages/DeleteAccountConfirm.svelte +77 -0
- package/dist/login/pages/DeleteAccountConfirm.svelte.d.ts +6 -0
- package/dist/login/pages/DeleteCredential.svelte +58 -0
- package/dist/login/pages/DeleteCredential.svelte.d.ts +6 -0
- package/dist/login/pages/Error.svelte +43 -0
- package/dist/login/pages/Error.svelte.d.ts +6 -0
- package/dist/login/pages/FrontchannelLogout.svelte +57 -0
- package/dist/login/pages/FrontchannelLogout.svelte.d.ts +6 -0
- package/dist/login/pages/IdpReviewUserProfile.svelte +80 -0
- package/dist/login/pages/IdpReviewUserProfile.svelte.d.ts +11 -0
- package/dist/login/pages/Info.svelte +66 -0
- package/dist/login/pages/Info.svelte.d.ts +6 -0
- package/dist/login/pages/Login.svelte +225 -0
- package/dist/login/pages/Login.svelte.d.ts +6 -0
- package/dist/login/pages/LoginConfigTotp.svelte +217 -0
- package/dist/login/pages/LoginConfigTotp.svelte.d.ts +6 -0
- package/dist/login/pages/LoginIdpLinkConfirm.svelte +60 -0
- package/dist/login/pages/LoginIdpLinkConfirm.svelte.d.ts +6 -0
- package/dist/login/pages/LoginIdpLinkConfirmOverride.svelte +59 -0
- package/dist/login/pages/LoginIdpLinkConfirmOverride.svelte.d.ts +6 -0
- package/dist/login/pages/LoginIdpLinkEmail.svelte +50 -0
- package/dist/login/pages/LoginIdpLinkEmail.svelte.d.ts +6 -0
- package/dist/login/pages/LoginOauth2DeviceVerifyUserCode.svelte +85 -0
- package/dist/login/pages/LoginOauth2DeviceVerifyUserCode.svelte.d.ts +6 -0
- package/dist/login/pages/LoginOauthGrant.svelte +126 -0
- package/dist/login/pages/LoginOauthGrant.svelte.d.ts +6 -0
- package/dist/login/pages/LoginOtp.svelte +128 -0
- package/dist/login/pages/LoginOtp.svelte.d.ts +6 -0
- package/dist/login/pages/LoginPageExpired.svelte +50 -0
- package/dist/login/pages/LoginPageExpired.svelte.d.ts +6 -0
- package/dist/login/pages/LoginPasskeysConditionalAuthenticate.svelte +240 -0
- package/dist/login/pages/LoginPasskeysConditionalAuthenticate.svelte.d.ts +6 -0
- package/dist/login/pages/LoginPasskeysConditionalAuthenticate.useScript.d.ts +21 -0
- package/dist/login/pages/LoginPasskeysConditionalAuthenticate.useScript.js +57 -0
- package/dist/login/pages/LoginPassword.svelte +120 -0
- package/dist/login/pages/LoginPassword.svelte.d.ts +6 -0
- package/dist/login/pages/LoginRecoveryAuthnCodeConfig.svelte +179 -0
- package/dist/login/pages/LoginRecoveryAuthnCodeConfig.svelte.d.ts +6 -0
- package/dist/login/pages/LoginRecoveryAuthnCodeConfig.useScript.d.ts +10 -0
- package/dist/login/pages/LoginRecoveryAuthnCodeConfig.useScript.js +141 -0
- package/dist/login/pages/LoginRecoveryAuthnCodeInput.svelte +94 -0
- package/dist/login/pages/LoginRecoveryAuthnCodeInput.svelte.d.ts +6 -0
- package/dist/login/pages/LoginResetOtp.svelte +86 -0
- package/dist/login/pages/LoginResetOtp.svelte.d.ts +6 -0
- package/dist/login/pages/LoginResetPassword.svelte +109 -0
- package/dist/login/pages/LoginResetPassword.svelte.d.ts +6 -0
- package/dist/login/pages/LoginUpdatePassword.svelte +149 -0
- package/dist/login/pages/LoginUpdatePassword.svelte.d.ts +6 -0
- package/dist/login/pages/LoginUpdateProfile.svelte +98 -0
- package/dist/login/pages/LoginUpdateProfile.svelte.d.ts +11 -0
- package/dist/login/pages/LoginUsername.svelte +182 -0
- package/dist/login/pages/LoginUsername.svelte.d.ts +6 -0
- package/dist/login/pages/LoginVerifyEmail.svelte +39 -0
- package/dist/login/pages/LoginVerifyEmail.svelte.d.ts +6 -0
- package/dist/login/pages/LoginX509Info.svelte +123 -0
- package/dist/login/pages/LoginX509Info.svelte.d.ts +6 -0
- package/dist/login/pages/LogoutConfirm.svelte +77 -0
- package/dist/login/pages/LogoutConfirm.svelte.d.ts +6 -0
- package/dist/login/pages/PageProps.d.ts +10 -0
- package/dist/login/pages/PageProps.js +1 -0
- package/dist/login/pages/Register.svelte +136 -0
- package/dist/login/pages/Register.svelte.d.ts +11 -0
- package/dist/login/pages/SamlPostForm.svelte +80 -0
- package/dist/login/pages/SamlPostForm.svelte.d.ts +6 -0
- package/dist/login/pages/SelectAuthenticator.svelte +63 -0
- package/dist/login/pages/SelectAuthenticator.svelte.d.ts +6 -0
- package/dist/login/pages/Terms.svelte +57 -0
- package/dist/login/pages/Terms.svelte.d.ts +6 -0
- package/dist/login/pages/UpdateEmail.svelte +104 -0
- package/dist/login/pages/UpdateEmail.svelte.d.ts +11 -0
- package/dist/login/pages/WebauthnAuthenticate.svelte +182 -0
- package/dist/login/pages/WebauthnAuthenticate.svelte.d.ts +6 -0
- package/dist/login/pages/WebauthnAuthenticate.useScript.d.ts +22 -0
- package/dist/login/pages/WebauthnAuthenticate.useScript.js +49 -0
- package/dist/login/pages/WebauthnError.svelte +86 -0
- package/dist/login/pages/WebauthnError.svelte.d.ts +6 -0
- package/dist/login/pages/WebauthnRegister.svelte +109 -0
- package/dist/login/pages/WebauthnRegister.svelte.d.ts +6 -0
- package/dist/login/pages/WebauthnRegister.useScript.d.ts +28 -0
- package/dist/login/pages/WebauthnRegister.useScript.js +57 -0
- package/dist/tools/useConst.d.ts +1 -0
- package/dist/tools/useConst.js +4 -0
- package/dist/tools/useInsertLinkTags.d.ts +12 -0
- package/dist/tools/useInsertLinkTags.js +62 -0
- package/dist/tools/useInsertScriptTags.d.ts +29 -0
- package/dist/tools/useInsertScriptTags.js +77 -0
- package/dist/tools/useReducer.d.ts +2 -0
- package/dist/tools/useReducer.js +7 -0
- package/dist/tools/useSetClassName.d.ts +4 -0
- package/dist/tools/useSetClassName.js +15 -0
- package/dist/tools/useState.d.ts +2 -0
- package/dist/tools/useState.js +7 -0
- package/package.json +468 -0
- package/src/account/DefaultPage.svelte +42 -0
- package/src/account/KcContext/KcContext.ts +1 -0
- package/src/account/KcContext/index.ts +1 -0
- package/src/account/Template.svelte +143 -0
- package/src/account/Template.useInitialize.ts +32 -0
- package/src/account/TemplateProps.ts +15 -0
- package/src/account/i18n/i18n.ts +18 -0
- package/src/account/i18n/i18nBuilder.ts +101 -0
- package/src/account/i18n/index.ts +1 -0
- package/src/account/i18n/useI18n.ts +140 -0
- package/src/account/index.ts +2 -0
- package/src/account/pages/Account.svelte +182 -0
- package/src/account/pages/Applications.svelte +173 -0
- package/src/account/pages/FederatedIdentity.svelte +114 -0
- package/src/account/pages/Log.svelte +68 -0
- package/src/account/pages/PageProps.ts +11 -0
- package/src/account/pages/Password.svelte +233 -0
- package/src/account/pages/Sessions.svelte +88 -0
- package/src/account/pages/Totp.svelte +287 -0
- package/src/additional-svelte-typings.d.ts +6 -0
- package/src/login/DefaultPage.svelte +135 -0
- package/src/login/KcContext/KcContext.ts +1 -0
- package/src/login/KcContext/index.ts +1 -0
- package/src/login/Template.svelte +223 -0
- package/src/login/Template.useInitialize.ts +72 -0
- package/src/login/TemplateProps.ts +23 -0
- package/src/login/components/AddRemoveButtonsMultiValuedAttribute.svelte +57 -0
- package/src/login/components/FieldErrors.svelte +31 -0
- package/src/login/components/GroupLabel.svelte +68 -0
- package/src/login/components/InputFieldByType.svelte +58 -0
- package/src/login/components/InputFieldByTypeProps.ts +15 -0
- package/src/login/components/InputTag.svelte +107 -0
- package/src/login/components/InputTagSelects.svelte +111 -0
- package/src/login/components/LogoutOtherSessions.svelte +29 -0
- package/src/login/components/PasswordWrapper.svelte +43 -0
- package/src/login/components/SelectTag.svelte +72 -0
- package/src/login/components/TermsAcceptance.svelte +56 -0
- package/src/login/components/TextareaTag.svelte +40 -0
- package/src/login/components/UserProfileFormFields.svelte +123 -0
- package/src/login/components/UserProfileFormFieldsProps.ts +25 -0
- package/src/login/components/inputLabel.ts +19 -0
- package/src/login/i18n/i18n.ts +18 -0
- package/src/login/i18n/i18nBuilder.ts +101 -0
- package/src/login/i18n/index.ts +1 -0
- package/src/login/i18n/useI18n.ts +140 -0
- package/src/login/index.ts +2 -0
- package/src/login/lib/useUserProfileForm.ts +166 -0
- package/src/login/pages/Code.svelte +46 -0
- package/src/login/pages/DeleteAccountConfirm.svelte +77 -0
- package/src/login/pages/DeleteCredential.svelte +58 -0
- package/src/login/pages/Error.svelte +43 -0
- package/src/login/pages/FrontchannelLogout.svelte +57 -0
- package/src/login/pages/IdpReviewUserProfile.svelte +80 -0
- package/src/login/pages/Info.svelte +66 -0
- package/src/login/pages/Login.svelte +225 -0
- package/src/login/pages/LoginConfigTotp.svelte +217 -0
- package/src/login/pages/LoginIdpLinkConfirm.svelte +60 -0
- package/src/login/pages/LoginIdpLinkConfirmOverride.svelte +59 -0
- package/src/login/pages/LoginIdpLinkEmail.svelte +50 -0
- package/src/login/pages/LoginOauth2DeviceVerifyUserCode.svelte +85 -0
- package/src/login/pages/LoginOauthGrant.svelte +126 -0
- package/src/login/pages/LoginOtp.svelte +128 -0
- package/src/login/pages/LoginPageExpired.svelte +50 -0
- package/src/login/pages/LoginPasskeysConditionalAuthenticate.svelte +240 -0
- package/src/login/pages/LoginPasskeysConditionalAuthenticate.useScript.ts +82 -0
- package/src/login/pages/LoginPassword.svelte +120 -0
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.svelte +179 -0
- package/src/login/pages/LoginRecoveryAuthnCodeConfig.useScript.ts +157 -0
- package/src/login/pages/LoginRecoveryAuthnCodeInput.svelte +94 -0
- package/src/login/pages/LoginResetOtp.svelte +86 -0
- package/src/login/pages/LoginResetPassword.svelte +109 -0
- package/src/login/pages/LoginUpdatePassword.svelte +149 -0
- package/src/login/pages/LoginUpdateProfile.svelte +98 -0
- package/src/login/pages/LoginUsername.svelte +182 -0
- package/src/login/pages/LoginVerifyEmail.svelte +39 -0
- package/src/login/pages/LoginX509Info.svelte +123 -0
- package/src/login/pages/LogoutConfirm.svelte +77 -0
- package/src/login/pages/PageProps.ts +11 -0
- package/src/login/pages/Register.svelte +136 -0
- package/src/login/pages/SamlPostForm.svelte +80 -0
- package/src/login/pages/SelectAuthenticator.svelte +63 -0
- package/src/login/pages/Terms.svelte +57 -0
- package/src/login/pages/UpdateEmail.svelte +104 -0
- package/src/login/pages/WebauthnAuthenticate.svelte +182 -0
- package/src/login/pages/WebauthnAuthenticate.useScript.ts +74 -0
- package/src/login/pages/WebauthnError.svelte +86 -0
- package/src/login/pages/WebauthnRegister.svelte +109 -0
- package/src/login/pages/WebauthnRegister.useScript.ts +107 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NOTE: The component that use this hook can only be mounded once!
|
|
3
|
+
* And can't rerender with different hrefs.
|
|
4
|
+
* If it's mounted again the page will be reloaded.
|
|
5
|
+
* This simulates the behavior of a server rendered page that imports css stylesheet in the head.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useInsertLinkTags(params: {
|
|
8
|
+
componentOrHookName: string;
|
|
9
|
+
hrefs: string[];
|
|
10
|
+
}): {
|
|
11
|
+
areAllStyleSheetsLoaded: import("svelte/store").Readable<boolean>;
|
|
12
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { onMount } from 'svelte';
|
|
2
|
+
import { id } from 'tsafe/id';
|
|
3
|
+
import { useConst } from './useConst';
|
|
4
|
+
import { useReducer } from './useReducer';
|
|
5
|
+
const alreadyMountedComponentOrHookNames = new Set();
|
|
6
|
+
/**
|
|
7
|
+
* NOTE: The component that use this hook can only be mounded once!
|
|
8
|
+
* And can't rerender with different hrefs.
|
|
9
|
+
* If it's mounted again the page will be reloaded.
|
|
10
|
+
* This simulates the behavior of a server rendered page that imports css stylesheet in the head.
|
|
11
|
+
*/
|
|
12
|
+
export function useInsertLinkTags(params) {
|
|
13
|
+
const { hrefs, componentOrHookName } = params;
|
|
14
|
+
onMount(() => {
|
|
15
|
+
const isAlreadyMounted = alreadyMountedComponentOrHookNames.has(componentOrHookName);
|
|
16
|
+
if (isAlreadyMounted) {
|
|
17
|
+
reload: {
|
|
18
|
+
if (new URL(window.location.href).searchParams.get('viewMode') === 'docs') {
|
|
19
|
+
// NOTE: Special case for Storybook, we want to avoid infinite reload loop.
|
|
20
|
+
break reload;
|
|
21
|
+
}
|
|
22
|
+
window.location.reload();
|
|
23
|
+
}
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
alreadyMountedComponentOrHookNames.add(componentOrHookName);
|
|
27
|
+
});
|
|
28
|
+
const [areAllStyleSheetsLoaded, setAllStyleSheetsLoaded] = useReducer(() => true, false);
|
|
29
|
+
const refPrAllStyleSheetLoaded = useConst(() => ({
|
|
30
|
+
current: id(undefined),
|
|
31
|
+
}));
|
|
32
|
+
onMount(() => {
|
|
33
|
+
let isActive = true;
|
|
34
|
+
(refPrAllStyleSheetLoaded.current ??= (async () => {
|
|
35
|
+
let lastMountedHtmlElement = undefined;
|
|
36
|
+
const prs = [];
|
|
37
|
+
for (const href of hrefs) {
|
|
38
|
+
const htmlElement = document.createElement('link');
|
|
39
|
+
prs.push(new Promise((resolve) => htmlElement.addEventListener('load', () => resolve())));
|
|
40
|
+
htmlElement.rel = 'stylesheet';
|
|
41
|
+
htmlElement.href = href;
|
|
42
|
+
if (lastMountedHtmlElement !== undefined) {
|
|
43
|
+
lastMountedHtmlElement.insertAdjacentElement('afterend', htmlElement);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
document.head.prepend(htmlElement);
|
|
47
|
+
}
|
|
48
|
+
lastMountedHtmlElement = htmlElement;
|
|
49
|
+
}
|
|
50
|
+
await Promise.all(prs);
|
|
51
|
+
})()).then(() => {
|
|
52
|
+
if (!isActive) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
setAllStyleSheetsLoaded();
|
|
56
|
+
});
|
|
57
|
+
return () => {
|
|
58
|
+
isActive = false;
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
return { areAllStyleSheetsLoaded };
|
|
62
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type ScriptTag = ScriptTag.TextContent | ScriptTag.Src;
|
|
2
|
+
export declare namespace ScriptTag {
|
|
3
|
+
type Common = {
|
|
4
|
+
type: 'text/javascript' | 'module';
|
|
5
|
+
};
|
|
6
|
+
export type TextContent = Common & {
|
|
7
|
+
textContent: string | (() => string);
|
|
8
|
+
};
|
|
9
|
+
export type Src = Common & {
|
|
10
|
+
src: string;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* NOTE: The component that use this hook can only be mounded once!
|
|
16
|
+
* And can't rerender with different scriptTags.
|
|
17
|
+
* If it's mounted again the page will be reloaded.
|
|
18
|
+
* This simulates the behavior of a server rendered page that imports javascript in the head.
|
|
19
|
+
*
|
|
20
|
+
* The returned function is supposed to be called in a useEffect and
|
|
21
|
+
* will not download the scripts multiple times event if called more than once (react strict mode).
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
export declare function useInsertScriptTags(params: {
|
|
25
|
+
componentOrHookName: string;
|
|
26
|
+
scriptTags: ScriptTag[];
|
|
27
|
+
}): {
|
|
28
|
+
insertScriptTags: () => void;
|
|
29
|
+
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-namespace */
|
|
2
|
+
import { onMount } from 'svelte';
|
|
3
|
+
import { assert } from 'tsafe/assert';
|
|
4
|
+
const alreadyMountedComponentOrHookNames = new Set();
|
|
5
|
+
/**
|
|
6
|
+
* NOTE: The component that use this hook can only be mounded once!
|
|
7
|
+
* And can't rerender with different scriptTags.
|
|
8
|
+
* If it's mounted again the page will be reloaded.
|
|
9
|
+
* This simulates the behavior of a server rendered page that imports javascript in the head.
|
|
10
|
+
*
|
|
11
|
+
* The returned function is supposed to be called in a useEffect and
|
|
12
|
+
* will not download the scripts multiple times event if called more than once (react strict mode).
|
|
13
|
+
*
|
|
14
|
+
*/
|
|
15
|
+
export function useInsertScriptTags(params) {
|
|
16
|
+
const { scriptTags, componentOrHookName } = params;
|
|
17
|
+
onMount(() => {
|
|
18
|
+
const isAlreadyMounted = alreadyMountedComponentOrHookNames.has(componentOrHookName);
|
|
19
|
+
if (isAlreadyMounted) {
|
|
20
|
+
reload: {
|
|
21
|
+
if (new URL(window.location.href).searchParams.get('viewMode') === 'docs') {
|
|
22
|
+
// NOTE: Special case for Storybook, we want to avoid infinite reload loop.
|
|
23
|
+
break reload;
|
|
24
|
+
}
|
|
25
|
+
window.location.reload();
|
|
26
|
+
}
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
alreadyMountedComponentOrHookNames.add(componentOrHookName);
|
|
30
|
+
});
|
|
31
|
+
let areScriptsInserted = false;
|
|
32
|
+
const insertScriptTags = () => {
|
|
33
|
+
if (areScriptsInserted) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
scriptTags.forEach((scriptTag) => {
|
|
37
|
+
// NOTE: Avoid loading same script twice. (Like jQuery for example)
|
|
38
|
+
{
|
|
39
|
+
const scripts = document.getElementsByTagName('script');
|
|
40
|
+
for (let i = 0; i < scripts.length; i++) {
|
|
41
|
+
const script = scripts[i];
|
|
42
|
+
if ('textContent' in scriptTag) {
|
|
43
|
+
const textContent = typeof scriptTag.textContent === 'function' ? scriptTag.textContent() : scriptTag.textContent;
|
|
44
|
+
if (script.textContent === textContent) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if ('src' in scriptTag) {
|
|
50
|
+
if (script.getAttribute('src') === scriptTag.src) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
assert(false);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const htmlElement = document.createElement('script');
|
|
59
|
+
htmlElement.type = scriptTag.type;
|
|
60
|
+
(() => {
|
|
61
|
+
if ('textContent' in scriptTag) {
|
|
62
|
+
const textContent = typeof scriptTag.textContent === 'function' ? scriptTag.textContent() : scriptTag.textContent;
|
|
63
|
+
htmlElement.textContent = textContent;
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if ('src' in scriptTag) {
|
|
67
|
+
htmlElement.src = scriptTag.src;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
assert(false);
|
|
71
|
+
})();
|
|
72
|
+
document.head.appendChild(htmlElement);
|
|
73
|
+
});
|
|
74
|
+
areScriptsInserted = true;
|
|
75
|
+
};
|
|
76
|
+
return { insertScriptTags };
|
|
77
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { derived, writable } from 'svelte/store';
|
|
2
|
+
export const useReducer = (reducer, initialState) => {
|
|
3
|
+
const state = writable(initialState);
|
|
4
|
+
const dispatch = (action) => state.update((currentState) => reducer(currentState, action));
|
|
5
|
+
const readableState = derived(state, ($state) => $state);
|
|
6
|
+
return [readableState, dispatch];
|
|
7
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { onMount } from 'svelte';
|
|
2
|
+
export function useSetClassName(params) {
|
|
3
|
+
const { qualifiedName, className } = params;
|
|
4
|
+
onMount(() => {
|
|
5
|
+
if (className && className !== '') {
|
|
6
|
+
const htmlClassList = document.getElementsByTagName(qualifiedName)[0].classList;
|
|
7
|
+
const tokens = className.split(' ');
|
|
8
|
+
htmlClassList.add(...tokens);
|
|
9
|
+
// Clean up when the component is destroyed
|
|
10
|
+
return () => {
|
|
11
|
+
htmlClassList.remove(...tokens);
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { derived, writable } from 'svelte/store';
|
|
2
|
+
export const useState = (initialState) => {
|
|
3
|
+
const state = writable(initialState);
|
|
4
|
+
const dispatch = (newState) => state.set(newState);
|
|
5
|
+
const readableState = derived(state, ($state) => $state);
|
|
6
|
+
return [readableState, dispatch];
|
|
7
|
+
};
|