@adhese/sdk-devtools 0.6.5 → 0.7.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.
- package/README.md +50 -43
- package/dist/{devtools-B63USM72.js → devtools-HKRrPsjZ.js} +6 -7
- package/dist/devtools-HKRrPsjZ.js.map +1 -0
- package/dist/{devtools-BULOIqZ6.cjs → devtools-aidsR1fI.cjs} +5 -6
- package/dist/devtools-aidsR1fI.cjs.map +1 -0
- package/dist/index.cjs +30 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -703
- package/dist/index.js +30 -10
- package/dist/index.js.map +1 -1
- package/package.json +9 -8
- package/dist/devtools-B63USM72.js.map +0 -1
- package/dist/devtools-BULOIqZ6.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -1,57 +1,64 @@
|
|
|
1
|
-
# Adhese SDK
|
|
1
|
+
# Adhese SDK Devtools
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
everything from the root of the project.
|
|
3
|
+
The SDK offers a inline application to debug the Adhese instance. The Devtools is available whenever the SDK is in
|
|
4
|
+
`debug` mode.
|
|
6
5
|
|
|
7
|
-
##
|
|
8
|
-
|
|
6
|
+
## Installation
|
|
7
|
+
The devtools are not included in the SDK by default. To use the Devtools, you need to install the `@adhese/sdk-devtools`
|
|
8
|
+
|
|
9
|
+
::: code-group
|
|
10
|
+
```bash [npm]
|
|
11
|
+
npm install @adhese/sdk-devtools
|
|
9
12
|
```
|
|
10
|
-
|
|
13
|
+
```bash [pnpm]
|
|
14
|
+
pnpm add @adhese/sdk-devtools
|
|
11
15
|
```
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
npm run dev
|
|
16
|
+
```bash [yarn]
|
|
17
|
+
yarn add @adhese/sdk-devtools
|
|
18
|
+
```
|
|
19
|
+
```bash [bun]
|
|
20
|
+
bun add @adhese/sdk-devtools
|
|
19
21
|
```
|
|
22
|
+
:::
|
|
20
23
|
|
|
21
|
-
|
|
22
|
-
packages will start the test runner in watch mode and the docs app will start a dev server. For example, the
|
|
23
|
-
`apps/example` will start a test server on `localhost:5173`.
|
|
24
|
+
Add the `createDevtools` function to your Adhese config plugins field:
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
```js
|
|
27
|
+
import { createDevtools } from '@adhese/sdk-devtools';
|
|
28
|
+
import { createAdhese } from '@adhese/sdk';
|
|
29
|
+
|
|
30
|
+
const adhese = createAdhese({
|
|
31
|
+
account: 'your-account-id',
|
|
32
|
+
plugins: [createDevtools],
|
|
33
|
+
});
|
|
29
34
|
```
|
|
30
35
|
|
|
31
|
-
|
|
32
|
-
projects use [Vitest](https://vitest.dev/) as the test runner.
|
|
36
|
+
## Usage
|
|
33
37
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
npm run build
|
|
38
|
-
```
|
|
38
|
+
Enable `debug` mode by setting the `debug` property to `true` in the `createAdhese` function or by adding
|
|
39
|
+
`?adhese_debug=true` to the URL.
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
Whenever the `debug` mode is enabled, the Devtools is available by clicking the button `Open Adhese Devtools` in the
|
|
42
|
+
bottom right corner of the page.
|
|
41
43
|
|
|
42
|
-
###
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
### Inspect slots
|
|
45
|
+
The Devtools allows you to inspect the added slots on the page. It shows the following information:
|
|
46
|
+
- Slot name
|
|
47
|
+
- Format
|
|
48
|
+
- Location
|
|
49
|
+
- Render status
|
|
50
|
+
- Campaign ID
|
|
51
|
+
- Booking ID
|
|
52
|
+
- Creative ID
|
|
53
|
+
- Tracking ID
|
|
54
|
+
- Creative type
|
|
55
|
+
- Viewability tracked
|
|
56
|
+
- Impression tracked
|
|
57
|
+
- Element
|
|
58
|
+
- Slot parameters - if available
|
|
47
59
|
|
|
48
|
-
|
|
60
|
+
### Logs
|
|
61
|
+
The Devtools logs all messages from the SDK. These logs are also available in the browser console.
|
|
49
62
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
- Do I need this dependency in all packages?
|
|
53
|
-
- If yes, install it in the root of the project using `npm install <package>`.
|
|
54
|
-
- If no, install it in the package that needs it using `npm install <package> -w <package-name>`.
|
|
55
|
-
- Is it a dev dependency?
|
|
56
|
-
- If no, make sure to separately install into the `packages/sdk/package.json` to make sure that the dependency is not
|
|
57
|
-
included in the bundle as NPM will handle the dependency.
|
|
63
|
+
### Parameters
|
|
64
|
+
The parameters tab shows all the global parameters set on the Adhese instance.
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment as Fragment$1 } from "react/jsx-runtime";
|
|
2
2
|
import { createRoot } from "react-dom/client";
|
|
3
|
-
import { forwardRef, useState, useEffect, useMemo, Fragment, useCallback, useId, useRef } from "react";
|
|
3
|
+
import { forwardRef, useState, useEffect, useMemo, Fragment, useCallback, useId, useRef, StrictMode } from "react";
|
|
4
4
|
import { createPortal } from "react-dom";
|
|
5
|
-
import upperFirst from "lodash/upperFirst";
|
|
6
5
|
import { clsx } from "clsx";
|
|
7
6
|
import { twMerge } from "tailwind-merge";
|
|
8
7
|
import { cva } from "class-variance-authority";
|
|
@@ -286,7 +285,7 @@ function SlotsTable({ adheseContext }) {
|
|
|
286
285
|
var _a2;
|
|
287
286
|
(_a2 = adheseContext.events) == null ? void 0 : _a2.changeSlots.removeListener(onSlotsChange);
|
|
288
287
|
};
|
|
289
|
-
}, []);
|
|
288
|
+
}, [adheseContext]);
|
|
290
289
|
const formattedSlots = useMemo(() => slots.map((slot) => {
|
|
291
290
|
const ad = slot.ad.value;
|
|
292
291
|
const iframe = slot.getElement();
|
|
@@ -354,7 +353,7 @@ function SlotsTable({ adheseContext }) {
|
|
|
354
353
|
/* @__PURE__ */ jsx("del", { className: "text-red-300 italic", children: format }),
|
|
355
354
|
/* @__PURE__ */ jsx("ins", { className: "no-underline text-green-700", children: ad == null ? void 0 : ad.adFormat })
|
|
356
355
|
] }) }),
|
|
357
|
-
origins.length > 1 && /* @__PURE__ */ jsx(TableCell, { children: (ad == null ? void 0 : ad.origin) && /* @__PURE__ */ jsx(Badge, { className: cn(slotIndexBadgeClasses[origins.indexOf(ad.origin) % slotIndexBadgeClasses.length], "text-white"), children:
|
|
356
|
+
origins.length > 1 && /* @__PURE__ */ jsx(TableCell, { children: (ad == null ? void 0 : ad.origin) && /* @__PURE__ */ jsx(Badge, { className: cn(slotIndexBadgeClasses[origins.indexOf(ad.origin) % slotIndexBadgeClasses.length], "text-white"), children: ad.origin.toLowerCase() }) }),
|
|
358
357
|
/* @__PURE__ */ jsx(TableCell, { children: location }),
|
|
359
358
|
/* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(
|
|
360
359
|
Badge,
|
|
@@ -552,7 +551,7 @@ function LogTable({
|
|
|
552
551
|
{
|
|
553
552
|
variant: "secondary",
|
|
554
553
|
className: logBadgeClasses[log.level] ?? "",
|
|
555
|
-
children:
|
|
554
|
+
children: log.level
|
|
556
555
|
}
|
|
557
556
|
) }),
|
|
558
557
|
/* @__PURE__ */ jsx(TableCell, { children: log.message }),
|
|
@@ -826,7 +825,7 @@ const Devtools$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
|
|
|
826
825
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
827
826
|
function createAdheseDevtools(element, context) {
|
|
828
827
|
const root = createRoot(element);
|
|
829
|
-
root.render(/* @__PURE__ */ jsx(Devtools, { adheseContext: context }));
|
|
828
|
+
root.render(/* @__PURE__ */ jsx(StrictMode, { children: /* @__PURE__ */ jsx(Devtools, { adheseContext: context }) }));
|
|
830
829
|
return () => {
|
|
831
830
|
root.unmount();
|
|
832
831
|
};
|
|
@@ -839,4 +838,4 @@ export {
|
|
|
839
838
|
Devtools$1 as D,
|
|
840
839
|
main as m
|
|
841
840
|
};
|
|
842
|
-
//# sourceMappingURL=devtools-
|
|
841
|
+
//# sourceMappingURL=devtools-HKRrPsjZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools-HKRrPsjZ.js","sources":["../src/utils.ts","../src/components/table.tsx","../src/components/badge.tsx","../src/components/button.tsx","../src/components/sheet.tsx","../src/components/slotsTable.tsx","../src/components/tabs.tsx","../src/components/logTable.tsx","../src/components/parametersTable.tsx","../src/components/switch.tsx","../src/components/label.tsx","../src/components/input.tsx","../src/components/fronttailSettings.tsx","../src/components/settings.tsx","../src/components/previewButton.tsx","../src/Devtools.tsx","../src/main.tsx"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: Array<ClassValue>): string {\n return twMerge(clsx(inputs));\n}\n\ntype CookieOptions = {\n key: string;\n value: string;\n expires?: Date;\n path?: string;\n samesite?: string;\n secure?: boolean;\n};\n\nexport function setCooke({\n key,\n value,\n expires,\n path,\n samesite,\n secure,\n}: CookieOptions): void {\n document.cookie = `${key}=${value}; ${expires ? `expires=${expires.toString()};` : ''} ${path ? `path=${path};` : ''} ${samesite ? `samesite=${samesite};` : ''} ${secure ? `secure=${secure};` : ''}`;\n}\n\nexport function deleteCookie(key: string): void {\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;\n}\n\nexport function getCookie(key: string): string {\n const cookies = document.cookie.split(';');\n for (const cookie of cookies) {\n const [cookieKey, cookieValue] = cookie.split('=');\n if (cookieKey.trim() === key)\n return cookieValue;\n }\n\n return '';\n}\n\nexport function hasCookie(key: string): boolean {\n return document.cookie.includes(`${key}=`);\n}\n","/* eslint-disable ts/naming-convention */\nimport { type HTMLAttributes, type TdHTMLAttributes, type ThHTMLAttributes, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst Table = forwardRef<\n HTMLTableElement,\n HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n));\nTable.displayName = 'Table';\n\nconst TableHeader = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\n));\nTableHeader.displayName = 'TableHeader';\n\nconst TableBody = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n));\nTableBody.displayName = 'TableBody';\n\nconst TableFooter = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n 'border-t bg-muted/50 font-medium [&>tr]:last:border-b-0',\n className,\n )}\n {...props}\n />\n));\nTableFooter.displayName = 'TableFooter';\n\nconst TableRow = forwardRef<\n HTMLTableRowElement,\n HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n 'border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted',\n className,\n )}\n {...props}\n />\n));\nTableRow.displayName = 'TableRow';\n\nconst TableHead = forwardRef<\n HTMLTableCellElement,\n ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = 'TableHead';\n\nconst TableCell = forwardRef<\n HTMLTableCellElement,\n TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n 'p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n));\nTableCell.displayName = 'TableCell';\n\nconst TableCaption = forwardRef<\n HTMLTableCaptionElement,\n HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn('mt-4 text-sm text-muted-foreground', className)}\n {...props}\n />\n));\nTableCaption.displayName = 'TableCaption';\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","import { type VariantProps, cva } from 'class-variance-authority';\nimport type { HTMLAttributes, ReactElement } from 'react';\nimport { cn } from '../utils';\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport interface BadgeProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\n// eslint-disable-next-line ts/naming-convention\nfunction Badge({ className, variant, ...props }: BadgeProps): ReactElement {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import { Slot } from '@radix-ui/react-slot';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport { type ButtonHTMLAttributes, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default:\n 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-6 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\n// eslint-disable-next-line ts/naming-convention\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n // eslint-disable-next-line ts/naming-convention\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","/* eslint-disable ts/naming-convention */\nimport * as SheetPrimitive from '@radix-ui/react-dialog';\nimport { Cross2Icon } from '@radix-ui/react-icons';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport { type ComponentPropsWithoutRef, type ElementRef, type HTMLAttributes, type ReactElement, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst Sheet = SheetPrimitive.Root;\n\nconst SheetTrigger = SheetPrimitive.Trigger;\n\nconst SheetClose = SheetPrimitive.Close;\n\nconst SheetPortal = SheetPrimitive.Portal;\n\nconst SheetOverlay = forwardRef<\n ElementRef<typeof SheetPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\n 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500',\n {\n variants: {\n side: {\n top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n bottom:\n 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n right:\n 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-[calc(100vw-16rem)]',\n },\n },\n defaultVariants: {\n side: 'right',\n },\n },\n);\n\ninterface SheetContentProps\n extends ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = forwardRef<\n ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = 'right', className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <Cross2Icon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n));\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nfunction SheetHeader({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>): ReactElement {\n return (\n <div\n className={cn(\n 'flex flex-col space-y-2 text-center sm:text-left',\n className,\n )}\n {...props}\n />\n );\n}\nSheetHeader.displayName = 'SheetHeader';\n\nfunction SheetFooter({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>): ReactElement {\n return (\n <div\n className={cn(\n 'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n className,\n )}\n {...props}\n />\n );\n}\nSheetFooter.displayName = 'SheetFooter';\n\nconst SheetTitle = forwardRef<\n ElementRef<typeof SheetPrimitive.Title>,\n ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold text-foreground', className)}\n {...props}\n />\n));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = forwardRef<\n ElementRef<typeof SheetPrimitive.Description>,\n ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","import { Fragment, type ReactElement, useEffect, useMemo, useState } from 'react';\nimport type { AdheseContext, AdheseSlot } from '@adhese/sdk';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\nimport { Button, buttonVariants } from './button';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './sheet';\n\nconst slotStatus = {\n unloaded: 'Waiting to load',\n loaded: 'Ready to render',\n rendered: 'Rendered',\n} as const;\n\nconst slotIndexBadgeClasses = [\n 'bg-blue-500 hover:bg-blue-500',\n 'bg-amber-500 hover:bg-amber-500',\n 'bg-green-500 hover:bg-green-500',\n 'bg-red-500 hover:bg-red-500',\n 'bg-purple-500 hover:bg-purple-500',\n 'bg-cyan-500 hover:bg-cyan-500',\n 'bg-pink-500 hover:bg-pink-500',\n] as const;\n\n// eslint-disable-next-line ts/naming-convention\nexport function SlotsTable({ adheseContext }: {\n adheseContext: AdheseContext;\n}): ReactElement {\n const [slots, setSlots] = useState<ReadonlyArray<AdheseSlot>>([]);\n\n useEffect(() => {\n function onSlotsChange(newSlots: ReadonlyArray<AdheseSlot>): void {\n setSlots(newSlots);\n }\n\n adheseContext.events?.changeSlots.addListener(onSlotsChange);\n onSlotsChange(adheseContext.getAll?.() ?? []);\n\n return (): void => {\n adheseContext.events?.changeSlots.removeListener(onSlotsChange);\n };\n }, [adheseContext]);\n\n const formattedSlots = useMemo(() => slots.map((slot) => {\n const ad = slot.ad.value;\n const iframe = slot.getElement();\n\n let status: keyof typeof slotStatus = 'unloaded';\n\n if (iframe)\n status = 'rendered';\n else if (ad)\n status = 'loaded';\n\n return ({\n ...slot,\n name: slot.name.value,\n ad,\n status,\n format: slot.format.value,\n iframe,\n parameters: Array.from(slot.parameters.entries()),\n });\n }), [slots]);\n\n const slotParametersExist = formattedSlots.some(formattedSlot => formattedSlot.parameters.length > 0);\n const previewExist = formattedSlots.some(formattedSlot => formattedSlot.ad?.preview);\n\n const origins: ReadonlyArray<string> = useMemo(() => {\n const set = new Set<string>();\n\n for (const slot of formattedSlots) {\n const { ad } = slot;\n\n if (ad)\n set.add(ad.origin);\n }\n\n return Array.from(set);\n }, [formattedSlots]);\n\n return (\n formattedSlots.length > 0\n ? (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Format</TableHead>\n {origins.length > 1 && <TableHead>Origin</TableHead>}\n <TableHead>Location</TableHead>\n <TableHead>Render Status</TableHead>\n <TableHead>Campaign ID</TableHead>\n <TableHead>Booking ID</TableHead>\n <TableHead>Creative ID</TableHead>\n <TableHead>Traffic ID</TableHead>\n <TableHead>Creative type</TableHead>\n <TableHead>Viewability tracked</TableHead>\n <TableHead>Impression tracked</TableHead>\n <TableHead>Element</TableHead>\n {\n slotParametersExist && <TableHead>Parameters</TableHead>\n }\n {\n previewExist && <TableHead>Preview</TableHead>\n }\n </TableRow>\n </TableHeader>\n <TableBody>\n {formattedSlots.map(({\n ad,\n name,\n format,\n location,\n status,\n isViewabilityTracked,\n isImpressionTracked,\n iframe,\n parameters,\n }, index) => (\n <Fragment key={name}>\n <TableRow id={name}>\n <TableCell className=\"font-medium\">\n <Badge className={cn(slotIndexBadgeClasses[index % slotIndexBadgeClasses.length], 'text-white')}>{name}</Badge>\n </TableCell>\n <TableCell>\n {!ad?.adFormat || ad?.adFormat === format\n ? format\n : (\n <>\n <del className=\"text-red-300 italic\">{format}</del>\n <ins className=\"no-underline text-green-700\">{ad?.adFormat}</ins>\n </>\n )}\n </TableCell>\n {origins.length > 1 && (\n <TableCell>\n {ad?.origin && <Badge className={cn(slotIndexBadgeClasses[origins.indexOf(ad.origin) % slotIndexBadgeClasses.length], 'text-white')}>{ad.origin.toLowerCase()}</Badge>}\n </TableCell>\n )}\n <TableCell>{location}</TableCell>\n <TableCell>\n <Badge className={cn({\n unloaded: 'bg-secondary text-secondary-foreground hover:bg-secondary',\n loaded: 'bg-blue-100 text-blue-900 hover:bg-blue-100',\n rendered: 'bg-green-100 text-green-900 hover:bg-green-100',\n }[status])}\n >\n {slotStatus[status]}\n </Badge>\n </TableCell>\n <TableCell>\n {ad?.orderId && ad?.orderId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/editCampaign/${ad.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {ad.orderId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>\n {ad?.adspaceId && ad?.adspaceId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/bookingDetail/${ad.adspaceId}/${ad.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {ad.adspaceId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>\n {ad?.libId && ad?.orderId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/creativeDetail/${ad.libId}/${ad.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {ad.libId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>{ad?.id ?? '-'}</TableCell>\n <TableCell>{ad?.ext ? <Badge variant=\"outline\">{ad.ext}</Badge> : '-'}</TableCell>\n <TableCell>\n {isViewabilityTracked.value\n ? <Badge className=\"bg-green-100 text-green-900 hover:bg-green-100\">Yes</Badge>\n : <Badge variant=\"secondary\">No</Badge>}\n </TableCell>\n <TableCell>\n {isImpressionTracked.value\n ? <Badge className=\"bg-green-100 text-green-900 hover:bg-green-100\">Yes</Badge>\n : <Badge variant=\"secondary\">No</Badge>}\n </TableCell>\n <TableCell>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={!iframe}\n onClick={() => {\n if (iframe) {\n iframe.scrollIntoView();\n iframe.style.outline = 'solid 5px red';\n\n setTimeout(() => {\n iframe.style.outline = '';\n }, 1000);\n }\n }}\n >\n Go to element\n </Button>\n </TableCell>\n {\n slotParametersExist && (\n <TableCell>\n {\n parameters.length > 0 && (\n <Sheet>\n <SheetTrigger className={buttonVariants({\n variant: 'secondary',\n size: 'sm',\n })}\n >\n Show\n </SheetTrigger>\n <SheetContent className=\"bg-white flex flex-col gap-4\">\n <SheetHeader>\n <SheetTitle>\n Parameters\n </SheetTitle>\n </SheetHeader>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Key</TableHead>\n <TableHead>Value</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {parameters.map(([parameterName, value]) => (\n <TableRow key={parameterName}>\n <TableCell>\n <Badge variant=\"outline\">{parameterName}</Badge>\n </TableCell>\n <TableCell>\n {\n Array.isArray(value)\n ? (\n <ul className=\"flex gap-1\">\n {value.map((item, paramIndex) => (\n <li key={paramIndex}>\n <Badge variant=\"outline\">{item}</Badge>\n </li>\n ))}\n </ul>\n )\n : <Badge variant=\"outline\">{value}</Badge>\n }\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </SheetContent>\n </Sheet>\n )\n }\n </TableCell>\n )\n }\n {previewExist && (\n <TableCell>\n {ad?.preview\n && (\n <Badge className=\"bg-amber-400 text-amber-950 hover:bg-amber-400\">\n PREVIEW\n </Badge>\n )}\n </TableCell>\n )}\n </TableRow>\n {iframe?.parentElement && createPortal(\n <div className=\"absolute inset-1 flex gap-2 items-start\">\n <Badge className={cn(slotIndexBadgeClasses[index % slotIndexBadgeClasses.length], 'text-white')}>\n {name}\n </Badge>\n {\n ad?.preview && <Badge className=\"bg-amber-400 text-amber-950 hover:bg-amber-400\">PREVIEW</Badge>\n }\n </div>,\n iframe.parentElement,\n )}\n </Fragment>\n ))}\n </TableBody>\n </Table>\n )\n : <p>No slots available</p>\n );\n}\n","/* eslint-disable ts/naming-convention */\n\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { type ComponentPropsWithoutRef, type ElementRef, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = forwardRef<\n ElementRef<typeof TabsPrimitive.List>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground',\n className,\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = forwardRef<\n ElementRef<typeof TabsPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow',\n className,\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = forwardRef<\n ElementRef<typeof TabsPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className,\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { type ReactElement, useEffect, useState } from 'react';\nimport type { AdheseContext } from '@adhese/sdk';\nimport type { Log } from '@logger';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './sheet';\nimport { buttonVariants } from './button';\n\nconst dateFormatter = new Intl.DateTimeFormat('en-US', {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n fractionalSecondDigits: 3,\n hour12: false,\n});\n\nconst logTableRowClasses: Record<string, string> = {\n error: 'bg-red-100 text-red-900',\n warn: 'bg-amber-100 text-amber-900',\n};\n\nconst logBadgeClasses: Record<string, string> = {\n error: 'bg-red-500 text-white',\n warn: 'bg-amber-500 text-white',\n info: 'bg-blue-500 text-white',\n};\n\n// eslint-disable-next-line ts/naming-convention\nexport function LogTable({\n adheseContext,\n}: {\n adheseContext: AdheseContext;\n}): ReactElement {\n const [logs, setLogs] = useState<ReadonlyArray<Log<string>>>([]);\n\n useEffect(() => {\n function onLogsChange(): void {\n setLogs(\n adheseContext.logger.getLogs().toSorted(\n (a, b) => b.timestamp - a.timestamp,\n ),\n );\n }\n\n adheseContext.logger.events.log.addListener(onLogsChange);\n\n onLogsChange();\n\n return (): void => {\n adheseContext.logger.events.log.removeListener(onLogsChange);\n };\n }, []);\n\n return (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Time</TableHead>\n <TableHead>Scope</TableHead>\n <TableHead>Level</TableHead>\n <TableHead>Message</TableHead>\n <TableHead>Attributes</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {logs.map(log => (\n <TableRow key={log.id} className={logTableRowClasses[log.level] ?? ''}>\n <TableCell>{dateFormatter.format(new Date(log.timestamp))}</TableCell>\n <TableCell>{log.scope}</TableCell>\n <TableCell>\n <Badge\n variant=\"secondary\"\n className={logBadgeClasses[log.level] ?? ''}\n >\n {log.level}\n </Badge>\n </TableCell>\n <TableCell>{log.message}</TableCell>\n <TableCell>\n {Boolean(log.attributes) && (\n <Sheet>\n <SheetTrigger className={buttonVariants({\n variant: 'secondary',\n size: 'sm',\n })}\n >\n Show\n </SheetTrigger>\n <SheetContent className=\"bg-white flex flex-col gap-4\">\n <SheetHeader>\n <SheetTitle>\n Attributes\n </SheetTitle>\n </SheetHeader>\n <pre className=\"p-4 bg-accent overflow-auto max-h-full text-sm rounded-md\">\n {JSON.stringify(log.attributes, null, 2)}\n </pre>\n </SheetContent>\n </Sheet>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n}\n","import type { AdheseContext } from '@adhese/sdk';\nimport { type ReactElement, useEffect, useState } from 'react';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\n\n// eslint-disable-next-line ts/naming-convention\nexport function ParametersTable({\n adheseContext,\n}:\n{\n adheseContext: AdheseContext;\n}): ReactElement {\n const [parameters, setParameters] = useState<ReadonlyArray<{\n name: string;\n value: string | ReadonlyArray<string>;\n }>>([]);\n\n useEffect(() => {\n function onParametersChange(): void {\n setParameters(Array.from(adheseContext.parameters?.entries() ?? []).map(([name, value]) => ({\n name,\n value,\n })).toSorted((a, b) => a.name.localeCompare(b.name)));\n }\n\n adheseContext.events?.parametersChange.addListener(onParametersChange);\n\n onParametersChange();\n\n return (): void => {\n adheseContext.events?.parametersChange.removeListener(onParametersChange);\n };\n }, []);\n\n return (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Parameter</TableHead>\n <TableHead>Value</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {parameters.map(parameter => (\n <TableRow key={parameter.name}>\n <TableCell>\n <Badge variant=\"outline\">{parameter.name}</Badge>\n </TableCell>\n <TableCell>\n {\n Array.isArray(parameter.value)\n ? (\n <ul className=\"flex gap-1\">\n {parameter.value.map((item, index) => (\n <li key={index}>\n <Badge variant=\"outline\">{item}</Badge>\n </li>\n ))}\n </ul>\n )\n : <Badge variant=\"outline\">{parameter.value}</Badge>\n }\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n}\n","// eslint-disable-next-line ts/naming-convention\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\n\nimport { type ComponentPropsWithoutRef, type ElementRef, forwardRef } from 'react';\nimport { cn } from '../utils';\n\n// eslint-disable-next-line ts/naming-convention\nconst Switch = forwardRef<\n ElementRef<typeof SwitchPrimitives.Root>,\n ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0',\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","// eslint-disable-next-line ts/naming-convention\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport { type ComponentPropsWithoutRef, type ElementRef, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst labelVariants = cva(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n);\n\n// eslint-disable-next-line ts/naming-convention\nconst Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import { type InputHTMLAttributes, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nexport interface InputProps\n extends InputHTMLAttributes<HTMLInputElement> {}\n\n// eslint-disable-next-line ts/naming-convention\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => (\n <input\n type={type}\n className={cn(\n 'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n ref={ref}\n {...props}\n />\n ),\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","import type { AdheseContext } from '@adhese/sdk';\nimport { type ChangeEventHandler, type HTMLAttributes, type ReactElement, useCallback, useId, useMemo, useState } from 'react';\nimport { cn, deleteCookie, getCookie, hasCookie, setCooke } from '../utils';\nimport { Switch } from './switch';\nimport { Label } from './label';\nimport { Input } from './input';\nimport { Button } from './button';\n\nconst cookieKey = 'debugKey';\n\nfunction setDebugCookie(value: string): void {\n setCooke({\n key: cookieKey,\n value,\n expires: new Date(Date.now() + 24 * 60 * 60 * 1000),\n });\n}\n\nfunction simpleStringify(value: unknown): string {\n if (typeof value === 'object')\n return Object.values(value as object).map(nestedValue => `${simpleStringify(nestedValue)}`).join('');\n\n if (typeof value === 'boolean')\n return value ? '1' : '0';\n\n return String(value);\n}\n\n// eslint-disable-next-line ts/naming-convention\nexport function FronttailSettings({\n adheseContext,\n className,\n 'aria-labelledby': ariaLabelledBy,\n ...props\n}: {\n adheseContext: AdheseContext;\n} & HTMLAttributes<HTMLDivElement>): ReactElement {\n const autoGeneratedKey = useMemo(() => `adhese-${adheseContext.options.account}-${btoa(simpleStringify(adheseContext.options)).slice(0, 20)}`, [adheseContext.options]);\n\n const [fronttailDebugKey, setFronttailDebugKey] = useState(hasCookie(cookieKey) ? getCookie(cookieKey) : autoGeneratedKey);\n const [isFronttailEnabled, setIsFronttailEnabled] = useState(hasCookie(cookieKey));\n\n const onFronttailDebugKeyChange = useCallback((event) => {\n const { value } = event.target;\n\n setFronttailDebugKey(value);\n\n if (isFronttailEnabled && value.length > 4)\n setDebugCookie(value);\n }, [setDebugCookie, isFronttailEnabled]) satisfies ChangeEventHandler<HTMLInputElement>;\n\n const onFrontailEnabledChange = useCallback(() => {\n setIsFronttailEnabled((value) => {\n if (value)\n deleteCookie(cookieKey);\n\n else\n setDebugCookie(fronttailDebugKey);\n\n return !value;\n });\n }, [setDebugCookie, fronttailDebugKey]);\n\n const id = useId();\n return (\n <section className={cn('flex flex-col gap-6', className)} aria-labelledby={ariaLabelledBy ?? `fronttailHeading${id}`} {...props}>\n <h2 className=\"text-lg font-semibold\" id={`fronttailHeading${id}`}>Fronttail settings</h2>\n\n <div className=\"flex items-center gap-4\">\n <Switch checked={isFronttailEnabled} onCheckedChange={onFrontailEnabledChange} id={`fronttailSwitch${id}`} />\n <Label htmlFor={`fronttailSwitch${id}`}>\n Enable Fronttail debugging\n <span className=\"text-gray-400 font-normal\"> – Cookie will expire automatically in 1 day</span>\n </Label>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor={`fronttailDebugKey${id}`}>\n Debug key\n </Label>\n <div className=\"flex items-center gap-4\">\n <Input\n id={`fronttailDebugKey${id}`}\n value={fronttailDebugKey}\n onChange={onFronttailDebugKeyChange}\n className={\n cn('max-w-60', {\n // eslint-disable-next-line ts/naming-convention\n 'border-destructive': fronttailDebugKey.length < 4,\n })\n }\n />\n\n <Button\n variant=\"outline\"\n onClick={() => {\n setFronttailDebugKey(autoGeneratedKey);\n\n if (isFronttailEnabled)\n setDebugCookie(autoGeneratedKey);\n }}\n >\n Auto generate key\n </Button>\n </div>\n {\n fronttailDebugKey.length < 4\n && <span className=\"text-sm text-destructive\">Debug key must contain at least 4 characters</span>\n }\n </div>\n </section>\n );\n}\n","import type { ReactElement } from 'react';\nimport type { AdheseContext } from '@adhese/sdk';\nimport { FronttailSettings } from './fronttailSettings';\n\nconst settingClasses = 'border-solid border-b-2 border-accent pb-8 mb-8 last:mb-0 last:pb-0 last:border-0';\n\n// eslint-disable-next-line ts/naming-convention\nexport function Settings({\n adheseContext,\n}: {\n adheseContext: AdheseContext;\n}): ReactElement {\n return (\n <div>\n <FronttailSettings adheseContext={adheseContext} className={settingClasses} />\n </div>\n );\n}\n","import type { ReactElement } from 'react';\nimport { Button } from './button';\n\n// eslint-disable-next-line ts/naming-convention\nexport function PreviewButton(): ReactElement {\n return (\n <>\n {\n window.location.search.includes('adhesePreviewCreativeId') && (\n <Button\n onClick={() => {\n const currentUrl = new URL(window.location.href);\n\n window.location.replace(`${currentUrl.origin}${currentUrl.pathname === '/' ? '' : currentUrl.pathname}`);\n }}\n variant=\"secondary\"\n >\n Disable preview mode\n </Button>\n )\n }\n </>\n );\n}\n","import type { AdheseContext } from '@adhese/sdk';\nimport { type ReactElement, useEffect, useRef, useState } from 'react';\nimport './globals.css';\nimport { SlotsTable } from './components/slotsTable';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from './components/tabs';\nimport { LogTable } from './components/logTable';\nimport { Button } from './components/button';\nimport { ParametersTable } from './components/parametersTable';\nimport { Settings } from './components/settings';\nimport { PreviewButton } from './components/previewButton';\n\n// eslint-disable-next-line ts/naming-convention\nexport function Devtools({ adheseContext }: {\n adheseContext: AdheseContext;\n}): ReactElement {\n const [spacing, setSpacing] = useState(0);\n const appRef = useRef<HTMLDivElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n useEffect(() => {\n let resizeObserver: ResizeObserver | undefined;\n\n if (isOpen) {\n resizeObserver = new ResizeObserver(([entry]) => {\n setSpacing(entry.target.getBoundingClientRect().height);\n },\n );\n\n if (appRef.current)\n resizeObserver.observe(appRef.current);\n }\n\n return (): void => {\n resizeObserver?.disconnect();\n };\n }, [isOpen]);\n\n return (\n <div className=\"adhese-devtools\">\n {isOpen\n ? (\n <>\n <section\n className=\"fixed bottom-0 w-full border-t-2 border-t-accent bg-background shadow-lg overflow-auto\"\n ref={appRef}\n aria-label=\"Adhese Devtools\"\n >\n <Tabs defaultValue=\"slots\">\n <div className=\"flex justify-between p-4\">\n <TabsList>\n <TabsTrigger value=\"slots\">Slots</TabsTrigger>\n <TabsTrigger value=\"logs\">Logs</TabsTrigger>\n <TabsTrigger value=\"parameters\">Parameters</TabsTrigger>\n <TabsTrigger value=\"settings\">Settings</TabsTrigger>\n </TabsList>\n\n <div className=\"flex items-center gap-2\">\n <PreviewButton />\n <Button\n onClick={setIsOpen.bind(null, false)}\n >\n Close\n </Button>\n </div>\n </div>\n <div className=\"overflow-auto max-h-96 border-t-2 border-t-accent p-4\">\n <TabsContent value=\"slots\">\n <SlotsTable adheseContext={adheseContext} />\n </TabsContent>\n <TabsContent value=\"logs\">\n <LogTable adheseContext={adheseContext} />\n </TabsContent>\n <TabsContent value=\"parameters\">\n <ParametersTable adheseContext={adheseContext} />\n </TabsContent>\n <TabsContent value=\"settings\">\n <Settings adheseContext={adheseContext} />\n </TabsContent>\n </div>\n </Tabs>\n </section>\n <div style={{\n height: spacing,\n }}\n />\n </>\n )\n : (\n <div className=\"fixed bottom-4 right-4 flex flex-col gap-2\">\n <Button onClick={setIsOpen.bind(null, true)}>\n Open Adhese Devtools\n </Button>\n <PreviewButton />\n </div>\n )}\n </div>\n );\n}\n","import { createRoot } from 'react-dom/client';\nimport type { AdheseContext } from '@adhese/sdk';\nimport { StrictMode } from 'react';\nimport { Devtools } from './Devtools';\n\nexport function createAdheseDevtools(element: HTMLElement, context: AdheseContext): () => void {\n const root = createRoot(element);\n\n root.render((\n <StrictMode>\n <Devtools adheseContext={context} />\n </StrictMode>\n ));\n\n return () => {\n root.unmount();\n };\n}\n"],"names":["cookieKey","_a","Fragment"],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@ const jsxRuntime = require("react/jsx-runtime");
|
|
|
3
3
|
const client = require("react-dom/client");
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const reactDom = require("react-dom");
|
|
6
|
-
const upperFirst = require("lodash/upperFirst");
|
|
7
6
|
const clsx = require("clsx");
|
|
8
7
|
const tailwindMerge = require("tailwind-merge");
|
|
9
8
|
const classVarianceAuthority = require("class-variance-authority");
|
|
@@ -307,7 +306,7 @@ function SlotsTable({ adheseContext }) {
|
|
|
307
306
|
var _a2;
|
|
308
307
|
(_a2 = adheseContext.events) == null ? void 0 : _a2.changeSlots.removeListener(onSlotsChange);
|
|
309
308
|
};
|
|
310
|
-
}, []);
|
|
309
|
+
}, [adheseContext]);
|
|
311
310
|
const formattedSlots = react.useMemo(() => slots.map((slot) => {
|
|
312
311
|
const ad = slot.ad.value;
|
|
313
312
|
const iframe = slot.getElement();
|
|
@@ -375,7 +374,7 @@ function SlotsTable({ adheseContext }) {
|
|
|
375
374
|
/* @__PURE__ */ jsxRuntime.jsx("del", { className: "text-red-300 italic", children: format }),
|
|
376
375
|
/* @__PURE__ */ jsxRuntime.jsx("ins", { className: "no-underline text-green-700", children: ad == null ? void 0 : ad.adFormat })
|
|
377
376
|
] }) }),
|
|
378
|
-
origins.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (ad == null ? void 0 : ad.origin) && /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: cn(slotIndexBadgeClasses[origins.indexOf(ad.origin) % slotIndexBadgeClasses.length], "text-white"), children:
|
|
377
|
+
origins.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (ad == null ? void 0 : ad.origin) && /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: cn(slotIndexBadgeClasses[origins.indexOf(ad.origin) % slotIndexBadgeClasses.length], "text-white"), children: ad.origin.toLowerCase() }) }),
|
|
379
378
|
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: location }),
|
|
380
379
|
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
381
380
|
Badge,
|
|
@@ -573,7 +572,7 @@ function LogTable({
|
|
|
573
572
|
{
|
|
574
573
|
variant: "secondary",
|
|
575
574
|
className: logBadgeClasses[log.level] ?? "",
|
|
576
|
-
children:
|
|
575
|
+
children: log.level
|
|
577
576
|
}
|
|
578
577
|
) }),
|
|
579
578
|
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: log.message }),
|
|
@@ -847,7 +846,7 @@ const Devtools$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
|
|
|
847
846
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
848
847
|
function createAdheseDevtools(element, context) {
|
|
849
848
|
const root = client.createRoot(element);
|
|
850
|
-
root.render(/* @__PURE__ */ jsxRuntime.jsx(Devtools, { adheseContext: context }));
|
|
849
|
+
root.render(/* @__PURE__ */ jsxRuntime.jsx(react.StrictMode, { children: /* @__PURE__ */ jsxRuntime.jsx(Devtools, { adheseContext: context }) }));
|
|
851
850
|
return () => {
|
|
852
851
|
root.unmount();
|
|
853
852
|
};
|
|
@@ -858,4 +857,4 @@ const main = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty
|
|
|
858
857
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
859
858
|
exports.Devtools = Devtools$1;
|
|
860
859
|
exports.main = main;
|
|
861
|
-
//# sourceMappingURL=devtools-
|
|
860
|
+
//# sourceMappingURL=devtools-aidsR1fI.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools-aidsR1fI.cjs","sources":["../src/utils.ts","../src/components/table.tsx","../src/components/badge.tsx","../src/components/button.tsx","../src/components/sheet.tsx","../src/components/slotsTable.tsx","../src/components/tabs.tsx","../src/components/logTable.tsx","../src/components/parametersTable.tsx","../src/components/switch.tsx","../src/components/label.tsx","../src/components/input.tsx","../src/components/fronttailSettings.tsx","../src/components/settings.tsx","../src/components/previewButton.tsx","../src/Devtools.tsx","../src/main.tsx"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: Array<ClassValue>): string {\n return twMerge(clsx(inputs));\n}\n\ntype CookieOptions = {\n key: string;\n value: string;\n expires?: Date;\n path?: string;\n samesite?: string;\n secure?: boolean;\n};\n\nexport function setCooke({\n key,\n value,\n expires,\n path,\n samesite,\n secure,\n}: CookieOptions): void {\n document.cookie = `${key}=${value}; ${expires ? `expires=${expires.toString()};` : ''} ${path ? `path=${path};` : ''} ${samesite ? `samesite=${samesite};` : ''} ${secure ? `secure=${secure};` : ''}`;\n}\n\nexport function deleteCookie(key: string): void {\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;\n}\n\nexport function getCookie(key: string): string {\n const cookies = document.cookie.split(';');\n for (const cookie of cookies) {\n const [cookieKey, cookieValue] = cookie.split('=');\n if (cookieKey.trim() === key)\n return cookieValue;\n }\n\n return '';\n}\n\nexport function hasCookie(key: string): boolean {\n return document.cookie.includes(`${key}=`);\n}\n","/* eslint-disable ts/naming-convention */\nimport { type HTMLAttributes, type TdHTMLAttributes, type ThHTMLAttributes, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst Table = forwardRef<\n HTMLTableElement,\n HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn('w-full caption-bottom text-sm', className)}\n {...props}\n />\n </div>\n));\nTable.displayName = 'Table';\n\nconst TableHeader = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\n));\nTableHeader.displayName = 'TableHeader';\n\nconst TableBody = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n));\nTableBody.displayName = 'TableBody';\n\nconst TableFooter = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n 'border-t bg-muted/50 font-medium [&>tr]:last:border-b-0',\n className,\n )}\n {...props}\n />\n));\nTableFooter.displayName = 'TableFooter';\n\nconst TableRow = forwardRef<\n HTMLTableRowElement,\n HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n 'border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted',\n className,\n )}\n {...props}\n />\n));\nTableRow.displayName = 'TableRow';\n\nconst TableHead = forwardRef<\n HTMLTableCellElement,\n ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n));\nTableHead.displayName = 'TableHead';\n\nconst TableCell = forwardRef<\n HTMLTableCellElement,\n TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n 'p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className,\n )}\n {...props}\n />\n));\nTableCell.displayName = 'TableCell';\n\nconst TableCaption = forwardRef<\n HTMLTableCaptionElement,\n HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn('mt-4 text-sm text-muted-foreground', className)}\n {...props}\n />\n));\nTableCaption.displayName = 'TableCaption';\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","import { type VariantProps, cva } from 'class-variance-authority';\nimport type { HTMLAttributes, ReactElement } from 'react';\nimport { cn } from '../utils';\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default:\n 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport interface BadgeProps\n extends HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {}\n\n// eslint-disable-next-line ts/naming-convention\nfunction Badge({ className, variant, ...props }: BadgeProps): ReactElement {\n return (\n <div className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import { Slot } from '@radix-ui/react-slot';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport { type ButtonHTMLAttributes, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default:\n 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n destructive:\n 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary:\n 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-6 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n}\n\n// eslint-disable-next-line ts/naming-convention\nconst Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n // eslint-disable-next-line ts/naming-convention\n const Component = asChild ? Slot : 'button';\n return (\n <Component\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","/* eslint-disable ts/naming-convention */\nimport * as SheetPrimitive from '@radix-ui/react-dialog';\nimport { Cross2Icon } from '@radix-ui/react-icons';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport { type ComponentPropsWithoutRef, type ElementRef, type HTMLAttributes, type ReactElement, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst Sheet = SheetPrimitive.Root;\n\nconst SheetTrigger = SheetPrimitive.Trigger;\n\nconst SheetClose = SheetPrimitive.Close;\n\nconst SheetPortal = SheetPrimitive.Portal;\n\nconst SheetOverlay = forwardRef<\n ElementRef<typeof SheetPrimitive.Overlay>,\n ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst sheetVariants = cva(\n 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500',\n {\n variants: {\n side: {\n top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n bottom:\n 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n right:\n 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-[calc(100vw-16rem)]',\n },\n },\n defaultVariants: {\n side: 'right',\n },\n },\n);\n\ninterface SheetContentProps\n extends ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n VariantProps<typeof sheetVariants> {}\n\nconst SheetContent = forwardRef<\n ElementRef<typeof SheetPrimitive.Content>,\n SheetContentProps\n>(({ side = 'right', className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n ref={ref}\n className={cn(sheetVariants({ side }), className)}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n <Cross2Icon className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n));\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nfunction SheetHeader({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>): ReactElement {\n return (\n <div\n className={cn(\n 'flex flex-col space-y-2 text-center sm:text-left',\n className,\n )}\n {...props}\n />\n );\n}\nSheetHeader.displayName = 'SheetHeader';\n\nfunction SheetFooter({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>): ReactElement {\n return (\n <div\n className={cn(\n 'flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2',\n className,\n )}\n {...props}\n />\n );\n}\nSheetFooter.displayName = 'SheetFooter';\n\nconst SheetTitle = forwardRef<\n ElementRef<typeof SheetPrimitive.Title>,\n ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold text-foreground', className)}\n {...props}\n />\n));\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = forwardRef<\n ElementRef<typeof SheetPrimitive.Description>,\n ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <SheetPrimitive.Description\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n));\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","import { Fragment, type ReactElement, useEffect, useMemo, useState } from 'react';\nimport type { AdheseContext, AdheseSlot } from '@adhese/sdk';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../utils';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\nimport { Button, buttonVariants } from './button';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './sheet';\n\nconst slotStatus = {\n unloaded: 'Waiting to load',\n loaded: 'Ready to render',\n rendered: 'Rendered',\n} as const;\n\nconst slotIndexBadgeClasses = [\n 'bg-blue-500 hover:bg-blue-500',\n 'bg-amber-500 hover:bg-amber-500',\n 'bg-green-500 hover:bg-green-500',\n 'bg-red-500 hover:bg-red-500',\n 'bg-purple-500 hover:bg-purple-500',\n 'bg-cyan-500 hover:bg-cyan-500',\n 'bg-pink-500 hover:bg-pink-500',\n] as const;\n\n// eslint-disable-next-line ts/naming-convention\nexport function SlotsTable({ adheseContext }: {\n adheseContext: AdheseContext;\n}): ReactElement {\n const [slots, setSlots] = useState<ReadonlyArray<AdheseSlot>>([]);\n\n useEffect(() => {\n function onSlotsChange(newSlots: ReadonlyArray<AdheseSlot>): void {\n setSlots(newSlots);\n }\n\n adheseContext.events?.changeSlots.addListener(onSlotsChange);\n onSlotsChange(adheseContext.getAll?.() ?? []);\n\n return (): void => {\n adheseContext.events?.changeSlots.removeListener(onSlotsChange);\n };\n }, [adheseContext]);\n\n const formattedSlots = useMemo(() => slots.map((slot) => {\n const ad = slot.ad.value;\n const iframe = slot.getElement();\n\n let status: keyof typeof slotStatus = 'unloaded';\n\n if (iframe)\n status = 'rendered';\n else if (ad)\n status = 'loaded';\n\n return ({\n ...slot,\n name: slot.name.value,\n ad,\n status,\n format: slot.format.value,\n iframe,\n parameters: Array.from(slot.parameters.entries()),\n });\n }), [slots]);\n\n const slotParametersExist = formattedSlots.some(formattedSlot => formattedSlot.parameters.length > 0);\n const previewExist = formattedSlots.some(formattedSlot => formattedSlot.ad?.preview);\n\n const origins: ReadonlyArray<string> = useMemo(() => {\n const set = new Set<string>();\n\n for (const slot of formattedSlots) {\n const { ad } = slot;\n\n if (ad)\n set.add(ad.origin);\n }\n\n return Array.from(set);\n }, [formattedSlots]);\n\n return (\n formattedSlots.length > 0\n ? (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Name</TableHead>\n <TableHead>Format</TableHead>\n {origins.length > 1 && <TableHead>Origin</TableHead>}\n <TableHead>Location</TableHead>\n <TableHead>Render Status</TableHead>\n <TableHead>Campaign ID</TableHead>\n <TableHead>Booking ID</TableHead>\n <TableHead>Creative ID</TableHead>\n <TableHead>Traffic ID</TableHead>\n <TableHead>Creative type</TableHead>\n <TableHead>Viewability tracked</TableHead>\n <TableHead>Impression tracked</TableHead>\n <TableHead>Element</TableHead>\n {\n slotParametersExist && <TableHead>Parameters</TableHead>\n }\n {\n previewExist && <TableHead>Preview</TableHead>\n }\n </TableRow>\n </TableHeader>\n <TableBody>\n {formattedSlots.map(({\n ad,\n name,\n format,\n location,\n status,\n isViewabilityTracked,\n isImpressionTracked,\n iframe,\n parameters,\n }, index) => (\n <Fragment key={name}>\n <TableRow id={name}>\n <TableCell className=\"font-medium\">\n <Badge className={cn(slotIndexBadgeClasses[index % slotIndexBadgeClasses.length], 'text-white')}>{name}</Badge>\n </TableCell>\n <TableCell>\n {!ad?.adFormat || ad?.adFormat === format\n ? format\n : (\n <>\n <del className=\"text-red-300 italic\">{format}</del>\n <ins className=\"no-underline text-green-700\">{ad?.adFormat}</ins>\n </>\n )}\n </TableCell>\n {origins.length > 1 && (\n <TableCell>\n {ad?.origin && <Badge className={cn(slotIndexBadgeClasses[origins.indexOf(ad.origin) % slotIndexBadgeClasses.length], 'text-white')}>{ad.origin.toLowerCase()}</Badge>}\n </TableCell>\n )}\n <TableCell>{location}</TableCell>\n <TableCell>\n <Badge className={cn({\n unloaded: 'bg-secondary text-secondary-foreground hover:bg-secondary',\n loaded: 'bg-blue-100 text-blue-900 hover:bg-blue-100',\n rendered: 'bg-green-100 text-green-900 hover:bg-green-100',\n }[status])}\n >\n {slotStatus[status]}\n </Badge>\n </TableCell>\n <TableCell>\n {ad?.orderId && ad?.orderId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/editCampaign/${ad.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {ad.orderId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>\n {ad?.adspaceId && ad?.adspaceId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/bookingDetail/${ad.adspaceId}/${ad.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {ad.adspaceId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>\n {ad?.libId && ad?.orderId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/creativeDetail/${ad.libId}/${ad.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {ad.libId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>{ad?.id ?? '-'}</TableCell>\n <TableCell>{ad?.ext ? <Badge variant=\"outline\">{ad.ext}</Badge> : '-'}</TableCell>\n <TableCell>\n {isViewabilityTracked.value\n ? <Badge className=\"bg-green-100 text-green-900 hover:bg-green-100\">Yes</Badge>\n : <Badge variant=\"secondary\">No</Badge>}\n </TableCell>\n <TableCell>\n {isImpressionTracked.value\n ? <Badge className=\"bg-green-100 text-green-900 hover:bg-green-100\">Yes</Badge>\n : <Badge variant=\"secondary\">No</Badge>}\n </TableCell>\n <TableCell>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n disabled={!iframe}\n onClick={() => {\n if (iframe) {\n iframe.scrollIntoView();\n iframe.style.outline = 'solid 5px red';\n\n setTimeout(() => {\n iframe.style.outline = '';\n }, 1000);\n }\n }}\n >\n Go to element\n </Button>\n </TableCell>\n {\n slotParametersExist && (\n <TableCell>\n {\n parameters.length > 0 && (\n <Sheet>\n <SheetTrigger className={buttonVariants({\n variant: 'secondary',\n size: 'sm',\n })}\n >\n Show\n </SheetTrigger>\n <SheetContent className=\"bg-white flex flex-col gap-4\">\n <SheetHeader>\n <SheetTitle>\n Parameters\n </SheetTitle>\n </SheetHeader>\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Key</TableHead>\n <TableHead>Value</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {parameters.map(([parameterName, value]) => (\n <TableRow key={parameterName}>\n <TableCell>\n <Badge variant=\"outline\">{parameterName}</Badge>\n </TableCell>\n <TableCell>\n {\n Array.isArray(value)\n ? (\n <ul className=\"flex gap-1\">\n {value.map((item, paramIndex) => (\n <li key={paramIndex}>\n <Badge variant=\"outline\">{item}</Badge>\n </li>\n ))}\n </ul>\n )\n : <Badge variant=\"outline\">{value}</Badge>\n }\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </SheetContent>\n </Sheet>\n )\n }\n </TableCell>\n )\n }\n {previewExist && (\n <TableCell>\n {ad?.preview\n && (\n <Badge className=\"bg-amber-400 text-amber-950 hover:bg-amber-400\">\n PREVIEW\n </Badge>\n )}\n </TableCell>\n )}\n </TableRow>\n {iframe?.parentElement && createPortal(\n <div className=\"absolute inset-1 flex gap-2 items-start\">\n <Badge className={cn(slotIndexBadgeClasses[index % slotIndexBadgeClasses.length], 'text-white')}>\n {name}\n </Badge>\n {\n ad?.preview && <Badge className=\"bg-amber-400 text-amber-950 hover:bg-amber-400\">PREVIEW</Badge>\n }\n </div>,\n iframe.parentElement,\n )}\n </Fragment>\n ))}\n </TableBody>\n </Table>\n )\n : <p>No slots available</p>\n );\n}\n","/* eslint-disable ts/naming-convention */\n\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { type ComponentPropsWithoutRef, type ElementRef, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = forwardRef<\n ElementRef<typeof TabsPrimitive.List>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground',\n className,\n )}\n {...props}\n />\n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = forwardRef<\n ElementRef<typeof TabsPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow',\n className,\n )}\n {...props}\n />\n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = forwardRef<\n ElementRef<typeof TabsPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className,\n )}\n {...props}\n />\n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import { type ReactElement, useEffect, useState } from 'react';\nimport type { AdheseContext } from '@adhese/sdk';\nimport type { Log } from '@logger';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './sheet';\nimport { buttonVariants } from './button';\n\nconst dateFormatter = new Intl.DateTimeFormat('en-US', {\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n fractionalSecondDigits: 3,\n hour12: false,\n});\n\nconst logTableRowClasses: Record<string, string> = {\n error: 'bg-red-100 text-red-900',\n warn: 'bg-amber-100 text-amber-900',\n};\n\nconst logBadgeClasses: Record<string, string> = {\n error: 'bg-red-500 text-white',\n warn: 'bg-amber-500 text-white',\n info: 'bg-blue-500 text-white',\n};\n\n// eslint-disable-next-line ts/naming-convention\nexport function LogTable({\n adheseContext,\n}: {\n adheseContext: AdheseContext;\n}): ReactElement {\n const [logs, setLogs] = useState<ReadonlyArray<Log<string>>>([]);\n\n useEffect(() => {\n function onLogsChange(): void {\n setLogs(\n adheseContext.logger.getLogs().toSorted(\n (a, b) => b.timestamp - a.timestamp,\n ),\n );\n }\n\n adheseContext.logger.events.log.addListener(onLogsChange);\n\n onLogsChange();\n\n return (): void => {\n adheseContext.logger.events.log.removeListener(onLogsChange);\n };\n }, []);\n\n return (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Time</TableHead>\n <TableHead>Scope</TableHead>\n <TableHead>Level</TableHead>\n <TableHead>Message</TableHead>\n <TableHead>Attributes</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {logs.map(log => (\n <TableRow key={log.id} className={logTableRowClasses[log.level] ?? ''}>\n <TableCell>{dateFormatter.format(new Date(log.timestamp))}</TableCell>\n <TableCell>{log.scope}</TableCell>\n <TableCell>\n <Badge\n variant=\"secondary\"\n className={logBadgeClasses[log.level] ?? ''}\n >\n {log.level}\n </Badge>\n </TableCell>\n <TableCell>{log.message}</TableCell>\n <TableCell>\n {Boolean(log.attributes) && (\n <Sheet>\n <SheetTrigger className={buttonVariants({\n variant: 'secondary',\n size: 'sm',\n })}\n >\n Show\n </SheetTrigger>\n <SheetContent className=\"bg-white flex flex-col gap-4\">\n <SheetHeader>\n <SheetTitle>\n Attributes\n </SheetTitle>\n </SheetHeader>\n <pre className=\"p-4 bg-accent overflow-auto max-h-full text-sm rounded-md\">\n {JSON.stringify(log.attributes, null, 2)}\n </pre>\n </SheetContent>\n </Sheet>\n )}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n}\n","import type { AdheseContext } from '@adhese/sdk';\nimport { type ReactElement, useEffect, useState } from 'react';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\n\n// eslint-disable-next-line ts/naming-convention\nexport function ParametersTable({\n adheseContext,\n}:\n{\n adheseContext: AdheseContext;\n}): ReactElement {\n const [parameters, setParameters] = useState<ReadonlyArray<{\n name: string;\n value: string | ReadonlyArray<string>;\n }>>([]);\n\n useEffect(() => {\n function onParametersChange(): void {\n setParameters(Array.from(adheseContext.parameters?.entries() ?? []).map(([name, value]) => ({\n name,\n value,\n })).toSorted((a, b) => a.name.localeCompare(b.name)));\n }\n\n adheseContext.events?.parametersChange.addListener(onParametersChange);\n\n onParametersChange();\n\n return (): void => {\n adheseContext.events?.parametersChange.removeListener(onParametersChange);\n };\n }, []);\n\n return (\n <Table>\n <TableHeader>\n <TableRow>\n <TableHead>Parameter</TableHead>\n <TableHead>Value</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {parameters.map(parameter => (\n <TableRow key={parameter.name}>\n <TableCell>\n <Badge variant=\"outline\">{parameter.name}</Badge>\n </TableCell>\n <TableCell>\n {\n Array.isArray(parameter.value)\n ? (\n <ul className=\"flex gap-1\">\n {parameter.value.map((item, index) => (\n <li key={index}>\n <Badge variant=\"outline\">{item}</Badge>\n </li>\n ))}\n </ul>\n )\n : <Badge variant=\"outline\">{parameter.value}</Badge>\n }\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n}\n","// eslint-disable-next-line ts/naming-convention\nimport * as SwitchPrimitives from '@radix-ui/react-switch';\n\nimport { type ComponentPropsWithoutRef, type ElementRef, forwardRef } from 'react';\nimport { cn } from '../utils';\n\n// eslint-disable-next-line ts/naming-convention\nconst Switch = forwardRef<\n ElementRef<typeof SwitchPrimitives.Root>,\n ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n className,\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0',\n )}\n />\n </SwitchPrimitives.Root>\n));\nSwitch.displayName = SwitchPrimitives.Root.displayName;\n\nexport { Switch };\n","// eslint-disable-next-line ts/naming-convention\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport { type ComponentPropsWithoutRef, type ElementRef, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst labelVariants = cva(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',\n);\n\n// eslint-disable-next-line ts/naming-convention\nconst Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","import { type InputHTMLAttributes, forwardRef } from 'react';\nimport { cn } from '../utils';\n\nexport interface InputProps\n extends InputHTMLAttributes<HTMLInputElement> {}\n\n// eslint-disable-next-line ts/naming-convention\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => (\n <input\n type={type}\n className={cn(\n 'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n ref={ref}\n {...props}\n />\n ),\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","import type { AdheseContext } from '@adhese/sdk';\nimport { type ChangeEventHandler, type HTMLAttributes, type ReactElement, useCallback, useId, useMemo, useState } from 'react';\nimport { cn, deleteCookie, getCookie, hasCookie, setCooke } from '../utils';\nimport { Switch } from './switch';\nimport { Label } from './label';\nimport { Input } from './input';\nimport { Button } from './button';\n\nconst cookieKey = 'debugKey';\n\nfunction setDebugCookie(value: string): void {\n setCooke({\n key: cookieKey,\n value,\n expires: new Date(Date.now() + 24 * 60 * 60 * 1000),\n });\n}\n\nfunction simpleStringify(value: unknown): string {\n if (typeof value === 'object')\n return Object.values(value as object).map(nestedValue => `${simpleStringify(nestedValue)}`).join('');\n\n if (typeof value === 'boolean')\n return value ? '1' : '0';\n\n return String(value);\n}\n\n// eslint-disable-next-line ts/naming-convention\nexport function FronttailSettings({\n adheseContext,\n className,\n 'aria-labelledby': ariaLabelledBy,\n ...props\n}: {\n adheseContext: AdheseContext;\n} & HTMLAttributes<HTMLDivElement>): ReactElement {\n const autoGeneratedKey = useMemo(() => `adhese-${adheseContext.options.account}-${btoa(simpleStringify(adheseContext.options)).slice(0, 20)}`, [adheseContext.options]);\n\n const [fronttailDebugKey, setFronttailDebugKey] = useState(hasCookie(cookieKey) ? getCookie(cookieKey) : autoGeneratedKey);\n const [isFronttailEnabled, setIsFronttailEnabled] = useState(hasCookie(cookieKey));\n\n const onFronttailDebugKeyChange = useCallback((event) => {\n const { value } = event.target;\n\n setFronttailDebugKey(value);\n\n if (isFronttailEnabled && value.length > 4)\n setDebugCookie(value);\n }, [setDebugCookie, isFronttailEnabled]) satisfies ChangeEventHandler<HTMLInputElement>;\n\n const onFrontailEnabledChange = useCallback(() => {\n setIsFronttailEnabled((value) => {\n if (value)\n deleteCookie(cookieKey);\n\n else\n setDebugCookie(fronttailDebugKey);\n\n return !value;\n });\n }, [setDebugCookie, fronttailDebugKey]);\n\n const id = useId();\n return (\n <section className={cn('flex flex-col gap-6', className)} aria-labelledby={ariaLabelledBy ?? `fronttailHeading${id}`} {...props}>\n <h2 className=\"text-lg font-semibold\" id={`fronttailHeading${id}`}>Fronttail settings</h2>\n\n <div className=\"flex items-center gap-4\">\n <Switch checked={isFronttailEnabled} onCheckedChange={onFrontailEnabledChange} id={`fronttailSwitch${id}`} />\n <Label htmlFor={`fronttailSwitch${id}`}>\n Enable Fronttail debugging\n <span className=\"text-gray-400 font-normal\"> – Cookie will expire automatically in 1 day</span>\n </Label>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n <Label htmlFor={`fronttailDebugKey${id}`}>\n Debug key\n </Label>\n <div className=\"flex items-center gap-4\">\n <Input\n id={`fronttailDebugKey${id}`}\n value={fronttailDebugKey}\n onChange={onFronttailDebugKeyChange}\n className={\n cn('max-w-60', {\n // eslint-disable-next-line ts/naming-convention\n 'border-destructive': fronttailDebugKey.length < 4,\n })\n }\n />\n\n <Button\n variant=\"outline\"\n onClick={() => {\n setFronttailDebugKey(autoGeneratedKey);\n\n if (isFronttailEnabled)\n setDebugCookie(autoGeneratedKey);\n }}\n >\n Auto generate key\n </Button>\n </div>\n {\n fronttailDebugKey.length < 4\n && <span className=\"text-sm text-destructive\">Debug key must contain at least 4 characters</span>\n }\n </div>\n </section>\n );\n}\n","import type { ReactElement } from 'react';\nimport type { AdheseContext } from '@adhese/sdk';\nimport { FronttailSettings } from './fronttailSettings';\n\nconst settingClasses = 'border-solid border-b-2 border-accent pb-8 mb-8 last:mb-0 last:pb-0 last:border-0';\n\n// eslint-disable-next-line ts/naming-convention\nexport function Settings({\n adheseContext,\n}: {\n adheseContext: AdheseContext;\n}): ReactElement {\n return (\n <div>\n <FronttailSettings adheseContext={adheseContext} className={settingClasses} />\n </div>\n );\n}\n","import type { ReactElement } from 'react';\nimport { Button } from './button';\n\n// eslint-disable-next-line ts/naming-convention\nexport function PreviewButton(): ReactElement {\n return (\n <>\n {\n window.location.search.includes('adhesePreviewCreativeId') && (\n <Button\n onClick={() => {\n const currentUrl = new URL(window.location.href);\n\n window.location.replace(`${currentUrl.origin}${currentUrl.pathname === '/' ? '' : currentUrl.pathname}`);\n }}\n variant=\"secondary\"\n >\n Disable preview mode\n </Button>\n )\n }\n </>\n );\n}\n","import type { AdheseContext } from '@adhese/sdk';\nimport { type ReactElement, useEffect, useRef, useState } from 'react';\nimport './globals.css';\nimport { SlotsTable } from './components/slotsTable';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from './components/tabs';\nimport { LogTable } from './components/logTable';\nimport { Button } from './components/button';\nimport { ParametersTable } from './components/parametersTable';\nimport { Settings } from './components/settings';\nimport { PreviewButton } from './components/previewButton';\n\n// eslint-disable-next-line ts/naming-convention\nexport function Devtools({ adheseContext }: {\n adheseContext: AdheseContext;\n}): ReactElement {\n const [spacing, setSpacing] = useState(0);\n const appRef = useRef<HTMLDivElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n useEffect(() => {\n let resizeObserver: ResizeObserver | undefined;\n\n if (isOpen) {\n resizeObserver = new ResizeObserver(([entry]) => {\n setSpacing(entry.target.getBoundingClientRect().height);\n },\n );\n\n if (appRef.current)\n resizeObserver.observe(appRef.current);\n }\n\n return (): void => {\n resizeObserver?.disconnect();\n };\n }, [isOpen]);\n\n return (\n <div className=\"adhese-devtools\">\n {isOpen\n ? (\n <>\n <section\n className=\"fixed bottom-0 w-full border-t-2 border-t-accent bg-background shadow-lg overflow-auto\"\n ref={appRef}\n aria-label=\"Adhese Devtools\"\n >\n <Tabs defaultValue=\"slots\">\n <div className=\"flex justify-between p-4\">\n <TabsList>\n <TabsTrigger value=\"slots\">Slots</TabsTrigger>\n <TabsTrigger value=\"logs\">Logs</TabsTrigger>\n <TabsTrigger value=\"parameters\">Parameters</TabsTrigger>\n <TabsTrigger value=\"settings\">Settings</TabsTrigger>\n </TabsList>\n\n <div className=\"flex items-center gap-2\">\n <PreviewButton />\n <Button\n onClick={setIsOpen.bind(null, false)}\n >\n Close\n </Button>\n </div>\n </div>\n <div className=\"overflow-auto max-h-96 border-t-2 border-t-accent p-4\">\n <TabsContent value=\"slots\">\n <SlotsTable adheseContext={adheseContext} />\n </TabsContent>\n <TabsContent value=\"logs\">\n <LogTable adheseContext={adheseContext} />\n </TabsContent>\n <TabsContent value=\"parameters\">\n <ParametersTable adheseContext={adheseContext} />\n </TabsContent>\n <TabsContent value=\"settings\">\n <Settings adheseContext={adheseContext} />\n </TabsContent>\n </div>\n </Tabs>\n </section>\n <div style={{\n height: spacing,\n }}\n />\n </>\n )\n : (\n <div className=\"fixed bottom-4 right-4 flex flex-col gap-2\">\n <Button onClick={setIsOpen.bind(null, true)}>\n Open Adhese Devtools\n </Button>\n <PreviewButton />\n </div>\n )}\n </div>\n );\n}\n","import { createRoot } from 'react-dom/client';\nimport type { AdheseContext } from '@adhese/sdk';\nimport { StrictMode } from 'react';\nimport { Devtools } from './Devtools';\n\nexport function createAdheseDevtools(element: HTMLElement, context: AdheseContext): () => void {\n const root = createRoot(element);\n\n root.render((\n <StrictMode>\n <Devtools adheseContext={context} />\n </StrictMode>\n ));\n\n return () => {\n root.unmount();\n };\n}\n"],"names":["twMerge","clsx","cookieKey","forwardRef","jsx","cva","Slot","SheetPrimitive","jsxs","Cross2Icon","useState","useEffect","_a","useMemo","Fragment","createPortal","TabsPrimitive","SwitchPrimitives","LabelPrimitive","useCallback","useId","useRef","createRoot","StrictMode"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,17 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const sdk = require("@adhese/sdk");
|
|
3
4
|
const react = require("react");
|
|
4
|
-
|
|
5
|
-
const main = await Promise.resolve().then(() => require("./devtools-BULOIqZ6.cjs")).then((n) => n.main);
|
|
5
|
+
const createDevtools = (context) => {
|
|
6
6
|
const wrapperElement = document.createElement("div");
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
unmount
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
|
|
7
|
+
let unmount;
|
|
8
|
+
async function initDevtools() {
|
|
9
|
+
const main = await Promise.resolve().then(() => require("./devtools-aidsR1fI.cjs")).then((n) => n.main);
|
|
10
|
+
if (!unmount) {
|
|
11
|
+
document.body.appendChild(wrapperElement);
|
|
12
|
+
unmount = main.createAdheseDevtools(wrapperElement, context);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
sdk.onInit(async () => {
|
|
16
|
+
var _a;
|
|
17
|
+
if (context.debug)
|
|
18
|
+
await initDevtools();
|
|
19
|
+
(_a = context.events) == null ? void 0 : _a.debugChange.addListener(async (debug) => {
|
|
20
|
+
if (debug)
|
|
21
|
+
await initDevtools();
|
|
22
|
+
else
|
|
23
|
+
dispose();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
function dispose() {
|
|
27
|
+
unmount == null ? void 0 : unmount();
|
|
28
|
+
unmount = void 0;
|
|
29
|
+
if (wrapperElement.parentElement)
|
|
30
|
+
wrapperElement.outerHTML = "";
|
|
31
|
+
}
|
|
32
|
+
sdk.onDispose(dispose);
|
|
33
|
+
};
|
|
34
|
+
const Devtools = react.lazy(() => Promise.resolve().then(() => require("./devtools-aidsR1fI.cjs")).then((n) => n.Devtools).then((module2) => ({ default: module2.Devtools })));
|
|
15
35
|
exports.Devtools = Devtools;
|
|
16
36
|
exports.createDevtools = createDevtools;
|
|
17
37
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import { type AdheseContext, type AdhesePlugin, onDispose, onInit } from '@adhese/sdk';\nimport { lazy } from 'react';\n\nexport const createDevtools: AdhesePlugin = (context: AdheseContext) => {\n const wrapperElement = document.createElement('div');\n let unmount: (() => void) | undefined;\n\n async function initDevtools(): Promise<void> {\n const main = await import('./main');\n\n if (!unmount) {\n document.body.appendChild(wrapperElement);\n\n unmount = main.createAdheseDevtools(wrapperElement, context);\n }\n }\n\n onInit(async () => {\n if (context.debug)\n await initDevtools();\n\n context.events?.debugChange.addListener(async (debug) => {\n if (debug)\n await initDevtools();\n else\n dispose();\n });\n });\n\n function dispose(): void {\n unmount?.();\n unmount = undefined;\n if (wrapperElement.parentElement)\n wrapperElement.outerHTML = '';\n }\n\n onDispose(dispose);\n};\n\n// eslint-disable-next-line ts/naming-convention\nexport const Devtools = lazy(() => import('./Devtools').then(module => ({ default: module.Devtools })));\n"],"names":["onInit","onDispose","lazy","module"],"mappings":";;;;AAGa,MAAA,iBAA+B,CAAC,YAA2B;AAChE,QAAA,iBAAiB,SAAS,cAAc,KAAK;AAC/C,MAAA;AAEJ,iBAAe,eAA8B;AACrC,UAAA,OAAO,MAAM,QAAO,QAAA,EAAA,KAAA,MAAA,QAAA,yBAAQ;AAElC,QAAI,CAAC,SAAS;AACH,eAAA,KAAK,YAAY,cAAc;AAE9B,gBAAA,KAAK,qBAAqB,gBAAgB,OAAO;AAAA,IAC7D;AAAA,EACF;AAEAA,MAAAA,OAAO,YAAY;;AACjB,QAAI,QAAQ;AACV,YAAM,aAAa;AAErB,kBAAQ,WAAR,mBAAgB,YAAY,YAAY,OAAO,UAAU;AACnD,UAAA;AACF,cAAM,aAAa;AAAA;AAEX;IAAA;AAAA,EACX,CACF;AAED,WAAS,UAAgB;AACb;AACA,cAAA;AACV,QAAI,eAAe;AACjB,qBAAe,YAAY;AAAA,EAC/B;AAEAC,MAAA,UAAU,OAAO;AACnB;AAGO,MAAM,WAAWC,MAAA,KAAK,MAAM,QAAO,QAAA,EAAA,KAAA,MAAA,QAAA,yBAAY,CAAA,EAAA,KAAA,OAAA,EAAA,QAAA,EAAE,KAAK,CAAAC,aAAW,EAAE,SAASA,QAAO,WAAW,CAAC;;;"}
|