@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.
Files changed (274) hide show
  1. package/AGENTS.md +88 -0
  2. package/README.md +136 -0
  3. package/SKILL.md +14 -0
  4. package/dist/actions/focus-trap.d.ts +8 -0
  5. package/dist/actions/focus-trap.js +23 -0
  6. package/dist/actions/portal.d.ts +8 -0
  7. package/dist/actions/portal.js +39 -0
  8. package/dist/actions/scroll-lock.d.ts +8 -0
  9. package/dist/actions/scroll-lock.js +23 -0
  10. package/dist/components/action-button.svelte +119 -0
  11. package/dist/components/action-button.svelte.d.ts +18 -0
  12. package/dist/components/branding.svelte +139 -0
  13. package/dist/components/branding.svelte.d.ts +13 -0
  14. package/dist/components/consent-dev-tools.svelte +58 -0
  15. package/dist/components/consent-dev-tools.svelte.d.ts +4 -0
  16. package/dist/components/frame.svelte +95 -0
  17. package/dist/components/frame.svelte.d.ts +12 -0
  18. package/dist/components/iab-panel.svelte +542 -0
  19. package/dist/components/iab-panel.svelte.d.ts +16 -0
  20. package/dist/components/iab-prompt.svelte +304 -0
  21. package/dist/components/iab-prompt.svelte.d.ts +14 -0
  22. package/dist/components/iab-purpose-item.svelte +511 -0
  23. package/dist/components/iab-purpose-item.svelte.d.ts +26 -0
  24. package/dist/components/iab-stack-item.svelte +146 -0
  25. package/dist/components/iab-stack-item.svelte.d.ts +19 -0
  26. package/dist/components/iab-vendor-list.svelte +900 -0
  27. package/dist/components/iab-vendor-list.svelte.d.ts +19 -0
  28. package/dist/components/icons/c15-t-icon-only.svelte +27 -0
  29. package/dist/components/icons/c15-t-icon-only.svelte.d.ts +9 -0
  30. package/dist/components/icons/chevron-down-icon.svelte +30 -0
  31. package/dist/components/icons/chevron-down-icon.svelte.d.ts +10 -0
  32. package/dist/components/icons/chevron-right-icon.svelte +36 -0
  33. package/dist/components/icons/chevron-right-icon.svelte.d.ts +12 -0
  34. package/dist/components/icons/close-icon.svelte +40 -0
  35. package/dist/components/icons/close-icon.svelte.d.ts +10 -0
  36. package/dist/components/icons/consent-icon-only.svelte +36 -0
  37. package/dist/components/icons/consent-icon-only.svelte.d.ts +9 -0
  38. package/dist/components/icons/external-link-icon.svelte +30 -0
  39. package/dist/components/icons/external-link-icon.svelte.d.ts +8 -0
  40. package/dist/components/icons/globe-icon.svelte +39 -0
  41. package/dist/components/icons/globe-icon.svelte.d.ts +9 -0
  42. package/dist/components/icons/info-icon.svelte +42 -0
  43. package/dist/components/icons/info-icon.svelte.d.ts +9 -0
  44. package/dist/components/icons/inth-logo.svelte +38 -0
  45. package/dist/components/icons/inth-logo.svelte.d.ts +9 -0
  46. package/dist/components/icons/layers-icon.svelte +25 -0
  47. package/dist/components/icons/layers-icon.svelte.d.ts +8 -0
  48. package/dist/components/icons/legitimate-interest-icon.svelte +29 -0
  49. package/dist/components/icons/legitimate-interest-icon.svelte.d.ts +10 -0
  50. package/dist/components/icons/lock-icon.svelte +31 -0
  51. package/dist/components/icons/lock-icon.svelte.d.ts +8 -0
  52. package/dist/components/icons/search-icon.svelte +33 -0
  53. package/dist/components/icons/search-icon.svelte.d.ts +8 -0
  54. package/dist/components/inline-legal-links.svelte +95 -0
  55. package/dist/components/inline-legal-links.svelte.d.ts +10 -0
  56. package/dist/components/manager-provider.svelte +459 -0
  57. package/dist/components/manager-provider.svelte.d.ts +27 -0
  58. package/dist/components/overlay.svelte +79 -0
  59. package/dist/components/overlay.svelte.d.ts +7 -0
  60. package/dist/components/panel-link.svelte +33 -0
  61. package/dist/components/panel-link.svelte.d.ts +10 -0
  62. package/dist/components/panel-trigger.svelte +237 -0
  63. package/dist/components/panel-trigger.svelte.d.ts +16 -0
  64. package/dist/components/panel.svelte +258 -0
  65. package/dist/components/panel.svelte.d.ts +22 -0
  66. package/dist/components/policy-actions-renderer.svelte +79 -0
  67. package/dist/components/policy-actions-renderer.svelte.d.ts +19 -0
  68. package/dist/components/preferences.svelte +320 -0
  69. package/dist/components/preferences.svelte.d.ts +8 -0
  70. package/dist/components/prompt.svelte +514 -0
  71. package/dist/components/prompt.svelte.d.ts +43 -0
  72. package/dist/context.svelte.d.ts +125 -0
  73. package/dist/context.svelte.js +354 -0
  74. package/dist/devtools-options.d.ts +7 -0
  75. package/dist/devtools-options.js +1 -0
  76. package/dist/devtools.d.ts +9 -0
  77. package/dist/devtools.js +7 -0
  78. package/dist/headless.d.ts +10 -0
  79. package/dist/headless.js +7 -0
  80. package/dist/iab/styles.css +11 -0
  81. package/dist/iab-loader.d.ts +30 -0
  82. package/dist/iab-loader.js +33 -0
  83. package/dist/iab-translations.d.ts +84 -0
  84. package/dist/iab-translations.js +45 -0
  85. package/dist/iab-types.d.ts +62 -0
  86. package/dist/iab-types.js +43 -0
  87. package/dist/index.d.ts +28 -0
  88. package/dist/index.js +21 -0
  89. package/dist/kit/app.d.ts +35 -0
  90. package/dist/kit/handle.d.ts +34 -0
  91. package/dist/kit/handle.js +87 -0
  92. package/dist/kit/index.d.ts +30 -0
  93. package/dist/kit/index.js +5 -0
  94. package/dist/kit/load-consent.d.ts +57 -0
  95. package/dist/kit/load-consent.js +144 -0
  96. package/dist/kit/routes.d.ts +46 -0
  97. package/dist/kit/routes.js +203 -0
  98. package/dist/kit/types.d.ts +56 -0
  99. package/dist/kit/types.js +1 -0
  100. package/dist/primitives/accordion/accordion-item-content.svelte +35 -0
  101. package/dist/primitives/accordion/accordion-item-content.svelte.d.ts +9 -0
  102. package/dist/primitives/accordion/accordion-item-trigger.svelte +54 -0
  103. package/dist/primitives/accordion/accordion-item-trigger.svelte.d.ts +10 -0
  104. package/dist/primitives/accordion/accordion-item.svelte +61 -0
  105. package/dist/primitives/accordion/accordion-item.svelte.d.ts +11 -0
  106. package/dist/primitives/accordion/accordion-root.svelte +61 -0
  107. package/dist/primitives/accordion/accordion-root.svelte.d.ts +13 -0
  108. package/dist/primitives/accordion/context.d.ts +18 -0
  109. package/dist/primitives/accordion/context.js +23 -0
  110. package/dist/primitives/accordion/index.d.ts +29 -0
  111. package/dist/primitives/accordion/index.js +11 -0
  112. package/dist/primitives/collapsible/collapsible-content.svelte +36 -0
  113. package/dist/primitives/collapsible/collapsible-content.svelte.d.ts +9 -0
  114. package/dist/primitives/collapsible/collapsible-indicator.svelte +29 -0
  115. package/dist/primitives/collapsible/collapsible-indicator.svelte.d.ts +9 -0
  116. package/dist/primitives/collapsible/collapsible-root.svelte +70 -0
  117. package/dist/primitives/collapsible/collapsible-root.svelte.d.ts +11 -0
  118. package/dist/primitives/collapsible/collapsible-trigger.svelte +52 -0
  119. package/dist/primitives/collapsible/collapsible-trigger.svelte.d.ts +10 -0
  120. package/dist/primitives/collapsible/context.d.ts +10 -0
  121. package/dist/primitives/collapsible/context.js +12 -0
  122. package/dist/primitives/collapsible/index.d.ts +26 -0
  123. package/dist/primitives/collapsible/index.js +11 -0
  124. package/dist/primitives/dialog/context.d.ts +14 -0
  125. package/dist/primitives/dialog/context.js +12 -0
  126. package/dist/primitives/dialog/dialog-backdrop.svelte +39 -0
  127. package/dist/primitives/dialog/dialog-backdrop.svelte.d.ts +7 -0
  128. package/dist/primitives/dialog/dialog-close-trigger.svelte +48 -0
  129. package/dist/primitives/dialog/dialog-close-trigger.svelte.d.ts +11 -0
  130. package/dist/primitives/dialog/dialog-content.svelte +81 -0
  131. package/dist/primitives/dialog/dialog-content.svelte.d.ts +9 -0
  132. package/dist/primitives/dialog/dialog-description.svelte +28 -0
  133. package/dist/primitives/dialog/dialog-description.svelte.d.ts +9 -0
  134. package/dist/primitives/dialog/dialog-positioner.svelte +33 -0
  135. package/dist/primitives/dialog/dialog-positioner.svelte.d.ts +9 -0
  136. package/dist/primitives/dialog/dialog-root.svelte +117 -0
  137. package/dist/primitives/dialog/dialog-root.svelte.d.ts +14 -0
  138. package/dist/primitives/dialog/dialog-title.svelte +28 -0
  139. package/dist/primitives/dialog/dialog-title.svelte.d.ts +9 -0
  140. package/dist/primitives/dialog/index.d.ts +50 -0
  141. package/dist/primitives/dialog/index.js +19 -0
  142. package/dist/primitives/index.d.ts +7 -0
  143. package/dist/primitives/index.js +7 -0
  144. package/dist/primitives/portal/index.d.ts +4 -0
  145. package/dist/primitives/portal/index.js +2 -0
  146. package/dist/primitives/portal/portal.svelte +23 -0
  147. package/dist/primitives/portal/portal.svelte.d.ts +9 -0
  148. package/dist/primitives/preference-item/context.d.ts +11 -0
  149. package/dist/primitives/preference-item/context.js +12 -0
  150. package/dist/primitives/preference-item/index.d.ts +54 -0
  151. package/dist/primitives/preference-item/index.js +21 -0
  152. package/dist/primitives/preference-item/preference-item-auxiliary.svelte +33 -0
  153. package/dist/primitives/preference-item/preference-item-auxiliary.svelte.d.ts +9 -0
  154. package/dist/primitives/preference-item/preference-item-content.svelte +68 -0
  155. package/dist/primitives/preference-item/preference-item-content.svelte.d.ts +14 -0
  156. package/dist/primitives/preference-item/preference-item-control.svelte +33 -0
  157. package/dist/primitives/preference-item/preference-item-control.svelte.d.ts +9 -0
  158. package/dist/primitives/preference-item/preference-item-header.svelte +33 -0
  159. package/dist/primitives/preference-item/preference-item-header.svelte.d.ts +9 -0
  160. package/dist/primitives/preference-item/preference-item-leading.svelte +33 -0
  161. package/dist/primitives/preference-item/preference-item-leading.svelte.d.ts +9 -0
  162. package/dist/primitives/preference-item/preference-item-meta.svelte +33 -0
  163. package/dist/primitives/preference-item/preference-item-meta.svelte.d.ts +9 -0
  164. package/dist/primitives/preference-item/preference-item-root.svelte +82 -0
  165. package/dist/primitives/preference-item/preference-item-root.svelte.d.ts +12 -0
  166. package/dist/primitives/preference-item/preference-item-title.svelte +33 -0
  167. package/dist/primitives/preference-item/preference-item-title.svelte.d.ts +9 -0
  168. package/dist/primitives/preference-item/preference-item-trigger.svelte +62 -0
  169. package/dist/primitives/preference-item/preference-item-trigger.svelte.d.ts +10 -0
  170. package/dist/primitives/switch/context.d.ts +7 -0
  171. package/dist/primitives/switch/context.js +12 -0
  172. package/dist/primitives/switch/index.d.ts +25 -0
  173. package/dist/primitives/switch/index.js +11 -0
  174. package/dist/primitives/switch/switch-control.svelte +21 -0
  175. package/dist/primitives/switch/switch-control.svelte.d.ts +9 -0
  176. package/dist/primitives/switch/switch-hidden-input.svelte +31 -0
  177. package/dist/primitives/switch/switch-hidden-input.svelte.d.ts +8 -0
  178. package/dist/primitives/switch/switch-root.svelte +86 -0
  179. package/dist/primitives/switch/switch-root.svelte.d.ts +12 -0
  180. package/dist/primitives/switch/switch-thumb.svelte +14 -0
  181. package/dist/primitives/switch/switch-thumb.svelte.d.ts +7 -0
  182. package/dist/primitives/tabs/context.d.ts +11 -0
  183. package/dist/primitives/tabs/context.js +12 -0
  184. package/dist/primitives/tabs/index.d.ts +32 -0
  185. package/dist/primitives/tabs/index.js +11 -0
  186. package/dist/primitives/tabs/tabs-content.svelte +45 -0
  187. package/dist/primitives/tabs/tabs-content.svelte.d.ts +11 -0
  188. package/dist/primitives/tabs/tabs-list.svelte +38 -0
  189. package/dist/primitives/tabs/tabs-list.svelte.d.ts +10 -0
  190. package/dist/primitives/tabs/tabs-root.svelte +67 -0
  191. package/dist/primitives/tabs/tabs-root.svelte.d.ts +14 -0
  192. package/dist/primitives/tabs/tabs-trigger.svelte +108 -0
  193. package/dist/primitives/tabs/tabs-trigger.svelte.d.ts +11 -0
  194. package/dist/server/headers.d.ts +13 -0
  195. package/dist/server/headers.js +37 -0
  196. package/dist/server/index.d.ts +8 -0
  197. package/dist/server/index.js +116 -0
  198. package/dist/server/normalize-url.d.ts +23 -0
  199. package/dist/server/normalize-url.js +46 -0
  200. package/dist/server/types.d.ts +25 -0
  201. package/dist/server/types.js +1 -0
  202. package/dist/styles.css +10 -0
  203. package/dist/transports/offline.d.ts +14 -0
  204. package/dist/transports/offline.js +22 -0
  205. package/dist/types.d.ts +70 -0
  206. package/dist/types.js +1 -0
  207. package/dist/use-banner-visibility.svelte.d.ts +25 -0
  208. package/dist/use-banner-visibility.svelte.js +108 -0
  209. package/dist/utils.d.ts +25 -0
  210. package/dist/utils.js +32 -0
  211. package/dist/version.d.ts +1 -0
  212. package/dist/version.js +2 -0
  213. package/docs/README.md +88 -0
  214. package/docs/assets/v3/brand-bar.png +0 -0
  215. package/docs/assets/v3/brand-card.png +0 -0
  216. package/docs/assets/v3/choice-wall.png +0 -0
  217. package/docs/assets/v3/mobile-card.png +0 -0
  218. package/docs/assets/v3/preferences.png +0 -0
  219. package/docs/customization/overview.md +45 -0
  220. package/docs/customization/recipes.md +79 -0
  221. package/docs/customization/slots.md +55 -0
  222. package/docs/customization/tokens.md +76 -0
  223. package/docs/customization/translations.md +49 -0
  224. package/docs/frameworks/svelte/quickstart.md +133 -0
  225. package/docs/frameworks/sveltekit/quickstart.md +144 -0
  226. package/docs/guides/consent-state.md +60 -0
  227. package/docs/guides/data-fetching.md +163 -0
  228. package/docs/guides/deployment-modes.md +63 -0
  229. package/docs/guides/troubleshooting.md +68 -0
  230. package/docs/guides/verify-consent.md +62 -0
  231. package/docs/integrations/adobe-analytics.md +294 -0
  232. package/docs/integrations/ahrefs-analytics.md +291 -0
  233. package/docs/integrations/amplitude.md +292 -0
  234. package/docs/integrations/building-integrations.md +47 -0
  235. package/docs/integrations/clearbit.md +291 -0
  236. package/docs/integrations/cloudflare-web-analytics.md +292 -0
  237. package/docs/integrations/crisp.md +294 -0
  238. package/docs/integrations/databuddy.md +311 -0
  239. package/docs/integrations/fathom-analytics.md +293 -0
  240. package/docs/integrations/google-maps.md +384 -0
  241. package/docs/integrations/google-tag-manager.md +306 -0
  242. package/docs/integrations/google-tag.md +305 -0
  243. package/docs/integrations/heap.md +292 -0
  244. package/docs/integrations/hightouch.md +293 -0
  245. package/docs/integrations/hotjar.md +292 -0
  246. package/docs/integrations/intercom.md +285 -0
  247. package/docs/integrations/linkedin-insights.md +291 -0
  248. package/docs/integrations/logrocket.md +293 -0
  249. package/docs/integrations/matomo-analytics.md +316 -0
  250. package/docs/integrations/meta-pixel.md +285 -0
  251. package/docs/integrations/microsoft-clarity.md +292 -0
  252. package/docs/integrations/microsoft-uet.md +291 -0
  253. package/docs/integrations/mixpanel-analytics.md +295 -0
  254. package/docs/integrations/openai-pixel.md +441 -0
  255. package/docs/integrations/overview.md +111 -0
  256. package/docs/integrations/pirsch.md +295 -0
  257. package/docs/integrations/plausible-analytics.md +295 -0
  258. package/docs/integrations/posthog.md +397 -0
  259. package/docs/integrations/promptwatch.md +291 -0
  260. package/docs/integrations/reddit-pixel.md +294 -0
  261. package/docs/integrations/rudderstack.md +328 -0
  262. package/docs/integrations/rybbit-analytics.md +296 -0
  263. package/docs/integrations/segment.md +292 -0
  264. package/docs/integrations/snapchat-pixel.md +293 -0
  265. package/docs/integrations/tiktok-pixel.md +291 -0
  266. package/docs/integrations/umami-analytics.md +295 -0
  267. package/docs/integrations/vercel-analytics.md +293 -0
  268. package/docs/integrations/x-pixel.md +291 -0
  269. package/docs/integrations/youtube.md +405 -0
  270. package/docs/upgrade-v3.md +334 -0
  271. package/iab/styles.css +1 -0
  272. package/package.json +153 -0
  273. package/readme.json +36 -0
  274. package/styles.css +1 -0
