feedback-vos 1.0.30 → 1.0.32

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/index.js CHANGED
@@ -14,8 +14,47 @@ var html2canvas__default = /*#__PURE__*/_interopDefault(html2canvas);
14
14
  var bugImageUrl = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTcuNzUwMDcgNEM4Ljc1MDA3IDMgOC4wMDAwNyAwIDYuMzEyMDcgMEM0LjYyNDA3IDAgNC43NTAwNyAyIDUuNzUwMDcgMkM2Ljc1MDA3IDIgNi43NTAwNyA0IDYuNzUwMDcgNUM2Ljc1MDA3IDYgNy43NTAwNyA0IDcuNzUwMDcgNFpNMy41NjcwNyA1LjcyQzQuNTY3MDcgNC43MiAzLjgxNzA3IDEuNzIgMi4xMjkwNyAxLjcyQzAuNDQxMDY4IDEuNzIgMC41NjcwNjggMy43MiAxLjU2NzA3IDMuNzJDMi41NjcwNyAzLjcyIDIuNTY3MDcgNS43MiAyLjU2NzA3IDYuNzJDMi41NjcwNyA3LjcyIDMuNTY3MDcgNS43MiAzLjU2NzA3IDUuNzJaIiBmaWxsPSIjQUE4REQ4Ii8+CjxwYXRoIGQ9Ik0yOS45NDIgMzIuODU2QzMwLjEzMSAzMy42NjQgMzEuMTY5IDM1LjEzNiAzMS45NzQgMzQuOTQ3QzMyLjc4IDM0Ljc1NyAzMy4wNTEgMzIuOTc2IDMyLjg2MiAzMi4xN0MzMi42NzMgMzEuMzYyIDMxLjg2NCAzMC44NjMgMzEuMDU4IDMxLjA1M0MzMC4yNTMgMzEuMjQzIDI5Ljc1MiAzMi4wNSAyOS45NDIgMzIuODU2Wk0yNC41MDggMzMuNTA1QzI0LjUxMSAzNC4zMzUgMjUuMTg5IDM2LjAwMyAyNi4wMTcgMzZDMjYuODQ1IDM1Ljk5NiAyNy41MTEgMzQuMzIzIDI3LjUwOCAzMy40OTRDMjcuNTA1IDMyLjY2NSAyNi44MzEgMzEuOTk3IDI2LjAwMyAzMS45OTlDMjUuMTc1IDMyLjAwMyAyNC41MDUgMzIuNjc2IDI0LjUwOCAzMy41MDVaTTE5LjIzNyAzMS4wNTlDMTguOTExIDMxLjgyMyAxOC44NzIgMzMuNjIyIDE5LjYzMyAzMy45NDlDMjAuMzk2IDM0LjI3MyAyMS42NyAzMy4wMDIgMjEuOTk2IDMyLjIzOUMyMi4zMjEgMzEuNDc3IDIxLjk2OCAzMC41OTYgMjEuMjA3IDMwLjI2OUMyMC40NDUgMjkuOTQ0IDE5LjU2NCAzMC4yOTYgMTkuMjM3IDMxLjA1OVpNMTQuMjA2IDIwLjAxOUMxMy4zOTQgMjAuMTkxIDExLjg5OCAyMS4xOTIgMTIuMDY3IDIyLjAwMkMxMi4yNCAyMi44MTIgMTQuMDEyIDIzLjEyNiAxNC44MjQgMjIuOTU1QzE1LjYzNSAyMi43ODQgMTYuMTUzIDIxLjk4OCAxNS45ODQgMjEuMTc4QzE1LjgxMiAyMC4zNjggMTUuMDE5IDE5Ljg0OCAxNC4yMDYgMjAuMDE5Wk0xMi4xNjkgMTUuMDE5QzExLjM1NyAxNS4xOTEgOS44NjEwNCAxNi4xOTIgMTAuMDMgMTcuMDAyQzEwLjIwMyAxNy44MTIgMTEuOTc1IDE4LjEyNiAxMi43ODcgMTcuOTU1QzEzLjU5OCAxNy43ODQgMTQuMTE2IDE2Ljk4OCAxMy45NDcgMTYuMTc4QzEzLjc3NSAxNS4zNjggMTIuOTgxIDE0Ljg0OCAxMi4xNjkgMTUuMDE5WiIgZmlsbD0iIzc0NEVBQSIvPgo8cGF0aCBkPSJNMjcuNTc5MSAzNEMzMC40MSAzNCAzMi41MDUgMzMuMTIzIDMyLjg0NSAzMi45NzNDMzUuMTE2MSAzMS45NjMgMzYuMTM4MSAyOS4zMDQgMzUuMTI5MSAyNy4wMzRDMzQuMTMwMSAyNC43ODQgMzEuNTEzMSAyMy43NTkgMjkuMjU3MSAyNC43MkMyOS4xMjQxIDI0Ljc3IDI3LjQ2NDEgMjUuMzY5IDI1LjkxNDEgMjQuNjQ4QzI0LjA2MzEgMjMuNzg3IDIyLjkxOTEgMjEuMzM5IDIyLjI4NjEgMTkuNDM5QzIyLjE0MjEgMTkuMDA5IDIxLjkwMTEgMTguMTY1IDIxLjYgMTcuMTIzQzE5LjczNDEgMTAuNjUyIDE4Ljc2ODEgOC44Mzc5OSAxNy42MTcxIDcuMzAyOTlDMTMuOTA2IDIuMzUxOTkgOC4wMjUwNSAyLjAwNjk5IDUuMTM0MDUgMi41ODY5OUMyLjY5NzA1IDMuMDczOTkgMS4xMTYwNSA1LjQ0NDk5IDEuNjA0MDUgNy44ODE5OUMyLjA5MjA1IDEwLjMyIDQuNDY0MDUgMTEuOTAyIDYuOTAwMDUgMTEuNDEyQzcuMDYyMDUgMTEuMzg2IDkuMTA0MDUgMTEuMTA2IDEwLjMyNDEgMTIuNTgxQzEwLjk2NzEgMTMuODY4IDEyLjQwNDEgMTcuNzA5IDEyLjk1NDEgMTkuNjE1QzEzLjMwMDEgMjAuODE0IDEzLjU4MzEgMjEuNzg2IDEzLjc0ODEgMjIuMjgyQzE1LjUyMTEgMjcuNTk5IDE4LjQxNDEgMzEuMTc1IDIyLjM1MTEgMzIuOTExQzI0LjIwMzEgMzMuNzI5IDI2LjAwNTEgMzQgMjcuNTc5MSAzNFoiIGZpbGw9IiM5MjY2Q0MiLz4KPHBhdGggZD0iTTcuMDE3MDkgNkM3LjU2OTM3IDYgOC4wMTcwOSA1LjU1MjI4IDguMDE3MDkgNUM4LjAxNzA5IDQuNDQ3NzIgNy41NjkzNyA0IDcuMDE3MDkgNEM2LjQ2NDgxIDQgNi4wMTcwOSA0LjQ0NzcyIDYuMDE3MDkgNUM2LjAxNzA5IDUuNTUyMjggNi40NjQ4MSA2IDcuMDE3MDkgNloiIGZpbGw9IiMyMDIwMjQiLz4KPHBhdGggZD0iTTMxLjI1ODEgMzIuOTY0QzMxLjE2OTEgMzIuOTY0IDMxLjA3ODEgMzIuOTUyIDMwLjk4OTEgMzIuOTI4QzMwLjQ1NzEgMzIuNzggMzAuMTQ1MSAzMi4yMjkgMzAuMjkzMSAzMS42OTdDMzEuMDUwMSAyOC45NzUgMjkuNTIzMSAyNy4xNTUgMjkuNTA4MSAyNy4xMzdDMjkuMTQ5MSAyNi43MTggMjkuMTk2MSAyNi4wODYgMjkuNjE1MSAyNS43MjdDMzAuMDMzMSAyNS4zNjggMzAuNjY2MSAyNS40MTUgMzEuMDI1MSAyNS44MzRDMzEuMTE3MSAyNS45NDEgMzMuMjU5MSAyOC40OTQgMzIuMjIwMSAzMi4yMzFDMzIuMDk4MSAzMi42NzQgMzEuNjk1MSAzMi45NjQgMzEuMjU4MSAzMi45NjRaTTI0LjA1OTEgMzIuNDAxQzIzLjgxNDEgMzIuNDAxIDIzLjU2OTEgMzIuMzEyIDIzLjM3NTEgMzIuMTMxQzIyLjk3MjEgMzEuNzUzIDIyLjk1MTEgMzEuMTIgMjMuMzI4MSAzMC43MTdDMjQuODEzMSAyOS4xMyAyNC43ODExIDI2LjUyNCAyNC43ODAxIDI2LjQ5N0MyNC43NjQxIDI1Ljk0NSAyNS4xOTkxIDI1LjQ4NSAyNS43NTIxIDI1LjQ2OUMyNi4yOTQxIDI1LjQ2NCAyNi43NjUxIDI1Ljg4OCAyNi43ODAxIDI2LjQ0MUMyNi43ODQxIDI2LjU4IDI2Ljg1MzEgMjkuODc4IDI0Ljc4OTEgMzIuMDg1QzI0LjU5MjEgMzIuMjk1IDI0LjMyNTEgMzIuNDAxIDI0LjA1OTEgMzIuNDAxWk0xNS41MTcxIDIzLjcwNUMxNS4wMzcxIDIzLjcwNSAxNC42MTMxIDIzLjM1OCAxNC41MzIxIDIyLjg2OEMxNC40NDIxIDIyLjMyNCAxNC44MTAxIDIxLjgwOCAxNS4zNTUxIDIxLjcxOUMxOC40MjkxIDIxLjIwOSAyMC4xMjkxIDE5LjM0MiAyMC4xNDYxIDE5LjMyM0MyMC41MTExIDE4LjkxMyAyMS4xNDQxIDE4Ljg3NCAyMS41NTUxIDE5LjIzOUMyMS45NjcxIDE5LjYwNCAyMi4wMDgxIDIwLjIzMiAyMS42NDYxIDIwLjY0NUMyMS41NTkxIDIwLjc0NCAxOS40OTAxIDIzLjA2IDE1LjY4MjEgMjMuNjkxQzE1LjYyNjEgMjMuNzAxIDE1LjU3MTEgMjMuNzA1IDE1LjUxNzEgMjMuNzA1Wk0xOC40MzgxIDI4LjU2MkMxOC4wMTMxIDI4LjU2MiAxNy42MTkxIDI4LjI5IDE3LjQ4NDEgMjcuODY0QzE3LjMxODEgMjcuMzM4IDE3LjYxMDEgMjYuNzc1IDE4LjEzNjEgMjYuNjA5QzIwLjgyOTEgMjUuNzU2IDIyLjAxNjEgMjMuNzc5IDIyLjAyODEgMjMuNzU5QzIyLjMwODEgMjMuMjgyIDIyLjkyMDEgMjMuMTIyIDIzLjM5NjEgMjMuNDAyQzIzLjg3MzEgMjMuNjgxIDI0LjAzMjEgMjQuMjk1IDIzLjc1MzEgMjQuNzdDMjMuNjkwMSAyNC44NzggMjIuMTU4MSAyNy40MzMgMTguNzQwMSAyOC41MTRDMTguNjM5MSAyOC41NDcgMTguNTM3MSAyOC41NjIgMTguNDM4MSAyOC41NjJaTTEzLjgxOTEgMTcuODkyQzEzLjMyMzEgMTcuODkyIDEyLjg5MjEgMTcuNTIzIDEyLjgyODEgMTcuMDE3QzEyLjc1OTEgMTYuNDY5IDEzLjE0NzEgMTUuOTY5IDEzLjY5NTEgMTUuODk5QzE2LjM4NDEgMTUuNTU5IDE4LjM1MjEgMTMuOTI4IDE4LjM3MTEgMTMuOTExQzE4Ljc5MzEgMTMuNTU3IDE5LjQyNDEgMTMuNjA4IDE5Ljc3OTEgMTQuMDNDMjAuMTM1MSAxNC40NTEgMjAuMDg0MSAxNS4wOCAxOS42NjQxIDE1LjQzN0MxOS41NjcxIDE1LjUyIDE3LjI0NDEgMTcuNDY2IDEzLjk0NjEgMTcuODgzQzEzLjkwMzEgMTcuODg5IDEzLjg2MTEgMTcuODkyIDEzLjgxOTEgMTcuODkyWk0xMS45OTgxIDEzLjEyNUMxMS41NzMxIDEzLjEyNSAxMS4xNzkxIDEyLjg1MiAxMS4wNDQxIDEyLjQyNEMxMC44NzkxIDExLjg5NyAxMS4xNzExIDExLjMzNiAxMS42OTgxIDExLjE3QzE0LjgyODEgMTAuMTg3IDE1Ljk1MTEgOC40NzggMTUuOTk3MSA4LjQwNkMxNi4yOTIxIDcuOTQ0IDE2LjkwODEgNy44MDEgMTcuMzcyMSA4LjA5NEMxNy44MzcxIDguMzg2IDE3Ljk4MzEgOC45OTMgMTcuNjk2MSA5LjQ2QzE3LjYzNjEgOS41NTcgMTYuMTkwMSAxMS44NTYgMTIuMjk3MSAxMy4wNzlDMTIuMTk4MSAxMy4xMSAxMi4wOTcxIDEzLjEyNSAxMS45OTgxIDEzLjEyNVoiIGZpbGw9IiM3NDRFQUEiLz4KPC9zdmc+";
