@contember/echo 0.0.25 → 0.0.27

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. package/dist/echo.es.js +767 -782
  2. package/dist/echo.es.js.map +1 -0
  3. package/dist/echo.umd.js +6 -5
  4. package/dist/echo.umd.js.map +1 -0
  5. package/package.json +1 -1
  6. package/dist/components/Echo.d.ts +0 -3
  7. package/dist/components/atoms/Button.d.ts +0 -7
  8. package/dist/components/atoms/Shape.d.ts +0 -8
  9. package/dist/components/atoms/index.d.ts +0 -1
  10. package/dist/components/icons/CheckCircleIcon.d.ts +0 -3
  11. package/dist/components/icons/ChevronRightIcon.d.ts +0 -3
  12. package/dist/components/icons/ContemberIcon.d.ts +0 -3
  13. package/dist/components/icons/ExternalLinkIcon.d.ts +0 -3
  14. package/dist/components/icons/HighlightIcon.d.ts +0 -3
  15. package/dist/components/icons/PenIcon.d.ts +0 -3
  16. package/dist/components/icons/TrashIcon.d.ts +0 -3
  17. package/dist/components/icons/XCircleIcon.d.ts +0 -3
  18. package/dist/components/icons/XIcon.d.ts +0 -3
  19. package/dist/components/icons/index.d.ts +0 -8
  20. package/dist/components/molecules/ColorSelector.d.ts +0 -2
  21. package/dist/components/molecules/DrawingToolbar.d.ts +0 -2
  22. package/dist/components/molecules/DrawingTooltip.d.ts +0 -2
  23. package/dist/components/molecules/LauncherButton.d.ts +0 -2
  24. package/dist/components/molecules/Notification.d.ts +0 -2
  25. package/dist/components/molecules/ShapeActions.d.ts +0 -2
  26. package/dist/components/molecules/StoredFeedback.d.ts +0 -2
  27. package/dist/components/molecules/WelcomeMessage.d.ts +0 -2
  28. package/dist/components/organisms/DrawingLayer.d.ts +0 -2
  29. package/dist/components/organisms/FeedbackForm.d.ts +0 -2
  30. package/dist/config/defaultText.d.ts +0 -2
  31. package/dist/config/drawingConfig.d.ts +0 -13
  32. package/dist/contexts/EchoContext.d.ts +0 -9
  33. package/dist/contexts/index.d.ts +0 -1
  34. package/dist/stores/drawingStore.d.ts +0 -39
  35. package/dist/stores/echoStore.d.ts +0 -16
  36. package/dist/stores/feedbackStore.d.ts +0 -12
  37. package/dist/stores/index.d.ts +0 -4
  38. package/dist/stores/widgetStore.d.ts +0 -19
  39. package/dist/types.d.ts +0 -87
  40. package/dist/utils/color.d.ts +0 -2
  41. package/dist/utils/common.d.ts +0 -1
  42. package/dist/utils/console.d.ts +0 -4
  43. package/dist/utils/debounce.d.ts +0 -1
  44. package/dist/utils/device.d.ts +0 -1
  45. package/dist/utils/events.d.ts +0 -5
  46. package/dist/utils/format.d.ts +0 -1
  47. package/dist/utils/geometry.d.ts +0 -8
  48. package/dist/utils/index.d.ts +0 -13
  49. package/dist/utils/listeners.d.ts +0 -22
  50. package/dist/utils/screenshot.d.ts +0 -2
  51. package/dist/utils/storage.d.ts +0 -28
  52. package/dist/utils/svg.d.ts +0 -13
  53. package/dist/utils/validators.d.ts +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"echo.umd.js","sources":["../../node_modules/solid-js/web/dist/web.js","../src/utils/debounce.ts","../src/utils/listeners.ts","../src/utils/storage.ts","../../node_modules/solid-js/store/dist/store.js","../src/config/drawingConfig.ts","../src/utils/color.ts","../src/utils/common.ts","../src/utils/console.ts","../src/utils/device.ts","../src/utils/events.ts","../src/utils/geometry.ts","../src/utils/screenshot.ts","../src/utils/svg.ts","../src/utils/validators.ts","../src/stores/drawingStore.ts","../src/stores/feedbackStore.ts","../src/stores/widgetStore.ts","../src/stores/echoStore.ts","../src/contexts/EchoContext.tsx","../src/components/icons/ChevronRightIcon.tsx","../src/components/icons/ContemberIcon.tsx","../src/components/icons/HighlightIcon.tsx","../src/components/icons/PenIcon.tsx","../src/components/icons/TrashIcon.tsx","../src/components/icons/CheckCircleIcon.tsx","../src/components/icons/XCircleIcon.tsx","../src/components/icons/XIcon.tsx","../src/components/molecules/ColorSelector.tsx","../src/components/molecules/DrawingToolbar.tsx","../src/components/atoms/Button.tsx","../src/components/icons/ExternalLinkIcon.tsx","../src/components/molecules/StoredFeedback.tsx","../src/components/molecules/LauncherButton.tsx","../src/components/molecules/Notification.tsx","../src/components/molecules/WelcomeMessage.tsx","../src/components/atoms/Shape.tsx","../src/components/molecules/DrawingTooltip.tsx","../src/components/molecules/ShapeActions.tsx","../src/components/organisms/DrawingLayer.tsx","../src/components/organisms/FeedbackForm.tsx","../src/components/Echo.tsx","../src/config/defaultText.ts","../src/index.tsx"],"sourcesContent":["import {\n createRoot,\n createRenderEffect,\n untrack,\n sharedConfig,\n enableHydration,\n getOwner,\n createEffect,\n runWithOwner,\n createMemo,\n createSignal,\n onCleanup,\n splitProps\n} from \"solid-js\";\nexport {\n ErrorBoundary,\n For,\n Index,\n Match,\n Show,\n Suspense,\n SuspenseList,\n Switch,\n createComponent,\n createRenderEffect as effect,\n getOwner,\n createMemo as memo,\n mergeProps,\n untrack\n} from \"solid-js\";\n\nconst booleans = [\n \"allowfullscreen\",\n \"async\",\n \"autofocus\",\n \"autoplay\",\n \"checked\",\n \"controls\",\n \"default\",\n \"disabled\",\n \"formnovalidate\",\n \"hidden\",\n \"indeterminate\",\n \"inert\",\n \"ismap\",\n \"loop\",\n \"multiple\",\n \"muted\",\n \"nomodule\",\n \"novalidate\",\n \"open\",\n \"playsinline\",\n \"readonly\",\n \"required\",\n \"reversed\",\n \"seamless\",\n \"selected\"\n];\nconst Properties = /*#__PURE__*/ new Set([\n \"className\",\n \"value\",\n \"readOnly\",\n \"formNoValidate\",\n \"isMap\",\n \"noModule\",\n \"playsInline\",\n ...booleans\n]);\nconst ChildProperties = /*#__PURE__*/ new Set([\n \"innerHTML\",\n \"textContent\",\n \"innerText\",\n \"children\"\n]);\nconst Aliases = /*#__PURE__*/ Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/ Object.assign(Object.create(null), {\n class: \"className\",\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? (a[tagName] ? a[\"$\"] : undefined) : a;\n}\nconst DelegatedEvents = /*#__PURE__*/ new Set([\n \"beforeinput\",\n \"click\",\n \"dblclick\",\n \"contextmenu\",\n \"focusin\",\n \"focusout\",\n \"input\",\n \"keydown\",\n \"keyup\",\n \"mousedown\",\n \"mousemove\",\n \"mouseout\",\n \"mouseover\",\n \"mouseup\",\n \"pointerdown\",\n \"pointermove\",\n \"pointerout\",\n \"pointerover\",\n \"pointerup\",\n \"touchend\",\n \"touchmove\",\n \"touchstart\"\n]);\nconst SVGElements = /*#__PURE__*/ new Set([\n \"altGlyph\",\n \"altGlyphDef\",\n \"altGlyphItem\",\n \"animate\",\n \"animateColor\",\n \"animateMotion\",\n \"animateTransform\",\n \"circle\",\n \"clipPath\",\n \"color-profile\",\n \"cursor\",\n \"defs\",\n \"desc\",\n \"ellipse\",\n \"feBlend\",\n \"feColorMatrix\",\n \"feComponentTransfer\",\n \"feComposite\",\n \"feConvolveMatrix\",\n \"feDiffuseLighting\",\n \"feDisplacementMap\",\n \"feDistantLight\",\n \"feDropShadow\",\n \"feFlood\",\n \"feFuncA\",\n \"feFuncB\",\n \"feFuncG\",\n \"feFuncR\",\n \"feGaussianBlur\",\n \"feImage\",\n \"feMerge\",\n \"feMergeNode\",\n \"feMorphology\",\n \"feOffset\",\n \"fePointLight\",\n \"feSpecularLighting\",\n \"feSpotLight\",\n \"feTile\",\n \"feTurbulence\",\n \"filter\",\n \"font\",\n \"font-face\",\n \"font-face-format\",\n \"font-face-name\",\n \"font-face-src\",\n \"font-face-uri\",\n \"foreignObject\",\n \"g\",\n \"glyph\",\n \"glyphRef\",\n \"hkern\",\n \"image\",\n \"line\",\n \"linearGradient\",\n \"marker\",\n \"mask\",\n \"metadata\",\n \"missing-glyph\",\n \"mpath\",\n \"path\",\n \"pattern\",\n \"polygon\",\n \"polyline\",\n \"radialGradient\",\n \"rect\",\n \"set\",\n \"stop\",\n \"svg\",\n \"switch\",\n \"symbol\",\n \"text\",\n \"textPath\",\n \"tref\",\n \"tspan\",\n \"use\",\n \"view\",\n \"vkern\"\n]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/ new Set([\n \"html\",\n \"base\",\n \"head\",\n \"link\",\n \"meta\",\n \"style\",\n \"title\",\n \"body\",\n \"address\",\n \"article\",\n \"aside\",\n \"footer\",\n \"header\",\n \"main\",\n \"nav\",\n \"section\",\n \"body\",\n \"blockquote\",\n \"dd\",\n \"div\",\n \"dl\",\n \"dt\",\n \"figcaption\",\n \"figure\",\n \"hr\",\n \"li\",\n \"ol\",\n \"p\",\n \"pre\",\n \"ul\",\n \"a\",\n \"abbr\",\n \"b\",\n \"bdi\",\n \"bdo\",\n \"br\",\n \"cite\",\n \"code\",\n \"data\",\n \"dfn\",\n \"em\",\n \"i\",\n \"kbd\",\n \"mark\",\n \"q\",\n \"rp\",\n \"rt\",\n \"ruby\",\n \"s\",\n \"samp\",\n \"small\",\n \"span\",\n \"strong\",\n \"sub\",\n \"sup\",\n \"time\",\n \"u\",\n \"var\",\n \"wbr\",\n \"area\",\n \"audio\",\n \"img\",\n \"map\",\n \"track\",\n \"video\",\n \"embed\",\n \"iframe\",\n \"object\",\n \"param\",\n \"picture\",\n \"portal\",\n \"source\",\n \"svg\",\n \"math\",\n \"canvas\",\n \"noscript\",\n \"script\",\n \"del\",\n \"ins\",\n \"caption\",\n \"col\",\n \"colgroup\",\n \"table\",\n \"tbody\",\n \"td\",\n \"tfoot\",\n \"th\",\n \"thead\",\n \"tr\",\n \"button\",\n \"datalist\",\n \"fieldset\",\n \"form\",\n \"input\",\n \"label\",\n \"legend\",\n \"meter\",\n \"optgroup\",\n \"option\",\n \"output\",\n \"progress\",\n \"select\",\n \"textarea\",\n \"details\",\n \"dialog\",\n \"menu\",\n \"summary\",\n \"details\",\n \"slot\",\n \"template\",\n \"acronym\",\n \"applet\",\n \"basefont\",\n \"bgsound\",\n \"big\",\n \"blink\",\n \"center\",\n \"content\",\n \"dir\",\n \"font\",\n \"frame\",\n \"frameset\",\n \"hgroup\",\n \"image\",\n \"keygen\",\n \"marquee\",\n \"menuitem\",\n \"nobr\",\n \"noembed\",\n \"noframes\",\n \"plaintext\",\n \"rb\",\n \"rtc\",\n \"shadow\",\n \"spacer\",\n \"strike\",\n \"tt\",\n \"xmp\",\n \"a\",\n \"abbr\",\n \"acronym\",\n \"address\",\n \"applet\",\n \"area\",\n \"article\",\n \"aside\",\n \"audio\",\n \"b\",\n \"base\",\n \"basefont\",\n \"bdi\",\n \"bdo\",\n \"bgsound\",\n \"big\",\n \"blink\",\n \"blockquote\",\n \"body\",\n \"br\",\n \"button\",\n \"canvas\",\n \"caption\",\n \"center\",\n \"cite\",\n \"code\",\n \"col\",\n \"colgroup\",\n \"content\",\n \"data\",\n \"datalist\",\n \"dd\",\n \"del\",\n \"details\",\n \"dfn\",\n \"dialog\",\n \"dir\",\n \"div\",\n \"dl\",\n \"dt\",\n \"em\",\n \"embed\",\n \"fieldset\",\n \"figcaption\",\n \"figure\",\n \"font\",\n \"footer\",\n \"form\",\n \"frame\",\n \"frameset\",\n \"head\",\n \"header\",\n \"hgroup\",\n \"hr\",\n \"html\",\n \"i\",\n \"iframe\",\n \"image\",\n \"img\",\n \"input\",\n \"ins\",\n \"kbd\",\n \"keygen\",\n \"label\",\n \"legend\",\n \"li\",\n \"link\",\n \"main\",\n \"map\",\n \"mark\",\n \"marquee\",\n \"menu\",\n \"menuitem\",\n \"meta\",\n \"meter\",\n \"nav\",\n \"nobr\",\n \"noembed\",\n \"noframes\",\n \"noscript\",\n \"object\",\n \"ol\",\n \"optgroup\",\n \"option\",\n \"output\",\n \"p\",\n \"param\",\n \"picture\",\n \"plaintext\",\n \"portal\",\n \"pre\",\n \"progress\",\n \"q\",\n \"rb\",\n \"rp\",\n \"rt\",\n \"rtc\",\n \"ruby\",\n \"s\",\n \"samp\",\n \"script\",\n \"section\",\n \"select\",\n \"shadow\",\n \"slot\",\n \"small\",\n \"source\",\n \"spacer\",\n \"span\",\n \"strike\",\n \"strong\",\n \"style\",\n \"sub\",\n \"summary\",\n \"sup\",\n \"table\",\n \"tbody\",\n \"td\",\n \"template\",\n \"textarea\",\n \"tfoot\",\n \"th\",\n \"thead\",\n \"time\",\n \"title\",\n \"tr\",\n \"track\",\n \"tt\",\n \"u\",\n \"ul\",\n \"var\",\n \"video\",\n \"wbr\",\n \"xmp\",\n \"input\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"h5\",\n \"h6\"\n]);\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? (bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart]) : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document\n ? code()\n : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG) {\n let node;\n const create = () => {\n const t = document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : t.content.firstChild;\n };\n const fn = isImportNode\n ? () => untrack(() => document.importNode(node || (node = create()), true))\n : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);\n else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);\n else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");\n else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, (handler[0] = e => handlerFn.call(node, handler[1], e)));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return (nodeStyle.cssText = value);\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(\n () => (prevProps.children = insertExpression(node, props.children, prevProps.children))\n );\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get((key = getHydrationKey())))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;\n else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const { completed, events } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++)\n node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if (\n (forceProp = prop.slice(0, 5) === \"prop:\") ||\n (isChildProp = ChildProperties.has(prop)) ||\n (!isSVG &&\n ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop)))) ||\n (isCE = node.nodeName.includes(\"-\") || \"is\" in props)\n ) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);\n else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;\n else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);\n else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value =>\n Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host &&\n typeof node.host !== \"string\" &&\n !node.host._$host &&\n node.contains(e.target) &&\n retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n } else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();\n else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = (multi && current[0] && current[0].parentNode) || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => (current = insertExpression(parent, array, current, marker, true)));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return (current = [...parent.childNodes]);\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return (current = nodes);\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return (current = multi ? [value] : value);\n if (Array.isArray(current)) {\n if (multi) return (current = cleanChildren(parent, current, marker, value));\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false);\n else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic =\n normalizeIncomingArray(\n normalized,\n Array.isArray(item) ? item : [item],\n Array.isArray(prev) ? prev : [prev]\n ) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);\n else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return (parent.textContent = \"\");\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i)\n isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);\n else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key))\n sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName);\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const { useShadow } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(\n () => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => (!clean() ? content() : dispose()), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot =\n useShadow && container.attachShadow\n ? container.attachShadow({\n mode: \"open\"\n })\n : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.removeChild(container));\n }\n },\n undefined,\n {\n render: !hydrating\n }\n );\n return marker;\n}\nfunction Dynamic(props) {\n const [p, others] = splitProps(props, [\"component\"]);\n const cached = createMemo(() => p.component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(others));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg);\n spread(el, others, isSvg);\n return el;\n }\n });\n}\n\nexport {\n Aliases,\n voidFn as Assets,\n ChildProperties,\n DOMElements,\n DelegatedEvents,\n Dynamic,\n Hydration,\n voidFn as HydrationScript,\n NoHydration,\n Portal,\n Properties,\n RequestContext,\n SVGElements,\n SVGNamespace,\n addEventListener,\n assign,\n classList,\n className,\n clearDelegatedEvents,\n delegateEvents,\n dynamicProperty,\n escape,\n voidFn as generateHydrationScript,\n voidFn as getAssets,\n getHydrationKey,\n getNextElement,\n getNextMarker,\n getNextMatch,\n getPropAlias,\n voidFn as getRequestEvent,\n hydrate,\n innerHTML,\n insert,\n isDev,\n isServer,\n render,\n renderToStream,\n renderToString,\n renderToStringAsync,\n resolveSSRNode,\n runHydrationEvents,\n setAttribute,\n setAttributeNS,\n setBoolAttribute,\n setProperty,\n spread,\n ssr,\n ssrAttribute,\n ssrClassList,\n ssrElement,\n ssrHydrationKey,\n ssrSpread,\n ssrStyle,\n style,\n template,\n use,\n voidFn as useAssets\n};\n","export const debounce = <T extends (...args: any[]) => void>(func: T, wait: number) => {\n\tlet timeout: number | undefined\n\n\treturn (...args: Parameters<T>) => {\n\t\tclearTimeout(timeout)\n\t\ttimeout = window.setTimeout(() => func(...args), wait)\n\t}\n}\n","import { onCleanup } from 'solid-js'\nimport { onMount } from 'solid-js'\n\nexport const registerKeyListener = (key: string, callback: (e: KeyboardEvent) => void) => {\n\tregisterWindowEventListener({\n\t\tevent: 'keydown',\n\t\tcallback: e => {\n\t\t\tif (e.key === key) {\n\t\t\t\tcallback(e)\n\t\t\t}\n\t\t},\n\t})\n}\n\nexport const registerWindowEventListener: {\n\t<K extends keyof WindowEventMap>(props: {\n\t\tevent: K\n\t\tcallback: (e: WindowEventMap[K]) => void\n\t\tonMount?: () => void\n\t\tonCleanup?: () => void\n\t}): void\n\t(props: {\n\t\tevent: string\n\t\tcallback: (e: Event) => void\n\t\tonMount?: () => void\n\t\tonCleanup?: () => void\n\t}): void\n} = (props: any) => {\n\tconst { event, callback, onMount: mountCallback, onCleanup: cleanupCallback } = props\n\tconst handleEvent = (e: Event) => {\n\t\tcallback(e)\n\t}\n\n\tonMount(() => {\n\t\tmountCallback?.()\n\t\twindow.addEventListener(event, handleEvent)\n\t})\n\n\tonCleanup(() => {\n\t\tcleanupCallback?.()\n\t\twindow.removeEventListener(event, handleEvent)\n\t})\n}\nexport const registerMutationObserver = (props: {\n\ttarget: Node\n\toptions?: MutationObserverInit\n\tcallback: (mutations: MutationRecord[]) => void\n\tonMount?: () => void\n\tonCleanup?: () => void\n}) => {\n\tconst { target, options, callback, onMount: mountCallback, onCleanup: cleanupCallback } = props\n\tconst observer = new MutationObserver(callback)\n\n\tonMount(() => {\n\t\tmountCallback?.()\n\t\tobserver.observe(target, options)\n\t})\n\n\tonCleanup(() => {\n\t\tcleanupCallback?.()\n\t\tobserver.disconnect()\n\t})\n}\n","import { DrawingState, FeedbackState } from '~/stores'\nimport type { Shape } from '~/types'\n\ntype StoredPageState = {\n\tfeedback: {\n\t\tcomment: string\n\t}\n\tdrawing: {\n\t\tshapes: Shape[]\n\t}\n\tlatestQuery?: string\n}\n\nconst STORAGE_PREFIX = 'echo_'\nconst STORAGE_KEY = 'echo_page_state'\n\nexport const dispatchStorageChange = () => {\n\twindow.dispatchEvent(new CustomEvent('echo-storage-change'))\n}\n\nexport const getStorageKey = (key: string): string => `${STORAGE_PREFIX}${key}`\n\nexport const getFromStorage = <T>(key: string, defaultValue: T): T => {\n\ttry {\n\t\tconst item = localStorage.getItem(getStorageKey(key))\n\t\treturn item ? JSON.parse(item) : defaultValue\n\t} catch {\n\t\treturn defaultValue\n\t}\n}\n\nexport const setToStorage = <T>(key: string, value: T): void => {\n\ttry {\n\t\tlocalStorage.setItem(getStorageKey(key), JSON.stringify(value))\n\t} catch (error) {\n\t\tconsole.warn('Failed to save to localStorage:', error)\n\t}\n}\n\nexport const getPageKey = () => {\n\treturn window.location.pathname\n}\n\nexport const savePageState = (pageKey: string, state: { feedback: FeedbackState; drawing: DrawingState }) => {\n\ttry {\n\t\tconst existingData = localStorage.getItem(STORAGE_KEY)\n\t\tconst allPagesData = existingData ? JSON.parse(existingData) : {}\n\n\t\tif (!state.feedback.comment && (!state.drawing.shapes || state.drawing.shapes.length === 0)) {\n\t\t\tdelete allPagesData[pageKey]\n\t\t} else {\n\t\t\tconst currentQuery = window.location.search || undefined\n\t\t\tconst essentialState: StoredPageState = {\n\t\t\t\tfeedback: {\n\t\t\t\t\tcomment: state.feedback.comment,\n\t\t\t\t},\n\t\t\t\tdrawing: {\n\t\t\t\t\tshapes: state.drawing.shapes,\n\t\t\t\t},\n\t\t\t\tlatestQuery: currentQuery,\n\t\t\t}\n\t\t\tallPagesData[pageKey] = essentialState\n\t\t}\n\n\t\tlocalStorage.setItem(STORAGE_KEY, JSON.stringify(allPagesData))\n\t\tdispatchStorageChange()\n\t} catch (error) {\n\t\tconsole.error('Failed to save page state:', error)\n\t}\n}\n\nexport const loadPageState = (pageKey: string): StoredPageState | null => {\n\ttry {\n\t\tconst existingData = localStorage.getItem(STORAGE_KEY)\n\t\tif (!existingData) return null\n\n\t\tconst allPagesData = JSON.parse(existingData)\n\t\treturn allPagesData[pageKey] || null\n\t} catch (error) {\n\t\tconsole.error('Failed to load page state:', error)\n\t\treturn null\n\t}\n}\n\nexport const clearPageState = (pageKey: string) => {\n\ttry {\n\t\tconst existingData = localStorage.getItem(STORAGE_KEY)\n\t\tif (!existingData) return\n\n\t\tconst allPagesData = JSON.parse(existingData)\n\t\tdelete allPagesData[pageKey]\n\t\tlocalStorage.setItem(STORAGE_KEY, JSON.stringify(allPagesData))\n\t\tdispatchStorageChange()\n\t} catch (error) {\n\t\tconsole.error('Failed to clear page state:', error)\n\t}\n}\n\nexport const getStoredPagesCount = (): number => {\n\ttry {\n\t\tconst existingData = localStorage.getItem(STORAGE_KEY)\n\t\tif (!existingData) return 0\n\n\t\tconst allPagesData = JSON.parse(existingData)\n\t\treturn Object.keys(allPagesData).length\n\t} catch (error) {\n\t\tconsole.error('Failed to get stored pages count:', error)\n\t\treturn 0\n\t}\n}\n\nexport const getStoredPages = (): { path: string; state: StoredPageState }[] => {\n\ttry {\n\t\tconst existingData = localStorage.getItem(STORAGE_KEY)\n\t\tif (!existingData) return []\n\n\t\tconst allPagesData = JSON.parse(existingData)\n\t\treturn Object.entries(allPagesData).map(([path, state]) => ({\n\t\t\tpath,\n\t\t\tstate: state as StoredPageState,\n\t\t}))\n\t} catch (error) {\n\t\tconsole.error('Failed to get stored pages:', error)\n\t\treturn []\n\t}\n}\n","import { $PROXY, $TRACK, getListener, batch, createSignal } from \"solid-js\";\n\nconst $RAW = Symbol(\"store-raw\"),\n $NODE = Symbol(\"store-node\"),\n $HAS = Symbol(\"store-has\"),\n $SELF = Symbol(\"store-self\");\nfunction wrap$1(value) {\n let p = value[$PROXY];\n if (!p) {\n Object.defineProperty(value, $PROXY, {\n value: (p = new Proxy(value, proxyTraps$1))\n });\n if (!Array.isArray(value)) {\n const keys = Object.keys(value),\n desc = Object.getOwnPropertyDescriptors(value);\n for (let i = 0, l = keys.length; i < l; i++) {\n const prop = keys[i];\n if (desc[prop].get) {\n Object.defineProperty(value, prop, {\n enumerable: desc[prop].enumerable,\n get: desc[prop].get.bind(p)\n });\n }\n }\n }\n }\n return p;\n}\nfunction isWrappable(obj) {\n let proto;\n return (\n obj != null &&\n typeof obj === \"object\" &&\n (obj[$PROXY] ||\n !(proto = Object.getPrototypeOf(obj)) ||\n proto === Object.prototype ||\n Array.isArray(obj))\n );\n}\nfunction unwrap(item, set = new Set()) {\n let result, unwrapped, v, prop;\n if ((result = item != null && item[$RAW])) return result;\n if (!isWrappable(item) || set.has(item)) return item;\n if (Array.isArray(item)) {\n if (Object.isFrozen(item)) item = item.slice(0);\n else set.add(item);\n for (let i = 0, l = item.length; i < l; i++) {\n v = item[i];\n if ((unwrapped = unwrap(v, set)) !== v) item[i] = unwrapped;\n }\n } else {\n if (Object.isFrozen(item)) item = Object.assign({}, item);\n else set.add(item);\n const keys = Object.keys(item),\n desc = Object.getOwnPropertyDescriptors(item);\n for (let i = 0, l = keys.length; i < l; i++) {\n prop = keys[i];\n if (desc[prop].get) continue;\n v = item[prop];\n if ((unwrapped = unwrap(v, set)) !== v) item[prop] = unwrapped;\n }\n }\n return item;\n}\nfunction getNodes(target, symbol) {\n let nodes = target[symbol];\n if (!nodes)\n Object.defineProperty(target, symbol, {\n value: (nodes = Object.create(null))\n });\n return nodes;\n}\nfunction getNode(nodes, property, value) {\n if (nodes[property]) return nodes[property];\n const [s, set] = createSignal(value, {\n equals: false,\n internal: true\n });\n s.$ = set;\n return (nodes[property] = s);\n}\nfunction proxyDescriptor$1(target, property) {\n const desc = Reflect.getOwnPropertyDescriptor(target, property);\n if (!desc || desc.get || !desc.configurable || property === $PROXY || property === $NODE)\n return desc;\n delete desc.value;\n delete desc.writable;\n desc.get = () => target[$PROXY][property];\n return desc;\n}\nfunction trackSelf(target) {\n getListener() && getNode(getNodes(target, $NODE), $SELF)();\n}\nfunction ownKeys(target) {\n trackSelf(target);\n return Reflect.ownKeys(target);\n}\nconst proxyTraps$1 = {\n get(target, property, receiver) {\n if (property === $RAW) return target;\n if (property === $PROXY) return receiver;\n if (property === $TRACK) {\n trackSelf(target);\n return receiver;\n }\n const nodes = getNodes(target, $NODE);\n const tracked = nodes[property];\n let value = tracked ? tracked() : target[property];\n if (property === $NODE || property === $HAS || property === \"__proto__\") return value;\n if (!tracked) {\n const desc = Object.getOwnPropertyDescriptor(target, property);\n if (\n getListener() &&\n (typeof value !== \"function\" || target.hasOwnProperty(property)) &&\n !(desc && desc.get)\n )\n value = getNode(nodes, property, value)();\n }\n return isWrappable(value) ? wrap$1(value) : value;\n },\n has(target, property) {\n if (\n property === $RAW ||\n property === $PROXY ||\n property === $TRACK ||\n property === $NODE ||\n property === $HAS ||\n property === \"__proto__\"\n )\n return true;\n getListener() && getNode(getNodes(target, $HAS), property)();\n return property in target;\n },\n set() {\n return true;\n },\n deleteProperty() {\n return true;\n },\n ownKeys: ownKeys,\n getOwnPropertyDescriptor: proxyDescriptor$1\n};\nfunction setProperty(state, property, value, deleting = false) {\n if (!deleting && state[property] === value) return;\n const prev = state[property],\n len = state.length;\n if (value === undefined) {\n delete state[property];\n if (state[$HAS] && state[$HAS][property] && prev !== undefined) state[$HAS][property].$();\n } else {\n state[property] = value;\n if (state[$HAS] && state[$HAS][property] && prev === undefined) state[$HAS][property].$();\n }\n let nodes = getNodes(state, $NODE),\n node;\n if ((node = getNode(nodes, property, prev))) node.$(() => value);\n if (Array.isArray(state) && state.length !== len) {\n for (let i = state.length; i < len; i++) (node = nodes[i]) && node.$();\n (node = getNode(nodes, \"length\", len)) && node.$(state.length);\n }\n (node = nodes[$SELF]) && node.$();\n}\nfunction mergeStoreNode(state, value) {\n const keys = Object.keys(value);\n for (let i = 0; i < keys.length; i += 1) {\n const key = keys[i];\n setProperty(state, key, value[key]);\n }\n}\nfunction updateArray(current, next) {\n if (typeof next === \"function\") next = next(current);\n next = unwrap(next);\n if (Array.isArray(next)) {\n if (current === next) return;\n let i = 0,\n len = next.length;\n for (; i < len; i++) {\n const value = next[i];\n if (current[i] !== value) setProperty(current, i, value);\n }\n setProperty(current, \"length\", len);\n } else mergeStoreNode(current, next);\n}\nfunction updatePath(current, path, traversed = []) {\n let part,\n prev = current;\n if (path.length > 1) {\n part = path.shift();\n const partType = typeof part,\n isArray = Array.isArray(current);\n if (Array.isArray(part)) {\n for (let i = 0; i < part.length; i++) {\n updatePath(current, [part[i]].concat(path), traversed);\n }\n return;\n } else if (isArray && partType === \"function\") {\n for (let i = 0; i < current.length; i++) {\n if (part(current[i], i)) updatePath(current, [i].concat(path), traversed);\n }\n return;\n } else if (isArray && partType === \"object\") {\n const { from = 0, to = current.length - 1, by = 1 } = part;\n for (let i = from; i <= to; i += by) {\n updatePath(current, [i].concat(path), traversed);\n }\n return;\n } else if (path.length > 1) {\n updatePath(current[part], path, [part].concat(traversed));\n return;\n }\n prev = current[part];\n traversed = [part].concat(traversed);\n }\n let value = path[0];\n if (typeof value === \"function\") {\n value = value(prev, traversed);\n if (value === prev) return;\n }\n if (part === undefined && value == undefined) return;\n value = unwrap(value);\n if (part === undefined || (isWrappable(prev) && isWrappable(value) && !Array.isArray(value))) {\n mergeStoreNode(prev, value);\n } else setProperty(current, part, value);\n}\nfunction createStore(...[store, options]) {\n const unwrappedStore = unwrap(store || {});\n const isArray = Array.isArray(unwrappedStore);\n const wrappedStore = wrap$1(unwrappedStore);\n function setStore(...args) {\n batch(() => {\n isArray && args.length === 1\n ? updateArray(unwrappedStore, args[0])\n : updatePath(unwrappedStore, args);\n });\n }\n return [wrappedStore, setStore];\n}\n\nfunction proxyDescriptor(target, property) {\n const desc = Reflect.getOwnPropertyDescriptor(target, property);\n if (\n !desc ||\n desc.get ||\n desc.set ||\n !desc.configurable ||\n property === $PROXY ||\n property === $NODE\n )\n return desc;\n delete desc.value;\n delete desc.writable;\n desc.get = () => target[$PROXY][property];\n desc.set = v => (target[$PROXY][property] = v);\n return desc;\n}\nconst proxyTraps = {\n get(target, property, receiver) {\n if (property === $RAW) return target;\n if (property === $PROXY) return receiver;\n if (property === $TRACK) {\n trackSelf(target);\n return receiver;\n }\n const nodes = getNodes(target, $NODE);\n const tracked = nodes[property];\n let value = tracked ? tracked() : target[property];\n if (property === $NODE || property === $HAS || property === \"__proto__\") return value;\n if (!tracked) {\n const desc = Object.getOwnPropertyDescriptor(target, property);\n const isFunction = typeof value === \"function\";\n if (getListener() && (!isFunction || target.hasOwnProperty(property)) && !(desc && desc.get))\n value = getNode(nodes, property, value)();\n else if (value != null && isFunction && value === Array.prototype[property]) {\n return (...args) => batch(() => Array.prototype[property].apply(receiver, args));\n }\n }\n return isWrappable(value) ? wrap(value) : value;\n },\n has(target, property) {\n if (\n property === $RAW ||\n property === $PROXY ||\n property === $TRACK ||\n property === $NODE ||\n property === $HAS ||\n property === \"__proto__\"\n )\n return true;\n getListener() && getNode(getNodes(target, $HAS), property)();\n return property in target;\n },\n set(target, property, value) {\n batch(() => setProperty(target, property, unwrap(value)));\n return true;\n },\n deleteProperty(target, property) {\n batch(() => setProperty(target, property, undefined, true));\n return true;\n },\n ownKeys: ownKeys,\n getOwnPropertyDescriptor: proxyDescriptor\n};\nfunction wrap(value) {\n let p = value[$PROXY];\n if (!p) {\n Object.defineProperty(value, $PROXY, {\n value: (p = new Proxy(value, proxyTraps))\n });\n const keys = Object.keys(value),\n desc = Object.getOwnPropertyDescriptors(value);\n const proto = Object.getPrototypeOf(value);\n const isClass =\n proto !== null &&\n value !== null &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n proto !== Object.prototype;\n if (isClass) {\n const descriptors = Object.getOwnPropertyDescriptors(proto);\n keys.push(...Object.keys(descriptors));\n Object.assign(desc, descriptors);\n }\n for (let i = 0, l = keys.length; i < l; i++) {\n const prop = keys[i];\n if (isClass && prop === \"constructor\") continue;\n if (desc[prop].get) {\n const get = desc[prop].get.bind(p);\n Object.defineProperty(value, prop, {\n get,\n configurable: true\n });\n }\n if (desc[prop].set) {\n const og = desc[prop].set,\n set = v => batch(() => og.call(p, v));\n Object.defineProperty(value, prop, {\n set,\n configurable: true\n });\n }\n }\n }\n return p;\n}\nfunction createMutable(state, options) {\n const unwrappedStore = unwrap(state || {});\n const wrappedStore = wrap(unwrappedStore);\n return wrappedStore;\n}\nfunction modifyMutable(state, modifier) {\n batch(() => modifier(unwrap(state)));\n}\n\nconst $ROOT = Symbol(\"store-root\");\nfunction applyState(target, parent, property, merge, key) {\n const previous = parent[property];\n if (target === previous) return;\n const isArray = Array.isArray(target);\n if (\n property !== $ROOT &&\n (!isWrappable(target) ||\n !isWrappable(previous) ||\n isArray !== Array.isArray(previous) ||\n (key && target[key] !== previous[key]))\n ) {\n setProperty(parent, property, target);\n return;\n }\n if (isArray) {\n if (\n target.length &&\n previous.length &&\n (!merge || (key && target[0] && target[0][key] != null))\n ) {\n let i, j, start, end, newEnd, item, newIndicesNext, keyVal;\n for (\n start = 0, end = Math.min(previous.length, target.length);\n start < end &&\n (previous[start] === target[start] ||\n (key && previous[start] && target[start] && previous[start][key] === target[start][key]));\n start++\n ) {\n applyState(target[start], previous, start, merge, key);\n }\n const temp = new Array(target.length),\n newIndices = new Map();\n for (\n end = previous.length - 1, newEnd = target.length - 1;\n end >= start &&\n newEnd >= start &&\n (previous[end] === target[newEnd] ||\n (key && previous[end] && target[newEnd] && previous[end][key] === target[newEnd][key]));\n end--, newEnd--\n ) {\n temp[newEnd] = previous[end];\n }\n if (start > newEnd || start > end) {\n for (j = start; j <= newEnd; j++) setProperty(previous, j, target[j]);\n for (; j < target.length; j++) {\n setProperty(previous, j, temp[j]);\n applyState(target[j], previous, j, merge, key);\n }\n if (previous.length > target.length) setProperty(previous, \"length\", target.length);\n return;\n }\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = target[j];\n keyVal = key && item ? item[key] : item;\n i = newIndices.get(keyVal);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(keyVal, j);\n }\n for (i = start; i <= end; i++) {\n item = previous[i];\n keyVal = key && item ? item[key] : item;\n j = newIndices.get(keyVal);\n if (j !== undefined && j !== -1) {\n temp[j] = previous[i];\n j = newIndicesNext[j];\n newIndices.set(keyVal, j);\n }\n }\n for (j = start; j < target.length; j++) {\n if (j in temp) {\n setProperty(previous, j, temp[j]);\n applyState(target[j], previous, j, merge, key);\n } else setProperty(previous, j, target[j]);\n }\n } else {\n for (let i = 0, len = target.length; i < len; i++) {\n applyState(target[i], previous, i, merge, key);\n }\n }\n if (previous.length > target.length) setProperty(previous, \"length\", target.length);\n return;\n }\n const targetKeys = Object.keys(target);\n for (let i = 0, len = targetKeys.length; i < len; i++) {\n applyState(target[targetKeys[i]], previous, targetKeys[i], merge, key);\n }\n const previousKeys = Object.keys(previous);\n for (let i = 0, len = previousKeys.length; i < len; i++) {\n if (target[previousKeys[i]] === undefined) setProperty(previous, previousKeys[i], undefined);\n }\n}\nfunction reconcile(value, options = {}) {\n const { merge, key = \"id\" } = options,\n v = unwrap(value);\n return state => {\n if (!isWrappable(state) || !isWrappable(v)) return v;\n const res = applyState(\n v,\n {\n [$ROOT]: state\n },\n $ROOT,\n merge,\n key\n );\n return res === undefined ? state : res;\n };\n}\nconst producers = new WeakMap();\nconst setterTraps = {\n get(target, property) {\n if (property === $RAW) return target;\n const value = target[property];\n let proxy;\n return isWrappable(value)\n ? producers.get(value) ||\n (producers.set(value, (proxy = new Proxy(value, setterTraps))), proxy)\n : value;\n },\n set(target, property, value) {\n setProperty(target, property, unwrap(value));\n return true;\n },\n deleteProperty(target, property) {\n setProperty(target, property, undefined, true);\n return true;\n }\n};\nfunction produce(fn) {\n return state => {\n if (isWrappable(state)) {\n let proxy;\n if (!(proxy = producers.get(state))) {\n producers.set(state, (proxy = new Proxy(state, setterTraps)));\n }\n fn(proxy);\n }\n return state;\n };\n}\n\nconst DEV = undefined;\n\nexport { $RAW, DEV, createMutable, createStore, modifyMutable, produce, reconcile, unwrap };\n","import type { DrawingTool } from '~/types'\n\ntype ToolConfig = {\n\tid: DrawingTool\n\tlabel: string\n\tgetCursor: (color: string) => string\n\tstrokeWidth: number\n\topacity: {\n\t\tselected: number\n\t\tdefault: number\n\t}\n}\n\nexport const toolConfig: Record<DrawingTool, ToolConfig> = {\n\trectangle: {\n\t\tid: 'rectangle',\n\t\tlabel: 'Highlight',\n\t\tgetCursor: () => 'crosshair',\n\t\tstrokeWidth: 2,\n\t\topacity: {\n\t\t\tselected: 1,\n\t\t\tdefault: 1,\n\t\t},\n\t},\n\tpath: {\n\t\tid: 'path',\n\t\tlabel: 'Pen',\n\t\tgetCursor: (color: string) =>\n\t\t\t`url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" stroke=\"${color.replace('#', '%23')}\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"24\" cy=\"24\" r=\"8\"/></svg>') 24 24, auto`,\n\t\tstrokeWidth: 6,\n\t\topacity: {\n\t\t\tselected: 0.6,\n\t\t\tdefault: 1,\n\t\t},\n\t},\n}\n","export const calculateLuminance = (hexColor: string): number => {\n\t// Remove the # if present\n\tconst color = hexColor.replace('#', '')\n\n\t// Convert hex to RGB\n\tconst r = Number.parseInt(color.slice(0, 2), 16) / 255\n\tconst g = Number.parseInt(color.slice(2, 2), 16) / 255\n\tconst b = Number.parseInt(color.slice(4, 2), 16) / 255\n\n\t// Calculate relative luminance using sRGB coefficients\n\treturn 0.2126 * r + 0.7152 * g + 0.0722 * b\n}\n\nexport const getContrastColor = (hexColor: string): string => {\n\tconst luminance = calculateLuminance(hexColor)\n\t// Use white text for dark backgrounds (luminance < 0.5)\n\t// Use black text for light backgrounds (luminance >= 0.5)\n\treturn luminance < 0.5 ? '#FFFFFF' : '#000000'\n}\n","export const deepMerge = (target: any, source: any): any => {\n\tif (!source) return target\n\tconst result = { ...target }\n\tfor (const key in source) {\n\t\tif (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n\t\t\tresult[key] = deepMerge(target[key], source[key])\n\t\t} else {\n\t\t\tresult[key] = source[key]\n\t\t}\n\t}\n\treturn result\n}\n","import type { ConsoleEntry } from '~/types'\n\nlet consoleBuffer: ConsoleEntry[] = []\nlet originalConsole: { log: typeof console.log; warn: typeof console.warn; error: typeof console.error } | null = null\nlet originalOnError: typeof window.onerror | null = null\nlet originalOnUnhandledRejection: ((event: PromiseRejectionEvent) => void) | null = null\n\nconst createConsoleProxy = (type: ConsoleEntry['type'], originalFn: (...args: any[]) => void) => {\n\treturn (...args: any[]) => {\n\t\tconst message = args.map(arg => (typeof arg === 'string' ? arg : arg instanceof Error ? arg.stack || arg.message : JSON.stringify(arg))).join(' ')\n\n\t\tconsoleBuffer.push({\n\t\t\ttype,\n\t\t\tmessage,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t})\n\n\t\tif (consoleBuffer.length > 1000) {\n\t\t\tconsoleBuffer = consoleBuffer.slice(-1000)\n\t\t}\n\n\t\toriginalFn.apply(console, args)\n\t}\n}\n\nexport const setupConsole = () => {\n\tif (originalConsole) return\n\n\toriginalConsole = {\n\t\tlog: console.log,\n\t\twarn: console.warn,\n\t\terror: console.error,\n\t}\n\n\toriginalOnError = window.onerror\n\toriginalOnUnhandledRejection = window.onunhandledrejection\n\n\twindow.onerror = (message, source, lineno, colno, error) => {\n\t\tconst errorMessage = error?.stack || error?.message || message\n\t\tconsoleBuffer.push({\n\t\t\ttype: 'error',\n\t\t\tmessage: `Uncaught Error: ${errorMessage}\\nLocation: ${source}:${lineno}:${colno}`,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t})\n\n\t\tif (originalOnError) {\n\t\t\treturn originalOnError(message, source, lineno, colno, error)\n\t\t}\n\t\treturn false\n\t}\n\n\twindow.onunhandledrejection = event => {\n\t\tconst error = event.reason\n\t\tconsoleBuffer.push({\n\t\t\ttype: 'error',\n\t\t\tmessage: `Unhandled Promise Rejection: ${error?.stack || error?.message || error}`,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t})\n\n\t\tif (originalOnUnhandledRejection) {\n\t\t\toriginalOnUnhandledRejection(event)\n\t\t}\n\t}\n\n\tconsole.log = createConsoleProxy('log', originalConsole.log)\n\tconsole.warn = createConsoleProxy('warn', originalConsole.warn)\n\tconsole.error = createConsoleProxy('error', originalConsole.error)\n\n\twindow.addEventListener('error', event => {\n\t\tconst { message, filename, lineno, colno, error } = event\n\t\tconst errorMessage = error?.stack || error?.message || message\n\t\tconsoleBuffer.push({\n\t\t\ttype: 'error',\n\t\t\tmessage: `Uncaught Error: ${errorMessage}\\nLocation: ${filename}:${lineno}:${colno}`,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t})\n\t})\n}\n\nexport const cleanupConsole = () => {\n\tif (originalConsole) {\n\t\tconsole.log = originalConsole.log\n\t\tconsole.warn = originalConsole.warn\n\t\tconsole.error = originalConsole.error\n\t\toriginalConsole = null\n\t}\n\tif (originalOnError) {\n\t\twindow.onerror = originalOnError\n\t\toriginalOnError = null\n\t}\n\tif (originalOnUnhandledRejection) {\n\t\twindow.onunhandledrejection = originalOnUnhandledRejection\n\t\toriginalOnUnhandledRejection = null\n\t}\n\twindow.removeEventListener('error', () => {})\n\tconsoleBuffer = []\n}\n\nexport const getConsoleBuffer = (): ConsoleEntry[] => [...consoleBuffer]\n","export const isMobileDevice = () => {\n\treturn (\n\t\t/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || window.matchMedia?.('(max-width: 768px)').matches\n\t)\n}\n","import type { Point } from '~/types'\n\nexport const getPointFromEvent = (e: MouseEvent | TouchEvent, { useClientCoords = false }: { useClientCoords?: boolean } = {}): Point => {\n\tconst isTouchEvent = typeof TouchEvent !== 'undefined' && e instanceof TouchEvent\n\tconst touch = isTouchEvent ? e.touches[0] : null\n\treturn {\n\t\tx: touch ? (useClientCoords ? touch.clientX : touch.pageX) : useClientCoords ? (e as MouseEvent).clientX : (e as MouseEvent).pageX,\n\t\ty: touch ? (useClientCoords ? touch.clientY : touch.pageY) : useClientCoords ? (e as MouseEvent).clientY : (e as MouseEvent).pageY,\n\t}\n}\n\nexport const getDistance = (p1: Point, p2: Point): number => {\n\tconst dx = p2.x - p1.x\n\tconst dy = p2.y - p1.y\n\treturn Math.sqrt(dx * dx + dy * dy)\n}\n","import type { Point } from '~/types'\n\nexport const getRectFromPoints = (points: Point[]) => {\n\tif (points.length !== 2) return null\n\tconst [start, end] = points\n\treturn {\n\t\tx: Math.min(start.x, end.x),\n\t\ty: Math.min(start.y, end.y),\n\t\twidth: Math.abs(end.x - start.x),\n\t\theight: Math.abs(end.y - start.y),\n\t}\n}\n\nexport const getPathFromPoints = (points: Point[]) => {\n\tif (points.length < 2) return null\n\treturn `M ${points[0].x} ${points[0].y} ${points\n\t\t.slice(1)\n\t\t.map(point => `L ${point.x} ${point.y}`)\n\t\t.join(' ')}`\n}\n","import html2canvas from 'html2canvas'\nimport type { Screenshot } from '~/types'\n\nconst createCanvas = (width: number, height: number): HTMLCanvasElement => {\n\tconst canvas = document.createElement('canvas')\n\tcanvas.width = width\n\tcanvas.height = height\n\treturn canvas\n}\n\nconst shouldIgnoreElement = (element: Element): boolean => {\n\treturn element.hasAttribute('data-hide-when-drawing')\n}\n\nexport const captureScreenshot = async (): Promise<Screenshot | undefined> => {\n\ttry {\n\t\tconst screenshot = await html2canvas(document.body, {\n\t\t\tbackgroundColor: null,\n\t\t\tlogging: false,\n\t\t\tuseCORS: true,\n\t\t\tscale: 1,\n\t\t\tallowTaint: true,\n\t\t\tforeignObjectRendering: true,\n\t\t\tignoreElements: shouldIgnoreElement,\n\t\t})\n\n\t\tconst canvas = createCanvas(screenshot.width, screenshot.height)\n\t\tconst ctx = canvas.getContext('2d')\n\n\t\tif (!ctx) {\n\t\t\tthrow new Error('Failed to get canvas context')\n\t\t}\n\n\t\tctx.drawImage(screenshot, 0, 0)\n\n\t\treturn canvas.toDataURL() as Screenshot\n\t} catch (error) {\n\t\tconsole.error('Failed to capture screenshot:', error)\n\t\treturn undefined\n\t}\n}\n","export const generateCutoutPath = (\n\tdimensions: {\n\t\twidth: number\n\t\theight: number\n\t},\n\tcurrentPoints: { x: number; y: number }[],\n\tshapes: { type: string; points: { x: number; y: number }[] }[],\n) => {\n\tlet path = `M0 0 H${dimensions.width} V${dimensions.height} H0 Z`\n\n\tif (currentPoints.length === 2) {\n\t\tconst [start, end] = currentPoints\n\t\tpath += ` M${start.x} ${start.y} h${end.x - start.x} v${end.y - start.y} h${start.x - end.x} v${start.y - end.y}`\n\t}\n\n\tfor (const shape of shapes) {\n\t\tif (shape.type === 'rectangle') {\n\t\t\tconst [start, end] = shape.points\n\t\t\tpath += ` M${start.x} ${start.y} h${end.x - start.x} v${end.y - start.y} h${start.x - end.x} v${start.y - end.y}`\n\t\t}\n\t}\n\n\treturn path\n}\n","import type { EchoConfig } from '~/types'\n\nexport const validateOptions = (options: EchoConfig): void => {\n\tif (typeof options !== 'object' || options === null) {\n\t\tthrow new Error('Echo initialization failed: options must be an object')\n\t}\n\n\tif (typeof options.onSubmit !== 'function') {\n\t\tthrow new Error('Echo initialization failed: onSubmit must be a function')\n\t}\n\n\tif (options.primaryColor && !/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(options.primaryColor)) {\n\t\tthrow new Error('Echo initialization failed: primaryColor must be a valid hex color')\n\t}\n}\n","import { createStore } from 'solid-js/store'\nimport { toolConfig } from '~/config/drawingConfig'\nimport type { DrawingTool, FullEchoConfig, Point, Shape } from '~/types'\nimport { loadPageState } from '~/utils'\nimport { getDistance, getPointFromEvent } from '~/utils/events'\n\nconst MOVEMENT_THRESHOLD = 5 // pixels\n\nconst computeCursor = (tool: DrawingTool, color: string) => {\n\treturn toolConfig[tool].getCursor(color)\n}\n\nexport type DrawingState = {\n\tisDrawing: boolean\n\tselectedShapeId: string | null\n\tselectedTool: DrawingTool\n\tselectedColor: string\n\tshapes: Shape[]\n\tcurrentPoints: Point[]\n\tshowTooltip: boolean\n\tmousePosition: Point\n\thasDrawn: boolean\n\tisDragging: boolean\n\tdragStartPos: Point | null\n\tinitialClickPos: Point | null\n\tdragOffset: Point | null\n\tcursor: string\n}\n\nexport type DrawingStore = {\n\tstate: DrawingState\n\tsetState: (state: Partial<DrawingState>, isClearing?: boolean) => void\n\tmethods: {\n\t\tstartDrawing: (initialPoint: Point) => void\n\t\tupdateDrawing: (point: Point) => void\n\t\tfinishDrawing: () => void\n\t\thandleShapeClick: (shapeId: string) => void\n\t\thandleStart: (e: MouseEvent | TouchEvent) => void\n\t\thandleMove: (e: MouseEvent | TouchEvent) => void\n\t\thandleEnd: (e: MouseEvent | TouchEvent) => void\n\t\thandleEnter: (e: MouseEvent | TouchEvent) => void\n\t\thandleLeave: (e: MouseEvent | TouchEvent) => void\n\t\tstartDrag: (point: Point) => void\n\t\tstopDrag: () => void\n\t\tsetInitialClick: (point: Point | null) => void\n\t\tupdateDragOffset: (shape: { points: Point[] }, point: Point) => void\n\t}\n}\n\nexport const createDrawingStore = (\n\tconfig: FullEchoConfig,\n\tcurrentPageKey: string,\n\tonStateChange?: (state: Partial<DrawingState>, isClearing?: boolean) => void,\n): DrawingStore => {\n\tconst [state, setState] = createStore<DrawingState>({\n\t\tisDrawing: false,\n\t\tcurrentPoints: [],\n\t\tselectedShapeId: null,\n\t\tselectedTool: 'rectangle',\n\t\tshowTooltip: true,\n\t\tmousePosition: { x: 0, y: 0 },\n\t\tselectedColor: config.primaryColor,\n\t\tshapes: loadPageState(currentPageKey)?.drawing?.shapes || [],\n\t\thasDrawn: false,\n\t\tisDragging: false,\n\t\tdragStartPos: null,\n\t\tinitialClickPos: null,\n\t\tdragOffset: null,\n\t\tcursor: computeCursor('rectangle', config.primaryColor),\n\t})\n\n\tconst wrappedSetState = (newState: Partial<DrawingState>, isClearing = false) => {\n\t\tif (newState.selectedTool || newState.selectedColor) {\n\t\t\tconst tool = newState.selectedTool || state.selectedTool\n\t\t\tconst color = newState.selectedColor || state.selectedColor\n\t\t\tnewState.cursor = computeCursor(tool, color)\n\t\t}\n\t\tsetState(newState)\n\t\tonStateChange?.(newState, isClearing)\n\t}\n\n\tconst methods = {\n\t\tstartDrawing: (initialPoint: Point) => {\n\t\t\twrappedSetState({\n\t\t\t\tisDrawing: true,\n\t\t\t\tcurrentPoints: [initialPoint],\n\t\t\t\tselectedShapeId: null,\n\t\t\t})\n\t\t},\n\t\tupdateDrawing: (point: Point) => {\n\t\t\tif (state.selectedTool === 'rectangle') {\n\t\t\t\twrappedSetState({ currentPoints: [state.currentPoints[0], point] })\n\t\t\t} else if (state.selectedTool === 'path') {\n\t\t\t\twrappedSetState({\n\t\t\t\t\tcurrentPoints: [...state.currentPoints, point],\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tfinishDrawing: () => {\n\t\t\tif (state.currentPoints.length >= 2) {\n\t\t\t\tconst newShape: Shape = {\n\t\t\t\t\tid: Math.random().toString(36).substring(2),\n\t\t\t\t\ttype: state.selectedTool,\n\t\t\t\t\tcolor: state.selectedColor,\n\t\t\t\t\tpoints: state.currentPoints,\n\t\t\t\t}\n\t\t\t\twrappedSetState({ shapes: [...state.shapes, newShape] })\n\t\t\t}\n\t\t\twrappedSetState({ isDrawing: false, currentPoints: [] })\n\t\t},\n\t\thandleShapeClick: (shapeId: string) => {\n\t\t\t// wrappedSetState({\n\t\t\t// \tselectedShapeId: state.selectedShapeId === shapeId ? null : shapeId,\n\t\t\t// })\n\t\t},\n\t\thandleStart: (e: MouseEvent | TouchEvent) => {\n\t\t\tif (e instanceof MouseEvent) {\n\t\t\t\tconst target = e.target as HTMLElement\n\t\t\t\tif (!target.classList.contains('echo-drawing-layer-mask') && !target.classList.contains('echo-shape')) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst point = getPointFromEvent(e)\n\n\t\t\tif (e.target instanceof SVGElement && e.target.classList.contains('echo-shape')) {\n\t\t\t\tconst shapeId = e.target.dataset.shapeId\n\t\t\t\tif (shapeId && state.selectedShapeId === shapeId) {\n\t\t\t\t\tconst shape = state.shapes.find(s => s.id === shapeId)\n\t\t\t\t\tif (shape) {\n\t\t\t\t\t\tmethods.startDrag(point)\n\t\t\t\t\t\tmethods.updateDragOffset(shape, point)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmethods.setInitialClick(point)\n\t\t},\n\t\thandleMove: (e: MouseEvent | TouchEvent) => {\n\t\t\tconst clientPoint = getPointFromEvent(e, { useClientCoords: true })\n\t\t\tconst point = getPointFromEvent(e)\n\n\t\t\twrappedSetState({ mousePosition: clientPoint })\n\n\t\t\tif (state.isDragging && state.selectedShapeId && state.dragStartPos) {\n\t\t\t\tconst shape = state.shapes.find(s => s.id === state.selectedShapeId)\n\t\t\t\tif (shape) {\n\t\t\t\t\tconst dx = point.x - state.dragStartPos.x\n\t\t\t\t\tconst dy = point.y - state.dragStartPos.y\n\n\t\t\t\t\tconst updatedShapes = state.shapes.map(s => {\n\t\t\t\t\t\tif (s.id === state.selectedShapeId) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t...s,\n\t\t\t\t\t\t\t\tpoints: s.points.map(p => ({\n\t\t\t\t\t\t\t\t\tx: p.x + dx,\n\t\t\t\t\t\t\t\t\ty: p.y + dy,\n\t\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn s\n\t\t\t\t\t})\n\n\t\t\t\t\twrappedSetState({ shapes: updatedShapes })\n\t\t\t\t\tmethods.startDrag(point)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (state.initialClickPos && !state.isDrawing) {\n\t\t\t\tconst distance = getDistance(state.initialClickPos, point)\n\t\t\t\tif (distance >= MOVEMENT_THRESHOLD) {\n\t\t\t\t\tmethods.startDrawing(state.initialClickPos)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (state.isDrawing) {\n\t\t\t\tmethods.updateDrawing(point)\n\t\t\t}\n\t\t},\n\t\thandleEnd: (e: MouseEvent | TouchEvent) => {\n\t\t\tif (state.isDragging) {\n\t\t\t\tmethods.stopDrag()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (state.initialClickPos && !state.isDrawing) {\n\t\t\t\tconst point = getPointFromEvent(e)\n\t\t\t\tconst distance = getDistance(state.initialClickPos, point)\n\t\t\t\tif (distance < MOVEMENT_THRESHOLD && e.target instanceof SVGElement && e.target.classList.contains('echo-shape')) {\n\t\t\t\t\tconst shapeId = e.target.dataset.shapeId\n\t\t\t\t\tif (shapeId) {\n\t\t\t\t\t\twrappedSetState({ selectedShapeId: shapeId })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tmethods.setInitialClick(null)\n\t\t\tmethods.finishDrawing()\n\t\t},\n\t\thandleEnter: (e: MouseEvent | TouchEvent) => {\n\t\t\tif (e.target === e.currentTarget && !state.hasDrawn) {\n\t\t\t\twrappedSetState({ showTooltip: true })\n\t\t\t}\n\t\t},\n\t\thandleLeave: (e: MouseEvent | TouchEvent) => {\n\t\t\tif (e.target === e.currentTarget) {\n\t\t\t\twrappedSetState({ showTooltip: false })\n\t\t\t}\n\t\t},\n\t\tstartDrag: (point: Point) => {\n\t\t\twrappedSetState({\n\t\t\t\tisDragging: true,\n\t\t\t\tdragStartPos: point,\n\t\t\t})\n\t\t},\n\t\tstopDrag: () => {\n\t\t\twrappedSetState({\n\t\t\t\tisDragging: false,\n\t\t\t\tdragStartPos: null,\n\t\t\t\tdragOffset: null,\n\t\t\t})\n\t\t},\n\t\tsetInitialClick: (point: Point | null) => {\n\t\t\twrappedSetState({\n\t\t\t\tinitialClickPos: point,\n\t\t\t})\n\t\t},\n\t\tupdateDragOffset: (shape: { points: Point[] }, point: Point) => {\n\t\t\twrappedSetState({\n\t\t\t\tdragOffset: {\n\t\t\t\t\tx: point.x - shape.points[0].x,\n\t\t\t\t\ty: point.y - shape.points[0].y,\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t}\n\n\treturn {\n\t\tstate,\n\t\tsetState: wrappedSetState,\n\t\tmethods,\n\t}\n}\n","import { createStore } from 'solid-js/store'\nimport type { FullEchoConfig, Screenshot } from '~/types'\nimport { loadPageState } from '~/utils'\n\nexport type FeedbackState = {\n\tcomment: string\n\tscreenshot?: Screenshot\n\tisCapturing: boolean\n\tisMinimized: boolean\n}\n\nexport type FeedbackStore = {\n\tstate: FeedbackState\n\tsetState: (state: Partial<FeedbackState>, isClearing?: boolean) => void\n}\n\nexport const createFeedbackStore = (\n\tconfig: FullEchoConfig,\n\tcurrentPageKey: string,\n\tonStateChange?: (state: Partial<FeedbackState>, isClearing?: boolean) => void,\n): FeedbackStore => {\n\tconst [state, setState] = createStore<FeedbackState>({\n\t\tcomment: loadPageState(currentPageKey)?.feedback?.comment || '',\n\t\tscreenshot: undefined,\n\t\tisCapturing: false,\n\t\tisMinimized: false,\n\t})\n\n\tconst wrappedSetState = (newState: Partial<FeedbackState>, isClearing = false) => {\n\t\tsetState(newState)\n\t\tonStateChange?.(newState, isClearing)\n\t}\n\n\treturn {\n\t\tstate,\n\t\tsetState: wrappedSetState,\n\t}\n}\n","import { createStore } from 'solid-js/store'\nimport type { FullEchoConfig, Notification, TextConfig } from '~/types'\nimport { getStoredPagesCount } from '~/utils'\n\nexport type WidgetState = {\n\ttext: TextConfig\n\tisOpen: boolean\n\tprimaryColor: string\n\tnotification: Notification\n\tdimensions: {\n\t\twidth: number\n\t\theight: number\n\t}\n\tisStoredFeedbackOpen: boolean\n\tpagesCount: number\n\twelcomeMessageIsClosing: boolean\n}\n\nexport type WidgetStore = {\n\tstate: WidgetState\n\tsetState: (state: Partial<WidgetState>) => void\n}\n\nexport const createWidgetStore = (config: FullEchoConfig, currentPageKey: string): WidgetStore => {\n\tconst [state, setState] = createStore<WidgetState>({\n\t\ttext: config.textConfig,\n\t\tisOpen: false,\n\t\tprimaryColor: config.primaryColor,\n\t\tnotification: {\n\t\t\tshow: false,\n\t\t\ttype: null,\n\t\t\tmessage: null,\n\t\t},\n\t\tdimensions: {\n\t\t\twidth: document.documentElement.clientWidth,\n\t\t\theight: document.documentElement.scrollHeight,\n\t\t},\n\t\tisStoredFeedbackOpen: false,\n\t\tpagesCount: getStoredPagesCount(),\n\t\twelcomeMessageIsClosing: false,\n\t})\n\n\treturn {\n\t\tstate,\n\t\tsetState,\n\t}\n}\n","import type { EchoConfig, FeedbackPayload, FullEchoConfig } from '~/types'\nimport { type Notification } from '~/types'\nimport { debounce } from '~/utils/debounce'\nimport { registerMutationObserver, registerWindowEventListener } from '~/utils/listeners'\nimport { clearPageState, getPageKey, getStoredPagesCount, loadPageState, savePageState } from '~/utils/storage'\nimport { type DrawingStore, createDrawingStore } from './drawingStore'\nimport { type FeedbackStore, createFeedbackStore } from './feedbackStore'\nimport { type WidgetStore, createWidgetStore } from './widgetStore'\n\nexport type EchoStore = {\n\tfeedback: FeedbackStore\n\tdrawing: DrawingStore\n\twidget: WidgetStore\n\tmethods: {\n\t\treset: () => void\n\t\tsubmit: EchoConfig['onSubmit']\n\t}\n}\n\nexport const createEchoStore = (config: FullEchoConfig): EchoStore => {\n\tlet currentPageKey = getPageKey()\n\tconst debouncedSave = debounce((pageKey: string, isClearing = false) => {\n\t\tconst shouldSaveState = isClearing || feedback.state.comment.trim().length > 0 || drawing.state.shapes.length > 0\n\t\tif (shouldSaveState) {\n\t\t\tsavePageState(pageKey, {\n\t\t\t\tfeedback: feedback.state,\n\t\t\t\tdrawing: drawing.state,\n\t\t\t})\n\t\t\twidget.setState({ pagesCount: getStoredPagesCount() })\n\t\t}\n\t}, 1000)\n\n\tconst feedback = createFeedbackStore(config, currentPageKey, (state, isClearing) => {\n\t\tdebouncedSave(currentPageKey, isClearing)\n\t})\n\n\tconst drawing = createDrawingStore(config, currentPageKey, (state, isClearing) => {\n\t\tdebouncedSave(currentPageKey, isClearing)\n\t})\n\n\tconst widget = createWidgetStore(config, currentPageKey)\n\n\tconst handleUrlChange = () => {\n\t\tconst newPageKey = getPageKey()\n\t\tif (newPageKey !== currentPageKey) {\n\t\t\tcurrentPageKey = newPageKey\n\t\t\tconst newState = loadPageState(currentPageKey)\n\n\t\t\tfeedback.setState({\n\t\t\t\tcomment: newState?.feedback.comment || '',\n\t\t\t})\n\n\t\t\tdrawing.setState({\n\t\t\t\tshapes: newState?.drawing.shapes || [],\n\t\t\t})\n\t\t}\n\t}\n\n\tregisterWindowEventListener({\n\t\tevent: 'popstate',\n\t\tcallback: handleUrlChange,\n\t})\n\n\tregisterMutationObserver({\n\t\ttarget: document.documentElement,\n\t\toptions: {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t},\n\t\tcallback: () => {\n\t\t\tconst newPageKey = getPageKey()\n\t\t\tif (newPageKey !== currentPageKey) {\n\t\t\t\thandleUrlChange()\n\t\t\t}\n\t\t},\n\t})\n\n\tconst reset = () => {\n\t\tclearPageState(currentPageKey)\n\n\t\tfeedback.setState(\n\t\t\t{\n\t\t\t\tcomment: '',\n\t\t\t\tscreenshot: undefined,\n\t\t\t\tisCapturing: false,\n\t\t\t\tisMinimized: false,\n\t\t\t},\n\t\t\ttrue,\n\t\t)\n\n\t\tdrawing.setState(\n\t\t\t{\n\t\t\t\tisDrawing: false,\n\t\t\t\tcurrentPoints: [],\n\t\t\t\tshapes: [],\n\t\t\t\tselectedShapeId: null,\n\t\t\t\tselectedTool: 'rectangle',\n\t\t\t\tshowTooltip: true,\n\t\t\t\tmousePosition: { x: 0, y: 0 },\n\t\t\t\thasDrawn: false,\n\t\t\t\tselectedColor: config.primaryColor,\n\t\t\t\tisDragging: false,\n\t\t\t\tdragStartPos: null,\n\t\t\t\tinitialClickPos: null,\n\t\t\t\tdragOffset: null,\n\t\t\t},\n\t\t\ttrue,\n\t\t)\n\n\t\twidget.setState({\n\t\t\tisOpen: false,\n\t\t})\n\t}\n\n\tconst postSubmit = (result: Notification) => {\n\t\twidget.setState({ notification: { show: true, type: result.type, message: result.message } })\n\n\t\tsetTimeout(() => {\n\t\t\twidget.setState({ notification: { show: false, type: result.type, message: result.message } })\n\t\t}, 5000)\n\t}\n\n\treturn {\n\t\tfeedback,\n\t\tdrawing,\n\t\twidget,\n\t\tmethods: {\n\t\t\treset,\n\t\t\tsubmit: async (data: FeedbackPayload) => {\n\t\t\t\twidget.setState({ isOpen: false })\n\n\t\t\t\ttry {\n\t\t\t\t\tconst response = await config.onSubmit(data)\n\n\t\t\t\t\tif (response instanceof Response && !response.ok) {\n\t\t\t\t\t\tpostSubmit({ show: true, type: 'error', message: 'Submission failed' })\n\t\t\t\t\t\treturn response\n\t\t\t\t\t}\n\n\t\t\t\t\treset()\n\t\t\t\t\tpostSubmit({ show: true, type: 'success', message: 'Feedback submitted' })\n\t\t\t\t\treturn response\n\t\t\t\t} catch (error) {\n\t\t\t\t\tpostSubmit({ show: true, type: 'error', message: 'Submission failed' })\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t}\n}\n","import { type Component, JSXElement, createContext, useContext } from 'solid-js'\nimport { type EchoStore, createEchoStore } from '~/stores'\nimport type { FullEchoConfig } from '~/types'\n\ntype EchoProviderProps = FullEchoConfig & {\n\tchildren: JSXElement\n}\n\nconst EchoContext = createContext<EchoStore>()\n\nexport const EchoProvider: Component<EchoProviderProps> = props => {\n\tconst store = createEchoStore({\n\t\tprimaryColor: props.primaryColor,\n\t\tonSubmit: props.onSubmit,\n\t\ttextConfig: props.textConfig,\n\t\tposition: props.position,\n\t})\n\n\treturn <EchoContext.Provider value={store}>{props.children}</EchoContext.Provider>\n}\n\nexport const useEchoStore = () => {\n\tconst store = useContext(EchoContext)\n\tif (!store) {\n\t\tthrow new Error('useEchoStore must be used within EchoProvider')\n\t}\n\treturn store\n}\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const ChevronRightIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"m9 18 6-6-6-6\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const ContemberIcon: Component<IconProps> = props => {\n\treturn (\n\t\t<svg width={props.size ?? 24} height={props.size ?? 24} viewBox=\"0 0 64 66\" fill=\"none\" class={props.class} style={props.style}>\n\t\t\t<path\n\t\t\t\td=\"M59.716 36.936L54.9 33l-6.17 5.108a77.278 77.278 0 00-12.744 13.469l-3.637 4.914-3.778-5.017a83.719 83.719 0 00-13.956-14.538L9.799 33l2.86-2.332A104.39 104.39 0 0030.1 12.5l2.24-2.98 1.736 2.298a111.905 111.905 0 0018.608 19.384l2.206 1.81 2.861-2.333a104.13 104.13 0 005.297-4.641C59.978 11.294 47.409.26 32.349.26 14.997.26.92 14.923.92 33c0 18.076 14.077 32.74 31.43 32.74 15.102 0 27.715-11.103 30.73-25.892a75.808 75.808 0 00-3.375-2.912h.011z\"\n\t\t\t\tfill={props.fill ?? 'currentColor'}\n\t\t\t/>\n\t\t</svg>\n\t)\n}\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const HighlightIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"M3 7V5a2 2 0 0 1 2-2h2\" />\n\t\t<path d=\"M17 3h2a2 2 0 0 1 2 2v2\" />\n\t\t<path d=\"M21 17v2a2 2 0 0 1-2 2h-2\" />\n\t\t<path d=\"M7 21H5a2 2 0 0 1-2-2v-2\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const PenIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const TrashIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"M3 6h18\" />\n\t\t<path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\" />\n\t\t<path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\" />\n\t\t<line x1=\"10\" x2=\"10\" y1=\"11\" y2=\"17\" />\n\t\t<line x1=\"14\" x2=\"14\" y1=\"11\" y2=\"17\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const CheckCircleIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<circle cx=\"12\" cy=\"12\" r=\"10\" />\n\t\t<path d=\"m9 12 2 2 4-4\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const XCircleIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<circle cx=\"12\" cy=\"12\" r=\"10\" />\n\t\t<path d=\"m15 9-6 6\" />\n\t\t<path d=\"m9 9 6 6\" />\n\t</svg>\n)\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const XIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"M18 6 6 18\" />\n\t\t<path d=\"m6 6 12 12\" />\n\t</svg>\n)\n","import { type Component, For } from 'solid-js'\nimport { useEchoStore } from '~/contexts/EchoContext'\n\nconst COLORS = [\n\t'#ff6b6b', // Soft Red\n\t'#69db7c', // Soft Green\n\t'#74c0fc', // Soft Blue\n\t'#ffd43b', // Soft Yellow\n\t'#da77f2', // Soft Purple\n\t'#66d9e8', // Soft Cyan\n\t'#ffa94d', // Soft Orange\n\t'#e599f7', // Soft Pink\n]\n\nexport const ColorSelector: Component = () => {\n\tconst store = useEchoStore()\n\n\treturn (\n\t\t<>\n\t\t\t<div class=\"echo-color-selector\">\n\t\t\t\t<button\n\t\t\t\t\tclass=\"echo-drawing-toolbar-button\"\n\t\t\t\t\ttitle=\"Color\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t'background-color': store.drawing.state.selectedColor,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<div class=\"echo-color-swatch-wrapper\">\n\t\t\t\t\t<div class=\"echo-color-swatch\">\n\t\t\t\t\t\t<For each={[store.widget.state.primaryColor, ...COLORS]}>\n\t\t\t\t\t\t\t{color => (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tclass=\"echo-color-swatch-button\"\n\t\t\t\t\t\t\t\t\ttitle={`Select ${color} color`}\n\t\t\t\t\t\t\t\t\tdata-selected={store.drawing.state.selectedColor === color}\n\t\t\t\t\t\t\t\t\tonClick={() => store.drawing.setState({ selectedColor: color })}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t'background-color': color,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</For>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t)\n}\n","import { type Component, For } from 'solid-js'\nimport { HighlightIcon, PenIcon, TrashIcon } from '~/components/icons'\nimport { toolConfig } from '~/config/drawingConfig'\nimport { useEchoStore } from '~/contexts/EchoContext'\nimport type { IconProps } from '~/types'\nimport { ColorSelector } from './ColorSelector'\n\nconst ToolIcon: Record<string, Component<IconProps>> = {\n\trectangle: HighlightIcon,\n\tpath: PenIcon,\n}\n\nexport const DrawingToolbar: Component = () => {\n\tconst store = useEchoStore()\n\tconst tools = Object.values(toolConfig)\n\n\treturn (\n\t\t<div class=\"echo-drawing-toolbar\" data-hide-when-drawing=\"true\">\n\t\t\t<For each={tools}>\n\t\t\t\t{tool => {\n\t\t\t\t\tconst Icon = ToolIcon[tool.id]\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\"echo-drawing-toolbar-button\"\n\t\t\t\t\t\t\ttitle={tool.label}\n\t\t\t\t\t\t\tdata-selected={store.drawing.state.selectedTool === tool.id}\n\t\t\t\t\t\t\tonClick={() => store.drawing.setState({ selectedTool: tool.id })}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon class=\"echo-drawing-toolbar-icon\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)\n\t\t\t\t}}\n\t\t\t</For>\n\t\t\t<ColorSelector />\n\t\t\t{/* TODO: Add a confirmation dialog */}\n\t\t\t<button class=\"echo-drawing-toolbar-button\" title=\"Clear drawings\" onClick={() => store.drawing.setState({ shapes: [] }, true)}>\n\t\t\t\t<TrashIcon class=\"echo-drawing-toolbar-icon\" />\n\t\t\t</button>\n\t\t</div>\n\t)\n}\n","import type { Component, JSX } from 'solid-js'\n\ntype ButtonProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {\n\tvariant?: 'primary' | 'secondary'\n\tsize?: 'xs' | 'sm' | 'md' | 'lg'\n}\n\nexport const Button: Component<ButtonProps> = props => {\n\tconst variant = () => props.variant || 'primary'\n\tconst size = () => props.size || 'md'\n\n\treturn <button {...props} class={`echo-button echo-button-${variant()} echo-button-${size()} ${props.class}`} />\n}\n","import type { Component } from 'solid-js'\nimport type { IconProps } from '~/types'\n\nexport const ExternalLinkIcon: Component<IconProps> = props => (\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth={props.size ?? 24}\n\t\theight={props.size ?? 24}\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill={props.fill ?? 'none'}\n\t\tstroke={props.stroke ?? 'currentColor'}\n\t\tstroke-width={props.strokeWidth ?? 2}\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass={props.class}\n\t\tstyle={props.style}\n\t>\n\t\t<path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n\t\t<polyline points=\"15 3 21 3 21 9\" />\n\t\t<line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n\t</svg>\n)\n","import { type Component, For, Show, createMemo, createSignal } from 'solid-js'\nimport { Button } from '~/components/atoms/Button'\nimport { XIcon } from '~/components/icons'\nimport { ExternalLinkIcon } from '~/components/icons/ExternalLinkIcon'\nimport { useEchoStore } from '~/contexts'\nimport { registerMutationObserver, registerWindowEventListener } from '~/utils/listeners'\nimport { clearPageState, getStoredPages } from '~/utils/storage'\n\nexport const StoredFeedback: Component = () => {\n\tconst store = useEchoStore()\n\tconst [pages, setPages] = createSignal(getStoredPages())\n\tconst [currentPath, setCurrentPath] = createSignal(window.location.pathname)\n\n\tconst handleStorageChange = () => {\n\t\tconst storedPages = getStoredPages()\n\t\tsetPages(storedPages)\n\t\tstore.widget.setState({ pagesCount: storedPages.length })\n\t}\n\n\tconst handleUrlChange = () => {\n\t\tsetCurrentPath(window.location.pathname)\n\t}\n\n\tregisterWindowEventListener({\n\t\tevent: 'echo-storage-change',\n\t\tcallback: handleStorageChange,\n\t})\n\n\tregisterWindowEventListener({\n\t\tevent: 'popstate',\n\t\tcallback: handleUrlChange,\n\t})\n\n\tregisterMutationObserver({\n\t\ttarget: document.documentElement,\n\t\toptions: {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t},\n\t\tcallback: () => {\n\t\t\tsetCurrentPath(window.location.pathname)\n\t\t},\n\t})\n\n\tconst handleNavigate = (path: string, latestQuery?: string) => {\n\t\tconst targetUrl = latestQuery ? `${path}${latestQuery}` : path\n\t\twindow.location.href = targetUrl\n\t\tstore.widget.setState({ isStoredFeedbackOpen: false })\n\t}\n\n\tconst handleDelete = (path: string) => {\n\t\tif (currentPath() === path) {\n\t\t\tstore.methods.reset()\n\t\t}\n\t\tclearPageState(path)\n\n\t\tconst storedPages = getStoredPages()\n\t\tsetPages(storedPages)\n\t\tstore.widget.setState({ pagesCount: storedPages.length })\n\t}\n\n\tconst formatPath = (path: string) => {\n\t\tif (path === '/') return '/'\n\t\tconst parts = path.split('/')\n\t\tif (parts.length <= 4) return path\n\t\treturn `/${parts[1]}/.../${parts[parts.length - 1]}`\n\t}\n\n\treturn (\n\t\t<Show when={store.widget.state.isStoredFeedbackOpen}>\n\t\t\t<div class=\"echo-stored-feedback\">\n\t\t\t\t<div class=\"echo-stored-feedback-header\">\n\t\t\t\t\t<h3>Unsubmitted Feedback</h3>\n\t\t\t\t\t<Button variant=\"secondary\" size=\"sm\" onClick={() => store.widget.setState({ isStoredFeedbackOpen: false })}>\n\t\t\t\t\t\t<XIcon size={20} />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"echo-stored-feedback-list\">\n\t\t\t\t\t<For each={pages()}>\n\t\t\t\t\t\t{page => {\n\t\t\t\t\t\t\tconst isCurrent = createMemo(() => page.path === currentPath())\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div class={`echo-stored-feedback-item ${isCurrent() ? 'echo-stored-feedback-item-current' : ''}`}>\n\t\t\t\t\t\t\t\t\t<div class=\"echo-stored-feedback-content\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"echo-stored-feedback-path\" title={page.path}>\n\t\t\t\t\t\t\t\t\t\t\t{formatPath(page.path)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"echo-stored-feedback-preview\">{page.state.feedback.comment}</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"echo-stored-feedback-actions\">\n\t\t\t\t\t\t\t\t\t\t{!isCurrent() && (\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"echo-stored-feedback-link\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => handleNavigate(page.path, page.state.latestQuery)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<ExternalLinkIcon />\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<Button class=\"echo-stored-feedback-delete\" variant=\"secondary\" size=\"sm\" onClick={() => handleDelete(page.path)}>\n\t\t\t\t\t\t\t\t\t\t\tDelete\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}}\n\t\t\t\t\t</For>\n\t\t\t\t\t<Show when={pages().length === 0}>\n\t\t\t\t\t\t<div class=\"echo-stored-feedback-empty\">No unsubmitted feedback</div>\n\t\t\t\t\t</Show>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Show>\n\t)\n}\n","import type { Component } from 'solid-js'\nimport { createEffect, createSignal } from 'solid-js'\nimport { ContemberIcon } from '~/components/icons/ContemberIcon'\nimport { useEchoStore } from '~/contexts'\nimport { getFromStorage, setToStorage } from '~/utils'\nimport { StoredFeedback } from './StoredFeedback'\n\nexport const LauncherButton: Component = () => {\n\tconst store = useEchoStore()\n\tconst [isMinimized, setIsMinimized] = createSignal(false)\n\tlet minimizeTimeout: number | undefined\n\n\tconst resetHideTimeout = () => {\n\t\tif (minimizeTimeout) {\n\t\t\twindow.clearTimeout(minimizeTimeout)\n\t\t}\n\t\tminimizeTimeout = window.setTimeout(() => {\n\t\t\tconst hasSeenMessage = getFromStorage('welcome_message_shown', false)\n\t\t\tif (!store.widget.state.isOpen && !store.widget.state.isStoredFeedbackOpen && hasSeenMessage) {\n\t\t\t\tsetIsMinimized(true)\n\t\t\t}\n\t\t}, 4000) // Hide after 4 seconds of inactivity\n\t}\n\n\tconst handleEchoLauncherButtonEnter = () => {\n\t\tsetIsMinimized(false)\n\t}\n\n\tconst handleEchoLauncherButtonLeave = () => {\n\t\tresetHideTimeout()\n\t}\n\n\tconst handleClick = () => {\n\t\tstore.widget.setState({ isOpen: !store.widget.state.isOpen })\n\t\tstore.widget.setState({ welcomeMessageIsClosing: true })\n\t\tsetToStorage('welcome_message_shown', true)\n\t}\n\n\tcreateEffect(() => {\n\t\tif (!store.widget.state.isOpen) {\n\t\t\tsetIsMinimized(false)\n\t\t\tresetHideTimeout()\n\t\t}\n\t\tif (store.widget.state.isStoredFeedbackOpen) {\n\t\t\tsetIsMinimized(false)\n\t\t}\n\t})\n\n\tconst handleCountClick = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tstore.widget.setState({ isStoredFeedbackOpen: !store.widget.state.isStoredFeedbackOpen })\n\t\tsetIsMinimized(false)\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<button\n\t\t\t\tclass=\"echo-launcher-button\"\n\t\t\t\tdata-hidden={store.widget.state.isOpen}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonPointerEnter={handleEchoLauncherButtonEnter}\n\t\t\t\tonPointerLeave={handleEchoLauncherButtonLeave}\n\t\t\t\tstyle={{\n\t\t\t\t\tleft: isMinimized() ? '45px' : '0',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ContemberIcon stroke=\"white\" fill=\"#ffffff\" />\n\t\t\t\t{store.widget.state.pagesCount > 0 && (\n\t\t\t\t\t<span class=\"echo-launcher-button-count\" onClick={handleCountClick}>\n\t\t\t\t\t\t{store.widget.state.pagesCount}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t\t<StoredFeedback />\n\t\t</>\n\t)\n}\n","import type { Component } from 'solid-js'\nimport { Button } from '~/components/atoms'\nimport { CheckCircleIcon, XCircleIcon, XIcon } from '~/components/icons'\nimport { useEchoStore } from '~/contexts/EchoContext'\n\nexport const Notification: Component = () => {\n\tconst store = useEchoStore()\n\n\tconst hideNotification = () => {\n\t\tstore.widget.setState({ notification: { ...store.widget.state.notification, show: false } })\n\t}\n\n\tconst getTitle = () => {\n\t\tswitch (store.widget.state.notification.type) {\n\t\t\tcase 'success':\n\t\t\t\treturn store.widget.state.text.notification.successTitle\n\t\t\tcase 'error':\n\t\t\t\treturn store.widget.state.text.notification.errorTitle\n\t\t\tdefault:\n\t\t\t\treturn ''\n\t\t}\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclass=\"echo-notification\"\n\t\t\tdata-type={store.widget.state.notification.type}\n\t\t\tdata-empty={!store.widget.state.notification.type}\n\t\t\tdata-hidden={!store.widget.state.notification.show}\n\t\t>\n\t\t\t<Button\n\t\t\t\tclass=\"echo-notification-hide\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tonClick={hideNotification}\n\t\t\t\ttitle={store.widget.state.text.notification.hideTitle}\n\t\t\t>\n\t\t\t\t<XIcon size={20} />\n\t\t\t</Button>\n\t\t\t<div class=\"echo-notification-icon\">\n\t\t\t\t{store.widget.state.notification.type === 'success' ? (\n\t\t\t\t\t<CheckCircleIcon size={32} />\n\t\t\t\t) : store.widget.state.notification.type === 'error' ? (\n\t\t\t\t\t<XCircleIcon size={32} />\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t\t<div class=\"echo-notification-content\">\n\t\t\t\t<div class=\"echo-notification-title\">{getTitle()}</div>\n\t\t\t\t<div class=\"echo-notification-message\">{store.widget.state.notification?.message}</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import type { Component } from 'solid-js'\nimport { XIcon } from '~/components/icons'\nimport { useEchoStore } from '~/contexts/EchoContext'\nimport { getFromStorage, setToStorage } from '~/utils/storage'\n\nexport const WelcomeMessage: Component = () => {\n\tconst store = useEchoStore()\n\tconst hasSeenMessage = getFromStorage('welcome_message_shown', false)\n\n\tconst hideMessage = (e: MouseEvent | KeyboardEvent) => {\n\t\te.stopPropagation()\n\t\tstore.widget.setState({ welcomeMessageIsClosing: true })\n\t\tsetToStorage('welcome_message_shown', true)\n\t}\n\n\tconst openWidget = () => {\n\t\tstore.widget.setState({ isOpen: true })\n\t\tstore.widget.setState({ welcomeMessageIsClosing: true })\n\t\tsetToStorage('welcome_message_shown', true)\n\t}\n\n\tif (hasSeenMessage) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<button\n\t\t\tclass=\"echo-welcome-message\"\n\t\t\tdata-hidden={store.widget.state.welcomeMessageIsClosing}\n\t\t\tonClick={openWidget}\n\t\t\tstyle={{\n\t\t\t\tbottom: '80px',\n\t\t\t\tright: '20px',\n\t\t\t}}\n\t\t>\n\t\t\t<span class=\"echo-welcome-message-pulsar\" />\n\t\t\t{store.widget.state.text.welcomeMessage.text}\n\t\t\t<div\n\t\t\t\tclass=\"echo-welcome-message-close\"\n\t\t\t\tonClick={hideMessage}\n\t\t\t\trole=\"button\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\taria-label={store.widget.state.text.welcomeMessage.closeAriaLabel}\n\t\t\t\tonKeyDown={e => e.key === 'Enter' && hideMessage(e)}\n\t\t\t>\n\t\t\t\t<XIcon size={16} strokeWidth={3} />\n\t\t\t</div>\n\t\t</button>\n\t)\n}\n","import { Component, Show, createMemo } from 'solid-js'\nimport { toolConfig } from '~/config/drawingConfig'\nimport type { Shape as ShapeType } from '~/types'\nimport { getPathFromPoints, getRectFromPoints } from '~/utils/geometry'\n\ntype ShapeProps = ShapeType & {\n\tselectedShapeId: string | null\n\tonShapeClick?: (id: string) => void\n}\n\nexport const Shape: Component<ShapeProps> = props => {\n\tconst isSelected = createMemo(() => props.id === props.selectedShapeId)\n\n\treturn (\n\t\t<>\n\t\t\t<Show when={props.type === 'rectangle'}>\n\t\t\t\t<RectangleShape {...props} isSelected={isSelected()} />\n\t\t\t</Show>\n\n\t\t\t<Show when={props.type === 'path'}>\n\t\t\t\t<PathShape {...props} isSelected={isSelected()} />\n\t\t\t</Show>\n\t\t</>\n\t)\n}\n\nconst RectangleShape: Component<ShapeProps & { isSelected: boolean }> = props => {\n\tconst rect = createMemo(() => getRectFromPoints(props.points))\n\treturn (\n\t\t<Show when={rect()}>\n\t\t\t<rect\n\t\t\t\tclass=\"echo-shape\"\n\t\t\t\tdata-shape-id={props.id}\n\t\t\t\tdata-selected={props.isSelected}\n\t\t\t\tx={rect()!.x}\n\t\t\t\ty={rect()!.y}\n\t\t\t\twidth={rect()!.width}\n\t\t\t\theight={rect()!.height}\n\t\t\t\tfill=\"transparent\"\n\t\t\t\tstroke={props.color}\n\t\t\t\tstroke-width={toolConfig.rectangle.strokeWidth}\n\t\t\t\topacity={props.isSelected ? toolConfig.rectangle.opacity.selected : toolConfig.rectangle.opacity.default}\n\t\t\t\tvector-effect=\"non-scaling-stroke\"\n\t\t\t\tstroke-dasharray={props.isSelected ? '5,5' : 'none'}\n\t\t\t\tcursor={props.isSelected ? 'move' : 'pointer'}\n\t\t\t\tonClick={() => props.onShapeClick?.(props.id)}\n\t\t\t/>\n\t\t</Show>\n\t)\n}\n\nconst PathShape: Component<ShapeProps & { isSelected: boolean }> = props => {\n\tconst path = createMemo(() => getPathFromPoints(props.points))\n\treturn (\n\t\t<Show when={path()}>\n\t\t\t<path\n\t\t\t\tclass=\"echo-shape\"\n\t\t\t\tdata-shape-id={props.id}\n\t\t\t\tdata-selected={props.isSelected}\n\t\t\t\td={path()!}\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke={props.color}\n\t\t\t\tstroke-width={toolConfig.path.strokeWidth}\n\t\t\t\tvector-effect=\"non-scaling-stroke\"\n\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\topacity={props.isSelected ? toolConfig.path.opacity.selected : toolConfig.path.opacity.default}\n\t\t\t\tcursor={props.isSelected ? 'move' : 'pointer'}\n\t\t\t\tonClick={() => props.onShapeClick?.(props.id)}\n\t\t\t/>\n\t\t</Show>\n\t)\n}\n","import { type Component, Show, createMemo } from 'solid-js'\nimport { useEchoStore } from '~/contexts'\nimport { isMobileDevice } from '~/utils/device'\n\nexport const DrawingTooltip: Component = () => {\n\tconst store = useEchoStore()\n\n\tconst showTooltip = createMemo(() => {\n\t\treturn (\n\t\t\tstore.drawing.state.showTooltip &&\n\t\t\tstore.drawing.state.mousePosition.y &&\n\t\t\tstore.drawing.state.mousePosition.x &&\n\t\t\tstore.widget.state.isOpen &&\n\t\t\t!isMobileDevice()\n\t\t)\n\t})\n\n\treturn (\n\t\t<Show when={showTooltip()}>\n\t\t\t<div\n\t\t\t\tclass=\"echo-drawing-tooltip\"\n\t\t\t\tdata-hide-when-drawing=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\ttop: `${store.drawing.state.mousePosition.y + 20}px`,\n\t\t\t\t\tleft: `${store.drawing.state.mousePosition.x + 10}px`,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{store.widget.state.text.drawingTooltip.text}\n\t\t\t</div>\n\t\t</Show>\n\t)\n}\n","import { type Component, createMemo, createSignal } from 'solid-js'\nimport { Button } from '~/components/atoms'\nimport { TrashIcon } from '~/components/icons'\nimport { useEchoStore } from '~/contexts'\nimport type { Point } from '~/types'\nimport { getRectFromPoints } from '~/utils/geometry'\nimport { registerWindowEventListener } from '~/utils/listeners'\n\nexport const ShapeActions: Component = () => {\n\tconst store = useEchoStore()\n\tlet actionsRef: HTMLDivElement | undefined\n\tconst [scrollPosition, setScrollPosition] = createSignal({ x: window.scrollX, y: window.scrollY })\n\n\tconst handleScroll = () => {\n\t\tsetScrollPosition({ x: window.scrollX, y: window.scrollY })\n\t}\n\n\tregisterWindowEventListener({\n\t\tevent: 'scroll',\n\t\tcallback: handleScroll,\n\t})\n\n\tconst handleDelete = () => {\n\t\tif (store.drawing.state.selectedShapeId) {\n\t\t\tstore.drawing.setState({\n\t\t\t\tshapes: store.drawing.state.shapes.filter(shape => shape.id !== store.drawing.state.selectedShapeId),\n\t\t\t\tselectedShapeId: null,\n\t\t\t})\n\t\t}\n\t}\n\n\tconst selectedShape = createMemo(() => {\n\t\tif (!store.drawing.state.selectedShapeId) return null\n\t\treturn store.drawing.state.shapes.find(shape => shape.id === store.drawing.state.selectedShapeId)\n\t})\n\n\tconst position = createMemo(() => {\n\t\tconst shape = selectedShape()\n\t\tconst actionsRect = actionsRef?.getBoundingClientRect()\n\n\t\tif (!shape || !actionsRect) return null\n\n\t\tlet point: Point | null = null\n\n\t\tif (shape.type === 'rectangle') {\n\t\t\tconst rect = getRectFromPoints(shape.points)\n\t\t\tif (!rect) return null\n\t\t\tpoint = {\n\t\t\t\tx: rect.x + rect.width / 2,\n\t\t\t\ty: rect.y,\n\t\t\t}\n\t\t} else if (shape.type === 'path' && shape.points.length > 0) {\n\t\t\tpoint = {\n\t\t\t\tx: shape.points[0].x,\n\t\t\t\ty: shape.points[0].y,\n\t\t\t}\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\n\t\tconst PADDING = 8\n\n\t\tconst scroll = scrollPosition()\n\t\treturn {\n\t\t\tx: Math.max(actionsRect.width / 2 + PADDING, Math.min(window.innerWidth - actionsRect.width / 2 - PADDING, point.x - scroll.x)),\n\t\t\ty: Math.max(actionsRect.height + PADDING, Math.min(window.innerHeight - PADDING, point.y - scroll.y)),\n\t\t}\n\t})\n\n\treturn (\n\t\t<div\n\t\t\tref={actionsRef}\n\t\t\tclass=\"echo-shape-actions\"\n\t\t\tdata-hide-when-drawing=\"true\"\n\t\t\thidden={!position()}\n\t\t\tstyle={{\n\t\t\t\tleft: position() ? `${position()?.x}px` : '0',\n\t\t\t\ttop: position() ? `${position()?.y}px` : '0',\n\t\t\t}}\n\t\t>\n\t\t\t<Button onClick={handleDelete} size=\"sm\" variant=\"secondary\" title=\"Delete shape\">\n\t\t\t\t<TrashIcon size={20} />\n\t\t\t</Button>\n\t\t</div>\n\t)\n}\n","import { type Component, For, onCleanup, onMount } from 'solid-js'\nimport { useEchoStore } from '~/contexts'\nimport { generateCutoutPath } from '~/utils/svg'\nimport { Shape } from '../atoms/Shape'\nimport { DrawingTooltip } from '../molecules/DrawingTooltip'\nimport { ShapeActions } from '../molecules/ShapeActions'\n\nexport const DrawingLayer: Component = () => {\n\tconst store = useEchoStore()\n\tlet drawingLayerContainerRef: HTMLDivElement | undefined\n\n\tonMount(() => {\n\t\tdrawingLayerContainerRef?.addEventListener('mousemove', store.drawing.methods.handleMove)\n\t\tdrawingLayerContainerRef?.addEventListener('mouseup', store.drawing.methods.handleEnd)\n\t\tdrawingLayerContainerRef?.addEventListener('touchmove', store.drawing.methods.handleMove, { passive: false })\n\t\tdrawingLayerContainerRef?.addEventListener('touchend', store.drawing.methods.handleEnd)\n\t})\n\n\tonCleanup(() => {\n\t\tdrawingLayerContainerRef?.removeEventListener('mousemove', store.drawing.methods.handleMove)\n\t\tdrawingLayerContainerRef?.removeEventListener('mouseup', store.drawing.methods.handleEnd)\n\t\tdrawingLayerContainerRef?.removeEventListener('touchmove', store.drawing.methods.handleMove)\n\t\tdrawingLayerContainerRef?.removeEventListener('touchend', store.drawing.methods.handleEnd)\n\t})\n\n\treturn (\n\t\t<div\n\t\t\tref={drawingLayerContainerRef}\n\t\t\tclass=\"echo-drawing-layer-container\"\n\t\t\tstyle={{\n\t\t\t\tcursor: store.drawing.state.cursor,\n\t\t\t}}\n\t\t>\n\t\t\t<DrawingTooltip />\n\t\t\t<ShapeActions />\n\n\t\t\t<svg\n\t\t\t\twidth=\"100%\"\n\t\t\t\theight=\"100%\"\n\t\t\t\tclass=\"echo-drawing-layer\"\n\t\t\t\tpreserveAspectRatio=\"none\"\n\t\t\t\tonMouseDown={e => {\n\t\t\t\t\tstore.drawing.methods.handleStart(e)\n\t\t\t\t\tstore.drawing.setState({ showTooltip: false, hasDrawn: true })\n\t\t\t\t}}\n\t\t\t\tonTouchStart={e => {\n\t\t\t\t\te.preventDefault() // Prevent scrolling while drawing\n\t\t\t\t\tstore.drawing.methods.handleStart(e)\n\t\t\t\t\tstore.drawing.methods.handleEnter(e)\n\t\t\t\t\tstore.drawing.setState({ showTooltip: false, hasDrawn: true })\n\t\t\t\t}}\n\t\t\t\tonMouseMove={store.drawing.methods.handleMove}\n\t\t\t\tonTouchMove={e => {\n\t\t\t\t\te.preventDefault() // Prevent scrolling while drawing\n\t\t\t\t\tstore.drawing.methods.handleMove(e)\n\t\t\t\t}}\n\t\t\t\tonMouseEnter={store.drawing.methods.handleEnter}\n\t\t\t\tonMouseLeave={store.drawing.methods.handleLeave}\n\t\t\t\tonTouchEnd={store.drawing.methods.handleLeave}\n\t\t\t>\n\t\t\t\t{/* overlay mask */}\n\t\t\t\t<path\n\t\t\t\t\tclass=\"echo-drawing-layer-mask\"\n\t\t\t\t\td={generateCutoutPath(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twidth: store.widget.state.dimensions.width,\n\t\t\t\t\t\t\theight: store.widget.state.dimensions.height,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstore.drawing.state.currentPoints,\n\t\t\t\t\t\tstore.drawing.state.shapes,\n\t\t\t\t\t)}\n\t\t\t\t\tfill=\"rgba(33, 43, 55, 1)\"\n\t\t\t\t\tfill-opacity=\"0.2\"\n\t\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\t/>\n\n\t\t\t\t{/* already drawn shapes */}\n\t\t\t\t<For each={store.drawing.state.shapes}>\n\t\t\t\t\t{shape => (\n\t\t\t\t\t\t<Shape\n\t\t\t\t\t\t\tid={shape.id}\n\t\t\t\t\t\t\ttype={shape.type}\n\t\t\t\t\t\t\tcolor={shape.color}\n\t\t\t\t\t\t\tpoints={shape.points}\n\t\t\t\t\t\t\tselectedShapeId={store.drawing.state.selectedShapeId}\n\t\t\t\t\t\t\tonShapeClick={store.drawing.methods.handleShapeClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</For>\n\n\t\t\t\t{/* current shape */}\n\t\t\t\t<Shape\n\t\t\t\t\tid=\"temp\"\n\t\t\t\t\ttype={store.drawing.state.selectedTool}\n\t\t\t\t\tcolor={store.drawing.state.selectedColor}\n\t\t\t\t\tpoints={store.drawing.state.currentPoints}\n\t\t\t\t\tselectedShapeId={store.drawing.state.selectedShapeId}\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t</div>\n\t)\n}\n","import { type Component, createEffect } from 'solid-js'\nimport { Button } from '~/components/atoms/Button'\nimport { ChevronRightIcon, XIcon } from '~/components/icons'\nimport { useEchoStore } from '~/contexts/EchoContext'\nimport { FeedbackPayload } from '~/types'\nimport { getConsoleBuffer } from '~/utils/console'\nimport { captureScreenshot } from '~/utils/screenshot'\n\nexport const FeedbackForm: Component = () => {\n\tlet textAreaRef: HTMLTextAreaElement | undefined\n\tconst store = useEchoStore()\n\n\tconst handleSubmit = async (e: SubmitEvent) => {\n\t\te.preventDefault()\n\n\t\tconst screenshot = await captureScreenshot()\n\n\t\tconst data: FeedbackPayload = {\n\t\t\tcomment: store.feedback.state.comment,\n\t\t\tscreenshot: screenshot,\n\t\t\tmetadata: {\n\t\t\t\turl: window.location.href,\n\t\t\t\tuserAgent: navigator.userAgent,\n\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\tbrowserInfo: {\n\t\t\t\t\twidth: window.innerWidth,\n\t\t\t\t\theight: window.innerHeight,\n\t\t\t\t\tscreenWidth: window.screen.width,\n\t\t\t\t\tscreenHeight: window.screen.height,\n\t\t\t\t},\n\t\t\t},\n\t\t\tconsole: getConsoleBuffer(),\n\t\t}\n\n\t\tstore.methods.submit(data)\n\t}\n\n\tcreateEffect(() => {\n\t\tif (textAreaRef && store.widget.state.isOpen) {\n\t\t\ttextAreaRef.focus()\n\t\t}\n\t})\n\n\tconst minimize = (e: MouseEvent) => {\n\t\te.stopPropagation()\n\t\tstore.feedback.setState({ isMinimized: true })\n\t}\n\n\tconst maximize = () => {\n\t\tstore.feedback.setState({ isMinimized: false })\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclass=\"echo-feedback\"\n\t\t\tdata-minimized={store.feedback.state.isMinimized}\n\t\t\tdata-hide-when-drawing=\"true\"\n\t\t\tonClick={() => store.feedback.state.isMinimized && maximize()}\n\t\t\tstyle={{ cursor: store.feedback.state.isMinimized ? 'pointer' : 'default' }}\n\t\t>\n\t\t\t<form class=\"echo-feedback-content\" onSubmit={handleSubmit}>\n\t\t\t\t<div class=\"echo-feedback-header\">\n\t\t\t\t\t<h3 class=\"echo-feedback-title\">{store.widget.state.text.feedbackForm.title}</h3>\n\t\t\t\t\t<div class=\"echo-feedback-header-actions\">\n\t\t\t\t\t\t<Button type=\"button\" title=\"Hide form\" variant=\"secondary\" size=\"sm\" onClick={minimize}>\n\t\t\t\t\t\t\t<ChevronRightIcon size={20} />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button type=\"button\" title=\"Close form\" variant=\"secondary\" size=\"sm\" onClick={() => store.widget.setState({ isOpen: false })}>\n\t\t\t\t\t\t\t<XIcon size={20} />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<textarea\n\t\t\t\t\tref={textAreaRef}\n\t\t\t\t\tclass=\"echo-feedback-form-textarea\"\n\t\t\t\t\tvalue={store.feedback.state.comment}\n\t\t\t\t\tplaceholder={store.widget.state.text.feedbackForm.placeholder}\n\t\t\t\t\tonInput={e => store.feedback.setState({ comment: e.currentTarget.value })}\n\t\t\t\t\trequired\n\t\t\t\t/>\n\n\t\t\t\t<Button type=\"submit\" variant=\"primary\" size=\"lg\" style={{ width: '100%' }}>\n\t\t\t\t\t{store.widget.state.text.feedbackForm.submitButton}\n\t\t\t\t</Button>\n\t\t\t</form>\n\t\t</div>\n\t)\n}\n","import { type Component, JSXElement, createEffect, createSignal } from 'solid-js'\nimport { Portal } from 'solid-js/web'\nimport { EchoProvider } from '~/contexts'\nimport { useEchoStore } from '~/contexts/EchoContext'\nimport type { FullEchoConfig } from '~/types'\nimport { getContrastColor } from '~/utils/color'\nimport { registerKeyListener, registerMutationObserver, registerWindowEventListener } from '~/utils/listeners'\nimport staticStyles from './../styles.css?inline'\nimport { DrawingToolbar } from './molecules/DrawingToolbar'\nimport { LauncherButton } from './molecules/LauncherButton'\nimport { Notification } from './molecules/Notification'\nimport { WelcomeMessage } from './molecules/WelcomeMessage'\nimport { DrawingLayer } from './organisms/DrawingLayer'\nimport { FeedbackForm } from './organisms/FeedbackForm'\n\nexport const Echo: Component<FullEchoConfig> = props => {\n\treturn (\n\t\t<Portal useShadow mount={document.body}>\n\t\t\t<EchoProvider {...props}>\n\t\t\t\t<EchoRoot>\n\t\t\t\t\t<EchoStyles primaryColor={props.primaryColor!} />\n\t\t\t\t\t<EchoInterface />\n\t\t\t\t</EchoRoot>\n\t\t\t</EchoProvider>\n\t\t</Portal>\n\t)\n}\n\nconst EchoStyles: Component<{ primaryColor: string }> = props => {\n\tconst [dynamicStyles, setDynamicStyles] = createSignal('')\n\n\tcreateEffect(() => {\n\t\tconst css = `\n\t\t\t\t.echo-root {\n\t\t\t\t\t--primary-color: ${props.primaryColor};\n\t\t\t\t\t--primary-text-color: ${getContrastColor(props.primaryColor)};\n\t\t\t\t}\n\t\t\t`\n\t\tsetDynamicStyles(css)\n\t})\n\n\treturn (\n\t\t<>\n\t\t\t<style>\n\t\t\t\t{staticStyles}\n\t\t\t\t{dynamicStyles()}\n\t\t\t</style>\n\t\t</>\n\t)\n}\n\nconst EchoInterface: Component = () => {\n\tconst store = useEchoStore()\n\n\treturn (\n\t\t<>\n\t\t\t<div class=\"echo-launcher\" data-hidden={store.widget.state.isOpen}>\n\t\t\t\t<LauncherButton />\n\t\t\t\t<WelcomeMessage />\n\t\t\t\t<Notification />\n\t\t\t</div>\n\n\t\t\t<div class=\"echo-overlay\" data-hidden={!store.widget.state.isOpen}>\n\t\t\t\t<FeedbackForm />\n\t\t\t\t<DrawingToolbar />\n\t\t\t\t<DrawingLayer />\n\t\t\t</div>\n\t\t</>\n\t)\n}\n\nconst EchoRoot: Component<{\n\tchildren: JSXElement\n}> = props => {\n\tlet rootRef: HTMLDivElement | undefined\n\tconst store = useEchoStore()\n\n\tconst updateHeight = () => {\n\t\trequestAnimationFrame(() => {\n\t\t\tif (!rootRef) return\n\n\t\t\trootRef.style.height = '0px'\n\t\t\trootRef.style.height = `${document.documentElement.scrollHeight}px`\n\t\t\tstore.widget.setState({\n\t\t\t\tdimensions: {\n\t\t\t\t\twidth: document.documentElement.clientWidth,\n\t\t\t\t\theight: document.documentElement.scrollHeight,\n\t\t\t\t},\n\t\t\t})\n\t\t})\n\t}\n\n\tregisterWindowEventListener({\n\t\tevent: 'resize',\n\t\tcallback: updateHeight,\n\t\tonMount: updateHeight,\n\t})\n\n\tregisterKeyListener('Escape', () => {\n\t\tstore.widget.setState({ isOpen: false })\n\t})\n\n\tregisterMutationObserver({\n\t\ttarget: document.documentElement,\n\t\toptions: {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t\tattributes: true,\n\t\t},\n\t\tcallback: () => {\n\t\t\tupdateHeight()\n\t\t},\n\t})\n\n\treturn (\n\t\t<div\n\t\t\tref={rootRef}\n\t\t\tclass=\"echo-root\"\n\t\t\tdata-drawing={store.drawing.state.isDrawing}\n\t\t\tstyle={{\n\t\t\t\theight: `${store.widget.state.dimensions.height}px`,\n\t\t\t\twidth: `${store.widget.state.dimensions.width}px`,\n\t\t\t}}\n\t\t>\n\t\t\t{props.children}\n\t\t</div>\n\t)\n}\n","import type { TextConfig } from '~/types'\n\nexport const defaultText: TextConfig = {\n\twelcomeMessage: {\n\t\ttext: 'Click here to leave feedback',\n\t\tcloseAriaLabel: 'Close welcome message',\n\t},\n\tfeedbackForm: {\n\t\ttitle: 'Send Feedback',\n\t\tplaceholder: \"What's on your mind? We'd love to hear your feedback...\",\n\t\tscreenshotAlt: 'Screenshot Preview',\n\t\tsubmitButton: 'Send Feedback',\n\t\tminimizeTitle: 'Minimize',\n\t\texpandTitle: 'Expand',\n\t\tcloseTitle: 'Close',\n\t\tshowFormTitle: 'Show Feedback Form',\n\t},\n\tnotification: {\n\t\tsuccessTitle: 'Thank you for your feedback!',\n\t\terrorTitle: 'Something went wrong.',\n\t\terrorMessage: 'Failed to send feedback. Please try again.',\n\t\thideTitle: 'Hide notification',\n\t},\n\tdrawingTooltip: {\n\t\ttext: 'Click & drag to draw',\n\t},\n}\n","import { render } from 'solid-js/web'\nimport { Echo } from './components/Echo'\nimport { defaultText } from './config/defaultText'\nimport { type EchoConfig, type FeedbackPayload } from './types'\nimport { deepMerge } from './utils/common'\nimport { cleanupConsole, getConsoleBuffer, setupConsole } from './utils/console'\nimport { validateOptions } from './utils/validators'\nimport './styles.css'\n\nlet activeInstance: (() => void) | null = null\n\n/**\n * Initialize the Echo feedback widget.\n * @throws {Error} If initialization fails or invalid options are provided\n * @returns {() => void} Cleanup function to remove the widget\n */\nexport function initEcho(options: EchoConfig): () => void {\n\tif (activeInstance) {\n\t\tconsole.warn('Echo widget is already initialized. Cleaning up previous instance...')\n\t\tactiveInstance()\n\t}\n\n\ttry {\n\t\tvalidateOptions(options)\n\t\tsetupConsole()\n\n\t\tconst { position = 'bottom-right', primaryColor = '#6227dc', onSubmit, textConfig = {} } = options\n\t\tconst mergedTextConfig = deepMerge(defaultText, textConfig)\n\n\t\tconst container = document.createElement('div')\n\t\tcontainer.id = 'echo-container'\n\t\tdocument.body.appendChild(container)\n\n\t\tconst dispose = render(\n\t\t\t() => (\n\t\t\t\t<Echo\n\t\t\t\t\tposition={position}\n\t\t\t\t\tprimaryColor={primaryColor}\n\t\t\t\t\ttextConfig={mergedTextConfig}\n\t\t\t\t\tonSubmit={async data =>\n\t\t\t\t\t\tawait onSubmit({\n\t\t\t\t\t\t\t...data,\n\t\t\t\t\t\t\tconsole: getConsoleBuffer(),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t),\n\t\t\tcontainer,\n\t\t)\n\n\t\tconst cleanup = () => {\n\t\t\tdispose()\n\t\t\tcontainer.remove()\n\t\t\tcleanupConsole()\n\t\t\tactiveInstance = null\n\t\t}\n\n\t\twindow.addEventListener('unload', cleanup, { once: true })\n\n\t\tactiveInstance = cleanup\n\t\treturn cleanup\n\t} catch (error) {\n\t\tconsole.error('Echo initialization failed:', error)\n\t\tthrow error\n\t}\n}\n\nexport type { FeedbackPayload, EchoConfig }\n"],"names":["booleans","Properties","ChildProperties","Aliases","PropAliases","getPropAlias","prop","tagName","a","DelegatedEvents","reconcileArrays","parentNode","b","bLength","aEnd","bEnd","aStart","bStart","after","map","node","i","index","sequence","t","$$EVENTS","render","code","element","init","options","disposer","createRoot","dispose","insert","template","html","isImportNode","isSVG","create","fn","untrack","delegateEvents","eventNames","document","e","l","name","eventHandler","setAttribute","value","isHydrating","setBoolAttribute","className","addEventListener","handler","delegate","handlerFn","classList","prev","classKeys","prevKeys","len","key","toggleClassKey","classValue","style","nodeStyle","v","s","spread","props","skipChildren","prevProps","createRenderEffect","insertExpression","use","assign","arg","parent","accessor","marker","initial","current","skipRef","assignProp","sharedConfig","toPropertyName","_","w","classNames","nameLen","isCE","isProp","isChildProp","propAlias","forceProp","h","el","ev","oriTarget","oriCurrentTarget","retarget","handleNode","data","walkUpTree","path","unwrapArray","hydrating","cleaned","multi","cleanChildren","array","currentArray","normalizeIncomingArray","nodes","appendNodes","normalized","unwrap","dynamic","item","replacement","inserted","isParent","SVG_NAMESPACE","createElement","Portal","useShadow","mount","owner","getOwner","content","createEffect","runWithOwner","createMemo","clean","setClean","createSignal","cleanup","onCleanup","container","renderRoot","debounce","func","wait","timeout","args","registerKeyListener","callback","registerWindowEventListener","event","mountCallback","cleanupCallback","handleEvent","onMount","registerMutationObserver","target","observer","STORAGE_PREFIX","STORAGE_KEY","dispatchStorageChange","getStorageKey","getFromStorage","defaultValue","setToStorage","error","getPageKey","savePageState","pageKey","state","existingData","allPagesData","currentQuery","essentialState","loadPageState","clearPageState","getStoredPagesCount","getStoredPages","$RAW","$NODE","$HAS","$SELF","wrap$1","p","$PROXY","proxyTraps$1","keys","desc","isWrappable","obj","proto","set","result","unwrapped","getNodes","symbol","getNode","property","proxyDescriptor$1","trackSelf","getListener","ownKeys","receiver","$TRACK","tracked","setProperty","deleting","mergeStoreNode","updateArray","next","updatePath","traversed","part","partType","isArray","from","to","by","createStore","store","unwrappedStore","wrappedStore","setStore","batch","toolConfig","color","calculateLuminance","hexColor","r","g","getContrastColor","deepMerge","source","consoleBuffer","originalConsole","originalOnError","originalOnUnhandledRejection","createConsoleProxy","type","originalFn","message","setupConsole","lineno","colno","errorMessage","filename","cleanupConsole","getConsoleBuffer","isMobileDevice","_a","getPointFromEvent","useClientCoords","touch","getDistance","p1","p2","dx","dy","getRectFromPoints","points","start","end","getPathFromPoints","point","createCanvas","width","height","canvas","shouldIgnoreElement","captureScreenshot","screenshot","html2canvas","ctx","generateCutoutPath","dimensions","currentPoints","shapes","shape","validateOptions","MOVEMENT_THRESHOLD","computeCursor","tool","createDrawingStore","config","currentPageKey","onStateChange","setState","_b","wrappedSetState","newState","isClearing","methods","initialPoint","newShape","shapeId","clientPoint","updatedShapes","createFeedbackStore","createWidgetStore","createEchoStore","debouncedSave","feedback","drawing","widget","handleUrlChange","newPageKey","reset","postSubmit","response","EchoContext","createContext","EchoProvider","primaryColor","onSubmit","textConfig","position","_$createComponent","Provider","children","useEchoStore","useContext","Error","ChevronRightIcon","_el$","_tmpl$","_$effect","_p$","_v$","size","_v$2","_v$3","fill","_v$4","stroke","_v$5","strokeWidth","_v$6","class","_v$7","_$setAttribute","o","n","_$style","undefined","ContemberIcon","_el$2","firstChild","HighlightIcon","PenIcon","TrashIcon","CheckCircleIcon","XCircleIcon","XIcon","COLORS","ColorSelector","_el$3","nextSibling","_el$4","For","each","_el$5","_tmpl$2","$$click","selectedColor","removeProperty","_$p","_$delegateEvents","ToolIcon","rectangle","DrawingToolbar","tools","Object","values","Icon","id","selectedTool","label","_$insert","Button","variant","_$mergeProps","ExternalLinkIcon","StoredFeedback","pages","setPages","currentPath","setCurrentPath","window","location","pathname","handleStorageChange","storedPages","pagesCount","length","documentElement","childList","subtree","handleNavigate","latestQuery","targetUrl","href","isStoredFeedbackOpen","handleDelete","formatPath","parts","split","Show","when","onClick","page","isCurrent","_el$6","_tmpl$3","_el$7","_el$8","_el$9","_el$10","comment","_c$","_$memo","_$className","LauncherButton","isMinimized","setIsMinimized","minimizeTimeout","resetHideTimeout","clearTimeout","setTimeout","hasSeenMessage","isOpen","handleEchoLauncherButtonEnter","handleEchoLauncherButtonLeave","handleClick","welcomeMessageIsClosing","handleCountClick","stopPropagation","Notification","hideNotification","notification","show","getTitle","text","successTitle","errorTitle","title","hideTitle","_c$2","WelcomeMessage","hideMessage","openWidget","welcomeMessage","$$keydown","closeAriaLabel","Shape","isSelected","selectedShapeId","RectangleShape","PathShape","rect","onShapeClick","x","y","_v$8","_v$9","opacity","selected","default","_v$10","_v$11","d","_v$12","_v$13","_v$14","_v$15","_v$16","_v$17","_v$18","DrawingTooltip","showTooltip","mousePosition","drawingTooltip","ShapeActions","actionsRef","scrollPosition","setScrollPosition","scrollX","scrollY","handleScroll","filter","selectedShape","find","actionsRect","getBoundingClientRect","PADDING","scroll","Math","max","min","innerWidth","innerHeight","_ref$","_$use","hidden","DrawingLayer","drawingLayerContainerRef","handleMove","handleEnd","passive","removeEventListener","_$addEventListener","handleLeave","handleEnter","$$touchmove","preventDefault","$$touchstart","handleStart","hasDrawn","$$mousedown","handleShapeClick","cursor","FeedbackForm","textAreaRef","handleSubmit","metadata","url","userAgent","navigator","timestamp","Date","toISOString","browserInfo","screenWidth","screen","screenHeight","console","submit","focus","minimize","maximize","feedbackForm","$$input","currentTarget","submitButton","placeholder","Echo","body","EchoRoot","EchoStyles","EchoInterface","dynamicStyles","setDynamicStyles","css","staticStyles","rootRef","updateHeight","requestAnimationFrame","scrollHeight","clientWidth","attributes","_tmpl$4","isDrawing","defaultText","activeInstance","initEcho","warn","mergedTextConfig","appendChild","remove","once"],"mappings":"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","x_google_ignoreList":[0,4]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@contember/echo",
3
3
  "license": "Apache-2.0",
4
- "version": "0.0.25",
4
+ "version": "0.0.27",
5
5
  "type": "module",
6
6
  "author": "neumie@neumie.dev",
7
7
  "keywords": [
@@ -1,3 +0,0 @@
1
- import { type Component } from 'solid-js';
2
- import type { FullEchoConfig } from '~/types';
3
- export declare const Echo: Component<FullEchoConfig>;
@@ -1,7 +0,0 @@
1
- import type { Component, JSX } from 'solid-js';
2
- type ButtonProps = JSX.ButtonHTMLAttributes<HTMLButtonElement> & {
3
- variant?: 'primary' | 'secondary';
4
- size?: 'xs' | 'sm' | 'md' | 'lg';
5
- };
6
- export declare const Button: Component<ButtonProps>;
7
- export {};
@@ -1,8 +0,0 @@
1
- import { Component } from 'solid-js';
2
- import type { Shape as ShapeType } from '~/types';
3
- type ShapeProps = ShapeType & {
4
- selectedShapeId: string | null;
5
- onShapeClick?: (id: string) => void;
6
- };
7
- export declare const Shape: Component<ShapeProps>;
8
- export {};
@@ -1 +0,0 @@
1
- export * from './Button';
@@ -1,3 +0,0 @@
1
- import type { Component } from 'solid-js';
2
- import type { IconProps } from '~/types';
3
- export declare const CheckCircleIcon: Component<IconProps>;
@@ -1,3 +0,0 @@
1
- import type { Component } from 'solid-js';
2
- import type { IconProps } from '~/types';
3
- export declare const ChevronRightIcon: Component<IconProps>;
@@ -1,3 +0,0 @@
1
- import type { Component } from 'solid-js';
2
- import type { IconProps } from '~/types';
3
- export declare const ContemberIcon: Component<IconProps>;
@@ -1,3 +0,0 @@
1
- import type { Component } from 'solid-js';
2
- import type { IconProps } from '~/types';
3
- export declare const ExternalLinkIcon: Component<IconProps>;
@@ -1,3 +0,0 @@
1
- import type { Component } from 'solid-js';
2
- import type { IconProps } from '~/types';
3
- export declare const HighlightIcon: Component<IconProps>;
@@ -1,3 +0,0 @@
1
- import type { Component } from 'solid-js';
2
- import type { IconProps } from '~/types';
3
- export declare const PenIcon: Component<IconProps>;
@@ -1,3 +0,0 @@
1
- import type { Component } from 'solid-js';
2
- import type { IconProps } from '~/types';
3
- export declare const TrashIcon: Component<IconProps>;
@@ -1,3 +0,0 @@
1
- import type { Component } from 'solid-js';
2
- import type { IconProps } from '~/types';
3
- export declare const XCircleIcon: Component<IconProps>;
@@ -1,3 +0,0 @@
1
- import type { Component } from 'solid-js';
2
- import type { IconProps } from '~/types';
3
- export declare const XIcon: Component<IconProps>;
@@ -1,8 +0,0 @@
1
- export * from './ChevronRightIcon';
2
- export * from './ContemberIcon';
3
- export * from './HighlightIcon';
4
- export * from './PenIcon';
5
- export * from './TrashIcon';
6
- export * from './CheckCircleIcon';
7
- export * from './XCircleIcon';
8
- export * from './XIcon';
@@ -1,2 +0,0 @@
1
- import { type Component } from 'solid-js';
2
- export declare const ColorSelector: Component;
@@ -1,2 +0,0 @@
1
- import { type Component } from 'solid-js';
2
- export declare const DrawingToolbar: Component;