@contember/echo 0.0.26 → 0.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/echo.es.js +767 -782
- package/dist/echo.es.js.map +1 -0
- package/dist/echo.umd.js +6 -5
- package/dist/echo.umd.js.map +1 -0
- package/package.json +1 -1
- package/dist/components/Echo.d.ts +0 -3
- package/dist/components/atoms/Button.d.ts +0 -7
- package/dist/components/atoms/Shape.d.ts +0 -8
- package/dist/components/atoms/index.d.ts +0 -1
- package/dist/components/icons/CheckCircleIcon.d.ts +0 -3
- package/dist/components/icons/ChevronRightIcon.d.ts +0 -3
- package/dist/components/icons/ContemberIcon.d.ts +0 -3
- package/dist/components/icons/ExternalLinkIcon.d.ts +0 -3
- package/dist/components/icons/HighlightIcon.d.ts +0 -3
- package/dist/components/icons/PenIcon.d.ts +0 -3
- package/dist/components/icons/TrashIcon.d.ts +0 -3
- package/dist/components/icons/XCircleIcon.d.ts +0 -3
- package/dist/components/icons/XIcon.d.ts +0 -3
- package/dist/components/icons/index.d.ts +0 -8
- package/dist/components/molecules/ColorSelector.d.ts +0 -2
- package/dist/components/molecules/DrawingToolbar.d.ts +0 -2
- package/dist/components/molecules/DrawingTooltip.d.ts +0 -2
- package/dist/components/molecules/LauncherButton.d.ts +0 -2
- package/dist/components/molecules/Notification.d.ts +0 -2
- package/dist/components/molecules/ShapeActions.d.ts +0 -2
- package/dist/components/molecules/StoredFeedback.d.ts +0 -2
- package/dist/components/molecules/WelcomeMessage.d.ts +0 -2
- package/dist/components/organisms/DrawingLayer.d.ts +0 -2
- package/dist/components/organisms/FeedbackForm.d.ts +0 -2
- package/dist/config/defaultText.d.ts +0 -2
- package/dist/config/drawingConfig.d.ts +0 -13
- package/dist/contexts/EchoContext.d.ts +0 -9
- package/dist/contexts/index.d.ts +0 -1
- package/dist/stores/drawingStore.d.ts +0 -39
- package/dist/stores/echoStore.d.ts +0 -16
- package/dist/stores/feedbackStore.d.ts +0 -12
- package/dist/stores/index.d.ts +0 -4
- package/dist/stores/widgetStore.d.ts +0 -19
- package/dist/types.d.ts +0 -87
- package/dist/utils/color.d.ts +0 -2
- package/dist/utils/common.d.ts +0 -1
- package/dist/utils/console.d.ts +0 -4
- package/dist/utils/debounce.d.ts +0 -1
- package/dist/utils/device.d.ts +0 -1
- package/dist/utils/events.d.ts +0 -5
- package/dist/utils/format.d.ts +0 -1
- package/dist/utils/geometry.d.ts +0 -8
- package/dist/utils/index.d.ts +0 -13
- package/dist/utils/listeners.d.ts +0 -22
- package/dist/utils/screenshot.d.ts +0 -2
- package/dist/utils/storage.d.ts +0 -28
- package/dist/utils/svg.d.ts +0 -13
- 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,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';
         |