15
15
  var ideaImageUrl = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjMiIGhlaWdodD0iMzUiIHZpZXdCb3g9IjAgMCAyMyAzNSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTIyLjUgMTAuOTJDMjIuNSAxNy4zNTkgMTcuNSAxOC4zNTkgMTcuNSAyNC4zNkMxNy41IDI3LjQ1OCAxNC4zNzcgMjcuNzE5IDEyIDI3LjcxOUM5Ljk0NyAyNy43MTkgNS40MTQgMjYuOTQgNS40MTQgMjQuMzU4QzUuNDE0IDE4LjM2IDAuNSAxNy4zNiAwLjUgMTAuOTJDMC41IDQuODg5IDUuNzg1IDAgMTEuNTgzIDBDMTcuMzgzIDAgMjIuNSA0Ljg4OSAyMi41IDEwLjkyWiIgZmlsbD0iI0ZGREQ4MyIvPgo8cGF0aCBkPSJNMTUuNjY3IDMyLjM2QzE1LjY2NyAzMy4xODggMTMuNDMzIDM0Ljg2IDExLjUgMzQuODZDOS41NjcwMSAzNC44NiA3LjMzMzAxIDMzLjE4OCA3LjMzMzAxIDMyLjM2QzcuMzMzMDEgMzEuNTMyIDkuNTY2MDEgMzEuODYgMTEuNSAzMS44NkMxMy40MzMgMzEuODYgMTUuNjY3IDMxLjUzMiAxNS42NjcgMzIuMzZaIiBmaWxsPSIjQ0NENkREIi8+CjxwYXRoIGQ9Ik0xNi4yMDcgMTAuMTUzQzE1LjgxNiA5Ljc2MTk5IDE1LjE4NCA5Ljc2MTk5IDE0Ljc5MyAxMC4xNTNMMTEuNSAxMy40NDZMOC4yMDcwMSAxMC4xNTNDNy44MTYwMSA5Ljc2MTk5IDcuMTg0MDEgOS43NjE5OSA2Ljc5MzAxIDEwLjE1M0M2LjQwMjAxIDEwLjU0NCA2LjQwMjAxIDExLjE3NiA2Ljc5MzAxIDExLjU2N0wxMC41IDE1LjI3NFYyNS44NkMxMC41IDI2LjQxMyAxMC45NDggMjYuODYgMTEuNSAyNi44NkMxMi4wNTIgMjYuODYgMTIuNSAyNi40MTMgMTIuNSAyNS44NlYxNS4yNzRMMTYuMjA3IDExLjU2N0MxNi41OTggMTEuMTc2IDE2LjU5OCAxMC41NDQgMTYuMjA3IDEwLjE1M1oiIGZpbGw9IiNGRkNDNEQiLz4KPHBhdGggZD0iTTE3LjUgMzAuODZDMTcuNSAzMS45NjQgMTYuNjA0IDMyLjg2IDE1LjUgMzIuODZIOC41QzcuMzk2IDMyLjg2IDYuNSAzMS45NjQgNi41IDMwLjg2VjI0Ljg2SDE3LjVWMzAuODZaIiBmaWxsPSIjOTlBQUI1Ii8+CjxwYXRoIGQ9Ik01LjQ5OSAzMS44NkM1LjAxOSAzMS44NiA0LjU5NSAzMS41MTMgNC41MTQgMzEuMDI0QzQuNDIzIDMwLjQ4IDQuNzkxIDI5Ljk2NCA1LjMzNiAyOS44NzRMMTcuMzM2IDI3Ljg3NEMxNy44OCAyNy43NzYgMTguMzk2IDI4LjE1MSAxOC40ODYgMjguNjk2QzE4LjU3NyAyOS4yNCAxOC4yMDkgMjkuNzU2IDE3LjY2NCAyOS44NDZMOS42NjQgMzEuODQ2QzkuNjA5IDMxLjg1NiA5LjU1MyAzMS44NiA1LjQ5OSAzMS44NlpNNS40OTkgMjcuODZDNS4wMTkgMjcuODYgNC41OTUgMjcuNTEzIDQuNTE0IDI3LjAyNEM0LjQyMyAyNi40OCA0Ljc5MSAyNS45NjQgNS4zMzYgMjUuODc0TDE3LjMzNiAyMy44NzRDMTcuODggMjMuNzc3IDE4LjM5NiAyNC4xNTEgMTguNDg2IDI0LjY5NkMxOC41NzcgMjUuMjQgMTguMjA5IDI1Ljc1NiAxNy42NjQgMjUuODQ2TDkuNjY0IDI3Ljg0NkM5LjYwOSAyNy44NTYgOS41NTMgMjcuODYgNS40OTkgMjcuODZaIiBmaWxsPSIjQ0NENkREIi8+Cjwvc3ZnPg==";