@@ -0,0 +1,82 @@
1
+ <script lang="ts">
2
+ import {
3
+ getDataDisabled,
4
+ getPreferenceItemState,
5
+ PREFERENCE_ITEM_SLOTS,
6
+ togglePreferenceItemValue,
7
+ } from '@c15t/ui/primitives';
8
+ import { preferenceItemVariants } from '@c15t/ui/styles/primitives';
9
+ import type { Snippet } from 'svelte';
10
+ import type { HTMLAttributes } from 'svelte/elements';
11
+
12
+ import { getThemeContext } from '../../context.svelte';
13
+ import { setPreferenceItemContext } from './context';
14
+
15
+ const componentId = $props.id();
16
+ const theme = getThemeContext();
17
+ const variants = preferenceItemVariants();
18
+
19
+ let {
20
+ children,
21
+ class: className,
22
+ disabled = false,
23
+ noStyle: localNoStyle,
24
+ open = $bindable(false),
25
+ ...restProps
26
+ }: HTMLAttributes<HTMLDivElement> & {
27
+ children?: Snippet;
28
+ class?: string;
29
+ disabled?: boolean;
30
+ noStyle?: boolean;
31
+ open?: boolean;
32
+ } = $props();
33
+
34
+ const noStyle = $derived(localNoStyle ?? theme.noStyle ?? false);
35
+ const rootClassName = $derived(
36
+ noStyle ? className : variants.root({ class: className })
37
+ );
38
+ const dataState = $derived(getPreferenceItemState(open));
39
+ const dataDisabled = $derived(getDataDisabled(disabled));
40
+ const contentId = `c15t-preference-item-content-${componentId}`;
41
+ const triggerId = `c15t-preference-item-trigger-${componentId}`;
42
+
43
+ const setOpen = function setOpen(nextOpen: boolean) {
44
+ open = nextOpen;
45
+ };
46
+
47
+ const toggle = function toggle() {
48
+ if (!disabled) {
49
+ setOpen(togglePreferenceItemValue(open));
50
+ }
51
+ };
52
+
53
+ setPreferenceItemContext({
54
+ get contentId() {
55
+ return contentId;
56
+ },
57
+ get disabled() {
58
+ return disabled;
59
+ },
60
+ get noStyle() {
61
+ return noStyle;
62
+ },
63
+ get open() {
64
+ return open;
65
+ },
66
+ setOpen,
67
+ toggle,
68
+ get triggerId() {
69
+ return triggerId;
70
+ },
71
+ });
72
+ </script>
73
+
74
+ <div
75
+ class={rootClassName}
76
+ data-slot={PREFERENCE_ITEM_SLOTS.root}
77
+ data-state={dataState}
78
+ data-disabled={dataDisabled}
79
+ {...restProps}
80
+ >
81
+ {@render children?.()}
82
+ </div>
@@ -0,0 +1,12 @@
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
+ noStyle?: boolean;
8
+ open?: boolean;
9
+ };
10
+ declare const PreferenceItemRoot: import("svelte").Component<$$ComponentProps, {}, "open">;
11
+ type PreferenceItemRoot = ReturnType<typeof PreferenceItemRoot>;
12
+ export default PreferenceItemRoot;
@@ -0,0 +1,33 @@
1
+ <script lang="ts">
2
+ import { PREFERENCE_ITEM_SLOTS } from '@c15t/ui/primitives';
3
+ import { preferenceItemVariants } from '@c15t/ui/styles/primitives';
4
+ import type { Snippet } from 'svelte';
5
+ import type { HTMLAttributes } from 'svelte/elements';
6
+
7
+ import { getPreferenceItemContext } from './context';
8
+
9
+ const context = getPreferenceItemContext();
10
+ const variants = preferenceItemVariants();
11
+
12
+ let {
13
+ children,
14
+ class: localClassName,
15
+ ...restProps
16
+ }: HTMLAttributes<HTMLHeadingElement> & {
17
+ children?: Snippet;
18
+ class?: string;
19
+ } = $props();
20
+
21
+ const noStyle = $derived(context.noStyle);
22
+ const className = $derived.by(() =>
23
+ noStyle ? localClassName : variants.title({ class: localClassName })
24
+ );
25
+ </script>
26
+
27
+ <h3
28
+ class={className}
29
+ data-slot={PREFERENCE_ITEM_SLOTS.title}
30
+ {...restProps}
31
+ >
32
+ {@render children?.()}
33
+ </h3>
@@ -0,0 +1,9 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ type $$ComponentProps = HTMLAttributes<HTMLHeadingElement> & {
4
+ children?: Snippet;
5
+ class?: string;
6
+ };
7
+ declare const PreferenceItemTitle: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type PreferenceItemTitle = ReturnType<typeof PreferenceItemTitle>;
9
+ export default PreferenceItemTitle;
@@ -0,0 +1,62 @@
1
+ <script lang="ts">
2
+ import {
3
+ getDataDisabled,
4
+ getPreferenceItemState,
5
+ PREFERENCE_ITEM_SLOTS,
6
+ } from '@c15t/ui/primitives';
7
+ import { preferenceItemVariants } from '@c15t/ui/styles/primitives';
8
+ import type { Snippet } from 'svelte';
9
+ import type { HTMLAttributes } from 'svelte/elements';
10
+
11
+ import { getPreferenceItemContext } from './context';
12
+
13
+ const context = getPreferenceItemContext();
14
+ const variants = preferenceItemVariants();
15
+
16
+ let {
17
+ children,
18
+ class: localClassName,
19
+ onclick,
20
+ type = 'button',
21
+ ...restProps
22
+ }: HTMLAttributes<HTMLButtonElement> & {
23
+ children?: Snippet;
24
+ class?: string;
25
+ type?: 'button' | 'submit' | 'reset';
26
+ } = $props();
27
+
28
+ const handleClick = function handleClick(
29
+ event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement }
30
+ ) {
31
+ context.toggle();
32
+ onclick?.(event);
33
+ };
34
+
35
+ const open = $derived(context.open);
36
+ const disabled = $derived(context.disabled);
37
+ const noStyle = $derived(context.noStyle);
38
+ const triggerId = $derived(context.triggerId);
39
+ const contentId = $derived(context.contentId);
40
+ const className = $derived.by(() =>
41
+ noStyle ? localClassName : variants.trigger({ class: localClassName })
42
+ );
43
+ const dataState = $derived(getPreferenceItemState(open));
44
+ const dataDisabled = $derived(getDataDisabled(disabled));
45
+ </script>
46
+
47
+ <button
48
+ {type}
49
+ id={triggerId}
50
+ aria-controls={contentId}
51
+ aria-disabled={disabled || undefined}
52
+ aria-expanded={open}
53
+ class={className}
54
+ data-slot={PREFERENCE_ITEM_SLOTS.trigger}
55
+ data-state={dataState}
56
+ data-disabled={dataDisabled}
57
+ {disabled}
58
+ {...restProps}
59
+ onclick={handleClick}
60
+ >
61
+ {@render children?.()}
62
+ </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 PreferenceItemTrigger: import("svelte").Component<$$ComponentProps, {}, "">;
9
+ type PreferenceItemTrigger = ReturnType<typeof PreferenceItemTrigger>;
10
+ export default PreferenceItemTrigger;
@@ -0,0 +1,7 @@
1
+ export interface SwitchRootContextValue {
2
+ readonly checked: boolean;
3
+ readonly disabled: boolean;
4
+ toggle: () => void;
5
+ }
6
+ export declare const setSwitchRootContext: (value: SwitchRootContextValue) => void;
7
+ export declare const getSwitchRootContext: () => SwitchRootContextValue;
@@ -0,0 +1,12 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ const SWITCH_ROOT_CONTEXT_KEY = Symbol('c15t-svelte-switch-root');
3
+ export const setSwitchRootContext = function setSwitchRootContext(value) {
4
+ setContext(SWITCH_ROOT_CONTEXT_KEY, value);
5
+ };
6
+ export const getSwitchRootContext = function getSwitchRootContext() {
7
+ const context = getContext(SWITCH_ROOT_CONTEXT_KEY);
8
+ if (!context) {
9
+ throw new Error('Switch primitives must be used within Switch.Root');
10
+ }
11
+ return context;
12
+ };
@@ -0,0 +1,25 @@
1
+ import Control from './switch-control.svelte';
2
+ import HiddenInput from './switch-hidden-input.svelte';
3
+ import Root from './switch-root.svelte';
4
+ import Thumb from './switch-thumb.svelte';
5
+ export declare const Switch: {
6
+ Control: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLSpanElement> & {
7
+ children?: import("svelte").Snippet;
8
+ class?: string;
9
+ }, {}, "">;
10
+ HiddenInput: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLInputElement> & {
11
+ name?: string;
12
+ value?: string;
13
+ }, {}, "">;
14
+ Root: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLButtonElement> & {
15
+ children?: import("svelte").Snippet;
16
+ class?: string;
17
+ checked?: boolean;
18
+ disabled?: boolean;
19
+ type?: "button" | "submit" | "reset";
20
+ }, {}, "checked">;
21
+ Thumb: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLSpanElement> & {
22
+ class?: string;
23
+ }, {}, "">;
24
+ };
25
+ export { Control, HiddenInput, Root, Thumb };
@@ -0,0 +1,11 @@
1
+ import Control from './switch-control.svelte';
2
+ import HiddenInput from './switch-hidden-input.svelte';
3
+ import Root from './switch-root.svelte';
4
+ import Thumb from './switch-thumb.svelte';
5
+ export const Switch = {
6
+ Control,
7
+ HiddenInput,
8
+ Root,
9
+ Thumb,
10
+ };
11
+ export { Control, HiddenInput, Root, Thumb };
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+
5
+ let {
6
+ children,
7
+ class: className,
8
+ ...restProps
9
+ }: HTMLAttributes<HTMLSpanElement> & {
10
+ children?: Snippet;
11
+ class?: string;
12
+ } = $props();
13
+ </script>
14
+
15
+ <span
16
+ class={className}
17
+ data-slot="switch-track"
18
+ {...restProps}
19
+ >
20
+ {@render children?.()}
21
+ </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 SwitchControl: import("svelte").Component<$$ComponentProps, {}, "">;
8
+ type SwitchControl = ReturnType<typeof SwitchControl>;
9
+ export default SwitchControl;
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+
4
+ import { getSwitchRootContext } from './context';
5
+
6
+ const root = getSwitchRootContext();
7
+
8
+ const checked = $derived(root.checked);
9
+ const disabled = $derived(root.disabled);
10
+
11
+ let {
12
+ name,
13
+ value = 'on',
14
+ ...restProps
15
+ }: HTMLAttributes<HTMLInputElement> & {
16
+ name?: string;
17
+ value?: string;
18
+ } = $props();
19
+ </script>
20
+
21
+ <input
22
+ type="checkbox"
23
+ {name}
24
+ {value}
25
+ {checked}
26
+ {disabled}
27
+ tabindex={-1}
28
+ aria-hidden="true"
29
+ style="position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;"
30
+ {...restProps}
31
+ />
@@ -0,0 +1,8 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ type $$ComponentProps = HTMLAttributes<HTMLInputElement> & {
3
+ name?: string;
4
+ value?: string;
5
+ };
6
+ declare const SwitchHiddenInput: import("svelte").Component<$$ComponentProps, {}, "">;
7
+ type SwitchHiddenInput = ReturnType<typeof SwitchHiddenInput>;
8
+ export default SwitchHiddenInput;
@@ -0,0 +1,86 @@
1
+ <script lang="ts">
2
+ import {
3
+ getDataDisabled,
4
+ getSwitchState,
5
+ toggleSwitchValue,
6
+ } from '@c15t/ui/primitives';
7
+ import type { Snippet } from 'svelte';
8
+ import type { HTMLAttributes } from 'svelte/elements';
9
+
10
+ import { setSwitchRootContext } from './context';
11
+
12
+ let {
13
+ children,
14
+ class: className,
15
+ checked = $bindable(false),
16
+ disabled = false,
17
+ onclick,
18
+ onkeydown,
19
+ type = 'button',
20
+ ...restProps
21
+ }: HTMLAttributes<HTMLButtonElement> & {
22
+ children?: Snippet;
23
+ class?: string;
24
+ checked?: boolean;
25
+ disabled?: boolean;
26
+ type?: 'button' | 'submit' | 'reset';
27
+ } = $props();
28
+
29
+ const dataState = $derived(getSwitchState(checked));
30
+ const dataDisabled = $derived(getDataDisabled(disabled));
31
+
32
+ const setChecked = function setChecked(nextChecked: boolean) {
33
+ if (disabled) {
34
+ return;
35
+ }
36
+
37
+ checked = nextChecked;
38
+ };
39
+
40
+ const toggle = function toggle() {
41
+ setChecked(toggleSwitchValue(checked));
42
+ };
43
+
44
+ const handleClick = function handleClick(
45
+ event: MouseEvent & { currentTarget: EventTarget & HTMLButtonElement }
46
+ ) {
47
+ toggle();
48
+ onclick?.(event);
49
+ };
50
+
51
+ const handleKeyDown = function handleKeyDown(
52
+ event: KeyboardEvent & { currentTarget: EventTarget & HTMLButtonElement }
53
+ ) {
54
+ if (event.key === 'Enter') {
55
+ event.preventDefault();
56
+ toggle();
57
+ }
58
+ onkeydown?.(event);
59
+ };
60
+
61
+ setSwitchRootContext({
62
+ get checked() {
63
+ return checked;
64
+ },
65
+ get disabled() {
66
+ return disabled;
67
+ },
68
+ toggle,
69
+ });
70
+ </script>
71
+
72
+ <button
73
+ {type}
74
+ role="switch"
75
+ aria-checked={checked}
76
+ class={className}
77
+ data-slot="switch"
78
+ data-state={dataState}
79
+ data-disabled={dataDisabled}
80
+ {disabled}
81
+ {...restProps}
82
+ onclick={handleClick}
83
+ onkeydown={handleKeyDown}
84
+ >
85
+ {@render children?.()}
86
+ </button>
@@ -0,0 +1,12 @@
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
+ checked?: boolean;
7
+ disabled?: boolean;
8
+ type?: 'button' | 'submit' | 'reset';
9
+ };
10
+ declare const SwitchRoot: import("svelte").Component<$$ComponentProps, {}, "checked">;
11
+ type SwitchRoot = ReturnType<typeof SwitchRoot>;
12
+ export default SwitchRoot;
@@ -0,0 +1,14 @@
1
+ <script lang="ts">
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+
4
+ let {
5
+ class: className,
6
+ ...restProps
7
+ }: HTMLAttributes<HTMLSpanElement> & { class?: string } = $props();
8
+ </script>
9
+
10
+ <span
11
+ class={className}
12
+ data-slot="switch-thumb"
13
+ {...restProps}
14
+ ></span>
@@ -0,0 +1,7 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ type $$ComponentProps = HTMLAttributes<HTMLSpanElement> & {
3
+ class?: string;
4
+ };
5
+ declare const SwitchThumb: import("svelte").Component<$$ComponentProps, {}, "">;
6
+ type SwitchThumb = ReturnType<typeof SwitchThumb>;
7
+ export default SwitchThumb;
@@ -0,0 +1,11 @@
1
+ import type { TabsOrientation } from '@c15t/ui/primitives';
2
+ export interface TabsRootContextValue {
3
+ readonly baseId: string;
4
+ readonly disabled: boolean;
5
+ readonly loop: boolean;
6
+ readonly orientation: TabsOrientation;
7
+ readonly value: string | null;
8
+ setValue: (value: string) => void;
9
+ }
10
+ export declare const setTabsRootContext: (value: TabsRootContextValue) => void;
11
+ export declare const getTabsRootContext: () => TabsRootContextValue;
@@ -0,0 +1,12 @@
1
+ import { getContext, setContext } from 'svelte';
2
+ const TABS_ROOT_CONTEXT_KEY = Symbol('c15t-svelte-tabs-root');
3
+ export const setTabsRootContext = function setTabsRootContext(value) {
4
+ setContext(TABS_ROOT_CONTEXT_KEY, value);
5
+ };
6
+ export const getTabsRootContext = function getTabsRootContext() {
7
+ const context = getContext(TABS_ROOT_CONTEXT_KEY);
8
+ if (!context) {
9
+ throw new Error('Tabs primitives must be used within Tabs.Root');
10
+ }
11
+ return context;
12
+ };
@@ -0,0 +1,32 @@
1
+ import Content from './tabs-content.svelte';
2
+ import List from './tabs-list.svelte';
3
+ import Root from './tabs-root.svelte';
4
+ import Trigger from './tabs-trigger.svelte';
5
+ export declare const Tabs: {
6
+ Content: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLDivElement> & {
7
+ children?: import("svelte").Snippet;
8
+ class?: string;
9
+ forceMount?: boolean;
10
+ value: string;
11
+ }, {}, "">;
12
+ List: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLDivElement> & {
13
+ children?: import("svelte").Snippet;
14
+ class?: string;
15
+ orientation?: "horizontal" | "vertical";
16
+ }, {}, "">;
17
+ Root: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLDivElement> & {
18
+ children?: import("svelte").Snippet;
19
+ class?: string;
20
+ disabled?: boolean;
21
+ loop?: boolean;
22
+ orientation?: import("@c15t/ui/primitives").TabsOrientation;
23
+ value?: string | null;
24
+ }, {}, "value">;
25
+ Trigger: import("svelte").Component<import("svelte/elements").HTMLAttributes<HTMLButtonElement> & {
26
+ children?: import("svelte").Snippet;
27
+ class?: string;
28
+ type?: "button" | "submit" | "reset";
29
+ value: string;
30
+ }, {}, "">;
31
+ };
32
+ export { Content, List, Root, Trigger };
@@ -0,0 +1,11 @@
1
+ import Content from './tabs-content.svelte';
2
+ import List from './tabs-list.svelte';
3
+ import Root from './tabs-root.svelte';
4
+ import Trigger from './tabs-trigger.svelte';
5
+ export const Tabs = {
6
+ Content,
7
+ List,
8
+ Root,
9
+ Trigger,
10
+ };
11
+ export { Content, List, Root, Trigger };
@@ -0,0 +1,45 @@
1
+ <script lang="ts">
2
+ import { getTabPanelState } from '@c15t/ui/primitives';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLAttributes } from 'svelte/elements';
5
+
6
+ import { getTabsRootContext } from './context';
7
+
8
+ const root = getTabsRootContext();
9
+
10
+ let {
11
+ children,
12
+ class: className,
13
+ forceMount = false,
14
+ value,
15
+ ...restProps
16
+ }: HTMLAttributes<HTMLDivElement> & {
17
+ children?: Snippet;
18
+ class?: string;
19
+ forceMount?: boolean;
20
+ value: string;
21
+ } = $props();
22
+
23
+ const baseId = $derived(root.baseId);
24
+ const selectedValue = $derived(root.value);
25
+ const isSelected = $derived(selectedValue === value);
26
+ const dataState = $derived(getTabPanelState(isSelected));
27
+ const contentId = $derived(`${baseId}-content-${value}`);
28
+ const triggerId = $derived(`${baseId}-trigger-${value}`);
29
+ </script>
30
+
31
+ {#if forceMount || isSelected}
32
+ <div
33
+ id={contentId}
34
+ role="tabpanel"
35
+ tabindex={0}
36
+ hidden={!isSelected}
37
+ aria-labelledby={triggerId}
38
+ class={className}
39
+ data-slot="tabs-content"
40
+ data-state={dataState}
41
+ {...restProps}
42
+ >
43
+ {@render children?.()}
44
+ </div>
45
+ {/if}
@@ -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
+ forceMount?: boolean;
7
+ value: string;
8
+ };
9
+ declare const TabsContent: import("svelte").Component<$$ComponentProps, {}, "">;
10
+ type TabsContent = ReturnType<typeof TabsContent>;
11
+ export default TabsContent;
@@ -0,0 +1,38 @@
1
+ <script lang="ts">
2
+ import { getDataDisabled } from '@c15t/ui/primitives';
3
+ import type { Snippet } from 'svelte';
4
+ import type { HTMLAttributes } from 'svelte/elements';
5
+
6
+ import { getTabsRootContext } from './context';
7
+
8
+ const root = getTabsRootContext();
9
+
10
+ const disabled = $derived(root.disabled);
11
+ const rootOrientation = $derived(root.orientation);
12
+ const dataDisabled = $derived(getDataDisabled(disabled));
13
+
14
+ let {
15
+ children,
16
+ class: className,
17
+ orientation: orientationProp,
18
+ ...restProps
19
+ }: HTMLAttributes<HTMLDivElement> & {
20
+ children?: Snippet;
21
+ class?: string;
22
+ orientation?: 'horizontal' | 'vertical';
23
+ } = $props();
24
+
25
+ const orientation = $derived(orientationProp ?? rootOrientation);
26
+ </script>
27
+
28
+ <div
29
+ role="tablist"
30
+ aria-orientation={orientation}
31
+ class={className}
32
+ data-slot="tabs-list"
33
+ data-orientation={orientation}
34
+ data-disabled={dataDisabled}
35
+ {...restProps}
36
+ >
37
+ {@render children?.()}
38
+ </div>
@@ -0,0 +1,10 @@
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
+ orientation?: 'horizontal' | 'vertical';
7
+ };
8
+ declare const TabsList: import("svelte").Component<$$ComponentProps, {}, "">;
9
+ type TabsList = ReturnType<typeof TabsList>;
10
+ export default TabsList;