pulse-feedback-widget 1.3.2 → 3.0.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 -2
- package/dist/PulseWidget.d.ts.map +1 -1
- package/dist/PulseWidget.mjs +28 -15
- package/dist/PulseWidget.mjs.map +1 -1
- package/dist/components/ConversationView.d.ts +3 -1
- package/dist/components/ConversationView.d.ts.map +1 -1
- package/dist/components/ConversationView.mjs +4 -17
- package/dist/components/ConversationView.mjs.map +1 -1
- package/dist/components/FeedbackForm.d.ts +3 -1
- package/dist/components/FeedbackForm.d.ts.map +1 -1
- package/dist/components/FeedbackForm.mjs +7 -7
- package/dist/components/FeedbackForm.mjs.map +1 -1
- package/dist/components/FeedbackPanel.d.ts +9 -1
- package/dist/components/FeedbackPanel.d.ts.map +1 -1
- package/dist/components/FeedbackPanel.mjs +12 -5
- package/dist/components/FeedbackPanel.mjs.map +1 -1
- package/dist/components/FeedbackPanel.module.css.mjs +1 -1
- package/dist/components/ImagePicker.d.ts +4 -1
- package/dist/components/ImagePicker.d.ts.map +1 -1
- package/dist/components/ImagePicker.mjs +8 -2
- package/dist/components/ImagePicker.mjs.map +1 -1
- package/dist/components/ImagePicker.module.css.mjs +2 -2
- package/dist/components/ScreenshotEditor.d.ts +10 -0
- package/dist/components/ScreenshotEditor.d.ts.map +1 -0
- package/dist/components/ScreenshotEditor.mjs +146 -0
- package/dist/components/ScreenshotEditor.mjs.map +1 -0
- package/dist/components/ScreenshotEditor.module.css.mjs +8 -0
- package/dist/components/ScreenshotEditor.module.css.mjs.map +1 -0
- package/dist/components/SuccessState.d.ts +3 -1
- package/dist/components/SuccessState.d.ts.map +1 -1
- package/dist/components/SuccessState.mjs +2 -2
- package/dist/components/SuccessState.mjs.map +1 -1
- package/dist/components/ThreadList.d.ts +3 -1
- package/dist/components/ThreadList.d.ts.map +1 -1
- package/dist/components/ThreadList.mjs +5 -19
- package/dist/components/ThreadList.mjs.map +1 -1
- package/dist/components/TriggerButton.d.ts +6 -1
- package/dist/components/TriggerButton.d.ts.map +1 -1
- package/dist/components/TriggerButton.mjs +9 -2
- package/dist/components/TriggerButton.mjs.map +1 -1
- package/dist/components/TriggerButton.module.css.mjs +1 -1
- package/dist/components/TypeSelector.d.ts +3 -1
- package/dist/components/TypeSelector.d.ts.map +1 -1
- package/dist/components/TypeSelector.mjs +9 -2
- package/dist/components/TypeSelector.mjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/canvas-tools.d.ts +15 -0
- package/dist/lib/canvas-tools.d.ts.map +1 -0
- package/dist/lib/canvas-tools.mjs +64 -0
- package/dist/lib/canvas-tools.mjs.map +1 -0
- package/dist/lib/i18n.d.ts +40 -0
- package/dist/lib/i18n.d.ts.map +1 -0
- package/dist/lib/i18n.mjs +34 -0
- package/dist/lib/i18n.mjs.map +1 -0
- package/dist/locales/en.d.ts +4 -0
- package/dist/locales/en.d.ts.map +1 -0
- package/dist/locales/en.mjs +48 -0
- package/dist/locales/en.mjs.map +1 -0
- package/dist/locales/ko.d.ts +4 -0
- package/dist/locales/ko.d.ts.map +1 -0
- package/dist/locales/ko.mjs +48 -0
- package/dist/locales/ko.mjs.map +1 -0
- package/dist/pulse-widget.iife.js +56 -0
- package/dist/pulse-widget.iife.js.map +1 -0
- package/dist/standalone.d.ts +2 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/types.d.ts +18 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import en from '../locales/en.mjs';
|
|
2
|
+
import ko from '../locales/ko.mjs';
|
|
3
|
+
|
|
4
|
+
const LOCALE_MAP = { en, ko };
|
|
5
|
+
function createTranslations(locale) {
|
|
6
|
+
const resolvedLocale = locale || detectLocale();
|
|
7
|
+
return LOCALE_MAP[resolvedLocale] || en;
|
|
8
|
+
}
|
|
9
|
+
function detectLocale() {
|
|
10
|
+
if (typeof navigator === 'undefined')
|
|
11
|
+
return 'en';
|
|
12
|
+
const lang = navigator.language.split('-')[0];
|
|
13
|
+
if (lang === 'ko')
|
|
14
|
+
return 'ko';
|
|
15
|
+
return 'en';
|
|
16
|
+
}
|
|
17
|
+
function formatTimeAgo(dateStr, t) {
|
|
18
|
+
const diff = Date.now() - new Date(dateStr).getTime();
|
|
19
|
+
const mins = Math.floor(diff / 60000);
|
|
20
|
+
if (mins < 1)
|
|
21
|
+
return t.timeJustNow;
|
|
22
|
+
if (mins < 60)
|
|
23
|
+
return t.timeMinutesAgo.replace('{n}', String(mins));
|
|
24
|
+
const hours = Math.floor(mins / 60);
|
|
25
|
+
if (hours < 24)
|
|
26
|
+
return t.timeHoursAgo.replace('{n}', String(hours));
|
|
27
|
+
const days = Math.floor(hours / 24);
|
|
28
|
+
if (days < 30)
|
|
29
|
+
return t.timeDaysAgo.replace('{n}', String(days));
|
|
30
|
+
return new Date(dateStr).toLocaleDateString();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { createTranslations, formatTimeAgo };
|
|
34
|
+
//# sourceMappingURL=i18n.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.mjs","sources":["../../src/lib/i18n.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AA2DA,MAAM,UAAU,GAAiC,EAAE,EAAE,EAAE,EAAE,EAAE;AAErD,SAAU,kBAAkB,CAAC,MAAe,EAAA;AAChD,IAAA,MAAM,cAAc,GAAG,MAAM,IAAI,YAAY,EAAE;AAC/C,IAAA,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE;AACzC;AAEA,SAAS,YAAY,GAAA;IACnB,IAAI,OAAO,SAAS,KAAK,WAAW;AAAE,QAAA,OAAO,IAAI;AACjD,IAAA,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7C,IAAI,IAAI,KAAK,IAAI;AAAE,QAAA,OAAO,IAAI;AAC9B,IAAA,OAAO,IAAI;AACb;AAEM,SAAU,aAAa,CAAC,OAAe,EAAE,CAAe,EAAA;AAC5D,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;IACrC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC,WAAW;IAClC,IAAI,IAAI,GAAG,EAAE;AAAE,QAAA,OAAO,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;IACnC,IAAI,KAAK,GAAG,EAAE;AAAE,QAAA,OAAO,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;IACnC,IAAI,IAAI,GAAG,EAAE;AAAE,QAAA,OAAO,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,kBAAkB,EAAE;AAC/C;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,QAAA,MAAM,EAAE,EAAE,YAoDT,CAAC;AAEF,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const en = {
|
|
2
|
+
// Tabs
|
|
3
|
+
tabNew: 'New',
|
|
4
|
+
tabMyThreads: 'My Threads',
|
|
5
|
+
// FeedbackForm
|
|
6
|
+
labelType: 'Type',
|
|
7
|
+
labelMessage: 'Message',
|
|
8
|
+
labelName: 'Name (optional)',
|
|
9
|
+
labelEmail: 'Email (optional)',
|
|
10
|
+
placeholderName: 'Your name',
|
|
11
|
+
placeholderEmail: 'you@example.com',
|
|
12
|
+
emailError: 'Please enter a valid email',
|
|
13
|
+
submitError: "Couldn't send — please try again.",
|
|
14
|
+
btnUploading: 'Uploading...',
|
|
15
|
+
btnSending: 'Sending...',
|
|
16
|
+
btnSendFeedback: 'Send Feedback',
|
|
17
|
+
// TypeSelector
|
|
18
|
+
typeBug: 'Bug',
|
|
19
|
+
typeFeature: 'Feature',
|
|
20
|
+
typeQuestion: 'Question',
|
|
21
|
+
typePraise: 'Praise',
|
|
22
|
+
typeOther: 'Other',
|
|
23
|
+
// SuccessState
|
|
24
|
+
successTitle: 'Thanks for your feedback!',
|
|
25
|
+
successSubtitle: "We'll look into this.",
|
|
26
|
+
successSendAnother: 'Send another',
|
|
27
|
+
// ThreadList
|
|
28
|
+
threadListLoading: 'Loading...',
|
|
29
|
+
threadListEmpty: 'No feedback yet. Send your first one!',
|
|
30
|
+
// ConversationView
|
|
31
|
+
btnBack: 'Back',
|
|
32
|
+
replyPlaceholder: 'Type a reply...',
|
|
33
|
+
senderDeveloper: 'Developer',
|
|
34
|
+
senderYou: 'You',
|
|
35
|
+
// ImagePicker
|
|
36
|
+
attachImages: 'Attach images',
|
|
37
|
+
// ScreenshotEditor
|
|
38
|
+
editorDone: 'Done',
|
|
39
|
+
editorCancel: 'Cancel',
|
|
40
|
+
// Time
|
|
41
|
+
timeJustNow: 'just now',
|
|
42
|
+
timeMinutesAgo: '{n}m ago',
|
|
43
|
+
timeHoursAgo: '{n}h ago',
|
|
44
|
+
timeDaysAgo: '{n}d ago',
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export { en as default };
|
|
48
|
+
//# sourceMappingURL=en.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en.mjs","sources":["../../src/locales/en.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEA,MAAM,EAAE,GAAiB;;AAEvB,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,YAAY,EAAE,YAAY;;AAG1B,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,UAAU,EAAE,kBAAkB;AAC9B,IAAA,eAAe,EAAE,WAAW;AAC5B,IAAA,gBAAgB,EAAE,iBAAiB;AACnC,IAAA,UAAU,EAAE,4BAA4B;AACxC,IAAA,WAAW,EAAE,mCAAmC;AAChD,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,eAAe,EAAE,eAAe;;AAGhC,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,WAAW,EAAE,SAAS;AACtB,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,UAAU,EAAE,QAAQ;AACpB,IAAA,SAAS,EAAE,OAAO;;AAGlB,IAAA,YAAY,EAAE,2BAA2B;AACzC,IAAA,eAAe,EAAE,uBAAuB;AACxC,IAAA,kBAAkB,EAAE,cAAc;;AAGlC,IAAA,iBAAiB,EAAE,YAAY;AAC/B,IAAA,eAAe,EAAE,uCAAuC;;AAGxD,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,gBAAgB,EAAE,iBAAiB;AACnC,IAAA,eAAe,EAAE,WAAW;AAC5B,IAAA,SAAS,EAAE,KAAK;;AAGhB,IAAA,YAAY,EAAE,eAAe;;AAG7B,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,YAAY,EAAE,QAAQ;;AAGtB,IAAA,WAAW,EAAE,UAAU;AACvB,IAAA,cAAc,EAAE,UAAU;AAC1B,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,WAAW,EAAE,UAAU;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ko.d.ts","sourceRoot":"","sources":["../../src/locales/ko.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,QAAA,MAAM,EAAE,EAAE,YAoDT,CAAC;AAEF,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const ko = {
|
|
2
|
+
// Tabs
|
|
3
|
+
tabNew: '새 피드백',
|
|
4
|
+
tabMyThreads: '내 대화',
|
|
5
|
+
// FeedbackForm
|
|
6
|
+
labelType: '유형',
|
|
7
|
+
labelMessage: '메시지',
|
|
8
|
+
labelName: '이름 (선택)',
|
|
9
|
+
labelEmail: '이메일 (선택)',
|
|
10
|
+
placeholderName: '이름을 입력하세요',
|
|
11
|
+
placeholderEmail: 'you@example.com',
|
|
12
|
+
emailError: '올바른 이메일을 입력해주세요',
|
|
13
|
+
submitError: '전송에 실패했습니다. 다시 시도해주세요.',
|
|
14
|
+
btnUploading: '업로드 중...',
|
|
15
|
+
btnSending: '전송 중...',
|
|
16
|
+
btnSendFeedback: '피드백 보내기',
|
|
17
|
+
// TypeSelector
|
|
18
|
+
typeBug: '버그',
|
|
19
|
+
typeFeature: '기능 요청',
|
|
20
|
+
typeQuestion: '질문',
|
|
21
|
+
typePraise: '칭찬',
|
|
22
|
+
typeOther: '기타',
|
|
23
|
+
// SuccessState
|
|
24
|
+
successTitle: '피드백을 보내주셔서 감사합니다!',
|
|
25
|
+
successSubtitle: '확인 후 답변드리겠습니다.',
|
|
26
|
+
successSendAnother: '다른 피드백 보내기',
|
|
27
|
+
// ThreadList
|
|
28
|
+
threadListLoading: '로딩 중...',
|
|
29
|
+
threadListEmpty: '아직 피드백이 없습니다. 첫 번째 피드백을 보내보세요!',
|
|
30
|
+
// ConversationView
|
|
31
|
+
btnBack: '뒤로',
|
|
32
|
+
replyPlaceholder: '답글을 입력하세요...',
|
|
33
|
+
senderDeveloper: '개발자',
|
|
34
|
+
senderYou: '나',
|
|
35
|
+
// ImagePicker
|
|
36
|
+
attachImages: '이미지 첨부',
|
|
37
|
+
// ScreenshotEditor
|
|
38
|
+
editorDone: '완료',
|
|
39
|
+
editorCancel: '취소',
|
|
40
|
+
// Time
|
|
41
|
+
timeJustNow: '방금',
|
|
42
|
+
timeMinutesAgo: '{n}분 전',
|
|
43
|
+
timeHoursAgo: '{n}시간 전',
|
|
44
|
+
timeDaysAgo: '{n}일 전',
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export { ko as default };
|
|
48
|
+
//# sourceMappingURL=ko.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ko.mjs","sources":["../../src/locales/ko.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEA,MAAM,EAAE,GAAiB;;AAEvB,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,YAAY,EAAE,MAAM;;AAGpB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,SAAS,EAAE,SAAS;AACpB,IAAA,UAAU,EAAE,UAAU;AACtB,IAAA,eAAe,EAAE,WAAW;AAC5B,IAAA,gBAAgB,EAAE,iBAAiB;AACnC,IAAA,UAAU,EAAE,iBAAiB;AAC7B,IAAA,WAAW,EAAE,wBAAwB;AACrC,IAAA,YAAY,EAAE,UAAU;AACxB,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,eAAe,EAAE,SAAS;;AAG1B,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,SAAS,EAAE,IAAI;;AAGf,IAAA,YAAY,EAAE,mBAAmB;AACjC,IAAA,eAAe,EAAE,gBAAgB;AACjC,IAAA,kBAAkB,EAAE,YAAY;;AAGhC,IAAA,iBAAiB,EAAE,SAAS;AAC5B,IAAA,eAAe,EAAE,gCAAgC;;AAGjD,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,gBAAgB,EAAE,cAAc;AAChC,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,SAAS,EAAE,GAAG;;AAGd,IAAA,YAAY,EAAE,QAAQ;;AAGtB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,YAAY,EAAE,IAAI;;AAGlB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,cAAc,EAAE,QAAQ;AACxB,IAAA,YAAY,EAAE,SAAS;AACvB,IAAA,WAAW,EAAE,QAAQ;;;;;"}
|