16
16
  var thoughtImageUrl = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYiIGhlaWdodD0iMzMiIHZpZXdCb3g9IjAgMCAzNiAzMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM1LjE2NjYgMTAuODc1QzM1LjE2NjYgNy4wMDkgMzIuMDMyNiAzLjg3NSAyOC4xNjY2IDMuODc1QzI2Ljk5OTYgMy44NzUgMjUuOTAxNiA0LjE2NSAyNC45MzQ2IDQuNjY5QzIyLjg1MjYgMS44NDIgMTkuNTA5NiAwIDE1LjcyOTYgMEMxMC41OTc2IDAgNi4yNTQ2MyAzLjM4IDQuODA2NjMgOC4wMzZDMi4xNDg2MyA4LjY1MyAwLjE2NjYyNiAxMS4wMyAwLjE2NjYyNiAxMy44NzVDMC4xNjY2MjYgMTYuODU0IDIuMzQwNjMgMTkuMzIgNS4xODc2MyAxOS43ODhDNS40MDM2MyAyMy43MzcgOC42NjQ2MyAyNi44NzUgMTIuNjY2NiAyNi44NzVDMTQuODQyNiAyNi44NzUgMTYuNzk2NiAyNS45NDIgMTguMTY2NiAyNC40NjJDMTkuNTM2NiAyNS45NDIgMjEuNDg5NiAyNi44NzUgMjMuNjY2NiAyNi44NzVDMjcuODA5NiAyNi44NzUgMzEuMTY2NiAyMy41MTggMzEuMTY2NiAxOS4zNzVDMzEuMTY2NiAxOC42NjUgMzEuMDYxNiAxNy45ODEgMzAuODc3NiAxNy4zM0MzMy4zOTY2IDE2LjI3MSAzNS4xNjY2IDEzLjc4IDM1LjE2NjYgMTAuODc1WiIgZmlsbD0iIzg1QzhGOCIvPgo8cGF0aCBkPSJNNC4xNjY2MyAzMi44NzVDNS44MjM0OCAzMi44NzUgNy4xNjY2MyAzMS41MzE5IDcuMTY2NjMgMjkuODc1QzcuMTY2NjMgMjguMjE4MSA1LjgyMzQ4IDI2Ljg3NSA0LjE2NjYzIDI2Ljg3NUMuNTA5NzcgMjYuODc1IDEuMTY2NjMgMjguMjE4MSAxLjE2NjYzIDI5Ljg3NUMxLjE2NjYzIDMxLjUzMTkgMi41MDk3NyAzMi44NzUgNC4xNjY2MyAzMi44NzVaIiBmaWxsPSIjODVDOEY4Ii8+Cjwvc3ZnPg==";
17
- function CloseButton({ className = "", title = "Close feedback form" }) {
18
- return /* @__PURE__ */ jsxRuntime.jsx(react.Popover.Button, { className: `text-zinc-400 hover:text-zinc-100 ${className}`, title, children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.X, { weight: "bold", className: "w-4 h-4" }) });
17
+
18
+ // src/lib/theme.ts
19
+ function getThemeClasses(theme) {
20
+ return {
21
+ // Background colors - light mode is now softer (gray-50 instead of white)
22
+ bgPrimary: theme === "dark" ? "bg-zinc-900" : "bg-gray-50",
23
+ bgSecondary: theme === "dark" ? "bg-zinc-800" : "bg-gray-100",
24
+ bgTertiary: theme === "dark" ? "bg-zinc-700" : "bg-gray-200",
25
+ bgHover: theme === "dark" ? "hover:bg-zinc-600" : "hover:bg-gray-200",
26
+ bgHoverSecondary: theme === "dark" ? "hover:bg-zinc-700" : "hover:bg-gray-200",
27
+ // Text colors
28
+ textPrimary: theme === "dark" ? "text-zinc-100" : "text-gray-900",
29
+ textSecondary: theme === "dark" ? "text-zinc-300" : "text-gray-700",
30
+ textTertiary: theme === "dark" ? "text-zinc-400" : "text-gray-600",
31
+ textMuted: theme === "dark" ? "text-neutral-400" : "text-gray-500",
32
+ // Border colors
33
+ borderPrimary: theme === "dark" ? "border-zinc-700" : "border-gray-300",
34
+ borderSecondary: theme === "dark" ? "border-zinc-600" : "border-gray-300",
35
+ borderHover: theme === "dark" ? "hover:border-zinc-500" : "hover:border-gray-400",
36
+ // Canvas/Editor background
37
+ canvasBg: theme === "dark" ? "bg-zinc-900" : "bg-gray-200",
38
+ // Overlay
39
+ overlay: theme === "dark" ? "bg-black/80" : "bg-black/60",
40
+ // Focus ring offset
41
+ focusRingOffset: theme === "dark" ? "focus:ring-offset-zinc-900" : "focus:ring-offset-gray-50",
42
+ // Button variants
43
+ buttonSecondary: theme === "dark" ? "bg-zinc-800 hover:bg-zinc-700 text-zinc-100" : "bg-gray-200 hover:bg-gray-300 text-gray-900",
44
+ buttonTertiary: theme === "dark" ? "bg-zinc-700 hover:bg-zinc-600 text-zinc-100" : "bg-gray-300 hover:bg-gray-400 text-gray-900",
45
+ // Icon colors - make icons more visible (darker for better contrast)
46
+ iconColor: theme === "dark" ? "text-zinc-100" : "text-gray-900"
47
+ };
48
+ }
49
+ function getDefaultTheme() {
50
+ if (typeof process !== "undefined" && process.env.NEXT_PUBLIC_FEEDBACK_THEME === "light") {
51
+ return "light";
52
+ }
53
+ return "dark";
54
+ }
55
+ function CloseButton({ className = "", title = "Close feedback form", theme = "dark" }) {
56
+ const themeClasses = getThemeClasses(theme);
57
+ return /* @__PURE__ */ jsxRuntime.jsx(react.Popover.Button, { className: `${themeClasses.textTertiary} ${theme === "dark" ? "hover:text-zinc-100" : "hover:text-gray-900"} ${className}`, title, children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.X, { weight: "bold", className: "w-5 h-5" }) });
19
58
  }
