@adhese/sdk-devtools 0.10.0 → 0.11.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/CHANGELOG.md +21 -0
- package/dist/{devtools-gR8ZWEgG.cjs → devtools-Cbms1xWf.cjs} +35 -34
- package/dist/devtools-Cbms1xWf.cjs.map +1 -0
- package/dist/{devtools-DbsxZEDX.js → devtools-CjRcI3Xd.js} +35 -34
- package/dist/devtools-CjRcI3Xd.js.map +1 -0
- package/dist/index.cjs +6 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/devtools-DbsxZEDX.js.map +0 -1
- package/dist/devtools-gR8ZWEgG.cjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @adhese/sdk-devtools
|
|
2
2
|
|
|
3
|
+
## 0.11.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- ef68972: Add hooks to context instead of global variable which could break when adhese was disposed
|
|
8
|
+
- Updated dependencies [2c01e34]
|
|
9
|
+
- Updated dependencies [ad9b38f]
|
|
10
|
+
- Updated dependencies [ef68972]
|
|
11
|
+
- @adhese/sdk-shared@0.6.0
|
|
12
|
+
|
|
13
|
+
## 0.11.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- 254aeb3: Sort slots in devtools by the order they appear on the page
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies [4cb01f8]
|
|
22
|
+
- @adhese/sdk-shared@0.5.0
|
|
23
|
+
|
|
3
24
|
## 0.10.0
|
|
4
25
|
|
|
5
26
|
### Minor Changes
|
|
@@ -296,26 +296,27 @@ function SlotsTable({ adheseContext }) {
|
|
|
296
296
|
disposeWatcher();
|
|
297
297
|
};
|
|
298
298
|
}, [adheseContext]);
|
|
299
|
-
const formattedSlots = react.useMemo(() => slots.map((slot) => {
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
299
|
+
const formattedSlots = react.useMemo(() => slots.map((slot) => ({
|
|
300
|
+
...slot,
|
|
301
|
+
parameters: Array.from(slot.parameters.entries())
|
|
302
|
+
})).toSorted((a, b) => {
|
|
303
|
+
var _a, _b;
|
|
304
|
+
const offsetA = ((_a = a.element) == null ? void 0 : _a.getBoundingClientRect().top) ?? 0;
|
|
305
|
+
const offsetB = ((_b = b.element) == null ? void 0 : _b.getBoundingClientRect().top) ?? 0;
|
|
306
|
+
return offsetA - offsetB;
|
|
306
307
|
}), [slots]);
|
|
307
|
-
const slotParametersExist = formattedSlots.some((formattedSlot) => formattedSlot.parameters.length > 0);
|
|
308
|
-
const previewExist = formattedSlots.some((formattedSlot) => {
|
|
308
|
+
const slotParametersExist = react.useMemo(() => formattedSlots.some((formattedSlot) => formattedSlot.parameters.length > 0), [formattedSlots]);
|
|
309
|
+
const previewExist = react.useMemo(() => formattedSlots.some((formattedSlot) => {
|
|
309
310
|
var _a;
|
|
310
|
-
return (_a = formattedSlot.
|
|
311
|
-
});
|
|
312
|
-
const slotCodeExists = formattedSlots.some((formattedSlot) => formattedSlot.slot);
|
|
311
|
+
return (_a = formattedSlot.data) == null ? void 0 : _a.preview;
|
|
312
|
+
}), [formattedSlots]);
|
|
313
|
+
const slotCodeExists = react.useMemo(() => formattedSlots.some((formattedSlot) => formattedSlot.slot), [formattedSlots]);
|
|
313
314
|
const origins = react.useMemo(() => {
|
|
314
315
|
const set = /* @__PURE__ */ new Set();
|
|
315
316
|
for (const slot of formattedSlots) {
|
|
316
|
-
const {
|
|
317
|
-
if (
|
|
318
|
-
set.add(
|
|
317
|
+
const { data } = slot;
|
|
318
|
+
if (data)
|
|
319
|
+
set.add(data.origin);
|
|
319
320
|
}
|
|
320
321
|
return Array.from(set);
|
|
321
322
|
}, [formattedSlots]);
|
|
@@ -338,7 +339,7 @@ function SlotsTable({ adheseContext }) {
|
|
|
338
339
|
previewExist && /* @__PURE__ */ jsxRuntime.jsx(TableHead, { children: "Preview" })
|
|
339
340
|
] }) }),
|
|
340
341
|
/* @__PURE__ */ jsxRuntime.jsx(TableBody, { children: formattedSlots.map(({
|
|
341
|
-
|
|
342
|
+
data,
|
|
342
343
|
name,
|
|
343
344
|
format,
|
|
344
345
|
location,
|
|
@@ -368,53 +369,53 @@ function SlotsTable({ adheseContext }) {
|
|
|
368
369
|
) }),
|
|
369
370
|
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: location }),
|
|
370
371
|
slotCodeExists && /* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: slot ?? "" }),
|
|
371
|
-
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: !(
|
|
372
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: !(data == null ? void 0 : data.adFormat) || (data == null ? void 0 : data.adFormat) === format ? format : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
372
373
|
/* @__PURE__ */ jsxRuntime.jsx("del", { className: "text-red-300 italic", children: format }),
|
|
373
|
-
/* @__PURE__ */ jsxRuntime.jsx("ins", { className: "no-underline text-green-700", children:
|
|
374
|
+
/* @__PURE__ */ jsxRuntime.jsx("ins", { className: "no-underline text-green-700", children: data == null ? void 0 : data.adFormat })
|
|
374
375
|
] }) }),
|
|
375
|
-
origins.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (
|
|
376
|
+
origins.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (data == null ? void 0 : data.origin) && /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: cn(slotIndexBadgeClasses[origins.indexOf(data.origin) % slotIndexBadgeClasses.length], "text-white"), children: data.origin.toLowerCase() }) }),
|
|
376
377
|
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "outline", className: cn(status === "error" ? "bg-red-500 text-red-50" : ""), children: renderStatusMap[status] }) }),
|
|
377
|
-
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (
|
|
378
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (data == null ? void 0 : data.orderId) && (data == null ? void 0 : data.orderId) !== "0" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
378
379
|
"a",
|
|
379
380
|
{
|
|
380
|
-
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/editCampaign/${
|
|
381
|
+
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/editCampaign/${data.orderId}`,
|
|
381
382
|
target: "_blank",
|
|
382
383
|
referrerPolicy: "no-referrer",
|
|
383
384
|
className: cn(buttonVariants({
|
|
384
385
|
variant: "ghost",
|
|
385
386
|
size: "sm"
|
|
386
387
|
})),
|
|
387
|
-
children:
|
|
388
|
+
children: data.orderId
|
|
388
389
|
}
|
|
389
390
|
) : "-" }),
|
|
390
|
-
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (
|
|
391
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (data == null ? void 0 : data.adspaceId) && (data == null ? void 0 : data.adspaceId) !== "0" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
391
392
|
"a",
|
|
392
393
|
{
|
|
393
|
-
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/bookingDetail/${
|
|
394
|
+
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/bookingDetail/${data.adspaceId}/${data.orderId}`,
|
|
394
395
|
target: "_blank",
|
|
395
396
|
referrerPolicy: "no-referrer",
|
|
396
397
|
className: cn(buttonVariants({
|
|
397
398
|
variant: "ghost",
|
|
398
399
|
size: "sm"
|
|
399
400
|
})),
|
|
400
|
-
children:
|
|
401
|
+
children: data.adspaceId
|
|
401
402
|
}
|
|
402
403
|
) : "-" }),
|
|
403
|
-
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (
|
|
404
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (data == null ? void 0 : data.libId) && (data == null ? void 0 : data.orderId) !== "0" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
404
405
|
"a",
|
|
405
406
|
{
|
|
406
|
-
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/creativeDetail/${
|
|
407
|
+
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/creativeDetail/${data.libId}/${data.orderId}`,
|
|
407
408
|
target: "_blank",
|
|
408
409
|
referrerPolicy: "no-referrer",
|
|
409
410
|
className: cn(buttonVariants({
|
|
410
411
|
variant: "ghost",
|
|
411
412
|
size: "sm"
|
|
412
413
|
})),
|
|
413
|
-
children:
|
|
414
|
+
children: data.libId
|
|
414
415
|
}
|
|
415
416
|
) : "-" }),
|
|
416
|
-
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (
|
|
417
|
-
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (
|
|
417
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (data == null ? void 0 : data.id) ?? "-" }),
|
|
418
|
+
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (data == null ? void 0 : data.ext) ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "outline", children: data.ext }) : "-" }),
|
|
418
419
|
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: isImpressionTracked ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: "bg-green-100 text-green-900 hover:bg-green-100", children: "Yes" }) : /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", children: "No" }) }),
|
|
419
420
|
/* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: isViewabilityTracked ? /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: "bg-green-100 text-green-900 hover:bg-green-100", children: "Yes" }) : /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", children: "No" }) }),
|
|
420
421
|
slotParametersExist && /* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: parameters.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(Sheet, { children: [
|
|
@@ -442,12 +443,12 @@ function SlotsTable({ adheseContext }) {
|
|
|
442
443
|
] })
|
|
443
444
|
] })
|
|
444
445
|
] }) }),
|
|
445
|
-
previewExist && /* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (
|
|
446
|
+
previewExist && /* @__PURE__ */ jsxRuntime.jsx(TableCell, { children: (data == null ? void 0 : data.preview) && /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: "bg-amber-400 text-amber-950 hover:bg-amber-400", children: "PREVIEW" }) })
|
|
446
447
|
] }),
|
|
447
|
-
element && reactDom.createPortal(
|
|
448
|
+
element && status === "rendered" && reactDom.createPortal(
|
|
448
449
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-1 flex gap-2 items-start", children: [
|
|
449
450
|
/* @__PURE__ */ jsxRuntime.jsx(Badge, { className: cn(slotIndexBadgeClasses[index % slotIndexBadgeClasses.length], "text-white"), children: name }),
|
|
450
|
-
(
|
|
451
|
+
(data == null ? void 0 : data.preview) && /* @__PURE__ */ jsxRuntime.jsx(Badge, { className: "bg-amber-400 text-amber-950 hover:bg-amber-400", children: "PREVIEW" })
|
|
451
452
|
] }),
|
|
452
453
|
element
|
|
453
454
|
)
|
|
@@ -812,4 +813,4 @@ const main = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty
|
|
|
812
813
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
813
814
|
exports.Devtools = Devtools$1;
|
|
814
815
|
exports.main = main;
|
|
815
|
-
//# sourceMappingURL=devtools-
|
|
816
|
+
//# sourceMappingURL=devtools-Cbms1xWf.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools-Cbms1xWf.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","/* 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 { type UnwrapRef, watch } from '@adhese/sdk-shared';\nimport { cn } from '../utils';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\nimport { buttonVariants } from './button';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './sheet';\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\nconst renderStatusMap = {\n initializing: 'Initializing',\n initialized: 'Initialized',\n loading: 'Loading',\n loaded: 'Loaded',\n rendering: 'Rendering',\n rendered: 'Rendered',\n empty: 'Empty',\n error: 'Error',\n} as const satisfies Record<UnwrapRef<AdheseSlot['status']>, string>;\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 const disposeWatcher = watch(() => adheseContext.slots, (newSlots) => {\n setSlots(Array.from(newSlots.values()));\n }, { immediate: true, deep: true });\n\n return (): void => {\n disposeWatcher();\n };\n }, [adheseContext]);\n\n const formattedSlots = useMemo(() => slots.map(slot => ({\n ...slot,\n parameters: Array.from(slot.parameters.entries()),\n })).toSorted((a, b) => {\n const offsetA = a.element?.getBoundingClientRect().top ?? 0;\n const offsetB = b.element?.getBoundingClientRect().top ?? 0;\n\n return offsetA - offsetB;\n }), [slots]);\n\n const slotParametersExist = useMemo(() => formattedSlots.some(formattedSlot => formattedSlot.parameters.length > 0), [formattedSlots]);\n const previewExist = useMemo(() => formattedSlots.some(formattedSlot => formattedSlot.data?.preview), [formattedSlots]);\n const slotCodeExists = useMemo(() => formattedSlots.some(formattedSlot => formattedSlot.slot), [formattedSlots]);\n\n const origins: ReadonlyArray<string> = useMemo(() => {\n const set = new Set<string>();\n\n for (const slot of formattedSlots) {\n const { data } = slot;\n\n if (data)\n set.add(data.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>Location</TableHead>\n {slotCodeExists && <TableHead>Slot</TableHead>}\n <TableHead>Format</TableHead>\n {origins.length > 1 && <TableHead>Origin</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>Impression tracked</TableHead>\n <TableHead>Viewability tracked</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 data,\n name,\n format,\n location,\n status,\n isViewabilityTracked,\n isImpressionTracked,\n element,\n parameters,\n slot,\n id,\n }, index) => (\n <Fragment key={id}>\n <TableRow id={name}>\n <TableCell className=\"font-medium\">\n <button onClick={() => {\n if (element) {\n element.scrollIntoView();\n element.style.outline = 'solid 5px red';\n\n setTimeout(() => {\n element.style.outline = '';\n }, 1000);\n }\n }}\n >\n <Badge className={cn(slotIndexBadgeClasses[index % slotIndexBadgeClasses.length], 'text-white')}>{name}</Badge>\n </button>\n </TableCell>\n <TableCell>{location}</TableCell>\n {slotCodeExists && <TableCell>{slot ?? ''}</TableCell>}\n <TableCell>\n {!data?.adFormat || data?.adFormat === format\n ? format\n : (\n <>\n <del className=\"text-red-300 italic\">{format}</del>\n <ins className=\"no-underline text-green-700\">{data?.adFormat}</ins>\n </>\n )}\n </TableCell>\n {origins.length > 1 && (\n <TableCell>\n {data?.origin && <Badge className={cn(slotIndexBadgeClasses[origins.indexOf(data.origin) % slotIndexBadgeClasses.length], 'text-white')}>{data.origin.toLowerCase()}</Badge>}\n </TableCell>\n )}\n <TableCell>\n <Badge variant=\"outline\" className={cn(status === 'error' ? 'bg-red-500 text-red-50' : '')}>\n {renderStatusMap[status]}\n </Badge>\n </TableCell>\n <TableCell>\n {data?.orderId && data?.orderId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/editCampaign/${data.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {data.orderId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>\n {data?.adspaceId && data?.adspaceId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/bookingDetail/${data.adspaceId}/${data.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {data.adspaceId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>\n {data?.libId && data?.orderId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/creativeDetail/${data.libId}/${data.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {data.libId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>{data?.id ?? '-'}</TableCell>\n <TableCell>{data?.ext ? <Badge variant=\"outline\">{data.ext}</Badge> : '-'}</TableCell>\n <TableCell>\n {isImpressionTracked\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 {isViewabilityTracked\n ? <Badge className=\"bg-green-100 text-green-900 hover:bg-green-100\">Yes</Badge>\n : <Badge variant=\"secondary\">No</Badge>}\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 {data?.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 {element && status === 'rendered' && 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 data?.preview && <Badge className=\"bg-amber-400 text-amber-950 hover:bg-amber-400\">PREVIEW</Badge>\n }\n </div>,\n element,\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 '@adhese/sdk-shared';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\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 </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 </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 { deleteCookie, getCookie, hasCookie, setCookie } from '@adhese/sdk-shared';\nimport { cn } 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 setCookie({\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(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","forwardRef","jsx","cva","Slot","SheetPrimitive","jsxs","Cross2Icon","useState","useEffect","watch","useMemo","Fragment","createPortal","TabsPrimitive","_a","SwitchPrimitives","LabelPrimitive","setCookie","getCookie","hasCookie","useCallback","deleteCookie","useId","useRef","createRoot","StrictMode"],"mappings":"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"}
|
|
@@ -275,26 +275,27 @@ function SlotsTable({ adheseContext }) {
|
|
|
275
275
|
disposeWatcher();
|
|
276
276
|
};
|
|
277
277
|
}, [adheseContext]);
|
|
278
|
-
const formattedSlots = useMemo(() => slots.map((slot) => {
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
278
|
+
const formattedSlots = useMemo(() => slots.map((slot) => ({
|
|
279
|
+
...slot,
|
|
280
|
+
parameters: Array.from(slot.parameters.entries())
|
|
281
|
+
})).toSorted((a, b) => {
|
|
282
|
+
var _a, _b;
|
|
283
|
+
const offsetA = ((_a = a.element) == null ? void 0 : _a.getBoundingClientRect().top) ?? 0;
|
|
284
|
+
const offsetB = ((_b = b.element) == null ? void 0 : _b.getBoundingClientRect().top) ?? 0;
|
|
285
|
+
return offsetA - offsetB;
|
|
285
286
|
}), [slots]);
|
|
286
|
-
const slotParametersExist = formattedSlots.some((formattedSlot) => formattedSlot.parameters.length > 0);
|
|
287
|
-
const previewExist = formattedSlots.some((formattedSlot) => {
|
|
287
|
+
const slotParametersExist = useMemo(() => formattedSlots.some((formattedSlot) => formattedSlot.parameters.length > 0), [formattedSlots]);
|
|
288
|
+
const previewExist = useMemo(() => formattedSlots.some((formattedSlot) => {
|
|
288
289
|
var _a;
|
|
289
|
-
return (_a = formattedSlot.
|
|
290
|
-
});
|
|
291
|
-
const slotCodeExists = formattedSlots.some((formattedSlot) => formattedSlot.slot);
|
|
290
|
+
return (_a = formattedSlot.data) == null ? void 0 : _a.preview;
|
|
291
|
+
}), [formattedSlots]);
|
|
292
|
+
const slotCodeExists = useMemo(() => formattedSlots.some((formattedSlot) => formattedSlot.slot), [formattedSlots]);
|
|
292
293
|
const origins = useMemo(() => {
|
|
293
294
|
const set = /* @__PURE__ */ new Set();
|
|
294
295
|
for (const slot of formattedSlots) {
|
|
295
|
-
const {
|
|
296
|
-
if (
|
|
297
|
-
set.add(
|
|
296
|
+
const { data } = slot;
|
|
297
|
+
if (data)
|
|
298
|
+
set.add(data.origin);
|
|
298
299
|
}
|
|
299
300
|
return Array.from(set);
|
|
300
301
|
}, [formattedSlots]);
|
|
@@ -317,7 +318,7 @@ function SlotsTable({ adheseContext }) {
|
|
|
317
318
|
previewExist && /* @__PURE__ */ jsx(TableHead, { children: "Preview" })
|
|
318
319
|
] }) }),
|
|
319
320
|
/* @__PURE__ */ jsx(TableBody, { children: formattedSlots.map(({
|
|
320
|
-
|
|
321
|
+
data,
|
|
321
322
|
name,
|
|
322
323
|
format,
|
|
323
324
|
location,
|
|
@@ -347,53 +348,53 @@ function SlotsTable({ adheseContext }) {
|
|
|
347
348
|
) }),
|
|
348
349
|
/* @__PURE__ */ jsx(TableCell, { children: location }),
|
|
349
350
|
slotCodeExists && /* @__PURE__ */ jsx(TableCell, { children: slot ?? "" }),
|
|
350
|
-
/* @__PURE__ */ jsx(TableCell, { children: !(
|
|
351
|
+
/* @__PURE__ */ jsx(TableCell, { children: !(data == null ? void 0 : data.adFormat) || (data == null ? void 0 : data.adFormat) === format ? format : /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
351
352
|
/* @__PURE__ */ jsx("del", { className: "text-red-300 italic", children: format }),
|
|
352
|
-
/* @__PURE__ */ jsx("ins", { className: "no-underline text-green-700", children:
|
|
353
|
+
/* @__PURE__ */ jsx("ins", { className: "no-underline text-green-700", children: data == null ? void 0 : data.adFormat })
|
|
353
354
|
] }) }),
|
|
354
|
-
origins.length > 1 && /* @__PURE__ */ jsx(TableCell, { children: (
|
|
355
|
+
origins.length > 1 && /* @__PURE__ */ jsx(TableCell, { children: (data == null ? void 0 : data.origin) && /* @__PURE__ */ jsx(Badge, { className: cn(slotIndexBadgeClasses[origins.indexOf(data.origin) % slotIndexBadgeClasses.length], "text-white"), children: data.origin.toLowerCase() }) }),
|
|
355
356
|
/* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(Badge, { variant: "outline", className: cn(status === "error" ? "bg-red-500 text-red-50" : ""), children: renderStatusMap[status] }) }),
|
|
356
|
-
/* @__PURE__ */ jsx(TableCell, { children: (
|
|
357
|
+
/* @__PURE__ */ jsx(TableCell, { children: (data == null ? void 0 : data.orderId) && (data == null ? void 0 : data.orderId) !== "0" ? /* @__PURE__ */ jsx(
|
|
357
358
|
"a",
|
|
358
359
|
{
|
|
359
|
-
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/editCampaign/${
|
|
360
|
+
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/editCampaign/${data.orderId}`,
|
|
360
361
|
target: "_blank",
|
|
361
362
|
referrerPolicy: "no-referrer",
|
|
362
363
|
className: cn(buttonVariants({
|
|
363
364
|
variant: "ghost",
|
|
364
365
|
size: "sm"
|
|
365
366
|
})),
|
|
366
|
-
children:
|
|
367
|
+
children: data.orderId
|
|
367
368
|
}
|
|
368
369
|
) : "-" }),
|
|
369
|
-
/* @__PURE__ */ jsx(TableCell, { children: (
|
|
370
|
+
/* @__PURE__ */ jsx(TableCell, { children: (data == null ? void 0 : data.adspaceId) && (data == null ? void 0 : data.adspaceId) !== "0" ? /* @__PURE__ */ jsx(
|
|
370
371
|
"a",
|
|
371
372
|
{
|
|
372
|
-
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/bookingDetail/${
|
|
373
|
+
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/bookingDetail/${data.adspaceId}/${data.orderId}`,
|
|
373
374
|
target: "_blank",
|
|
374
375
|
referrerPolicy: "no-referrer",
|
|
375
376
|
className: cn(buttonVariants({
|
|
376
377
|
variant: "ghost",
|
|
377
378
|
size: "sm"
|
|
378
379
|
})),
|
|
379
|
-
children:
|
|
380
|
+
children: data.adspaceId
|
|
380
381
|
}
|
|
381
382
|
) : "-" }),
|
|
382
|
-
/* @__PURE__ */ jsx(TableCell, { children: (
|
|
383
|
+
/* @__PURE__ */ jsx(TableCell, { children: (data == null ? void 0 : data.libId) && (data == null ? void 0 : data.orderId) !== "0" ? /* @__PURE__ */ jsx(
|
|
383
384
|
"a",
|
|
384
385
|
{
|
|
385
|
-
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/creativeDetail/${
|
|
386
|
+
href: `https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/creativeDetail/${data.libId}/${data.orderId}`,
|
|
386
387
|
target: "_blank",
|
|
387
388
|
referrerPolicy: "no-referrer",
|
|
388
389
|
className: cn(buttonVariants({
|
|
389
390
|
variant: "ghost",
|
|
390
391
|
size: "sm"
|
|
391
392
|
})),
|
|
392
|
-
children:
|
|
393
|
+
children: data.libId
|
|
393
394
|
}
|
|
394
395
|
) : "-" }),
|
|
395
|
-
/* @__PURE__ */ jsx(TableCell, { children: (
|
|
396
|
-
/* @__PURE__ */ jsx(TableCell, { children: (
|
|
396
|
+
/* @__PURE__ */ jsx(TableCell, { children: (data == null ? void 0 : data.id) ?? "-" }),
|
|
397
|
+
/* @__PURE__ */ jsx(TableCell, { children: (data == null ? void 0 : data.ext) ? /* @__PURE__ */ jsx(Badge, { variant: "outline", children: data.ext }) : "-" }),
|
|
397
398
|
/* @__PURE__ */ jsx(TableCell, { children: isImpressionTracked ? /* @__PURE__ */ jsx(Badge, { className: "bg-green-100 text-green-900 hover:bg-green-100", children: "Yes" }) : /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: "No" }) }),
|
|
398
399
|
/* @__PURE__ */ jsx(TableCell, { children: isViewabilityTracked ? /* @__PURE__ */ jsx(Badge, { className: "bg-green-100 text-green-900 hover:bg-green-100", children: "Yes" }) : /* @__PURE__ */ jsx(Badge, { variant: "secondary", children: "No" }) }),
|
|
399
400
|
slotParametersExist && /* @__PURE__ */ jsx(TableCell, { children: parameters.length > 0 && /* @__PURE__ */ jsxs(Sheet, { children: [
|
|
@@ -421,12 +422,12 @@ function SlotsTable({ adheseContext }) {
|
|
|
421
422
|
] })
|
|
422
423
|
] })
|
|
423
424
|
] }) }),
|
|
424
|
-
previewExist && /* @__PURE__ */ jsx(TableCell, { children: (
|
|
425
|
+
previewExist && /* @__PURE__ */ jsx(TableCell, { children: (data == null ? void 0 : data.preview) && /* @__PURE__ */ jsx(Badge, { className: "bg-amber-400 text-amber-950 hover:bg-amber-400", children: "PREVIEW" }) })
|
|
425
426
|
] }),
|
|
426
|
-
element && createPortal(
|
|
427
|
+
element && status === "rendered" && createPortal(
|
|
427
428
|
/* @__PURE__ */ jsxs("div", { className: "absolute inset-1 flex gap-2 items-start", children: [
|
|
428
429
|
/* @__PURE__ */ jsx(Badge, { className: cn(slotIndexBadgeClasses[index % slotIndexBadgeClasses.length], "text-white"), children: name }),
|
|
429
|
-
(
|
|
430
|
+
(data == null ? void 0 : data.preview) && /* @__PURE__ */ jsx(Badge, { className: "bg-amber-400 text-amber-950 hover:bg-amber-400", children: "PREVIEW" })
|
|
430
431
|
] }),
|
|
431
432
|
element
|
|
432
433
|
)
|
|
@@ -793,4 +794,4 @@ export {
|
|
|
793
794
|
Devtools$1 as D,
|
|
794
795
|
main as m
|
|
795
796
|
};
|
|
796
|
-
//# sourceMappingURL=devtools-
|
|
797
|
+
//# sourceMappingURL=devtools-CjRcI3Xd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools-CjRcI3Xd.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","/* 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 { type UnwrapRef, watch } from '@adhese/sdk-shared';\nimport { cn } from '../utils';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\nimport { buttonVariants } from './button';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './sheet';\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\nconst renderStatusMap = {\n initializing: 'Initializing',\n initialized: 'Initialized',\n loading: 'Loading',\n loaded: 'Loaded',\n rendering: 'Rendering',\n rendered: 'Rendered',\n empty: 'Empty',\n error: 'Error',\n} as const satisfies Record<UnwrapRef<AdheseSlot['status']>, string>;\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 const disposeWatcher = watch(() => adheseContext.slots, (newSlots) => {\n setSlots(Array.from(newSlots.values()));\n }, { immediate: true, deep: true });\n\n return (): void => {\n disposeWatcher();\n };\n }, [adheseContext]);\n\n const formattedSlots = useMemo(() => slots.map(slot => ({\n ...slot,\n parameters: Array.from(slot.parameters.entries()),\n })).toSorted((a, b) => {\n const offsetA = a.element?.getBoundingClientRect().top ?? 0;\n const offsetB = b.element?.getBoundingClientRect().top ?? 0;\n\n return offsetA - offsetB;\n }), [slots]);\n\n const slotParametersExist = useMemo(() => formattedSlots.some(formattedSlot => formattedSlot.parameters.length > 0), [formattedSlots]);\n const previewExist = useMemo(() => formattedSlots.some(formattedSlot => formattedSlot.data?.preview), [formattedSlots]);\n const slotCodeExists = useMemo(() => formattedSlots.some(formattedSlot => formattedSlot.slot), [formattedSlots]);\n\n const origins: ReadonlyArray<string> = useMemo(() => {\n const set = new Set<string>();\n\n for (const slot of formattedSlots) {\n const { data } = slot;\n\n if (data)\n set.add(data.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>Location</TableHead>\n {slotCodeExists && <TableHead>Slot</TableHead>}\n <TableHead>Format</TableHead>\n {origins.length > 1 && <TableHead>Origin</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>Impression tracked</TableHead>\n <TableHead>Viewability tracked</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 data,\n name,\n format,\n location,\n status,\n isViewabilityTracked,\n isImpressionTracked,\n element,\n parameters,\n slot,\n id,\n }, index) => (\n <Fragment key={id}>\n <TableRow id={name}>\n <TableCell className=\"font-medium\">\n <button onClick={() => {\n if (element) {\n element.scrollIntoView();\n element.style.outline = 'solid 5px red';\n\n setTimeout(() => {\n element.style.outline = '';\n }, 1000);\n }\n }}\n >\n <Badge className={cn(slotIndexBadgeClasses[index % slotIndexBadgeClasses.length], 'text-white')}>{name}</Badge>\n </button>\n </TableCell>\n <TableCell>{location}</TableCell>\n {slotCodeExists && <TableCell>{slot ?? ''}</TableCell>}\n <TableCell>\n {!data?.adFormat || data?.adFormat === format\n ? format\n : (\n <>\n <del className=\"text-red-300 italic\">{format}</del>\n <ins className=\"no-underline text-green-700\">{data?.adFormat}</ins>\n </>\n )}\n </TableCell>\n {origins.length > 1 && (\n <TableCell>\n {data?.origin && <Badge className={cn(slotIndexBadgeClasses[origins.indexOf(data.origin) % slotIndexBadgeClasses.length], 'text-white')}>{data.origin.toLowerCase()}</Badge>}\n </TableCell>\n )}\n <TableCell>\n <Badge variant=\"outline\" className={cn(status === 'error' ? 'bg-red-500 text-red-50' : '')}>\n {renderStatusMap[status]}\n </Badge>\n </TableCell>\n <TableCell>\n {data?.orderId && data?.orderId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/editCampaign/${data.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {data.orderId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>\n {data?.adspaceId && data?.adspaceId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/bookingDetail/${data.adspaceId}/${data.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {data.adspaceId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>\n {data?.libId && data?.orderId !== '0'\n ? (\n <a\n href={`https://${adheseContext.options.account}.adhese.org/campaigns.html#campaignDetail/creativeDetail/${data.libId}/${data.orderId}`}\n target=\"_blank\"\n referrerPolicy=\"no-referrer\"\n className={cn(buttonVariants({\n variant: 'ghost',\n size: 'sm',\n }))}\n >\n {data.libId}\n </a>\n )\n : '-'}\n </TableCell>\n <TableCell>{data?.id ?? '-'}</TableCell>\n <TableCell>{data?.ext ? <Badge variant=\"outline\">{data.ext}</Badge> : '-'}</TableCell>\n <TableCell>\n {isImpressionTracked\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 {isViewabilityTracked\n ? <Badge className=\"bg-green-100 text-green-900 hover:bg-green-100\">Yes</Badge>\n : <Badge variant=\"secondary\">No</Badge>}\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 {data?.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 {element && status === 'rendered' && 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 data?.preview && <Badge className=\"bg-amber-400 text-amber-950 hover:bg-amber-400\">PREVIEW</Badge>\n }\n </div>,\n element,\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 '@adhese/sdk-shared';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\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 </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 </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 { deleteCookie, getCookie, hasCookie, setCookie } from '@adhese/sdk-shared';\nimport { cn } 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 setCookie({\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(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":["Fragment","_a"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -3,13 +3,15 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const sdkShared = require("@adhese/sdk-shared");
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const devtoolsPlugin = (context, {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
hooks: {
|
|
7
|
+
onInit,
|
|
8
|
+
onDispose
|
|
9
|
+
}
|
|
8
10
|
}) => {
|
|
9
11
|
const wrapperElement = document.createElement("div");
|
|
10
12
|
let unmount;
|
|
11
13
|
async function initDevtools() {
|
|
12
|
-
const main = await Promise.resolve().then(() => require("./devtools-
|
|
14
|
+
const main = await Promise.resolve().then(() => require("./devtools-Cbms1xWf.cjs")).then((n) => n.main);
|
|
13
15
|
if (!unmount) {
|
|
14
16
|
document.body.appendChild(wrapperElement);
|
|
15
17
|
unmount = main.createAdheseDevtools(wrapperElement, context);
|
|
@@ -36,7 +38,7 @@ const devtoolsPlugin = (context, {
|
|
|
36
38
|
}
|
|
37
39
|
onDispose(dispose);
|
|
38
40
|
};
|
|
39
|
-
const Devtools = react.lazy(() => Promise.resolve().then(() => require("./devtools-
|
|
41
|
+
const Devtools = react.lazy(() => Promise.resolve().then(() => require("./devtools-Cbms1xWf.cjs")).then((n) => n.Devtools).then((module2) => ({ default: module2.Devtools })));
|
|
40
42
|
exports.Devtools = Devtools;
|
|
41
43
|
exports.devtoolsPlugin = devtoolsPlugin;
|
|
42
44
|
//# 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 { AdheseContext, AdhesePlugin } from '@adhese/sdk';\nimport { watch } from '@adhese/sdk-shared';\nimport { lazy } from 'react';\n\nexport const devtoolsPlugin: AdhesePlugin = (context: AdheseContext, {\n onInit,\n
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["import type { AdheseContext, AdhesePlugin } from '@adhese/sdk';\nimport { watch } from '@adhese/sdk-shared';\nimport { lazy } from 'react';\n\nexport const devtoolsPlugin: AdhesePlugin = (context: AdheseContext, {\n hooks: {\n onInit,\n onDispose,\n },\n}) => {\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(() => {\n watch(() => [context.debug, context.isDisposed], async ([debug, isDisposed]) => {\n if (debug && !isDisposed) {\n await initDevtools();\n\n if (context.isDisposed)\n dispose();\n }\n else {\n dispose();\n }\n }, {\n immediate: true,\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":["watch","lazy","module"],"mappings":";;;;AAIa,MAAA,iBAA+B,CAAC,SAAwB;AAAA,EACnE,OAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF,MAAM;AACE,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;AAEA,SAAO,MAAM;AACLA,oBAAA,MAAM,CAAC,QAAQ,OAAO,QAAQ,UAAU,GAAG,OAAO,CAAC,OAAO,UAAU,MAAM;AAC1E,UAAA,SAAS,CAAC,YAAY;AACxB,cAAM,aAAa;AAEnB,YAAI,QAAQ;AACF;MAAA,OAEP;AACK;MACV;AAAA,IAAA,GACC;AAAA,MACD,WAAW;AAAA,IAAA,CACZ;AAAA,EAAA,CACF;AAED,WAAS,UAAgB;AACb;AACA,cAAA;AACV,QAAI,eAAe;AACjB,qBAAe,YAAY;AAAA,EAC/B;AAEA,YAAU,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;;;"}
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { watch } from "@adhese/sdk-shared";
|
|
2
2
|
import { lazy } from "react";
|
|
3
3
|
const devtoolsPlugin = (context, {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
hooks: {
|
|
5
|
+
onInit,
|
|
6
|
+
onDispose
|
|
7
|
+
}
|
|
6
8
|
}) => {
|
|
7
9
|
const wrapperElement = document.createElement("div");
|
|
8
10
|
let unmount;
|
|
9
11
|
async function initDevtools() {
|
|
10
|
-
const main = await import("./devtools-
|
|
12
|
+
const main = await import("./devtools-CjRcI3Xd.js").then((n) => n.m);
|
|
11
13
|
if (!unmount) {
|
|
12
14
|
document.body.appendChild(wrapperElement);
|
|
13
15
|
unmount = main.createAdheseDevtools(wrapperElement, context);
|
|
@@ -34,7 +36,7 @@ const devtoolsPlugin = (context, {
|
|
|
34
36
|
}
|
|
35
37
|
onDispose(dispose);
|
|
36
38
|
};
|
|
37
|
-
const Devtools = lazy(() => import("./devtools-
|
|
39
|
+
const Devtools = lazy(() => import("./devtools-CjRcI3Xd.js").then((n) => n.D).then((module) => ({ default: module.Devtools })));
|
|
38
40
|
export {
|
|
39
41
|
Devtools,
|
|
40
42
|
devtoolsPlugin
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { AdheseContext, AdhesePlugin } from '@adhese/sdk';\nimport { watch } from '@adhese/sdk-shared';\nimport { lazy } from 'react';\n\nexport const devtoolsPlugin: AdhesePlugin = (context: AdheseContext, {\n onInit,\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { AdheseContext, AdhesePlugin } from '@adhese/sdk';\nimport { watch } from '@adhese/sdk-shared';\nimport { lazy } from 'react';\n\nexport const devtoolsPlugin: AdhesePlugin = (context: AdheseContext, {\n hooks: {\n onInit,\n onDispose,\n },\n}) => {\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(() => {\n watch(() => [context.debug, context.isDisposed], async ([debug, isDisposed]) => {\n if (debug && !isDisposed) {\n await initDevtools();\n\n if (context.isDisposed)\n dispose();\n }\n else {\n dispose();\n }\n }, {\n immediate: true,\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":[],"mappings":";;AAIa,MAAA,iBAA+B,CAAC,SAAwB;AAAA,EACnE,OAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF,MAAM;AACE,QAAA,iBAAiB,SAAS,cAAc,KAAK;AAC/C,MAAA;AAEJ,iBAAe,eAA8B;AACrC,UAAA,OAAO,MAAM,OAAO,wBAAQ;AAElC,QAAI,CAAC,SAAS;AACH,eAAA,KAAK,YAAY,cAAc;AAE9B,gBAAA,KAAK,qBAAqB,gBAAgB,OAAO;AAAA,IAC7D;AAAA,EACF;AAEA,SAAO,MAAM;AACL,UAAA,MAAM,CAAC,QAAQ,OAAO,QAAQ,UAAU,GAAG,OAAO,CAAC,OAAO,UAAU,MAAM;AAC1E,UAAA,SAAS,CAAC,YAAY;AACxB,cAAM,aAAa;AAEnB,YAAI,QAAQ;AACF;MAAA,OAEP;AACK;MACV;AAAA,IAAA,GACC;AAAA,MACD,WAAW;AAAA,IAAA,CACZ;AAAA,EAAA,CACF;AAED,WAAS,UAAgB;AACb;AACA,cAAA;AACV,QAAI,eAAe;AACjB,qBAAe,YAAY;AAAA,EAC/B;AAEA,YAAU,OAAO;AACnB;AAGO,MAAM,WAAW,KAAK,MAAM,OAAO,wBAAY,EAAA,KAAA,OAAA,EAAA,CAAA,EAAE,KAAK,CAAA,YAAW,EAAE,SAAS,OAAO,WAAW,CAAC;"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adhese/sdk-devtools",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.1",
|
|
5
5
|
"description": "Adhese SDK Devtools",
|
|
6
6
|
"license": "GPL-3.0",
|
|
7
7
|
"repository": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"react-dom": ">=16.13"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@adhese/sdk-shared": "^0.
|
|
34
|
+
"@adhese/sdk-shared": "^0.6.0",
|
|
35
35
|
"@radix-ui/react-dialog": "^1.0.5",
|
|
36
36
|
"@radix-ui/react-icons": "^1.3.0",
|
|
37
37
|
"@radix-ui/react-label": "^2.0.2",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"devtools-DbsxZEDX.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","/* 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 { type UnwrapRef, watch } from '@adhese/sdk-shared';\nimport { cn } from '../utils';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\nimport { buttonVariants } from './button';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './sheet';\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\nconst renderStatusMap = {\n initializing: 'Initializing',\n initialized: 'Initialized',\n loading: 'Loading',\n loaded: 'Loaded',\n rendering: 'Rendering',\n rendered: 'Rendered',\n empty: 'Empty',\n error: 'Error',\n} as const satisfies Record<UnwrapRef<AdheseSlot['status']>, string>;\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 const disposeWatcher = watch(() => adheseContext.slots, (newSlots) => {\n setSlots(Array.from(newSlots.values()));\n }, { immediate: true, deep: true });\n\n return (): void => {\n disposeWatcher();\n };\n }, [adheseContext]);\n\n const formattedSlots = useMemo(() => slots.map((slot) => {\n const iframe = slot.element;\n\n return ({\n ...slot,\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 const slotCodeExists = formattedSlots.some(formattedSlot => formattedSlot.slot);\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>Location</TableHead>\n {slotCodeExists && <TableHead>Slot</TableHead>}\n <TableHead>Format</TableHead>\n {origins.length > 1 && <TableHead>Origin</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>Impression tracked</TableHead>\n <TableHead>Viewability tracked</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 element,\n parameters,\n slot,\n id,\n }, index) => (\n <Fragment key={id}>\n <TableRow id={name}>\n <TableCell className=\"font-medium\">\n <button onClick={() => {\n if (element) {\n element.scrollIntoView();\n element.style.outline = 'solid 5px red';\n\n setTimeout(() => {\n element.style.outline = '';\n }, 1000);\n }\n }}\n >\n <Badge className={cn(slotIndexBadgeClasses[index % slotIndexBadgeClasses.length], 'text-white')}>{name}</Badge>\n </button>\n </TableCell>\n <TableCell>{location}</TableCell>\n {slotCodeExists && <TableCell>{slot ?? ''}</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>\n <Badge variant=\"outline\" className={cn(status === 'error' ? 'bg-red-500 text-red-50' : '')}>\n {renderStatusMap[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 {isImpressionTracked\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 {isViewabilityTracked\n ? <Badge className=\"bg-green-100 text-green-900 hover:bg-green-100\">Yes</Badge>\n : <Badge variant=\"secondary\">No</Badge>}\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 {element && 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 element,\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 '@adhese/sdk-shared';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\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 </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 </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 { deleteCookie, getCookie, hasCookie, setCookie } from '@adhese/sdk-shared';\nimport { cn } 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 setCookie({\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(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":["Fragment","_a"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"devtools-gR8ZWEgG.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","/* 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 { type UnwrapRef, watch } from '@adhese/sdk-shared';\nimport { cn } from '../utils';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\nimport { buttonVariants } from './button';\nimport { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from './sheet';\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\nconst renderStatusMap = {\n initializing: 'Initializing',\n initialized: 'Initialized',\n loading: 'Loading',\n loaded: 'Loaded',\n rendering: 'Rendering',\n rendered: 'Rendered',\n empty: 'Empty',\n error: 'Error',\n} as const satisfies Record<UnwrapRef<AdheseSlot['status']>, string>;\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 const disposeWatcher = watch(() => adheseContext.slots, (newSlots) => {\n setSlots(Array.from(newSlots.values()));\n }, { immediate: true, deep: true });\n\n return (): void => {\n disposeWatcher();\n };\n }, [adheseContext]);\n\n const formattedSlots = useMemo(() => slots.map((slot) => {\n const iframe = slot.element;\n\n return ({\n ...slot,\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 const slotCodeExists = formattedSlots.some(formattedSlot => formattedSlot.slot);\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>Location</TableHead>\n {slotCodeExists && <TableHead>Slot</TableHead>}\n <TableHead>Format</TableHead>\n {origins.length > 1 && <TableHead>Origin</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>Impression tracked</TableHead>\n <TableHead>Viewability tracked</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 element,\n parameters,\n slot,\n id,\n }, index) => (\n <Fragment key={id}>\n <TableRow id={name}>\n <TableCell className=\"font-medium\">\n <button onClick={() => {\n if (element) {\n element.scrollIntoView();\n element.style.outline = 'solid 5px red';\n\n setTimeout(() => {\n element.style.outline = '';\n }, 1000);\n }\n }}\n >\n <Badge className={cn(slotIndexBadgeClasses[index % slotIndexBadgeClasses.length], 'text-white')}>{name}</Badge>\n </button>\n </TableCell>\n <TableCell>{location}</TableCell>\n {slotCodeExists && <TableCell>{slot ?? ''}</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>\n <Badge variant=\"outline\" className={cn(status === 'error' ? 'bg-red-500 text-red-50' : '')}>\n {renderStatusMap[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 {isImpressionTracked\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 {isViewabilityTracked\n ? <Badge className=\"bg-green-100 text-green-900 hover:bg-green-100\">Yes</Badge>\n : <Badge variant=\"secondary\">No</Badge>}\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 {element && 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 element,\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 '@adhese/sdk-shared';\nimport { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table';\nimport { Badge } from './badge';\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 </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 </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 { deleteCookie, getCookie, hasCookie, setCookie } from '@adhese/sdk-shared';\nimport { cn } 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 setCookie({\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(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","forwardRef","jsx","cva","Slot","SheetPrimitive","jsxs","Cross2Icon","useState","useEffect","watch","useMemo","Fragment","createPortal","TabsPrimitive","_a","SwitchPrimitives","LabelPrimitive","setCookie","getCookie","hasCookie","useCallback","deleteCookie","useId","useRef","createRoot","StrictMode"],"mappings":"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"}
|