@bannerstudio/svelte 0.1.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/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@bannerstudio/svelte",
3
+ "version": "0.1.0",
4
+ "description": "Svelte component for embedding Banner Studio banners.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "sideEffects": false,
8
+ "files": [
9
+ "src"
10
+ ],
11
+ "svelte": "./src/index.js",
12
+ "types": "./src/index.d.ts",
13
+ "exports": {
14
+ ".": {
15
+ "types": "./src/index.d.ts",
16
+ "svelte": "./src/index.js",
17
+ "default": "./src/index.js"
18
+ },
19
+ "./BannerStudioEmbed.svelte": {
20
+ "types": "./src/BannerStudioEmbed.svelte.d.ts",
21
+ "svelte": "./src/BannerStudioEmbed.svelte"
22
+ }
23
+ },
24
+ "dependencies": {
25
+ "@bannerstudio/core": "^0.1.0"
26
+ },
27
+ "peerDependencies": {
28
+ "svelte": ">=4.0.0"
29
+ },
30
+ "publishConfig": {
31
+ "access": "public"
32
+ }
33
+ }
@@ -0,0 +1,53 @@
1
+ <script>
2
+ import { onMount } from 'svelte'
3
+ import { buildEmbedUrl, attachBannerMessages } from '@bannerstudio/core'
4
+
5
+ /** Banner Studio API base, e.g. https://api.bannerstud.io */
6
+ export let apiBase
7
+ /** Affiliate code. */
8
+ export let affiliate
9
+ /** Embed type (default 'top'). */
10
+ export let type = 'top'
11
+ /** Optional placement code. */
12
+ export let placement = ''
13
+ /** Optional audience segment for the current visitor (e.g. 'guest', 'pro'). */
14
+ export let segment = ''
15
+ /** Reserved height in px — the bounding box that prevents CLS (default 90). */
16
+ export let height = 90
17
+ /**
18
+ * Optional server-fetched meta (`fetchBannerMeta`). When provided, the box is
19
+ * reserved only if `active` (zero CLS, no gap when empty). When omitted, the
20
+ * component always renders and reserves `height` (client mode).
21
+ */
22
+ export let meta = undefined
23
+
24
+ let iframeEl
25
+ let currentHeight = meta?.height ?? height
26
+ let closed = false
27
+
28
+ $: src = buildEmbedUrl({ apiBase, affiliate, type, placement: placement || undefined, segment: segment || undefined })
29
+ $: active = meta === undefined || meta?.active === true
30
+
31
+ onMount(() => {
32
+ if (!iframeEl) return
33
+ return attachBannerMessages(iframeEl, {
34
+ onHeight: (h) => { currentHeight = h > 0 ? h : 0 },
35
+ onEmpty: () => { currentHeight = 0 },
36
+ onClose: () => { closed = true },
37
+ })
38
+ })
39
+ </script>
40
+
41
+ {#if !closed && active}
42
+ <div style="height:{currentHeight}px;overflow:hidden">
43
+ <iframe
44
+ bind:this={iframeEl}
45
+ {src}
46
+ title="Banner"
47
+ scrolling="no"
48
+ frameborder="0"
49
+ allowtransparency="true"
50
+ style="width:100%;height:100%;border:0;display:block"
51
+ ></iframe>
52
+ </div>
53
+ {/if}
@@ -0,0 +1,21 @@
1
+ import { SvelteComponent } from 'svelte'
2
+ import type { BannerType, BannerMeta } from '@bannerstudio/core'
3
+
4
+ export interface BannerStudioEmbedProps {
5
+ /** Banner Studio API base, e.g. https://api.bannerstud.io */
6
+ apiBase: string
7
+ /** Affiliate code. */
8
+ affiliate: string
9
+ /** Embed type (default 'top'). */
10
+ type?: BannerType
11
+ /** Optional placement code. */
12
+ placement?: string
13
+ /** Optional audience segment for the current visitor (e.g. 'guest', 'pro'). */
14
+ segment?: string
15
+ /** Reserved height in px — the bounding box that prevents CLS (default 90). */
16
+ height?: number
17
+ /** Optional server-fetched meta (`fetchBannerMeta`) to gate rendering. */
18
+ meta?: BannerMeta | null
19
+ }
20
+
21
+ export default class BannerStudioEmbed extends SvelteComponent<BannerStudioEmbedProps> {}
package/src/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { default as BannerStudioEmbed } from './BannerStudioEmbed.svelte'
2
+ export type { BannerStudioEmbedProps } from './BannerStudioEmbed.svelte'
package/src/index.js ADDED
@@ -0,0 +1 @@
1
+ export { default as BannerStudioEmbed } from './BannerStudioEmbed.svelte'