20
59
 
21
60
  // src/lib/translations.ts
@@ -70,24 +109,25 @@ var translations = {
70
109
  function getTranslations(lang = "en") {
71
110
  return translations[lang];
72
111
  }
73
- function FeedbackTypeStep({ onFeedbackTypeChanged, language }) {
112
+ function FeedbackTypeStep({ onFeedbackTypeChanged, language, theme }) {
74
113
  const t = getTranslations(language);
75
114
  const feedbackTypes = getFeedbackTypes(language);
115
+ const themeClasses = getThemeClasses(theme);
76
116
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
77
117
  /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "flex items-center justify-between w-full gap-2", children: [
78
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg md:text-xl leading-6", children: t.form.header }),
79
- /* @__PURE__ */ jsxRuntime.jsx(CloseButton, { title: t.form.closeButton })
118
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-lg md:text-xl leading-6 ${themeClasses.textPrimary}`, children: t.form.header }),
119
+ /* @__PURE__ */ jsxRuntime.jsx(CloseButton, { title: t.form.closeButton, theme })
80
120
  ] }),
81
121
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex py-6 md:py-8 gap-2 md:gap-2 w-full justify-center md:justify-start flex-wrap", children: Object.entries(feedbackTypes).map(([key, value]) => {
82
122
  return /* @__PURE__ */ jsxRuntime.jsxs(
83
123
  "button",
84
124
  {
85
- className: "bg-zinc-800 rounded py-4 md:py-5 flex-1 min-w-[80px] md:w-24 flex flex-col items-center gap-2 border-2 border-transparent hover:border-brand-500 focus:border-brand-500 focus:outline-none transition-colors",
125
+ className: `${themeClasses.bgSecondary} rounded py-4 md:py-5 flex-1 min-w-[80px] md:w-24 flex flex-col items-center gap-2 border-2 border-transparent hover:border-brand-500 focus:border-brand-500 focus:outline-none transition-colors`,
86
126
  type: "button",
87
127
  onClick: () => onFeedbackTypeChanged(key),
88
128
  children: [
89
129
  /* @__PURE__ */ jsxRuntime.jsx("img", { src: value.image.source, alt: value.image.alt, className: "w-5 h-5 md:w-6 md:h-6" }),
90
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs md:text-sm text-center", children: value.title })
130
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-xs md:text-sm text-center ${themeClasses.textPrimary}`, children: value.title })
91
131
  ]
92
132
  },
93
133
  key
@@ -102,13 +142,15 @@ function ScreenshotEditor({
102
142
  screenshot,
103
143
  onSave,
104
144
  onCancel,
105
- language
145
+ language,
146
+ theme = "dark"
106
147
  }) {
107
148
  const canvasRef = react$1.useRef(null);
108
149
  const [isDrawing, setIsDrawing] = react$1.useState(false);
109
150
  const [color, setColor] = react$1.useState("#ef4444");
110
151
  const [brushSize, setBrushSize] = react$1.useState(3);
111
152
  const [image, setImage] = react$1.useState(null);
153
+ const themeClasses = getThemeClasses(theme);
112
154
  const t = {
113
155
  en: {
114
156
  save: "Save",
@@ -232,16 +274,16 @@ function ScreenshotEditor({
232
274
  const maxWidth = 600;
233
275
  const displayWidth = image ? Math.min(maxWidth, image.width) : maxWidth;
234
276
  const displayHeight = image ? displayWidth / image.width * image.height : 400;
235
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/80 p-2 md:p-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-zinc-800 rounded-lg shadow-xl max-w-4xl w-full max-h-[95vh] md:max-h-[90vh] overflow-auto", children: [
236
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 bg-zinc-800 border-b border-zinc-700 p-2 md:p-4 flex items-center justify-between z-10 gap-2", children: [
237
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-base md:text-lg font-semibold text-zinc-100 truncate", children: language === "nl" ? "Teken op screenshot" : "Draw on screenshot" }),
277
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: `fixed inset-0 z-50 flex items-center justify-center ${themeClasses.overlay} p-2 md:p-4`, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${themeClasses.bgSecondary} rounded-lg shadow-xl max-w-4xl w-full max-h-[95vh] md:max-h-[90vh] overflow-auto`, children: [
278
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `sticky top-0 ${themeClasses.bgSecondary} border-b ${themeClasses.borderPrimary} p-2 md:p-4 flex items-center justify-between z-10 gap-2`, children: [
279
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: `text-base md:text-lg font-semibold ${themeClasses.textPrimary} truncate`, children: language === "nl" ? "Teken op screenshot" : "Draw on screenshot" }),
238
280
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-1 md:gap-2 flex-shrink-0", children: [
239
281
  /* @__PURE__ */ jsxRuntime.jsx(
240
282
  "button",
241
283
  {
242
284
  type: "button",
243
285
  onClick: undo,
244
- className: "p-1.5 md:p-2 bg-zinc-700 hover:bg-zinc-600 rounded-md text-zinc-100 transition-colors touch-manipulation",
286
+ className: `p-1.5 md:p-2 ${themeClasses.buttonTertiary} rounded-md ${themeClasses.textPrimary} transition-colors touch-manipulation`,
245
287
  title: t.undo,
246
288
  children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.ArrowCounterClockwise, { weight: "bold", className: "w-4 h-4 md:w-5 md:h-5" })
247
289
  }
@@ -251,7 +293,7 @@ function ScreenshotEditor({
251
293
  {
252
294
  type: "button",
253
295
  onClick: clearCanvas,
254
- className: "p-1.5 md:p-2 bg-zinc-700 hover:bg-zinc-600 rounded-md text-zinc-100 transition-colors touch-manipulation",
296
+ className: `p-1.5 md:p-2 ${themeClasses.buttonTertiary} rounded-md ${themeClasses.textPrimary} transition-colors touch-manipulation`,
255
297
  title: t.clear,
256
298
  children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.Trash, { weight: "bold", className: "w-4 h-4 md:w-5 md:h-5" })
257
299
  }
@@ -261,7 +303,7 @@ function ScreenshotEditor({
261
303
  {
262
304
  type: "button",
263
305
  onClick: onCancel,
264
- className: "p-1.5 md:p-2 bg-zinc-700 hover:bg-zinc-600 rounded-md text-zinc-100 transition-colors touch-manipulation",
306
+ className: `p-1.5 md:p-2 ${themeClasses.buttonTertiary} rounded-md ${themeClasses.textPrimary} transition-colors touch-manipulation`,
265
307
  title: t.cancel,
266
308
  children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.X, { weight: "bold", className: "w-4 h-4 md:w-5 md:h-5" })
267
309
  }
@@ -271,7 +313,7 @@ function ScreenshotEditor({
271
313
  {
272
314
  type: "button",
273
315
  onClick: handleSave,
274
- className: "p-1.5 md:p-2 bg-brand-500 hover:bg-brand-400 rounded-md text-zinc-100 transition-colors touch-manipulation",
316
+ className: "p-1.5 md:p-2 bg-brand-500 hover:bg-brand-400 rounded-md text-white transition-colors touch-manipulation",
275
317
  title: t.save,
276
318
  children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.Check, { weight: "bold", className: "w-4 h-4 md:w-5 md:h-5" })
277
319
  }
@@ -280,13 +322,13 @@ function ScreenshotEditor({
280
322
  ] }),
281
323
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-3 md:p-4", children: [
282
324
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-3 md:mb-4 flex flex-col md:flex-row items-start md:items-center gap-2 md:gap-4", children: [
283
- /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-xs md:text-sm text-zinc-300 whitespace-nowrap", children: language === "nl" ? "Kleur:" : "Color:" }),
325
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: `text-xs md:text-sm ${themeClasses.textSecondary} whitespace-nowrap`, children: language === "nl" ? "Kleur:" : "Color:" }),
284
326
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-1.5 md:gap-2 flex-wrap", children: colors.map((c) => /* @__PURE__ */ jsxRuntime.jsx(
285
327
  "button",
286
328
  {
287
329
  type: "button",
288
330
  onClick: () => setColor(c),
289
- className: `w-7 h-7 md:w-8 md:h-8 rounded-full border-2 transition-all touch-manipulation ${color === c ? "border-zinc-100 scale-110" : "border-zinc-600 hover:border-zinc-500"}`,
331
+ className: `w-7 h-7 md:w-8 md:h-8 rounded-full border-2 transition-all touch-manipulation ${color === c ? `${theme === "dark" ? "border-zinc-100" : "border-gray-900"} scale-110` : `${themeClasses.borderSecondary} ${themeClasses.borderHover}`}`,
290
332
  style: { backgroundColor: c },
291
333
  title: c
292
334
  },
@@ -294,7 +336,7 @@ function ScreenshotEditor({
294
336
  )) })
295
337
  ] }),
296
338
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-3 md:mb-4 flex flex-col md:flex-row items-start md:items-center gap-2 md:gap-4", children: [
297
- /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-xs md:text-sm text-zinc-300 whitespace-nowrap", children: language === "nl" ? "Grootte:" : "Size:" }),
339
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: `text-xs md:text-sm ${themeClasses.textSecondary} whitespace-nowrap`, children: language === "nl" ? "Grootte:" : "Size:" }),
298
340
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 w-full md:w-auto", children: [
299
341
  /* @__PURE__ */ jsxRuntime.jsx(
300
342
  "input",
@@ -307,10 +349,10 @@ function ScreenshotEditor({
307
349
  className: "flex-1 md:flex-none md:max-w-xs"
308
350
  }
309
351
  ),
310
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs md:text-sm text-zinc-400 w-6 md:w-8 text-right", children: brushSize })
352
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-xs md:text-sm ${themeClasses.textTertiary} w-6 md:w-8 text-right`, children: brushSize })
311
353
  ] })
