@c15t/svelte 3.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +88 -0
- package/README.md +136 -0
- package/SKILL.md +14 -0
- package/dist/actions/focus-trap.d.ts +8 -0
- package/dist/actions/focus-trap.js +23 -0
- package/dist/actions/portal.d.ts +8 -0
- package/dist/actions/portal.js +39 -0
- package/dist/actions/scroll-lock.d.ts +8 -0
- package/dist/actions/scroll-lock.js +23 -0
- package/dist/components/action-button.svelte +119 -0
- package/dist/components/action-button.svelte.d.ts +18 -0
- package/dist/components/branding.svelte +139 -0
- package/dist/components/branding.svelte.d.ts +13 -0
- package/dist/components/consent-dev-tools.svelte +58 -0
- package/dist/components/consent-dev-tools.svelte.d.ts +4 -0
- package/dist/components/frame.svelte +95 -0
- package/dist/components/frame.svelte.d.ts +12 -0
- package/dist/components/iab-panel.svelte +542 -0
- package/dist/components/iab-panel.svelte.d.ts +16 -0
- package/dist/components/iab-prompt.svelte +304 -0
- package/dist/components/iab-prompt.svelte.d.ts +14 -0
- package/dist/components/iab-purpose-item.svelte +511 -0
- package/dist/components/iab-purpose-item.svelte.d.ts +26 -0
- package/dist/components/iab-stack-item.svelte +146 -0
- package/dist/components/iab-stack-item.svelte.d.ts +19 -0
- package/dist/components/iab-vendor-list.svelte +900 -0
- package/dist/components/iab-vendor-list.svelte.d.ts +19 -0
- package/dist/components/icons/c15-t-icon-only.svelte +27 -0
- package/dist/components/icons/c15-t-icon-only.svelte.d.ts +9 -0
- package/dist/components/icons/chevron-down-icon.svelte +30 -0
- package/dist/components/icons/chevron-down-icon.svelte.d.ts +10 -0
- package/dist/components/icons/chevron-right-icon.svelte +36 -0
- package/dist/components/icons/chevron-right-icon.svelte.d.ts +12 -0
- package/dist/components/icons/close-icon.svelte +40 -0
- package/dist/components/icons/close-icon.svelte.d.ts +10 -0
- package/dist/components/icons/consent-icon-only.svelte +36 -0
- package/dist/components/icons/consent-icon-only.svelte.d.ts +9 -0
- package/dist/components/icons/external-link-icon.svelte +30 -0
- package/dist/components/icons/external-link-icon.svelte.d.ts +8 -0
- package/dist/components/icons/globe-icon.svelte +39 -0
- package/dist/components/icons/globe-icon.svelte.d.ts +9 -0
- package/dist/components/icons/info-icon.svelte +42 -0
- package/dist/components/icons/info-icon.svelte.d.ts +9 -0
- package/dist/components/icons/inth-logo.svelte +38 -0
- package/dist/components/icons/inth-logo.svelte.d.ts +9 -0
- package/dist/components/icons/layers-icon.svelte +25 -0
- package/dist/components/icons/layers-icon.svelte.d.ts +8 -0
- package/dist/components/icons/legitimate-interest-icon.svelte +29 -0
- package/dist/components/icons/legitimate-interest-icon.svelte.d.ts +10 -0
- package/dist/components/icons/lock-icon.svelte +31 -0
- package/dist/components/icons/lock-icon.svelte.d.ts +8 -0
- package/dist/components/icons/search-icon.svelte +33 -0
- package/dist/components/icons/search-icon.svelte.d.ts +8 -0
- package/dist/components/inline-legal-links.svelte +95 -0
- package/dist/components/inline-legal-links.svelte.d.ts +10 -0
- package/dist/components/manager-provider.svelte +459 -0
- package/dist/components/manager-provider.svelte.d.ts +27 -0
- package/dist/components/overlay.svelte +79 -0
- package/dist/components/overlay.svelte.d.ts +7 -0
- package/dist/components/panel-link.svelte +33 -0
- package/dist/components/panel-link.svelte.d.ts +10 -0
- package/dist/components/panel-trigger.svelte +237 -0
- package/dist/components/panel-trigger.svelte.d.ts +16 -0
- package/dist/components/panel.svelte +258 -0
- package/dist/components/panel.svelte.d.ts +22 -0
- package/dist/components/policy-actions-renderer.svelte +79 -0
- package/dist/components/policy-actions-renderer.svelte.d.ts +19 -0
- package/dist/components/preferences.svelte +320 -0
- package/dist/components/preferences.svelte.d.ts +8 -0
- package/dist/components/prompt.svelte +514 -0
- package/dist/components/prompt.svelte.d.ts +43 -0
- package/dist/context.svelte.d.ts +125 -0
- package/dist/context.svelte.js +354 -0
- package/dist/devtools-options.d.ts +7 -0
- package/dist/devtools-options.js +1 -0
- package/dist/devtools.d.ts +9 -0
- package/dist/devtools.js +7 -0
- package/dist/headless.d.ts +10 -0
- package/dist/headless.js +7 -0
- package/dist/iab/styles.css +11 -0
- package/dist/iab-loader.d.ts +30 -0
- package/dist/iab-loader.js +33 -0
- package/dist/iab-translations.d.ts +84 -0
- package/dist/iab-translations.js +45 -0
- package/dist/iab-types.d.ts +62 -0
- package/dist/iab-types.js +43 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +21 -0
- package/dist/kit/app.d.ts +35 -0
- package/dist/kit/handle.d.ts +34 -0
- package/dist/kit/handle.js +87 -0
- package/dist/kit/index.d.ts +30 -0
- package/dist/kit/index.js +5 -0
- package/dist/kit/load-consent.d.ts +57 -0
- package/dist/kit/load-consent.js +144 -0
- package/dist/kit/routes.d.ts +46 -0
- package/dist/kit/routes.js +203 -0
- package/dist/kit/types.d.ts +56 -0
- package/dist/kit/types.js +1 -0
- package/dist/primitives/accordion/accordion-item-content.svelte +35 -0
- package/dist/primitives/accordion/accordion-item-content.svelte.d.ts +9 -0
- package/dist/primitives/accordion/accordion-item-trigger.svelte +54 -0
- package/dist/primitives/accordion/accordion-item-trigger.svelte.d.ts +10 -0
- package/dist/primitives/accordion/accordion-item.svelte +61 -0
- package/dist/primitives/accordion/accordion-item.svelte.d.ts +11 -0
- package/dist/primitives/accordion/accordion-root.svelte +61 -0
- package/dist/primitives/accordion/accordion-root.svelte.d.ts +13 -0
- package/dist/primitives/accordion/context.d.ts +18 -0
- package/dist/primitives/accordion/context.js +23 -0
- package/dist/primitives/accordion/index.d.ts +29 -0
- package/dist/primitives/accordion/index.js +11 -0
- package/dist/primitives/collapsible/collapsible-content.svelte +36 -0
- package/dist/primitives/collapsible/collapsible-content.svelte.d.ts +9 -0
- package/dist/primitives/collapsible/collapsible-indicator.svelte +29 -0
- package/dist/primitives/collapsible/collapsible-indicator.svelte.d.ts +9 -0
- package/dist/primitives/collapsible/collapsible-root.svelte +70 -0
- package/dist/primitives/collapsible/collapsible-root.svelte.d.ts +11 -0
- package/dist/primitives/collapsible/collapsible-trigger.svelte +52 -0
- package/dist/primitives/collapsible/collapsible-trigger.svelte.d.ts +10 -0
- package/dist/primitives/collapsible/context.d.ts +10 -0
- package/dist/primitives/collapsible/context.js +12 -0
- package/dist/primitives/collapsible/index.d.ts +26 -0
- package/dist/primitives/collapsible/index.js +11 -0
- package/dist/primitives/dialog/context.d.ts +14 -0
- package/dist/primitives/dialog/context.js +12 -0
- package/dist/primitives/dialog/dialog-backdrop.svelte +39 -0
- package/dist/primitives/dialog/dialog-backdrop.svelte.d.ts +7 -0
- package/dist/primitives/dialog/dialog-close-trigger.svelte +48 -0
- package/dist/primitives/dialog/dialog-close-trigger.svelte.d.ts +11 -0
- package/dist/primitives/dialog/dialog-content.svelte +81 -0
- package/dist/primitives/dialog/dialog-content.svelte.d.ts +9 -0
- package/dist/primitives/dialog/dialog-description.svelte +28 -0
- package/dist/primitives/dialog/dialog-description.svelte.d.ts +9 -0
- package/dist/primitives/dialog/dialog-positioner.svelte +33 -0
- package/dist/primitives/dialog/dialog-positioner.svelte.d.ts +9 -0
- package/dist/primitives/dialog/dialog-root.svelte +117 -0
- package/dist/primitives/dialog/dialog-root.svelte.d.ts +14 -0
- package/dist/primitives/dialog/dialog-title.svelte +28 -0
- package/dist/primitives/dialog/dialog-title.svelte.d.ts +9 -0
- package/dist/primitives/dialog/index.d.ts +50 -0
- package/dist/primitives/dialog/index.js +19 -0
- package/dist/primitives/index.d.ts +7 -0
- package/dist/primitives/index.js +7 -0
- package/dist/primitives/portal/index.d.ts +4 -0
- package/dist/primitives/portal/index.js +2 -0
- package/dist/primitives/portal/portal.svelte +23 -0
- package/dist/primitives/portal/portal.svelte.d.ts +9 -0
- package/dist/primitives/preference-item/context.d.ts +11 -0
- package/dist/primitives/preference-item/context.js +12 -0
- package/dist/primitives/preference-item/index.d.ts +54 -0
- package/dist/primitives/preference-item/index.js +21 -0
- package/dist/primitives/preference-item/preference-item-auxiliary.svelte +33 -0
- package/dist/primitives/preference-item/preference-item-auxiliary.svelte.d.ts +9 -0
- package/dist/primitives/preference-item/preference-item-content.svelte +68 -0
- package/dist/primitives/preference-item/preference-item-content.svelte.d.ts +14 -0
- package/dist/primitives/preference-item/preference-item-control.svelte +33 -0
- package/dist/primitives/preference-item/preference-item-control.svelte.d.ts +9 -0
- package/dist/primitives/preference-item/preference-item-header.svelte +33 -0
- package/dist/primitives/preference-item/preference-item-header.svelte.d.ts +9 -0
- package/dist/primitives/preference-item/preference-item-leading.svelte +33 -0
- package/dist/primitives/preference-item/preference-item-leading.svelte.d.ts +9 -0
- package/dist/primitives/preference-item/preference-item-meta.svelte +33 -0
- package/dist/primitives/preference-item/preference-item-meta.svelte.d.ts +9 -0
- package/dist/primitives/preference-item/preference-item-root.svelte +82 -0
- package/dist/primitives/preference-item/preference-item-root.svelte.d.ts +12 -0
- package/dist/primitives/preference-item/preference-item-title.svelte +33 -0
- package/dist/primitives/preference-item/preference-item-title.svelte.d.ts +9 -0
- package/dist/primitives/preference-item/preference-item-trigger.svelte +62 -0
- package/dist/primitives/preference-item/preference-item-trigger.svelte.d.ts +10 -0
- package/dist/primitives/switch/context.d.ts +7 -0
- package/dist/primitives/switch/context.js +12 -0
- package/dist/primitives/switch/index.d.ts +25 -0
- package/dist/primitives/switch/index.js +11 -0
- package/dist/primitives/switch/switch-control.svelte +21 -0
- package/dist/primitives/switch/switch-control.svelte.d.ts +9 -0
- package/dist/primitives/switch/switch-hidden-input.svelte +31 -0
- package/dist/primitives/switch/switch-hidden-input.svelte.d.ts +8 -0
- package/dist/primitives/switch/switch-root.svelte +86 -0
- package/dist/primitives/switch/switch-root.svelte.d.ts +12 -0
- package/dist/primitives/switch/switch-thumb.svelte +14 -0
- package/dist/primitives/switch/switch-thumb.svelte.d.ts +7 -0
- package/dist/primitives/tabs/context.d.ts +11 -0
- package/dist/primitives/tabs/context.js +12 -0
- package/dist/primitives/tabs/index.d.ts +32 -0
- package/dist/primitives/tabs/index.js +11 -0
- package/dist/primitives/tabs/tabs-content.svelte +45 -0
- package/dist/primitives/tabs/tabs-content.svelte.d.ts +11 -0
- package/dist/primitives/tabs/tabs-list.svelte +38 -0
- package/dist/primitives/tabs/tabs-list.svelte.d.ts +10 -0
- package/dist/primitives/tabs/tabs-root.svelte +67 -0
- package/dist/primitives/tabs/tabs-root.svelte.d.ts +14 -0
- package/dist/primitives/tabs/tabs-trigger.svelte +108 -0
- package/dist/primitives/tabs/tabs-trigger.svelte.d.ts +11 -0
- package/dist/server/headers.d.ts +13 -0
- package/dist/server/headers.js +37 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.js +116 -0
- package/dist/server/normalize-url.d.ts +23 -0
- package/dist/server/normalize-url.js +46 -0
- package/dist/server/types.d.ts +25 -0
- package/dist/server/types.js +1 -0
- package/dist/styles.css +10 -0
- package/dist/transports/offline.d.ts +14 -0
- package/dist/transports/offline.js +22 -0
- package/dist/types.d.ts +70 -0
- package/dist/types.js +1 -0
- package/dist/use-banner-visibility.svelte.d.ts +25 -0
- package/dist/use-banner-visibility.svelte.js +108 -0
- package/dist/utils.d.ts +25 -0
- package/dist/utils.js +32 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +2 -0
- package/docs/README.md +88 -0
- package/docs/assets/v3/brand-bar.png +0 -0
- package/docs/assets/v3/brand-card.png +0 -0
- package/docs/assets/v3/choice-wall.png +0 -0
- package/docs/assets/v3/mobile-card.png +0 -0
- package/docs/assets/v3/preferences.png +0 -0
- package/docs/customization/overview.md +45 -0
- package/docs/customization/recipes.md +79 -0
- package/docs/customization/slots.md +55 -0
- package/docs/customization/tokens.md +76 -0
- package/docs/customization/translations.md +49 -0
- package/docs/frameworks/svelte/quickstart.md +133 -0
- package/docs/frameworks/sveltekit/quickstart.md +144 -0
- package/docs/guides/consent-state.md +60 -0
- package/docs/guides/data-fetching.md +163 -0
- package/docs/guides/deployment-modes.md +63 -0
- package/docs/guides/troubleshooting.md +68 -0
- package/docs/guides/verify-consent.md +62 -0
- package/docs/integrations/adobe-analytics.md +294 -0
- package/docs/integrations/ahrefs-analytics.md +291 -0
- package/docs/integrations/amplitude.md +292 -0
- package/docs/integrations/building-integrations.md +47 -0
- package/docs/integrations/clearbit.md +291 -0
- package/docs/integrations/cloudflare-web-analytics.md +292 -0
- package/docs/integrations/crisp.md +294 -0
- package/docs/integrations/databuddy.md +311 -0
- package/docs/integrations/fathom-analytics.md +293 -0
- package/docs/integrations/google-maps.md +384 -0
- package/docs/integrations/google-tag-manager.md +306 -0
- package/docs/integrations/google-tag.md +305 -0
- package/docs/integrations/heap.md +292 -0
- package/docs/integrations/hightouch.md +293 -0
- package/docs/integrations/hotjar.md +292 -0
- package/docs/integrations/intercom.md +285 -0
- package/docs/integrations/linkedin-insights.md +291 -0
- package/docs/integrations/logrocket.md +293 -0
- package/docs/integrations/matomo-analytics.md +316 -0
- package/docs/integrations/meta-pixel.md +285 -0
- package/docs/integrations/microsoft-clarity.md +292 -0
- package/docs/integrations/microsoft-uet.md +291 -0
- package/docs/integrations/mixpanel-analytics.md +295 -0
- package/docs/integrations/openai-pixel.md +441 -0
- package/docs/integrations/overview.md +111 -0
- package/docs/integrations/pirsch.md +295 -0
- package/docs/integrations/plausible-analytics.md +295 -0
- package/docs/integrations/posthog.md +397 -0
- package/docs/integrations/promptwatch.md +291 -0
- package/docs/integrations/reddit-pixel.md +294 -0
- package/docs/integrations/rudderstack.md +328 -0
- package/docs/integrations/rybbit-analytics.md +296 -0
- package/docs/integrations/segment.md +292 -0
- package/docs/integrations/snapchat-pixel.md +293 -0
- package/docs/integrations/tiktok-pixel.md +291 -0
- package/docs/integrations/umami-analytics.md +295 -0
- package/docs/integrations/vercel-analytics.md +293 -0
- package/docs/integrations/x-pixel.md +291 -0
- package/docs/integrations/youtube.md +405 -0
- package/docs/upgrade-v3.md +334 -0
- package/iab/styles.css +1 -0
- package/package.json +153 -0
- package/readme.json +36 -0
- package/styles.css +1 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getCollapsibleState } from '@c15t/ui/primitives';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
5
|
+
|
|
6
|
+
import { getCollapsibleRootContext } from './context';
|
|
7
|
+
|
|
8
|
+
const root = getCollapsibleRootContext();
|
|
9
|
+
|
|
10
|
+
const dataState = $derived(getCollapsibleState(root.open));
|
|
11
|
+
|
|
12
|
+
let {
|
|
13
|
+
children,
|
|
14
|
+
class: className,
|
|
15
|
+
...restProps
|
|
16
|
+
}: HTMLAttributes<HTMLSpanElement> & {
|
|
17
|
+
children?: Snippet;
|
|
18
|
+
class?: string;
|
|
19
|
+
} = $props();
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<span
|
|
23
|
+
class={className}
|
|
24
|
+
data-slot="collapsible-indicator"
|
|
25
|
+
data-state={dataState}
|
|
26
|
+
{...restProps}
|
|
27
|
+
>
|
|
28
|
+
{@render children?.()}
|
|
29
|
+
</span>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type $$ComponentProps = HTMLAttributes<HTMLSpanElement> & {
|
|
4
|
+
children?: Snippet;
|
|
5
|
+
class?: string;
|
|
6
|
+
};
|
|
7
|
+
declare const CollapsibleIndicator: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
8
|
+
type CollapsibleIndicator = ReturnType<typeof CollapsibleIndicator>;
|
|
9
|
+
export default CollapsibleIndicator;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
getCollapsibleState,
|
|
4
|
+
getDataDisabled,
|
|
5
|
+
toggleCollapsibleValue,
|
|
6
|
+
} from '@c15t/ui/primitives';
|
|
7
|
+
import type { Snippet } from 'svelte';
|
|
8
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
9
|
+
|
|
10
|
+
import { setCollapsibleRootContext } from './context';
|
|
11
|
+
|
|
12
|
+
const componentId = $props.id();
|
|
13
|
+
|
|
14
|
+
let {
|
|
15
|
+
children,
|
|
16
|
+
class: className,
|
|
17
|
+
disabled = false,
|
|
18
|
+
open = $bindable(false),
|
|
19
|
+
...restProps
|
|
20
|
+
}: HTMLAttributes<HTMLDivElement> & {
|
|
21
|
+
children?: Snippet;
|
|
22
|
+
class?: string;
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
open?: boolean;
|
|
25
|
+
} = $props();
|
|
26
|
+
|
|
27
|
+
const dataState = $derived(getCollapsibleState(open));
|
|
28
|
+
const dataDisabled = $derived(getDataDisabled(disabled));
|
|
29
|
+
const triggerId = `c15t-collapsible-trigger-${componentId}`;
|
|
30
|
+
const contentId = `c15t-collapsible-content-${componentId}`;
|
|
31
|
+
|
|
32
|
+
const setOpen = function setOpen(nextOpen: boolean) {
|
|
33
|
+
if (disabled) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
open = nextOpen;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const toggle = function toggle() {
|
|
41
|
+
setOpen(toggleCollapsibleValue(open));
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
setCollapsibleRootContext({
|
|
45
|
+
get contentId() {
|
|
46
|
+
return contentId;
|
|
47
|
+
},
|
|
48
|
+
get disabled() {
|
|
49
|
+
return disabled;
|
|
50
|
+
},
|
|
51
|
+
get open() {
|
|
52
|
+
return open;
|
|
53
|
+
},
|
|
54
|
+
setOpen,
|
|
55
|
+
toggle,
|
|
56
|
+
get triggerId() {
|
|
57
|
+
return triggerId;
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
</script>
|
|
61
|
+
|
|
62
|
+
<div
|
|
63
|
+
class={className}
|
|
64
|
+
data-slot="collapsible-root"
|
|
65
|
+
data-state={dataState}
|
|
66
|
+
data-disabled={dataDisabled}
|
|
67
|
+
{...restProps}
|
|
68
|
+
>
|
|
69
|
+
{@render children?.()}
|
|
70
|
+
</div>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
4
|
+
children?: Snippet;
|
|
5
|
+
class?: string;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
open?: boolean;
|
|
8
|
+
};
|
|
9
|
+
declare const CollapsibleRoot: import("svelte").Component<$$ComponentProps, {}, "open">;
|
|
10
|
+
type CollapsibleRoot = ReturnType<typeof CollapsibleRoot>;
|
|
11
|
+
export default CollapsibleRoot;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getCollapsibleState, getDataDisabled } from '@c15t/ui/primitives';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
5
|
+
|
|
6
|
+
import { getCollapsibleRootContext } from './context';
|
|
7
|
+
|
|
8
|
+
const root = getCollapsibleRootContext();
|
|
9
|
+
|
|
10
|
+
const open = $derived(root.open);
|
|
11
|
+
const disabled = $derived(root.disabled);
|
|
12
|
+
const triggerId = $derived(root.triggerId);
|
|
13
|
+
const contentId = $derived(root.contentId);
|
|
14
|
+
const dataState = $derived(getCollapsibleState(open));
|
|
15
|
+
const dataDisabled = $derived(getDataDisabled(disabled));
|
|
16
|
+
|
|
17
|
+
let {
|
|
18
|
+
children,
|
|
19
|
+
class: className,
|
|
20
|
+
onclick,
|
|
21
|
+
type = 'button',
|
|
22
|
+
...restProps
|
|
23
|
+
}: HTMLAttributes<HTMLButtonElement> & {
|
|
24
|
+
children?: Snippet;
|
|
25
|
+
class?: string;
|
|
26
|
+
type?: 'button' | 'submit' | 'reset';
|
|
27
|
+
} = $props();
|
|
28
|
+
|
|
29
|
+
const handleClick = function handleClick(
|
|
30
|
+
event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement }
|
|
31
|
+
) {
|
|
32
|
+
root.toggle();
|
|
33
|
+
onclick?.(event);
|
|
34
|
+
};
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<button
|
|
38
|
+
{type}
|
|
39
|
+
id={triggerId}
|
|
40
|
+
class={className}
|
|
41
|
+
aria-controls={contentId}
|
|
42
|
+
aria-disabled={disabled || undefined}
|
|
43
|
+
aria-expanded={open}
|
|
44
|
+
data-slot="collapsible-trigger"
|
|
45
|
+
data-state={dataState}
|
|
46
|
+
data-disabled={dataDisabled}
|
|
47
|
+
{disabled}
|
|
48
|
+
{...restProps}
|
|
49
|
+
onclick={handleClick}
|
|
50
|
+
>
|
|
51
|
+
{@render children?.()}
|
|
52
|
+
</button>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type $$ComponentProps = HTMLAttributes<HTMLButtonElement> & {
|
|
4
|
+
children?: Snippet;
|
|
5
|
+
class?: string;
|
|
6
|
+
type?: 'button' | 'submit' | 'reset';
|
|
7
|
+
};
|
|
8
|
+
declare const CollapsibleTrigger: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
9
|
+
type CollapsibleTrigger = ReturnType<typeof CollapsibleTrigger>;
|
|
10
|
+
export default CollapsibleTrigger;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface CollapsibleRootContextValue {
|
|
2
|
+
readonly contentId: string;
|
|
3
|
+
readonly disabled: boolean;
|
|
4
|
+
readonly open: boolean;
|
|
5
|
+
readonly triggerId: string;
|
|
6
|
+
setOpen: (open: boolean) => void;
|
|
7
|
+
toggle: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare const setCollapsibleRootContext: (value: CollapsibleRootContextValue) => void;
|
|
10
|
+
export declare const getCollapsibleRootContext: () => CollapsibleRootContextValue;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { getContext, setContext } from 'svelte';
|
|
2
|
+
const COLLAPSIBLE_ROOT_CONTEXT_KEY = Symbol('c15t-svelte-collapsible-root');
|
|
3
|
+
export const setCollapsibleRootContext = function setCollapsibleRootContext(value) {
|
|
4
|
+
setContext(COLLAPSIBLE_ROOT_CONTEXT_KEY, value);
|
|
5
|
+
};
|
|
6
|
+
export const getCollapsibleRootContext = function getCollapsibleRootContext() {
|
|
7
|
+
const context = getContext(COLLAPSIBLE_ROOT_CONTEXT_KEY);
|
|
8
|
+
if (!context) {
|
|
9
|
+
throw new Error('Collapsible primitives must be used within Collapsible.Root');
|
|
10
|
+
}
|
|
11
|
+
return context;
|
|
12
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import Content from './collapsible-content.svelte';
|
|
2
|
+
import Indicator from './collapsible-indicator.svelte';
|
|
3
|
+
import Root from './collapsible-root.svelte';
|
|
4
|
+
import Trigger from './collapsible-trigger.svelte';
|
|
5
|
+
export declare const Collapsible: {
|
|
6
|
+
Content: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLDivElement> & {
|
|
7
|
+
children?: import("svelte").Snippet;
|
|
8
|
+
class?: string;
|
|
9
|
+
}, {}, "">;
|
|
10
|
+
Indicator: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLSpanElement> & {
|
|
11
|
+
children?: import("svelte").Snippet;
|
|
12
|
+
class?: string;
|
|
13
|
+
}, {}, "">;
|
|
14
|
+
Root: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLDivElement> & {
|
|
15
|
+
children?: import("svelte").Snippet;
|
|
16
|
+
class?: string;
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
open?: boolean;
|
|
19
|
+
}, {}, "open">;
|
|
20
|
+
Trigger: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLButtonElement> & {
|
|
21
|
+
children?: import("svelte").Snippet;
|
|
22
|
+
class?: string;
|
|
23
|
+
type?: "button" | "submit" | "reset";
|
|
24
|
+
}, {}, "">;
|
|
25
|
+
};
|
|
26
|
+
export { Content, Indicator, Root, Trigger };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import Content from './collapsible-content.svelte';
|
|
2
|
+
import Indicator from './collapsible-indicator.svelte';
|
|
3
|
+
import Root from './collapsible-root.svelte';
|
|
4
|
+
import Trigger from './collapsible-trigger.svelte';
|
|
5
|
+
export const Collapsible = {
|
|
6
|
+
Content,
|
|
7
|
+
Indicator,
|
|
8
|
+
Root,
|
|
9
|
+
Trigger,
|
|
10
|
+
};
|
|
11
|
+
export { Content, Indicator, Root, Trigger };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface DialogRootContextValue {
|
|
2
|
+
readonly closeOnEscape: boolean;
|
|
3
|
+
readonly closeOnInteractOutside: boolean;
|
|
4
|
+
readonly contentId: string;
|
|
5
|
+
readonly descriptionId: string;
|
|
6
|
+
readonly open: boolean;
|
|
7
|
+
readonly preventScroll: boolean;
|
|
8
|
+
readonly shouldRender: boolean;
|
|
9
|
+
readonly titleId: string;
|
|
10
|
+
readonly trapFocus: boolean;
|
|
11
|
+
requestClose: (reason: 'backdrop' | 'close-trigger' | 'escape') => void;
|
|
12
|
+
}
|
|
13
|
+
export declare const setDialogRootContext: (value: DialogRootContextValue) => void;
|
|
14
|
+
export declare const getDialogRootContext: () => DialogRootContextValue;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { getContext, setContext } from 'svelte';
|
|
2
|
+
const DIALOG_ROOT_CONTEXT_KEY = Symbol('c15t-svelte-dialog-root');
|
|
3
|
+
export const setDialogRootContext = function setDialogRootContext(value) {
|
|
4
|
+
setContext(DIALOG_ROOT_CONTEXT_KEY, value);
|
|
5
|
+
};
|
|
6
|
+
export const getDialogRootContext = function getDialogRootContext() {
|
|
7
|
+
const context = getContext(DIALOG_ROOT_CONTEXT_KEY);
|
|
8
|
+
if (!context) {
|
|
9
|
+
throw new Error('Dialog primitives must be used within Dialog.Root');
|
|
10
|
+
}
|
|
11
|
+
return context;
|
|
12
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getDialogState } from '@c15t/ui/primitives';
|
|
3
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
4
|
+
|
|
5
|
+
import { getDialogRootContext } from './context';
|
|
6
|
+
|
|
7
|
+
const dialog = getDialogRootContext();
|
|
8
|
+
|
|
9
|
+
const open = $derived(dialog.open);
|
|
10
|
+
const shouldRender = $derived(dialog.shouldRender);
|
|
11
|
+
const dataState = $derived(getDialogState(open));
|
|
12
|
+
|
|
13
|
+
let {
|
|
14
|
+
class: className,
|
|
15
|
+
onclick,
|
|
16
|
+
...restProps
|
|
17
|
+
}: HTMLAttributes<HTMLDivElement> & {
|
|
18
|
+
class?: string;
|
|
19
|
+
} = $props();
|
|
20
|
+
|
|
21
|
+
const handleClick = function handleClick(
|
|
22
|
+
event: MouseEvent & { currentTarget: EventTarget & HTMLDivElement }
|
|
23
|
+
) {
|
|
24
|
+
dialog.requestClose('backdrop');
|
|
25
|
+
onclick?.(event);
|
|
26
|
+
};
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
{#if shouldRender}
|
|
30
|
+
<div
|
|
31
|
+
role="presentation"
|
|
32
|
+
aria-hidden="true"
|
|
33
|
+
class={className}
|
|
34
|
+
data-slot="dialog-backdrop"
|
|
35
|
+
data-state={dataState}
|
|
36
|
+
{...restProps}
|
|
37
|
+
onclick={handleClick}
|
|
38
|
+
></div>
|
|
39
|
+
{/if}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
2
|
+
type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
3
|
+
class?: string;
|
|
4
|
+
};
|
|
5
|
+
declare const DialogBackdrop: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
6
|
+
type DialogBackdrop = ReturnType<typeof DialogBackdrop>;
|
|
7
|
+
export default DialogBackdrop;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getDialogState } from '@c15t/ui/primitives';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
5
|
+
|
|
6
|
+
import { getDialogRootContext } from './context';
|
|
7
|
+
|
|
8
|
+
const dialog = getDialogRootContext();
|
|
9
|
+
|
|
10
|
+
const open = $derived(dialog.open);
|
|
11
|
+
const dataState = $derived(getDialogState(open));
|
|
12
|
+
|
|
13
|
+
let {
|
|
14
|
+
children,
|
|
15
|
+
class: className,
|
|
16
|
+
disabled = false,
|
|
17
|
+
onclick,
|
|
18
|
+
type = 'button',
|
|
19
|
+
...restProps
|
|
20
|
+
}: HTMLAttributes<HTMLButtonElement> & {
|
|
21
|
+
children?: Snippet;
|
|
22
|
+
class?: string;
|
|
23
|
+
disabled?: boolean;
|
|
24
|
+
type?: 'button' | 'submit' | 'reset';
|
|
25
|
+
} = $props();
|
|
26
|
+
|
|
27
|
+
const handleClick = function handleClick(
|
|
28
|
+
event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement }
|
|
29
|
+
) {
|
|
30
|
+
if (!disabled) {
|
|
31
|
+
dialog.requestClose('close-trigger');
|
|
32
|
+
}
|
|
33
|
+
onclick?.(event);
|
|
34
|
+
};
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<button
|
|
38
|
+
{type}
|
|
39
|
+
class={className}
|
|
40
|
+
data-slot="dialog-close"
|
|
41
|
+
data-state={dataState}
|
|
42
|
+
data-disabled={disabled ? '' : undefined}
|
|
43
|
+
{disabled}
|
|
44
|
+
{...restProps}
|
|
45
|
+
onclick={handleClick}
|
|
46
|
+
>
|
|
47
|
+
{@render children?.()}
|
|
48
|
+
</button>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type $$ComponentProps = HTMLAttributes<HTMLButtonElement> & {
|
|
4
|
+
children?: Snippet;
|
|
5
|
+
class?: string;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
type?: 'button' | 'submit' | 'reset';
|
|
8
|
+
};
|
|
9
|
+
declare const DialogCloseTrigger: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
10
|
+
type DialogCloseTrigger = ReturnType<typeof DialogCloseTrigger>;
|
|
11
|
+
export default DialogCloseTrigger;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getDialogState, isDialogDismissKey } from '@c15t/ui/primitives';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
5
|
+
|
|
6
|
+
import { focusTrap } from '../../actions/focus-trap';
|
|
7
|
+
import { scrollLock } from '../../actions/scroll-lock';
|
|
8
|
+
import { getDialogRootContext } from './context';
|
|
9
|
+
|
|
10
|
+
const dialog = getDialogRootContext();
|
|
11
|
+
|
|
12
|
+
let node = $state<HTMLElement | null>(null);
|
|
13
|
+
|
|
14
|
+
const open = $derived(dialog.open);
|
|
15
|
+
const shouldRender = $derived(dialog.shouldRender);
|
|
16
|
+
const contentId = $derived(dialog.contentId);
|
|
17
|
+
const titleId = $derived(dialog.titleId);
|
|
18
|
+
const descriptionId = $derived(dialog.descriptionId);
|
|
19
|
+
const dataState = $derived(getDialogState(open));
|
|
20
|
+
|
|
21
|
+
let {
|
|
22
|
+
children,
|
|
23
|
+
class: className,
|
|
24
|
+
onkeydown,
|
|
25
|
+
...restProps
|
|
26
|
+
}: HTMLAttributes<HTMLDivElement> & {
|
|
27
|
+
children?: Snippet;
|
|
28
|
+
class?: string;
|
|
29
|
+
} = $props();
|
|
30
|
+
|
|
31
|
+
const handleKeyDown = function handleKeyDown(
|
|
32
|
+
event: KeyboardEvent & { currentTarget: EventTarget & HTMLDivElement }
|
|
33
|
+
) {
|
|
34
|
+
if (isDialogDismissKey(event.key)) {
|
|
35
|
+
event.preventDefault();
|
|
36
|
+
dialog.requestClose('escape');
|
|
37
|
+
}
|
|
38
|
+
onkeydown?.(event);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
$effect(() => {
|
|
42
|
+
if (!open || !node) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
queueMicrotask(() => {
|
|
47
|
+
if (!node || !open) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const { activeElement } = document;
|
|
52
|
+
if (!activeElement || !node.contains(activeElement)) {
|
|
53
|
+
const preferredFocusTarget = node.querySelector<HTMLElement>(
|
|
54
|
+
'[data-c15t-dialog-focus="true"]'
|
|
55
|
+
);
|
|
56
|
+
(preferredFocusTarget ?? node).focus();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
</script>
|
|
61
|
+
|
|
62
|
+
{#if shouldRender}
|
|
63
|
+
<div
|
|
64
|
+
bind:this={node}
|
|
65
|
+
id={contentId}
|
|
66
|
+
role="dialog"
|
|
67
|
+
tabindex={-1}
|
|
68
|
+
aria-modal={dialog.trapFocus ? 'true' : undefined}
|
|
69
|
+
aria-labelledby={titleId}
|
|
70
|
+
aria-describedby={descriptionId}
|
|
71
|
+
class={className}
|
|
72
|
+
data-slot="dialog-content"
|
|
73
|
+
data-state={dataState}
|
|
74
|
+
use:focusTrap={open && dialog.trapFocus}
|
|
75
|
+
use:scrollLock={open && dialog.preventScroll}
|
|
76
|
+
{...restProps}
|
|
77
|
+
onkeydown={handleKeyDown}
|
|
78
|
+
>
|
|
79
|
+
{@render children?.()}
|
|
80
|
+
</div>
|
|
81
|
+
{/if}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
4
|
+
children?: Snippet;
|
|
5
|
+
class?: string;
|
|
6
|
+
};
|
|
7
|
+
declare const DialogContent: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
8
|
+
type DialogContent = ReturnType<typeof DialogContent>;
|
|
9
|
+
export default DialogContent;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
4
|
+
|
|
5
|
+
import { getDialogRootContext } from './context';
|
|
6
|
+
|
|
7
|
+
const dialog = getDialogRootContext();
|
|
8
|
+
|
|
9
|
+
const descriptionId = $derived(dialog.descriptionId);
|
|
10
|
+
|
|
11
|
+
let {
|
|
12
|
+
children,
|
|
13
|
+
class: className,
|
|
14
|
+
...restProps
|
|
15
|
+
}: HTMLAttributes<HTMLParagraphElement> & {
|
|
16
|
+
children?: Snippet;
|
|
17
|
+
class?: string;
|
|
18
|
+
} = $props();
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<p
|
|
22
|
+
id={descriptionId}
|
|
23
|
+
class={className}
|
|
24
|
+
data-slot="dialog-description"
|
|
25
|
+
{...restProps}
|
|
26
|
+
>
|
|
27
|
+
{@render children?.()}
|
|
28
|
+
</p>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type $$ComponentProps = HTMLAttributes<HTMLParagraphElement> & {
|
|
4
|
+
children?: Snippet;
|
|
5
|
+
class?: string;
|
|
6
|
+
};
|
|
7
|
+
declare const DialogDescription: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
8
|
+
type DialogDescription = ReturnType<typeof DialogDescription>;
|
|
9
|
+
export default DialogDescription;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getDialogState } from '@c15t/ui/primitives';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
5
|
+
|
|
6
|
+
import { getDialogRootContext } from './context';
|
|
7
|
+
|
|
8
|
+
const dialog = getDialogRootContext();
|
|
9
|
+
|
|
10
|
+
const open = $derived(dialog.open);
|
|
11
|
+
const shouldRender = $derived(dialog.shouldRender);
|
|
12
|
+
const dataState = $derived(getDialogState(open));
|
|
13
|
+
|
|
14
|
+
let {
|
|
15
|
+
children,
|
|
16
|
+
class: className,
|
|
17
|
+
...restProps
|
|
18
|
+
}: HTMLAttributes<HTMLDivElement> & {
|
|
19
|
+
children?: Snippet;
|
|
20
|
+
class?: string;
|
|
21
|
+
} = $props();
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
{#if shouldRender}
|
|
25
|
+
<div
|
|
26
|
+
class={className}
|
|
27
|
+
data-slot="dialog-positioner"
|
|
28
|
+
data-state={dataState}
|
|
29
|
+
{...restProps}
|
|
30
|
+
>
|
|
31
|
+
{@render children?.()}
|
|
32
|
+
</div>
|
|
33
|
+
{/if}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
3
|
+
type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
|
|
4
|
+
children?: Snippet;
|
|
5
|
+
class?: string;
|
|
6
|
+
};
|
|
7
|
+
declare const DialogPositioner: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
8
|
+
type DialogPositioner = ReturnType<typeof DialogPositioner>;
|
|
9
|
+
export default DialogPositioner;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
import { setDialogRootContext } from './context';
|
|
5
|
+
|
|
6
|
+
const componentId = $props.id();
|
|
7
|
+
|
|
8
|
+
let {
|
|
9
|
+
children,
|
|
10
|
+
closeOnEscape = true,
|
|
11
|
+
closeOnInteractOutside = true,
|
|
12
|
+
lazyMount = false,
|
|
13
|
+
open = $bindable(false),
|
|
14
|
+
preventScroll = false,
|
|
15
|
+
trapFocus = true,
|
|
16
|
+
unmountOnExit = false,
|
|
17
|
+
}: {
|
|
18
|
+
children?: Snippet;
|
|
19
|
+
closeOnEscape?: boolean;
|
|
20
|
+
closeOnInteractOutside?: boolean;
|
|
21
|
+
lazyMount?: boolean;
|
|
22
|
+
open?: boolean;
|
|
23
|
+
preventScroll?: boolean;
|
|
24
|
+
trapFocus?: boolean;
|
|
25
|
+
unmountOnExit?: boolean;
|
|
26
|
+
} = $props();
|
|
27
|
+
|
|
28
|
+
let hasOpened = $state(open);
|
|
29
|
+
let lastOpen = open;
|
|
30
|
+
let restoreFocusElement: HTMLElement | null = null;
|
|
31
|
+
|
|
32
|
+
const shouldRender = $derived(
|
|
33
|
+
open || (!unmountOnExit && (!lazyMount || hasOpened))
|
|
34
|
+
);
|
|
35
|
+
const contentId = `c15t-dialog-content-${componentId}`;
|
|
36
|
+
const titleId = `c15t-dialog-title-${componentId}`;
|
|
37
|
+
const descriptionId = `c15t-dialog-description-${componentId}`;
|
|
38
|
+
|
|
39
|
+
const setOpen = function setOpen(nextOpen: boolean) {
|
|
40
|
+
open = nextOpen;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const requestClose = function requestClose(
|
|
44
|
+
reason: 'backdrop' | 'close-trigger' | 'escape'
|
|
45
|
+
) {
|
|
46
|
+
if (reason === 'escape' && !closeOnEscape) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (reason === 'backdrop' && !closeOnInteractOutside) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
setOpen(false);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
$effect(() => {
|
|
58
|
+
if (open) {
|
|
59
|
+
hasOpened = true;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
$effect(() => {
|
|
64
|
+
if (typeof document === 'undefined') {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
if (open && !lastOpen) {
|
|
69
|
+
restoreFocusElement = document.activeElement as HTMLElement | null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (!open && lastOpen) {
|
|
73
|
+
if (
|
|
74
|
+
restoreFocusElement &&
|
|
75
|
+
restoreFocusElement !== document.body &&
|
|
76
|
+
restoreFocusElement !== document.documentElement
|
|
77
|
+
) {
|
|
78
|
+
restoreFocusElement.focus();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
lastOpen = open;
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
setDialogRootContext({
|
|
86
|
+
get closeOnEscape() {
|
|
87
|
+
return closeOnEscape;
|
|
88
|
+
},
|
|
89
|
+
get closeOnInteractOutside() {
|
|
90
|
+
return closeOnInteractOutside;
|
|
91
|
+
},
|
|
92
|
+
get contentId() {
|
|
93
|
+
return contentId;
|
|
94
|
+
},
|
|
95
|
+
get descriptionId() {
|
|
96
|
+
return descriptionId;
|
|
97
|
+
},
|
|
98
|
+
get open() {
|
|
99
|
+
return open;
|
|
100
|
+
},
|
|
101
|
+
get preventScroll() {
|
|
102
|
+
return preventScroll;
|
|
103
|
+
},
|
|
104
|
+
requestClose,
|
|
105
|
+
get shouldRender() {
|
|
106
|
+
return shouldRender;
|
|
107
|
+
},
|
|
108
|
+
get titleId() {
|
|
109
|
+
return titleId;
|
|
110
|
+
},
|
|
111
|
+
get trapFocus() {
|
|
112
|
+
return trapFocus;
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
</script>
|
|
116
|
+
|
|
117
|
+
{@render children?.()}
|