pulse-feedback-widget 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/PulseWidget.d.ts +3 -0
- package/dist/PulseWidget.d.ts.map +1 -0
- package/dist/PulseWidget.mjs +62 -0
- package/dist/PulseWidget.mjs.map +1 -0
- package/dist/components/ConversationView.d.ts +11 -0
- package/dist/components/ConversationView.d.ts.map +1 -0
- package/dist/components/ConversationView.mjs +70 -0
- package/dist/components/ConversationView.mjs.map +1 -0
- package/dist/components/ConversationView.module.css.mjs +8 -0
- package/dist/components/ConversationView.module.css.mjs.map +1 -0
- package/dist/components/FeedbackForm.d.ts +14 -0
- package/dist/components/FeedbackForm.d.ts.map +1 -0
- package/dist/components/FeedbackForm.mjs +76 -0
- package/dist/components/FeedbackForm.mjs.map +1 -0
- package/dist/components/FeedbackForm.module.css.mjs +8 -0
- package/dist/components/FeedbackForm.module.css.mjs.map +1 -0
- package/dist/components/FeedbackPanel.d.ts +17 -0
- package/dist/components/FeedbackPanel.d.ts.map +1 -0
- package/dist/components/FeedbackPanel.mjs +41 -0
- package/dist/components/FeedbackPanel.mjs.map +1 -0
- package/dist/components/FeedbackPanel.module.css.mjs +8 -0
- package/dist/components/FeedbackPanel.module.css.mjs.map +1 -0
- package/dist/components/SuccessState.d.ts +7 -0
- package/dist/components/SuccessState.d.ts.map +1 -0
- package/dist/components/SuccessState.mjs +9 -0
- package/dist/components/SuccessState.mjs.map +1 -0
- package/dist/components/SuccessState.module.css.mjs +8 -0
- package/dist/components/SuccessState.module.css.mjs.map +1 -0
- package/dist/components/ThreadList.d.ts +9 -0
- package/dist/components/ThreadList.d.ts.map +1 -0
- package/dist/components/ThreadList.mjs +58 -0
- package/dist/components/ThreadList.mjs.map +1 -0
- package/dist/components/ThreadList.module.css.mjs +8 -0
- package/dist/components/ThreadList.module.css.mjs.map +1 -0
- package/dist/components/TriggerButton.d.ts +9 -0
- package/dist/components/TriggerButton.d.ts.map +1 -0
- package/dist/components/TriggerButton.mjs +10 -0
- package/dist/components/TriggerButton.mjs.map +1 -0
- package/dist/components/TriggerButton.module.css.mjs +8 -0
- package/dist/components/TriggerButton.module.css.mjs.map +1 -0
- package/dist/components/TypeSelector.d.ts +8 -0
- package/dist/components/TypeSelector.d.ts.map +1 -0
- package/dist/components/TypeSelector.mjs +13 -0
- package/dist/components/TypeSelector.mjs.map +1 -0
- package/dist/components/TypeSelector.module.css.mjs +8 -0
- package/dist/components/TypeSelector.module.css.mjs.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lib/api.d.ts +35 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.mjs +105 -0
- package/dist/lib/api.mjs.map +1 -0
- package/dist/lib/capture.d.ts +7 -0
- package/dist/lib/capture.d.ts.map +1 -0
- package/dist/lib/capture.mjs +14 -0
- package/dist/lib/capture.mjs.map +1 -0
- package/dist/lib/device.d.ts +2 -0
- package/dist/lib/device.d.ts.map +1 -0
- package/dist/lib/device.mjs +34 -0
- package/dist/lib/device.mjs.map +1 -0
- package/dist/lib/supabase.d.ts +4 -0
- package/dist/lib/supabase.d.ts.map +1 -0
- package/dist/lib/supabase.mjs +19 -0
- package/dist/lib/supabase.mjs.map +1 -0
- package/dist/node_modules/style-inject/dist/style-inject.es.mjs +29 -0
- package/dist/node_modules/style-inject/dist/style-inject.es.mjs.map +1 -0
- package/dist/types.d.ts +89 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.mjs +45 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface TriggerButtonProps {
|
|
2
|
+
onClick: () => void;
|
|
3
|
+
position: 'bottom-right' | 'bottom-left';
|
|
4
|
+
accentColor: string;
|
|
5
|
+
hasNotification: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function TriggerButton({ onClick, position, accentColor, hasNotification }: TriggerButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=TriggerButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerButton.d.ts","sourceRoot":"","sources":["../../src/components/TriggerButton.tsx"],"names":[],"mappings":"AAGA,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,cAAc,GAAG,aAAa,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,kBAAkB,2CAiBpG"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import styles from './TriggerButton.module.css.mjs';
|
|
3
|
+
|
|
4
|
+
function TriggerButton({ onClick, position, accentColor, hasNotification }) {
|
|
5
|
+
const posClass = position === 'bottom-left' ? styles.bottomLeft : styles.bottomRight;
|
|
6
|
+
return (jsxs("button", { className: `${styles.trigger} ${posClass}`, onClick: onClick, style: { backgroundColor: accentColor }, "aria-label": "Open feedback", type: "button", children: [jsx("svg", { className: styles.triggerIcon, viewBox: "0 0 24 24", children: jsx("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" }) }), hasNotification && jsx("span", { className: styles.notificationDot })] }));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export { TriggerButton };
|
|
10
|
+
//# sourceMappingURL=TriggerButton.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerButton.mjs","sources":["../../src/components/TriggerButton.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;AAUM,SAAU,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAsB,EAAA;AACnG,IAAA,MAAM,QAAQ,GAAG,QAAQ,KAAK,aAAa,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW;IAEpF,QACEA,IAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,CAAA,EAAG,MAAM,CAAC,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,EAC1C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,EAAA,YAAA,EAC5B,eAAe,EAC1B,IAAI,EAAC,QAAQ,EAAA,QAAA,EAAA,CAEbC,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAC,WAAW,EAAA,QAAA,EACrDA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,+DAA+D,EAAA,CAAG,EAAA,CACtE,EACL,eAAe,IAAIA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,MAAM,CAAC,eAAe,EAAA,CAAI,CAAA,EAAA,CACxD;AAEb;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import styleInject from '../node_modules/style-inject/dist/style-inject.es.mjs';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".TriggerButton-module_trigger__02CR-{align-items:center;border:none;border-radius:50%;box-shadow:0 2px 12px rgba(0,0,0,.15);cursor:pointer;display:flex;height:48px;justify-content:center;outline:none;padding:0;position:fixed;transition:transform .12s cubic-bezier(.22,1,.36,1),box-shadow .12s cubic-bezier(.22,1,.36,1);width:48px;z-index:9999}.TriggerButton-module_trigger__02CR-:hover{box-shadow:0 4px 20px rgba(0,0,0,.2);transform:scale(1.08)}.TriggerButton-module_trigger__02CR-:active{transform:scale(.95)}.TriggerButton-module_bottomRight__566sd{bottom:16px;right:16px}.TriggerButton-module_bottomLeft__G7wbE{bottom:16px;left:16px}.TriggerButton-module_triggerIcon__WdZYH{fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;color:#fff;height:24px;width:24px}.TriggerButton-module_notificationDot__b1Thf{animation:TriggerButton-module_pulse-dot__TIqUH 2s ease-in-out infinite;background:#ef4444;border:2px solid #fff;border-radius:50%;height:10px;position:absolute;right:-2px;top:-2px;width:10px}@keyframes TriggerButton-module_pulse-dot__TIqUH{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.3)}}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyaWdnZXJCdXR0b24ubW9kdWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxxQ0FTRSxrQkFBbUIsQ0FIbkIsV0FBWSxDQURaLGlCQUFrQixDQU1sQixxQ0FBMEMsQ0FKMUMsY0FBZSxDQUNmLFlBQWEsQ0FKYixXQUFZLENBTVosc0JBQXVCLENBS3ZCLFlBQWEsQ0FEYixTQUFVLENBYlYsY0FBZSxDQVdmLDZGQUMyRCxDQVYzRCxVQUFXLENBRFgsWUFjRixDQUVBLDJDQUVFLG9DQUF5QyxDQUR6QyxxQkFFRixDQUVBLDRDQUNFLG9CQUNGLENBRUEseUNBQ0UsV0FBWSxDQUNaLFVBQ0YsQ0FFQSx3Q0FDRSxXQUFZLENBQ1osU0FDRixDQUVBLHlDQUlFLFNBQVUsQ0FDVixtQkFBb0IsQ0FDcEIsZ0JBQWlCLENBQ2pCLG9CQUFxQixDQUNyQixxQkFBc0IsQ0FMdEIsVUFBYyxDQURkLFdBQVksQ0FEWixVQVFGLENBRUEsNkNBU0UsdUVBQTRDLENBRjVDLGtCQUFtQixDQUNuQixxQkFBeUIsQ0FGekIsaUJBQWtCLENBRGxCLFdBQVksQ0FKWixpQkFBa0IsQ0FFbEIsVUFBVyxDQURYLFFBQVMsQ0FFVCxVQU1GLENBRUEsaURBQ0UsTUFBZ0MsU0FBVSxDQUEvQixrQkFBaUMsQ0FDNUMsSUFBNkIsVUFBWSxDQUFuQyxvQkFBcUMsQ0FDN0MiLCJmaWxlIjoiVHJpZ2dlckJ1dHRvbi5tb2R1bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLnRyaWdnZXIge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk7XG4gIHdpZHRoOiA0OHB4O1xuICBoZWlnaHQ6IDQ4cHg7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBib3gtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMjBtcyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSksXG4gICAgICAgICAgICAgIGJveC1zaGFkb3cgMTIwbXMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpO1xuICBwYWRkaW5nOiAwO1xuICBvdXRsaW5lOiBub25lO1xufVxuXG4udHJpZ2dlcjpob3ZlciB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4wOCk7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuXG4udHJpZ2dlcjphY3RpdmUge1xuICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpO1xufVxuXG4uYm90dG9tUmlnaHQge1xuICBib3R0b206IDE2cHg7XG4gIHJpZ2h0OiAxNnB4O1xufVxuXG4uYm90dG9tTGVmdCB7XG4gIGJvdHRvbTogMTZweDtcbiAgbGVmdDogMTZweDtcbn1cblxuLnRyaWdnZXJJY29uIHtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgY29sb3I6ICNmZmZmZmY7XG4gIGZpbGw6IG5vbmU7XG4gIHN0cm9rZTogY3VycmVudENvbG9yO1xuICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kO1xuICBzdHJva2UtbGluZWpvaW46IHJvdW5kO1xufVxuXG4ubm90aWZpY2F0aW9uRG90IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IC0ycHg7XG4gIHJpZ2h0OiAtMnB4O1xuICB3aWR0aDogMTBweDtcbiAgaGVpZ2h0OiAxMHB4O1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIGJhY2tncm91bmQ6ICNFRjQ0NDQ7XG4gIGJvcmRlcjogMnB4IHNvbGlkICNmZmZmZmY7XG4gIGFuaW1hdGlvbjogcHVsc2UtZG90IDJzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIHB1bHNlLWRvdCB7XG4gIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgb3BhY2l0eTogMTsgfVxuICA1MCUgeyB0cmFuc2Zvcm06IHNjYWxlKDEuMyk7IG9wYWNpdHk6IDAuODsgfVxufVxuIl19 */";
|
|
4
|
+
var styles = {"trigger":"TriggerButton-module_trigger__02CR-","bottomRight":"TriggerButton-module_bottomRight__566sd","bottomLeft":"TriggerButton-module_bottomLeft__G7wbE","triggerIcon":"TriggerButton-module_triggerIcon__WdZYH","notificationDot":"TriggerButton-module_notificationDot__b1Thf"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { styles as default };
|
|
8
|
+
//# sourceMappingURL=TriggerButton.module.css.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerButton.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FeedbackType } from '../types';
|
|
2
|
+
interface TypeSelectorProps {
|
|
3
|
+
value: FeedbackType | null;
|
|
4
|
+
onChange: (type: FeedbackType) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare function TypeSelector({ value, onChange }: TypeSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=TypeSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeSelector.d.ts","sourceRoot":"","sources":["../../src/components/TypeSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,UAAU,iBAAiB;IACzB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CACxC;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAoBlE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { FEEDBACK_TYPES } from '../types.mjs';
|
|
3
|
+
import styles from './TypeSelector.module.css.mjs';
|
|
4
|
+
|
|
5
|
+
function TypeSelector({ value, onChange }) {
|
|
6
|
+
return (jsx("div", { className: styles.typeSelector, children: FEEDBACK_TYPES.map((ft) => {
|
|
7
|
+
const isActive = value === ft.value;
|
|
8
|
+
return (jsxs("button", { type: "button", className: `${styles.typeBtn} ${isActive ? styles.typeBtnActive : ''}`, style: isActive ? { backgroundColor: ft.color, borderColor: ft.color } : undefined, onClick: () => onChange(ft.value), children: [jsx("span", { className: styles.emoji, children: ft.emoji }), ft.label] }, ft.value));
|
|
9
|
+
}) }));
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { TypeSelector };
|
|
13
|
+
//# sourceMappingURL=TypeSelector.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeSelector.mjs","sources":["../../src/components/TypeSelector.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":";;;;SAUgB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAqB,EAAA;AACjE,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,YAAY,EAAA,QAAA,EAChC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,KAAI;AACzB,YAAA,MAAM,QAAQ,GAAG,KAAK,KAAK,EAAE,CAAC,KAAK;AACnC,YAAA,QACEC,IAAA,CAAA,QAAA,EAAA,EAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,CAAA,EAAG,MAAM,CAAC,OAAO,CAAA,CAAA,EAAI,QAAQ,GAAG,MAAM,CAAC,aAAa,GAAG,EAAE,EAAE,EACtE,KAAK,EAAE,QAAQ,GAAG,EAAE,eAAe,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,SAAS,EAClF,OAAO,EAAE,MAAM,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAA,QAAA,EAAA,CAEjCD,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,MAAM,CAAC,KAAK,YAAG,EAAE,CAAC,KAAK,EAAA,CAAQ,EAC/C,EAAE,CAAC,KAAK,CAAA,EAAA,EAPJ,EAAE,CAAC,KAAK,CAQN;QAEb,CAAC,CAAC,EAAA,CACE;AAEV;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import styleInject from '../node_modules/style-inject/dist/style-inject.es.mjs';
|
|
2
|
+
|
|
3
|
+
var css_248z = ".TypeSelector-module_typeSelector__2e3l6{display:flex;flex-wrap:wrap;gap:6px}.TypeSelector-module_typeBtn__OV7GJ{align-items:center;background:transparent;border:1px solid var(--pulse-border,#e5e7eb);border-radius:9999px;color:var(--pulse-text-secondary,#6b7280);cursor:pointer;display:flex;font-family:inherit;font-size:13px;font-weight:500;gap:4px;padding:4px 10px;transition:all .12s cubic-bezier(.22,1,.36,1)}.TypeSelector-module_typeBtn__OV7GJ:hover{background:var(--pulse-bg-hover,#f3f4f6);border-color:var(--pulse-border-strong,#d1d5db)}.TypeSelector-module_typeBtnActive__BtcSH{border-color:transparent;color:#fff}.TypeSelector-module_emoji__74Qn7{font-size:14px;line-height:1}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlR5cGVTZWxlY3Rvci5tb2R1bGUuY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUNFLFlBQWEsQ0FFYixjQUFlLENBRGYsT0FFRixDQUVBLG9DQUVFLGtCQUFtQixDQUtuQixzQkFBdUIsQ0FEdkIsNENBQThDLENBRDlDLG9CQUFxQixDQU1yQix5Q0FBMkMsQ0FIM0MsY0FBZSxDQVBmLFlBQWEsQ0FZYixtQkFBb0IsQ0FKcEIsY0FBZSxDQUNmLGVBQWdCLENBUGhCLE9BQVEsQ0FDUixnQkFBaUIsQ0FRakIsNkNBRUYsQ0FFQSwwQ0FFRSx3Q0FBMEMsQ0FEMUMsK0NBRUYsQ0FFQSwwQ0FFRSx3QkFBeUIsQ0FEekIsVUFFRixDQUVBLGtDQUNFLGNBQWUsQ0FDZixhQUNGIiwiZmlsZSI6IlR5cGVTZWxlY3Rvci5tb2R1bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLnR5cGVTZWxlY3RvciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogNnB4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi50eXBlQnRuIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA0cHg7XG4gIHBhZGRpbmc6IDRweCAxMHB4O1xuICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXB1bHNlLWJvcmRlciwgI2U1ZTdlYik7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtc2l6ZTogMTNweDtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6IHZhcigtLXB1bHNlLXRleHQtc2Vjb25kYXJ5LCAjNmI3MjgwKTtcbiAgdHJhbnNpdGlvbjogYWxsIDEyMG1zIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKTtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG59XG5cbi50eXBlQnRuOmhvdmVyIHtcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1wdWxzZS1ib3JkZXItc3Ryb25nLCAjZDFkNWRiKTtcbiAgYmFja2dyb3VuZDogdmFyKC0tcHVsc2UtYmctaG92ZXIsICNmM2Y0ZjYpO1xufVxuXG4udHlwZUJ0bkFjdGl2ZSB7XG4gIGNvbG9yOiAjZmZmZmZmO1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4uZW1vamkge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xufVxuIl19 */";
|
|
4
|
+
var styles = {"typeSelector":"TypeSelector-module_typeSelector__2e3l6","typeBtn":"TypeSelector-module_typeBtn__OV7GJ","typeBtnActive":"TypeSelector-module_typeBtnActive__BtcSH","emoji":"TypeSelector-module_emoji__74Qn7"};
|
|
5
|
+
styleInject(css_248z);
|
|
6
|
+
|
|
7
|
+
export { styles as default };
|
|
8
|
+
//# sourceMappingURL=TypeSelector.module.css.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TypeSelector.module.css.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { SupabaseClient } from '@supabase/supabase-js';
|
|
2
|
+
import type { FeedbackType, Thread, Message } from '../types';
|
|
3
|
+
interface SubmitFeedbackParams {
|
|
4
|
+
projectSlug: string;
|
|
5
|
+
deviceId: string;
|
|
6
|
+
type: FeedbackType;
|
|
7
|
+
subject: string;
|
|
8
|
+
body: string;
|
|
9
|
+
userEmail?: string;
|
|
10
|
+
userName?: string;
|
|
11
|
+
pageUrl?: string;
|
|
12
|
+
userAgent?: string;
|
|
13
|
+
appVersion?: string;
|
|
14
|
+
screenSize?: string;
|
|
15
|
+
metadata?: Record<string, unknown>;
|
|
16
|
+
attachments?: {
|
|
17
|
+
path: string;
|
|
18
|
+
name: string;
|
|
19
|
+
type: string;
|
|
20
|
+
size: number;
|
|
21
|
+
}[];
|
|
22
|
+
}
|
|
23
|
+
export declare function submitFeedback(client: SupabaseClient, params: SubmitFeedbackParams): Promise<string | null>;
|
|
24
|
+
export declare function getMyThreads(client: SupabaseClient): Promise<Thread[]>;
|
|
25
|
+
export declare function getThreadMessages(client: SupabaseClient, threadId: string): Promise<Message[]>;
|
|
26
|
+
export declare function sendUserReply(client: SupabaseClient, threadId: string, body: string): Promise<boolean>;
|
|
27
|
+
export declare function checkUnreadReplies(client: SupabaseClient, deviceId: string): Promise<boolean>;
|
|
28
|
+
export declare function uploadAttachment(client: SupabaseClient, deviceId: string, threadId: string, file: File): Promise<{
|
|
29
|
+
path: string;
|
|
30
|
+
name: string;
|
|
31
|
+
type: string;
|
|
32
|
+
size: number;
|
|
33
|
+
} | null>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/lib/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAKnF,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC5E;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4BxB;AAID,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAID,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,EAAE,CAAC,CAkBpB;AAID,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAelB;AAID,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC,CAgBlB;AAID,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAsB5E"}
|
package/dist/lib/api.mjs
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { fromDbMessage, fromDbThread } from '../types.mjs';
|
|
2
|
+
|
|
3
|
+
// ── Widget API Layer ──
|
|
4
|
+
async function submitFeedback(client, params) {
|
|
5
|
+
try {
|
|
6
|
+
const { data, error } = await client.rpc('create_thread_with_message', {
|
|
7
|
+
p_project_slug: params.projectSlug,
|
|
8
|
+
p_device_id: params.deviceId,
|
|
9
|
+
p_type: params.type,
|
|
10
|
+
p_subject: params.subject,
|
|
11
|
+
p_body: params.body,
|
|
12
|
+
p_user_email: params.userEmail || null,
|
|
13
|
+
p_user_name: params.userName || null,
|
|
14
|
+
p_page_url: params.pageUrl || null,
|
|
15
|
+
p_user_agent: params.userAgent || null,
|
|
16
|
+
p_app_version: params.appVersion || null,
|
|
17
|
+
p_screen_size: params.screenSize || null,
|
|
18
|
+
p_metadata: params.metadata || {},
|
|
19
|
+
p_attachments: params.attachments || [],
|
|
20
|
+
});
|
|
21
|
+
if (error) {
|
|
22
|
+
console.warn('[Pulse] Submit error:', error.message);
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
console.warn('[Pulse] Network error:', err);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// ── Get My Threads ──
|
|
33
|
+
async function getMyThreads(client) {
|
|
34
|
+
try {
|
|
35
|
+
const { data, error } = await client
|
|
36
|
+
.from('threads')
|
|
37
|
+
.select('*')
|
|
38
|
+
.order('created_at', { ascending: false });
|
|
39
|
+
if (error) {
|
|
40
|
+
console.warn('[Pulse] Fetch threads error:', error.message);
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
return data.map(fromDbThread);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
console.warn('[Pulse] Network error:', err);
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// ── Get Thread Messages ──
|
|
51
|
+
async function getThreadMessages(client, threadId) {
|
|
52
|
+
try {
|
|
53
|
+
const { data, error } = await client
|
|
54
|
+
.from('messages')
|
|
55
|
+
.select('*')
|
|
56
|
+
.eq('thread_id', threadId)
|
|
57
|
+
.order('created_at', { ascending: true });
|
|
58
|
+
if (error) {
|
|
59
|
+
console.warn('[Pulse] Fetch messages error:', error.message);
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
return data.map(fromDbMessage);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
console.warn('[Pulse] Network error:', err);
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// ── Send Reply (user) ──
|
|
70
|
+
async function sendUserReply(client, threadId, body) {
|
|
71
|
+
try {
|
|
72
|
+
const { error } = await client
|
|
73
|
+
.from('messages')
|
|
74
|
+
.insert({ thread_id: threadId, sender: 'user', body });
|
|
75
|
+
if (error) {
|
|
76
|
+
console.warn('[Pulse] Reply error:', error.message);
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
console.warn('[Pulse] Network error:', err);
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// ── Check Unread Replies ──
|
|
87
|
+
async function checkUnreadReplies(client, deviceId) {
|
|
88
|
+
try {
|
|
89
|
+
const { data, error } = await client.rpc('check_unread_replies', {
|
|
90
|
+
p_device_id: deviceId,
|
|
91
|
+
});
|
|
92
|
+
if (error) {
|
|
93
|
+
console.warn('[Pulse] Unread check error:', error.message);
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
return data;
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
console.warn('[Pulse] Network error:', err);
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export { checkUnreadReplies, getMyThreads, getThreadMessages, sendUserReply, submitFeedback };
|
|
105
|
+
//# sourceMappingURL=api.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.mjs","sources":["../../src/lib/api.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/lib/capture.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,IAAI,eAAe,CAUhD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// ── Auto-capture context ──
|
|
2
|
+
function captureContext() {
|
|
3
|
+
if (typeof window === 'undefined') {
|
|
4
|
+
return { pageUrl: '', userAgent: '', screenSize: '' };
|
|
5
|
+
}
|
|
6
|
+
return {
|
|
7
|
+
pageUrl: window.location.href,
|
|
8
|
+
userAgent: navigator.userAgent,
|
|
9
|
+
screenSize: `${window.innerWidth}x${window.innerHeight}`,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { captureContext };
|
|
14
|
+
//# sourceMappingURL=capture.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.mjs","sources":["../../src/lib/capture.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;SAQgB,cAAc,GAAA;AAC5B,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,QAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;IACvD;IAEA,OAAO;AACL,QAAA,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;QAC7B,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,UAAU,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA,CAAA,EAAI,MAAM,CAAC,WAAW,CAAA,CAAE;KACzD;AACH;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../src/lib/device.ts"],"names":[],"mappings":"AAkBA,wBAAgB,WAAW,IAAI,MAAM,CAcpC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// ── Device ID management ──
|
|
2
|
+
// Generates a random device ID and persists it in localStorage for thread continuity.
|
|
3
|
+
const STORAGE_KEY = 'pulse_device_id';
|
|
4
|
+
function generateId() {
|
|
5
|
+
// Crypto.randomUUID is available in all modern browsers
|
|
6
|
+
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
7
|
+
return crypto.randomUUID();
|
|
8
|
+
}
|
|
9
|
+
// Fallback
|
|
10
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
11
|
+
const r = (Math.random() * 16) | 0;
|
|
12
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
13
|
+
return v.toString(16);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function getDeviceId() {
|
|
17
|
+
if (typeof window === 'undefined')
|
|
18
|
+
return '';
|
|
19
|
+
try {
|
|
20
|
+
let id = localStorage.getItem(STORAGE_KEY);
|
|
21
|
+
if (!id) {
|
|
22
|
+
id = generateId();
|
|
23
|
+
localStorage.setItem(STORAGE_KEY, id);
|
|
24
|
+
}
|
|
25
|
+
return id;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// localStorage blocked (incognito, iframe restrictions, etc.)
|
|
29
|
+
return generateId();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { getDeviceId };
|
|
34
|
+
//# sourceMappingURL=device.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device.mjs","sources":["../../src/lib/device.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AACA;AAEA,MAAM,WAAW,GAAG,iBAAiB;AAErC,SAAS,UAAU,GAAA;;IAEjB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE;AACtD,QAAA,OAAO,MAAM,CAAC,UAAU,EAAE;IAC5B;;IAEA,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;AACnE,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;AAClC,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG;AACzC,QAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvB,IAAA,CAAC,CAAC;AACJ;SAEgB,WAAW,GAAA;IACzB,IAAI,OAAO,MAAM,KAAK,WAAW;AAAE,QAAA,OAAO,EAAE;AAE5C,IAAA,IAAI;QACF,IAAI,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;QAC1C,IAAI,CAAC,EAAE,EAAE;YACP,EAAE,GAAG,UAAU,EAAE;AACjB,YAAA,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QACvC;AACA,QAAA,OAAO,EAAE;IACX;AAAE,IAAA,MAAM;;QAEN,OAAO,UAAU,EAAE;IACrB;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../src/lib/supabase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIrE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAWhG;AAGD,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createClient } from '@supabase/supabase-js';
|
|
2
|
+
|
|
3
|
+
// ── Widget Supabase Client ──
|
|
4
|
+
let client = null;
|
|
5
|
+
function getSupabaseClient(url, anonKey, deviceId) {
|
|
6
|
+
if (!client) {
|
|
7
|
+
client = createClient(url, anonKey, {
|
|
8
|
+
global: {
|
|
9
|
+
headers: {
|
|
10
|
+
'x-device-id': deviceId,
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
return client;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export { getSupabaseClient };
|
|
19
|
+
//# sourceMappingURL=supabase.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase.mjs","sources":["../../src/lib/supabase.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;AAIA,IAAI,MAAM,GAA0B,IAAI;SAExB,iBAAiB,CAAC,GAAW,EAAE,OAAe,EAAE,QAAgB,EAAA;IAC9E,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE;AAClC,YAAA,MAAM,EAAE;AACN,gBAAA,OAAO,EAAE;AACP,oBAAA,aAAa,EAAE,QAAQ;AACxB,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;AACA,IAAA,OAAO,MAAM;AACf;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
function styleInject(css, ref) {
|
|
2
|
+
if ( ref === void 0 ) ref = {};
|
|
3
|
+
var insertAt = ref.insertAt;
|
|
4
|
+
|
|
5
|
+
if (!css || typeof document === 'undefined') { return; }
|
|
6
|
+
|
|
7
|
+
var head = document.head || document.getElementsByTagName('head')[0];
|
|
8
|
+
var style = document.createElement('style');
|
|
9
|
+
style.type = 'text/css';
|
|
10
|
+
|
|
11
|
+
if (insertAt === 'top') {
|
|
12
|
+
if (head.firstChild) {
|
|
13
|
+
head.insertBefore(style, head.firstChild);
|
|
14
|
+
} else {
|
|
15
|
+
head.appendChild(style);
|
|
16
|
+
}
|
|
17
|
+
} else {
|
|
18
|
+
head.appendChild(style);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (style.styleSheet) {
|
|
22
|
+
style.styleSheet.cssText = css;
|
|
23
|
+
} else {
|
|
24
|
+
style.appendChild(document.createTextNode(css));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { styleInject as default };
|
|
29
|
+
//# sourceMappingURL=style-inject.es.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-inject.es.mjs","sources":["../../../../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":"AAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,CAAC;;AAEzD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B,IAAI;AACJ,EAAE,CAAC,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B,EAAE;;AAEF,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,EAAE,CAAC,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD,EAAE;AACF;;;;","x_google_ignoreList":[0]}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export type FeedbackType = 'bug' | 'feature' | 'question' | 'praise' | 'other';
|
|
2
|
+
export type ThreadStatus = 'open' | 'in_progress' | 'resolved' | 'closed' | 'wont_fix';
|
|
3
|
+
export type MessageSender = 'user' | 'developer';
|
|
4
|
+
export interface Thread {
|
|
5
|
+
id: string;
|
|
6
|
+
projectId: string;
|
|
7
|
+
deviceId: string;
|
|
8
|
+
type: FeedbackType;
|
|
9
|
+
status: ThreadStatus;
|
|
10
|
+
subject: string;
|
|
11
|
+
userEmail: string | null;
|
|
12
|
+
userName: string | null;
|
|
13
|
+
pageUrl: string | null;
|
|
14
|
+
userAgent: string | null;
|
|
15
|
+
appVersion: string | null;
|
|
16
|
+
screenSize: string | null;
|
|
17
|
+
metadata: Record<string, unknown>;
|
|
18
|
+
isRead: boolean;
|
|
19
|
+
isStarred: boolean;
|
|
20
|
+
createdAt: string;
|
|
21
|
+
updatedAt: string;
|
|
22
|
+
}
|
|
23
|
+
export interface Message {
|
|
24
|
+
id: string;
|
|
25
|
+
threadId: string;
|
|
26
|
+
sender: MessageSender;
|
|
27
|
+
body: string;
|
|
28
|
+
attachments: Attachment[];
|
|
29
|
+
isInternal: boolean;
|
|
30
|
+
createdAt: string;
|
|
31
|
+
}
|
|
32
|
+
export interface Attachment {
|
|
33
|
+
path: string;
|
|
34
|
+
name: string;
|
|
35
|
+
type: string;
|
|
36
|
+
size: number;
|
|
37
|
+
}
|
|
38
|
+
export interface PulseWidgetProps {
|
|
39
|
+
projectId: string;
|
|
40
|
+
supabaseUrl: string;
|
|
41
|
+
supabaseAnonKey: string;
|
|
42
|
+
position?: 'bottom-right' | 'bottom-left';
|
|
43
|
+
accentColor?: string;
|
|
44
|
+
greeting?: string;
|
|
45
|
+
placeholder?: string;
|
|
46
|
+
hideOnPaths?: string[];
|
|
47
|
+
collectEmail?: boolean;
|
|
48
|
+
metadata?: Record<string, unknown>;
|
|
49
|
+
onOpen?: () => void;
|
|
50
|
+
onClose?: () => void;
|
|
51
|
+
onSubmit?: (threadId: string) => void;
|
|
52
|
+
}
|
|
53
|
+
export declare const FEEDBACK_TYPES: {
|
|
54
|
+
value: FeedbackType;
|
|
55
|
+
emoji: string;
|
|
56
|
+
label: string;
|
|
57
|
+
color: string;
|
|
58
|
+
}[];
|
|
59
|
+
export interface DbThread {
|
|
60
|
+
id: string;
|
|
61
|
+
project_id: string;
|
|
62
|
+
device_id: string;
|
|
63
|
+
type: FeedbackType;
|
|
64
|
+
status: ThreadStatus;
|
|
65
|
+
subject: string;
|
|
66
|
+
user_email: string | null;
|
|
67
|
+
user_name: string | null;
|
|
68
|
+
page_url: string | null;
|
|
69
|
+
user_agent: string | null;
|
|
70
|
+
app_version: string | null;
|
|
71
|
+
screen_size: string | null;
|
|
72
|
+
metadata: Record<string, unknown>;
|
|
73
|
+
is_read: boolean;
|
|
74
|
+
is_starred: boolean;
|
|
75
|
+
created_at: string;
|
|
76
|
+
updated_at: string;
|
|
77
|
+
}
|
|
78
|
+
export interface DbMessage {
|
|
79
|
+
id: string;
|
|
80
|
+
thread_id: string;
|
|
81
|
+
sender: MessageSender;
|
|
82
|
+
body: string;
|
|
83
|
+
attachments: Attachment[];
|
|
84
|
+
is_internal: boolean;
|
|
85
|
+
created_at: string;
|
|
86
|
+
}
|
|
87
|
+
export declare function fromDbThread(row: DbThread): Thread;
|
|
88
|
+
export declare function fromDbMessage(row: DbMessage): Message;
|
|
89
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.mjs
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// ── Pulse Widget Types ──
|
|
2
|
+
// Feedback type config
|
|
3
|
+
const FEEDBACK_TYPES = [
|
|
4
|
+
{ value: 'bug', emoji: '🐛', label: 'Bug', color: '#EF4444' },
|
|
5
|
+
{ value: 'feature', emoji: '💡', label: 'Feature', color: '#F59E0B' },
|
|
6
|
+
{ value: 'question', emoji: '❓', label: 'Question', color: '#3B82F6' },
|
|
7
|
+
{ value: 'praise', emoji: '🎉', label: 'Praise', color: '#10B981' },
|
|
8
|
+
{ value: 'other', emoji: '💬', label: 'Other', color: '#6B7280' },
|
|
9
|
+
];
|
|
10
|
+
// Mappers
|
|
11
|
+
function fromDbThread(row) {
|
|
12
|
+
return {
|
|
13
|
+
id: row.id,
|
|
14
|
+
projectId: row.project_id,
|
|
15
|
+
deviceId: row.device_id,
|
|
16
|
+
type: row.type,
|
|
17
|
+
status: row.status,
|
|
18
|
+
subject: row.subject,
|
|
19
|
+
userEmail: row.user_email,
|
|
20
|
+
userName: row.user_name,
|
|
21
|
+
pageUrl: row.page_url,
|
|
22
|
+
userAgent: row.user_agent,
|
|
23
|
+
appVersion: row.app_version,
|
|
24
|
+
screenSize: row.screen_size,
|
|
25
|
+
metadata: row.metadata,
|
|
26
|
+
isRead: row.is_read,
|
|
27
|
+
isStarred: row.is_starred,
|
|
28
|
+
createdAt: row.created_at,
|
|
29
|
+
updatedAt: row.updated_at,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function fromDbMessage(row) {
|
|
33
|
+
return {
|
|
34
|
+
id: row.id,
|
|
35
|
+
threadId: row.thread_id,
|
|
36
|
+
sender: row.sender,
|
|
37
|
+
body: row.body,
|
|
38
|
+
attachments: row.attachments,
|
|
39
|
+
isInternal: row.is_internal,
|
|
40
|
+
createdAt: row.created_at,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { FEEDBACK_TYPES, fromDbMessage, fromDbThread };
|
|
45
|
+
//# sourceMappingURL=types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","sources":["../src/types.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;AA6DA;AACO,MAAM,cAAc,GAA2E;AACpG,IAAA,EAAE,KAAK,EAAE,KAAK,EAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAO,KAAK,EAAE,SAAS,EAAE;AACvE,IAAA,EAAE,KAAK,EAAE,SAAS,EAAG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAG,KAAK,EAAE,SAAS,EAAE;AACvE,IAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE;AACtE,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAI,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAI,KAAK,EAAE,SAAS,EAAE;AACvE,IAAA,EAAE,KAAK,EAAE,OAAO,EAAK,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAK,KAAK,EAAE,SAAS,EAAE;;AAkCzE;AACM,SAAU,YAAY,CAAC,GAAa,EAAA;IACxC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,OAAO,EAAE,GAAG,CAAC,QAAQ;QACrB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,OAAO;QACnB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B;AACH;AAEM,SAAU,aAAa,CAAC,GAAc,EAAA;IAC1C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,UAAU,EAAE,GAAG,CAAC,WAAW;QAC3B,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B;AACH;;;;"}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pulse-feedback-widget",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Drop-in feedback widget for React apps. Collect bugs, features, questions, and praise from users.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.mjs",
|
|
7
|
+
"module": "dist/index.mjs",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"default": "./dist/index.mjs"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"sideEffects": [
|
|
21
|
+
"**/*.css",
|
|
22
|
+
"**/*.mjs"
|
|
23
|
+
],
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "rm -rf dist && rollup -c",
|
|
29
|
+
"prepublishOnly": "npm run build",
|
|
30
|
+
"typecheck": "tsc --noEmit"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
34
|
+
"react-dom": "^18.0.0 || ^19.0.0"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@supabase/supabase-js": "^2.49.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@rollup/plugin-commonjs": "^28.0.0",
|
|
41
|
+
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
42
|
+
"@rollup/plugin-typescript": "^12.0.0",
|
|
43
|
+
"@types/react": "^19.0.0",
|
|
44
|
+
"@types/react-dom": "^19.0.0",
|
|
45
|
+
"rollup": "^4.0.0",
|
|
46
|
+
"rollup-plugin-peer-deps-external": "^2.2.0",
|
|
47
|
+
"rollup-plugin-postcss": "^4.0.0",
|
|
48
|
+
"rollup-plugin-preserve-directives": "^0.4.0",
|
|
49
|
+
"tslib": "^2.6.0",
|
|
50
|
+
"typescript": "^5.5.0"
|
|
51
|
+
}
|
|
52
|
+
}
|