312
354
  ] }),
313
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center bg-zinc-900 rounded-lg p-2 md:p-4 overflow-auto", children: /* @__PURE__ */ jsxRuntime.jsx(
355
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex justify-center ${themeClasses.canvasBg} rounded-lg p-2 md:p-4 overflow-auto`, children: /* @__PURE__ */ jsxRuntime.jsx(
314
356
  "canvas",
315
357
  {
316
358
  ref: canvasRef,
@@ -321,7 +363,7 @@ function ScreenshotEditor({
321
363
  onTouchStart: startDrawing,
322
364
  onTouchMove: draw,
323
365
  onTouchEnd: stopDrawing,
324
- className: "cursor-crosshair border border-zinc-700 rounded touch-none",
366
+ className: `cursor-crosshair border ${themeClasses.borderPrimary} rounded touch-none`,
325
367
  style: {
326
368
  width: `${displayWidth}px`,
327
369
  height: `${displayHeight}px`,
@@ -336,17 +378,22 @@ function ScreenshotEditor({
336
378
  function ScreenshotButton({
337
379
  screenshot,
338
380
  onScreenshotTook,
339
- language = "en"
381
+ language = "en",
382
+ theme = "dark"
340
383
  }) {
341
384
  const [isTakenScreenshot, setIsTakenScreenShot] = react$1.useState(false);
342
385
  const [showEditor, setShowEditor] = react$1.useState(false);
343
386
  const [tempScreenshot, setTempScreenshot] = react$1.useState(null);
387
+ const themeClasses = getThemeClasses(theme);
344
388
  async function handleTakeScreenshot() {
345
389
  setIsTakenScreenShot(true);
346
- const canvas = await html2canvas__default.default(document.querySelector("html"));
390
+ const canvas = await html2canvas__default.default(document.querySelector("html"), {
391
+ ignoreElements: (element) => {
392
+ return element.hasAttribute("data-feedback-widget") || element.closest("[data-feedback-widget]") !== null;
393
+ }
394
+ });
347
395
  const base64image = canvas.toDataURL("image/png");
348
- setTempScreenshot(base64image);
349
- setShowEditor(true);
396
+ onScreenshotTook(base64image);
350
397
  setIsTakenScreenShot(false);
351
398
  }
352
399
  function handleEditorSave(editedScreenshot) {
@@ -372,61 +419,104 @@ function ScreenshotButton({
372
419
  screenshot: tempScreenshot || screenshot,
373
420
  onSave: handleEditorSave,
374
421
  onCancel: handleEditorCancel,
375
- language
422
+ language,
423
+ theme
376
424
  }
377
425
  ),
378
- screenshot && !tempScreenshot ? /* @__PURE__ */ jsxRuntime.jsx(
379
- "button",
380
- {
381
- type: "button",
382
- className: "p-1 w-10 h-10 rounded-md border-transparent flex \n justify-end items-end text-zinc-400 hover:text-zinc-100 transition-colors",
383
- onClick: () => onScreenshotTook(null),
384
- style: {
385
- backgroundImage: `url(${screenshot})`,
386
- backgroundPosition: "right bottom",
387
- backgroundSize: 180
388
- },
389
- children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.Trash, { weight: "fill" })
390
- }
391
- ) : /* @__PURE__ */ jsxRuntime.jsx(
426
+ screenshot ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
427
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative group", children: [
428
+ /* @__PURE__ */ jsxRuntime.jsx(
429
+ "div",
430
+ {
431
+ className: `p-1 w-10 h-10 rounded-md border ${themeClasses.borderSecondary} flex
432
+ justify-end items-end relative overflow-hidden`,
433
+ style: {
434
+ backgroundImage: `url(${screenshot})`,
435
+ backgroundPosition: "center",
436
+ backgroundSize: "cover"
437
+ },
438
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/10 transition-colors rounded-md" })
439
+ }
440
+ ),
441
+ /* @__PURE__ */ jsxRuntime.jsx(
442
+ "button",
443
+ {
444
+ type: "button",
445
+ onClick: (e) => {
446
+ e.stopPropagation();
447
+ onScreenshotTook(null);
448
+ },
449
+ className: "absolute -top-1 -right-1 w-4 h-4 bg-red-500 hover:bg-red-600 rounded-full flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity z-10",
450
+ title: language === "nl" ? "Verwijderen" : "Delete",
451
+ children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.X, { weight: "bold", className: "w-3 h-3 text-white" })
452
+ }
453
+ )
454
+ ] }),
455
+ /* @__PURE__ */ jsxRuntime.jsx(
456
+ "button",
457
+ {
458
+ type: "button",
459
+ onClick: handleEditScreenshot,
460
+ className: `p-2 ${themeClasses.bgSecondary} rounded-md border-transparent ${themeClasses.bgHoverSecondary}
461
+ transition-colors focus:outline-none focus:ring-2
462
+ focus:ring-offset-2 ${themeClasses.focusRingOffset} focus:ring-brand-500`,
463
+ title: language === "nl" ? "Bewerk screenshot" : "Edit screenshot",
464
+ children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.PencilSimple, { weight: "bold", className: `w-5 h-5 ${themeClasses.textPrimary}` })
465
+ }
466
+ )
467
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(
392
468
  "button",
393
469
  {
394
470
  type: "button",
395
- className: "p-2 bg-zinc-800 rounded-md border-transparent hover:bg-zinc-700\n transitions-colors focus:outline-none focus:ring-2\n focus:ring-offset-2 focus:ring-offset-zinc-900 focus:ring-brand-500",
471
+ className: `p-2 ${themeClasses.bgSecondary} rounded-md border-transparent ${themeClasses.bgHoverSecondary}
472
+ transition-colors focus:outline-none focus:ring-2
473
+ focus:ring-offset-2 ${themeClasses.focusRingOffset} focus:ring-brand-500`,
396
474
  onClick: handleTakeScreenshot,
397
- children: isTakenScreenshot ? /* @__PURE__ */ jsxRuntime.jsx(Loading, {}) : /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.Camera, { weight: "bold", className: "w-6 h-6" })
475
+ children: isTakenScreenshot ? /* @__PURE__ */ jsxRuntime.jsx(Loading, {}) : /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.Camera, { weight: "bold", className: `w-6 h-6 ${themeClasses.iconColor}` })
398
476
  }
399
477
  )
400
478
  ] });
401
479
  }
402
480
  if (screenshot) {
403
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative group", children: [
481
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
482
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative group", children: [
483
+ /* @__PURE__ */ jsxRuntime.jsx(
484
+ "div",
485
+ {
486
+ className: `p-1 w-10 h-10 rounded-md border ${themeClasses.borderSecondary} flex
487
+ justify-end items-end relative overflow-hidden`,
488
+ style: {
489
+ backgroundImage: `url(${screenshot})`,
490
+ backgroundPosition: "center",
491
+ backgroundSize: "cover"
492
+ },
493
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/10 transition-colors rounded-md" })
494
+ }
495
+ ),
496
+ /* @__PURE__ */ jsxRuntime.jsx(
497
+ "button",
498
+ {
499
+ type: "button",
500
+ onClick: (e) => {
501
+ e.stopPropagation();
502
+ onScreenshotTook(null);
503
+ },
504
+ className: "absolute -top-1 -right-1 w-4 h-4 bg-red-500 hover:bg-red-600 rounded-full flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity z-10",
505
+ title: language === "nl" ? "Verwijderen" : "Delete",
506
+ children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.X, { weight: "bold", className: "w-3 h-3 text-white" })
507
+ }
508
+ )
509
+ ] }),
404
510
  /* @__PURE__ */ jsxRuntime.jsx(
405
511
  "button",
406
512
  {
407
513
  type: "button",
408
- className: "p-1 w-10 h-10 rounded-md border-transparent flex \n justify-end items-end text-zinc-400 hover:text-zinc-100 transition-colors relative",
409
514
  onClick: handleEditScreenshot,
410
- style: {
411
- backgroundImage: `url(${screenshot})`,
412
- backgroundPosition: "right bottom",
413
- backgroundSize: 180
414
- },
415
- title: language === "nl" ? "Klik om te bewerken" : "Click to edit",
416
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 bg-black/0 group-hover:bg-black/20 transition-colors rounded-md" })
417
- }
418
- ),
419
- /* @__PURE__ */ jsxRuntime.jsx(
420
- "button",
421
- {
422
- type: "button",
423
- onClick: (e) => {
424
- e.stopPropagation();
425
- onScreenshotTook(null);
426
- },
427
- className: "absolute -top-1 -right-1 w-4 h-4 bg-red-500 hover:bg-red-600 rounded-full flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity z-10",
428
- title: language === "nl" ? "Verwijderen" : "Delete",
429
- children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.X, { weight: "bold", className: "w-3 h-3 text-white" })
515
+ className: `p-2 ${themeClasses.bgSecondary} rounded-md border-transparent ${themeClasses.bgHoverSecondary}
516
+ transition-colors focus:outline-none focus:ring-2
517
+ focus:ring-offset-2 ${themeClasses.focusRingOffset} focus:ring-brand-500`,
518
+ title: language === "nl" ? "Bewerk screenshot" : "Edit screenshot",
519
+ children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.PencilSimple, { weight: "bold", className: `w-5 h-5 ${themeClasses.textPrimary}` })
430
520
  }
431
521
  )
432
522
  ] });
@@ -435,9 +525,11 @@ function ScreenshotButton({
435
525
  "button",
436
526
  {
437
527
  type: "button",
438
- className: "p-2 bg-zinc-800 rounded-md border-transparent hover:bg-zinc-700\n transitions-colors focus:outline-none focus:ring-2\n focus:ring-offset-2 focus:ring-offset-zinc-900 focus:ring-brand-500",
528
+ className: `p-2 ${themeClasses.bgSecondary} rounded-md border-transparent ${themeClasses.bgHoverSecondary}
529
+ transitions-colors focus:outline-none focus:ring-2
530
+ focus:ring-offset-2 ${themeClasses.focusRingOffset} focus:ring-brand-500`,
439
531
  onClick: handleTakeScreenshot,
440
- children: isTakenScreenshot ? /* @__PURE__ */ jsxRuntime.jsx(Loading, {}) : /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.Camera, { weight: "bold", className: "w-6 h-6" })
532
+ children: isTakenScreenshot ? /* @__PURE__ */ jsxRuntime.jsx(Loading, {}) : /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.Camera, { weight: "bold", className: `w-6 h-6 ${themeClasses.iconColor}` })
441
533
  }
442
534
  );
443
535
  }
@@ -449,10 +541,12 @@ function FileUploadButton({
449
541
  maxFileSize = DEFAULT_MAX_FILE_SIZE,
450
542
  maxTotalSize = DEFAULT_MAX_TOTAL_SIZE,
451
543
  acceptedTypes = "image/*,.pdf,.doc,.docx,.txt",
452
- language = "en"
544
+ language = "en",
545
+ theme = "dark"
453
546
  }) {
454
547
  const fileInputRef = react$1.useRef(null);
455
548
  const [error, setError] = react$1.useState(null);
549
+ const themeClasses = getThemeClasses(theme);
456
550
  const translations2 = {
457
551
  en: {
458
552
  upload: "Upload file",
@@ -538,10 +632,12 @@ function FileUploadButton({
538
632
  "button",
539
633
  {
540
634
  type: "button",
541
- className: "p-2 bg-zinc-800 rounded-md border-transparent hover:bg-zinc-700\n transitions-colors focus:outline-none focus:ring-2\n focus:ring-offset-2 focus:ring-offset-zinc-900 focus:ring-brand-500",
635
+ className: `p-2 ${themeClasses.bgSecondary} rounded-md border-transparent ${themeClasses.bgHoverSecondary}
636
+ transitions-colors focus:outline-none focus:ring-2
637
+ focus:ring-offset-2 ${themeClasses.focusRingOffset} focus:ring-brand-500`,
542
638
  onClick: handleButtonClick,
543
639
  title: t.upload,
544
- children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.Paperclip, { weight: "bold", className: "w-6 h-6" })
640
+ children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.Paperclip, { weight: "bold", className: `w-6 h-6 ${themeClasses.iconColor}` })
545
641
  }
546
642
  ),
547
643
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -558,7 +654,7 @@ function FileUploadButton({
558
654
  files.map((uploadedFile) => /* @__PURE__ */ jsxRuntime.jsxs(
559
655
  "div",
560
656
  {
561
- className: "flex items-center gap-1 bg-zinc-800 rounded-md px-2 py-1 text-xs",
657
+ className: `flex items-center gap-1 ${themeClasses.bgSecondary} rounded-md px-2 py-1 text-xs`,
562
658
  children: [
563
659
  uploadedFile.preview ? /* @__PURE__ */ jsxRuntime.jsx(
564
660
  "img",
@@ -567,14 +663,14 @@ function FileUploadButton({
567
663
  alt: uploadedFile.file.name,
568
664
  className: "w-5 h-5 md:w-6 md:h-6 object-cover rounded flex-shrink-0"
569
665
  }
570
- ) : /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.Paperclip, { className: "w-3 h-3 md:w-4 md:h-4 flex-shrink-0" }),
571
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-zinc-300 max-w-[80px] md:max-w-[100px] truncate", title: uploadedFile.file.name, children: uploadedFile.file.name }),
666
+ ) : /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.Paperclip, { className: `w-3 h-3 md:w-4 md:h-4 flex-shrink-0 ${themeClasses.iconColor}` }),
667
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${themeClasses.textSecondary} max-w-[80px] md:max-w-[100px] truncate`, title: uploadedFile.file.name, children: uploadedFile.file.name }),
572
668
  /* @__PURE__ */ jsxRuntime.jsx(
573
669
  "button",
574
670
  {
575
671
  type: "button",
576
672
  onClick: () => handleRemoveFile(uploadedFile.id),
577
- className: "text-zinc-400 hover:text-zinc-100 transition-colors flex-shrink-0 touch-manipulation",
673
+ className: `${themeClasses.textTertiary} ${theme === "dark" ? "hover:text-zinc-100" : "hover:text-gray-900"} transition-colors flex-shrink-0 touch-manipulation`,
578
674
  title: t.remove,
579
675
  children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.X, { weight: "bold", className: "w-3 h-3 md:w-4 md:h-4" })
580
676
  }
