@leabankab/component-library 8.0.0 → 8.1.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.
Files changed (39) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/dist/component-library.es.js +1496 -1231
  3. package/dist/component-library.es.js.map +1 -1
  4. package/dist/component-library.umd.js +2 -2
  5. package/dist/component-library.umd.js.map +1 -1
  6. package/dist/components/data-display/card.d.ts +25 -2
  7. package/dist/components/form/combo-field.d.ts +9 -1
  8. package/dist/components/form/email-input.d.ts +9 -1
  9. package/dist/components/form/field-parts.d.ts +16 -2
  10. package/dist/components/form/input.d.ts +7 -1
  11. package/dist/components/form/number-input-unit.d.ts +28 -0
  12. package/dist/components/form/number-input.d.ts +27 -5
  13. package/dist/components/form/phone-number-input/phone-number-input.d.ts +20 -1
  14. package/dist/cookie-consent-core-fntGUdFt.cjs +2 -0
  15. package/dist/cookie-consent-core-fntGUdFt.cjs.map +1 -0
  16. package/dist/{cookie-consent-core-mwVmy5nZ.mjs → cookie-consent-core-lX0QAEAo.mjs} +2 -1
  17. package/dist/cookie-consent-core-lX0QAEAo.mjs.map +1 -0
  18. package/dist/cookie-consent-react.cjs +1 -1
  19. package/dist/cookie-consent-react.mjs +1 -1
  20. package/dist/cookie-consent.cjs +1 -1
  21. package/dist/cookie-consent.css +1 -1
  22. package/dist/cookie-consent.mjs +1 -1
  23. package/dist/dev-panel/dev-panel.d.ts +52 -1
  24. package/dist/dev-panel/parts.d.ts +1 -1
  25. package/dist/dev-panel/use-dev-panel-labels.d.ts +1 -1
  26. package/dist/dev-panel.cjs +2 -2
  27. package/dist/dev-panel.cjs.map +1 -1
  28. package/dist/dev-panel.css +1 -1
  29. package/dist/dev-panel.mjs +384 -283
  30. package/dist/dev-panel.mjs.map +1 -1
  31. package/dist/index.css +1 -1
  32. package/dist/validation/email.d.ts +18 -0
  33. package/dist/validation/mobile-patterns.d.ts +10 -0
  34. package/dist/validation/national-id.d.ts +26 -0
  35. package/dist/validation/phone.d.ts +30 -0
  36. package/package.json +4 -2
  37. package/dist/cookie-consent-core-C4MP7GlV.cjs +0 -2
  38. package/dist/cookie-consent-core-C4MP7GlV.cjs.map +0 -1
  39. package/dist/cookie-consent-core-mwVmy5nZ.mjs.map +0 -1
@@ -1,14 +1,37 @@
1
1
  import { useRender } from '@base-ui/react/use-render';
2
2
  import { Ref } from 'react';
