@superrb/react-addons 3.0.0-1 → 3.0.0-10
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/actions.d.ts +6 -0
- package/actions.d.ts.map +1 -0
- package/actions.js +18 -0
- package/components/button.d.ts +1 -1
- package/components/context-wrapper.d.ts.map +1 -1
- package/components/context-wrapper.js +1 -2
- package/components/cookie-banner.d.ts +15 -15
- package/components/cookie-banner.d.ts.map +1 -1
- package/components/cookie-banner.js +5 -5
- package/components/form/field.d.ts.map +1 -1
- package/components/form/field.js +3 -0
- package/components/form/submit-button.d.ts +1 -1
- package/components/form/submit-button.d.ts.map +1 -1
- package/components/form.d.ts +1 -1
- package/components/form.d.ts.map +1 -1
- package/components/form.js +27 -18
- package/components/menu-toggle.d.ts.map +1 -1
- package/components/menu-toggle.js +3 -3
- package/components/modal.js +3 -3
- package/components/slideshow-buttons.d.ts +9 -0
- package/components/slideshow-buttons.d.ts.map +1 -0
- package/components/slideshow-buttons.js +6 -0
- package/components.d.ts +2 -1
- package/components.d.ts.map +1 -1
- package/components.js +2 -1
- package/context/cookies-context-provider.d.ts +13 -0
- package/context/cookies-context-provider.d.ts.map +1 -0
- package/context/cookies-context-provider.js +54 -0
- package/context/modal-context-provider.d.ts +13 -0
- package/context/modal-context-provider.d.ts.map +1 -0
- package/context/modal-context-provider.js +31 -0
- package/context/nav-context-provider.js +26 -0
- package/context.d.ts +2 -1
- package/context.d.ts.map +1 -1
- package/context.js +2 -1
- package/hooks/use-async.d.ts.map +1 -1
- package/hooks/use-draggable-scroll.d.ts.map +1 -1
- package/hooks/use-event-listener.d.ts +1 -1
- package/hooks/use-event-listener.d.ts.map +1 -1
- package/hooks/use-modal.d.ts.map +1 -1
- package/hooks/use-modal.js +5 -8
- package/hooks/use-slideshow.d.ts +19 -0
- package/hooks/use-slideshow.d.ts.map +1 -0
- package/hooks/use-slideshow.js +103 -0
- package/hooks.d.ts +2 -1
- package/hooks.d.ts.map +1 -1
- package/hooks.js +2 -1
- package/index.d.ts +2 -2
- package/index.d.ts.map +1 -1
- package/index.js +2 -2
- package/package.json +3 -4
- package/store/cookies.d.ts +3 -0
- package/store/cookies.d.ts.map +1 -1
- package/store/cookies.js +25 -22
- package/store.d.ts +3 -1
- package/store.d.ts.map +1 -1
- package/store.js +3 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/utils/animate.d.ts.map +1 -1
- package/utils.d.ts +2 -1
- package/utils.d.ts.map +1 -1
- package/utils.js +2 -1
package/actions.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare class RecaptchaError extends Error {
|
|
2
|
+
message: string;
|
|
3
|
+
}
|
|
4
|
+
export type RecaptchaifiedAction<T> = (data: T, token: string) => void;
|
|
5
|
+
export declare const recaptchaify: <T>(callback: (data: T) => void) => RecaptchaifiedAction<T>;
|
|
6
|
+
//# sourceMappingURL=actions.d.ts.map
|
package/actions.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["src/actions.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAe,SAAQ,KAAK;IACvC,OAAO,SAAkC;CAC1C;AAED,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;AAEtE,eAAO,MAAM,YAAY,gBAA0B,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,4BAcnE,CAAA"}
|
package/actions.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { GoogleReCaptcha } from '@superrb/netlify-function-helpers';
|
|
2
|
+
export class RecaptchaError extends Error {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.message = 'Recaptcha verification failed';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export const recaptchaify = function (callback) {
|
|
9
|
+
return (async (data, token) => {
|
|
10
|
+
try {
|
|
11
|
+
await GoogleReCaptcha.verify(token, process.env.RECAPTCHA_SECRET_KEY, process.env.RECAPTCHA_MINSCORE);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
throw new RecaptchaError();
|
|
15
|
+
}
|
|
16
|
+
callback(data);
|
|
17
|
+
});
|
|
18
|
+
};
|
package/components/button.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ type Props = (PropsWithChildren<HTMLAttributes<HTMLButtonElement | HTMLAnchorEle
|
|
|
6
6
|
className?: string;
|
|
7
7
|
href?: string;
|
|
8
8
|
};
|
|
9
|
-
declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Props & import("react").RefAttributes<
|
|
9
|
+
declare const _default: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<Props & import("react").RefAttributes<HTMLButtonElement | HTMLAnchorElement>>>;
|
|
10
10
|
export default _default;
|
|
11
11
|
export type { Props as ButtonProps };
|
|
12
12
|
//# sourceMappingURL=button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-wrapper.d.ts","sourceRoot":"","sources":["../src/components/context-wrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"context-wrapper.d.ts","sourceRoot":"","sources":["../src/components/context-wrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAGzC,QAAA,MAAM,cAAc,iBAAkB,kBAAkB,EAAE,CAAC,4CAM1D,CAAA;AAED,eAAe,cAAc,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { ModalContextProvider, NavContextProvider } from '../context';
|
|
3
2
|
import { GoogleReCaptchaProvider } from 'react-google-recaptcha-v3';
|
|
4
|
-
const ContextWrapper = ({ children }) => (_jsx(GoogleReCaptchaProvider, { reCaptchaKey: process.env.NEXT_PUBLIC_RECAPTCHA_KEY, children:
|
|
3
|
+
const ContextWrapper = ({ children }) => (_jsx(GoogleReCaptchaProvider, { reCaptchaKey: process.env.NEXT_PUBLIC_RECAPTCHA_KEY, children: children }));
|
|
5
4
|
export default ContextWrapper;
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
declare const CookieBanner: ({ allowCustomisation, allowReject, title, text, formText, policyLink, policyLabel, acceptLabel, acceptAllLabel, rejectLabel, customiseLabel, renderAcceptButton, renderCustomiseButton, renderRejectButton, renderSubmitButton, }: {
|
|
3
|
-
allowCustomisation?: boolean
|
|
4
|
-
allowReject?: boolean
|
|
5
|
-
title?: string
|
|
6
|
-
text?: string
|
|
7
|
-
formText?: string
|
|
8
|
-
policyLink?: string
|
|
9
|
-
policyLabel?: string
|
|
10
|
-
acceptLabel?: string
|
|
11
|
-
acceptAllLabel?: string
|
|
12
|
-
rejectLabel?: string
|
|
13
|
-
customiseLabel?: string
|
|
14
|
-
renderAcceptButton?: (
|
|
15
|
-
renderCustomiseButton?: (
|
|
16
|
-
renderRejectButton?: (
|
|
17
|
-
renderSubmitButton?: (
|
|
3
|
+
allowCustomisation?: boolean;
|
|
4
|
+
allowReject?: boolean;
|
|
5
|
+
title?: string;
|
|
6
|
+
text?: string;
|
|
7
|
+
formText?: string;
|
|
8
|
+
policyLink?: string;
|
|
9
|
+
policyLabel?: string;
|
|
10
|
+
acceptLabel?: string;
|
|
11
|
+
acceptAllLabel?: string;
|
|
12
|
+
rejectLabel?: string;
|
|
13
|
+
customiseLabel?: string;
|
|
14
|
+
renderAcceptButton?: (props: {}) => ReactNode;
|
|
15
|
+
renderCustomiseButton?: (props: {}) => ReactNode;
|
|
16
|
+
renderRejectButton?: (props: {}) => ReactNode;
|
|
17
|
+
renderSubmitButton?: () => ReactNode;
|
|
18
18
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
19
19
|
export default CookieBanner;
|
|
20
20
|
//# sourceMappingURL=cookie-banner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie-banner.d.ts","sourceRoot":"","sources":["../src/components/cookie-banner.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAA;AA6BtD,QAAA,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"cookie-banner.d.ts","sourceRoot":"","sources":["../src/components/cookie-banner.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAA;AA6BtD,QAAA,MAAM,YAAY,sOAgBf;IACD,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,SAAS,CAAA;IAC7C,qBAAqB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,SAAS,CAAA;IAChD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,SAAS,CAAA;IAC7C,kBAAkB,CAAC,EAAE,MAAM,SAAS,CAAA;CACrC,4CA4JA,CAAA;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -26,10 +26,7 @@ const content = {
|
|
|
26
26
|
},
|
|
27
27
|
};
|
|
28
28
|
const CookieBanner = ({ allowCustomisation = true, allowReject = false, title = content.title, text = content.text, formText = content.form_text, policyLink = content.policyLink, policyLabel = content.policyLabel, acceptLabel = content.acceptLabel, acceptAllLabel = content.acceptAllLabel, rejectLabel = content.rejectLabel, customiseLabel = content.customiseLabel, renderAcceptButton, renderCustomiseButton, renderRejectButton, renderSubmitButton, }) => {
|
|
29
|
-
const cookiesAccepted = useCookieStore(
|
|
30
|
-
const setCookiesAccepted = useCookieStore((state) => state.setCookiesAccepted);
|
|
31
|
-
const trackingCookiesAccepted = useCookieStore((state) => state.trackingCookiesAccepted);
|
|
32
|
-
const setTrackingCookiesAccepted = useCookieStore((state) => state.setTrackingCookiesAccepted);
|
|
29
|
+
const { cookiesAccepted, setCookiesAccepted, trackingCookiesAccepted, setTrackingCookiesAccepted, popupOpen, closePopup, } = useCookieStore();
|
|
33
30
|
const [animate, setAnimate] = useState(false);
|
|
34
31
|
const [formOpen, setFormOpen] = useState(false);
|
|
35
32
|
const [rejected, setRejected] = useState(!!session.getItem('cookies-rejected'));
|
|
@@ -42,6 +39,7 @@ const CookieBanner = ({ allowCustomisation = true, allowReject = false, title =
|
|
|
42
39
|
session.setItem('cookies-rejected', 'true');
|
|
43
40
|
};
|
|
44
41
|
const accept = (necessary, tracking) => {
|
|
42
|
+
closePopup();
|
|
45
43
|
setAnimate(true);
|
|
46
44
|
setTimeout(() => {
|
|
47
45
|
setCookiesAccepted(necessary);
|
|
@@ -49,9 +47,11 @@ const CookieBanner = ({ allowCustomisation = true, allowReject = false, title =
|
|
|
49
47
|
}, 800);
|
|
50
48
|
};
|
|
51
49
|
const acceptAll = () => {
|
|
50
|
+
closePopup();
|
|
52
51
|
accept(true, true);
|
|
53
52
|
};
|
|
54
53
|
const submit = (data) => {
|
|
54
|
+
closePopup();
|
|
55
55
|
accept(true, !!data.tracking);
|
|
56
56
|
};
|
|
57
57
|
const trueAcceptLabel = !allowCustomisation || formOpen ? acceptLabel : acceptAllLabel;
|
|
@@ -72,6 +72,6 @@ const CookieBanner = ({ allowCustomisation = true, allowReject = false, title =
|
|
|
72
72
|
useEffect(() => {
|
|
73
73
|
setReady(true);
|
|
74
74
|
}, []);
|
|
75
|
-
return (_jsx(_Fragment, { children: ready && !rejected && !cookiesAccepted ? (_jsx("div", { className: `cookie-banner ${animate ? ' cookie-banner--hide' : ''} `, children: _jsx("div", { className: "cookie-banner__container container", children: _jsxs("div", { className: "cookie-banner__inner", children: [allowCustomisation && (_jsxs("div", { className: "cookie-banner__form", "aria-hidden": !formOpen, children: [formText && (_jsx("p", { className: "cookie-banner__form-text", children: formText })), _jsx(Form, { useRecaptcha: false, className: "cookie-banner__form", schema: schema, onSubmit: submit, renderSubmit: () => renderSubmitButton ? (renderSubmitButton()) : (_jsx(SubmitButton, { label: acceptLabel })), renderSuccessMessage: false })] })), _jsxs("div", { className: "cookie-banner__main", children: [_jsxs("div", { className: "cookie-banner__message", "aria-hidden": formOpen, children: [title && _jsx("h2", { className: "cookie-banner__title", children: title }), text && (_jsxs("p", { className: "cookie-banner__text", children: [text, " ", _jsx("a", { href: policyLink, children: policyLabel })] }))] }), _jsxs("div", { className: "cookie-banner__buttons", children: [allowCustomisation && !formOpen && (_jsx(_Fragment, { children: renderCustomiseButton ? (renderCustomiseButton({ onClick: openForm })) : (_jsx(Button, { onClick: openForm, className: "cookie-banner__customise", label: customiseLabel })) })), allowReject && !formOpen && (_jsx(_Fragment, { children: renderRejectButton ? (renderRejectButton({ onClick: reject })) : (_jsx(Button, { onClick: reject, className: "cookie-banner__reject", label: rejectLabel })) })), !formOpen && (_jsx(_Fragment, { children: renderAcceptButton ? (renderAcceptButton({ onClick: acceptAll })) : (_jsx(Button, { onClick: acceptAll, className: "cookie-banner__accept", label: trueAcceptLabel })) }))] })] })] }) }) })) : ('') }));
|
|
75
|
+
return (_jsx(_Fragment, { children: ready && ((!rejected && !cookiesAccepted) || popupOpen) ? (_jsx("div", { className: `cookie-banner ${animate ? ' cookie-banner--hide' : ''} `, children: _jsx("div", { className: "cookie-banner__container container", children: _jsxs("div", { className: "cookie-banner__inner", children: [allowCustomisation && (_jsxs("div", { className: "cookie-banner__form", "aria-hidden": !formOpen, children: [formText && (_jsx("p", { className: "cookie-banner__form-text", children: formText })), _jsx(Form, { useRecaptcha: false, className: "cookie-banner__form", schema: schema, onSubmit: submit, renderSubmit: () => renderSubmitButton ? (renderSubmitButton()) : (_jsx(SubmitButton, { label: acceptLabel })), renderSuccessMessage: false })] })), _jsxs("div", { className: "cookie-banner__main", children: [_jsxs("div", { className: "cookie-banner__message", "aria-hidden": formOpen, children: [title && _jsx("h2", { className: "cookie-banner__title", children: title }), text && (_jsxs("p", { className: "cookie-banner__text", children: [text, " ", _jsx("a", { href: policyLink, children: policyLabel })] }))] }), _jsxs("div", { className: "cookie-banner__buttons", children: [allowCustomisation && !formOpen && (_jsx(_Fragment, { children: renderCustomiseButton ? (renderCustomiseButton({ onClick: openForm })) : (_jsx(Button, { onClick: openForm, className: "cookie-banner__customise", label: customiseLabel })) })), allowReject && !formOpen && (_jsx(_Fragment, { children: renderRejectButton ? (renderRejectButton({ onClick: reject })) : (_jsx(Button, { onClick: reject, className: "cookie-banner__reject", label: rejectLabel })) })), !formOpen && (_jsx(_Fragment, { children: renderAcceptButton ? (renderAcceptButton({ onClick: acceptAll })) : (_jsx(Button, { onClick: acceptAll, className: "cookie-banner__accept", label: trueAcceptLabel })) }))] })] })] }) }) })) : ('') }));
|
|
76
76
|
};
|
|
77
77
|
export default CookieBanner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/components/form/field.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAa,gBAAgB,EAAuB,MAAM,OAAO,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAEvD,UAAU,KAAK;IACb,QAAQ,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAA;IACvC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;IACtB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAA;CACxC;AAED,QAAA,MAAM,SAAS,sCAAuC,KAAK,
|
|
1
|
+
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../src/components/form/field.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAa,gBAAgB,EAAuB,MAAM,OAAO,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAEvD,UAAU,KAAK;IACb,QAAQ,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAA;IACvC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;IACtB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAA;CACxC;AAED,QAAA,MAAM,SAAS,sCAAuC,KAAK,4CA0E1D,CAAA;AAED,eAAe,SAAS,CAAA"}
|
package/components/form/field.js
CHANGED
|
@@ -14,6 +14,9 @@ const FormField = ({ register, schema, id, onInput }) => {
|
|
|
14
14
|
...(schema?.spec?.meta?.placeholder
|
|
15
15
|
? { placeholder: schema?.spec?.meta?.placeholder }
|
|
16
16
|
: {}),
|
|
17
|
+
...(schema?.spec?.meta?.autocomplete
|
|
18
|
+
? { autocomplete: schema?.spec?.meta?.autocomplete }
|
|
19
|
+
: {}),
|
|
17
20
|
onInput: (event) => {
|
|
18
21
|
setTouched(true);
|
|
19
22
|
if (onInput) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-button.d.ts","sourceRoot":"","sources":["../../src/components/form/submit-button.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"submit-button.d.ts","sourceRoot":"","sources":["../../src/components/form/submit-button.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,YAAY,cAAe;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,4CAIlD,CAAA;AAED,eAAe,YAAY,CAAA"}
|
package/components/form.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { FieldRenderer } from './form/types';
|
|
|
6
6
|
export interface FormProps<T extends ObjectSchema<any>> {
|
|
7
7
|
schema: T;
|
|
8
8
|
name?: string;
|
|
9
|
-
action?: string | ((
|
|
9
|
+
action?: string | ((data: InferType<T>, token: string) => any);
|
|
10
10
|
className?: string;
|
|
11
11
|
method?: string;
|
|
12
12
|
initialData?: {
|
package/components/form.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/components/form.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,SAAS,EAQV,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAExD,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAA;AAErD,OAAiB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/components/form.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,SAAS,EAQV,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAExD,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAA;AAErD,OAAiB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAa5C,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,YAAY,CAAC,GAAG,CAAC;IACpD,MAAM,EAAE,CAAC,CAAA;IACT,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC,CAAA;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE;SAAG,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,GAAG;KAAE,CAAA;IACzC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IACvC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,oBAAoB,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,GAAG,KAAK,CAAA;IAClE,kBAAkB,CAAC,EAAE,CACnB,KAAK,CAAC,EAAE,UAAU,EAClB,WAAW,CAAC,EAAE,SAAS,KACpB,SAAS,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,SAAS,CAAA;IAC9B,SAAS,CAAC,EAAE;SAAG,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,aAAa;KAAE,CAAA;IACjD,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;;AA8QD,wBAA+B"}
|
package/components/form.js
CHANGED
|
@@ -10,6 +10,7 @@ import ErrorMessage from './form/error-message';
|
|
|
10
10
|
import FormField from './form/field';
|
|
11
11
|
import SubmitButton from './form/submit-button';
|
|
12
12
|
import messages from './form/messages.json';
|
|
13
|
+
import { GoogleReCaptchaProvider, useGoogleReCaptcha, } from 'react-google-recaptcha-v3';
|
|
13
14
|
const toBase64 = (file) => new Promise((resolve, reject) => {
|
|
14
15
|
const reader = new FileReader();
|
|
15
16
|
reader.onloadend = () => {
|
|
@@ -23,11 +24,10 @@ const toBase64 = (file) => new Promise((resolve, reject) => {
|
|
|
23
24
|
reader.readAsDataURL(file);
|
|
24
25
|
reader.onerror = reject;
|
|
25
26
|
});
|
|
26
|
-
function
|
|
27
|
+
const FormInner = forwardRef(function FormInner({ schema, name, action, className, initialData, onSubmit, method = 'POST', onStatusChange = () => { }, renderSuccessMessage = (data) => _jsx(SuccessMessage, {}), renderErrorMessage = (error, fieldSchema) => (_jsx(ErrorMessage, { error: error, fieldSchema: fieldSchema })), renderSubmit = () => _jsx(SubmitButton, {}), renderers = {}, useRecaptcha = true, ...props }, ref) {
|
|
27
28
|
const [data, setData] = useState({});
|
|
28
29
|
const fieldRefs = useRef({});
|
|
29
|
-
|
|
30
|
-
let executeRecaptcha;
|
|
30
|
+
const { executeRecaptcha } = useGoogleReCaptcha();
|
|
31
31
|
for (const name of Object.keys(schema.fields)) {
|
|
32
32
|
const field = schema.fields[name];
|
|
33
33
|
if (field.spec?.meta?.options?.length > 1) {
|
|
@@ -42,12 +42,15 @@ function Form({ schema, name, action, className, initialData, onSubmit, method =
|
|
|
42
42
|
if (onSubmit) {
|
|
43
43
|
return onSubmit(data);
|
|
44
44
|
}
|
|
45
|
+
// if recaptcha is enabled generate a token and add to the data
|
|
46
|
+
if (useRecaptcha && executeRecaptcha) {
|
|
47
|
+
const token = await executeRecaptcha();
|
|
48
|
+
data['recaptchaToken'] = token;
|
|
49
|
+
}
|
|
50
|
+
// Intercept submissions for Next server actions
|
|
45
51
|
if (typeof action === 'function') {
|
|
46
|
-
const formData =
|
|
47
|
-
|
|
48
|
-
formData.append(key, value);
|
|
49
|
-
}
|
|
50
|
-
return action(formData);
|
|
52
|
+
const { recaptchaToken, ...formData } = data;
|
|
53
|
+
return action(formData, recaptchaToken);
|
|
51
54
|
}
|
|
52
55
|
for (const [key, value] of Object.entries(data)) {
|
|
53
56
|
if (value instanceof FileList) {
|
|
@@ -65,11 +68,6 @@ function Form({ schema, name, action, className, initialData, onSubmit, method =
|
|
|
65
68
|
}
|
|
66
69
|
}
|
|
67
70
|
}
|
|
68
|
-
// if recaptcha is enabled generate a token and add to the data
|
|
69
|
-
if (useRecaptcha && executeRecaptcha) {
|
|
70
|
-
const token = await executeRecaptcha();
|
|
71
|
-
data['recaptchaToken'] = token;
|
|
72
|
-
}
|
|
73
71
|
const response = await fetch(action, {
|
|
74
72
|
method: 'post',
|
|
75
73
|
headers: {
|
|
@@ -86,7 +84,7 @@ function Form({ schema, name, action, className, initialData, onSubmit, method =
|
|
|
86
84
|
}
|
|
87
85
|
setData(responseData);
|
|
88
86
|
return responseData;
|
|
89
|
-
}, [action, onSubmit, useRecaptcha]);
|
|
87
|
+
}, [action, onSubmit, useRecaptcha, executeRecaptcha]);
|
|
90
88
|
const { execute, status, error } = useAsync(onSubmitHandler, false, [
|
|
91
89
|
onSubmitHandler,
|
|
92
90
|
]);
|
|
@@ -94,24 +92,35 @@ function Form({ schema, name, action, className, initialData, onSubmit, method =
|
|
|
94
92
|
if (onStatusChange) {
|
|
95
93
|
onStatusChange(status);
|
|
96
94
|
}
|
|
97
|
-
}, [status]);
|
|
95
|
+
}, [status, onStatusChange]);
|
|
98
96
|
Object.keys(schema.fields).map((fieldName) => {
|
|
99
97
|
const field = schema.fields[fieldName];
|
|
100
98
|
if (!field?.spec?.label) {
|
|
101
99
|
field.spec.label = sentenceCase(fieldName);
|
|
102
100
|
}
|
|
103
101
|
});
|
|
104
|
-
console.log(status);
|
|
105
102
|
return (_jsx(_Fragment, { children: status === 'success' && renderSuccessMessage !== false ? (_jsx(_Fragment, { children: renderSuccessMessage(data) })) : (_jsxs("form", { className: `form ${className}`, action: action, method: method, onSubmit: handleSubmit(execute), noValidate: true, ref: ref, ...props, children: [error && renderErrorMessage({ message: error }), Object.keys(schema.fields).map((fieldName, key) => {
|
|
106
103
|
const field = schema.fields[fieldName];
|
|
107
104
|
return (_jsx(Fragment, { children: field?.spec?.meta?.hidden === true ? (_jsx(FormField, { register: register(fieldName), schema: field })) : (_jsx("div", { className: `form__group form__group--${paramCase(fieldName)} ${fieldName in errors ? 'form__group--error' : ''} ${field?.type === 'boolean' ? 'form__group--checkbox' : ''}`, ref: (ref) => {
|
|
108
105
|
fieldRefs.current[fieldName] = ref;
|
|
109
106
|
}, children: _jsxs("label", { className: "form__label", htmlFor: `${name}__${paramCase(fieldName)}`, children: [_jsx("span", { className: "form__label-text", dangerouslySetInnerHTML: {
|
|
110
|
-
__html: `${field?.spec?.label} ${!field?.spec?.optional
|
|
107
|
+
__html: `${field?.spec?.label} ${!field?.spec?.optional
|
|
108
|
+
? '<span class="form__required-indicator">*</span>'
|
|
109
|
+
: ''}`,
|
|
111
110
|
} }), fieldName in renderers ? (renderers[fieldName](register(fieldName), errors[fieldName], field)) : (_jsxs(_Fragment, { children: [_jsx(FormField, { register: register(fieldName), id: `${name}__${paramCase(fieldName)}`, schema: field, onInput: (event) => {
|
|
112
111
|
fieldRefs.current[fieldName]?.classList.add('form__group--filled');
|
|
113
112
|
} }), fieldName in errors &&
|
|
114
113
|
renderErrorMessage(errors[fieldName], field)] }))] }) })) }, key));
|
|
115
114
|
}), renderSubmit(), useRecaptcha && (_jsxs("p", { className: "form__recaptcha-message", children: ["This site is protected by reCAPTCHA and the Google", ' ', _jsx("a", { href: "https://policies.google.com/privacy", target: "_blank", rel: "noopener", children: "Privacy Policy" }), ' ', "and", ' ', _jsx("a", { href: "https://policies.google.com/terms", target: "_blank", rel: "noopener", children: "Terms of Service" }), ' ', "apply."] }))] })) }));
|
|
116
|
-
}
|
|
115
|
+
});
|
|
116
|
+
const Form = (props, ref) => {
|
|
117
|
+
if (props.useRecaptcha === false) {
|
|
118
|
+
return _jsx(FormInner, { ...props, ref: ref });
|
|
119
|
+
}
|
|
120
|
+
const key = process.env.NEXT_PUBLIC_RECAPTCHA_KEY;
|
|
121
|
+
if (!key) {
|
|
122
|
+
throw new Error('Env var NEXT_PUBLIC_RECAPTCHA_KEY is not set');
|
|
123
|
+
}
|
|
124
|
+
return (_jsx(GoogleReCaptchaProvider, { reCaptchaKey: process.env.NEXT_PUBLIC_RECAPTCHA_KEY, children: _jsx(FormInner, { ...props, ref: ref }) }));
|
|
125
|
+
};
|
|
117
126
|
export default forwardRef(Form);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-toggle.d.ts","sourceRoot":"","sources":["../src/components/menu-toggle.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,
|
|
1
|
+
{"version":3,"file":"menu-toggle.d.ts","sourceRoot":"","sources":["../src/components/menu-toggle.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EAIb,MAAM,OAAO,CAAA;AAKd,UAAU,KACR,SAAQ,iBAAiB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAClE,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,YAAY,CAAA;CAChD;AAED,QAAA,MAAM,UAAU,0FAOb,KAAK,4CAwCP,CAAA;AAED,eAAe,UAAU,CAAA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
-
import { useCallback,
|
|
4
|
-
import { NavContext } from '../context';
|
|
3
|
+
import { useCallback, useEffect, useState, } from 'react';
|
|
5
4
|
import { Button } from '../components';
|
|
6
5
|
import { extendClass } from '../utils';
|
|
6
|
+
import useNavStore from '../store/nav';
|
|
7
7
|
const MenuToggle = ({ 'aria-controls': ariaControls, className = '', label = 'Open Nav', closeLabel = 'Close Nav', renderIcon = undefined, ...props }) => {
|
|
8
|
-
const { navOpen, toggleNav } =
|
|
8
|
+
const { navOpen, toggleNav } = useNavStore();
|
|
9
9
|
const [icon, setIcon] = useState(navOpen ? '×' : '꠵');
|
|
10
10
|
useEffect(() => {
|
|
11
11
|
if (renderIcon) {
|
package/components/modal.js
CHANGED
|
@@ -12,7 +12,7 @@ const Modal = ({ name, className, openAfter, dismissable = false, children, }) =
|
|
|
12
12
|
if (dismissable) {
|
|
13
13
|
setDismissed(local.getItem(`${name}-popup-dismissed`) === 'true');
|
|
14
14
|
}
|
|
15
|
-
}, []);
|
|
15
|
+
}, [dismissable, name]);
|
|
16
16
|
useEffect(() => {
|
|
17
17
|
clearTimeout(openTimer.current);
|
|
18
18
|
if (!dismissed && openAfter) {
|
|
@@ -27,7 +27,7 @@ const Modal = ({ name, className, openAfter, dismissable = false, children, }) =
|
|
|
27
27
|
local.setItem(`${name}-popup-dismissed`, 'true');
|
|
28
28
|
setDismissed(true);
|
|
29
29
|
}
|
|
30
|
-
}, [name, closeModal]);
|
|
31
|
-
return (_jsxs("aside", { id: name, className: `modal ${className}`, "aria-hidden": !isOpen, children: [_jsxs("button", { className:
|
|
30
|
+
}, [dismissable, name, closeModal]);
|
|
31
|
+
return (_jsxs("aside", { id: name, className: `modal ${className}`, "aria-hidden": !isOpen, children: [_jsxs("button", { className: 'modal__close', onClick: close, children: [_jsx("span", { className: "screenreader-text", children: "Close Modal" }), "\u00D7"] }), _jsx("div", { className: 'modal__inner', children: children })] }));
|
|
32
32
|
};
|
|
33
33
|
export default Modal;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { ButtonProps } from './button';
|
|
3
|
+
import { Slideshow } from '@/hooks/use-slideshow';
|
|
4
|
+
declare const SlideshowButtons: ({ slideshow: { currentSlide, goTo, slideshowRef, atStart, atEnd }, ButtonComponent, }: {
|
|
5
|
+
slideshow: Slideshow;
|
|
6
|
+
ButtonComponent?: FC<ButtonProps>;
|
|
7
|
+
}) => JSX.Element;
|
|
8
|
+
export default SlideshowButtons;
|
|
9
|
+
//# sourceMappingURL=slideshow-buttons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slideshow-buttons.d.ts","sourceRoot":"","sources":["../src/components/slideshow-buttons.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAC1B,OAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD,QAAA,MAAM,gBAAgB,0FAGnB;IACD,SAAS,EAAE,SAAS,CAAA;IACpB,eAAe,CAAC,EAAE,GAAG,WAAW,CAAC,CAAA;CAClC,KAAG,WAqBH,CAAA;AAED,eAAe,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import Button from './button';
|
|
3
|
+
const SlideshowButtons = ({ slideshow: { currentSlide, goTo, slideshowRef, atStart, atEnd }, ButtonComponent = Button, }) => {
|
|
4
|
+
return (_jsxs("nav", { className: "slideshow-buttons", children: [_jsx(ButtonComponent, { label: "Previous slide", onClick: () => goTo(currentSlide - 1), disabled: atStart, "aria-controls": slideshowRef.current?.getAttribute('id') }), _jsx(ButtonComponent, { label: "Next slide", onClick: () => goTo(currentSlide + 1), disabled: atEnd, "aria-controls": slideshowRef.current?.getAttribute('id') })] }));
|
|
5
|
+
};
|
|
6
|
+
export default SlideshowButtons;
|
package/components.d.ts
CHANGED
|
@@ -8,5 +8,6 @@ import Form from './components/form';
|
|
|
8
8
|
import MenuToggle from './components/menu-toggle';
|
|
9
9
|
import Modal from './components/modal';
|
|
10
10
|
import SkipTo from './components/skip-to';
|
|
11
|
-
|
|
11
|
+
import SlideshowButtons from './components/slideshow-buttons';
|
|
12
|
+
export { BackToTop, Button, CookieBanner, Form, MenuToggle, Modal, SkipTo, SlideshowButtons, };
|
|
12
13
|
//# sourceMappingURL=components.d.ts.map
|
package/components.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["src/components.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,SAAS,MAAM,0BAA0B,CAAA;AAChD,OAAO,MAAM,MAAM,qBAAqB,CAAA;AACxC,OAAO,YAAY,MAAM,4BAA4B,CAAA;AACrD,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,UAAU,MAAM,0BAA0B,CAAA;AACjD,OAAO,KAAK,MAAM,oBAAoB,CAAA;AACtC,OAAO,MAAM,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"components.d.ts","sourceRoot":"","sources":["src/components.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,SAAS,MAAM,0BAA0B,CAAA;AAChD,OAAO,MAAM,MAAM,qBAAqB,CAAA;AACxC,OAAO,YAAY,MAAM,4BAA4B,CAAA;AACrD,OAAO,IAAI,MAAM,mBAAmB,CAAA;AACpC,OAAO,UAAU,MAAM,0BAA0B,CAAA;AACjD,OAAO,KAAK,MAAM,oBAAoB,CAAA;AACtC,OAAO,MAAM,MAAM,sBAAsB,CAAA;AACzC,OAAO,gBAAgB,MAAM,gCAAgC,CAAA;AAE7D,OAAO,EACL,SAAS,EACT,MAAM,EACN,YAAY,EACZ,IAAI,EACJ,UAAU,EACV,KAAK,EACL,MAAM,EACN,gBAAgB,GACjB,CAAA"}
|
package/components.js
CHANGED
|
@@ -8,4 +8,5 @@ import Form from './components/form';
|
|
|
8
8
|
import MenuToggle from './components/menu-toggle';
|
|
9
9
|
import Modal from './components/modal';
|
|
10
10
|
import SkipTo from './components/skip-to';
|
|
11
|
-
|
|
11
|
+
import SlideshowButtons from './components/slideshow-buttons';
|
|
12
|
+
export { BackToTop, Button, CookieBanner, Form, MenuToggle, Modal, SkipTo, SlideshowButtons, };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
export declare const CookiesContext: import("react").Context<{
|
|
3
|
+
cookiesAccepted: boolean;
|
|
4
|
+
setCookiesAccepted: (accepted: boolean) => void;
|
|
5
|
+
trackingCookiesAccepted: boolean;
|
|
6
|
+
setTrackingCookiesAccepted: (accepted: boolean) => void;
|
|
7
|
+
popupOpen: boolean;
|
|
8
|
+
openPopup: () => void;
|
|
9
|
+
closePopup: () => void;
|
|
10
|
+
}>;
|
|
11
|
+
export declare const CookiesContextProvider: ({ children }: PropsWithChildren<{}>) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default CookiesContextProvider;
|
|
13
|
+
//# sourceMappingURL=cookies-context-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookies-context-provider.d.ts","sourceRoot":"","sources":["../src/context/cookies-context-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EAKlB,MAAM,OAAO,CAAA;AAGd,eAAO,MAAM,cAAc;;mCAEM,OAAO;;2CAEC,OAAO;;;;EAI9C,CAAA;AAEF,eAAO,MAAM,sBAAsB,iBAAkB,kBAAkB,EAAE,CAAC,4CA2DzE,CAAA;AAED,eAAe,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useCallback, useEffect, useState, } from 'react';
|
|
4
|
+
import Cookies from 'js-cookie';
|
|
5
|
+
export const CookiesContext = createContext({
|
|
6
|
+
cookiesAccepted: false,
|
|
7
|
+
setCookiesAccepted: (accepted) => { },
|
|
8
|
+
trackingCookiesAccepted: false,
|
|
9
|
+
setTrackingCookiesAccepted: (accepted) => { },
|
|
10
|
+
popupOpen: false,
|
|
11
|
+
openPopup: () => { },
|
|
12
|
+
closePopup: () => { },
|
|
13
|
+
});
|
|
14
|
+
export const CookiesContextProvider = ({ children }) => {
|
|
15
|
+
const [cookiesAccepted, setCookiesAcceptedStorage] = useState(false);
|
|
16
|
+
const [popupOpen, setPopupOpenStorage] = useState(false);
|
|
17
|
+
const [trackingCookiesAccepted, setTrackingCookiesAcceptedStorage] = useState(false);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const accepted = Cookies.get('accepted-cookies') || false;
|
|
20
|
+
setCookiesAcceptedStorage(!!accepted);
|
|
21
|
+
}, [setCookiesAcceptedStorage]);
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
const accepted = Cookies.get('accepted-tracking-cookies') || false;
|
|
24
|
+
setTrackingCookiesAcceptedStorage(!!accepted);
|
|
25
|
+
}, [setTrackingCookiesAcceptedStorage]);
|
|
26
|
+
const setCookiesAccepted = useCallback((accepted) => {
|
|
27
|
+
Cookies.set('accepted-cookies', accepted.toString(), {
|
|
28
|
+
expires: 30,
|
|
29
|
+
});
|
|
30
|
+
setCookiesAcceptedStorage(accepted);
|
|
31
|
+
}, [setCookiesAcceptedStorage]);
|
|
32
|
+
const setTrackingCookiesAccepted = useCallback((accepted) => {
|
|
33
|
+
Cookies.set('accepted-tracking-cookies', accepted.toString(), {
|
|
34
|
+
expires: 30,
|
|
35
|
+
});
|
|
36
|
+
setTrackingCookiesAcceptedStorage(accepted);
|
|
37
|
+
}, [setTrackingCookiesAcceptedStorage]);
|
|
38
|
+
const openPopup = useCallback(() => {
|
|
39
|
+
setPopupOpenStorage(true);
|
|
40
|
+
}, [setPopupOpenStorage]);
|
|
41
|
+
const closePopup = useCallback(() => {
|
|
42
|
+
setPopupOpenStorage(false);
|
|
43
|
+
}, [setPopupOpenStorage]);
|
|
44
|
+
return (_jsx(CookiesContext.Provider, { value: {
|
|
45
|
+
cookiesAccepted,
|
|
46
|
+
setCookiesAccepted,
|
|
47
|
+
trackingCookiesAccepted,
|
|
48
|
+
setTrackingCookiesAccepted,
|
|
49
|
+
popupOpen,
|
|
50
|
+
openPopup,
|
|
51
|
+
closePopup,
|
|
52
|
+
}, children: children }));
|
|
53
|
+
};
|
|
54
|
+
export default CookiesContextProvider;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
export declare const ModalContext: import("react").Context<{
|
|
3
|
+
openState: OpenState;
|
|
4
|
+
isOpen: (name: string) => boolean;
|
|
5
|
+
openModal: (name: string) => void;
|
|
6
|
+
closeModal: (name: string) => void;
|
|
7
|
+
}>;
|
|
8
|
+
interface OpenState {
|
|
9
|
+
[key: string]: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const ModalContextProvider: ({ children }: PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default ModalContextProvider;
|
|
13
|
+
//# sourceMappingURL=modal-context-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal-context-provider.d.ts","sourceRoot":"","sources":["../src/context/modal-context-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiB,iBAAiB,EAAY,MAAM,OAAO,CAAA;AAElE,eAAO,MAAM,YAAY;;mBAER,MAAM;sBACH,MAAM;uBACL,MAAM;EACzB,CAAA;AAEF,UAAU,SAAS;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,eAAO,MAAM,oBAAoB,iBAAkB,iBAAiB,4CA8BnE,CAAA;AAED,eAAe,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useState } from 'react';
|
|
4
|
+
export const ModalContext = createContext({
|
|
5
|
+
openState: {},
|
|
6
|
+
isOpen: (name) => false,
|
|
7
|
+
openModal: (name) => { },
|
|
8
|
+
closeModal: (name) => { },
|
|
9
|
+
});
|
|
10
|
+
export const ModalContextProvider = ({ children }) => {
|
|
11
|
+
const [openState, setOpenState] = useState({});
|
|
12
|
+
const isOpen = (name) => {
|
|
13
|
+
return openState[name] || false;
|
|
14
|
+
};
|
|
15
|
+
const openModal = (name) => {
|
|
16
|
+
setOpenState((state) => {
|
|
17
|
+
const newState = { ...state };
|
|
18
|
+
newState[name] = true;
|
|
19
|
+
return newState;
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
const closeModal = (name) => {
|
|
23
|
+
setOpenState((state) => {
|
|
24
|
+
const newState = { ...state };
|
|
25
|
+
newState[name] = false;
|
|
26
|
+
return newState;
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
return (_jsx(ModalContext.Provider, { value: { openState, isOpen, openModal, closeModal }, children: children }));
|
|
30
|
+
};
|
|
31
|
+
export default ModalContextProvider;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useLockBodyScroll } from '../hooks';
|
|
4
|
+
import { createContext, useCallback, useState } from 'react';
|
|
5
|
+
export const NavContext = createContext({
|
|
6
|
+
navOpen: false,
|
|
7
|
+
toggleNav: () => { },
|
|
8
|
+
openNav: () => { },
|
|
9
|
+
closeNav: () => { },
|
|
10
|
+
});
|
|
11
|
+
export const NavContextProvider = ({ children }) => {
|
|
12
|
+
const [navOpen, setNavOpen] = useState(false);
|
|
13
|
+
useLockBodyScroll(navOpen);
|
|
14
|
+
const toggleNav = useCallback(() => {
|
|
15
|
+
setNavOpen((navOpen) => !navOpen);
|
|
16
|
+
}, [setNavOpen]);
|
|
17
|
+
const openNav = useCallback(() => {
|
|
18
|
+
setNavOpen(true);
|
|
19
|
+
}, [setNavOpen]);
|
|
20
|
+
const closeNav = useCallback(() => {
|
|
21
|
+
setNavOpen(false);
|
|
22
|
+
document.activeElement?.blur();
|
|
23
|
+
}, [setNavOpen]);
|
|
24
|
+
return (_jsx(NavContext.Provider, { value: { navOpen, toggleNav, openNav, closeNav }, children: children }));
|
|
25
|
+
};
|
|
26
|
+
export default NavContextProvider;
|
package/context.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Context
|
|
3
3
|
*/
|
|
4
|
+
import { CookiesContext, CookiesContextProvider } from './context/cookies-context-provider';
|
|
4
5
|
import { ModalContext, ModalContextProvider } from './context/modal-context-provider';
|
|
5
6
|
import { NavContext, NavContextProvider } from './context/nav-context-provider';
|
|
6
|
-
export { ModalContext, ModalContextProvider, NavContext, NavContextProvider, };
|
|
7
|
+
export { CookiesContext, CookiesContextProvider, ModalContext, ModalContextProvider, NavContext, NavContextProvider, };
|
|
7
8
|
//# sourceMappingURL=context.d.ts.map
|
package/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["src/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,YAAY,EACZ,oBAAoB,EACrB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAE/E,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,kBAAkB,GACnB,CAAA"}
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["src/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,cAAc,EACd,sBAAsB,EACvB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EACL,YAAY,EACZ,oBAAoB,EACrB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAE/E,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,kBAAkB,GACnB,CAAA"}
|
package/context.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Context
|
|
3
3
|
*/
|
|
4
|
+
import { CookiesContext, CookiesContextProvider, } from './context/cookies-context-provider';
|
|
4
5
|
import { ModalContext, ModalContextProvider, } from './context/modal-context-provider';
|
|
5
6
|
import { NavContext, NavContextProvider } from './context/nav-context-provider';
|
|
6
|
-
export { ModalContext, ModalContextProvider, NavContext, NavContextProvider, };
|
|
7
|
+
export { CookiesContext, CookiesContextProvider, ModalContext, ModalContextProvider, NavContext, NavContextProvider, };
|
package/hooks/use-async.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-async.d.ts","sourceRoot":"","sources":["../src/hooks/use-async.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;AAE7D,UAAU,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM;IAChC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;IACf,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CAChB;AAGD,QAAA,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"use-async.d.ts","sourceRoot":"","sources":["../src/hooks/use-async.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;AAE7D,UAAU,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM;IAChC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;IACf,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;CAChB;AAGD,QAAA,MAAM,QAAQ,iCACG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,QAAQ,CAAC,CAAC,sCAE/B,GAAG,EAAE,KAClB,WAAW,CAAC,EAAE,CAAC,CA2CjB,CAAA;AAED,eAAe,QAAQ,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-draggable-scroll.d.ts","sourceRoot":"","sources":["../src/hooks/use-draggable-scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EACjB,gBAAgB,EAIjB,MAAM,OAAO,CAAA;AAId,UAAU,MAAM;IACd,WAAW,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;CAC5C;AAED,QAAA,MAAM,kBAAkB,QACjB,iBAAiB,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"use-draggable-scroll.d.ts","sourceRoot":"","sources":["../src/hooks/use-draggable-scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EACjB,gBAAgB,EAIjB,MAAM,OAAO,CAAA;AAId,UAAU,MAAM;IACd,WAAW,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAA;CAC5C;AAED,QAAA,MAAM,kBAAkB,QACjB,iBAAiB,WAAW,CAAC,0BACV;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE;;CA8E9C,CAAA;AAED,eAAe,kBAAkB,CAAA"}
|
|
@@ -2,6 +2,6 @@ type Target = Document | Window | Element;
|
|
|
2
2
|
type EventMap<T extends Target> = T extends Window ? WindowEventHandlersEventMap & GlobalEventHandlersEventMap : T extends Document ? DocumentEventMap : GlobalEventHandlersEventMap;
|
|
3
3
|
type EventName<T extends Target> = keyof EventMap<T>;
|
|
4
4
|
type EventListener<T extends Target, E extends EventName<T>> = (event: EventMap<T>[E]) => void | boolean;
|
|
5
|
-
declare const useEventListener: <T extends Target, E extends keyof EventMap<T>>(eventName: E, handler: EventListener<T, E>, options?: boolean | AddEventListenerOptions, element?: T
|
|
5
|
+
declare const useEventListener: <T extends Target, E extends keyof EventMap<T>>(eventName: E, handler: EventListener<T, E>, options?: boolean | AddEventListenerOptions, element?: T, flag?: boolean) => void;
|
|
6
6
|
export default useEventListener;
|
|
7
7
|
//# sourceMappingURL=use-event-listener.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-event-listener.d.ts","sourceRoot":"","sources":["../src/hooks/use-event-listener.ts"],"names":[],"mappings":"AAEA,KAAK,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAEzC,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,MAAM,GAC9C,2BAA2B,GAAG,2BAA2B,GACzD,CAAC,SAAS,QAAQ,GAClB,gBAAgB,GAChB,2BAA2B,CAAA;AAE/B,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;AAEpD,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,IAAI,CAC7D,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAClB,IAAI,GAAG,OAAO,CAAA;AAGnB,QAAA,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"use-event-listener.d.ts","sourceRoot":"","sources":["../src/hooks/use-event-listener.ts"],"names":[],"mappings":"AAEA,KAAK,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAEzC,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,MAAM,GAC9C,2BAA2B,GAAG,2BAA2B,GACzD,CAAC,SAAS,QAAQ,GAClB,gBAAgB,GAChB,2BAA2B,CAAA;AAE/B,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;AAEpD,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,IAAI,CAC7D,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAClB,IAAI,GAAG,OAAO,CAAA;AAGnB,QAAA,MAAM,gBAAgB,6DACT,CAAC,WACH,cAAc,CAAC,EAAE,CAAC,CAAC,YACnB,OAAO,GAAG,uBAAuB,YAChC,CAAC,SACL,OAAO,SA+Dd,CAAA;AAED,eAAe,gBAAgB,CAAA"}
|
package/hooks/use-modal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-modal.d.ts","sourceRoot":"","sources":["../src/hooks/use-modal.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-modal.d.ts","sourceRoot":"","sources":["../src/hooks/use-modal.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,QAAQ,SAAU,MAAM;;;;CAU7B,CAAA;AAED,eAAe,QAAQ,CAAA"}
|