@@ -585,7 +681,7 @@ function FileUploadButton({
585
681
  ))
586
682
  ] }),
587
683
  error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-red-400", children: error }),
588
- files.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-zinc-400", children: [
684
+ files.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("p", { className: `text-xs ${themeClasses.textTertiary}`, children: [
589
685
  files.length,
590
686
  " ",
591
687
  t.files,
@@ -1110,10 +1206,12 @@ function FeedbackContentStep({
1110
1206
  onFeedbackSent,
1111
1207
  integration,
1112
1208
  githubConfig,
1113
- language
1209
+ language,
1210
+ theme
1114
1211
  }) {
1115
1212
  const t = getTranslations(language);
1116
1213
  const feedbackTypes = getFeedbackTypes(language);
1214
+ const themeClasses = getThemeClasses(theme);
1117
1215
  const [screenshot, setScreenshot] = react$1.useState(null);
1118
1216
  const [uploadedFiles, setUploadedFiles] = react$1.useState([]);
1119
1217
  const feedbackTypeData = feedbackTypes[feedbackType];
@@ -1152,17 +1250,17 @@ function FeedbackContentStep({
1152
1250
  }
1153
1251
  }
1154
1252
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1155
- /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "relative w-full pr-8 md:pr-8", children: [
1253
+ /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "relative w-full", children: [
1156
1254
  /* @__PURE__ */ jsxRuntime.jsx(
1157
1255
  "button",
1158
1256
  {
1159
1257
  type: "button",
1160
- className: "absolute top-3 md:top-5 left-3 md:left-5 text-zinc-400 hover:text-zinc-100 z-10 p-1",
1258
+ className: `absolute top-0 left-0 ${themeClasses.textTertiary} ${theme === "dark" ? "hover:text-zinc-100" : "hover:text-gray-900"} z-10 p-2 md:p-2.5`,
1161
1259
  onClick: onFeedbackRestartRequest,
1162
- children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.ArrowLeft, { weight: "bold", className: "w-4 h-4 md:w-4 md:h-4" })
1260
+ children: /* @__PURE__ */ jsxRuntime.jsx(phosphorReact.ArrowLeft, { weight: "bold", className: "w-5 h-5 md:w-5 md:h-5" })
1163
1261
  }
1164
1262
  ),
1165
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-lg md:text-xl leading-6 flex items-center gap-2 mt-2 pl-8 md:pl-10", children: [
1263
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: `text-lg md:text-xl leading-6 flex items-center gap-2 pl-10 md:pl-12 pr-10 md:pr-12 ${themeClasses.textPrimary}`, children: [
1166
1264
  /* @__PURE__ */ jsxRuntime.jsx(
1167
1265
  "img",
1168
1266
  {
@@ -1173,13 +1271,17 @@ function FeedbackContentStep({
1173
1271
  ),
1174
1272
  feedbackTypeData.title
1175
1273
  ] }),
1176
- /* @__PURE__ */ jsxRuntime.jsx(CloseButton, { className: "absolute top-3 md:top-5 right-3 md:right-5", title: t.form.closeButton })
1274
+ /* @__PURE__ */ jsxRuntime.jsx(CloseButton, { className: "absolute top-0 right-0 p-2 md:p-2.5", title: t.form.closeButton, theme })
1177
1275
  ] }),
1178
1276
  /* @__PURE__ */ jsxRuntime.jsxs("form", { onSubmit: handleSubmitFeedback, className: "my-3 md:my-4 w-full", children: [
1179
1277
  /* @__PURE__ */ jsxRuntime.jsx(
1180
1278
  "textarea",
1181
1279
  {
1182
- className: "w-full min-h-[100px] md:min-h-[112px] text-sm \n placeholder-zinc-400 text-zinc-100 border border-zinc-600 bg-transparent rounded-md p-2 md:p-3\n focus:border-brand-500 focus:ring-brand-500 focus:ring-1 resize-none focus:outline-none\n scrollbar-thumb-zinc-700 scrollbar-track-transparent scrollbar-thin",
1280
+ className: `w-full min-h-[100px] md:min-h-[112px] text-sm
1281
+ ${themeClasses.textPrimary} border-2 border-brand-500 bg-transparent rounded-md p-2 md:p-3
1282
+ ${theme === "dark" ? "placeholder:text-zinc-400" : "placeholder:text-gray-500"}
1283
+ focus:border-brand-500 focus:ring-brand-500 focus:ring-1 resize-none focus:outline-none
1284
+ ${theme === "dark" ? "scrollbar-thumb-zinc-700" : "scrollbar-thumb-gray-400"} scrollbar-track-transparent scrollbar-thin`,
1183
1285
  placeholder: t.content.placeholder,
1184
1286
  onChange: (e) => setComment(e.target.value)
1185
1287
  }
@@ -1189,7 +1291,8 @@ function FeedbackContentStep({
1189
1291
  {
1190
1292
  files: uploadedFiles,
1191
1293
  onFilesChanged: setUploadedFiles,
1192
- language
1294
+ language,
1295
+ theme
1193
1296
  }
1194
1297
  ) }),
1195
1298
  /* @__PURE__ */ jsxRuntime.jsxs("footer", { className: "flex gap-2 mt-3", children: [
@@ -1198,7 +1301,8 @@ function FeedbackContentStep({
1198
1301
  {
1199
1302
  screenshot,
1200
1303
  onScreenshotTook: setScreenshot,
1201
- language
1304
+ language,
1305
+ theme
1202
1306
  }
1203
1307
  ),
1204
1308
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1206,7 +1310,11 @@ function FeedbackContentStep({
1206
1310
  {
1207
1311
  type: "submit",
1208
1312
  disabled: comment.length === 0 || isSendingFeedback,
1209
- className: "p-2 bg-brand-500 rounded-md border-transparent flex-1 justify-center\n items-center text-sm hover:bg-brand-300 focus:outline-none focus:ring-2\n focus:ring-offset-2 focus:ring-offset-zinc-900 focus:ring-brand-500\n transition-colors disabled:opacity-50 disabled:cursor-not-allowed\n disabled:hover:bg-brand-500 flex",
1313
+ className: `p-2 bg-brand-500 rounded-md border-transparent flex-1 justify-center
1314
+ items-center text-sm hover:bg-brand-300 focus:outline-none focus:ring-2
1315
+ focus:ring-offset-2 ${themeClasses.focusRingOffset} focus:ring-brand-500
1316
+ transition-colors disabled:opacity-50 disabled:cursor-not-allowed
1317
+ disabled:hover:bg-brand-500 flex text-white`,
1210
1318
  children: isSendingFeedback ? /* @__PURE__ */ jsxRuntime.jsx(Loading, {}) : t.content.sendButton
1211
1319
  }
1212
1320
  )
@@ -1214,22 +1322,23 @@ function FeedbackContentStep({
1214
1322
  ] })
1215
1323
  ] });
1216
1324
  }
1217
- function FeedbackSuccessStep({ onFeedbackRestartRequest, language }) {
1325
+ function FeedbackSuccessStep({ onFeedbackRestartRequest, language, theme }) {
1218
1326
  const t = getTranslations(language);
1327
+ const themeClasses = getThemeClasses(theme);
1219
1328
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1220
- /* @__PURE__ */ jsxRuntime.jsx("header", { children: /* @__PURE__ */ jsxRuntime.jsx(CloseButton, { title: t.form.closeButton }) }),
1329
+ /* @__PURE__ */ jsxRuntime.jsx("header", { children: /* @__PURE__ */ jsxRuntime.jsx(CloseButton, { title: t.form.closeButton, theme }) }),
1221
1330
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center py-8 md:py-10 w-full max-w-[304px] px-2", children: [
1222
1331
  /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "41", height: "40", viewBox: "0 0 41 40", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "w-10 h-10 md:w-[41px] md:h-[40px]", children: [
1223
1332
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M38.5 34C38.5 36.209 36.709 38 34.5 38H6.5C4.291 38 2.5 36.209 2.5 34V6C2.5 3.791 4.291 2 6.5 2H34.5C36.709 2 38.5 3.791 38.5 6V34Z", fill: "#77B255" }),
1224
1333
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M31.78 8.36202C30.624 7.61102 29.076 7.94002 28.322 9.09802L17.436 25.877L12.407 21.227C11.393 20.289 9.81103 20.352 8.87403 21.365C7.93703 22.379 7.99903 23.961 9.01303 24.898L16.222 31.564C16.702 32.009 17.312 32.229 17.918 32.229C18.591 32.229 19.452 31.947 20.017 31.09C20.349 30.584 32.517 11.82 32.517 11.82C33.268 10.661 32.938 9.11302 31.78 8.36202Z", fill: "white" })
1225
1334
  ] }),
1226
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg md:text-xl mt-2 text-center", children: t.success.message }),
1335
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `text-lg md:text-xl mt-2 text-center ${themeClasses.textPrimary}`, children: t.success.message }),
1227
1336
  /* @__PURE__ */ jsxRuntime.jsx(
1228
1337
  "button",
1229
1338
  {
1230
1339
  type: "button",
1231
1340
  onClick: onFeedbackRestartRequest,
1232
- className: "py-2 px-6 mt-6 bg-zinc-800 rounded-md border-transparent text-sm leading-6 hover:bg-zinc-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-zinc-900 focus:ring-brand-500 transition-colors",
1341
+ className: `py-2 px-6 mt-6 ${themeClasses.buttonSecondary} rounded-md border-transparent text-sm leading-6 focus:outline-none focus:ring-2 focus:ring-offset-2 ${themeClasses.focusRingOffset} focus:ring-brand-500 transition-colors`,
1233
1342
  children: t.success.sendAnother
1234
1343
  }
1235
1344
  )
@@ -1262,15 +1371,16 @@ function getFeedbackTypes(language = "en") {
1262
1371
  }
1263
1372
  };
1264
1373
  }
1265
- function WidgetForm({ integration, githubConfig, language }) {
1374
+ function WidgetForm({ integration, githubConfig, language, theme }) {
1266
1375
  const [feedbackType, setFeedbackType] = react$1.useState(null);
1267
1376
  const [feedbackSent, setFeedbackSent] = react$1.useState(false);
1377
+ const themeClasses = getThemeClasses(theme);
1268
1378
  function handleRestartFeedback() {
1269
1379
  setFeedbackSent(false);
1270
1380
  setFeedbackType(null);
1271
1381
  }
1272
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-zinc-900 p-3 md:p-4 relative rounded-2xl mb-4 flex flex-col items-center shadow-lg w-[calc(100vw-2rem)] md:w-auto max-w-md", children: [
1273
- feedbackSent ? /* @__PURE__ */ jsxRuntime.jsx(FeedbackSuccessStep, { onFeedbackRestartRequest: handleRestartFeedback, language }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: !feedbackType ? /* @__PURE__ */ jsxRuntime.jsx(FeedbackTypeStep, { onFeedbackTypeChanged: setFeedbackType, language }) : /* @__PURE__ */ jsxRuntime.jsx(
1382
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `${themeClasses.bgPrimary} p-3 md:p-4 relative rounded-2xl mb-4 flex flex-col items-center shadow-lg w-[calc(100vw-2rem)] md:w-auto md:min-w-[384px] max-w-md`, children: [
1383
+ feedbackSent ? /* @__PURE__ */ jsxRuntime.jsx(FeedbackSuccessStep, { onFeedbackRestartRequest: handleRestartFeedback, language, theme }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: !feedbackType ? /* @__PURE__ */ jsxRuntime.jsx(FeedbackTypeStep, { onFeedbackTypeChanged: setFeedbackType, language, theme }) : /* @__PURE__ */ jsxRuntime.jsx(
1274
1384
  FeedbackContentStep,
1275
1385
  {
1276
1386
  feedbackType,
@@ -1278,10 +1388,11 @@ function WidgetForm({ integration, githubConfig, language }) {
1278
1388
  onFeedbackSent: () => setFeedbackSent(true),
1279
1389
  integration,
1280
1390
  githubConfig,
1281
- language
1391
+ language,
1392
+ theme
1282
1393
  }
1283
1394
  ) }),
1284
- /* @__PURE__ */ jsxRuntime.jsx("footer", { className: "text-xs text-neutral-400 mt-2", children: /* @__PURE__ */ jsxRuntime.jsx(
1395
+ /* @__PURE__ */ jsxRuntime.jsx("footer", { className: `text-xs ${themeClasses.textMuted} mt-2`, children: /* @__PURE__ */ jsxRuntime.jsx(
1285
1396
  "a",
1286
1397
  {
1287
1398
  className: "underline underline-offset-2",
@@ -1299,13 +1410,25 @@ function getDefaultLanguage() {
1299
1410
  }
1300
1411
  return "en";
1301
1412
  }
1413
+ function isWidgetEnabled() {
1414
+ if (typeof process !== "undefined" && process.env.NEXT_PUBLIC_FEEDBACK_ENABLED !== void 0) {
1415
+ const enabled = process.env.NEXT_PUBLIC_FEEDBACK_ENABLED.toLowerCase();
1416
+ return enabled !== "false" && enabled !== "0";
1417
+ }
1418
+ return true;
1419
+ }
1302
1420
  function Widget({
1303
1421
  integration,
1304
1422
  githubConfig,
1305
1423
  position = "bottom-right",
1306
- language
1424
+ language,
1425
+ theme
1307
1426
  }) {
1427
+ if (!isWidgetEnabled()) {
1428
+ return null;
1429
+ }
1308
1430
  const finalLanguage = language || getDefaultLanguage();
1431
+ const finalTheme = theme || getDefaultTheme();
1309
1432
  const t = getTranslations(finalLanguage);
1310
1433
  const positionClasses = {
1311
1434
  "bottom-right": "bottom-4 right-4 md:bottom-8 md:right-8",
@@ -1313,14 +1436,18 @@ function Widget({
1313
1436
  "top-right": "top-4 right-4 md:top-8 md:right-8",
1314
1437
  "top-left": "top-4 left-4 md:top-8 md:left-4"
1315
1438
  };
1316
- const alignmentClass = position.includes("left") ? "items-start" : "items-end";
1317
- return /* @__PURE__ */ jsxRuntime.jsxs(react.Popover, { className: `fixed ${positionClasses[position]} flex flex-col ${alignmentClass} z-50`, children: [
1318
- /* @__PURE__ */ jsxRuntime.jsx(react.Popover.Panel, { children: /* @__PURE__ */ jsxRuntime.jsx(
1439
+ const isTop = position.includes("top");
1440
+ const isLeft = position.includes("left");
1441
+ const panelPositionClass = isTop ? "absolute top-full mt-2" : "absolute bottom-full mb-2";
1442
+ const panelAlignmentClass = isLeft ? "left-0" : "right-0";
1443
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-feedback-widget": "true", className: `fixed ${positionClasses[position]} z-50`, children: /* @__PURE__ */ jsxRuntime.jsxs(react.Popover, { className: "relative", children: [
1444
+ /* @__PURE__ */ jsxRuntime.jsx(react.Popover.Panel, { className: `${panelPositionClass} ${panelAlignmentClass}`, children: /* @__PURE__ */ jsxRuntime.jsx(
1319
1445
  WidgetForm,
1320
1446
  {
1321
1447
  integration,
1322
1448
  githubConfig,
1323
- language: finalLanguage
1449
+ language: finalLanguage,
1450
+ theme: finalTheme
1324
1451
  }
1325
1452
  ) }),
1326
1453
  /* @__PURE__ */ jsxRuntime.jsxs(react.Popover.Button, { className: "bg-brand-500 rounded-full px-3 md:px-3 h-12 text-white flex items-center group focus:outline-none shadow-lg hover:shadow-xl transition-shadow", children: [
@@ -1330,7 +1457,7 @@ function Widget({
1330
1457
  t.widget.button
1331
1458
  ] })
1332
1459
  ] })
1333
- ] });
1460
+ ] }) });
1334
1461
  }
1335
1462
 
1336
1463
  exports.Widget = Widget;