3
- export type CardProps = Omit<useRender.ComponentProps<"div">, "ref"> & {
3
+ import { ColorRoles } from '../color-roles';
4
+ export type CardColor = ColorRoles<"primary" | "tertiary" | "neutral" | "success" | "info" | "warning" | "error">;
5
+ export type CardVariant = "outlined" | "filled";
6
+ export type CardProps = Omit<useRender.ComponentProps<"div">, "ref" | "color"> & {
4
7
  /** The rendered element: the `<div>`, or the element passed to `render`. */
5
8
  ref?: Ref<HTMLElement>;
9
+ /**
10
+ * A tint for the card. Left out, the card is white.
11
+ * - A brand tint: `"primary"` (purple), `"tertiary"` (teal) or `"neutral"`
12
+ * (grey).
13
+ * - A status: `"success"` (teal), `"info"` (blue), `"warning"` (amber) or
14
+ * `"error"` (red).
15
+ */
16
+ color?: CardColor;
17
+ /**
18
+ * With a 1px border, or without one. The card keeps its size either way, so
19
+ * the two line up in a row.
20
+ * @default "outlined"
21
+ */
22
+ variant?: CardVariant;
6
23
  };
7
24
  /**
8
25
  * A flat surface that groups related content: white, with a 1px border and
9
26
  * rounded corners. It has no padding of its own, so an image or a divider can
10
27
  * run edge to edge; put text in `CardContent`.
11
28
  *
29
+ * Set `color` for a tint, and `variant="filled"` to drop the border:
30
+ *
31
+ * ```tsx
32
+ * <Card color="primary" variant="filled">…</Card>
33
+ * ```
34
+ *
12
35
  * ```tsx
13
36
  * <Card>
14
37
  * <CardContent>
@@ -21,7 +44,7 @@ export type CardProps = Omit<useRender.ComponentProps<"div">, "ref"> & {
21
44
  * Renders a `div`; pass `render` for another element, e.g.
22
45
  * `render={<section />}` or `render={<li />}`.
23
46
  */
24
- export declare function Card({ render, ref, className, ...rest }: CardProps): import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>>;
47
+ export declare function Card({ render, ref, className, color, variant, ...rest }: CardProps): import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>>;
25
48
  export type CardContentProps = Omit<useRender.ComponentProps<"div">, "ref"> & {
26
49
  /** The rendered element: the `<div>`, or the element passed to `render`. */
27
50
  ref?: Ref<HTMLElement>;
@@ -7,6 +7,12 @@ export type ComboFieldBaseProps = {
7
7
  helperText?: ReactNode;
8
8
  /** Puts the control, its label and its helper text into the error state. */
9
9
  error?: boolean;
10
+ /**
11
+ * A message for a value that is allowed but unusual, such as an unusually
12
+ * high amount. Shown in amber in place of the helper text, without the
13
+ * error state: the field is not marked invalid. `error` wins when both are set.
14
+ */
15
+ warning?: ReactNode;
10
16
  /** Marks the control as required, with an asterisk after the label. */
11
17
  required?: boolean;
12
18
  disabled?: boolean;
@@ -55,6 +61,8 @@ type ComboFieldProps = Omit<ComboFieldBaseProps, "name"> & {
55
61
  selectTextOnClick?: boolean;
56
62
  /** The content of the popup: the list, and what stands in for it when empty. */
57
63
  children: ReactNode;
64
+ /** More below the helper text, inside the outermost element. */
65
+ afterHelperText?: ReactNode;
58
66
  };
59
- export declare function ComboField({ label, helperText, error, required, disabled, placeholder, onBlur, id, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, className, style, ref, renderRoot, inputProps, chips, filled, clearable, trigger, selectTextOnClick, children, }: ComboFieldProps): import("react").JSX.Element;
67
+ export declare function ComboField({ label, helperText, error, warning, required, disabled, placeholder, onBlur, id, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, className, style, ref, renderRoot, inputProps, chips, filled, clearable, trigger, selectTextOnClick, children, afterHelperText, }: ComboFieldProps): import("react").JSX.Element;
60
68
  export {};
@@ -10,6 +10,14 @@ export type EmailInputProps = ComboFieldBaseProps & {
10
10
  domains?: readonly string[];
11
11
  /** Most suggestions shown at once. @default 6 */
12
12
  maxSuggestions?: number;
13
+ /**
14
+ * When focus leaves the field, offers a fix for a mistyped domain below it:
15
+ * "Mente du anna@gmail.com?" for `anna@gnail.con`, with the address as a
16
+ * button that puts it in the field. The value never changes by itself, and
17
+ * validation is not affected. See `suggestEmailCorrection`.
18
+ * @default true
19
+ */
20
+ suggestCorrection?: boolean;
13
21
  /**
14
22
  * What the browser may fill in. The default lets it offer the user's own
15
23
  * address; pass `"off"` when the address is somebody else's.
@@ -26,4 +34,4 @@ export type EmailInputProps = ComboFieldBaseProps & {
26
34
  * <EmailInput label="E-post" value={email} onValueChange={setEmail} />
27
35
  * ```
28
36
  */
29
- export declare function EmailInput({ value, defaultValue, onValueChange, domains, maxSuggestions, autoComplete, name, ...field }: EmailInputProps): import("react").JSX.Element;
37
+ export declare function EmailInput({ value, defaultValue, onValueChange, domains, maxSuggestions, autoComplete, suggestCorrection, name, onBlur, ref, ...field }: EmailInputProps): import("react").JSX.Element;
@@ -7,10 +7,24 @@ type FieldHelperTextProps = {
7
7
  /** Id the control points at with `aria-describedby`. */
8
8
  id: string;
9
9
  error: boolean;
10
+ /** The text is a warning: amber, and announced politely. */
11
+ warning?: boolean;
10
12
  children: ReactNode;
11
13
  };
12
- /** Helper text below a control. Announced as an alert while in error. */
13
- export declare function FieldHelperText({ id, error, children }: FieldHelperTextProps): import("react").JSX.Element;
14
+ /**
15
+ * Helper text below a control. Announced as an alert while in error, and as a
16
+ * status while it is a warning.
17
+ */
18
+ export declare function FieldHelperText({ id, error, warning, children, }: FieldHelperTextProps): import("react").JSX.Element;
19
+ /**
20
+ * What the line below a control shows: the warning while there is one,
21
+ * otherwise the helper text. An error wins over a warning, so with `error`
22
+ * the line is the helper text (where a form puts its error message).
23
+ */
24
+ export declare function fieldMessage(helperText: ReactNode, warning: ReactNode, error: boolean): {
25
+ content: ReactNode;
26
+ warning: boolean;
27
+ };
14
28
  type FieldGroupLabelProps = {
15
29
  /** Id the group points at with `aria-labelledby`. It sits on the text alone. */
16
30
  id: string;
@@ -7,6 +7,12 @@ export type InputProps = NativeInputProps & {
7
7
  helperText?: ReactNode;
8
8
  /** Puts the input, its label and its helper text into the error state. */
9
9
  error?: boolean;
10
+ /**
11
+ * A message for a value that is allowed but unusual, such as an unusually
12
+ * high amount. Shown in amber in place of the helper text, without the
13
+ * error state: the field is not marked invalid. `error` wins when both are set.
14
+ */
15
+ warning?: ReactNode;
10
16
  /** The text (controlled). Pair with `onValueChange`. */
11
17
  value?: string;
12
18
  /** The text when first rendered, for uncontrolled use. */
@@ -53,5 +59,5 @@ export type InputProps = NativeInputProps & {
53
59
  * />
54
60
  * ```
55
61
  */
56
- export declare function Input({ label, helperText, error, value, defaultValue, onValueChange, startAdornment, endAdornment, multiline, rows, minRows, maxRows, className, style, ref, id, disabled, required, placeholder, "aria-describedby": ariaDescribedBy, ...inputAttributes }: InputProps): import("react").JSX.Element;
62
+ export declare function Input({ label, helperText, error, warning, value, defaultValue, onValueChange, startAdornment, endAdornment, multiline, rows, minRows, maxRows, className, style, ref, id, disabled, required, placeholder, "aria-describedby": ariaDescribedBy, ...inputAttributes }: InputProps): import("react").JSX.Element;
57
63
  export {};
@@ -0,0 +1,28 @@
1
+ import { ReactNode } from 'react';
2
+ import { Currency } from '../../hooks/country/countries';
3
+ import { Language } from '../../i18n';
4
+ /**
5
+ * A unit the library writes for you, in the language of `LeaProvider`:
6
+ *
7
+ * - `{ type: "years" }`: "år", "vuotta", "años". The word follows the number
8
+ * in the field, so Finnish and Spanish read "1 vuosi" and "2 vuotta",
9
+ * "1 año" and "2 años".
10
+ * - `{ type: "currency" }`: the symbol of the currency, "kr" or "€". The
11
+ * currency is the one of the language (`no` NOK, `se` SEK, `fi` and `es`
12
+ * EUR); pass `currency` for another.
13
+ */
14
+ export type NumberInputUnitSpec = {
15
+ type: "years";
16
+ } | {
17
+ type: "currency";
18
+ currency?: Currency;
19
+ };
20
+ /** What `NumberInput` takes as `unit`: your own content, or a unit spec. */
21
+ export type NumberInputUnit = ReactNode | NumberInputUnitSpec;
22
+ /** A spec, as opposed to a string, a number or an element. */
23
+ export declare function isUnitSpec(unit: NumberInputUnit): unit is NumberInputUnitSpec;
24
+ /**
25
+ * The text of a unit spec for a language. `value` picks the plural of "years"
26
+ * and is ignored for a currency; an empty field counts as zero.
27
+ */
28
+ export declare function formatUnit(unit: NumberInputUnitSpec, language: Language, value: number | null | undefined): string;
@@ -1,5 +1,7 @@
1
1
  import { NumberField as BaseNumberField } from '@base-ui/react/number-field';
2
2
  import { CSSProperties, ReactNode, Ref } from 'react';
3
+ import { NumberInputUnit } from './number-input-unit';
4
+ export type { NumberInputUnit, NumberInputUnitSpec } from './number-input-unit';
3
5
  export type NumberInputProps = Omit<BaseNumberField.Root.Props, "ref" | "inputRef" | "render" | "className" | "style"> & {
4
6
  /** The visible `<input>`. */
5
7
  ref?: Ref<HTMLInputElement>;
@@ -16,6 +18,12 @@ export type NumberInputProps = Omit<BaseNumberField.Root.Props, "ref" | "inputRe
16
18
  helperText?: ReactNode;
17
19
  /** Renders the field in its error state (border, label and helper colour). */
18
20
  error?: boolean;
21
+ /**
22
+ * A message for a value that is allowed but unusual, such as an unusually
23
+ * high amount. Shown in amber in place of the helper text, without the
24
+ * error state: the field is not marked invalid. `error` wins when both are set.
25
+ */
26
+ warning?: ReactNode;
19
27
  /** Reflects `required` onto the control and the label asterisk. */
20
28
  required?: boolean;
21
29
  /** Disables the input and the stepper buttons. */
@@ -28,11 +36,17 @@ export type NumberInputProps = Omit<BaseNumberField.Root.Props, "ref" | "inputRe
28
36
  */
29
37
  startIcon?: ReactNode;
30
38
  /**
31
- * Trailing unit shown inside the field (e.g. `kr`, `kr/mnd`). Rendered as real
32
- * text linked to the input via `aria-describedby` — not a placeholder — so it
33
- * is announced and survives typing.
39
+ * Trailing unit shown inside the field. Rendered as real text linked to the
40
+ * input via `aria-describedby` — not a placeholder — so it is announced and
41
+ * survives typing.
42
+ *
43
+ * - Your own content: `unit="kr/mnd"`. It is not translated.
44
+ * - `{ type: "years" }`: "år", "vuotta" or "años" in the language of
45
+ * `LeaProvider`, in the plural that fits the number in the field.
46
+ * - `{ type: "currency" }`: "kr" or "€" for the language (`{ type:
47
+ * "currency", currency: "EUR" }` for another currency).
34
48
  */
35
- unit?: ReactNode;
49
+ unit?: NumberInputUnit;
36
50
  /**
37
51
  * Whether to render the increment / decrement stepper buttons.
38
52
  * @default true
@@ -54,5 +68,13 @@ export type NumberInputProps = Omit<BaseNumberField.Root.Props, "ref" | "inputRe
54
68
  * For money and other open-ended amounts, set `showSteppers={false}` and use a
55
69
  * `unit` (e.g. `kr`) instead — a stepper is only helpful for small bounded
56
70
  * counts.
71
+ *
72
+ * `unit` takes your own text, or a unit the library writes in the language of
73
+ * `LeaProvider`:
74
+ *
75
+ * ```tsx
76
+ * <NumberInput label="Lånebeløp" unit={{ type: "currency" }} showSteppers={false} />
77
+ * <NumberInput label="Nedbetalingstid" unit={{ type: "years" }} min={1} max={15} />
78
+ * ```
57
79
  */
58
- export declare function NumberInput({ label, labelPlacement, tooltip, helperText, error, required, disabled, id, placeholder, startIcon, unit, showSteppers, className, style, ref, ...rest }: NumberInputProps): import("react").JSX.Element;
80
+ export declare function NumberInput({ label, labelPlacement, tooltip, helperText, error, warning, required, disabled, id, placeholder, startIcon, unit, showSteppers, className, style, ref, value, defaultValue, onValueChange, ...rest }: NumberInputProps): import("react").JSX.Element;
@@ -32,6 +32,25 @@ export type PhoneNumberInputProps = NativeInputProps & {
32
32
  defaultValue?: string;
33
33
  /** Fired on every keystroke with the formatted national number and validity meta. */
34
34
  onValueChange?: (value: string, meta: PhoneNumberMeta) => void;
35
+ /**
36
+ * The countries the number may be from. With one, there is no country
37
+ * list: its dial code stands fixed at the start of the field (`+46`). With
38
+ * several, the list holds these alone.
39
+ *
40
+ * Either way the value is the national number without the trunk `0`
41
+ * (`70 123 45 67`): a pasted `+46 70…`, `0046 70…` or `070…` is cleaned up to
42
+ * it, and when focus leaves the field. A number of another country is
43
+ * invalid. Left out, every country is in the list and the number is kept as
44
+ * typed, as before.
45
+ */
46
+ countries?: readonly CountryCode[];
47
+ /**
48
+ * Accept mobile numbers only: a landline is invalid, with a message of its
49
+ * own ("Skriv inn et mobilnummer"). Applies to Sweden, Finland, Norway and
50
+ * Spain, as `validateMobileNumber`; a number of another country is checked
51
+ * as any number. `meta.isValid` follows it.
52
+ */
53
+ mobileOnly?: boolean;
35
54
  /**
36
55
  * Show a built-in "invalid number" error once the field is blurred with a
37
56
  * non-empty, invalid value. Ignored when the consumer drives `error`.
@@ -60,5 +79,5 @@ export type PhoneNumberInputProps = NativeInputProps & {
60
79
  * `value` + `onValueChange`) or left **uncontrolled** (`defaultCountry` /
61
80
  * `defaultValue`).
62
81
  */
63
- export declare function PhoneNumberInput({ label, helperText, error, required, disabled, id, country, defaultCountry, onCountryChange, value, defaultValue, onValueChange, onBlur, validateOnBlur, className, style, ref, "aria-describedby": ariaDescribedBy, ...inputAttributes }: PhoneNumberInputProps): import("react").JSX.Element;
82
+ export declare function PhoneNumberInput({ label, helperText, error, required, disabled, id, country, defaultCountry, onCountryChange, value, defaultValue, onValueChange, onBlur, countries, mobileOnly, validateOnBlur, className, style, ref, "aria-describedby": ariaDescribedBy, ...inputAttributes }: PhoneNumberInputProps): import("react").JSX.Element;
64
83
  export {};
@@ -0,0 +1,2 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,s)=>(s=n==null?{}:e(i(n)),o(r||!n||!n.__esModule||!a.call(n,`default`)?t(s,`default`,{value:n,enumerable:!0}):s,n));let c=require("vanilla-cookieconsent");c=s(c);var l=3,u=[`necessary`,`preferences`,`analytics`,`marketing`],d={se:`leabank.se`,fi:`leabank.fi`,no:`leabank.no`,es:`leabank.es`},f=`cc_cookie`;function p(e,t){let n=d[t],r=e.toLowerCase();return r===n||r.endsWith(`.${n}`)?n:void 0}function m(){document.cookie=`${f}=; path=/; max-age=0`}var h={consent:null,settingsOpen:!1,ready:!1},g=!1,_=h,v=new Set;function y(e){_={..._,...e},v.forEach(e=>e())}function b(){if(typeof window>`u`||!c.validConsent())return null;let e=new Set(c.getUserPreferences().acceptedCategories);return Object.fromEntries(u.map(t=>[t,e.has(t)]))}function x({market:e,onConsentChange:t}){if(typeof window>`u`||g)return;g=!0;let n=p(window.location.hostname,e);n&&m();let r=()=>{let e=b();y({consent:e}),e&&t?.(e)};c.run({root:document.createElement(`div`),autoShow:!1,hideFromBots:!1,language:{default:`en`,translations:{en:{consentModal:{},preferencesModal:{sections:[]}}}},revision:3,cookie:{name:f,sameSite:`Lax`,secure:!0,...n&&{domain:n}},categories:{necessary:{enabled:!0,readOnly:!0},preferences:{enabled:!1,readOnly:!1},analytics:{enabled:!1,readOnly:!1,autoClear:{cookies:[{name:/^(_ga|_gid|_gat)/}]}},marketing:{enabled:!1,readOnly:!1,autoClear:{cookies:[{name:/^(_fbp|_fbc)/},{name:/^(_gcl_)/}]}}},onFirstConsent:r,onChange:r}).then(()=>{let e=b();y({consent:e,ready:!0,settingsOpen:_.settingsOpen||e===null}),e&&t?.(e)})}function S(e){_.ready&&(c.acceptCategory(e===`all`?`all`:[`necessary`,...e.filter(e=>e!==`necessary`)]),y({consent:b(),settingsOpen:!1}))}function C(){typeof window>`u`||y({settingsOpen:!0})}function w(){_.consent!==null&&y({settingsOpen:!1})}function T(e){return v.add(e),()=>{v.delete(e)}}function E(){return _}function D(){return h}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return l}});
2
+ //# sourceMappingURL=cookie-consent-core-fntGUdFt.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie-consent-core-fntGUdFt.cjs","names":[],"sources":["../src/cookie-consent/constants.ts","../src/cookie-consent/domain.ts","../src/cookie-consent/core.ts"],"sourcesContent":["/**\n * Bumping the revision invalidates every visitor's consent on every Lea Bank\n * app at once. Only change it here, then release all apps together.\n */\nexport const COOKIE_CONSENT_REVISION = 3;\n\nexport const COOKIE_CONSENT_CATEGORIES = [\n \"necessary\",\n \"preferences\",\n \"analytics\",\n \"marketing\",\n] as const;\n\nexport type CookieConsentCategory = (typeof COOKIE_CONSENT_CATEGORIES)[number];\n\nexport type ConsentState = Record<CookieConsentCategory, boolean>;\n\nexport type Market = \"se\" | \"fi\" | \"no\" | \"es\";\n\nexport const MARKET_DOMAINS: Record<Market, string> = {\n se: \"leabank.se\",\n fi: \"leabank.fi\",\n no: \"leabank.no\",\n es: \"leabank.es\",\n};\n\nexport const COOKIE_NAME = \"cc_cookie\";\n","import { COOKIE_NAME, MARKET_DOMAINS, type Market } from \"./constants\";\n\n/**\n * Returns the market's registrable domain when the page is served from it or\n * one of its subdomains. Anywhere else (localhost, `*.azurewebsites.net`,\n * which is on the Public Suffix List) the browser would reject the cookie, so\n * it stays host-only.\n */\nexport function resolveCookieDomain(\n hostname: string,\n market: Market,\n): string | undefined {\n const domain = MARKET_DOMAINS[market];\n const host = hostname.toLowerCase();\n\n return host === domain || host.endsWith(`.${domain}`) ? domain : undefined;\n}\n\n/**\n * Erases a host-only consent cookie left by an earlier, domain-less setup.\n * Without this it coexists with the domain cookie under the same name and a\n * stale value can win. A cookie written without `domain` only matches the\n * host-only one, so the shared cookie is kept.\n */\nexport function clearHostOnlyCookie(): void {\n document.cookie = `${COOKIE_NAME}=; path=/; max-age=0`;\n}\n","import * as CookieConsent from \"vanilla-cookieconsent\";\n\nimport {\n COOKIE_CONSENT_CATEGORIES,\n COOKIE_CONSENT_REVISION,\n COOKIE_NAME,\n type ConsentState,\n type CookieConsentCategory,\n type Market,\n} from \"./constants\";\nimport { clearHostOnlyCookie, resolveCookieDomain } from \"./domain\";\n\nexport interface InitCookieConsentOptions {\n market: Market;\n /**\n * Called with the visitor's choice once the library has loaded, when there\n * is a valid consent, and again whenever the choice changes.\n */\n onConsentChange?: (state: ConsentState) => void;\n}\n\nexport interface ConsentSnapshot {\n consent: ConsentState | null;\n /** Whether the settings dialog should be shown. */\n settingsOpen: boolean;\n /** The stored consent has been read and the choice can be changed. */\n ready: boolean;\n}\n\nconst serverSnapshot: ConsentSnapshot = {\n consent: null,\n settingsOpen: false,\n ready: false,\n};\n\nlet started = false;\nlet snapshot = serverSnapshot;\nconst listeners = new Set<() => void>();\n\nfunction update(patch: Partial<ConsentSnapshot>) {\n snapshot = { ...snapshot, ...patch };\n listeners.forEach((listener) => listener());\n}\n\n/** `null` on the server, before the visitor has chosen, or after a revision bump. */\nexport function getConsentState(): ConsentState | null {\n if (typeof window === \"undefined\" || !CookieConsent.validConsent()) {\n return null;\n }\n\n const accepted = new Set(CookieConsent.getUserPreferences().acceptedCategories);\n return Object.fromEntries(\n COOKIE_CONSENT_CATEGORIES.map((category) => [category, accepted.has(category)]),\n ) as ConsentState;\n}\n\n/**\n * Reads the shared consent and keeps it up to date. Only the first call has an\n * effect, and it is a no-op on the server. It shows nothing by itself: the\n * settings dialog is rendered by `CookieConsentProvider`.\n */\nexport function initCookieConsent({\n market,\n onConsentChange,\n}: InitCookieConsentOptions): void {\n if (typeof window === \"undefined\" || started) return;\n started = true;\n\n const domain = resolveCookieDomain(window.location.hostname, market);\n if (domain) clearHostOnlyCookie();\n\n const applyConsent = () => {\n const consent = getConsentState();\n update({ consent });\n if (consent) onConsentChange?.(consent);\n };\n\n // The full build with its UI unused: `run` still builds an empty consent\n // modal when consent is missing, so it goes into a detached `root` that never\n // reaches the page. The UI-less core build of 3.1.0 can't be used, because\n // its `run` throws. `hideFromBots` is off because its check stops `run`\n // before the stored cookie is read, so browser automation such as Playwright\n // could never see a stored consent. With the UI unused, it hides nothing.\n void CookieConsent.run({\n root: document.createElement(\"div\"),\n autoShow: false,\n hideFromBots: false,\n language: {\n default: \"en\",\n translations: { en: { consentModal: {}, preferencesModal: { sections: [] } } },\n },\n revision: COOKIE_CONSENT_REVISION,\n cookie: {\n name: COOKIE_NAME,\n sameSite: \"Lax\",\n secure: true,\n ...(domain && { domain }),\n },\n categories: {\n necessary: { enabled: true, readOnly: true },\n preferences: { enabled: false, readOnly: false },\n analytics: {\n enabled: false,\n readOnly: false,\n autoClear: { cookies: [{ name: /^(_ga|_gid|_gat)/ }] },\n },\n marketing: {\n enabled: false,\n readOnly: false,\n autoClear: {\n cookies: [{ name: /^(_fbp|_fbc)/ }, { name: /^(_gcl_)/ }],\n },\n },\n },\n onFirstConsent: applyConsent,\n onChange: applyConsent,\n }).then(() => {\n const consent = getConsentState();\n update({\n consent,\n ready: true,\n settingsOpen: snapshot.settingsOpen || consent === null,\n });\n if (consent) onConsentChange?.(consent);\n });\n}\n\n/**\n * Stores the visitor's choice. `necessary` is always kept. Does nothing until\n * `initCookieConsent` has read the stored consent.\n */\nexport function setConsent(\n categories: readonly CookieConsentCategory[] | \"all\",\n): void {\n if (!snapshot.ready) return;\n\n CookieConsent.acceptCategory(\n categories === \"all\"\n ? \"all\"\n : [\"necessary\", ...categories.filter((category) => category !== \"necessary\")],\n );\n update({ consent: getConsentState(), settingsOpen: false });\n}\n\n/** Opens the settings dialog of the mounted `CookieConsentProvider`. */\nexport function openCookieSettings(): void {\n if (typeof window === \"undefined\") return;\n update({ settingsOpen: true });\n}\n\n/** Closes the settings dialog, unless the visitor has yet to choose. */\nexport function closeCookieSettings(): void {\n if (snapshot.consent === null) return;\n update({ settingsOpen: false });\n}\n\nexport function subscribe(listener: () => void): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\nexport function getSnapshot(): ConsentSnapshot {\n return snapshot;\n}\n\nexport function getServerSnapshot(): ConsentSnapshot {\n return serverSnapshot;\n}\n"],"mappings":"kiBAIA,IAAa,EAA0B,EAE1B,EAA4B,CACvC,YACA,cACA,YACA,WACF,EAQa,EAAyC,CACpD,GAAI,aACJ,GAAI,aACJ,GAAI,aACJ,GAAI,YACN,EAEa,EAAc,YClB3B,SAAgB,EACd,EACA,EACoB,CACpB,IAAM,EAAS,EAAe,GACxB,EAAO,EAAS,YAAY,EAElC,OAAO,IAAS,GAAU,EAAK,SAAS,IAAI,GAAQ,EAAI,EAAS,IAAA,EACnE,CAQA,SAAgB,GAA4B,CAC1C,SAAS,OAAS,GAAG,EAAY,qBACnC,CCGA,IAAM,EAAkC,CACtC,QAAS,KACT,aAAc,GACd,MAAO,EACT,EAEI,EAAU,GACV,EAAW,EACT,EAAY,IAAI,IAEtB,SAAS,EAAO,EAAiC,CAC/C,EAAW,CAAE,GAAG,EAAU,GAAG,CAAM,EACnC,EAAU,QAAS,GAAa,EAAS,CAAC,CAC5C,CAGA,SAAgB,GAAuC,CACrD,GAAI,OAAO,OAAW,KAAe,CAAC,EAAc,aAAa,EAC/D,OAAO,KAGT,IAAM,EAAW,IAAI,IAAI,EAAc,mBAAmB,CAAC,CAAC,kBAAkB,EAC9E,OAAO,OAAO,YACZ,EAA0B,IAAK,GAAa,CAAC,EAAU,EAAS,IAAI,CAAQ,CAAC,CAAC,CAChF,CACF,CAOA,SAAgB,EAAkB,CAChC,SACA,mBACiC,CACjC,GAAI,OAAO,OAAW,KAAe,EAAS,OAC9C,EAAU,GAEV,IAAM,EAAS,EAAoB,OAAO,SAAS,SAAU,CAAM,EAC/D,GAAQ,EAAoB,EAEhC,IAAM,MAAqB,CACzB,IAAM,EAAU,EAAgB,EAChC,EAAO,CAAE,SAAQ,CAAC,EACd,GAAS,IAAkB,CAAO,CACxC,EAQA,EAAmB,IAAI,CACrB,KAAM,SAAS,cAAc,KAAK,EAClC,SAAU,GACV,aAAc,GACd,SAAU,CACR,QAAS,KACT,aAAc,CAAE,GAAI,CAAE,aAAc,CAAC,EAAG,iBAAkB,CAAE,SAAU,CAAC,CAAE,CAAE,CAAE,CAC/E,EACA,SAAA,EACA,OAAQ,CACN,KAAM,EACN,SAAU,MACV,OAAQ,GACR,GAAI,GAAU,CAAE,QAAO,CACzB,EACA,WAAY,CACV,UAAW,CAAE,QAAS,GAAM,SAAU,EAAK,EAC3C,YAAa,CAAE,QAAS,GAAO,SAAU,EAAM,EAC/C,UAAW,CACT,QAAS,GACT,SAAU,GACV,UAAW,CAAE,QAAS,CAAC,CAAE,KAAM,kBAAmB,CAAC,CAAE,CACvD,EACA,UAAW,CACT,QAAS,GACT,SAAU,GACV,UAAW,CACT,QAAS,CAAC,CAAE,KAAM,cAAe,EAAG,CAAE,KAAM,UAAW,CAAC,CAC1D,CACF,CACF,EACA,eAAgB,EAChB,SAAU,CACZ,CAAC,CAAC,CAAC,SAAW,CACZ,IAAM,EAAU,EAAgB,EAChC,EAAO,CACL,UACA,MAAO,GACP,aAAc,EAAS,cAAgB,IAAY,IACrD,CAAC,EACG,GAAS,IAAkB,CAAO,CACxC,CAAC,CACH,CAMA,SAAgB,EACd,EACM,CACD,EAAS,QAEd,EAAc,eACZ,IAAe,MACX,MACA,CAAC,YAAa,GAAG,EAAW,OAAQ,GAAa,IAAa,WAAW,CAAC,CAChF,EACA,EAAO,CAAE,QAAS,EAAgB,EAAG,aAAc,EAAM,CAAC,EAC5D,CAGA,SAAgB,GAA2B,CACrC,OAAO,OAAW,KACtB,EAAO,CAAE,aAAc,EAAK,CAAC,CAC/B,CAGA,SAAgB,GAA4B,CACtC,EAAS,UAAY,MACzB,EAAO,CAAE,aAAc,EAAM,CAAC,CAChC,CAEA,SAAgB,EAAU,EAAkC,CAE1D,OADA,EAAU,IAAI,CAAQ,MACT,CACX,EAAU,OAAO,CAAQ,CAC3B,CACF,CAEA,SAAgB,GAA+B,CAC7C,OAAO,CACT,CAEA,SAAgB,GAAqC,CACnD,OAAO,CACT"}
@@ -50,6 +50,7 @@ function p({ market: t, onConsentChange: n }) {
50
50
  e.run({
51
51
  root: document.createElement("div"),
52
52
  autoShow: !1,
53
+ hideFromBots: !1,
53
54
  language: {
54
55
  default: "en",
55
56
  translations: { en: {
@@ -121,4 +122,4 @@ function y() {
121
122
  //#endregion
122
123
  export { p as a, _ as c, v as i, n as l, f as n, h as o, y as r, m as s, g as t, t as u };
123
124
 
124
- //# sourceMappingURL=cookie-consent-core-mwVmy5nZ.mjs.map
125
+ //# sourceMappingURL=cookie-consent-core-lX0QAEAo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookie-consent-core-lX0QAEAo.mjs","names":[],"sources":["../src/cookie-consent/constants.ts","../src/cookie-consent/domain.ts","../src/cookie-consent/core.ts"],"sourcesContent":["/**\n * Bumping the revision invalidates every visitor's consent on every Lea Bank\n * app at once. Only change it here, then release all apps together.\n */\nexport const COOKIE_CONSENT_REVISION = 3;\n\nexport const COOKIE_CONSENT_CATEGORIES = [\n \"necessary\",\n \"preferences\",\n \"analytics\",\n \"marketing\",\n] as const;\n\nexport type CookieConsentCategory = (typeof COOKIE_CONSENT_CATEGORIES)[number];\n\nexport type ConsentState = Record<CookieConsentCategory, boolean>;\n\nexport type Market = \"se\" | \"fi\" | \"no\" | \"es\";\n\nexport const MARKET_DOMAINS: Record<Market, string> = {\n se: \"leabank.se\",\n fi: \"leabank.fi\",\n no: \"leabank.no\",\n es: \"leabank.es\",\n};\n\nexport const COOKIE_NAME = \"cc_cookie\";\n","import { COOKIE_NAME, MARKET_DOMAINS, type Market } from \"./constants\";\n\n/**\n * Returns the market's registrable domain when the page is served from it or\n * one of its subdomains. Anywhere else (localhost, `*.azurewebsites.net`,\n * which is on the Public Suffix List) the browser would reject the cookie, so\n * it stays host-only.\n */\nexport function resolveCookieDomain(\n hostname: string,\n market: Market,\n): string | undefined {\n const domain = MARKET_DOMAINS[market];\n const host = hostname.toLowerCase();\n\n return host === domain || host.endsWith(`.${domain}`) ? domain : undefined;\n}\n\n/**\n * Erases a host-only consent cookie left by an earlier, domain-less setup.\n * Without this it coexists with the domain cookie under the same name and a\n * stale value can win. A cookie written without `domain` only matches the\n * host-only one, so the shared cookie is kept.\n */\nexport function clearHostOnlyCookie(): void {\n document.cookie = `${COOKIE_NAME}=; path=/; max-age=0`;\n}\n","import * as CookieConsent from \"vanilla-cookieconsent\";\n\nimport {\n COOKIE_CONSENT_CATEGORIES,\n COOKIE_CONSENT_REVISION,\n COOKIE_NAME,\n type ConsentState,\n type CookieConsentCategory,\n type Market,\n} from \"./constants\";\nimport { clearHostOnlyCookie, resolveCookieDomain } from \"./domain\";\n\nexport interface InitCookieConsentOptions {\n market: Market;\n /**\n * Called with the visitor's choice once the library has loaded, when there\n * is a valid consent, and again whenever the choice changes.\n */\n onConsentChange?: (state: ConsentState) => void;\n}\n\nexport interface ConsentSnapshot {\n consent: ConsentState | null;\n /** Whether the settings dialog should be shown. */\n settingsOpen: boolean;\n /** The stored consent has been read and the choice can be changed. */\n ready: boolean;\n}\n\nconst serverSnapshot: ConsentSnapshot = {\n consent: null,\n settingsOpen: false,\n ready: false,\n};\n\nlet started = false;\nlet snapshot = serverSnapshot;\nconst listeners = new Set<() => void>();\n\nfunction update(patch: Partial<ConsentSnapshot>) {\n snapshot = { ...snapshot, ...patch };\n listeners.forEach((listener) => listener());\n}\n\n/** `null` on the server, before the visitor has chosen, or after a revision bump. */\nexport function getConsentState(): ConsentState | null {\n if (typeof window === \"undefined\" || !CookieConsent.validConsent()) {\n return null;\n }\n\n const accepted = new Set(CookieConsent.getUserPreferences().acceptedCategories);\n return Object.fromEntries(\n COOKIE_CONSENT_CATEGORIES.map((category) => [category, accepted.has(category)]),\n ) as ConsentState;\n}\n\n/**\n * Reads the shared consent and keeps it up to date. Only the first call has an\n * effect, and it is a no-op on the server. It shows nothing by itself: the\n * settings dialog is rendered by `CookieConsentProvider`.\n */\nexport function initCookieConsent({\n market,\n onConsentChange,\n}: InitCookieConsentOptions): void {\n if (typeof window === \"undefined\" || started) return;\n started = true;\n\n const domain = resolveCookieDomain(window.location.hostname, market);\n if (domain) clearHostOnlyCookie();\n\n const applyConsent = () => {\n const consent = getConsentState();\n update({ consent });\n if (consent) onConsentChange?.(consent);\n };\n\n // The full build with its UI unused: `run` still builds an empty consent\n // modal when consent is missing, so it goes into a detached `root` that never\n // reaches the page. The UI-less core build of 3.1.0 can't be used, because\n // its `run` throws. `hideFromBots` is off because its check stops `run`\n // before the stored cookie is read, so browser automation such as Playwright\n // could never see a stored consent. With the UI unused, it hides nothing.\n void CookieConsent.run({\n root: document.createElement(\"div\"),\n autoShow: false,\n hideFromBots: false,\n language: {\n default: \"en\",\n translations: { en: { consentModal: {}, preferencesModal: { sections: [] } } },\n },\n revision: COOKIE_CONSENT_REVISION,\n cookie: {\n name: COOKIE_NAME,\n sameSite: \"Lax\",\n secure: true,\n ...(domain && { domain }),\n },\n categories: {\n necessary: { enabled: true, readOnly: true },\n preferences: { enabled: false, readOnly: false },\n analytics: {\n enabled: false,\n readOnly: false,\n autoClear: { cookies: [{ name: /^(_ga|_gid|_gat)/ }] },\n },\n marketing: {\n enabled: false,\n readOnly: false,\n autoClear: {\n cookies: [{ name: /^(_fbp|_fbc)/ }, { name: /^(_gcl_)/ }],\n },\n },\n },\n onFirstConsent: applyConsent,\n onChange: applyConsent,\n }).then(() => {\n const consent = getConsentState();\n update({\n consent,\n ready: true,\n settingsOpen: snapshot.settingsOpen || consent === null,\n });\n if (consent) onConsentChange?.(consent);\n });\n}\n\n/**\n * Stores the visitor's choice. `necessary` is always kept. Does nothing until\n * `initCookieConsent` has read the stored consent.\n */\nexport function setConsent(\n categories: readonly CookieConsentCategory[] | \"all\",\n): void {\n if (!snapshot.ready) return;\n\n CookieConsent.acceptCategory(\n categories === \"all\"\n ? \"all\"\n : [\"necessary\", ...categories.filter((category) => category !== \"necessary\")],\n );\n update({ consent: getConsentState(), settingsOpen: false });\n}\n\n/** Opens the settings dialog of the mounted `CookieConsentProvider`. */\nexport function openCookieSettings(): void {\n if (typeof window === \"undefined\") return;\n update({ settingsOpen: true });\n}\n\n/** Closes the settings dialog, unless the visitor has yet to choose. */\nexport function closeCookieSettings(): void {\n if (snapshot.consent === null) return;\n update({ settingsOpen: false });\n}\n\nexport function subscribe(listener: () => void): () => void {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n}\n\nexport function getSnapshot(): ConsentSnapshot {\n return snapshot;\n}\n\nexport function getServerSnapshot(): ConsentSnapshot {\n return serverSnapshot;\n}\n"],"mappings":";;AAIA,IAAa,IAA0B,GAE1B,IAA4B;CACvC;CACA;CACA;CACA;AACF,GAQa,IAAyC;CACpD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN,GAEa,IAAc;;;AClB3B,SAAgB,EACd,GACA,GACoB;CACpB,IAAM,IAAS,EAAe,IACxB,IAAO,EAAS,YAAY;CAElC,OAAO,MAAS,KAAU,EAAK,SAAS,IAAI,GAAQ,IAAI,IAAS,KAAA;AACnE;AAQA,SAAgB,IAA4B;CAC1C,SAAS,SAAS,GAAG,EAAY;AACnC;;;ACGA,IAAM,IAAkC;CACtC,SAAS;CACT,cAAc;CACd,OAAO;AACT,GAEI,IAAU,IACV,IAAW,GACT,oBAAY,IAAI,IAAgB;AAEtC,SAAS,EAAO,GAAiC;CAE/C,AADA,IAAW;EAAE,GAAG;EAAU,GAAG;CAAM,GACnC,EAAU,SAAS,MAAa,EAAS,CAAC;AAC5C;AAGA,SAAgB,IAAuC;CACrD,IAAI,OAAO,SAAW,OAAe,CAAC,EAAc,aAAa,GAC/D,OAAO;CAGT,IAAM,IAAW,IAAI,IAAI,EAAc,mBAAmB,CAAC,CAAC,kBAAkB;CAC9E,OAAO,OAAO,YACZ,EAA0B,KAAK,MAAa,CAAC,GAAU,EAAS,IAAI,CAAQ,CAAC,CAAC,CAChF;AACF;AAOA,SAAgB,EAAkB,EAChC,WACA,sBACiC;CACjC,IAAI,OAAO,SAAW,OAAe,GAAS;CAC9C,IAAU;CAEV,IAAM,IAAS,EAAoB,OAAO,SAAS,UAAU,CAAM;CACnE,AAAI,KAAQ,EAAoB;CAEhC,IAAM,UAAqB;EACzB,IAAM,IAAU,EAAgB;EAEhC,AADA,EAAO,EAAE,WAAQ,CAAC,GACd,KAAS,IAAkB,CAAO;CACxC;CAQA,EAAmB,IAAI;EACrB,MAAM,SAAS,cAAc,KAAK;EAClC,UAAU;EACV,cAAc;EACd,UAAU;GACR,SAAS;GACT,cAAc,EAAE,IAAI;IAAE,cAAc,CAAC;IAAG,kBAAkB,EAAE,UAAU,CAAC,EAAE;GAAE,EAAE;EAC/E;EACA,UAAA;EACA,QAAQ;GACN,MAAM;GACN,UAAU;GACV,QAAQ;GACR,GAAI,KAAU,EAAE,UAAO;EACzB;EACA,YAAY;GACV,WAAW;IAAE,SAAS;IAAM,UAAU;GAAK;GAC3C,aAAa;IAAE,SAAS;IAAO,UAAU;GAAM;GAC/C,WAAW;IACT,SAAS;IACT,UAAU;IACV,WAAW,EAAE,SAAS,CAAC,EAAE,MAAM,mBAAmB,CAAC,EAAE;GACvD;GACA,WAAW;IACT,SAAS;IACT,UAAU;IACV,WAAW,EACT,SAAS,CAAC,EAAE,MAAM,eAAe,GAAG,EAAE,MAAM,WAAW,CAAC,EAC1D;GACF;EACF;EACA,gBAAgB;EAChB,UAAU;CACZ,CAAC,CAAC,CAAC,WAAW;EACZ,IAAM,IAAU,EAAgB;EAMhC,AALA,EAAO;GACL;GACA,OAAO;GACP,cAAc,EAAS,gBAAgB,MAAY;EACrD,CAAC,GACG,KAAS,IAAkB,CAAO;CACxC,CAAC;AACH;AAMA,SAAgB,EACd,GACM;CACD,EAAS,UAEd,EAAc,eACZ,MAAe,QACX,QACA,CAAC,aAAa,GAAG,EAAW,QAAQ,MAAa,MAAa,WAAW,CAAC,CAChF,GACA,EAAO;EAAE,SAAS,EAAgB;EAAG,cAAc;CAAM,CAAC;AAC5D;AAGA,SAAgB,IAA2B;CACrC,OAAO,SAAW,OACtB,EAAO,EAAE,cAAc,GAAK,CAAC;AAC/B;AAGA,SAAgB,IAA4B;CACtC,EAAS,YAAY,QACzB,EAAO,EAAE,cAAc,GAAM,CAAC;AAChC;AAEA,SAAgB,EAAU,GAAkC;CAE1D,OADA,EAAU,IAAI,CAAQ,SACT;EACX,EAAU,OAAO,CAAQ;CAC3B;AACF;AAEA,SAAgB,IAA+B;CAC7C,OAAO;AACT;AAEA,SAAgB,IAAqC;CACnD,OAAO;AACT"}
@@ -1,2 +1,2 @@
1
- "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});require('./cookie-consent.css');const e=require("./cookie-consent-core-C4MP7GlV.cjs");let t=require("react"),n=require("@base-ui/react/button"),r=require("@base-ui/react/use-render"),i=require("react/jsx-runtime"),a=require("@base-ui/react/dialog"),o=require("lucide-react"),s=require("@base-ui/react/switch"),c=require("@base-ui/react/accordion");var l=(e,t)=>n=>[e,typeof t==`function`?t(n):t].filter(Boolean).join(` `),u={Button:`_Button_1d72q_1`,IconButton:`_IconButton_1d72q_125`,Spinner:`_Spinner_1d72q_150`,"button-spin":`_button-spin_1d72q_1`,SrOnly:`_SrOnly_1d72q_168`},d=e=>(0,t.isValidElement)(e)&&(e.props.href!=null||e.props.to!=null),f=e=>e.preventDefault();function p({loading:e=!1,disabled:t,className:a,render:o,nativeButton:s,focusableWhenDisabled:c,ref:l,...u}){let p=!!(t||e),m=d(o),h={"aria-busy":e||void 0,"data-loading":e||void 0};return(0,r.useRender)({enabled:m,render:m?o:void 0,ref:l,defaultTagName:`a`,props:{...u,...h,"aria-disabled":p||void 0,"data-disabled":p?``:void 0,className:typeof a==`function`?a({disabled:p}):a,onClick:p?f:u.onClick}})||(0,i.jsx)(n.Button,{...u,...h,ref:l,render:o,nativeButton:s,focusableWhenDisabled:c,disabled:p,className:a})}function m({variant:e=`solid`,color:t=`primary`,size:n=`md`,className:r,...a}){return(0,i.jsx)(p,{...a,"data-variant":e,"data-color":t,"data-size":n,className:l(u.Button,r)})}function h({startIcon:e,endIcon:t,loading:n=!1,loadingLabel:r,children:a,...o}){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(m,{...o,loading:n,"data-start-icon":n||e!=null||void 0,"data-end-icon":t!=null||void 0,children:[n?(0,i.jsx)(`span`,{className:u.Spinner,"aria-hidden":!0}):e,a,t]}),r!=null&&(0,i.jsx)(`span`,{role:`status`,className:u.SrOnly,children:n?r:null})]})}var g={Backdrop:`_Backdrop_1mady_8`,Viewport:`_Viewport_1mady_22`,Popup:`_Popup_1mady_38`,Header:`_Header_1mady_78`,Title:`_Title_1mady_88`,Description:`_Description_1mady_97`,Content:`_Content_1mady_111`,Footer:`_Footer_1mady_119`,CloseButton:`_CloseButton_1mady_135`},_=(0,t.createContext)(`no`),v=()=>(0,t.useContext)(_);function y(e){return function(){let t=v(),n={};return Object.keys(e).forEach(r=>{let i=e[r];n[r]=i[t]??i.no}),n}}var b=y({close:{no:`Lukk`,se:`Stäng`,fi:`Sulje`,es:`Cerrar`}}),x=a.Dialog.Root;a.Dialog.Trigger;var S=a.Dialog.Portal;function C({className:e,...t}){return(0,i.jsx)(a.Dialog.Backdrop,{...t,className:l(g.Backdrop,e)})}function w({className:e,...t}){return(0,i.jsx)(a.Dialog.Viewport,{...t,className:l(g.Viewport,e)})}function T({size:e=`sm`,fullScreenOnMobile:t,className:n,...r}){return(0,i.jsx)(a.Dialog.Popup,{...r,"data-size":e,"data-full-screen-on-mobile":t||void 0,className:l(g.Popup,n)})}function E({className:e,...t}){return(0,i.jsx)(`div`,{...t,className:[g.Header,e].filter(Boolean).join(` `)})}function D({className:e,...t}){return(0,i.jsx)(a.Dialog.Title,{...t,className:l(g.Title,e)})}function O({className:e,...t}){return(0,i.jsx)(a.Dialog.Description,{...t,className:l(g.Description,e)})}function k({className:e,...t}){return(0,i.jsx)(`div`,{...t,className:[g.Content,e].filter(Boolean).join(` `)})}function A({className:e,...t}){return(0,i.jsx)(`div`,{...t,className:[g.Footer,e].filter(Boolean).join(` `)})}a.Dialog.Close;function j({label:e,className:t,...n}){let r=b();return(0,i.jsx)(a.Dialog.Close,{...n,"aria-label":e??r.close,className:l(g.CloseButton,t),children:(0,i.jsx)(o.X,{size:20,"aria-hidden":!0})})}var M={Switch:`_Switch_9c9ji_7`,Thumb:`_Thumb_9c9ji_36`};function N({className:e,...t}){return(0,i.jsx)(s.Switch.Root,{...t,className:l(M.Switch,e),children:(0,i.jsx)(s.Switch.Thumb,{className:M.Thumb})})}var P={Root:`_Root_18gqk_13`,Item:`_Item_18gqk_10`,Header:`_Header_18gqk_10`,Trigger:`_Trigger_18gqk_95`,Label:`_Label_18gqk_136`,Icon:`_Icon_18gqk_140`,Panel:`_Panel_18gqk_158`,Content:`_Content_18gqk_169`};function F({variant:e=`outline`,iconPosition:t=`end`,className:n,...r}){return(0,i.jsx)(c.Accordion.Root,{...r,"data-variant":e,"data-icon-position":t,className:l(P.Root,n)})}function I({className:e,...t}){return(0,i.jsx)(c.Accordion.Item,{...t,className:l(P.Item,e)})}function L({className:e,...t}){return(0,i.jsx)(c.Accordion.Header,{...t,className:l(P.Header,e)})}function R({children:e,className:t,...n}){return(0,i.jsxs)(c.Accordion.Trigger,{...n,className:l(P.Trigger,t),children:[(0,i.jsx)(`span`,{className:P.Label,children:e}),(0,i.jsx)(o.ChevronDown,{className:P.Icon,size:20,"aria-hidden":!0})]})}function z({children:e,className:t,...n}){return(0,i.jsx)(c.Accordion.Panel,{...n,className:l(P.Panel,t),children:(0,i.jsx)(`div`,{className:P.Content,children:e})})}var B={Intro:`_Intro_nxwj4_7`,Categories:`_Categories_nxwj4_39`,CategoryDescription:`_CategoryDescription_nxwj4_43`,Actions:`_Actions_nxwj4_52`,Save:`_Save_nxwj4_63`},V=`https://relative.invalid`;function H(e,t){try{return new URL(e,t)}catch{return null}}function U(e){let t=e.trim();if(!t)return!1;let n=H(t);return n?n.protocol===`https:`||n.protocol===`mailto:`:H(t,V)?.origin===V}function W({href:e,resolveHref:t=e=>e,children:n}){let r=t(e);return!r||!U(r)?(0,i.jsx)(i.Fragment,{children:n}):(0,i.jsx)(`a`,{href:r.trim(),target:`_blank`,rel:`noopener noreferrer`,children:n})}function G({node:e}){let t=e.text;return e.underline&&(t=(0,i.jsx)(`u`,{children:t})),e.italic&&(t=(0,i.jsx)(`em`,{children:t})),e.bold&&(t=(0,i.jsx)(`strong`,{children:t})),(0,i.jsx)(i.Fragment,{children:t})}function K({nodes:e,resolveHref:t}){return(0,i.jsx)(i.Fragment,{children:(e??[]).map((e,n)=>e.type===`text`?(0,i.jsx)(G,{node:e},n):e.type===`link`?(0,i.jsx)(W,{href:e.url??``,resolveHref:t,children:(e.children??[]).filter(e=>e.type===`text`).map((e,t)=>(0,i.jsx)(G,{node:e},t))},n):null)})}function q({node:e,resolveHref:t}){let n=e.format===`ordered`?`ol`:`ul`;return(0,i.jsx)(n,{children:(e.children??[]).map((e,n)=>e.type===`list`?(0,i.jsx)(`li`,{children:(0,i.jsx)(q,{node:e,resolveHref:t})},n):e.type===`list-item`?(0,i.jsx)(`li`,{children:(0,i.jsx)(K,{nodes:e.children,resolveHref:t})},n):null)})}function J({nodes:e,resolveHref:t}){return(0,i.jsx)(i.Fragment,{children:e.map((e,n)=>{switch(e.type){case`paragraph`:return(0,i.jsx)(`p`,{children:(0,i.jsx)(K,{nodes:e.children,resolveHref:t})},n);case`heading`:return(0,i.jsx)(`p`,{children:(0,i.jsx)(`strong`,{children:(0,i.jsx)(K,{nodes:e.children,resolveHref:t})})},n);case`list`:return(0,i.jsx)(q,{node:e,resolveHref:t},n);default:return null}})})}function Y(e){return{necessary:!0,preferences:e?.preferences??!1,analytics:e?.analytics??!1,marketing:e?.marketing??!1}}function X({category:e,copy:n,checked:r,onCheckedChange:a}){let o=(0,t.useId)(),s=(0,t.useId)(),{title:c,description:l}=n.categories[e];return(0,i.jsxs)(I,{value:e,children:[(0,i.jsxs)(L,{children:[(0,i.jsx)(R,{children:(0,i.jsx)(`span`,{id:o,children:c})}),(0,i.jsx)(N,{"aria-labelledby":o,"aria-describedby":l?s:void 0,checked:r,disabled:e===`necessary`,onCheckedChange:a})]}),(0,i.jsx)(z,{keepMounted:!0,children:l&&(0,i.jsx)(`p`,{id:s,className:B.CategoryDescription,children:l})})]})}function Z({open:n,consent:r,copy:a,resolveHref:o,onAcceptAll:s,onAcceptNecessary:c,onSave:l,onClose:u}){let d=r!==null,[f,p]=(0,t.useState)(()=>Y(r)),[m,g]=(0,t.useState)(n);return n!==m&&(g(n),n&&p(Y(r))),(0,i.jsx)(x,{open:n,onOpenChange:e=>{!e&&d&&u()},disablePointerDismissal:!d,children:(0,i.jsxs)(S,{children:[(0,i.jsx)(C,{}),(0,i.jsx)(w,{children:(0,i.jsxs)(T,{fullScreenOnMobile:!0,size:`md`,children:[(0,i.jsxs)(E,{children:[(0,i.jsx)(D,{children:a.modalTitle}),d&&(0,i.jsx)(j,{label:a.closeIconLabel})]}),(0,i.jsxs)(k,{children:[(0,i.jsx)(O,{render:(0,i.jsx)(`div`,{}),className:B.Intro,children:(0,i.jsx)(J,{nodes:a.intro,resolveHref:o})}),(0,i.jsx)(F,{variant:`solid`,iconPosition:`start`,multiple:!0,className:B.Categories,children:e.l.map(e=>(0,i.jsx)(X,{category:e,copy:a,checked:f[e],onCheckedChange:t=>p(n=>({...n,[e]:t}))},e))})]}),(0,i.jsxs)(A,{className:B.Actions,children:[(0,i.jsx)(h,{onClick:s,color:`secondary`,size:`sm`,children:a.btnAcceptAll}),(0,i.jsx)(h,{onClick:c,color:`secondary`,size:`sm`,children:a.btnAcceptNecessary}),(0,i.jsx)(h,{variant:`outline`,color:`secondary`,size:`sm`,className:B.Save,onClick:()=>l(e.l.filter(e=>f[e])),children:a.btnSaveSettings})]})]})})]})})}var Q=(0,t.createContext)(null);function $({market:n,copy:r,resolveHref:a,children:o}){let{consent:s,settingsOpen:c,ready:l}=(0,t.useSyncExternalStore)(e.c,e.i,e.r);(0,t.useEffect)(()=>{e.a({market:n})},[]);let u=(0,t.useMemo)(()=>({consent:s,openSettings:e.o}),[s]);return(0,i.jsxs)(Q.Provider,{value:u,children:[o,l&&(0,i.jsx)(Z,{open:c,consent:s,copy:r,resolveHref:a,onAcceptAll:()=>e.s(`all`),onAcceptNecessary:()=>e.s([]),onSave:e.s,onClose:e.t})]})}function ee(){let e=(0,t.useContext)(Q);if(!e)throw Error(`useCookieConsent must be used inside a CookieConsentProvider.`);return e}exports.CookieConsentProvider=$,exports.useCookieConsent=ee;
1
+ "use client";Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});require('./cookie-consent.css');const e=require("./cookie-consent-core-fntGUdFt.cjs");let t=require("react"),n=require("@base-ui/react/button"),r=require("@base-ui/react/use-render"),i=require("react/jsx-runtime"),a=require("@base-ui/react/dialog"),o=require("lucide-react"),s=require("@base-ui/react/switch"),c=require("@base-ui/react/accordion");var l=(e,t)=>n=>[e,typeof t==`function`?t(n):t].filter(Boolean).join(` `),u={Button:`_Button_1d72q_1`,IconButton:`_IconButton_1d72q_125`,Spinner:`_Spinner_1d72q_150`,"button-spin":`_button-spin_1d72q_1`,SrOnly:`_SrOnly_1d72q_168`},d=e=>(0,t.isValidElement)(e)&&(e.props.href!=null||e.props.to!=null),f=e=>e.preventDefault();function p({loading:e=!1,disabled:t,className:a,render:o,nativeButton:s,focusableWhenDisabled:c,ref:l,...u}){let p=!!(t||e),m=d(o),h={"aria-busy":e||void 0,"data-loading":e||void 0};return(0,r.useRender)({enabled:m,render:m?o:void 0,ref:l,defaultTagName:`a`,props:{...u,...h,"aria-disabled":p||void 0,"data-disabled":p?``:void 0,className:typeof a==`function`?a({disabled:p}):a,onClick:p?f:u.onClick}})||(0,i.jsx)(n.Button,{...u,...h,ref:l,render:o,nativeButton:s,focusableWhenDisabled:c,disabled:p,className:a})}function m({variant:e=`solid`,color:t=`primary`,size:n=`md`,className:r,...a}){return(0,i.jsx)(p,{...a,"data-variant":e,"data-color":t,"data-size":n,className:l(u.Button,r)})}function h({startIcon:e,endIcon:t,loading:n=!1,loadingLabel:r,children:a,...o}){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(m,{...o,loading:n,"data-start-icon":n||e!=null||void 0,"data-end-icon":t!=null||void 0,children:[n?(0,i.jsx)(`span`,{className:u.Spinner,"aria-hidden":!0}):e,a,t]}),r!=null&&(0,i.jsx)(`span`,{role:`status`,className:u.SrOnly,children:n?r:null})]})}var g={Backdrop:`_Backdrop_1mady_8`,Viewport:`_Viewport_1mady_22`,Popup:`_Popup_1mady_38`,Header:`_Header_1mady_78`,Title:`_Title_1mady_88`,Description:`_Description_1mady_97`,Content:`_Content_1mady_111`,Footer:`_Footer_1mady_119`,CloseButton:`_CloseButton_1mady_135`},_=(0,t.createContext)(`no`),v=()=>(0,t.useContext)(_);function y(e){return function(){let t=v(),n={};return Object.keys(e).forEach(r=>{let i=e[r];n[r]=i[t]??i.no}),n}}var b=y({close:{no:`Lukk`,se:`Stäng`,fi:`Sulje`,es:`Cerrar`}}),x=a.Dialog.Root;a.Dialog.Trigger;var S=a.Dialog.Portal;function C({className:e,...t}){return(0,i.jsx)(a.Dialog.Backdrop,{...t,className:l(g.Backdrop,e)})}function w({className:e,...t}){return(0,i.jsx)(a.Dialog.Viewport,{...t,className:l(g.Viewport,e)})}function T({size:e=`sm`,fullScreenOnMobile:t,className:n,...r}){return(0,i.jsx)(a.Dialog.Popup,{...r,"data-size":e,"data-full-screen-on-mobile":t||void 0,className:l(g.Popup,n)})}function E({className:e,...t}){return(0,i.jsx)(`div`,{...t,className:[g.Header,e].filter(Boolean).join(` `)})}function D({className:e,...t}){return(0,i.jsx)(a.Dialog.Title,{...t,className:l(g.Title,e)})}function O({className:e,...t}){return(0,i.jsx)(a.Dialog.Description,{...t,className:l(g.Description,e)})}function k({className:e,...t}){return(0,i.jsx)(`div`,{...t,className:[g.Content,e].filter(Boolean).join(` `)})}function A({className:e,...t}){return(0,i.jsx)(`div`,{...t,className:[g.Footer,e].filter(Boolean).join(` `)})}a.Dialog.Close;function j({label:e,className:t,...n}){let r=b();return(0,i.jsx)(a.Dialog.Close,{...n,"aria-label":e??r.close,className:l(g.CloseButton,t),children:(0,i.jsx)(o.X,{size:20,"aria-hidden":!0})})}var M={Switch:`_Switch_9c9ji_7`,Thumb:`_Thumb_9c9ji_36`};function N({className:e,...t}){return(0,i.jsx)(s.Switch.Root,{...t,className:l(M.Switch,e),children:(0,i.jsx)(s.Switch.Thumb,{className:M.Thumb})})}var P={Root:`_Root_18gqk_13`,Item:`_Item_18gqk_10`,Header:`_Header_18gqk_10`,Trigger:`_Trigger_18gqk_95`,Label:`_Label_18gqk_136`,Icon:`_Icon_18gqk_140`,Panel:`_Panel_18gqk_158`,Content:`_Content_18gqk_169`};function F({variant:e=`outline`,iconPosition:t=`end`,className:n,...r}){return(0,i.jsx)(c.Accordion.Root,{...r,"data-variant":e,"data-icon-position":t,className:l(P.Root,n)})}function I({className:e,...t}){return(0,i.jsx)(c.Accordion.Item,{...t,className:l(P.Item,e)})}function L({className:e,...t}){return(0,i.jsx)(c.Accordion.Header,{...t,className:l(P.Header,e)})}function R({children:e,className:t,...n}){return(0,i.jsxs)(c.Accordion.Trigger,{...n,className:l(P.Trigger,t),children:[(0,i.jsx)(`span`,{className:P.Label,children:e}),(0,i.jsx)(o.ChevronDown,{className:P.Icon,size:20,"aria-hidden":!0})]})}function z({children:e,className:t,...n}){return(0,i.jsx)(c.Accordion.Panel,{...n,className:l(P.Panel,t),children:(0,i.jsx)(`div`,{className:P.Content,children:e})})}var B={Intro:`_Intro_nxwj4_7`,Categories:`_Categories_nxwj4_39`,CategoryDescription:`_CategoryDescription_nxwj4_43`,Actions:`_Actions_nxwj4_52`,Save:`_Save_nxwj4_63`},V=`https://relative.invalid`;function H(e,t){try{return new URL(e,t)}catch{return null}}function U(e){let t=e.trim();if(!t)return!1;let n=H(t);return n?n.protocol===`https:`||n.protocol===`mailto:`:H(t,V)?.origin===V}function W({href:e,resolveHref:t=e=>e,children:n}){let r=t(e);return!r||!U(r)?(0,i.jsx)(i.Fragment,{children:n}):(0,i.jsx)(`a`,{href:r.trim(),target:`_blank`,rel:`noopener noreferrer`,children:n})}function G({node:e}){let t=e.text;return e.underline&&(t=(0,i.jsx)(`u`,{children:t})),e.italic&&(t=(0,i.jsx)(`em`,{children:t})),e.bold&&(t=(0,i.jsx)(`strong`,{children:t})),(0,i.jsx)(i.Fragment,{children:t})}function K({nodes:e,resolveHref:t}){return(0,i.jsx)(i.Fragment,{children:(e??[]).map((e,n)=>e.type===`text`?(0,i.jsx)(G,{node:e},n):e.type===`link`?(0,i.jsx)(W,{href:e.url??``,resolveHref:t,children:(e.children??[]).filter(e=>e.type===`text`).map((e,t)=>(0,i.jsx)(G,{node:e},t))},n):null)})}function q({node:e,resolveHref:t}){let n=e.format===`ordered`?`ol`:`ul`;return(0,i.jsx)(n,{children:(e.children??[]).map((e,n)=>e.type===`list`?(0,i.jsx)(`li`,{children:(0,i.jsx)(q,{node:e,resolveHref:t})},n):e.type===`list-item`?(0,i.jsx)(`li`,{children:(0,i.jsx)(K,{nodes:e.children,resolveHref:t})},n):null)})}function J({nodes:e,resolveHref:t}){return(0,i.jsx)(i.Fragment,{children:e.map((e,n)=>{switch(e.type){case`paragraph`:return(0,i.jsx)(`p`,{children:(0,i.jsx)(K,{nodes:e.children,resolveHref:t})},n);case`heading`:return(0,i.jsx)(`p`,{children:(0,i.jsx)(`strong`,{children:(0,i.jsx)(K,{nodes:e.children,resolveHref:t})})},n);case`list`:return(0,i.jsx)(q,{node:e,resolveHref:t},n);default:return null}})})}function Y(e){return{necessary:!0,preferences:e?.preferences??!1,analytics:e?.analytics??!1,marketing:e?.marketing??!1}}function X({category:e,copy:n,checked:r,onCheckedChange:a}){let o=(0,t.useId)(),s=(0,t.useId)(),{title:c,description:l}=n.categories[e];return(0,i.jsxs)(I,{value:e,children:[(0,i.jsxs)(L,{children:[(0,i.jsx)(R,{children:(0,i.jsx)(`span`,{id:o,children:c})}),(0,i.jsx)(N,{"aria-labelledby":o,"aria-describedby":l?s:void 0,checked:r,disabled:e===`necessary`,onCheckedChange:a})]}),(0,i.jsx)(z,{keepMounted:!0,children:l&&(0,i.jsx)(`p`,{id:s,className:B.CategoryDescription,children:l})})]})}function Z({open:n,consent:r,copy:a,resolveHref:o,onAcceptAll:s,onAcceptNecessary:c,onSave:l,onClose:u}){let d=r!==null,[f,p]=(0,t.useState)(()=>Y(r)),[m,g]=(0,t.useState)(n);return n!==m&&(g(n),n&&p(Y(r))),(0,i.jsx)(x,{open:n,onOpenChange:e=>{!e&&d&&u()},disablePointerDismissal:!d,children:(0,i.jsxs)(S,{children:[(0,i.jsx)(C,{}),(0,i.jsx)(w,{children:(0,i.jsxs)(T,{fullScreenOnMobile:!0,size:`md`,children:[(0,i.jsxs)(E,{children:[(0,i.jsx)(D,{children:a.modalTitle}),d&&(0,i.jsx)(j,{label:a.closeIconLabel})]}),(0,i.jsxs)(k,{children:[(0,i.jsx)(O,{render:(0,i.jsx)(`div`,{}),className:B.Intro,children:(0,i.jsx)(J,{nodes:a.intro,resolveHref:o})}),(0,i.jsx)(F,{variant:`solid`,iconPosition:`start`,multiple:!0,className:B.Categories,children:e.l.map(e=>(0,i.jsx)(X,{category:e,copy:a,checked:f[e],onCheckedChange:t=>p(n=>({...n,[e]:t}))},e))})]}),(0,i.jsxs)(A,{className:B.Actions,children:[(0,i.jsx)(h,{onClick:s,color:`secondary`,size:`sm`,children:a.btnAcceptAll}),(0,i.jsx)(h,{onClick:c,color:`secondary`,size:`sm`,children:a.btnAcceptNecessary}),(0,i.jsx)(h,{variant:`outline`,color:`secondary`,size:`sm`,className:B.Save,onClick:()=>l(e.l.filter(e=>f[e])),children:a.btnSaveSettings})]})]})})]})})}var Q=(0,t.createContext)(null);function $({market:n,copy:r,resolveHref:a,children:o}){let{consent:s,settingsOpen:c,ready:l}=(0,t.useSyncExternalStore)(e.c,e.i,e.r);(0,t.useEffect)(()=>{e.a({market:n})},[]);let u=(0,t.useMemo)(()=>({consent:s,openSettings:e.o}),[s]);return(0,i.jsxs)(Q.Provider,{value:u,children:[o,l&&(0,i.jsx)(Z,{open:c,consent:s,copy:r,resolveHref:a,onAcceptAll:()=>e.s(`all`),onAcceptNecessary:()=>e.s([]),onSave:e.s,onClose:e.t})]})}function ee(){let e=(0,t.useContext)(Q);if(!e)throw Error(`useCookieConsent must be used inside a CookieConsentProvider.`);return e}exports.CookieConsentProvider=$,exports.useCookieConsent=ee;
2
2
  //# sourceMappingURL=cookie-consent-react.cjs.map
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { a as e, c as t, i as n, l as r, o as i, r as a, s as o, t as s } from "./cookie-consent-core-mwVmy5nZ.mjs";
2
+ import { a as e, c as t, i as n, l as r, o as i, r as a, s as o, t as s } from "./cookie-consent-core-lX0QAEAo.mjs";
3
3
  import { createContext as c, isValidElement as l, useContext as u, useEffect as d, useId as f, useMemo as p, useState as m, useSyncExternalStore as h } from "react";
4
4
  import { Button as g } from "@base-ui/react/button";
5
5
  import { useRender as _ } from "@base-ui/react/use-render";
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./cookie-consent-core-C4MP7GlV.cjs");exports.COOKIE_CONSENT_CATEGORIES=e.l,exports.COOKIE_CONSENT_REVISION=e.u,exports.getConsentState=e.n,exports.initCookieConsent=e.a,exports.openCookieSettings=e.o,exports.setConsent=e.s;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./cookie-consent-core-fntGUdFt.cjs");exports.COOKIE_CONSENT_CATEGORIES=e.l,exports.COOKIE_CONSENT_REVISION=e.u,exports.getConsentState=e.n,exports.initCookieConsent=e.a,exports.openCookieSettings=e.o,exports.setConsent=e.s;
@@ -1 +1 @@
1
- :root{--lea-spacing:.5rem;--lea-spacing-0-5:.25rem;--lea-spacing-1:.5rem;--lea-spacing-1-5:.75rem;--lea-spacing-2:1rem;--lea-spacing-2-5:1.25rem;--lea-spacing-3:1.5rem;--lea-spacing-4:2rem;--lea-spacing-5:2.5rem;--lea-spacing-6:3rem;--lea-spacing-8:4rem;--lea-palette-bg-base:#fff;--lea-palette-bg-subtle:#f7f7f6;--lea-palette-bg-muted:#f0e9e5;--lea-palette-bg-contrast:#0f1010;--lea-palette-bg-accent:#e2d8e4;--lea-palette-bg-overlay:#0f101080;--lea-palette-text-base:#0f1010;--lea-palette-text-subtle:#757575;--lea-palette-text-muted:#a2a2a2;--lea-palette-text-accent:#70427b;--lea-palette-text-contrast:#fff;--lea-palette-border-base:#dbdbdb;--lea-palette-border-subtle:#ebebeb;--lea-palette-border-strong:#0f1010;--lea-palette-border-accent:#70427b;--lea-palette-border-contrast:#fff;--lea-palette-primary-base:#70427b;--lea-palette-primary-hover:#5a3463;--lea-palette-primary-subtle:#e2d8e4;--lea-palette-primary-contrast:#fff;--lea-palette-secondary-base:#0f1010;--lea-palette-secondary-hover:#2e2e2e;--lea-palette-secondary-subtle:#ebebeb;--lea-palette-secondary-contrast:#fff;--lea-palette-tertiary-base:#08c2a7;--lea-palette-tertiary-hover:#46d1bd;--lea-palette-tertiary-subtle:#daf6f1;--lea-palette-tertiary-contrast:#fff;--lea-palette-status-error-base:#d32f2f;--lea-palette-status-error-subtle:#fcdcdc;--lea-palette-status-warning-base:#f7a800;--lea-palette-status-warning-subtle:#ffefc7;--lea-palette-status-info-base:#057ef2;--lea-palette-status-info-subtle:#cbe5fd;--lea-palette-status-success-base:#46d1bd;--lea-palette-status-success-subtle:#daf6f1;--lea-color-purple-50:#faf7fb;--lea-color-purple-100:#e2d8e4;--lea-color-purple-200:#c5b1ca;--lea-color-purple-300:#c29ac2;--lea-color-purple-400:#9e6da8;--lea-color-purple-500:#855888;--lea-color-purple-600:#70427b;--lea-color-purple-700:#5a3463;--lea-color-purple-800:#422349;--lea-color-purple-900:#2e1834;--lea-color-purple-950:#1a0e1e;--lea-color-teal-50:#f0fcfa;--lea-color-teal-100:#daf6f1;--lea-color-teal-200:#cef3ed;--lea-color-teal-300:#08c2a7;--lea-color-teal-400:#46d1bd;--lea-color-teal-500:#06a892;--lea-color-teal-600:#058f7d;--lea-color-teal-700:#047568;--lea-color-teal-800:#035c53;--lea-color-teal-900:#02433e;--lea-color-teal-950:#012a28;--lea-color-blue-50:#eff6ff;--lea-color-blue-100:#cbe5fd;--lea-color-blue-200:#93cbfc;--lea-color-blue-300:#4da8f7;--lea-color-blue-400:#057ef2;--lea-color-blue-500:#0468c9;--lea-color-blue-600:#0354a3;--lea-color-blue-700:#02417d;--lea-color-blue-800:#012e57;--lea-color-blue-900:#011b31;--lea-color-blue-950:#000e19;--lea-color-orange-50:#fff5f2;--lea-color-orange-100:#ffdfd7;--lea-color-orange-200:#ffc4b5;--lea-color-orange-300:#ff9e87;--lea-color-orange-400:#fe653e;--lea-color-orange-500:#e54e28;--lea-color-orange-600:#c43e1c;--lea-color-orange-700:#a33218;--lea-color-orange-800:#822814;--lea-color-orange-900:#611e0f;--lea-color-orange-950:#401408;--lea-color-amber-50:#fff9eb;--lea-color-amber-100:#ffefc7;--lea-color-amber-200:#ffe299;--lea-color-amber-300:#ffcf5c;--lea-color-amber-400:#f7a800;--lea-color-amber-500:#d98f00;--lea-color-amber-600:#b37400;--lea-color-amber-700:#8c5a00;--lea-color-amber-800:#6b4500;--lea-color-amber-900:#4a3000;--lea-color-amber-950:#2e1d00;--lea-color-red-50:#fef2f2;--lea-color-red-100:#fcdcdc;--lea-color-red-200:#f9bbbb;--lea-color-red-300:#f28888;--lea-color-red-400:#e85555;--lea-color-red-500:#d32f2f;--lea-color-red-600:#ad2121;--lea-color-red-700:#8a1919;--lea-color-red-800:#6f1313;--lea-color-red-900:#4d0e0e;--lea-color-red-950:#2e0808;--lea-color-beige-50:#faf7f5;--lea-color-beige-100:#f0e9e5;--lea-color-beige-200:#e0d4cd;--lea-color-beige-300:#c9b8ad;--lea-color-beige-400:#b09a8c;--lea-color-beige-500:#977c6b;--lea-color-beige-600:#7e6556;--lea-color-beige-700:#654f42;--lea-color-beige-800:#4c3a32;--lea-color-beige-900:#332722;--lea-color-beige-950:#1a1411;--lea-color-neutral-50:#f7f7f6;--lea-color-neutral-100:#ebebeb;--lea-color-neutral-200:#dbdbdb;--lea-color-neutral-300:#c4c4c4;--lea-color-neutral-400:#a2a2a2;--lea-color-neutral-500:#757575;--lea-color-neutral-600:#5e5e5e;--lea-color-neutral-700:#454545;--lea-color-neutral-800:#2e2e2e;--lea-color-neutral-900:#1a1a1a;--lea-color-neutral-950:#0f1010;--lea-color-white:#fff;--lea-color-black:#0f1010;--lea-radius-sm:4px;--lea-radius-md:5px;--lea-radius-lg:6px;--lea-radius-xl:8px;--lea-radius-2xl:10px;--lea-radius-3xl:12px;--lea-radius-4xl:16px;--lea-radius-5xl:32px;--lea-radius-huge:64px;--lea-radius-full:100px;--lea-shadow-xs:0 1px 2px 0 #0000000d;--lea-shadow-sm:0px 1px 3px 0px #0000001a, 0px 1px 2px -1px #0000001a;--lea-shadow-md:0px 4px 6px -1px #0000001a, 0px 2px 4px -2px #0000001a;--lea-shadow-lg:0px 10px 15px -3px #0000001a, 0px 4px 6px -4px #0000001a;--lea-shadow-xl:0px 20px 25px -5px #0000001a, 0px 8px 10px -6px #0000001a;--lea-shadow-2xl:0px 25px 50px -12px #00000040;--lea-shadow-inner:0px 2px 4px 0px #0000000d inset;--lea-font-family:"ClashGrotesk", "ClashGrotesk Fallback", sans-serif;--lea-font-size-xs:.75rem;--lea-font-size-sm:.875rem;--lea-font-size-md:1rem;--lea-font-size-lg:1.25rem;--lea-font-size-xl:1.5rem;--lea-font-size-2xl:2rem;--lea-font-size-3xl:2.5rem;--lea-font-size-4xl:3rem;--lea-font-size-5xl:3.5rem;--lea-font-size-6xl:4rem;--lea-font-weight-thin:200;--lea-font-weight-light:300;--lea-font-weight-regular:400;--lea-font-weight-medium:500;--lea-font-weight-semibold:600;--lea-font-weight-bold:700;--lea-font-weight-black:800;--lea-font-step-minus-2:.8125rem;--lea-font-step-minus-1:.875rem;--lea-font-step-0:1rem;--lea-font-step-1:1.125rem;--lea-font-step-2:1.25rem;--lea-font-step-3:1.4375rem;--lea-font-step-4:1.625rem;--lea-font-step-5:1.8125rem;--lea-font-step-6:2rem;--lea-font-step-7:2.25rem;--lea-font-step-8:2.5625rem;--lea-font-step-9:2.875rem;--lea-font-step-10:3.25rem;--lea-font-step-11:3.625rem;--lea-font-step-12:4.125rem;--lea-line-height-none:1;--lea-line-height-tight:1.25;--lea-line-height-snug:1.4;--lea-line-height-normal:1.5;--lea-text-display-sm-font-size:var(--lea-font-step-10);--lea-text-display-sm-font-weight:var(--lea-font-weight-semibold);--lea-text-display-sm-line-height:var(--lea-line-height-none);--lea-text-display-sm-letter-spacing:0;--lea-text-display-md-font-size:var(--lea-font-step-12);--lea-text-display-md-font-weight:var(--lea-font-weight-semibold);--lea-text-display-md-line-height:var(--lea-line-height-none);--lea-text-display-md-letter-spacing:0;--lea-text-heading-xs-font-size:var(--lea-font-step-0);--lea-text-heading-xs-font-weight:var(--lea-font-weight-semibold);--lea-text-heading-xs-line-height:var(--lea-line-height-snug);--lea-text-heading-xs-letter-spacing:0;--lea-text-heading-sm-font-size:var(--lea-font-step-2);--lea-text-heading-sm-font-weight:var(--lea-font-weight-semibold);--lea-text-heading-sm-line-height:var(--lea-line-height-snug);--lea-text-heading-sm-letter-spacing:0;--lea-text-heading-md-font-size:var(--lea-font-step-4);--lea-text-heading-md-font-weight:var(--lea-font-weight-semibold);--lea-text-heading-md-line-height:var(--lea-line-height-snug);--lea-text-heading-md-letter-spacing:0;--lea-text-heading-lg-font-size:var(--lea-font-step-6);--lea-text-heading-lg-font-weight:var(--lea-font-weight-semibold);--lea-text-heading-lg-line-height:var(--lea-line-height-tight);--lea-text-heading-lg-letter-spacing:0;--lea-text-heading-xl-font-size:var(--lea-font-step-8);--lea-text-heading-xl-font-weight:var(--lea-font-weight-semibold);--lea-text-heading-xl-line-height:var(--lea-line-height-tight);--lea-text-heading-xl-letter-spacing:0;--lea-text-body-xs-font-size:var(--lea-font-step-minus-2);--lea-text-body-xs-font-weight:var(--lea-font-weight-regular);--lea-text-body-xs-line-height:var(--lea-line-height-normal);--lea-text-body-xs-letter-spacing:0;--lea-text-body-sm-font-size:var(--lea-font-step-minus-1);--lea-text-body-sm-font-weight:var(--lea-font-weight-regular);--lea-text-body-sm-line-height:var(--lea-line-height-normal);--lea-text-body-sm-letter-spacing:0;--lea-text-body-md-font-size:var(--lea-font-step-0);--lea-text-body-md-font-weight:var(--lea-font-weight-regular);--lea-text-body-md-line-height:var(--lea-line-height-normal);--lea-text-body-md-letter-spacing:0;--lea-text-body-lg-font-size:var(--lea-font-step-1);--lea-text-body-lg-font-weight:var(--lea-font-weight-regular);--lea-text-body-lg-line-height:var(--lea-line-height-normal);--lea-text-body-lg-letter-spacing:0;--lea-text-label-sm-font-size:var(--lea-font-step-minus-2);--lea-text-label-sm-font-weight:var(--lea-font-weight-medium);--lea-text-label-sm-line-height:var(--lea-line-height-tight);--lea-text-label-sm-letter-spacing:0;--lea-text-label-md-font-size:var(--lea-font-step-minus-1);--lea-text-label-md-font-weight:var(--lea-font-weight-medium);--lea-text-label-md-line-height:var(--lea-line-height-tight);--lea-text-label-md-letter-spacing:0;--lea-text-label-lg-font-size:var(--lea-font-step-0);--lea-text-label-lg-font-weight:var(--lea-font-weight-medium);--lea-text-label-lg-line-height:var(--lea-line-height-tight);--lea-text-label-lg-letter-spacing:0;--lea-opacity-hover:.08;--lea-opacity-pressed:.12;--lea-opacity-highlight:.6;--lea-duration-fast:.15s;--lea-duration-normal:.2s;--lea-duration-emphasis:.3s;--lea-easing-standard:ease-in-out;--lea-easing-spring:cubic-bezier(.34, 1.56, .64, 1);--lea-breakpoint-xs:0px;--lea-breakpoint-sm:600px;--lea-breakpoint-md:900px;--lea-breakpoint-lg:1200px;--lea-breakpoint-xl:1536px}._Button_1d72q_1{--button-solid:var(--lea-palette-primary-base);--button-solid-hover:var(--lea-palette-primary-hover);--button-on-solid:var(--lea-palette-primary-contrast);--button-fg:var(--lea-palette-primary-base);--button-border:var(--lea-palette-primary-base);--button-tint:color-mix(in srgb, var(--button-fg) calc(var(--lea-opacity-hover) * 100%), color-mix(in srgb, var(--lea-color-white) calc(var(--lea-opacity-highlight) * 100%), transparent));--button-height:2.75rem;--button-icon-size:1.25rem;--button-padding-inline:calc(var(--lea-spacing) * 2.5);box-sizing:border-box;min-height:var(--button-height);justify-content:center;align-items:center;gap:var(--lea-spacing);padding-block:calc(var(--lea-spacing) * .5);padding-inline:var(--button-padding-inline);border-radius:var(--lea-radius-full);color:var(--button-fg);font-family:inherit;font-size:var(--lea-text-label-lg-font-size);font-weight:var(--lea-text-label-lg-font-weight);line-height:var(--lea-text-label-lg-line-height);letter-spacing:var(--lea-text-label-lg-letter-spacing);text-align:center;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:background-color var(--lea-duration-normal) var(--lea-easing-standard), border-color var(--lea-duration-normal) var(--lea-easing-standard), color var(--lea-duration-normal) var(--lea-easing-standard), opacity var(--lea-duration-normal) var(--lea-easing-standard);background-color:#0000;border:1px solid #0000;flex-shrink:0;margin:0;text-decoration:none;display:inline-flex}._Button_1d72q_1 svg{width:var(--button-icon-size);height:var(--button-icon-size);flex-shrink:0}._Button_1d72q_1:focus-visible{outline:2px solid var(--lea-palette-text-base);outline-offset:.125rem}._Button_1d72q_1[data-color=secondary]{--button-solid:var(--lea-palette-secondary-base);--button-solid-hover:var(--lea-palette-secondary-hover);--button-on-solid:var(--lea-palette-secondary-contrast);--button-fg:var(--lea-palette-secondary-base);--button-border:var(--lea-palette-secondary-base)}._Button_1d72q_1[data-color=error]{--button-solid:var(--lea-color-red-600);--button-solid-hover:var(--lea-color-red-500);--button-on-solid:var(--lea-palette-text-contrast);--button-fg:var(--lea-color-red-600);--button-border:var(--lea-color-red-600)}._Button_1d72q_1[data-variant=solid]{background-color:var(--button-solid);color:var(--button-on-solid)}._Button_1d72q_1[data-variant=outline]{border-color:var(--button-border)}@media (hover:hover){._Button_1d72q_1[data-variant=solid]:not([data-disabled]):hover{background-color:var(--button-solid-hover)}._Button_1d72q_1[data-variant=outline]:not([data-disabled]):hover,._Button_1d72q_1[data-variant=ghost]:not([data-disabled]):hover{background-color:var(--button-tint)}}._Button_1d72q_1[data-size=sm]{--button-height:2.25rem;--button-icon-size:1rem;--button-padding-inline:calc(var(--lea-spacing) * 2)}._Button_1d72q_1[data-size=lg]{--button-height:3.25rem;--button-icon-size:1.5rem;--button-padding-inline:calc(var(--lea-spacing) * 2.5)}._Button_1d72q_1[data-start-icon]{padding-inline-start:calc(var(--button-padding-inline) - var(--lea-spacing))}._Button_1d72q_1[data-end-icon]{padding-inline-end:calc(var(--button-padding-inline) - var(--lea-spacing))}._Button_1d72q_1._IconButton_1d72q_125{width:var(--button-height);height:var(--button-height);padding:0}._Button_1d72q_1[data-disabled]:not([data-loading]){color:var(--lea-color-neutral-400);cursor:not-allowed}._Button_1d72q_1[data-variant=solid][data-disabled]:not([data-loading]){background-color:var(--lea-color-neutral-200);color:var(--lea-color-neutral-600)}._Button_1d72q_1[data-variant=outline][data-disabled]:not([data-loading]){border-color:var(--lea-palette-border-base)}._Button_1d72q_1[data-loading]{cursor:progress;opacity:.7}._Spinner_1d72q_150{box-sizing:border-box;width:var(--button-icon-size);height:var(--button-icon-size);border:2px solid;border-radius:var(--lea-radius-full);border-inline-end-color:#0000;flex-shrink:0;animation:.8s linear infinite _button-spin_1d72q_1;display:inline-block}@keyframes _button-spin_1d72q_1{to{rotate:360deg}}._SrOnly_1d72q_168{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){._Button_1d72q_1{transition-duration:.01ms}._Spinner_1d72q_150{animation:none}}._Backdrop_1mady_8{z-index:1300;background-color:var(--lea-palette-bg-overlay);opacity:1;transition:opacity var(--lea-duration-normal) var(--lea-easing-standard);position:fixed;inset:0}._Backdrop_1mady_8[data-starting-style],._Backdrop_1mady_8[data-ending-style]{opacity:0}._Viewport_1mady_22{z-index:1300;padding:calc(var(--lea-spacing) * 2);pointer-events:none;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._Popup_1mady_38{border-radius:var(--lea-radius-4xl);background-color:var(--lea-palette-bg-base);width:100%;max-height:100%;box-shadow:var(--lea-shadow-xl);color:var(--lea-palette-text-base);opacity:1;pointer-events:auto;transition:opacity var(--lea-duration-normal) var(--lea-easing-standard), transform var(--lea-duration-normal) var(--lea-easing-standard);flex-direction:column;display:flex;overflow:hidden;transform:scale(1)}._Popup_1mady_38[data-starting-style],._Popup_1mady_38[data-ending-style]{opacity:0;transform:scale(.95)}._Popup_1mady_38[data-size=xs]{max-width:27.75rem}._Popup_1mady_38[data-size=sm]{max-width:37.5rem}._Popup_1mady_38[data-size=md]{max-width:56.25rem}._Popup_1mady_38[data-size=lg]{max-width:75rem}._Header_1mady_78{justify-content:space-between;align-items:flex-start;gap:var(--lea-spacing);padding:calc(var(--lea-spacing) * 3) calc(var(--lea-spacing) * 3) calc(var(--lea-spacing) * 2);flex-shrink:0;display:flex}._Title_1mady_88{color:var(--lea-palette-text-base);font-size:var(--lea-text-heading-sm-font-size);font-weight:var(--lea-text-heading-sm-font-weight);line-height:var(--lea-text-heading-sm-line-height);letter-spacing:var(--lea-text-heading-sm-letter-spacing);margin:0}._Description_1mady_97{margin:0 0 calc(var(--lea-spacing) * 2);color:var(--lea-palette-text-subtle)}._Description_1mady_97[data-last]{margin-bottom:0}._Content_1mady_111{padding:0 calc(var(--lea-spacing) * 3) calc(var(--lea-spacing) * 3);color:var(--lea-palette-text-base);flex:1;overflow-y:auto}._Content_1mady_111:has(+._Footer_1mady_119){padding-bottom:0}._Footer_1mady_119{justify-content:flex-end;align-items:center;gap:var(--lea-spacing);padding:calc(var(--lea-spacing) * 2) calc(var(--lea-spacing) * 3) calc(var(--lea-spacing) * 2);background-color:var(--lea-palette-bg-base);flex-wrap:wrap;flex-shrink:0;display:flex}._CloseButton_1mady_135{border:2px solid var(--lea-palette-border-base);border-radius:var(--lea-radius-full);width:2.5rem;height:2.5rem;color:var(--lea-palette-text-base);cursor:pointer;transition:border-color var(--lea-duration-emphasis) var(--lea-easing-spring), background-color var(--lea-duration-emphasis) var(--lea-easing-spring), color var(--lea-duration-emphasis) var(--lea-easing-spring);background-color:#0000;flex-shrink:0;justify-content:center;align-items:center;margin-inline-end:calc(var(--lea-spacing) * -.5);padding:0;display:inline-flex}@media (hover:hover){._CloseButton_1mady_135:hover{border-color:var(--lea-palette-primary-base);background-color:var(--lea-palette-primary-base);color:var(--lea-palette-primary-contrast)}}._CloseButton_1mady_135:focus-visible{outline:2px solid var(--lea-palette-text-base);outline-offset:.125rem}@media (width<=599.95px){._Viewport_1mady_22:has(._Popup_1mady_38[data-full-screen-on-mobile]){padding:0}._Popup_1mady_38[data-full-screen-on-mobile]{border-radius:0;width:100vw;max-width:none;height:100dvh;max-height:none}._Popup_1mady_38[data-full-screen-on-mobile] ._Content_1mady_111{padding-bottom:calc(var(--lea-spacing) * 3 + env(safe-area-inset-bottom))}._Popup_1mady_38[data-full-screen-on-mobile] ._Content_1mady_111:has(+._Footer_1mady_119){padding-bottom:0}._Popup_1mady_38[data-full-screen-on-mobile] ._Footer_1mady_119{padding-bottom:calc(var(--lea-spacing) * 3 + env(safe-area-inset-bottom))}}@media (prefers-reduced-motion:reduce){._Backdrop_1mady_8,._Popup_1mady_38,._CloseButton_1mady_135{transition-duration:.01ms}}._Switch_9c9ji_7{border-radius:var(--lea-radius-full);background-color:var(--lea-color-neutral-200);cursor:pointer;width:2.5rem;height:1.5rem;transition:background-color var(--lea-duration-normal) var(--lea-easing-standard);border:none;flex-shrink:0;align-items:center;padding:.125rem;display:inline-flex}._Switch_9c9ji_7[data-checked]{background-color:var(--lea-palette-primary-base)}._Switch_9c9ji_7:focus-visible{outline:2px solid var(--lea-palette-text-base);outline-offset:.125rem}._Switch_9c9ji_7[data-disabled]{cursor:not-allowed;opacity:.5}._Thumb_9c9ji_36{border-radius:var(--lea-radius-full);background-color:var(--lea-palette-bg-base);width:1.25rem;height:1.25rem;transition:translate var(--lea-duration-normal) var(--lea-easing-standard);display:block}._Thumb_9c9ji_36[data-checked]{translate:1rem}@media (prefers-reduced-motion:reduce){._Switch_9c9ji_7,._Thumb_9c9ji_36{transition-duration:.01ms}}._Root_18gqk_13{--accordion-gap:var(--lea-spacing);--accordion-item-bg:transparent;--accordion-item-border:var(--lea-palette-border-subtle);--accordion-item-radius:var(--lea-radius-2xl);--accordion-header-radius:var(--lea-radius-2xl);--accordion-hover-border:var(--lea-palette-border-strong);--accordion-hover-bg:transparent;--accordion-active-bg:var(--lea-color-purple-50);gap:var(--accordion-gap);flex-direction:column;width:100%;display:flex}._Root_18gqk_13[data-variant=solid]{--accordion-item-bg:var(--lea-palette-bg-subtle);--accordion-item-border:transparent;--accordion-hover-border:transparent;--accordion-hover-bg:var(--lea-color-neutral-100);--accordion-active-bg:var(--lea-color-neutral-200)}._Root_18gqk_13[data-variant=divided],._Root_18gqk_13[data-variant=ghost]{--accordion-highlight:color-mix(in srgb, var(--lea-color-white) calc(var(--lea-opacity-highlight) * 100%), transparent);--accordion-item-border:transparent;--accordion-header-radius:var(--lea-radius-sm);--accordion-hover-border:transparent;--accordion-hover-bg:color-mix(in srgb, var(--lea-palette-text-base) calc(var(--lea-opacity-hover) * 100%), var(--accordion-highlight));--accordion-active-bg:color-mix(in srgb, var(--lea-palette-text-base) calc(var(--lea-opacity-pressed) * 100%), var(--accordion-highlight))}._Root_18gqk_13[data-variant=divided]{--accordion-gap:0;--accordion-item-radius:0}._Item_18gqk_10{border:1px solid var(--accordion-item-border);border-radius:var(--accordion-item-radius);background-color:var(--accordion-item-bg)}._Root_18gqk_13[data-variant=divided]>._Item_18gqk_10:not(:last-child){border-block-end-color:var(--lea-palette-border-subtle)}._Header_18gqk_10{align-items:center;gap:calc(var(--lea-spacing) * 2);padding:calc(var(--lea-spacing) * 1.7) calc(var(--lea-spacing) * 2);border-radius:var(--accordion-header-radius);transition:border-color var(--lea-duration-emphasis) var(--lea-easing-standard), background-color var(--lea-duration-emphasis) var(--lea-easing-standard);border:1px solid #0000;margin:0;display:flex}@media (hover:hover){._Header_18gqk_10:has(._Trigger_18gqk_95:hover:not([data-disabled])){border-color:var(--accordion-hover-border);background-color:var(--accordion-hover-bg)}}._Header_18gqk_10:has(._Trigger_18gqk_95:active:not([data-disabled])){background-color:var(--accordion-active-bg)}._Trigger_18gqk_95{justify-content:space-between;align-items:center;gap:var(--lea-spacing);min-width:0;color:var(--lea-palette-text-base);cursor:pointer;font-family:inherit;font-size:var(--lea-font-step-0);font-weight:var(--lea-font-weight-medium);line-height:var(--lea-line-height-normal);text-align:left;background-color:#0000;border:none;flex:1;margin:0;padding:0;display:flex}._Trigger_18gqk_95:focus-visible{outline:2px solid var(--lea-palette-text-base);outline-offset:.125rem}._Trigger_18gqk_95[data-disabled]{color:var(--lea-palette-text-muted);cursor:not-allowed}._Label_18gqk_136{min-width:0}._Icon_18gqk_140{transition:transform var(--lea-duration-emphasis) var(--lea-easing-standard);flex-shrink:0}._Trigger_18gqk_95[data-panel-open] ._Icon_18gqk_140{transform:rotate(180deg)}._Root_18gqk_13[data-icon-position=start] ._Trigger_18gqk_95{justify-content:flex-start}._Root_18gqk_13[data-icon-position=start] ._Icon_18gqk_140{order:-1}._Panel_18gqk_158{height:var(--accordion-panel-height);transition:height var(--lea-duration-emphasis) var(--lea-easing-standard);overflow:hidden}._Panel_18gqk_158[data-starting-style],._Panel_18gqk_158[data-ending-style]{height:0}._Content_18gqk_169{padding-inline:calc(var(--lea-spacing) * 2);padding-block:var(--lea-spacing);color:var(--lea-palette-text-base);font-size:var(--lea-text-body-md-font-size);font-weight:var(--lea-text-body-md-font-weight);line-height:var(--lea-text-body-md-line-height);letter-spacing:var(--lea-text-body-md-letter-spacing)}@media (prefers-reduced-motion:reduce){._Header_18gqk_10,._Icon_18gqk_140,._Panel_18gqk_158{transition-duration:.01ms}}._Intro_nxwj4_7{color:var(--lea-palette-text-base)}._Intro_nxwj4_7 p,._Intro_nxwj4_7 ul,._Intro_nxwj4_7 ol{margin:0}._Intro_nxwj4_7>*+*{margin-top:var(--lea-spacing)}._Intro_nxwj4_7 ul,._Intro_nxwj4_7 ol{padding-inline-start:calc(var(--lea-spacing) * 2.5)}._Intro_nxwj4_7 a{border-radius:var(--lea-radius-sm);color:var(--lea-palette-text-accent);font-weight:var(--lea-font-weight-semibold);text-underline-offset:.15em;text-decoration:underline}._Intro_nxwj4_7 a:focus-visible{outline:2px solid var(--lea-palette-text-base);outline-offset:.125rem}._Categories_nxwj4_39{margin-top:calc(var(--lea-spacing) * 3)}._CategoryDescription_nxwj4_43{color:var(--lea-palette-text-base);font-size:var(--lea-text-body-md-font-size);font-weight:var(--lea-text-body-md-font-weight);line-height:var(--lea-text-body-md-line-height);letter-spacing:var(--lea-text-body-md-letter-spacing);margin:0}._Actions_nxwj4_52{margin-top:calc(var(--lea-spacing) * 3);gap:var(--lea-spacing);border-top:1px solid var(--lea-palette-border-subtle);flex-wrap:wrap;display:flex}._Actions_nxwj4_52 button{border-radius:var(--lea-radius-2xl)}._Save_nxwj4_63{margin-inline-start:auto}@media (width<=599.95px){._Actions_nxwj4_52{flex-direction:column;align-items:stretch}._Save_nxwj4_63{margin-inline-start:0}}
1
+ :root{--lea-spacing:.5rem;--lea-spacing-0-5:.25rem;--lea-spacing-1:.5rem;--lea-spacing-1-5:.75rem;--lea-spacing-2:1rem;--lea-spacing-2-5:1.25rem;--lea-spacing-3:1.5rem;--lea-spacing-4:2rem;--lea-spacing-5:2.5rem;--lea-spacing-6:3rem;--lea-spacing-8:4rem;--lea-palette-bg-base:#fff;--lea-palette-bg-subtle:#f7f7f6;--lea-palette-bg-muted:#f0e9e5;--lea-palette-bg-contrast:#0f1010;--lea-palette-bg-accent:#e2d8e4;--lea-palette-bg-overlay:#0f101080;--lea-palette-text-base:#0f1010;--lea-palette-text-subtle:#757575;--lea-palette-text-muted:#a2a2a2;--lea-palette-text-accent:#70427b;--lea-palette-text-contrast:#fff;--lea-palette-border-base:#dbdbdb;--lea-palette-border-subtle:#ebebeb;--lea-palette-border-strong:#0f1010;--lea-palette-border-accent:#70427b;--lea-palette-border-contrast:#fff;--lea-palette-primary-base:#70427b;--lea-palette-primary-hover:#5a3463;--lea-palette-primary-subtle:#e2d8e4;--lea-palette-primary-contrast:#fff;--lea-palette-secondary-base:#0f1010;--lea-palette-secondary-hover:#2e2e2e;--lea-palette-secondary-subtle:#ebebeb;--lea-palette-secondary-contrast:#fff;--lea-palette-tertiary-base:#08c2a7;--lea-palette-tertiary-hover:#46d1bd;--lea-palette-tertiary-subtle:#daf6f1;--lea-palette-tertiary-contrast:#fff;--lea-palette-status-error-base:#d32f2f;--lea-palette-status-error-subtle:#fcdcdc;--lea-palette-status-warning-base:#f7a800;--lea-palette-status-warning-subtle:#ffefc7;--lea-palette-status-info-base:#057ef2;--lea-palette-status-info-subtle:#cbe5fd;--lea-palette-status-success-base:#46d1bd;--lea-palette-status-success-subtle:#daf6f1;--lea-color-purple-50:#faf7fb;--lea-color-purple-100:#e2d8e4;--lea-color-purple-200:#c5b1ca;--lea-color-purple-300:#c29ac2;--lea-color-purple-400:#9e6da8;--lea-color-purple-500:#855888;--lea-color-purple-600:#70427b;--lea-color-purple-700:#5a3463;--lea-color-purple-800:#422349;--lea-color-purple-900:#2e1834;--lea-color-purple-950:#1a0e1e;--lea-color-teal-50:#f0fcfa;--lea-color-teal-100:#daf6f1;--lea-color-teal-200:#cef3ed;--lea-color-teal-300:#08c2a7;--lea-color-teal-400:#46d1bd;--lea-color-teal-500:#06a892;--lea-color-teal-600:#058f7d;--lea-color-teal-700:#047568;--lea-color-teal-800:#035c53;--lea-color-teal-900:#02433e;--lea-color-teal-950:#012a28;--lea-color-blue-50:#eff6ff;--lea-color-blue-100:#cbe5fd;--lea-color-blue-200:#93cbfc;--lea-color-blue-300:#4da8f7;--lea-color-blue-400:#057ef2;--lea-color-blue-500:#0468c9;--lea-color-blue-600:#0354a3;--lea-color-blue-700:#02417d;--lea-color-blue-800:#012e57;--lea-color-blue-900:#011b31;--lea-color-blue-950:#000e19;--lea-color-orange-50:#fff5f2;--lea-color-orange-100:#ffdfd7;--lea-color-orange-200:#ffc4b5;--lea-color-orange-300:#ff9e87;--lea-color-orange-400:#fe653e;--lea-color-orange-500:#e54e28;--lea-color-orange-600:#c43e1c;--lea-color-orange-700:#a33218;--lea-color-orange-800:#822814;--lea-color-orange-900:#611e0f;--lea-color-orange-950:#401408;--lea-color-amber-50:#fff9eb;--lea-color-amber-100:#ffefc7;--lea-color-amber-200:#ffe299;--lea-color-amber-300:#ffcf5c;--lea-color-amber-400:#f7a800;--lea-color-amber-500:#d98f00;--lea-color-amber-600:#b37400;--lea-color-amber-700:#8c5a00;--lea-color-amber-800:#6b4500;--lea-color-amber-900:#4a3000;--lea-color-amber-950:#2e1d00;--lea-color-red-50:#fef2f2;--lea-color-red-100:#fcdcdc;--lea-color-red-200:#f9bbbb;--lea-color-red-300:#f28888;--lea-color-red-400:#e85555;--lea-color-red-500:#d32f2f;--lea-color-red-600:#ad2121;--lea-color-red-700:#8a1919;--lea-color-red-800:#6f1313;--lea-color-red-900:#4d0e0e;--lea-color-red-950:#2e0808;--lea-color-beige-50:#faf7f5;--lea-color-beige-100:#f0e9e5;--lea-color-beige-200:#e0d4cd;--lea-color-beige-300:#c9b8ad;--lea-color-beige-400:#b09a8c;--lea-color-beige-500:#977c6b;--lea-color-beige-600:#7e6556;--lea-color-beige-700:#654f42;--lea-color-beige-800:#4c3a32;--lea-color-beige-900:#332722;--lea-color-beige-950:#1a1411;--lea-color-neutral-50:#f7f7f6;--lea-color-neutral-100:#ebebeb;--lea-color-neutral-200:#dbdbdb;--lea-color-neutral-300:#c4c4c4;--lea-color-neutral-400:#a2a2a2;--lea-color-neutral-500:#757575;--lea-color-neutral-600:#5e5e5e;--lea-color-neutral-700:#454545;--lea-color-neutral-800:#2e2e2e;--lea-color-neutral-900:#1a1a1a;--lea-color-neutral-950:#0f1010;--lea-color-white:#fff;--lea-color-black:#0f1010;--lea-radius-sm:4px;--lea-radius-md:5px;--lea-radius-lg:6px;--lea-radius-xl:8px;--lea-radius-2xl:10px;--lea-radius-3xl:12px;--lea-radius-4xl:16px;--lea-radius-5xl:32px;--lea-radius-huge:64px;--lea-radius-full:100px;--lea-shadow-xs:0 1px 2px 0 #0000000d;--lea-shadow-sm:0px 1px 3px 0px #0000001a, 0px 1px 2px -1px #0000001a;--lea-shadow-md:0px 4px 6px -1px #0000001a, 0px 2px 4px -2px #0000001a;--lea-shadow-lg:0px 10px 15px -3px #0000001a, 0px 4px 6px -4px #0000001a;--lea-shadow-xl:0px 20px 25px -5px #0000001a, 0px 8px 10px -6px #0000001a;--lea-shadow-2xl:0px 25px 50px -12px #00000040;--lea-shadow-inner:0px 2px 4px 0px #0000000d inset;--lea-font-family:"ClashGrotesk", "ClashGrotesk Fallback", sans-serif;--lea-font-size-xs:.75rem;--lea-font-size-sm:.875rem;--lea-font-size-md:1rem;--lea-font-size-lg:1.25rem;--lea-font-size-xl:1.5rem;--lea-font-size-2xl:2rem;--lea-font-size-3xl:2.5rem;--lea-font-size-4xl:3rem;--lea-font-size-5xl:3.5rem;--lea-font-size-6xl:4rem;--lea-font-weight-thin:200;--lea-font-weight-light:300;--lea-font-weight-regular:400;--lea-font-weight-medium:500;--lea-font-weight-semibold:600;--lea-font-weight-bold:700;--lea-font-weight-black:800;--lea-font-step-minus-2:.8125rem;--lea-font-step-minus-1:.875rem;--lea-font-step-0:1rem;--lea-font-step-1:1.125rem;--lea-font-step-2:1.25rem;--lea-font-step-3:1.4375rem;--lea-font-step-4:1.625rem;--lea-font-step-5:1.8125rem;--lea-font-step-6:2rem;--lea-font-step-7:2.25rem;--lea-font-step-8:2.5625rem;--lea-font-step-9:2.875rem;--lea-font-step-10:3.25rem;--lea-font-step-11:3.625rem;--lea-font-step-12:4.125rem;--lea-line-height-none:1;--lea-line-height-tight:1.25;--lea-line-height-snug:1.4;--lea-line-height-normal:1.5;--lea-text-display-sm-font-size:var(--lea-font-step-10);--lea-text-display-sm-font-weight:var(--lea-font-weight-semibold);--lea-text-display-sm-line-height:var(--lea-line-height-none);--lea-text-display-sm-letter-spacing:0;--lea-text-display-md-font-size:var(--lea-font-step-12);--lea-text-display-md-font-weight:var(--lea-font-weight-semibold);--lea-text-display-md-line-height:var(--lea-line-height-none);--lea-text-display-md-letter-spacing:0;--lea-text-heading-xs-font-size:var(--lea-font-step-0);--lea-text-heading-xs-font-weight:var(--lea-font-weight-semibold);--lea-text-heading-xs-line-height:var(--lea-line-height-snug);--lea-text-heading-xs-letter-spacing:0;--lea-text-heading-sm-font-size:var(--lea-font-step-2);--lea-text-heading-sm-font-weight:var(--lea-font-weight-semibold);--lea-text-heading-sm-line-height:var(--lea-line-height-snug);--lea-text-heading-sm-letter-spacing:0;--lea-text-heading-md-font-size:var(--lea-font-step-4);--lea-text-heading-md-font-weight:var(--lea-font-weight-semibold);--lea-text-heading-md-line-height:var(--lea-line-height-snug);--lea-text-heading-md-letter-spacing:0;--lea-text-heading-lg-font-size:var(--lea-font-step-6);--lea-text-heading-lg-font-weight:var(--lea-font-weight-semibold);--lea-text-heading-lg-line-height:var(--lea-line-height-tight);--lea-text-heading-lg-letter-spacing:0;--lea-text-heading-xl-font-size:var(--lea-font-step-8);--lea-text-heading-xl-font-weight:var(--lea-font-weight-semibold);--lea-text-heading-xl-line-height:var(--lea-line-height-tight);--lea-text-heading-xl-letter-spacing:0;--lea-text-body-xs-font-size:var(--lea-font-step-minus-2);--lea-text-body-xs-font-weight:var(--lea-font-weight-regular);--lea-text-body-xs-line-height:var(--lea-line-height-normal);--lea-text-body-xs-letter-spacing:0;--lea-text-body-sm-font-size:var(--lea-font-step-minus-1);--lea-text-body-sm-font-weight:var(--lea-font-weight-regular);--lea-text-body-sm-line-height:var(--lea-line-height-normal);--lea-text-body-sm-letter-spacing:0;--lea-text-body-md-font-size:var(--lea-font-step-0);--lea-text-body-md-font-weight:var(--lea-font-weight-regular);--lea-text-body-md-line-height:var(--lea-line-height-normal);--lea-text-body-md-letter-spacing:0;--lea-text-body-lg-font-size:var(--lea-font-step-1);--lea-text-body-lg-font-weight:var(--lea-font-weight-regular);--lea-text-body-lg-line-height:var(--lea-line-height-normal);--lea-text-body-lg-letter-spacing:0;--lea-text-label-sm-font-size:var(--lea-font-step-minus-2);--lea-text-label-sm-font-weight:var(--lea-font-weight-medium);--lea-text-label-sm-line-height:var(--lea-line-height-tight);--lea-text-label-sm-letter-spacing:0;--lea-text-label-md-font-size:var(--lea-font-step-minus-1);--lea-text-label-md-font-weight:var(--lea-font-weight-medium);--lea-text-label-md-line-height:var(--lea-line-height-tight);--lea-text-label-md-letter-spacing:0;--lea-text-label-lg-font-size:var(--lea-font-step-0);--lea-text-label-lg-font-weight:var(--lea-font-weight-medium);--lea-text-label-lg-line-height:var(--lea-line-height-tight);--lea-text-label-lg-letter-spacing:0;--lea-opacity-hover:.08;--lea-opacity-pressed:.12;--lea-opacity-highlight:.6;--lea-duration-fast:.15s;--lea-duration-normal:.2s;--lea-duration-emphasis:.3s;--lea-easing-standard:ease-in-out;--lea-easing-spring:cubic-bezier(.34, 1.56, .64, 1);--lea-breakpoint-xs:0px;--lea-breakpoint-sm:600px;--lea-breakpoint-md:900px;--lea-breakpoint-lg:1200px;--lea-breakpoint-xl:1536px}@layer theme,base;@layer components{._Button_1d72q_1{--button-solid:var(--lea-palette-primary-base);--button-solid-hover:var(--lea-palette-primary-hover);--button-on-solid:var(--lea-palette-primary-contrast);--button-fg:var(--lea-palette-primary-base);--button-border:var(--lea-palette-primary-base);--button-tint:color-mix(in srgb, var(--button-fg) calc(var(--lea-opacity-hover) * 100%), color-mix(in srgb, var(--lea-color-white) calc(var(--lea-opacity-highlight) * 100%), transparent));--button-height:2.75rem;--button-icon-size:1.25rem;--button-padding-inline:calc(var(--lea-spacing) * 2.5);box-sizing:border-box;min-height:var(--button-height);justify-content:center;align-items:center;gap:var(--lea-spacing);padding-block:calc(var(--lea-spacing) * .5);padding-inline:var(--button-padding-inline);border-radius:var(--lea-radius-full);color:var(--button-fg);font-family:inherit;font-size:var(--lea-text-label-lg-font-size);font-weight:var(--lea-text-label-lg-font-weight);line-height:var(--lea-text-label-lg-line-height);letter-spacing:var(--lea-text-label-lg-letter-spacing);text-align:center;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:background-color var(--lea-duration-normal) var(--lea-easing-standard), border-color var(--lea-duration-normal) var(--lea-easing-standard), color var(--lea-duration-normal) var(--lea-easing-standard), opacity var(--lea-duration-normal) var(--lea-easing-standard);background-color:#0000;border:1px solid #0000;flex-shrink:0;margin:0;text-decoration:none;display:inline-flex}._Button_1d72q_1 svg{width:var(--button-icon-size);height:var(--button-icon-size);flex-shrink:0}._Button_1d72q_1:focus-visible{outline:2px solid var(--lea-palette-text-base);outline-offset:.125rem}._Button_1d72q_1[data-color=secondary]{--button-solid:var(--lea-palette-secondary-base);--button-solid-hover:var(--lea-palette-secondary-hover);--button-on-solid:var(--lea-palette-secondary-contrast);--button-fg:var(--lea-palette-secondary-base);--button-border:var(--lea-palette-secondary-base)}._Button_1d72q_1[data-color=error]{--button-solid:var(--lea-color-red-600);--button-solid-hover:var(--lea-color-red-500);--button-on-solid:var(--lea-palette-text-contrast);--button-fg:var(--lea-color-red-600);--button-border:var(--lea-color-red-600)}._Button_1d72q_1[data-variant=solid]{background-color:var(--button-solid);color:var(--button-on-solid)}._Button_1d72q_1[data-variant=outline]{border-color:var(--button-border)}@media (hover:hover){._Button_1d72q_1[data-variant=solid]:not([data-disabled]):hover{background-color:var(--button-solid-hover)}._Button_1d72q_1[data-variant=outline]:not([data-disabled]):hover,._Button_1d72q_1[data-variant=ghost]:not([data-disabled]):hover{background-color:var(--button-tint)}}._Button_1d72q_1[data-size=sm]{--button-height:2.25rem;--button-icon-size:1rem;--button-padding-inline:calc(var(--lea-spacing) * 2)}._Button_1d72q_1[data-size=lg]{--button-height:3.25rem;--button-icon-size:1.5rem;--button-padding-inline:calc(var(--lea-spacing) * 2.5)}._Button_1d72q_1[data-start-icon]{padding-inline-start:calc(var(--button-padding-inline) - var(--lea-spacing))}._Button_1d72q_1[data-end-icon]{padding-inline-end:calc(var(--button-padding-inline) - var(--lea-spacing))}._Button_1d72q_1._IconButton_1d72q_125{width:var(--button-height);height:var(--button-height);padding:0}._Button_1d72q_1[data-disabled]:not([data-loading]){color:var(--lea-color-neutral-400);cursor:not-allowed}._Button_1d72q_1[data-variant=solid][data-disabled]:not([data-loading]){background-color:var(--lea-color-neutral-200);color:var(--lea-color-neutral-600)}._Button_1d72q_1[data-variant=outline][data-disabled]:not([data-loading]){border-color:var(--lea-palette-border-base)}._Button_1d72q_1[data-loading]{cursor:progress;opacity:.7}._Spinner_1d72q_150{box-sizing:border-box;width:var(--button-icon-size);height:var(--button-icon-size);border:2px solid;border-radius:var(--lea-radius-full);border-inline-end-color:#0000;flex-shrink:0;animation:.8s linear infinite _button-spin_1d72q_1;display:inline-block}@keyframes _button-spin_1d72q_1{to{rotate:360deg}}._SrOnly_1d72q_168{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){._Button_1d72q_1{transition-duration:.01ms}._Spinner_1d72q_150{animation:none}}._Backdrop_1mady_8{z-index:1300;background-color:var(--lea-palette-bg-overlay);opacity:1;transition:opacity var(--lea-duration-normal) var(--lea-easing-standard);position:fixed;inset:0}._Backdrop_1mady_8[data-starting-style],._Backdrop_1mady_8[data-ending-style]{opacity:0}._Viewport_1mady_22{z-index:1300;padding:calc(var(--lea-spacing) * 2);pointer-events:none;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._Popup_1mady_38{border-radius:var(--lea-radius-4xl);background-color:var(--lea-palette-bg-base);width:100%;max-height:100%;box-shadow:var(--lea-shadow-xl);color:var(--lea-palette-text-base);opacity:1;pointer-events:auto;transition:opacity var(--lea-duration-normal) var(--lea-easing-standard), transform var(--lea-duration-normal) var(--lea-easing-standard);flex-direction:column;display:flex;overflow:hidden;transform:scale(1)}._Popup_1mady_38[data-starting-style],._Popup_1mady_38[data-ending-style]{opacity:0;transform:scale(.95)}._Popup_1mady_38[data-size=xs]{max-width:27.75rem}._Popup_1mady_38[data-size=sm]{max-width:37.5rem}._Popup_1mady_38[data-size=md]{max-width:56.25rem}._Popup_1mady_38[data-size=lg]{max-width:75rem}._Header_1mady_78{justify-content:space-between;align-items:flex-start;gap:var(--lea-spacing);padding:calc(var(--lea-spacing) * 3) calc(var(--lea-spacing) * 3) calc(var(--lea-spacing) * 2);flex-shrink:0;display:flex}._Title_1mady_88{color:var(--lea-palette-text-base);font-size:var(--lea-text-heading-sm-font-size);font-weight:var(--lea-text-heading-sm-font-weight);line-height:var(--lea-text-heading-sm-line-height);letter-spacing:var(--lea-text-heading-sm-letter-spacing);margin:0}._Description_1mady_97{margin:0 0 calc(var(--lea-spacing) * 2);color:var(--lea-palette-text-subtle)}._Description_1mady_97[data-last]{margin-bottom:0}._Content_1mady_111{padding:0 calc(var(--lea-spacing) * 3) calc(var(--lea-spacing) * 3);color:var(--lea-palette-text-base);flex:1;overflow-y:auto}._Content_1mady_111:has(+._Footer_1mady_119){padding-bottom:0}._Footer_1mady_119{justify-content:flex-end;align-items:center;gap:var(--lea-spacing);padding:calc(var(--lea-spacing) * 2) calc(var(--lea-spacing) * 3) calc(var(--lea-spacing) * 2);background-color:var(--lea-palette-bg-base);flex-wrap:wrap;flex-shrink:0;display:flex}._CloseButton_1mady_135{border:2px solid var(--lea-palette-border-base);border-radius:var(--lea-radius-full);width:2.5rem;height:2.5rem;color:var(--lea-palette-text-base);cursor:pointer;transition:border-color var(--lea-duration-emphasis) var(--lea-easing-spring), background-color var(--lea-duration-emphasis) var(--lea-easing-spring), color var(--lea-duration-emphasis) var(--lea-easing-spring);background-color:#0000;flex-shrink:0;justify-content:center;align-items:center;margin-inline-end:calc(var(--lea-spacing) * -.5);padding:0;display:inline-flex}@media (hover:hover){._CloseButton_1mady_135:hover{border-color:var(--lea-palette-primary-base);background-color:var(--lea-palette-primary-base);color:var(--lea-palette-primary-contrast)}}._CloseButton_1mady_135:focus-visible{outline:2px solid var(--lea-palette-text-base);outline-offset:.125rem}@media (width<=599.95px){._Viewport_1mady_22:has(._Popup_1mady_38[data-full-screen-on-mobile]){padding:0}._Popup_1mady_38[data-full-screen-on-mobile]{border-radius:0;width:100vw;max-width:none;height:100dvh;max-height:none}._Popup_1mady_38[data-full-screen-on-mobile] ._Content_1mady_111{padding-bottom:calc(var(--lea-spacing) * 3 + env(safe-area-inset-bottom))}._Popup_1mady_38[data-full-screen-on-mobile] ._Content_1mady_111:has(+._Footer_1mady_119){padding-bottom:0}._Popup_1mady_38[data-full-screen-on-mobile] ._Footer_1mady_119{padding-bottom:calc(var(--lea-spacing) * 3 + env(safe-area-inset-bottom))}}@media (prefers-reduced-motion:reduce){._Backdrop_1mady_8,._Popup_1mady_38,._CloseButton_1mady_135{transition-duration:.01ms}}._Switch_9c9ji_7{border-radius:var(--lea-radius-full);background-color:var(--lea-color-neutral-200);cursor:pointer;width:2.5rem;height:1.5rem;transition:background-color var(--lea-duration-normal) var(--lea-easing-standard);border:none;flex-shrink:0;align-items:center;padding:.125rem;display:inline-flex}._Switch_9c9ji_7[data-checked]{background-color:var(--lea-palette-primary-base)}._Switch_9c9ji_7:focus-visible{outline:2px solid var(--lea-palette-text-base);outline-offset:.125rem}._Switch_9c9ji_7[data-disabled]{cursor:not-allowed;opacity:.5}._Thumb_9c9ji_36{border-radius:var(--lea-radius-full);background-color:var(--lea-palette-bg-base);width:1.25rem;height:1.25rem;transition:translate var(--lea-duration-normal) var(--lea-easing-standard);display:block}._Thumb_9c9ji_36[data-checked]{translate:1rem}@media (prefers-reduced-motion:reduce){._Switch_9c9ji_7,._Thumb_9c9ji_36{transition-duration:.01ms}}._Root_18gqk_13{--accordion-gap:var(--lea-spacing);--accordion-item-bg:transparent;--accordion-item-border:var(--lea-palette-border-subtle);--accordion-item-radius:var(--lea-radius-2xl);--accordion-header-radius:var(--lea-radius-2xl);--accordion-hover-border:var(--lea-palette-border-strong);--accordion-hover-bg:transparent;--accordion-active-bg:var(--lea-color-purple-50);gap:var(--accordion-gap);flex-direction:column;width:100%;display:flex}._Root_18gqk_13[data-variant=solid]{--accordion-item-bg:var(--lea-palette-bg-subtle);--accordion-item-border:transparent;--accordion-hover-border:transparent;--accordion-hover-bg:var(--lea-color-neutral-100);--accordion-active-bg:var(--lea-color-neutral-200)}._Root_18gqk_13[data-variant=divided],._Root_18gqk_13[data-variant=ghost]{--accordion-highlight:color-mix(in srgb, var(--lea-color-white) calc(var(--lea-opacity-highlight) * 100%), transparent);--accordion-item-border:transparent;--accordion-header-radius:var(--lea-radius-sm);--accordion-hover-border:transparent;--accordion-hover-bg:color-mix(in srgb, var(--lea-palette-text-base) calc(var(--lea-opacity-hover) * 100%), var(--accordion-highlight));--accordion-active-bg:color-mix(in srgb, var(--lea-palette-text-base) calc(var(--lea-opacity-pressed) * 100%), var(--accordion-highlight))}._Root_18gqk_13[data-variant=divided]{--accordion-gap:0;--accordion-item-radius:0}._Item_18gqk_10{border:1px solid var(--accordion-item-border);border-radius:var(--accordion-item-radius);background-color:var(--accordion-item-bg)}._Root_18gqk_13[data-variant=divided]>._Item_18gqk_10:not(:last-child){border-block-end-color:var(--lea-palette-border-subtle)}._Header_18gqk_10{align-items:center;gap:calc(var(--lea-spacing) * 2);padding:calc(var(--lea-spacing) * 1.7) calc(var(--lea-spacing) * 2);border-radius:var(--accordion-header-radius);transition:border-color var(--lea-duration-emphasis) var(--lea-easing-standard), background-color var(--lea-duration-emphasis) var(--lea-easing-standard);border:1px solid #0000;margin:0;display:flex}@media (hover:hover){._Header_18gqk_10:has(._Trigger_18gqk_95:hover:not([data-disabled])){border-color:var(--accordion-hover-border);background-color:var(--accordion-hover-bg)}}._Header_18gqk_10:has(._Trigger_18gqk_95:active:not([data-disabled])){background-color:var(--accordion-active-bg)}._Trigger_18gqk_95{justify-content:space-between;align-items:center;gap:var(--lea-spacing);min-width:0;color:var(--lea-palette-text-base);cursor:pointer;font-family:inherit;font-size:var(--lea-font-step-0);font-weight:var(--lea-font-weight-medium);line-height:var(--lea-line-height-normal);text-align:left;background-color:#0000;border:none;flex:1;margin:0;padding:0;display:flex}._Trigger_18gqk_95:focus-visible{outline:2px solid var(--lea-palette-text-base);outline-offset:.125rem}._Trigger_18gqk_95[data-disabled]{color:var(--lea-palette-text-muted);cursor:not-allowed}._Label_18gqk_136{min-width:0}._Icon_18gqk_140{transition:transform var(--lea-duration-emphasis) var(--lea-easing-standard);flex-shrink:0}._Trigger_18gqk_95[data-panel-open] ._Icon_18gqk_140{transform:rotate(180deg)}._Root_18gqk_13[data-icon-position=start] ._Trigger_18gqk_95{justify-content:flex-start}._Root_18gqk_13[data-icon-position=start] ._Icon_18gqk_140{order:-1}._Panel_18gqk_158{height:var(--accordion-panel-height);transition:height var(--lea-duration-emphasis) var(--lea-easing-standard);overflow:hidden}._Panel_18gqk_158[data-starting-style],._Panel_18gqk_158[data-ending-style]{height:0}._Content_18gqk_169{padding-inline:calc(var(--lea-spacing) * 2);padding-block:var(--lea-spacing);color:var(--lea-palette-text-base);font-size:var(--lea-text-body-md-font-size);font-weight:var(--lea-text-body-md-font-weight);line-height:var(--lea-text-body-md-line-height);letter-spacing:var(--lea-text-body-md-letter-spacing)}@media (prefers-reduced-motion:reduce){._Header_18gqk_10,._Icon_18gqk_140,._Panel_18gqk_158{transition-duration:.01ms}}._Intro_nxwj4_7{color:var(--lea-palette-text-base)}._Intro_nxwj4_7 p,._Intro_nxwj4_7 ul,._Intro_nxwj4_7 ol{margin:0}._Intro_nxwj4_7>*+*{margin-top:var(--lea-spacing)}._Intro_nxwj4_7 ul,._Intro_nxwj4_7 ol{padding-inline-start:calc(var(--lea-spacing) * 2.5)}._Intro_nxwj4_7 a{border-radius:var(--lea-radius-sm);color:var(--lea-palette-text-accent);font-weight:var(--lea-font-weight-semibold);text-underline-offset:.15em;text-decoration:underline}._Intro_nxwj4_7 a:focus-visible{outline:2px solid var(--lea-palette-text-base);outline-offset:.125rem}._Categories_nxwj4_39{margin-top:calc(var(--lea-spacing) * 3)}._CategoryDescription_nxwj4_43{color:var(--lea-palette-text-base);font-size:var(--lea-text-body-md-font-size);font-weight:var(--lea-text-body-md-font-weight);line-height:var(--lea-text-body-md-line-height);letter-spacing:var(--lea-text-body-md-letter-spacing);margin:0}._Actions_nxwj4_52{margin-top:calc(var(--lea-spacing) * 3);gap:var(--lea-spacing);border-top:1px solid var(--lea-palette-border-subtle);flex-wrap:wrap;display:flex}._Actions_nxwj4_52 button{border-radius:var(--lea-radius-2xl)}._Save_nxwj4_63{margin-inline-start:auto}@media (width<=599.95px){._Actions_nxwj4_52{flex-direction:column;align-items:stretch}._Save_nxwj4_63{margin-inline-start:0}}}@layer utilities;
@@ -1,2 +1,2 @@
1
- import { a as e, l as t, n, o as r, s as i, u as a } from "./cookie-consent-core-mwVmy5nZ.mjs";
1
+ import { a as e, l as t, n, o as r, s as i, u as a } from "./cookie-consent-core-lX0QAEAo.mjs";
2
2
  export { t as COOKIE_CONSENT_CATEGORIES, a as COOKIE_CONSENT_REVISION, n as getConsentState, e as initCookieConsent, r as openCookieSettings, i as setConsent };
@@ -1,6 +1,12 @@
1
1
  import { CSSProperties, ReactNode } from 'react';
2
2
  /** Reads the enclosing `DevPanel.Section` heading id, if any. */
3
3
  export declare function useDevPanelSectionLabelId(): string | undefined;
4
+ /**
5
+ * Whether a key press is the shortcut, written as `"Mod+Shift+D"`: the key
6
+ * last, after any of `Mod` (⌘ on a Mac, Ctrl elsewhere), `Ctrl`, `Meta`,
7
+ * `Alt` and `Shift`. A modifier not named must not be held.
8
+ */
9
+ export declare function matchesShortcut(event: KeyboardEvent, shortcut: string): boolean;
4
10
  export type DevPanelProps = {
5
11
  /** Panel title shown in the header. Defaults to `"Dev controls"`. */
6
12
  title?: ReactNode;
@@ -20,6 +26,30 @@ export type DevPanelProps = {
20
26
  minimiseLabel?: string;
21
27
  /** Accessible name for the restore button. Defaults to a translated label. */
22
28
  expandLabel?: string;
29
+ /**
30
+ * Lets the panel be hidden completely: a hide button joins the minimise
31
+ * button, `shortcut` toggles it, and while it is hidden `handle` (a small
32
+ * tab at the edge of the window) brings it back. On a narrow screen the
33
+ * panel also starts minimised, drawn as a small round button. Defaults to
34
+ * `true` when `hidden` or `defaultHidden` is passed.
35
+ */
36
+ hideable?: boolean;
37
+ /** Controlled hidden state. Omit for uncontrolled. */
38
+ hidden?: boolean;
39
+ /** Initial hidden state when uncontrolled. Defaults to `false`. */
40
+ defaultHidden?: boolean;
41
+ /** Called whenever the hidden state changes. Store it to keep it across reloads. */
42
+ onHiddenChange?: (hidden: boolean) => void;
43
+ /**
44
+ * The keys that hide and show the panel, anywhere on the page. `Mod` is ⌘
45
+ * on a Mac and Ctrl elsewhere. `false` turns it off.
46
+ * @default "Mod+Shift+D"
47
+ */
48
+ shortcut?: string | false;
49
+ /** What shows while the panel is hidden. Defaults to `<DevPanel.Handle />`. */
50
+ handle?: ReactNode;
51
+ /** Accessible name for the hide button. Defaults to a translated label. */
52
+ hideLabel?: string;
23
53
  /** Section content: compose the `DevPanel.*` sub-components here. */
24
54
  children?: ReactNode;
25
55
  /** Class on the outermost element, for placing the panel. */
@@ -45,7 +75,7 @@ export type DevPanelProps = {
45
75
  * </DevPanel.Root>
46
76
  * ```
47
77
  */
48
- export declare function DevPanel({ title, badge, showStatusDot, minimisable, minimised, defaultMinimised, onMinimisedChange, minimiseLabel, expandLabel, children, className, style, }: DevPanelProps): import("react").JSX.Element;
78
+ export declare function DevPanel({ title, badge, showStatusDot, minimisable, minimised, defaultMinimised, onMinimisedChange, minimiseLabel, expandLabel, hidden, defaultHidden, onHiddenChange, hideable, shortcut, handle, hideLabel, children, className, style, }: DevPanelProps): import("react").JSX.Element;
49
79
  export type DevPanelSectionProps = {
50
80
  /** The uppercase section heading (e.g. `"Country"`). */
51
81
  label: ReactNode;
@@ -65,3 +95,24 @@ export type DevPanelSectionProps = {
65
95
  * wiring.
66
96
  */
67
97
  export declare function DevPanelSection({ label, meta, children, className, style, }: DevPanelSectionProps): import("react").JSX.Element;
98
+ export type DevPanelHandleProps = {
99
+ /** The edge of the window the tab sits on. Defaults to `"right"`. */
100
+ side?: "left" | "right";
101
+ /** The text on the tab. Defaults to the panel's `title`. */
102
+ label?: ReactNode;
103
+ /** Class on the button, for placing it differently. */
104
+ className?: string;
105
+ /** Inline style on the button, for placing it differently. */
106
+ style?: CSSProperties;
107
+ };
108
+ /**
109
+ * The tab that stands in for a hidden `DevPanel.Root` and brings it back: a
110
+ * small button fixed to the bottom of the right (or left) edge of the window.
111
+ * The panel renders it while hidden, so it is only used as the panel's
112
+ * `handle`, to change its side or text:
113
+ *
114
+ * ```tsx
115
+ * <DevPanel.Root hideable handle={<DevPanel.Handle side="left" />}>
116
+ * ```
117
+ */
118
+ export declare function DevPanelHandle({ side, label, className, style, }: DevPanelHandleProps): import("react").JSX.Element | null;
@@ -1,4 +1,4 @@
1
- export { DevPanel as Root, DevPanelSection as Section, useDevPanelSectionLabelId as useSectionLabelId, type DevPanelProps as RootProps, type DevPanelSectionProps as SectionProps, } from './dev-panel';
1
+ export { DevPanel as Root, DevPanelHandle as Handle, DevPanelSection as Section, useDevPanelSectionLabelId as useSectionLabelId, type DevPanelHandleProps as HandleProps, type DevPanelProps as RootProps, type DevPanelSectionProps as SectionProps, } from './dev-panel';
2
2
  export { DevPanelCountry as Country, type DevPanelCountryOption as CountryOption, type DevPanelCountryProps as CountryProps, } from './dev-panel-country';
3
3
  export { DevPanelVariant as Variant, type DevPanelVariantOption as VariantOption, type DevPanelVariantProps as VariantProps, } from './dev-panel-variant';
4
4
  export { DevPanelStepState as StepState, type DevPanelStepStateOption as StepStateOption, type DevPanelStepStateProps as StepStateProps, } from './dev-panel-step-state';
@@ -4,4 +4,4 @@
4
4
  * announced to assistive tech). Every string is overridable per-instance via a
5
5
  * matching prop, so consumers can localise or reword without forking.
6
6
  */
7
- export declare const useDevPanelLabels: () => Record<"step" | "copy" | "close" | "expand" | "copied" | "copyJson" | "minimise" | "statusCompleted" | "statusCurrent" | "statusUpcoming" | "needsAttention", string>;
7
+ export declare const useDevPanelLabels: () => Record<"step" | "show" | "hide" | "copy" | "close" | "expand" | "copied" | "copyJson" | "minimise" | "statusCompleted" | "statusCurrent" | "statusUpcoming" | "needsAttention", string>;