@stackable-labs/embeddables 1.70.0 → 1.71.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/react.js +223 -224
- package/dist/stackable-widget.external.js +2 -2
- package/dist/stackable-widget.js +12 -12
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(d,be){typeof exports=="object"&&typeof module<"u"?be(require("react/jsx-runtime"),require("react-dom/client"),require("react"),require("react-dom")):typeof define=="function"&&define.amd?define(["react/jsx-runtime","react-dom/client","react","react-dom"],be):(d=typeof globalThis<"u"?globalThis:d||self,be(d.jsxRuntime,d.ReactDOM,d.React,d.ReactDOM))})(this,(function(d,be,x,Ho){"use strict";var fb=Object.defineProperty;var pb=(d,be,x)=>be in d?fb(d,be,{enumerable:!0,configurable:!0,writable:!0,value:x}):d[be]=x;var rr=(d,be,x)=>pb(d,typeof be!="symbol"?be+"":be,x);function ar(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const p=ar(x),Ut=ar(Ho),Ol='/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--color-red-100:oklch(93.6% .032 17.717);--color-red-800:oklch(44.4% .177 26.899);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-800:oklch(47.3% .137 46.201);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-800:oklch(43.2% .095 166.913);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-800:oklch(42.4% .199 265.638);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-800:oklch(43.8% .218 303.724);--color-pink-100:oklch(94.8% .028 342.258);--color-pink-800:oklch(45.9% .187 3.815);--color-gray-800:oklch(27.8% .033 256.848);--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-geist-sans,ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);--default-mono-font-family:var(--font-geist-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}}body{background-color:var(--background);color:var(--foreground)}*,:before,:after{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-colored:0 0 #0000;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*,:before,:after{outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}}:host{background-color:var(--background);color:var(--foreground)}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.right-8{right:calc(var(--spacing) * 8)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-8{bottom:calc(var(--spacing) * 8)}.bottom-24{bottom:calc(var(--spacing) * 24)}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-1000{z-index:1000}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.-mt-2\\.5{margin-top:calc(var(--spacing) * -2.5)}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-4{margin-right:calc(var(--spacing) * 4)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.-ml-2\\.5{margin-left:calc(var(--spacing) * -2.5)}.block{display:block}.flex{display:flex}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.h-0\\.5{height:calc(var(--spacing) * .5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-24{height:calc(var(--spacing) * 24)}.h-32{height:calc(var(--spacing) * 32)}.h-48{height:calc(var(--spacing) * 48)}.h-64{height:calc(var(--spacing) * 64)}.h-\\[700px\\]{height:700px}.h-auto{height:auto}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-0\\.5{width:calc(var(--spacing) * .5)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-48{width:calc(var(--spacing) * 48)}.w-\\[900px\\]{width:900px}.w-full{width:100%}.max-w-\\[200px\\]{max-width:200px}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.origin-bottom-right{transform-origin:100% 100%}.translate-y-0{--tw-translate-y:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing) * 2);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-115{--tw-scale-x:115%;--tw-scale-y:115%;--tw-scale-z:115%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-125{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing) * 0)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-12{gap:calc(var(--spacing) * 12)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-border{border-color:var(--border)}.border-transparent{border-color:#0000}.border-zinc-200{border-color:#e4e4e4}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background{background-color:var(--background)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-foreground\\/35{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.bg-foreground\\/35{background-color:color-mix(in oklab,var(--foreground) 35%,transparent)}}.bg-foreground\\/70{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.bg-foreground\\/70{background-color:color-mix(in oklab,var(--foreground) 70%,transparent)}}.bg-gray-100{background-color:#f3f4f6}.bg-muted{background-color:var(--muted)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-100{background-color:var(--color-red-100)}.bg-transparent{background-color:#0000}.bg-white{background-color:#fff}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pb-0{padding-bottom:calc(var(--spacing) * 0)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.\\!text-muted-foreground{color:var(--muted-foreground)!important}.text-amber-800{color:var(--color-amber-800)}.text-blue-800{color:var(--color-blue-800)}.text-destructive{color:var(--destructive)}.text-emerald-800{color:var(--color-emerald-800)}.text-foreground,.text-foreground\\/70{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\\/70{color:color-mix(in oklab,var(--foreground) 70%,transparent)}}.text-foreground\\/75{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\\/75{color:color-mix(in oklab,var(--foreground) 75%,transparent)}}.text-gray-800{color:var(--color-gray-800)}.text-muted-foreground{color:var(--muted-foreground)}.text-pink-800{color:var(--color-pink-800)}.text-purple-800{color:var(--color-purple-800)}.text-red-800{color:var(--color-red-800)}.text-zinc-300{color:#d4d4d4}.text-zinc-500{color:#727272}.opacity-0{opacity:0}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_0_1px_rgba\\(255\\,255\\,255\\,0\\.16\\)\\,0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.22\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#ffffff29), 0 0 0 1px var(--tw-shadow-color,#00000038);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-background{--tw-ring-color:var(--background)}.ring-zinc-200{--tw-ring-color:oklch(92% 0 0)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.running{animation-play-state:running}@media(hover:hover){.group-hover\\/resize\\:bg-foreground\\/55:is(:where(.group\\/resize):hover *){background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.group-hover\\/resize\\:bg-foreground\\/55:is(:where(.group\\/resize):hover *){background-color:color-mix(in oklab,var(--foreground) 55%,transparent)}}.group-hover\\/resize\\:opacity-100:is(:where(.group\\/resize):hover *){opacity:1}.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\\:cursor-pointer:hover{cursor:pointer}.hover\\:bg-accent\\/70:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-accent\\/70:hover{background-color:color-mix(in oklab,var(--accent) 70%,transparent)}}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:text-zinc-900:hover{color:#181818}.hover\\:opacity-100:hover{opacity:1}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-ring\\/40:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\\:ring-ring\\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 40%, transparent)}}.dark\\:border-zinc-300:is(.dark *){border-color:#d4d4d4}.dark\\:bg-background:is(.dark *){background-color:var(--background)}.dark\\:bg-white:is(.dark *){background-color:#fff}.dark\\:ring-zinc-300:is(.dark *){--tw-ring-color:oklch(87.1% 0 0)}@media(hover:hover){.dark\\:group-hover\\/resize\\:bg-white:is(.dark *):is(:where(.group\\/resize):hover *){background-color:#fff}}.\\[\\&\\[data-state\\=open\\]\\>svg\\]\\:rotate-90[data-state=open]>svg{rotate:90deg}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:host{--radius:.625rem;--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08)}:host([theme=dark]),:host(.dark){--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439)}@keyframes sparkle-swipe-in{0%{opacity:0;color:#facc15;filter:drop-shadow(-8px 8px #a855f700)}28%{opacity:1;color:#d8b4fe;filter:drop-shadow(-2px 2px 8px #a855f7cc)}55%{color:#a855f7;filter:drop-shadow(3px -3px 10px #a855f7f2)}to{opacity:1;color:#facc15;filter:drop-shadow(0 0 #a855f700)}}@keyframes sparkle-twinkle{0%,to{opacity:.82;filter:drop-shadow(0 0 #facc1500)}50%{opacity:1;filter:drop-shadow(0 0 7px #facc1580)}}.sparkle-icon{color:#facc15;vertical-align:middle;transform-origin:50%;will-change:transform,filter,color,opacity;line-height:1;animation:1.15s cubic-bezier(.22,1,.36,1) sparkle-swipe-in,2.1s ease-in-out 1.15s infinite sparkle-twinkle;display:inline-block;transform:rotate(10deg)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}',Ll=()=>{try{return"b96c51bd-1ef3-4dce-8456-085888afe737"}catch{return"dev"}},tt=new Map,zl=async(e,t)=>{const o=tt.get(e.id);if(o)return o;if(!e.bundleUrl)return console.warn(`[SandboxManager] Extension ${e.id} is missing bundleUrl — skipping sandbox creation`),null;const n=document.createElement("iframe");if(n.setAttribute("sandbox","allow-scripts allow-same-origin"),n.style.display="none",n.style.width="0",n.style.height="0",n.style.border="none",e.bundleUrl.startsWith("http")&&!e.bundleUrl.endsWith(".js")){const i=new URL(e.bundleUrl);i.searchParams.set("__extensionId",e.id),n.src=i.toString(),console.warn(`[SandboxManager] Creating dev sandbox for ${e.id}, injecting __extensionId via query param, url: ${i.toString()}`)}else{let i="";try{const u=Ll();i=await(await fetch(`${e.bundleUrl}?_b=${u}`)).text()}catch(u){console.error(`[SandboxManager] Failed to fetch bundle for ${e.id}:`,u)}const l=`<!DOCTYPE html>
|
|
1
|
+
(function(d,be){typeof exports=="object"&&typeof module<"u"?be(require("react/jsx-runtime"),require("react-dom/client"),require("react"),require("react-dom")):typeof define=="function"&&define.amd?define(["react/jsx-runtime","react-dom/client","react","react-dom"],be):(d=typeof globalThis<"u"?globalThis:d||self,be(d.jsxRuntime,d.ReactDOM,d.React,d.ReactDOM))})(this,(function(d,be,x,Ho){"use strict";var fb=Object.defineProperty;var pb=(d,be,x)=>be in d?fb(d,be,{enumerable:!0,configurable:!0,writable:!0,value:x}):d[be]=x;var rr=(d,be,x)=>pb(d,typeof be!="symbol"?be+"":be,x);function ar(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const o in e)if(o!=="default"){const n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:()=>e[o]})}}return t.default=e,Object.freeze(t)}const p=ar(x),Ut=ar(Ho),Ol='/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--color-red-100:oklch(93.6% .032 17.717);--color-red-800:oklch(44.4% .177 26.899);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-800:oklch(47.3% .137 46.201);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-800:oklch(43.2% .095 166.913);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-800:oklch(42.4% .199 265.638);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-800:oklch(43.8% .218 303.724);--color-pink-100:oklch(94.8% .028 342.258);--color-pink-800:oklch(45.9% .187 3.815);--color-gray-800:oklch(27.8% .033 256.848);--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-geist-sans,ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);--default-mono-font-family:var(--font-geist-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}}body{background-color:var(--background);color:var(--foreground)}*,:before,:after{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:rotateX(0);--tw-rotate-y:rotateY(0);--tw-rotate-z:rotateZ(0);--tw-skew-x:skewX(0);--tw-skew-y:skewY(0);--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-colored:0 0 #0000;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*,:before,:after{outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}}:host{background-color:var(--background);color:var(--foreground)}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.right-8{right:calc(var(--spacing) * 8)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-8{bottom:calc(var(--spacing) * 8)}.bottom-24{bottom:calc(var(--spacing) * 24)}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-1000{z-index:1000}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.-mt-2\\.5{margin-top:calc(var(--spacing) * -2.5)}.mt-0\\.5{margin-top:calc(var(--spacing) * .5)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-4{margin-right:calc(var(--spacing) * 4)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.-ml-2\\.5{margin-left:calc(var(--spacing) * -2.5)}.block{display:block}.flex{display:flex}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.h-0\\.5{height:calc(var(--spacing) * .5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-20{height:calc(var(--spacing) * 20)}.h-24{height:calc(var(--spacing) * 24)}.h-32{height:calc(var(--spacing) * 32)}.h-48{height:calc(var(--spacing) * 48)}.h-64{height:calc(var(--spacing) * 64)}.h-\\[700px\\]{height:700px}.h-auto{height:auto}.h-full{height:100%}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-0\\.5{width:calc(var(--spacing) * .5)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-48{width:calc(var(--spacing) * 48)}.w-\\[900px\\]{width:900px}.w-full{width:100%}.max-w-\\[200px\\]{max-width:200px}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.origin-bottom-right{transform-origin:100% 100%}.translate-y-0{--tw-translate-y:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-2{--tw-translate-y:calc(var(--spacing) * 2);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-115{--tw-scale-x:115%;--tw-scale-y:115%;--tw-scale-z:115%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-125{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing) * 0)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-12{gap:calc(var(--spacing) * 12)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-border{border-color:var(--border)}.border-transparent{border-color:#0000}.border-zinc-200{border-color:#e4e4e4}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background{background-color:var(--background)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-foreground\\/35{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.bg-foreground\\/35{background-color:color-mix(in oklab,var(--foreground) 35%,transparent)}}.bg-foreground\\/70{background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.bg-foreground\\/70{background-color:color-mix(in oklab,var(--foreground) 70%,transparent)}}.bg-gray-100{background-color:#f3f4f6}.bg-muted{background-color:var(--muted)}.bg-pink-100{background-color:var(--color-pink-100)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-100{background-color:var(--color-red-100)}.bg-transparent{background-color:#0000}.bg-white{background-color:#fff}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pb-0{padding-bottom:calc(var(--spacing) * 0)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.\\!text-muted-foreground{color:var(--muted-foreground)!important}.text-amber-800{color:var(--color-amber-800)}.text-blue-800{color:var(--color-blue-800)}.text-destructive{color:var(--destructive)}.text-emerald-800{color:var(--color-emerald-800)}.text-foreground,.text-foreground\\/70{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\\/70{color:color-mix(in oklab,var(--foreground) 70%,transparent)}}.text-foreground\\/75{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\\/75{color:color-mix(in oklab,var(--foreground) 75%,transparent)}}.text-gray-800{color:var(--color-gray-800)}.text-muted-foreground{color:var(--muted-foreground)}.text-pink-800{color:var(--color-pink-800)}.text-purple-800{color:var(--color-purple-800)}.text-red-800{color:var(--color-red-800)}.text-zinc-300{color:#d4d4d4}.text-zinc-500{color:#727272}.opacity-0{opacity:0}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\\[0_0_0_1px_rgba\\(255\\,255\\,255\\,0\\.16\\)\\,0_0_0_1px_rgba\\(0\\,0\\,0\\,0\\.22\\)\\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#ffffff29), 0 0 0 1px var(--tw-shadow-color,#00000038);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-background{--tw-ring-color:var(--background)}.ring-zinc-200{--tw-ring-color:oklch(92% 0 0)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.running{animation-play-state:running}@media(hover:hover){.group-hover\\/resize\\:bg-foreground\\/55:is(:where(.group\\/resize):hover *){background-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.group-hover\\/resize\\:bg-foreground\\/55:is(:where(.group\\/resize):hover *){background-color:color-mix(in oklab,var(--foreground) 55%,transparent)}}.group-hover\\/resize\\:opacity-100:is(:where(.group\\/resize):hover *){opacity:1}.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\\:cursor-pointer:hover{cursor:pointer}.hover\\:bg-accent\\/70:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\\:bg-accent\\/70:hover{background-color:color-mix(in oklab,var(--accent) 70%,transparent)}}.hover\\:text-foreground:hover{color:var(--foreground)}.hover\\:text-zinc-900:hover{color:#181818}.hover\\:opacity-100:hover{opacity:1}}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-ring\\/40:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\\:ring-ring\\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 40%, transparent)}}.dark\\:border-zinc-300:is(.dark *){border-color:#d4d4d4}.dark\\:bg-background:is(.dark *){background-color:var(--background)}.dark\\:bg-white:is(.dark *){background-color:#fff}.dark\\:ring-zinc-300:is(.dark *){--tw-ring-color:oklch(87.1% 0 0)}@media(hover:hover){.dark\\:group-hover\\/resize\\:bg-white:is(.dark *):is(:where(.group\\/resize):hover *){background-color:#fff}}.\\[\\&\\[data-state\\=open\\]\\>svg\\]\\:rotate-90[data-state=open]>svg{rotate:90deg}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:host{--radius:.625rem;--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08)}:host([theme=dark]),:host(.dark){--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439)}@keyframes sparkle-swipe-in{0%{opacity:0;color:#facc15;filter:drop-shadow(-8px 8px #a855f700)}28%{opacity:1;color:#d8b4fe;filter:drop-shadow(-2px 2px 8px #a855f7cc)}55%{color:#a855f7;filter:drop-shadow(3px -3px 10px #a855f7f2)}to{opacity:1;color:#facc15;filter:drop-shadow(0 0 #a855f700)}}@keyframes sparkle-twinkle{0%,to{opacity:.82;filter:drop-shadow(0 0 #facc1500)}50%{opacity:1;filter:drop-shadow(0 0 7px #facc1580)}}.sparkle-icon{color:#facc15;vertical-align:middle;transform-origin:50%;will-change:transform,filter,color,opacity;line-height:1;animation:1.15s cubic-bezier(.22,1,.36,1) sparkle-swipe-in,2.1s ease-in-out 1.15s infinite sparkle-twinkle;display:inline-block;transform:rotate(10deg)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}',Ll=()=>{try{return"7d5f1278-26bf-454b-8d36-220a9982a141"}catch{return"dev"}},tt=new Map,zl=async(e,t)=>{const o=tt.get(e.id);if(o)return o;if(!e.bundleUrl)return console.warn(`[SandboxManager] Extension ${e.id} is missing bundleUrl — skipping sandbox creation`),null;const n=document.createElement("iframe");if(n.setAttribute("sandbox","allow-scripts allow-same-origin"),n.style.display="none",n.style.width="0",n.style.height="0",n.style.border="none",e.bundleUrl.startsWith("http")&&!e.bundleUrl.endsWith(".js")){const i=new URL(e.bundleUrl);i.searchParams.set("__extensionId",e.id),n.src=i.toString(),console.warn(`[SandboxManager] Creating dev sandbox for ${e.id}, injecting __extensionId via query param, url: ${i.toString()}`)}else{let i="";try{const u=Ll();i=await(await fetch(`${e.bundleUrl}?_b=${u}`)).text()}catch(u){console.error(`[SandboxManager] Failed to fetch bundle for ${e.id}:`,u)}const l=`<!DOCTYPE html>
|
|
2
2
|
<html>
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="utf-8">
|
|
@@ -294,4 +294,4 @@ Defaulting to \`null\`.`}var lh=Bs,ch=Vs,zn="Radio",[dh,Rs]=me(zn),[uh,fh]=dh(zn
|
|
|
294
294
|
85% { transform: rotate(175deg); }
|
|
295
295
|
100% { transform: rotate(180deg); }
|
|
296
296
|
}
|
|
297
|
-
`,document.head.appendChild(e)},Ev=e=>{const t=e.some(n=>n.mode==="staging"),o=e.some(n=>n.mode==="dev");return t&&o?"Dev + Staging":t?"Staging Mode":"Dev Mode"},Nv=e=>e.mode==="staging"?"STAGING":"DEV",Tv=({className:e="",extensions:t=[],tokenErrors:o=new Map})=>{const[n,r]=x.useState([]),[a,s]=x.useState(!1),[i,l]=x.useState(!1),[u,f]=x.useState(!1),c=x.useRef(null),h=o.size>0;if(x.useEffect(()=>{Cv()},[]),x.useEffect(()=>{if(!h)return;const b=()=>{f(!0),setTimeout(()=>f(!1),600)};b();const m=setInterval(b,4e3);return()=>clearInterval(m)},[h]),x.useEffect(()=>{if(typeof window>"u")return;const b=()=>{const v=gr(window.location.search);r(v)};b();const m=()=>b();return window.addEventListener("popstate",m),()=>window.removeEventListener("popstate",m)},[]),n.length===0)return null;const g=b=>{if(b.stopPropagation(),typeof window>"u")return;const m=new URL(window.location.href);m.searchParams.delete("_stackable_dev"),m.searchParams.delete("_stackable_staging"),window.location.href=m.toString()};return d.jsxs("div",{className:e,style:{position:"fixed",bottom:"16px",left:"50%",transform:i||u?"translate(-50%, -2px)":"translate(-50%, 0)",zIndex:2147483647,fontFamily:"system-ui, -apple-system, sans-serif",transition:"transform 0.15s ease",display:"flex",flexDirection:"column",alignItems:"center"},onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),children:[a&&d.jsx("div",{style:{backgroundColor:"#fff",border:"1px solid #e5e7eb",borderBottom:`1px solid ${h?"#dc2626":"#eab308"}`,borderRadius:"8px 8px 0 0",boxShadow:"0 -4px 16px -4px rgba(0,0,0,0.12), 0 -2px 6px -4px rgba(0,0,0,0.08)",padding:"8px 0",width:"420px",maxWidth:"90vw"},children:n.map((b,m)=>{var v;return d.jsxs("div",{style:{padding:"8px 12px",borderBottom:m<n.length-1?"1px solid #f3f4f6":"none"},children:[d.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[d.jsx("span",{style:{fontSize:"10px",fontWeight:700,color:b.mode==="staging"?"#7c3aed":"#b45309",backgroundColor:b.mode==="staging"?"#ede9fe":"#fef3c7",padding:"1px 5px",borderRadius:"3px",letterSpacing:"0.05em",fontFamily:"ui-monospace, SFMono-Regular, monospace"},children:Nv(b)}),d.jsx("span",{style:{fontSize:"12px",fontWeight:600,color:"#111",fontFamily:"ui-monospace, SFMono-Regular, monospace",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:((v=t.find(w=>w.id===b.extensionId))==null?void 0:v.manifest.name)||b.extensionId})]}),d.jsxs("div",{style:{fontSize:"11px",color:"#6b7280",fontFamily:"ui-monospace, SFMono-Regular, monospace",marginTop:"2px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},title:b.bundleUrl,children:["→ ",b.bundleUrl]}),o.get(b.extensionId)&&d.jsxs("div",{style:{fontSize:"11px",color:"#dc2626",fontFamily:"ui-monospace, SFMono-Regular, monospace",marginTop:"3px"},children:["⚠ ",o.get(b.extensionId)]})]},b.extensionId)})}),d.jsxs("div",{onClick:()=>s(!a),style:{display:"flex",alignItems:"center",gap:"8px",backgroundColor:h?"#dc2626":"#eab308",color:h?"#fff":"#000",padding:"8px 12px",borderRadius:a?"0 0 8px 8px":"8px",boxShadow:i?"0 12px 24px -4px rgba(0,0,0,0.18), 0 6px 10px -4px rgba(0,0,0,0.12)":"0 8px 16px -4px rgba(0,0,0,0.12), 0 4px 6px -4px rgba(0,0,0,0.08)",fontSize:"14px",fontWeight:500,cursor:"pointer",userSelect:"none",transition:"box-shadow 0.15s ease, border-radius 0.1s ease"},children:[d.jsx("span",{ref:c,style:{display:"inline-flex",animation:i&&!a||u?"stackable-icon-wiggle 0.55s cubic-bezier(0.36, 0.07, 0.19, 0.97) both":"none"},children:d.jsx(Sv,{className:"w-6 h-6"})}),d.jsx("span",{children:Ev(n)}),d.jsxs("span",{style:{fontSize:"12px",opacity:.75},children:["(",n.length," extension",n.length>1?"s":"",")"]}),d.jsx("button",{onClick:g,style:{marginLeft:"4px",backgroundColor:"rgba(0, 0, 0, 0.15)",border:"none",borderRadius:"4px",cursor:"pointer",padding:"2px 8px",fontSize:"12px",fontWeight:500,color:"inherit",fontFamily:"inherit",transition:"background-color 0.1s ease"},onMouseOver:b=>{b.currentTarget.style.backgroundColor="rgba(0, 0, 0, 0.25)"},onMouseOut:b=>{b.currentTarget.style.backgroundColor="rgba(0, 0, 0, 0.15)"},children:"Clear"})]})]})},_v=800,Wt=(e,t)=>e?`${e.replace(/\/$/,"")}${t}`:t,Pv=async(e,t,o,n)=>{const r=new Map,a=new Map;return await Promise.all(e.filter(s=>s.manifest.permissions.includes("data:fetch")).map(async s=>{const i=n.find(h=>h.extensionId===s.id),l=i==null?void 0:i.token,u=i==null?void 0:i.mode,f=Wt(t,"/proxy-token"),c=await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({appId:o,extensionId:s.id,...u&&{mode:u},...l&&{devSessionToken:l}})});if(c.ok){const{token:h,encryptionKey:g}=await c.json();r.set(s.id,{token:h,encryptionKey:g})}else{let h=`Proxy token failed (${c.status})`;u&&!l?h="Session token missing — re-run CLI":u&&(h="Session expired or invalid — re-run CLI"),a.set(s.id,h),console.warn(`[embeddables] Failed to obtain proxy token for extension ${s.id} (${c.status}) — ${h}`)}})),{tokens:r,errors:a}},Av=e=>typeof e=="object"&&e!==null&&e.encrypted===!0&&Array.isArray(e.data),Iv=({instanceId:e,queryApiBase:t,apiBase:o,appId:n,children:r,customerId:a,customerEmail:s,customerName:i})=>{const[l,u]=x.useState([]),[f,c]=x.useState([]),[h,g]=x.useState(new Map),[b,m]=x.useState(new Map),[v,w]=x.useState(!1),[y,k]=x.useState({authenticated:!1,user:null}),[C,T]=x.useState(void 0);x.useEffect(()=>{window.stackable||(window.stackable={emit:(P,S={})=>{const[I,...$]=P.split(":"),M=$.join(":");window.dispatchEvent(new CustomEvent(`stackable:${I}`,{detail:{eventName:M,data:S}}))}})},[]);const _=x.useRef(null),N=x.useRef(new Set),E=x.useMemo(()=>l.filter(P=>P.manifest.permissions.includes("extend:identity")).map(P=>P.id),[l]);x.useEffect(()=>{(async()=>{const S=e;try{if(!S){console.warn("[ExtensionSetup] No instanceId provided; loading no extensions"),u([]),w(!0);return}if(!o||!n){console.warn("[ExtensionSetup] apiBase and appId are required to load extensions"),u([]),w(!0);return}const I=await fetch(Wt(o,`/instances/${n}/${S}`));if(!I.ok){console.warn(`[ExtensionSetup] Instance not found or failed to load: ${S}`),u([]),w(!0);return}const $=await I.json(),M=gr(typeof window<"u"?window.location.search:""),F=await Ec($,M),{tokens:H,errors:Z}=await Pv(F,o,n,M);u(F),c(M),g(new Map(H)),m(Z)}catch(I){console.error("Failed to load extensions:",I)}finally{w(!0)}})()},[e,n,o]),x.useEffect(()=>{if(!o||!n||l.length===0)return;const S=setInterval(async()=>{const I=[];await Promise.all(l.filter($=>$.manifest.permissions.includes("data:fetch")).map(async $=>{const M=f.find(q=>q.extensionId===$.id),F=M==null?void 0:M.token,H=M==null?void 0:M.mode,Z=Wt(o,"/proxy-token"),G=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({appId:n,extensionId:$.id,...H&&{mode:H},...F&&{devSessionToken:F}})});if(G.ok){const{token:q,encryptionKey:Q}=await G.json();I.push([$.id,{token:q,encryptionKey:Q}])}else console.warn(`[embeddables] Proxy token refresh failed for extension ${$.id} (${G.status}) — using stale token`)})),I.length>0&&g($=>{const M=new Map($);for(const[F,H]of I)M.set(F,H);return M})},3300*1e3);return()=>clearInterval(S)},[l,f,o,n]),x.useEffect(()=>{if(h.size===0)return;const P=S=>{const I=S.data;if((I==null?void 0:I.type)!=="extension-ready")return;const $=I.extensionId,M=l.find(Z=>Z.id===$);if(!(M!=null&&M.bundleUrl))return;const F=f.find(Z=>Z.extensionId===$);if(kc(M.bundleUrl)&&(F==null?void 0:F.mode)!=="staging")return;const H=h.get($);H&&Me($,{type:"extension-encryption-key",encryptionKey:H.encryptionKey})};return window.addEventListener("message",P),()=>window.removeEventListener("message",P)},[l,f,h]);const z=x.useCallback((P,S)=>{const I=ft();for(const[$,M]of I){if(!M.manifest.permissions.includes("events:identity"))continue;const F=M.manifest.events??[];!F.includes("identity")&&!F.includes(`identity:${P}`)||Me($,{type:"extension-event",eventType:"identity",payload:{eventName:P,data:{state:S,timestamp:Vo(new Date().toISOString())}}})}},[]),j=x.useCallback(P=>{const S=ft();for(const[I,$]of S){if(!$.manifest.permissions.includes("events:messaging"))continue;const M=$.manifest.events??[];!M.includes("messaging")&&!M.includes("messaging:postback")&&!M.includes(`messaging:postback:${P.data.actionName}`)||Me(I,{type:"extension-event",eventType:"messaging",payload:P})}},[]),O=x.useCallback(P=>{const S=ft();for(const[I,$]of S){if(!$.manifest.permissions.includes("events:activity"))continue;const M=$.manifest.events??[];!M.includes("activity")&&!M.includes(`activity:${P.eventName}`)||Me(I,{type:"extension-event",eventType:"activity",payload:P})}},[]),B=x.useCallback(async P=>{const S=ft(),I=[];for(const[M,F]of S){if(!F.manifest.permissions.includes("extend:identity"))continue;const H=new Promise(Z=>{const G=`enrich_${M}_${Date.now()}`,q=Q=>{const ee=Q.data;(ee==null?void 0:ee.type)!=="extend-identity-response"||ee.id!==G||(window.removeEventListener("message",q),ee.additionalClaims?Z(ee.additionalClaims):Z({}))};window.addEventListener("message",q),setTimeout(()=>{window.removeEventListener("message",q),Z({})},5e3),Me(M,{type:"extend-identity-request",id:G,claims:P})});I.push(H)}if(I.length===0)return{};const $=await Promise.all(I);return Object.assign({},...$)},[]),V=x.useCallback(async P=>{if(!o||!n||!e)return console.warn("[embeddables] signIdentity skipped — missing:",{apiBase:!!o,appId:!!n,instanceId:!!e}),null;const S=Wt(o,`/instances/${n}/${e}/identity`);console.log("[embeddables] Calling identity sign:",{url:S,claims:Object.keys(P)});try{const I=await fetch(S,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(P)});if(!I.ok)return console.warn(`[embeddables] Identity sign failed (${I.status})`),null;const{token:$}=await I.json();return $}catch(I){return console.warn("[embeddables] Identity sign request failed:",I),null}},[o,n,e]),L=x.useCallback(P=>{const S=window.zE;S&&S("messenger","loginUser",async I=>{I(P)})},[]),Y=x.useCallback(()=>{const P=window.zE;P&&P("messenger","logoutUser")},[]),A=x.useCallback(P=>{console.log("[embeddables] Running sign lifecycle for user:",P.id);const{email:S,name:I}=P,$={external_id:String(P.id)};(async()=>{const M=await B({...$,email:S,name:I});console.log("[embeddables] Enriched claims:",M);const F=await V({...$,...M,email:S,name:I});console.log("[embeddables] Sign result:",{hasToken:!!F}),F&&L(F)})()},[B,V,L]),D=x.useCallback(P=>{if(E.length>0&&N.current.size<E.length){console.log(`[embeddables] Deferring sign lifecycle — waiting for extend:identity extensions: ${N.current.size}/${E.length} ready`),_.current=P;return}console.log("[embeddables] No extend:identity extensions (or all ready) — signing immediately"),A(P)},[E,A]);x.useEffect(()=>{if(!v){console.log("[embeddables] Identity effect skipped — extensions not loaded yet");return}if(console.log("[embeddables] Identity effect running",{initialized:v,customerId:!!a,extendExtensions:E.length}),a){console.log("[embeddables] Identity from props:",{customerId:a,customerEmail:s,customerName:i});const P={authenticated:!0,user:{id:String(a),email:s,name:i,provider:"shopify"}};k(S=>{var I,$;return S.authenticated&&((I=S.user)==null?void 0:I.id)===(($=P.user)==null?void 0:$.id)?S:(console.log("[embeddables] Identity state changed (props), starting sign lifecycle"),D(P.user),z("login",P),P)})}else{if(a===void 0)return;k(P=>P.authenticated?(console.log("[embeddables] Customer props cleared, logging out"),Y(),z("logout",{authenticated:!1,user:null}),{authenticated:!1,user:null}):P)}},[v,a,s,i,E,D,z,Y]),x.useEffect(()=>{if(!v||a!==void 0)return;const P=()=>{const I=document.getElementById("stackable-identity");if(I)try{const $=JSON.parse(I.textContent??"{}"),M={authenticated:!0,user:{id:String($.customerId??""),email:$.customerEmail,name:$.customerName,provider:"shopify"}};k(F=>{var H,Z;return F.authenticated&&((H=F.user)==null?void 0:H.id)===((Z=M.user)==null?void 0:Z.id)?F:(console.log("[embeddables] Identity state changed (DOM), starting sign lifecycle"),D(M.user),z("login",M),M)})}catch{console.warn("[embeddables] Failed to parse #stackable-identity JSON")}else k($=>$.authenticated?(Y(),z("logout",{authenticated:!1,user:null}),{authenticated:!1,user:null}):$)};P();const S=new MutationObserver(P);return S.observe(document.head,{childList:!0,subtree:!0}),S.observe(document.body,{childList:!0,subtree:!0}),()=>S.disconnect()},[v,a,D,z,Y]),x.useEffect(()=>{if(!y.authenticated)return;const P=S=>{const I=S.data;if((I==null?void 0:I.type)!=="extension-ready")return;const $=I.extensionId,M=l.find(H=>H.id===$);if(!(M!=null&&M.manifest.permissions.includes("events:identity")))return;const F=M.manifest.events??[];!F.includes("identity")&&!F.includes("identity:login")||Me($,{type:"extension-event",eventType:"identity",payload:{eventName:"login",data:{state:y,timestamp:Vo(new Date().toISOString())}}})};return window.addEventListener("message",P),()=>window.removeEventListener("message",P)},[y,l]),x.useEffect(()=>{if(E.length===0)return;const P=I=>{const $=I.data;if(($==null?void 0:$.type)!=="extension-ready")return;const M=$.extensionId;if(E.includes(M)&&(N.current.add(M),console.log(`[embeddables] extend:identity extension ready: ${M} (${N.current.size}/${E.length})`),N.current.size>=E.length&&_.current)){console.log("[embeddables] All extend:identity extensions ready, running deferred sign lifecycle");const F=_.current;_.current=null,A(F)}};window.addEventListener("message",P);const S=setTimeout(()=>{if(_.current){console.warn(`[embeddables] extend:identity timeout (5s) — signing with ${N.current.size}/${E.length} extensions ready`);const I=_.current;_.current=null,A(I)}},5e3);return()=>{window.removeEventListener("message",P),clearTimeout(S)}},[E,A]),x.useEffect(()=>{const P=S=>{const{detail:I}=S;I!=null&&I.eventName&&(I.eventName==="postback"?j({eventName:"postback",data:{actionName:I.data.actionName,conversationId:I.data.conversationId??"",timestamp:Vo(new Date().toISOString())}}):I.eventName==="context"&&T($=>({...$,...I.data})))};return window.addEventListener("stackable:messaging",P),()=>window.removeEventListener("stackable:messaging",P)},[j]),x.useEffect(()=>{const P=S=>{const{detail:I}=S;I!=null&&I.eventName&&O({eventName:I.eventName,data:I.data??{}})};return window.addEventListener("stackable:activity",P),()=>window.removeEventListener("stackable:activity",P)},[O]),x.useEffect(()=>{if(!v)return;const P={customerId:a??"",customerEmail:s??"",customerName:i??"",messaging:C,identity:y},S=ft();for(const[I,$]of S)$.manifest.permissions.includes("context:read")&&Me(I,{type:"context-push",context:P})},[v,a,s,i,y,C]);const R=x.useMemo(()=>({"data.query":async P=>xl(P,t),"data.fetch":async(P,S)=>{const I=h.get(P);if(!I)return{status:0,ok:!1,data:{error:"data.fetch: proxy token unavailable — ensure the extension has data:fetch permission and allowedDomains configured"}};const $=Av(S)?S:{url:S.url,method:S.method??"GET",headers:S.headers??{},body:S.body??null},M=Wt(o,"/proxy"),F=await fetch(M,{method:"POST",headers:{"Content-Type":"application/json","X-Extension-Id":P,"X-Application-Id":n??"",Authorization:`Bearer ${I.token}`},body:JSON.stringify($)}),H=await F.json();return{status:H.status??F.status,ok:H.ok??F.ok,data:H.data}},"actions.toast":async(P,S)=>{const I={...S.description&&{description:S.description},...S.duration&&{duration:S.duration},...S.position&&{position:S.position},...S.dismissible!=null&&{dismissible:S.dismissible},...S.closeButton!=null&&{closeButton:S.closeButton}};if(S.fetch){const $=F=>new Promise(H=>setTimeout(H,F)),M=Promise.all([R["data.fetch"](P,S.fetch),$(_v)]).then(([F])=>F);ht.promise(M,{loading:S.loading??S.message,success:S.success??S.message,error:S.error??"Something went wrong",...I});return}switch(S.type){case"success":{ht.success(S.message,I);break}case"error":{ht.error(S.message,I);break}case"warning":{ht.warning(S.message,I);break}case"info":{ht.info(S.message,I);break}default:ht(S.message,I)}},"actions.invoke":async P=>(window.dispatchEvent(new CustomEvent(`stackable:action:${P.action}`,{detail:P})),{success:!0}),"context.read":async()=>({customerId:a??"",customerEmail:s??"",customerName:i??"",identity:y,messaging:C})}),[o,n,t,a,s,i,h,y,C]);return v?d.jsxs(d.Fragment,{children:[d.jsx(Ul,{extensions:l,capabilityHandlers:R,components:kv(),children:r}),d.jsx(Tv,{extensions:l,tokenErrors:b})]}):null};var Mv=(e,t,o,n,r,a,s,i)=>{let l=document.documentElement,u=["light","dark"];function f(g){(Array.isArray(e)?e:[e]).forEach(b=>{let m=b==="class",v=m&&a?r.map(w=>a[w]||w):r;m?(l.classList.remove(...v),l.classList.add(a&&a[g]?a[g]:g)):l.setAttribute(b,g)}),c(g)}function c(g){i&&u.includes(g)&&(l.style.colorScheme=g)}function h(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(n)f(n);else try{let g=localStorage.getItem(t)||o,b=s&&g==="system"?h():g;f(b)}catch{}},Ov=p.createContext(void 0),Lv={setTheme:e=>{},themes:[]},zv=()=>{var e;return(e=p.useContext(Ov))!=null?e:Lv};p.memo(({forcedTheme:e,storageKey:t,attribute:o,enableSystem:n,enableColorScheme:r,defaultTheme:a,value:s,themes:i,nonce:l,scriptProps:u})=>{let f=JSON.stringify([o,t,a,e,i,s,n,r]).slice(1,-1);return p.createElement("script",{...u,suppressHydrationWarning:!0,nonce:typeof window>"u"?l:"",dangerouslySetInnerHTML:{__html:`(${Mv.toString()})(${f})`}})});const Dv=({...e})=>{const{theme:t="system"}=zv();return d.jsx(xc,{theme:t,className:"toaster group",icons:{success:d.jsx(xr,{className:"size-4"}),info:d.jsx(Gt,{className:"size-4"}),warning:d.jsx(Jc,{className:"size-4"}),error:d.jsx(Gc,{className:"size-4"}),loading:d.jsx(jo,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},...e})},$v={dark:"dark",light:"widget-theme-light"},Fv={dark:"dark",light:"light"},Bv=({children:e,theme:t="inherit"})=>d.jsxs("div",{"data-id":"widget-body",className:$v[t],style:{position:"relative",transform:"translateZ(0)"},children:[d.jsx("div",{className:"h-[700px] w-[900px] overflow-hidden rounded-md ring ring-zinc-200 dark:ring-zinc-300",children:d.jsx("div",{className:"flex h-full w-full flex-col overflow-hidden rounded-md bg-muted dark:bg-background text-foreground",children:e})}),d.jsx(Dv,{position:"bottom-center",theme:Fv[t]??"system",toastOptions:{descriptionClassName:"!text-muted-foreground"}})]}),Hv={airplay:Ic,"message-circle":Sr,"message-square":Go,headphones:jc,"help-circle":kr,bot:Lc,sparkles:Cr,zap:ed},Vv=({className:e})=>d.jsx("svg",{className:X(e,"scale-125"),viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:d.jsx("path",{d:"M10,18 L6,22 L6,18 L10,18 Z M17,6 C19.7614237,6 22,8.23857625 22,11 C22,13.7614237 19.7614237,16 17,16 L7,16 C4.23857625,16 2,13.7614237 2,11 C2,8.23857625 4.23857625,6 7,6 Z",transform:"translate(12, 14) scale(-1, 1) translate(-12, -14)"})}),Wv=({className:e})=>d.jsxs("svg",{className:e,viewBox:"0 0 190 190",fill:"currentColor","aria-hidden":"true",children:[d.jsxs("g",{id:"sl-half-right",children:[d.jsx("g",{transform:"translate(-160.365,27.97)",children:d.jsx("path",{d:"M344.73,67.03C344.73,30.01 314.72,0 277.7,0C240.68,0 210.67,30.01 210.67,67.03L255.36,67.03C255.36,54.69 265.36,44.69 277.7,44.69C290.04,44.69 300.05,54.69 300.05,67.03L344.73,67.03Z"})}),d.jsx("g",{transform:"translate(-160.365,27.97)",children:d.jsx("path",{d:"M300.04,67.03C300.04,54.69 290.05,44.69 277.7,44.69C265.35,44.69 255.36,54.69 255.36,67.03L300.04,67.03Z",opacity:"0.3"})})]}),d.jsxs("g",{id:"sl-half-left",children:[d.jsx("g",{transform:"translate(-160.365,27.97)",children:d.jsx("path",{d:"M166,67.03C166,104.05 196.01,134.06 233.03,134.06C270.05,134.06 300.06,104.05 300.06,67.03L255.37,67.03C255.37,79.37 245.37,89.37 233.03,89.37C220.69,89.37 210.69,79.37 210.69,67.03L166,67.03Z"})}),d.jsx("g",{transform:"translate(-160.365,27.97)",children:d.jsx("path",{d:"M210.68,67.03C210.68,79.37 220.68,89.37 233.03,89.37C245.38,89.37 255.37,79.37 255.37,67.03L210.68,67.03Z",opacity:"0.3"})})]})]}),Sl=400,Uv=Sl*.35,jv=({icon:e,isOpen:t,onClick:o})=>{const n=Hv[e]??Vv,[r,a]=x.useState("idle"),s=x.useRef(t);x.useEffect(()=>{if(s.current===t)return;s.current=t,a("interstitial");const l=setTimeout(()=>a("idle"),Uv);return()=>clearTimeout(l)},[t]);const i=()=>r==="interstitial"?d.jsx(Wv,{}):t?d.jsx(Vc,{}):d.jsx(n,{});return d.jsx("div",{className:"fixed bottom-8 right-8 z-50",children:d.jsx(gl,{size:"icon",className:X("h-12 w-12 rounded-full cursor-pointer transition-transform duration-300",t?"scale-115":"scale-100 hover:scale-105"),onClick:o,children:d.jsx("span",{className:X("flex items-center justify-center transition-transform",t&&"rotate-180"),style:{transitionDuration:`${Sl}ms`},children:i()})})})},Rv=({children:e,icon:t,theme:o})=>{const[n,r]=x.useState(!1),[a,s]=x.useState(!0),[i,l]=x.useState(!1),u=x.useCallback(()=>{r(f=>!f)},[]);return x.useEffect(()=>{n&&!i&&l(!0)},[n,i]),x.useEffect(()=>{const f=()=>r(m=>!m),c=()=>r(!0),h=()=>r(!1),g=()=>s(!0),b=()=>{r(!1),s(!1)};return window.addEventListener("stackable:action:toggle",f),window.addEventListener("stackable:action:open",c),window.addEventListener("stackable:action:close",h),window.addEventListener("stackable:action:show",g),window.addEventListener("stackable:action:hide",b),()=>{window.removeEventListener("stackable:action:open",c),window.removeEventListener("stackable:action:close",h),window.removeEventListener("stackable:action:toggle",f),window.removeEventListener("stackable:action:show",g),window.removeEventListener("stackable:action:hide",b)}},[]),d.jsxs(d.Fragment,{children:[a&&d.jsx(jv,{isOpen:n,icon:t,onClick:u}),i&&d.jsx("div",{"data-id":"widget-container",className:X("overflow-hidden fixed bottom-24 right-8 z-1000 rounded-md shadow-xl transition-all duration-200 ease-out origin-bottom-right",n?"opacity-100 scale-100 translate-y-0 pointer-events-auto":"opacity-0 scale-95 translate-y-2 pointer-events-none"),children:d.jsx(Bv,{theme:o,children:e})})]})},Gv=({href:e,children:t})=>d.jsx("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:"text-zinc-500 opacity-80 transition-colors hover:text-zinc-900 hover:opacity-100",children:t}),qv=(e,t)=>{const[o,n]=x.useState(null),[r,a]=x.useState(!1),[s,i]=x.useState(null);return x.useEffect(()=>{if(!e){n(null);return}(async()=>{a(!0),i(null);try{const u=await xl({action:"getCustomer",customerId:e},t);n(u)}catch(u){i(u)}finally{a(!1)}})()},[e,t]),{customer:o,loading:r,error:s}},Yv=({customerId:e,customerEmail:t,queryApiBase:o,children:n})=>{var l,u;const{customer:r,loading:a,error:s}=qv(e,o);if(a)return d.jsx(Mt,{className:"border-none shadow-none bg-transparent",children:d.jsx(Ot,{className:"flex items-center justify-center p-6",children:d.jsx(jo,{className:"h-6 w-6 animate-spin text-muted-foreground"})})});if(s||!r){const f=t?t.split("@")[0]:e?`Customer ${e.slice(-4)}`:"Customer",c=f.split(/[\s._-]+/).map(h=>h[0]).join("").slice(0,2).toUpperCase();return d.jsx(Mt,{className:"border-none px-0 py-0 mb-4 shadow-none bg-transparent",children:d.jsxs(Ot,{className:"p-4 pb-0 pt-2",children:[d.jsxs("div",{className:"flex flex-col items-center",children:[d.jsxs(Kn,{className:"h-16 w-16 mb-2 ring-2 ring-background shadow-sm",children:[d.jsx(Zn,{src:`https://ui-avatars.com/api/?name=${encodeURIComponent(f)}&background=7c3aed&color=fff&size=128`,alt:f}),d.jsx(Jn,{className:"text-lg",children:c})]}),d.jsxs("div",{className:"text-center w-full space-y-1",children:[d.jsxs("div",{children:[d.jsx("p",{className:"text-xs text-foreground/70 font-medium tracking-wide",children:"Welcome,"}),d.jsx("h2",{className:"text-lg font-bold text-foreground leading-tight",children:f})]}),t&&d.jsx("div",{className:"pt-2 flex flex-col items-center gap-1",children:d.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-xs font-semibold text-foreground/75",children:[d.jsx(Ro,{className:"h-3 w-3","aria-hidden":"true"}),d.jsx("span",{className:"truncate max-w-[200px]",children:t})]})}),d.jsx("div",{className:"py-1 rounded-lg flex justify-center gap-1",children:n})]})]}),d.jsx("p",{className:"pt-2 text-center text-xs text-muted-foreground",children:"Using fallback profile (customer API returned no data)"})]})})}const i=`${((l=r.first_name)==null?void 0:l[0])||""}${((u=r.last_name)==null?void 0:u[0])||""}`;return d.jsx(Mt,{className:"border-none px-0 py-0 mb-4 shadow-none bg-transparent",children:d.jsx(Ot,{className:"p-4 pb-0 pt-2",children:d.jsxs("div",{className:"flex flex-col items-center",children:[d.jsxs(Kn,{className:"h-16 w-16 mb-2 ring-2 ring-background shadow-sm",children:[d.jsx(Zn,{src:`https://ui-avatars.com/api/?name=${encodeURIComponent(r.name)}&background=7c3aed&color=fff&size=128`,alt:r.name}),d.jsx(Jn,{className:"text-lg",children:i})]}),d.jsxs("div",{className:"text-center w-full space-y-1",children:[d.jsxs("div",{children:[d.jsx("p",{className:"text-xs text-foreground/70 font-medium tracking-wide",children:"Welcome,"}),d.jsx("h2",{className:"text-lg font-bold text-foreground leading-tight",children:r.name})]}),d.jsx("div",{className:"pt-2 flex flex-col items-center gap-1",children:d.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-xs font-semibold text-foreground/75",children:[d.jsx(Ro,{className:"h-3 w-3","aria-hidden":"true"}),d.jsx("span",{className:"truncate max-w-[200px]",children:r.email})]})}),d.jsx("div",{className:"py-1 rounded-lg flex justify-center gap-1",children:n})]})]})})})},Cl=(e,t)=>{x.useEffect(()=>{const o=t.current;if(!o)return;let n=document.getElementById(e);n||(n=document.createElement("div"),n.id=e,n.style.cssText="position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;",document.body.appendChild(n));const r=new MutationObserver(()=>{for(;n.firstChild;)o.appendChild(document.adoptNode(n.firstChild))});return r.observe(n,{childList:!0,subtree:!0}),()=>{r.disconnect(),n==null||n.remove()}},[e,t])},Xv=({customization:e})=>{const t=x.useRef(null);return Cl("widget_conversations",t),x.useEffect(()=>{!window.zE||!t.current||e&&window.zE("messenger:set","customization",{conversationList:e})},[e]),d.jsx("div",{ref:t,className:"h-full overflow-hidden"})},Kv=({customization:e})=>{const t=x.useRef(null);return Cl("widget_messages",t),x.useEffect(()=>{!window.zE||!t.current||e&&window.zE("messenger:set","customization",{messageLog:e})},[e]),d.jsx("div",{ref:t,className:"h-full overflow-hidden"})},Qn=e=>{window.dispatchEvent(new CustomEvent("stackable:messaging",{detail:{eventName:"context",data:e}}))},er=25,tr=75,Zv=({header:e,buttons:t,queryApiBase:o,customerId:n="",customerEmail:r="",primaryPercent:a=50})=>{const s=Math.max(er,Math.min(tr,a)),{extensions:i}=dr(),l=x.useMemo(()=>i.some(O=>O.enabled&&(O.manifest.targets.includes("slot.header")||O.manifest.targets.includes("slot.content"))),[i]),[u,f]=x.useState(!1),[c,h]=x.useState(!1),[g,b]=x.useState("extensions"),[m,v]=x.useState(s),[w,y]=x.useState("loading"),k=x.useRef(null),C=x.useCallback(()=>!window.zE||!document.getElementById("widget_conversations")||!document.getElementById("widget_messages")?!1:(window.zE("messenger","render",{mode:"embedded",messageLog:{targetElement:"#widget_messages"},conversationList:{targetElement:"#widget_conversations"}}),window.zE("messenger:set","customization",{common:{hideHeader:!1},messageLog:{hideHeader:!0},conversationList:{hideHeader:!0,hideNewConversationButton:!0}}),!0),[]);x.useEffect(()=>{var Y,A;const O=document.querySelector('script[src*="zdassets.com/ekr/snippet"]'),B=(A=(Y=O==null?void 0:O.src)==null?void 0:Y.match(/key=([a-f0-9-]+)/))==null?void 0:A[1];if(B&&fetch(`https://ekr.zdassets.com/compose/${B}`).then(D=>D.text()).then(D=>{var P;const R=(P=D.match(/appId['"]?\s*:\s*['"]([a-f0-9]+)['"]/))==null?void 0:P[1];R&&Qn({appId:R})}).catch(()=>{}),C()){y("ready");return}const V=setInterval(()=>{C()&&(y("ready"),clearInterval(V))},100),L=setTimeout(()=>{clearInterval(V),y(D=>D==="ready"?D:(console.warn("Zendesk widget failed to load after 10 seconds"),"error"))},1e4);return()=>{clearInterval(V),clearTimeout(L)}},[C]);const T=x.useCallback(O=>{!window.zE||!O.length||window.zE("messenger:set","conversationTags",O)},[]),_=x.useCallback(O=>{!window.zE||!O.length||window.zE("messenger:set","conversationFields",O)},[]),N=x.useCallback(O=>{if(!window.zE)return;O!=null&&O.tags&&T(O.tags),O!=null&&O.fields&&_(O.fields);const{tags:B,fields:V,...L}=O??{};window.zE("messenger:ui","newConversation",Object.keys(L).length?L:void 0)},[T,_]),E=x.useCallback(O=>{const{detail:B}=O;B!=null&&B.payload&&N(B.payload)},[N]);x.useEffect(()=>(window.addEventListener("stackable:action:newConversation",E),()=>{window.removeEventListener("stackable:action:newConversation",E)}),[E]),x.useEffect(()=>{const O=V=>{const{detail:L}=V;L!=null&&L.payload&&T(L.payload)},B=V=>{const{detail:L}=V;L!=null&&L.payload&&_(L.payload)};return window.addEventListener("stackable:action:setConversationTags",O),window.addEventListener("stackable:action:setConversationFields",B),()=>{window.removeEventListener("stackable:action:setConversationTags",O),window.removeEventListener("stackable:action:setConversationFields",B)}},[T,_]),x.useEffect(()=>{if(w!=="ready"||!window.zE)return;const O=window.zE("messenger:on","conversationStarted",L=>{var A,D;const Y=(D=(A=L==null?void 0:L.payload)==null?void 0:A.conversation)==null?void 0:D.id;Y&&Qn({conversationId:Y})}),B=window.zE("messenger:on","messagesShown",L=>{var A,D;const Y=(D=(A=L==null?void 0:L.payload)==null?void 0:A.conversation)==null?void 0:D.id;Y&&Qn({conversationId:Y})}),V=window.zE("messenger:on","postbackButtonClicked",L=>{var A;const Y=L==null?void 0:L.payload;Y!=null&&Y.actionName&&window.dispatchEvent(new CustomEvent("stackable:messaging",{detail:{eventName:"postback",data:{actionName:Y.actionName,conversationId:((A=Y.conversation)==null?void 0:A.id)??""}}}))});return()=>{typeof O=="function"&&O(),typeof B=="function"&&B(),typeof V=="function"&&V()}},[w]),x.useEffect(()=>{if(!u)return;const O=V=>{if(!k.current)return;const L=k.current.getBoundingClientRect();if((c?L.width:L.height)===0)return;const A=c?(V.clientX-L.left)/L.width*100:(V.clientY-L.top)/L.height*100,D=Math.max(er,Math.min(tr,A));v(D)},B=()=>{f(!1),document.body.style.cursor="",document.body.style.userSelect=""};return document.body.style.cursor=c?"col-resize":"row-resize",document.body.style.userSelect="none",window.addEventListener("mousemove",O),window.addEventListener("mouseup",B),window.addEventListener("blur",B),()=>{window.removeEventListener("mousemove",O),window.removeEventListener("mouseup",B),window.removeEventListener("blur",B),document.body.style.cursor="",document.body.style.userSelect=""}},[u,c]),x.useEffect(()=>{if(!k.current)return;const O=k.current,B=()=>{const L=getComputedStyle(O).flexDirection==="row";h(L)};B();const V=new ResizeObserver(B);return V.observe(O),()=>{V.disconnect()}},[]);const z=x.useCallback(O=>{if(O.detail===2){v(s);return}O.preventDefault(),f(!0)},[s]),j={customerId:n,customerEmail:r};return d.jsxs("div",{"data-component":"zendesk-wrapper",className:"flex-1 flex flex-col z-10 overflow-hidden",style:{containerType:"inline-size"},children:[d.jsx("style",{children:'@container (min-width: 42rem) { [data-component="zendesk-wrapper"] > [data-id="panel-layout"] { flex-direction: row; } }'}),d.jsxs("div",{ref:k,"data-id":"panel-layout",className:"relative flex-1 overflow-hidden flex flex-col",children:[l&&d.jsxs("div",{"data-id":"primary-panel",className:"min-h-0 min-w-0 flex-none overflow-hidden flex flex-col",style:{flexBasis:`${m}%`},children:[d.jsxs("div",{className:"flex items-center justify-between px-4 py-3",children:[d.jsx("h2",{className:"font-semibold text-sm text-foreground",children:g==="extensions"?"My Profile":"My Conversations"}),d.jsxs("div",{className:"flex items-center gap-1",children:[e&&d.jsx("div",{className:"flex gap-1",children:e}),d.jsxs("div",{className:"flex rounded-lg bg-muted p-1",children:[w==="ready"&&d.jsx("button",{onClick:()=>N({}),className:"rounded-md border border-transparent p-1.5 text-muted-foreground transition-colors hover:cursor-pointer hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",title:"New Conversation",children:d.jsx(Xc,{className:"h-4 w-4"})}),t,d.jsx("button",{onClick:()=>b("conversations"),className:X("rounded-md border border-transparent p-1.5 transition-colors hover:cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",g==="conversations"?"border-border bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),title:"Conversations",children:d.jsx(Go,{className:"h-4 w-4"})}),d.jsx("button",{onClick:()=>b("extensions"),className:X("rounded-md border border-transparent p-1.5 transition-colors hover:cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",g==="extensions"?"border-border bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),title:"My Profile",children:d.jsx(Er,{className:"h-4 w-4"})})]})]})]}),d.jsxs("div",{className:"flex-1 overflow-y-auto p-4 relative",children:[d.jsxs("div",{className:X("flex flex-col gap-2",g==="conversations"&&"hidden"),children:[d.jsx(Yv,{customerId:n,customerEmail:r,queryApiBase:o,children:d.jsx(jt,{target:"slot.header",context:j,className:"flex-none"})}),d.jsx(jt,{target:"slot.content",context:j,className:"flex flex-col gap-2"})]}),d.jsx("div",{className:X("h-full rounded-xl border border-zinc-200 bg-white p-2 shadow-sm dark:border-zinc-300",g==="extensions"&&"hidden"),children:w==="error"?d.jsx("div",{className:"flex h-full items-center justify-center p-6 text-center text-sm text-muted-foreground",children:d.jsx("p",{children:"Error loading conversations."})}):d.jsx(Xv,{})})]})]}),d.jsxs("div",{"data-id":"secondary-panel",className:"min-h-0 min-w-0 flex-none flex flex-col bg-white",style:{flexBasis:l?`${100-m}%`:"100%"},children:[d.jsx("div",{className:"flex-1 overflow-hidden",children:w==="error"?d.jsx("div",{className:"flex h-full items-center justify-center p-6 text-center text-sm text-muted-foreground",children:d.jsx("p",{children:"Zendesk Messenger could not be loaded. Check that a valid Snippet Key is configured."})}):d.jsx(Kv,{})}),d.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-1 py-1 mr-4 text-xs text-zinc-500",children:[d.jsx(jt,{target:"slot.footer",context:j,className:"flex items-center gap-1",fallback:d.jsxs(d.Fragment,{children:[d.jsx("div",{children:"powered by"}),d.jsx(Gv,{href:"https://zendesk.com",children:"Zendesk"})]})}),d.jsx(jt,{target:"slot.footer-links",context:j,className:"flex items-center gap-1",separator:d.jsx("span",{className:"text-zinc-300",children:"/"}),render:({children:O,index:B})=>d.jsxs(d.Fragment,{children:[B===0&&d.jsx("span",{className:"text-zinc-300",children:"+"}),O]})})]})]}),l&&d.jsxs(d.Fragment,{children:[d.jsx("div",{className:X("group/resize absolute z-20 flex items-center justify-center",c?"top-0 bottom-0 w-3 -ml-2.5 cursor-col-resize":"w-full h-3 -mt-2.5 cursor-row-resize"),style:c?{left:`${m}%`}:{top:`${m}%`},onMouseDown:z,role:"separator","aria-label":"Resize panels","aria-orientation":c?"vertical":"horizontal","aria-valuemin":er,"aria-valuemax":tr,"aria-valuenow":Math.round(m),children:d.jsx("div",{className:X("rounded-full bg-foreground/35 dark:bg-white shadow-[0_0_0_1px_rgba(255,255,255,0.16),0_0_0_1px_rgba(0,0,0,0.22)] transition-all",c?"h-20 w-0.5":"h-0.5 w-20",u?"bg-foreground/70 dark:bg-white opacity-100":"opacity-70 group-hover/resize:bg-foreground/55 dark:group-hover/resize:bg-white group-hover/resize:opacity-100")})}),u&&d.jsx("div",{className:X("absolute inset-0 z-40",c?"cursor-col-resize":"cursor-row-resize"),onMouseUp:()=>f(!1)})]})]})]})},Jv="ze-snippet",El=e=>`https://static.zdassets.com/ekr/snippet.js?key=${encodeURIComponent(e)}`,Qv=(e,t={})=>{if(typeof window>"u"||typeof document>"u"||!e)return Promise.resolve();const{autorender:o=!1,scriptId:n=Jv}=t;window.zEMessenger={autorender:o};const r=document.getElementById(n);if(r){if(r.getAttribute("src")===El(e))return Promise.resolve();r.remove()}return new Promise((a,s)=>{const i=document.createElement("script");i.id=n,i.src=El(e),i.async=!0,i.onload=()=>a(),i.onerror=()=>s(new Error("Failed to load Zendesk snippet")),document.head.appendChild(i)})},eb=({queryApiBase:e,apiBase:t,appId:o,theme:n,icon:r,instanceId:a,customerId:s,customerEmail:i,customerName:l,snippetKey:u})=>{const f=n==="dark"||n==="light"?n:"inherit";return x.useEffect(()=>{u&&Qv(u).catch(c=>{console.error("[StackableWidget] Failed to load Zendesk snippet:",c)})},[u]),d.jsx(Iv,{instanceId:a,queryApiBase:e,apiBase:t,appId:o,customerId:s,customerEmail:i,customerName:l,children:d.jsx(Rv,{theme:f,icon:r,children:d.jsx(Zv,{queryApiBase:e,customerId:s,customerEmail:i,primaryPercent:40})})})};class tb extends HTMLElement{constructor(){super();rr(this,"mountNode");rr(this,"root");const o=this.attachShadow({mode:"open"}),n=document.createElement("style");n.textContent=Ol,o.appendChild(n),this.mountNode=document.createElement("div"),o.appendChild(this.mountNode)}static get observedAttributes(){return["query-api-base","api-base","app-id","instance-id","theme","icon","customer-id","customer-email","customer-name","snippet-key"]}connectedCallback(){this.root=be.createRoot(this.mountNode),this.renderWidget()}disconnectedCallback(){var o;(o=this.root)==null||o.unmount(),this.root=void 0}attributeChangedCallback(){this.renderWidget()}renderWidget(){if(!this.root)return;const o=this.getAttribute("theme")??"";this.mountNode.classList.toggle("dark",o==="dark"),this.root.render(d.jsx(eb,{theme:o,icon:this.getAttribute("icon")??void 0,queryApiBase:this.getAttribute("query-api-base")??"",apiBase:this.getAttribute("api-base")??void 0,appId:this.getAttribute("app-id")??"",instanceId:this.getAttribute("instance-id")??"",customerId:this.getAttribute("customer-id")??void 0,customerEmail:this.getAttribute("customer-email")??void 0,customerName:this.getAttribute("customer-name")??void 0,snippetKey:this.getAttribute("snippet-key")??""}))}}customElements.get("stackable-widget")||customElements.define("stackable-widget",tb)}));
|
|
297
|
+
`,document.head.appendChild(e)},Ev=e=>{const t=e.some(n=>n.mode==="staging"),o=e.some(n=>n.mode==="dev");return t&&o?"Dev + Staging":t?"Staging Mode":"Dev Mode"},Nv=e=>e.mode==="staging"?"STAGING":"DEV",Tv=({className:e="",extensions:t=[],tokenErrors:o=new Map})=>{const[n,r]=x.useState([]),[a,s]=x.useState(!1),[i,l]=x.useState(!1),[u,f]=x.useState(!1),c=x.useRef(null),h=o.size>0;if(x.useEffect(()=>{Cv()},[]),x.useEffect(()=>{if(!h)return;const b=()=>{f(!0),setTimeout(()=>f(!1),600)};b();const m=setInterval(b,4e3);return()=>clearInterval(m)},[h]),x.useEffect(()=>{if(typeof window>"u")return;const b=()=>{const v=gr(window.location.search);r(v)};b();const m=()=>b();return window.addEventListener("popstate",m),()=>window.removeEventListener("popstate",m)},[]),n.length===0)return null;const g=b=>{if(b.stopPropagation(),typeof window>"u")return;const m=new URL(window.location.href);m.searchParams.delete("_stackable_dev"),m.searchParams.delete("_stackable_staging"),window.location.href=m.toString()};return d.jsxs("div",{className:e,style:{position:"fixed",bottom:"16px",left:"50%",transform:i||u?"translate(-50%, -2px)":"translate(-50%, 0)",zIndex:2147483647,fontFamily:"system-ui, -apple-system, sans-serif",transition:"transform 0.15s ease",display:"flex",flexDirection:"column",alignItems:"center"},onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),children:[a&&d.jsx("div",{style:{backgroundColor:"#fff",border:"1px solid #e5e7eb",borderBottom:`1px solid ${h?"#dc2626":"#eab308"}`,borderRadius:"8px 8px 0 0",boxShadow:"0 -4px 16px -4px rgba(0,0,0,0.12), 0 -2px 6px -4px rgba(0,0,0,0.08)",padding:"8px 0",width:"420px",maxWidth:"90vw"},children:n.map((b,m)=>{var v;return d.jsxs("div",{style:{padding:"8px 12px",borderBottom:m<n.length-1?"1px solid #f3f4f6":"none"},children:[d.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[d.jsx("span",{style:{fontSize:"10px",fontWeight:700,color:b.mode==="staging"?"#7c3aed":"#b45309",backgroundColor:b.mode==="staging"?"#ede9fe":"#fef3c7",padding:"1px 5px",borderRadius:"3px",letterSpacing:"0.05em",fontFamily:"ui-monospace, SFMono-Regular, monospace"},children:Nv(b)}),d.jsx("span",{style:{fontSize:"12px",fontWeight:600,color:"#111",fontFamily:"ui-monospace, SFMono-Regular, monospace",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:((v=t.find(w=>w.id===b.extensionId))==null?void 0:v.manifest.name)||b.extensionId})]}),d.jsxs("div",{style:{fontSize:"11px",color:"#6b7280",fontFamily:"ui-monospace, SFMono-Regular, monospace",marginTop:"2px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},title:b.bundleUrl,children:["→ ",b.bundleUrl]}),o.get(b.extensionId)&&d.jsxs("div",{style:{fontSize:"11px",color:"#dc2626",fontFamily:"ui-monospace, SFMono-Regular, monospace",marginTop:"3px"},children:["⚠ ",o.get(b.extensionId)]})]},b.extensionId)})}),d.jsxs("div",{onClick:()=>s(!a),style:{display:"flex",alignItems:"center",gap:"8px",backgroundColor:h?"#dc2626":"#eab308",color:h?"#fff":"#000",padding:"8px 12px",borderRadius:a?"0 0 8px 8px":"8px",boxShadow:i?"0 12px 24px -4px rgba(0,0,0,0.18), 0 6px 10px -4px rgba(0,0,0,0.12)":"0 8px 16px -4px rgba(0,0,0,0.12), 0 4px 6px -4px rgba(0,0,0,0.08)",fontSize:"14px",fontWeight:500,cursor:"pointer",userSelect:"none",transition:"box-shadow 0.15s ease, border-radius 0.1s ease"},children:[d.jsx("span",{ref:c,style:{display:"inline-flex",animation:i&&!a||u?"stackable-icon-wiggle 0.55s cubic-bezier(0.36, 0.07, 0.19, 0.97) both":"none"},children:d.jsx(Sv,{className:"w-6 h-6"})}),d.jsx("span",{children:Ev(n)}),d.jsxs("span",{style:{fontSize:"12px",opacity:.75},children:["(",n.length," extension",n.length>1?"s":"",")"]}),d.jsx("button",{onClick:g,style:{marginLeft:"4px",backgroundColor:"rgba(0, 0, 0, 0.15)",border:"none",borderRadius:"4px",cursor:"pointer",padding:"2px 8px",fontSize:"12px",fontWeight:500,color:"inherit",fontFamily:"inherit",transition:"background-color 0.1s ease"},onMouseOver:b=>{b.currentTarget.style.backgroundColor="rgba(0, 0, 0, 0.25)"},onMouseOut:b=>{b.currentTarget.style.backgroundColor="rgba(0, 0, 0, 0.15)"},children:"Clear"})]})]})},_v=800,Wt=(e,t)=>e?`${e.replace(/\/$/,"")}${t}`:t,Pv=async(e,t,o,n)=>{const r=new Map,a=new Map;return await Promise.all(e.filter(s=>s.manifest.permissions.includes("data:fetch")).map(async s=>{const i=n.find(h=>h.extensionId===s.id),l=i==null?void 0:i.token,u=i==null?void 0:i.mode,f=Wt(t,"/proxy-token"),c=await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({appId:o,extensionId:s.id,...u&&{mode:u},...l&&{devSessionToken:l}})});if(c.ok){const{token:h,encryptionKey:g}=await c.json();r.set(s.id,{token:h,encryptionKey:g})}else{let h=`Proxy token failed (${c.status})`;u&&!l?h="Session token missing — re-run CLI":u&&(h="Session expired or invalid — re-run CLI"),a.set(s.id,h),console.warn(`[embeddables] Failed to obtain proxy token for extension ${s.id} (${c.status}) — ${h}`)}})),{tokens:r,errors:a}},Av=e=>typeof e=="object"&&e!==null&&e.encrypted===!0&&Array.isArray(e.data),Iv=({instanceId:e,queryApiBase:t,apiBase:o,appId:n,children:r,customerId:a,customerEmail:s,customerName:i})=>{const[l,u]=x.useState([]),[f,c]=x.useState([]),[h,g]=x.useState(new Map),[b,m]=x.useState(new Map),[v,w]=x.useState(!1),[y,k]=x.useState({authenticated:!1,user:null}),[C,T]=x.useState(void 0);x.useEffect(()=>{window.stackable||(window.stackable={emit:(P,S={})=>{const[I,...$]=P.split(":"),M=$.join(":");window.dispatchEvent(new CustomEvent(`stackable:${I}`,{detail:{eventName:M,data:S}}))}})},[]);const _=x.useRef(null),N=x.useRef(new Set),E=x.useMemo(()=>l.filter(P=>P.manifest.permissions.includes("extend:identity")).map(P=>P.id),[l]);x.useEffect(()=>{(async()=>{const S=e;try{if(!S){console.warn("[ExtensionSetup] No instanceId provided; loading no extensions"),u([]),w(!0);return}if(!o||!n){console.warn("[ExtensionSetup] apiBase and appId are required to load extensions"),u([]),w(!0);return}const I=await fetch(Wt(o,`/instances/${n}/${S}`));if(!I.ok){console.warn(`[ExtensionSetup] Instance not found or failed to load: ${S}`),u([]),w(!0);return}const $=await I.json(),M=gr(typeof window<"u"?window.location.search:""),F=await Ec($,M),{tokens:H,errors:Z}=await Pv(F,o,n,M);u(F),c(M),g(new Map(H)),m(Z)}catch(I){console.error("Failed to load extensions:",I)}finally{w(!0)}})()},[e,n,o]),x.useEffect(()=>{if(!o||!n||l.length===0)return;const S=setInterval(async()=>{const I=[];await Promise.all(l.filter($=>$.manifest.permissions.includes("data:fetch")).map(async $=>{const M=f.find(q=>q.extensionId===$.id),F=M==null?void 0:M.token,H=M==null?void 0:M.mode,Z=Wt(o,"/proxy-token"),G=await fetch(Z,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({appId:n,extensionId:$.id,...H&&{mode:H},...F&&{devSessionToken:F}})});if(G.ok){const{token:q,encryptionKey:Q}=await G.json();I.push([$.id,{token:q,encryptionKey:Q}])}else console.warn(`[embeddables] Proxy token refresh failed for extension ${$.id} (${G.status}) — using stale token`)})),I.length>0&&g($=>{const M=new Map($);for(const[F,H]of I)M.set(F,H);return M})},3300*1e3);return()=>clearInterval(S)},[l,f,o,n]),x.useEffect(()=>{if(h.size===0)return;const P=S=>{const I=S.data;if((I==null?void 0:I.type)!=="extension-ready")return;const $=I.extensionId,M=l.find(Z=>Z.id===$);if(!(M!=null&&M.bundleUrl))return;const F=f.find(Z=>Z.extensionId===$);if(kc(M.bundleUrl)&&(F==null?void 0:F.mode)!=="staging")return;const H=h.get($);H&&Me($,{type:"extension-encryption-key",encryptionKey:H.encryptionKey})};return window.addEventListener("message",P),()=>window.removeEventListener("message",P)},[l,f,h]);const z=x.useCallback((P,S)=>{const I=ft();for(const[$,M]of I){if(!M.manifest.permissions.includes("events:identity"))continue;const F=M.manifest.events??[];!F.includes("identity")&&!F.includes(`identity:${P}`)||Me($,{type:"extension-event",eventType:"identity",payload:{eventName:P,data:{state:S,timestamp:Vo(new Date().toISOString())}}})}},[]),j=x.useCallback(P=>{const S=ft();for(const[I,$]of S){if(!$.manifest.permissions.includes("events:messaging"))continue;const M=$.manifest.events??[];!M.includes("messaging")&&!M.includes("messaging:postback")&&!M.includes(`messaging:postback:${P.data.actionName}`)||Me(I,{type:"extension-event",eventType:"messaging",payload:P})}},[]),O=x.useCallback(P=>{const S=ft();for(const[I,$]of S){if(!$.manifest.permissions.includes("events:activity"))continue;const M=$.manifest.events??[];!M.includes("activity")&&!M.includes(`activity:${P.eventName}`)||Me(I,{type:"extension-event",eventType:"activity",payload:P})}},[]),B=x.useCallback(async P=>{const S=ft(),I=[];for(const[M,F]of S){if(!F.manifest.permissions.includes("extend:identity"))continue;const H=new Promise(Z=>{const G=`enrich_${M}_${Date.now()}`,q=Q=>{const ee=Q.data;(ee==null?void 0:ee.type)!=="extend-identity-response"||ee.id!==G||(window.removeEventListener("message",q),ee.additionalClaims?Z(ee.additionalClaims):Z({}))};window.addEventListener("message",q),setTimeout(()=>{window.removeEventListener("message",q),Z({})},5e3),Me(M,{type:"extend-identity-request",id:G,claims:P})});I.push(H)}if(I.length===0)return{};const $=await Promise.all(I);return Object.assign({},...$)},[]),V=x.useCallback(async P=>{if(!o||!n||!e)return console.warn("[embeddables] signIdentity skipped — missing:",{apiBase:!!o,appId:!!n,instanceId:!!e}),null;const S=Wt(o,`/instances/${n}/${e}/identity`);console.log("[embeddables] Calling identity sign:",{url:S,claims:Object.keys(P)});try{const I=await fetch(S,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(P)});if(!I.ok)return console.warn(`[embeddables] Identity sign failed (${I.status})`),null;const{token:$}=await I.json();return $}catch(I){return console.warn("[embeddables] Identity sign request failed:",I),null}},[o,n,e]),L=x.useCallback(P=>{const S=window.zE;S&&S("messenger","loginUser",async I=>{I(P)})},[]),Y=x.useCallback(()=>{const P=window.zE;P&&P("messenger","logoutUser")},[]),A=x.useCallback(P=>{console.log("[embeddables] Running sign lifecycle for user:",P.id);const{email:S,name:I}=P,$={external_id:String(P.id)};(async()=>{const M=await B({...$,email:S,name:I});console.log("[embeddables] Enriched claims:",M);const F=await V({...$,...M,email:S,name:I});console.log("[embeddables] Sign result:",{hasToken:!!F}),F&&L(F)})()},[B,V,L]),D=x.useCallback(P=>{if(E.length>0&&N.current.size<E.length){console.log(`[embeddables] Deferring sign lifecycle — waiting for extend:identity extensions: ${N.current.size}/${E.length} ready`),_.current=P;return}console.log("[embeddables] No extend:identity extensions (or all ready) — signing immediately"),A(P)},[E,A]);x.useEffect(()=>{if(!v){console.log("[embeddables] Identity effect skipped — extensions not loaded yet");return}if(console.log("[embeddables] Identity effect running",{initialized:v,customerId:!!a,extendExtensions:E.length}),a){console.log("[embeddables] Identity from props:",{customerId:a,customerEmail:s,customerName:i});const P={authenticated:!0,user:{id:String(a),email:s,name:i,provider:"shopify"}};k(S=>{var I,$;return S.authenticated&&((I=S.user)==null?void 0:I.id)===(($=P.user)==null?void 0:$.id)?S:(console.log("[embeddables] Identity state changed (props), starting sign lifecycle"),D(P.user),z("login",P),P)})}else{if(a===void 0)return;k(P=>P.authenticated?(console.log("[embeddables] Customer props cleared, logging out"),Y(),z("logout",{authenticated:!1,user:null}),{authenticated:!1,user:null}):P)}},[v,a,s,i,E,D,z,Y]),x.useEffect(()=>{if(!v||a!==void 0)return;const P=()=>{const I=document.getElementById("stackable-identity");if(I)try{const $=JSON.parse(I.textContent??"{}"),M={authenticated:!0,user:{id:String($.customerId??""),email:$.customerEmail,name:$.customerName,provider:"shopify"}};k(F=>{var H,Z;return F.authenticated&&((H=F.user)==null?void 0:H.id)===((Z=M.user)==null?void 0:Z.id)?F:(console.log("[embeddables] Identity state changed (DOM), starting sign lifecycle"),D(M.user),z("login",M),M)})}catch{console.warn("[embeddables] Failed to parse #stackable-identity JSON")}else k($=>$.authenticated?(Y(),z("logout",{authenticated:!1,user:null}),{authenticated:!1,user:null}):$)};P();const S=new MutationObserver(P);return S.observe(document.head,{childList:!0,subtree:!0}),S.observe(document.body,{childList:!0,subtree:!0}),()=>S.disconnect()},[v,a,D,z,Y]),x.useEffect(()=>{if(!y.authenticated)return;const P=S=>{const I=S.data;if((I==null?void 0:I.type)!=="extension-ready")return;const $=I.extensionId,M=l.find(H=>H.id===$);if(!(M!=null&&M.manifest.permissions.includes("events:identity")))return;const F=M.manifest.events??[];!F.includes("identity")&&!F.includes("identity:login")||Me($,{type:"extension-event",eventType:"identity",payload:{eventName:"login",data:{state:y,timestamp:Vo(new Date().toISOString())}}})};return window.addEventListener("message",P),()=>window.removeEventListener("message",P)},[y,l]),x.useEffect(()=>{if(E.length===0)return;const P=I=>{const $=I.data;if(($==null?void 0:$.type)!=="extension-ready")return;const M=$.extensionId;if(E.includes(M)&&(N.current.add(M),console.log(`[embeddables] extend:identity extension ready: ${M} (${N.current.size}/${E.length})`),N.current.size>=E.length&&_.current)){console.log("[embeddables] All extend:identity extensions ready, running deferred sign lifecycle");const F=_.current;_.current=null,A(F)}};window.addEventListener("message",P);const S=setTimeout(()=>{if(_.current){console.warn(`[embeddables] extend:identity timeout (5s) — signing with ${N.current.size}/${E.length} extensions ready`);const I=_.current;_.current=null,A(I)}},5e3);return()=>{window.removeEventListener("message",P),clearTimeout(S)}},[E,A]),x.useEffect(()=>{const P=S=>{const{detail:I}=S;I!=null&&I.eventName&&(I.eventName==="postback"?j({eventName:"postback",data:{actionName:I.data.actionName,conversationId:I.data.conversationId??"",timestamp:Vo(new Date().toISOString())}}):I.eventName==="context"&&T($=>({...$,...I.data})))};return window.addEventListener("stackable:messaging",P),()=>window.removeEventListener("stackable:messaging",P)},[j]),x.useEffect(()=>{const P=S=>{const{detail:I}=S;I!=null&&I.eventName&&O({eventName:I.eventName,data:I.data??{}})};return window.addEventListener("stackable:activity",P),()=>window.removeEventListener("stackable:activity",P)},[O]),x.useEffect(()=>{if(!v)return;const P={customerId:a??"",customerEmail:s??"",customerName:i??"",messaging:C,identity:y},S=ft();for(const[I,$]of S)$.manifest.permissions.includes("context:read")&&Me(I,{type:"context-push",context:P})},[v,a,s,i,y,C]);const R=x.useMemo(()=>({"data.query":async P=>xl(P,t),"data.fetch":async(P,S)=>{const I=h.get(P);if(!I)return{status:0,ok:!1,data:{error:"data.fetch: proxy token unavailable — ensure the extension has data:fetch permission and allowedDomains configured"}};const $=Av(S)?S:{url:S.url,method:S.method??"GET",headers:S.headers??{},body:S.body??null},M=Wt(o,"/proxy"),F=await fetch(M,{method:"POST",headers:{"Content-Type":"application/json","X-Extension-Id":P,"X-Application-Id":n??"",Authorization:`Bearer ${I.token}`},body:JSON.stringify($)}),H=await F.json();return{status:H.status??F.status,ok:H.ok??F.ok,data:H.data}},"actions.toast":async(P,S)=>{const I={...S.description&&{description:S.description},...S.duration&&{duration:S.duration},...S.position&&{position:S.position},...S.dismissible!=null&&{dismissible:S.dismissible},...S.closeButton!=null&&{closeButton:S.closeButton}};if(S.fetch){const $=F=>new Promise(H=>setTimeout(H,F)),M=Promise.all([R["data.fetch"](P,S.fetch),$(_v)]).then(([F])=>F);ht.promise(M,{loading:S.loading??S.message,success:S.success??S.message,error:S.error??"Something went wrong",...I});return}switch(S.type){case"success":{ht.success(S.message,I);break}case"error":{ht.error(S.message,I);break}case"warning":{ht.warning(S.message,I);break}case"info":{ht.info(S.message,I);break}default:ht(S.message,I)}},"actions.invoke":async P=>(window.dispatchEvent(new CustomEvent(`stackable:action:${P.action}`,{detail:P})),{success:!0}),"context.read":async()=>({customerId:a??"",customerEmail:s??"",customerName:i??"",identity:y,messaging:C})}),[o,n,t,a,s,i,h,y,C]);return v?d.jsxs(d.Fragment,{children:[d.jsx(Ul,{extensions:l,capabilityHandlers:R,components:kv(),children:r}),d.jsx(Tv,{extensions:l,tokenErrors:b})]}):null};var Mv=(e,t,o,n,r,a,s,i)=>{let l=document.documentElement,u=["light","dark"];function f(g){(Array.isArray(e)?e:[e]).forEach(b=>{let m=b==="class",v=m&&a?r.map(w=>a[w]||w):r;m?(l.classList.remove(...v),l.classList.add(a&&a[g]?a[g]:g)):l.setAttribute(b,g)}),c(g)}function c(g){i&&u.includes(g)&&(l.style.colorScheme=g)}function h(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(n)f(n);else try{let g=localStorage.getItem(t)||o,b=s&&g==="system"?h():g;f(b)}catch{}},Ov=p.createContext(void 0),Lv={setTheme:e=>{},themes:[]},zv=()=>{var e;return(e=p.useContext(Ov))!=null?e:Lv};p.memo(({forcedTheme:e,storageKey:t,attribute:o,enableSystem:n,enableColorScheme:r,defaultTheme:a,value:s,themes:i,nonce:l,scriptProps:u})=>{let f=JSON.stringify([o,t,a,e,i,s,n,r]).slice(1,-1);return p.createElement("script",{...u,suppressHydrationWarning:!0,nonce:typeof window>"u"?l:"",dangerouslySetInnerHTML:{__html:`(${Mv.toString()})(${f})`}})});const Dv=({...e})=>{const{theme:t="system"}=zv();return d.jsx(xc,{theme:t,className:"toaster group",icons:{success:d.jsx(xr,{className:"size-4"}),info:d.jsx(Gt,{className:"size-4"}),warning:d.jsx(Jc,{className:"size-4"}),error:d.jsx(Gc,{className:"size-4"}),loading:d.jsx(jo,{className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--border-radius":"var(--radius)"},...e})},$v={dark:"dark",light:"widget-theme-light"},Fv={dark:"dark",light:"light"},Bv=({children:e,theme:t="inherit"})=>d.jsxs("div",{"data-id":"widget-body",className:$v[t],style:{position:"relative",transform:"translateZ(0)"},children:[d.jsx("div",{className:"h-[700px] w-[900px] overflow-hidden rounded-md ring ring-zinc-200 dark:ring-zinc-300",children:d.jsx("div",{className:"flex h-full w-full flex-col overflow-hidden rounded-md bg-muted dark:bg-background text-foreground",children:e})}),d.jsx(Dv,{position:"bottom-center",theme:Fv[t]??"system",toastOptions:{descriptionClassName:"!text-muted-foreground"}})]}),Hv={airplay:Ic,"message-circle":Sr,"message-square":Go,headphones:jc,"help-circle":kr,bot:Lc,sparkles:Cr,zap:ed},Vv=({className:e})=>d.jsx("svg",{className:X(e,"scale-125"),viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:d.jsx("path",{d:"M10,18 L6,22 L6,18 L10,18 Z M17,6 C19.7614237,6 22,8.23857625 22,11 C22,13.7614237 19.7614237,16 17,16 L7,16 C4.23857625,16 2,13.7614237 2,11 C2,8.23857625 4.23857625,6 7,6 Z",transform:"translate(12, 14) scale(-1, 1) translate(-12, -14)"})}),Wv=({className:e})=>d.jsxs("svg",{className:e,viewBox:"0 0 190 190",fill:"currentColor","aria-hidden":"true",children:[d.jsxs("g",{id:"sl-half-right",children:[d.jsx("g",{transform:"translate(-160.365,27.97)",children:d.jsx("path",{d:"M344.73,67.03C344.73,30.01 314.72,0 277.7,0C240.68,0 210.67,30.01 210.67,67.03L255.36,67.03C255.36,54.69 265.36,44.69 277.7,44.69C290.04,44.69 300.05,54.69 300.05,67.03L344.73,67.03Z"})}),d.jsx("g",{transform:"translate(-160.365,27.97)",children:d.jsx("path",{d:"M300.04,67.03C300.04,54.69 290.05,44.69 277.7,44.69C265.35,44.69 255.36,54.69 255.36,67.03L300.04,67.03Z",opacity:"0.3"})})]}),d.jsxs("g",{id:"sl-half-left",children:[d.jsx("g",{transform:"translate(-160.365,27.97)",children:d.jsx("path",{d:"M166,67.03C166,104.05 196.01,134.06 233.03,134.06C270.05,134.06 300.06,104.05 300.06,67.03L255.37,67.03C255.37,79.37 245.37,89.37 233.03,89.37C220.69,89.37 210.69,79.37 210.69,67.03L166,67.03Z"})}),d.jsx("g",{transform:"translate(-160.365,27.97)",children:d.jsx("path",{d:"M210.68,67.03C210.68,79.37 220.68,89.37 233.03,89.37C245.38,89.37 255.37,79.37 255.37,67.03L210.68,67.03Z",opacity:"0.3"})})]})]}),Sl=400,Uv=Sl*.35,jv=({icon:e,isOpen:t,onClick:o})=>{const n=Hv[e]??Vv,[r,a]=x.useState("idle"),s=x.useRef(t);x.useEffect(()=>{if(s.current===t)return;s.current=t,a("interstitial");const l=setTimeout(()=>a("idle"),Uv);return()=>clearTimeout(l)},[t]);const i=()=>r==="interstitial"?d.jsx(Wv,{}):t?d.jsx(Vc,{}):d.jsx(n,{});return d.jsx("div",{className:"fixed bottom-8 right-8 z-50",children:d.jsx(gl,{size:"icon",className:X("h-12 w-12 rounded-full cursor-pointer transition-transform duration-300",t?"scale-115":"scale-100 hover:scale-105"),onClick:o,children:d.jsx("span",{className:X("flex items-center justify-center transition-transform",t&&"rotate-180"),style:{transitionDuration:`${Sl}ms`},children:i()})})})},Rv=({children:e,icon:t,theme:o})=>{const[n,r]=x.useState(!1),[a,s]=x.useState(!0),[i,l]=x.useState(!1),u=x.useCallback(()=>{r(f=>!f)},[]);return x.useEffect(()=>{n&&!i&&l(!0)},[n,i]),x.useEffect(()=>{const f=()=>r(m=>!m),c=()=>r(!0),h=()=>r(!1),g=()=>s(!0),b=()=>{r(!1),s(!1)};return window.addEventListener("stackable:action:toggle",f),window.addEventListener("stackable:action:open",c),window.addEventListener("stackable:action:close",h),window.addEventListener("stackable:action:show",g),window.addEventListener("stackable:action:hide",b),()=>{window.removeEventListener("stackable:action:open",c),window.removeEventListener("stackable:action:close",h),window.removeEventListener("stackable:action:toggle",f),window.removeEventListener("stackable:action:show",g),window.removeEventListener("stackable:action:hide",b)}},[]),d.jsxs(d.Fragment,{children:[a&&d.jsx(jv,{isOpen:n,icon:t,onClick:u}),i&&d.jsx("div",{"data-id":"widget-container",className:X("overflow-hidden fixed bottom-24 right-8 z-1000 rounded-md shadow-xl transition-all duration-200 ease-out origin-bottom-right",n?"opacity-100 scale-100 translate-y-0 pointer-events-auto":"opacity-0 scale-95 translate-y-2 pointer-events-none"),children:d.jsx(Bv,{theme:o,children:e})})]})},Gv=({href:e,children:t})=>d.jsx("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:"text-zinc-500 opacity-80 transition-colors hover:text-zinc-900 hover:opacity-100",children:t}),qv=(e,t)=>{const[o,n]=x.useState(null),[r,a]=x.useState(!1),[s,i]=x.useState(null);return x.useEffect(()=>{if(!e){n(null);return}(async()=>{a(!0),i(null);try{const u=await xl({action:"getCustomer",customerId:e},t);n(u)}catch(u){i(u)}finally{a(!1)}})()},[e,t]),{customer:o,loading:r,error:s}},Yv=({customerId:e,customerEmail:t,queryApiBase:o,children:n})=>{var l,u;const{customer:r,loading:a,error:s}=qv(e,o);if(a)return d.jsx(Mt,{className:"border-none shadow-none bg-transparent",children:d.jsx(Ot,{className:"flex items-center justify-center p-6",children:d.jsx(jo,{className:"h-6 w-6 animate-spin text-muted-foreground"})})});if(s||!r){const f=t?t.split("@")[0]:e?`Customer ${e.slice(-4)}`:"Customer",c=f.split(/[\s._-]+/).map(h=>h[0]).join("").slice(0,2).toUpperCase();return d.jsx(Mt,{className:"border-none px-0 py-0 mb-4 shadow-none bg-transparent",children:d.jsxs(Ot,{className:"p-4 pb-0 pt-2",children:[d.jsxs("div",{className:"flex flex-col items-center",children:[d.jsxs(Kn,{className:"h-16 w-16 mb-2 ring-2 ring-background shadow-sm",children:[d.jsx(Zn,{src:`https://ui-avatars.com/api/?name=${encodeURIComponent(f)}&background=7c3aed&color=fff&size=128`,alt:f}),d.jsx(Jn,{className:"text-lg",children:c})]}),d.jsxs("div",{className:"text-center w-full space-y-1",children:[d.jsxs("div",{children:[d.jsx("p",{className:"text-xs text-foreground/70 font-medium tracking-wide",children:"Welcome,"}),d.jsx("h2",{className:"text-lg font-bold text-foreground leading-tight",children:f})]}),t&&d.jsx("div",{className:"pt-2 flex flex-col items-center gap-1",children:d.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-xs font-semibold text-foreground/75",children:[d.jsx(Ro,{className:"h-3 w-3","aria-hidden":"true"}),d.jsx("span",{className:"truncate max-w-[200px]",children:t})]})}),d.jsx("div",{className:"py-1 rounded-lg flex justify-center gap-1",children:n})]})]}),d.jsx("p",{className:"pt-2 text-center text-xs text-muted-foreground",children:"Using fallback profile (customer API returned no data)"})]})})}const i=`${((l=r.first_name)==null?void 0:l[0])||""}${((u=r.last_name)==null?void 0:u[0])||""}`;return d.jsx(Mt,{className:"border-none px-0 py-0 mb-4 shadow-none bg-transparent",children:d.jsx(Ot,{className:"p-4 pb-0 pt-2",children:d.jsxs("div",{className:"flex flex-col items-center",children:[d.jsxs(Kn,{className:"h-16 w-16 mb-2 ring-2 ring-background shadow-sm",children:[d.jsx(Zn,{src:`https://ui-avatars.com/api/?name=${encodeURIComponent(r.name)}&background=7c3aed&color=fff&size=128`,alt:r.name}),d.jsx(Jn,{className:"text-lg",children:i})]}),d.jsxs("div",{className:"text-center w-full space-y-1",children:[d.jsxs("div",{children:[d.jsx("p",{className:"text-xs text-foreground/70 font-medium tracking-wide",children:"Welcome,"}),d.jsx("h2",{className:"text-lg font-bold text-foreground leading-tight",children:r.name})]}),d.jsx("div",{className:"pt-2 flex flex-col items-center gap-1",children:d.jsxs("div",{className:"flex items-center justify-center gap-1.5 text-xs font-semibold text-foreground/75",children:[d.jsx(Ro,{className:"h-3 w-3","aria-hidden":"true"}),d.jsx("span",{className:"truncate max-w-[200px]",children:r.email})]})}),d.jsx("div",{className:"py-1 rounded-lg flex justify-center gap-1",children:n})]})]})})})},Cl=(e,t)=>{x.useEffect(()=>{const o=t.current;if(!o)return;let n=document.getElementById(e);n||(n=document.createElement("div"),n.id=e,n.style.cssText="position:absolute;width:0;height:0;overflow:hidden;pointer-events:none;",document.body.appendChild(n));const r=new MutationObserver(()=>{for(;n.firstChild;)o.appendChild(document.adoptNode(n.firstChild))});return r.observe(n,{childList:!0,subtree:!0}),()=>{r.disconnect(),n==null||n.remove()}},[e,t])},Xv=({customization:e})=>{const t=x.useRef(null);return Cl("widget_conversations",t),x.useEffect(()=>{!window.zE||!t.current||e&&window.zE("messenger:set","customization",{conversationList:e})},[e]),d.jsx("div",{ref:t,className:"h-full overflow-hidden"})},Kv=({customization:e})=>{const t=x.useRef(null);return Cl("widget_messages",t),x.useEffect(()=>{!window.zE||!t.current||e&&window.zE("messenger:set","customization",{messageLog:e})},[e]),d.jsx("div",{ref:t,className:"h-full overflow-hidden"})},Qn=e=>{window.dispatchEvent(new CustomEvent("stackable:messaging",{detail:{eventName:"context",data:e}}))},er=25,tr=75,Zv=({header:e,buttons:t,queryApiBase:o,customerId:n="",customerEmail:r="",primaryPercent:a=50})=>{const s=Math.max(er,Math.min(tr,a)),{extensions:i}=dr(),l=x.useMemo(()=>i.some(O=>O.enabled&&(O.manifest.targets.includes("slot.header")||O.manifest.targets.includes("slot.content"))),[i]),[u,f]=x.useState(!1),[c,h]=x.useState(!1),[g,b]=x.useState("extensions"),[m,v]=x.useState(s),[w,y]=x.useState("loading"),k=x.useRef(null),C=x.useCallback(()=>!window.zE||!document.getElementById("widget_conversations")||!document.getElementById("widget_messages")?!1:(window.zE("messenger","render",{mode:"embedded",messageLog:{targetElement:"#widget_messages"},conversationList:{targetElement:"#widget_conversations"}}),window.zE("messenger:set","customization",{common:{hideHeader:!1},messageLog:{hideHeader:!0},conversationList:{hideHeader:!0,hideNewConversationButton:!0}}),!0),[]);x.useEffect(()=>{var Y,A;const O=document.querySelector('script[src*="zdassets.com/ekr/snippet"]'),B=(A=(Y=O==null?void 0:O.src)==null?void 0:Y.match(/key=([a-f0-9-]+)/))==null?void 0:A[1];if(B&&fetch(`https://ekr.zdassets.com/compose/${B}`).then(D=>D.text()).then(D=>{var P;const R=(P=D.match(/appId['"]?\s*:\s*['"]([a-f0-9]+)['"]/))==null?void 0:P[1];R&&Qn({appId:R})}).catch(()=>{}),C()){y("ready");return}const V=setInterval(()=>{C()&&(y("ready"),clearInterval(V))},100),L=setTimeout(()=>{clearInterval(V),y(D=>D==="ready"?D:(console.warn("Zendesk widget failed to load after 10 seconds"),"error"))},1e4);return()=>{clearInterval(V),clearTimeout(L)}},[C]);const T=x.useCallback(O=>{!window.zE||!O.length||(console.log("[ZendeskMessenger] setConversationTags",O,{zE:!!window.zE}),window.zE("messenger:set","conversationTags",O))},[]),_=x.useCallback(O=>{!window.zE||!O.length||(console.log("[ZendeskMessenger] setConversationFields",O,{zE:!!window.zE}),window.zE("messenger:set","conversationFields",O))},[]),N=x.useCallback(O=>{if(!window.zE)return;const{tags:B=[],fields:V=[],...L}=O??{};T(B),_(V),window.zE("messenger:ui","newConversation",Object.keys(L).length?L:void 0)},[T,_]),E=x.useCallback(O=>{const{detail:B}=O;B!=null&&B.payload&&N(B.payload)},[N]);x.useEffect(()=>(window.addEventListener("stackable:action:newConversation",E),()=>{window.removeEventListener("stackable:action:newConversation",E)}),[E]),x.useEffect(()=>{const O=V=>{const{detail:L}=V;L!=null&&L.payload&&T(L.payload)},B=V=>{const{detail:L}=V;L!=null&&L.payload&&_(L.payload)};return window.addEventListener("stackable:action:setConversationTags",O),window.addEventListener("stackable:action:setConversationFields",B),()=>{window.removeEventListener("stackable:action:setConversationTags",O),window.removeEventListener("stackable:action:setConversationFields",B)}},[T,_]),x.useEffect(()=>{if(w!=="ready"||!window.zE)return;const O=window.zE("messenger:on","conversationStarted",L=>{var A,D;const Y=(D=(A=L==null?void 0:L.payload)==null?void 0:A.conversation)==null?void 0:D.id;Y&&Qn({conversationId:Y})}),B=window.zE("messenger:on","messagesShown",L=>{var A,D;const Y=(D=(A=L==null?void 0:L.payload)==null?void 0:A.conversation)==null?void 0:D.id;Y&&Qn({conversationId:Y})}),V=window.zE("messenger:on","postbackButtonClicked",L=>{var A;const Y=L==null?void 0:L.payload;Y!=null&&Y.actionName&&window.dispatchEvent(new CustomEvent("stackable:messaging",{detail:{eventName:"postback",data:{actionName:Y.actionName,conversationId:((A=Y.conversation)==null?void 0:A.id)??""}}}))});return()=>{typeof O=="function"&&O(),typeof B=="function"&&B(),typeof V=="function"&&V()}},[w]),x.useEffect(()=>{if(!u)return;const O=V=>{if(!k.current)return;const L=k.current.getBoundingClientRect();if((c?L.width:L.height)===0)return;const A=c?(V.clientX-L.left)/L.width*100:(V.clientY-L.top)/L.height*100,D=Math.max(er,Math.min(tr,A));v(D)},B=()=>{f(!1),document.body.style.cursor="",document.body.style.userSelect=""};return document.body.style.cursor=c?"col-resize":"row-resize",document.body.style.userSelect="none",window.addEventListener("mousemove",O),window.addEventListener("mouseup",B),window.addEventListener("blur",B),()=>{window.removeEventListener("mousemove",O),window.removeEventListener("mouseup",B),window.removeEventListener("blur",B),document.body.style.cursor="",document.body.style.userSelect=""}},[u,c]),x.useEffect(()=>{if(!k.current)return;const O=k.current,B=()=>{const L=getComputedStyle(O).flexDirection==="row";h(L)};B();const V=new ResizeObserver(B);return V.observe(O),()=>{V.disconnect()}},[]);const z=x.useCallback(O=>{if(O.detail===2){v(s);return}O.preventDefault(),f(!0)},[s]),j={customerId:n,customerEmail:r};return d.jsxs("div",{"data-component":"zendesk-wrapper",className:"flex-1 flex flex-col z-10 overflow-hidden",style:{containerType:"inline-size"},children:[d.jsx("style",{children:'@container (min-width: 42rem) { [data-component="zendesk-wrapper"] > [data-id="panel-layout"] { flex-direction: row; } }'}),d.jsxs("div",{ref:k,"data-id":"panel-layout",className:"relative flex-1 overflow-hidden flex flex-col",children:[l&&d.jsxs("div",{"data-id":"primary-panel",className:"min-h-0 min-w-0 flex-none overflow-hidden flex flex-col",style:{flexBasis:`${m}%`},children:[d.jsxs("div",{className:"flex items-center justify-between px-4 py-3",children:[d.jsx("h2",{className:"font-semibold text-sm text-foreground",children:g==="extensions"?"My Profile":"My Conversations"}),d.jsxs("div",{className:"flex items-center gap-1",children:[e&&d.jsx("div",{className:"flex gap-1",children:e}),d.jsxs("div",{className:"flex rounded-lg bg-muted p-1",children:[w==="ready"&&d.jsx("button",{onClick:()=>N({}),className:"rounded-md border border-transparent p-1.5 text-muted-foreground transition-colors hover:cursor-pointer hover:text-foreground focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",title:"New Conversation",children:d.jsx(Xc,{className:"h-4 w-4"})}),t,d.jsx("button",{onClick:()=>b("conversations"),className:X("rounded-md border border-transparent p-1.5 transition-colors hover:cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",g==="conversations"?"border-border bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),title:"Conversations",children:d.jsx(Go,{className:"h-4 w-4"})}),d.jsx("button",{onClick:()=>b("extensions"),className:X("rounded-md border border-transparent p-1.5 transition-colors hover:cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/40",g==="extensions"?"border-border bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"),title:"My Profile",children:d.jsx(Er,{className:"h-4 w-4"})})]})]})]}),d.jsxs("div",{className:"flex-1 overflow-y-auto p-4 relative",children:[d.jsxs("div",{className:X("flex flex-col gap-2",g==="conversations"&&"hidden"),children:[d.jsx(Yv,{customerId:n,customerEmail:r,queryApiBase:o,children:d.jsx(jt,{target:"slot.header",context:j,className:"flex-none"})}),d.jsx(jt,{target:"slot.content",context:j,className:"flex flex-col gap-2"})]}),d.jsx("div",{className:X("h-full rounded-xl border border-zinc-200 bg-white p-2 shadow-sm dark:border-zinc-300",g==="extensions"&&"hidden"),children:w==="error"?d.jsx("div",{className:"flex h-full items-center justify-center p-6 text-center text-sm text-muted-foreground",children:d.jsx("p",{children:"Error loading conversations."})}):d.jsx(Xv,{})})]})]}),d.jsxs("div",{"data-id":"secondary-panel",className:"min-h-0 min-w-0 flex-none flex flex-col bg-white",style:{flexBasis:l?`${100-m}%`:"100%"},children:[d.jsx("div",{className:"flex-1 overflow-hidden",children:w==="error"?d.jsx("div",{className:"flex h-full items-center justify-center p-6 text-center text-sm text-muted-foreground",children:d.jsx("p",{children:"Zendesk Messenger could not be loaded. Check that a valid Snippet Key is configured."})}):d.jsx(Kv,{})}),d.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-1 py-1 mr-4 text-xs text-zinc-500",children:[d.jsx(jt,{target:"slot.footer",context:j,className:"flex items-center gap-1",fallback:d.jsxs(d.Fragment,{children:[d.jsx("div",{children:"powered by"}),d.jsx(Gv,{href:"https://zendesk.com",children:"Zendesk"})]})}),d.jsx(jt,{target:"slot.footer-links",context:j,className:"flex items-center gap-1",separator:d.jsx("span",{className:"text-zinc-300",children:"/"}),render:({children:O,index:B})=>d.jsxs(d.Fragment,{children:[B===0&&d.jsx("span",{className:"text-zinc-300",children:"+"}),O]})})]})]}),l&&d.jsxs(d.Fragment,{children:[d.jsx("div",{className:X("group/resize absolute z-20 flex items-center justify-center",c?"top-0 bottom-0 w-3 -ml-2.5 cursor-col-resize":"w-full h-3 -mt-2.5 cursor-row-resize"),style:c?{left:`${m}%`}:{top:`${m}%`},onMouseDown:z,role:"separator","aria-label":"Resize panels","aria-orientation":c?"vertical":"horizontal","aria-valuemin":er,"aria-valuemax":tr,"aria-valuenow":Math.round(m),children:d.jsx("div",{className:X("rounded-full bg-foreground/35 dark:bg-white shadow-[0_0_0_1px_rgba(255,255,255,0.16),0_0_0_1px_rgba(0,0,0,0.22)] transition-all",c?"h-20 w-0.5":"h-0.5 w-20",u?"bg-foreground/70 dark:bg-white opacity-100":"opacity-70 group-hover/resize:bg-foreground/55 dark:group-hover/resize:bg-white group-hover/resize:opacity-100")})}),u&&d.jsx("div",{className:X("absolute inset-0 z-40",c?"cursor-col-resize":"cursor-row-resize"),onMouseUp:()=>f(!1)})]})]})]})},Jv="ze-snippet",El=e=>`https://static.zdassets.com/ekr/snippet.js?key=${encodeURIComponent(e)}`,Qv=(e,t={})=>{if(typeof window>"u"||typeof document>"u"||!e)return Promise.resolve();const{autorender:o=!1,scriptId:n=Jv}=t;window.zEMessenger={autorender:o};const r=document.getElementById(n);if(r){if(r.getAttribute("src")===El(e))return Promise.resolve();r.remove()}return new Promise((a,s)=>{const i=document.createElement("script");i.id=n,i.src=El(e),i.async=!0,i.onload=()=>a(),i.onerror=()=>s(new Error("Failed to load Zendesk snippet")),document.head.appendChild(i)})},eb=({queryApiBase:e,apiBase:t,appId:o,theme:n,icon:r,instanceId:a,customerId:s,customerEmail:i,customerName:l,snippetKey:u})=>{const f=n==="dark"||n==="light"?n:"inherit";return x.useEffect(()=>{u&&Qv(u).catch(c=>{console.error("[StackableWidget] Failed to load Zendesk snippet:",c)})},[u]),d.jsx(Iv,{instanceId:a,queryApiBase:e,apiBase:t,appId:o,customerId:s,customerEmail:i,customerName:l,children:d.jsx(Rv,{theme:f,icon:r,children:d.jsx(Zv,{queryApiBase:e,customerId:s,customerEmail:i,primaryPercent:40})})})};class tb extends HTMLElement{constructor(){super();rr(this,"mountNode");rr(this,"root");const o=this.attachShadow({mode:"open"}),n=document.createElement("style");n.textContent=Ol,o.appendChild(n),this.mountNode=document.createElement("div"),o.appendChild(this.mountNode)}static get observedAttributes(){return["query-api-base","api-base","app-id","instance-id","theme","icon","customer-id","customer-email","customer-name","snippet-key"]}connectedCallback(){this.root=be.createRoot(this.mountNode),this.renderWidget()}disconnectedCallback(){var o;(o=this.root)==null||o.unmount(),this.root=void 0}attributeChangedCallback(){this.renderWidget()}renderWidget(){if(!this.root)return;const o=this.getAttribute("theme")??"";this.mountNode.classList.toggle("dark",o==="dark"),this.root.render(d.jsx(eb,{theme:o,icon:this.getAttribute("icon")??void 0,queryApiBase:this.getAttribute("query-api-base")??"",apiBase:this.getAttribute("api-base")??void 0,appId:this.getAttribute("app-id")??"",instanceId:this.getAttribute("instance-id")??"",customerId:this.getAttribute("customer-id")??void 0,customerEmail:this.getAttribute("customer-email")??void 0,customerName:this.getAttribute("customer-name")??void 0,snippetKey:this.getAttribute("snippet-key")??""}))}}customElements.get("stackable-widget")||customElements.define("stackable-widget",tb)}));
|