@reqdesk/widget 0.1.0 → 0.2.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/{index-2oPxlN4_.d.cts → index-C4jNMODn.d.cts} +2 -2
- package/dist/{index-2oPxlN4_.d.cts.map → index-C4jNMODn.d.cts.map} +1 -1
- package/dist/{index-B8fhsCuv.d.ts → index-CgLsyyP9.d.ts} +2 -2
- package/dist/{index-B8fhsCuv.d.ts.map → index-CgLsyyP9.d.ts.map} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.iife.js +17 -1
- package/dist/index.js +1 -1
- package/dist/{react-D69QlAm1.d.ts → react-DYAKyC3I.d.ts} +2 -2
- package/dist/{react-D69QlAm1.d.ts.map → react-DYAKyC3I.d.ts.map} +1 -1
- package/dist/{react-8GCnIHnw.d.cts → react-PYPqwxcj.d.cts} +2 -2
- package/dist/{react-8GCnIHnw.d.cts.map → react-PYPqwxcj.d.cts.map} +1 -1
- package/dist/react.cjs +275 -36
- package/dist/react.d.cts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +275 -36
- package/dist/react.js.map +1 -1
- package/dist/{storage-Db9XjupR.cjs → storage-DqhhTxeh.cjs} +80 -3
- package/dist/{storage-CC5BCsxP.js → storage-PjDHb5v7.js} +70 -5
- package/dist/storage-PjDHb5v7.js.map +1 -0
- package/dist/{types-gPfzZQw5.d.ts → types-i3IgBEjw.d.cts} +2 -1
- package/dist/{types-CRxzGfna.d.cts.map → types-i3IgBEjw.d.cts.map} +1 -1
- package/dist/{types-CRxzGfna.d.cts → types-rPiXlS0A.d.ts} +2 -1
- package/dist/{types-gPfzZQw5.d.ts.map → types-rPiXlS0A.d.ts.map} +1 -1
- package/package.json +1 -1
- package/dist/storage-CC5BCsxP.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as ReqdeskWidgetConfig, c as TicketResult, d as WidgetEvent, n as EventCallback, s as ThemeConfig, t as CustomerConfig } from "./types-
|
|
1
|
+
import { a as ReqdeskWidgetConfig, c as TicketResult, d as WidgetEvent, n as EventCallback, s as ThemeConfig, t as CustomerConfig } from "./types-i3IgBEjw.cjs";
|
|
2
2
|
|
|
3
3
|
//#region src/index.d.ts
|
|
4
4
|
declare function init(cfg: ReqdeskWidgetConfig): void;
|
|
@@ -14,4 +14,4 @@ declare function destroy(): void;
|
|
|
14
14
|
|
|
15
15
|
//#endregion
|
|
16
16
|
export { type CustomerConfig, type EventCallback, type ReqdeskWidgetConfig, type ThemeConfig, type TicketResult, type WidgetEvent, close, destroy, identify, init, on, open, setLanguage, setTheme, toggle };
|
|
17
|
-
//# sourceMappingURL=index-
|
|
17
|
+
//# sourceMappingURL=index-C4jNMODn.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-C4jNMODn.d.cts","names":[],"sources":["../src/index.ts"],"mappings":";;;iBAyPgB,IAAA,MAAU;AAAV,iBAuDA,IAAA,CAAA,CAvDU,EAAA,IAAA;AAuDV,iBAQA,KAAA,CAAA,CARI,EAAA,IAAA;AAQJ,iBAWA,MAAA,CAAA,CAXK,EAAA,IAAA;AAWL,iBAKA,WAAA,CALM,IAAA,EAAA,MAAA,CAAA,EAAA,IAAA;AAKN,iBAkBA,QAAA,CAlBW,KAAA,EAkBK,OAlBL,CAkBa,WAlBb,CAAA,CAAA,EAAA,IAAA;AAkBX,iBASA,EAAA,CATQ,KAAA,EASE,WATF,EAAA,QAAA,EASyB,aATzB,CAAA,EAAA,IAAA;AAAA,iBAcR,QAAA,CAdQ,QAAA,EAcW,cAdX,CAAA,EAAA,IAAA;AAAgB,iBAkBxB,OAAA,CAAA,CAlBwB,EAAA,IAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as ReqdeskWidgetConfig, c as TicketResult, d as WidgetEvent, n as EventCallback, s as ThemeConfig, t as CustomerConfig } from "./types-
|
|
1
|
+
import { a as ReqdeskWidgetConfig, c as TicketResult, d as WidgetEvent, n as EventCallback, s as ThemeConfig, t as CustomerConfig } from "./types-rPiXlS0A.js";
|
|
2
2
|
|
|
3
3
|
//#region src/index.d.ts
|
|
4
4
|
declare function init(cfg: ReqdeskWidgetConfig): void;
|
|
@@ -14,4 +14,4 @@ declare function destroy(): void;
|
|
|
14
14
|
|
|
15
15
|
//#endregion
|
|
16
16
|
export { type CustomerConfig, type EventCallback, type ReqdeskWidgetConfig, type ThemeConfig, type TicketResult, type WidgetEvent, close, destroy, identify, init, on, open, setLanguage, setTheme, toggle };
|
|
17
|
-
//# sourceMappingURL=index-
|
|
17
|
+
//# sourceMappingURL=index-CgLsyyP9.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-CgLsyyP9.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;iBAyPgB,IAAA,MAAU;AAAV,iBAuDA,IAAA,CAAA,CAvDU,EAAA,IAAA;AAuDV,iBAQA,KAAA,CAAA,CARI,EAAA,IAAA;AAQJ,iBAWA,MAAA,CAAA,CAXK,EAAA,IAAA;AAWL,iBAKA,WAAA,CALM,IAAA,EAAA,MAAA,CAAA,EAAA,IAAA;AAKN,iBAkBA,QAAA,CAlBW,KAAA,EAkBK,OAlBL,CAkBa,WAlBb,CAAA,CAAA,EAAA,IAAA;AAkBX,iBASA,EAAA,CATQ,KAAA,EASE,WATF,EAAA,QAAA,EASyB,aATzB,CAAA,EAAA,IAAA;AAAA,iBAcR,QAAA,CAdQ,QAAA,EAcW,cAdX,CAAA,EAAA,IAAA;AAAgB,iBAkBxB,OAAA,CAAA,CAlBwB,EAAA,IAAA"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_storage = require("./storage-
|
|
2
|
+
const require_storage = require("./storage-DqhhTxeh.cjs");
|
|
3
3
|
//#region src/shadow-dom.ts
|
|
4
4
|
let shadowRoot = null;
|
|
5
5
|
let hostEl = null;
|
package/dist/index.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './index-
|
|
1
|
+
export * from './index-C4jNMODn.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './index-
|
|
1
|
+
export * from './index-CgLsyyP9.js';
|
package/dist/index.iife.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var ReqdeskWidget=(function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let n=``,r=``;function i(e,t){r=e.replace(/\/$/,``),n=t}let a=t.ofetch.create({timeout:15e3,retry:2,retryStatusCodes:[408,429,500,502,503,504],async onRequest({options:e}){e.baseURL=`${r}/api/v1`;let t=new Headers(e.headers);t.set(`X-API-Key`,n),e.headers=t},onResponseError({response:e}){let t=e._data;throw{code:t?.responseCode??`HTTP_${e.status}`,message:t?.responseMessage??e.statusText}}});function o(){return crypto.randomUUID()}async function s(e,t){let n=await a(`/projects/${e}/tickets`,{method:`POST`,body:{title:t.title,description:t.description,priority:t.priority,categoryId:t.categoryId,email:t.email},headers:{"Idempotency-Key":o()}});return{id:n.data.id,ticketNumber:n.data.attributes.ticketNumber,trackingToken:n.meta?.trackingToken,status:n.data.attributes.status}}async function c(e){let t=await a(`/tickets/track?token=${encodeURIComponent(e)}`),n=t.included??[];return{id:t.data.id,ticketNumber:t.data.attributes.ticketNumber,title:t.data.attributes.title,status:t.data.attributes.status,priority:t.data.attributes.priority,createdAt:t.data.attributes.createdAt,replies:n.filter(e=>e.type===`public-reply`).map(e=>({id:e.id,body:e.attributes.body,authorName:e.attributes.authorName,isStaff:e.attributes.isStaff,createdAt:e.attributes.createdAt}))}}async function l(e,t){await a(`/tickets/track/reply`,{method:`POST`,body:{trackingToken:e,body:t}})}let u={"widget.title":`Support`,"widget.newTicket":`New Ticket`,"widget.trackTicket":`Track Ticket`,"form.title":`Title`,"form.titlePlaceholder":`Brief summary of your issue`,"form.description":`Description`,"form.descriptionPlaceholder":`Describe your issue in detail...`,"form.email":`Email`,"form.emailPlaceholder":`your@email.com`,"form.priority":`Priority`,"form.priorityLow":`Low`,"form.priorityMedium":`Medium`,"form.priorityHigh":`High`,"form.priorityUrgent":`Urgent`,"form.category":`Category`,"form.categoryNone":`Select a category`,"form.submit":`Submit Ticket`,"form.submitting":`Submitting...`,"form.cancel":`Cancel`,"form.attachment":`Attach files`,"success.title":`Ticket Submitted!`,"success.ticketNumber":`Ticket #`,"success.trackingToken":`Your tracking token:`,"success.trackingHint":`Save this token to track your ticket status.`,"success.copyToken":`Copy Token`,"success.copied":`Copied!`,"success.close":`Close`,"success.trackNow":`Track Ticket`,"tracker.title":`Track Your Ticket`,"tracker.tokenPlaceholder":`Enter your tracking token (trk_...)`,"tracker.submit":`Track`,"tracker.tracking":`Tracking...`,"tracker.status":`Status`,"tracker.priority":`Priority`,"tracker.created":`Created`,"tracker.replies":`Replies`,"tracker.noReplies":`No replies yet.`,"tracker.replyPlaceholder":`Write a reply...`,"tracker.sendReply":`Send Reply`,"tracker.sending":`Sending...`,"tracker.back":`Back`,"tracker.staff":`Staff`,"error.generic":`Something went wrong. Please try again.`,"error.network":`Network error. Check your connection.`,"error.tokenInvalid":`Invalid or expired tracking token.`,"error.required":`This field is required.`,"error.emailInvalid":`Please enter a valid email address.`,"error.titleMin":`Title must be at least 5 characters.`,"portal.title":`Support Portal`,"portal.myTickets":`My Tickets`,"portal.noTickets":`No tickets yet.`,"portal.newTicket":`New Ticket`,"widget.close":`Close`,"menu.newTicket":`Submit a Ticket`,"menu.newTicketDesc":`Create a new support request`,"menu.myTickets":`My Tickets`,"menu.myTicketsDesc":`View and manage your tickets`,"menu.trackTicket":`Track a Ticket`,"menu.trackTicketDesc":`Check status with your tracking token`,"menu.knowledgeBase":`Knowledge Base`,"menu.knowledgeBaseDesc":`Browse help articles and guides`,"menu.myTicketsPlaceholder":`Sign in to view your tickets.`,"menu.trackPlaceholder":`Ticket tracking is coming soon.`,"menu.kbPlaceholder":`Knowledge base is coming soon.`,"menu.preferences":`Preferences`,"menu.preferencesDesc":`Language and appearance settings`,"prefs.title":`Preferences`,"prefs.language":`Language`,"prefs.theme":`Theme`,"prefs.light":`Light`,"prefs.dark":`Dark`,"prefs.auto":`System`,"branding.poweredBy":`Powered by`,"attach.dropzone":`Drop files here or click to browse`,"attach.dropzoneActive":`Drop files here`,"attach.maxFiles":`Maximum {max} files`,"attach.remove":`Remove`,"attach.uploading":`Uploading files...`,"attach.uploadProgress":`Uploading {name}... {percent}%`,"attach.invalidType":`File type not allowed`,"attach.tooLarge":`File exceeds maximum size`,"attach.tooMany":`Maximum number of files reached`,"attach.download":`Download`,"mytickets.title":`My Tickets`,"mytickets.emailPrompt":`Enter your email to view your tickets`,"mytickets.emailPlaceholder":`your@email.com`,"mytickets.rememberMe":`Remember me`,"mytickets.lookup":`Find My Tickets`,"mytickets.lookingUp":`Looking up...`,"mytickets.noTickets":`No tickets yet.`,"mytickets.submitFirst":`Submit your first ticket`,"mytickets.noAccount":`No tickets found for this email.`,"detail.description":`Description`,"detail.attachments":`Attachments`,"detail.noAttachments":`No attachments`,"detail.replies":`Conversation`,"detail.noReplies":`No replies yet.`,"detail.replyPlaceholder":`Write a reply...`,"detail.sendReply":`Send`,"detail.sending":`Sending...`,"detail.staff":`Staff`,"detail.you":`You`,"detail.loading":`Loading ticket...`,"track.title":`Track a Ticket`,"track.tokenPlaceholder":`Enter tracking token (trk_...)`,"track.submit":`Track`,"track.tracking":`Tracking...`,"track.recentTickets":`Recent Tickets`,"track.invalidToken":`Invalid or expired tracking token.`,"prefs.clearEmail":`Clear saved email`,"prefs.emailCleared":`Email cleared`,"auth.login":`Login`,"auth.logout":`Logout`,"auth.sessionExpired":`Session expired. Please log in again.`,"prefs.accentColor":`Accent Color`},d={"widget.title":`الدعم`,"widget.newTicket":`تذكرة جديدة`,"widget.trackTicket":`تتبع التذكرة`,"form.title":`العنوان`,"form.titlePlaceholder":`ملخص موجز لمشكلتك`,"form.description":`الوصف`,"form.descriptionPlaceholder":`صف مشكلتك بالتفصيل...`,"form.email":`البريد الإلكتروني`,"form.emailPlaceholder":`your@email.com`,"form.priority":`الأولوية`,"form.priorityLow":`منخفضة`,"form.priorityMedium":`متوسطة`,"form.priorityHigh":`عالية`,"form.priorityUrgent":`عاجلة`,"form.category":`الفئة`,"form.categoryNone":`اختر فئة`,"form.submit":`إرسال التذكرة`,"form.submitting":`جارِ الإرسال...`,"form.cancel":`إلغاء`,"form.attachment":`إرفاق ملفات`,"success.title":`تم إرسال التذكرة!`,"success.ticketNumber":`تذكرة #`,"success.trackingToken":`رمز التتبع الخاص بك:`,"success.trackingHint":`احفظ هذا الرمز لتتبع حالة تذكرتك.`,"success.copyToken":`نسخ الرمز`,"success.copied":`تم النسخ!`,"success.close":`إغلاق`,"success.trackNow":`تتبع التذكرة`,"tracker.title":`تتبع تذكرتك`,"tracker.tokenPlaceholder":`أدخل رمز التتبع الخاص بك (trk_...)`,"tracker.submit":`تتبع`,"tracker.tracking":`جارِ التتبع...`,"tracker.status":`الحالة`,"tracker.priority":`الأولوية`,"tracker.created":`تاريخ الإنشاء`,"tracker.replies":`الردود`,"tracker.noReplies":`لا توجد ردود بعد.`,"tracker.replyPlaceholder":`اكتب رداً...`,"tracker.sendReply":`إرسال الرد`,"tracker.sending":`جارِ الإرسال...`,"tracker.back":`رجوع`,"tracker.staff":`فريق الدعم`,"error.generic":`حدث خطأ ما. يرجى المحاولة مرة أخرى.`,"error.network":`خطأ في الشبكة. تحقق من اتصالك.`,"error.tokenInvalid":`رمز التتبع غير صالح أو منتهي الصلاحية.`,"error.required":`هذا الحقل مطلوب.`,"error.emailInvalid":`يرجى إدخال بريد إلكتروني صالح.`,"error.titleMin":`يجب أن يكون العنوان 5 أحرف على الأقل.`,"portal.title":`بوابة الدعم`,"portal.myTickets":`تذاكري`,"portal.noTickets":`لا توجد تذاكر بعد.`,"portal.newTicket":`تذكرة جديدة`,"widget.close":`إغلاق`,"menu.newTicket":`إرسال تذكرة`,"menu.newTicketDesc":`إنشاء طلب ��عم جديد`,"menu.myTickets":`تذاكري`,"menu.myTicketsDesc":`عرض وإدارة تذاكرك`,"menu.trackTicket":`تتبع تذكرة`,"menu.trackTicketDesc":`تحقق من الحالة باستخدام رمز التتبع`,"menu.knowledgeBase":`قاعدة المعرفة`,"menu.knowledgeBaseDesc":`تصفح مقالات المساعدة والأدلة`,"menu.myTicketsPlaceholder":`سجّل الدخول ��عرض تذاكرك.`,"menu.trackPlaceholder":`تتبع التذاكر قريبًا.`,"menu.kbPlaceholder":`قاعدة المعرفة قريبًا.`,"menu.preferences":`التفضيلات`,"menu.preferencesDesc":`إعدادات اللغة والمظهر`,"prefs.title":`التفضيلات`,"prefs.language":`اللغة`,"prefs.theme":`المظهر`,"prefs.light":`فاتح`,"prefs.dark":`داكن`,"prefs.auto":`النظام`,"branding.poweredBy":`مدعوم من`,"attach.dropzone":`اسحب الملفات هنا أو انقر للتصفح`,"attach.dropzoneActive":`أفلت الملفات هنا`,"attach.maxFiles":`بحد أقصى {max} ملفات`,"attach.remove":`إزالة`,"attach.uploading":`جارِ رفع الملفات...`,"attach.uploadProgress":`جارِ رفع {name}... {percent}%`,"attach.invalidType":`نوع الملف غير مسموح`,"attach.tooLarge":`حجم الملف يتجاوز الحد الأقصى`,"attach.tooMany":`تم الوصول للحد الأقصى لعدد الملفات`,"attach.download":`تحميل`,"mytickets.title":`تذاكري`,"mytickets.emailPrompt":`أدخل بريدك الإلكتروني لعرض تذاكرك`,"mytickets.emailPlaceholder":`your@email.com`,"mytickets.rememberMe":`تذكرني`,"mytickets.lookup":`البحث عن تذاكري`,"mytickets.lookingUp":`جارِ البحث...`,"mytickets.noTickets":`لا توجد تذاكر بعد.`,"mytickets.submitFirst":`أرسل تذكرتك الأولى`,"mytickets.noAccount":`لم يتم العثور على تذاكر لهذا البريد.`,"detail.description":`الوصف`,"detail.attachments":`المرفقات`,"detail.noAttachments":`لا توجد مرفقات`,"detail.replies":`المحادثة`,"detail.noReplies":`لا توجد ردود بعد.`,"detail.replyPlaceholder":`اكتب رداً...`,"detail.sendReply":`إرسال`,"detail.sending":`جارِ الإرسال...`,"detail.staff":`فريق الدعم`,"detail.you":`أنت`,"detail.loading":`جارِ تحميل التذكرة...`,"track.title":`تتبع تذكرة`,"track.tokenPlaceholder":`أدخل رمز التتبع (trk_...)`,"track.submit":`تتبع`,"track.tracking":`جارِ التتبع...`,"track.recentTickets":`التذاكر الأخيرة`,"track.invalidToken":`رمز التتبع غير صالح أو منتهي.`,"prefs.clearEmail":`مسح البريد المحفوظ`,"prefs.emailCleared":`تم مسح البريد`,"auth.login":`تسجيل الدخول`,"auth.logout":`تسجيل الخروج`,"auth.sessionExpired":`انتهت الجلسة. يرجى تسجيل الدخول مرة أخرى.`,"prefs.accentColor":`لون التمييز`},f={primaryColor:`#42b983`,mode:`light`,borderRadius:`8px`,fontFamily:`inherit`,zIndex:9999};function p(e){return e===`auto`?typeof window<`u`&&window.matchMedia?.(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e??`light`}function m(e={}){let t={...f,...e,mode:p(e.mode??f.mode)},n=h(t.primaryColor),r=Math.min(n.l+30,95),i=Math.max(n.l-15,10);return[`--rqd-primary: ${t.primaryColor}`,`--rqd-primary-h: ${n.h}`,`--rqd-primary-s: ${n.s}%`,`--rqd-primary-l: ${n.l}%`,`--rqd-primary-light: hsl(${n.h}, ${n.s}%, ${r}%)`,`--rqd-primary-dark: hsl(${n.h}, ${n.s}%, ${i}%)`,`--rqd-radius: ${t.borderRadius}`,`--rqd-font: ${t.fontFamily}`,`--rqd-z: ${t.zIndex}`,`--rqd-bg: ${t.mode===`dark`?`#1a1a2e`:`#ffffff`}`,`--rqd-bg-secondary: ${t.mode===`dark`?`#16213e`:`#f8f9fa`}`,`--rqd-text: ${t.mode===`dark`?`#e0e0e0`:`#1a1a2e`}`,`--rqd-text-secondary: ${t.mode===`dark`?`#a0a0b0`:`#6c757d`}`,`--rqd-border: ${t.mode===`dark`?`#2a2a4a`:`#e0e0e0`}`,`--rqd-input-bg: ${t.mode===`dark`?`#0f3460`:`#ffffff`}`,`--rqd-shadow: ${t.mode===`dark`?`0 8px 32px rgba(0,0,0,0.4)`:`0 8px 32px rgba(0,0,0,0.12)`}`].join(`; `)}function h(e){let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(!t)return{h:160,s:51,l:49};let n=parseInt(t[1],16)/255,r=parseInt(t[2],16)/255,i=parseInt(t[3],16)/255,a=Math.max(n,r,i),o=Math.min(n,r,i),s=0,c=0,l=(a+o)/2;if(a!==o){let e=a-o;c=l>.5?e/(2-a-o):e/(a+o),s=a===n?((r-i)/e+(r<i?6:0))/6:a===r?((i-n)/e+2)/6:((n-r)/e+4)/6}return{h:Math.round(s*360),s:Math.round(c*100),l:Math.round(l*100)}}function ee(){return te}let te=`:host { all: initial; }
|
|
1
|
+
var ReqdeskWidget=(function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let n=``,r=``;function i(e,t){r=e.replace(/\/$/,``),n=t}let a=t.ofetch.create({timeout:15e3,retry:2,retryStatusCodes:[408,429,500,502,503,504],async onRequest({options:e}){e.baseURL=`${r}/api/v1`;let t=new Headers(e.headers);t.set(`X-API-Key`,n),e.headers=t},onResponseError({response:e}){let t=e._data;throw{code:t?.responseCode??`HTTP_${e.status}`,message:t?.responseMessage??e.statusText}}});function o(){return crypto.randomUUID()}async function s(e,t){let n=await a(`/projects/${e}/tickets`,{method:`POST`,body:{title:t.title,description:t.description,priority:t.priority,categoryId:t.categoryId,email:t.email,clientMetadata:t.clientMetadata},headers:{"Idempotency-Key":o()}});return{id:n.data.id,ticketNumber:n.data.attributes.ticketNumber,trackingToken:n.meta?.trackingToken,status:n.data.attributes.status}}async function c(e){let t=await a(`/tickets/track?token=${encodeURIComponent(e)}`),n=t.included??[];return{id:t.data.id,ticketNumber:t.data.attributes.ticketNumber,title:t.data.attributes.title,status:t.data.attributes.status,priority:t.data.attributes.priority,createdAt:t.data.attributes.createdAt,replies:n.filter(e=>e.type===`public-reply`).map(e=>({id:e.id,body:e.attributes.body,authorName:e.attributes.authorName,isStaff:e.attributes.isStaff,createdAt:e.attributes.createdAt}))}}async function l(e,t){await a(`/tickets/track/reply`,{method:`POST`,body:{trackingToken:e,body:t}})}let u={"widget.title":`Support`,"widget.newTicket":`New Ticket`,"widget.trackTicket":`Track Ticket`,"form.title":`Title`,"form.titlePlaceholder":`Brief summary of your issue`,"form.description":`Description`,"form.descriptionPlaceholder":`Describe your issue in detail...`,"form.email":`Email`,"form.emailPlaceholder":`your@email.com`,"form.priority":`Priority`,"form.priorityLow":`Low`,"form.priorityMedium":`Medium`,"form.priorityHigh":`High`,"form.priorityUrgent":`Urgent`,"form.category":`Category`,"form.categoryNone":`Select a category`,"form.submit":`Submit Ticket`,"form.submitting":`Submitting...`,"form.cancel":`Cancel`,"form.attachment":`Attach files`,"success.title":`Ticket Submitted!`,"success.ticketNumber":`Ticket #`,"success.trackingToken":`Your tracking token:`,"success.trackingHint":`Save this token to track your ticket status.`,"success.copyToken":`Copy Token`,"success.copied":`Copied!`,"success.close":`Close`,"success.trackNow":`Track Ticket`,"tracker.title":`Track Your Ticket`,"tracker.tokenPlaceholder":`Enter your tracking token (trk_...)`,"tracker.submit":`Track`,"tracker.tracking":`Tracking...`,"tracker.status":`Status`,"tracker.priority":`Priority`,"tracker.created":`Created`,"tracker.replies":`Replies`,"tracker.noReplies":`No replies yet.`,"tracker.replyPlaceholder":`Write a reply...`,"tracker.sendReply":`Send Reply`,"tracker.sending":`Sending...`,"tracker.back":`Back`,"tracker.staff":`Staff`,"error.generic":`Something went wrong. Please try again.`,"error.network":`Network error. Check your connection.`,"error.tokenInvalid":`Invalid or expired tracking token.`,"error.required":`This field is required.`,"error.emailInvalid":`Please enter a valid email address.`,"error.titleMin":`Title must be at least 5 characters.`,"portal.title":`Support Portal`,"portal.myTickets":`My Tickets`,"portal.noTickets":`No tickets yet.`,"portal.newTicket":`New Ticket`,"widget.close":`Close`,"menu.newTicket":`Submit a Ticket`,"menu.newTicketDesc":`Create a new support request`,"menu.myTickets":`My Tickets`,"menu.myTicketsDesc":`View and manage your tickets`,"menu.trackTicket":`Track a Ticket`,"menu.trackTicketDesc":`Check status with your tracking token`,"menu.knowledgeBase":`Knowledge Base`,"menu.knowledgeBaseDesc":`Browse help articles and guides`,"menu.myTicketsPlaceholder":`Sign in to view your tickets.`,"menu.trackPlaceholder":`Ticket tracking is coming soon.`,"menu.kbPlaceholder":`Knowledge base is coming soon.`,"menu.preferences":`Preferences`,"menu.preferencesDesc":`Language and appearance settings`,"prefs.title":`Preferences`,"prefs.language":`Language`,"prefs.theme":`Theme`,"prefs.light":`Light`,"prefs.dark":`Dark`,"prefs.auto":`System`,"branding.poweredBy":`Powered by`,"attach.dropzone":`Drop files here or click to browse`,"attach.dropzoneActive":`Drop files here`,"attach.maxFiles":`Maximum {max} files`,"attach.remove":`Remove`,"attach.uploading":`Uploading files...`,"attach.uploadProgress":`Uploading {name}... {percent}%`,"attach.invalidType":`File type not allowed`,"attach.tooLarge":`File exceeds maximum size`,"attach.tooMany":`Maximum number of files reached`,"attach.download":`Download`,"mytickets.title":`My Tickets`,"mytickets.emailPrompt":`Enter your email to view your tickets`,"mytickets.emailPlaceholder":`your@email.com`,"mytickets.rememberMe":`Remember me`,"mytickets.lookup":`Find My Tickets`,"mytickets.lookingUp":`Looking up...`,"mytickets.noTickets":`No tickets yet.`,"mytickets.submitFirst":`Submit your first ticket`,"mytickets.noAccount":`No tickets found for this email.`,"detail.description":`Description`,"detail.attachments":`Attachments`,"detail.noAttachments":`No attachments`,"detail.replies":`Conversation`,"detail.noReplies":`No replies yet.`,"detail.replyPlaceholder":`Write a reply...`,"detail.sendReply":`Send`,"detail.sending":`Sending...`,"detail.staff":`Staff`,"detail.you":`You`,"detail.loading":`Loading ticket...`,"track.title":`Track a Ticket`,"track.tokenPlaceholder":`Enter tracking token (trk_...)`,"track.submit":`Track`,"track.tracking":`Tracking...`,"track.recentTickets":`Recent Tickets`,"track.invalidToken":`Invalid or expired tracking token.`,"prefs.clearEmail":`Clear saved email`,"prefs.emailCleared":`Email cleared`,"auth.login":`Login`,"auth.logout":`Logout`,"auth.sessionExpired":`Session expired. Please log in again.`,"prefs.accentColor":`Accent Color`,"form.categoryPlaceholder":`Select a category`,"form.categoryBack":`Back`,"form.categorySelected":`Category`,"diag.title":`Share diagnostic info`,"diag.hint":`Help us resolve your issue faster`,"diag.screenResolution":`Screen resolution`,"diag.deviceType":`Device type`,"diag.timezone":`Timezone`,"diag.referrerUrl":`Referrer URL`,"diag.language":`Browser language`,"diag.platform":`Platform`,"detail.resolve":`Mark as Resolved`,"detail.resolving":`Resolving...`,"detail.resolved":`Resolved`,"detail.sla":`SLA`},d={"widget.title":`الدعم`,"widget.newTicket":`تذكرة جديدة`,"widget.trackTicket":`تتبع التذكرة`,"form.title":`العنوان`,"form.titlePlaceholder":`ملخص موجز لمشكلتك`,"form.description":`الوصف`,"form.descriptionPlaceholder":`صف مشكلتك بالتفصيل...`,"form.email":`البريد الإلكتروني`,"form.emailPlaceholder":`your@email.com`,"form.priority":`الأولوية`,"form.priorityLow":`منخفضة`,"form.priorityMedium":`متوسطة`,"form.priorityHigh":`عالية`,"form.priorityUrgent":`عاجلة`,"form.category":`الفئة`,"form.categoryNone":`اختر فئة`,"form.submit":`إرسال التذكرة`,"form.submitting":`جارِ الإرسال...`,"form.cancel":`إلغاء`,"form.attachment":`إرفاق ملفات`,"success.title":`تم إرسال التذكرة!`,"success.ticketNumber":`تذكرة #`,"success.trackingToken":`رمز التتبع الخاص بك:`,"success.trackingHint":`احفظ هذا الرمز لتتبع حالة تذكرتك.`,"success.copyToken":`نسخ الرمز`,"success.copied":`تم النسخ!`,"success.close":`إغلاق`,"success.trackNow":`تتبع التذكرة`,"tracker.title":`تتبع تذكرتك`,"tracker.tokenPlaceholder":`أدخل رمز التتبع الخاص بك (trk_...)`,"tracker.submit":`تتبع`,"tracker.tracking":`جارِ التتبع...`,"tracker.status":`الحالة`,"tracker.priority":`الأولوية`,"tracker.created":`تاريخ الإنشاء`,"tracker.replies":`الردود`,"tracker.noReplies":`لا توجد ردود بعد.`,"tracker.replyPlaceholder":`اكتب رداً...`,"tracker.sendReply":`إرسال الرد`,"tracker.sending":`جارِ الإرسال...`,"tracker.back":`رجوع`,"tracker.staff":`فريق الدعم`,"error.generic":`حدث خطأ ما. يرجى المحاولة مرة أخرى.`,"error.network":`خطأ في الشبكة. تحقق من اتصالك.`,"error.tokenInvalid":`رمز التتبع غير صالح أو منتهي الصلاحية.`,"error.required":`هذا الحقل مطلوب.`,"error.emailInvalid":`يرجى إدخال بريد إلكتروني صالح.`,"error.titleMin":`يجب أن يكون العنوان 5 أحرف على الأقل.`,"portal.title":`بوابة الدعم`,"portal.myTickets":`تذاكري`,"portal.noTickets":`لا توجد تذاكر بعد.`,"portal.newTicket":`تذكرة جديدة`,"widget.close":`إغلاق`,"menu.newTicket":`إرسال تذكرة`,"menu.newTicketDesc":`إنشاء طلب ��عم جديد`,"menu.myTickets":`تذاكري`,"menu.myTicketsDesc":`عرض وإدارة تذاكرك`,"menu.trackTicket":`تتبع تذكرة`,"menu.trackTicketDesc":`تحقق من الحالة باستخدام رمز التتبع`,"menu.knowledgeBase":`قاعدة المعرفة`,"menu.knowledgeBaseDesc":`تصفح مقالات المساعدة والأدلة`,"menu.myTicketsPlaceholder":`سجّل الدخول ��عرض تذاكرك.`,"menu.trackPlaceholder":`تتبع التذاكر قريبًا.`,"menu.kbPlaceholder":`قاعدة المعرفة قريبًا.`,"menu.preferences":`التفضيلات`,"menu.preferencesDesc":`إعدادات اللغة والمظهر`,"prefs.title":`التفضيلات`,"prefs.language":`اللغة`,"prefs.theme":`المظهر`,"prefs.light":`فاتح`,"prefs.dark":`داكن`,"prefs.auto":`النظام`,"branding.poweredBy":`مدعوم من`,"attach.dropzone":`اسحب الملفات هنا أو انقر للتصفح`,"attach.dropzoneActive":`أفلت الملفات هنا`,"attach.maxFiles":`بحد أقصى {max} ملفات`,"attach.remove":`إزالة`,"attach.uploading":`جارِ رفع الملفات...`,"attach.uploadProgress":`جارِ رفع {name}... {percent}%`,"attach.invalidType":`نوع الملف غير مسموح`,"attach.tooLarge":`حجم الملف يتجاوز الحد الأقصى`,"attach.tooMany":`تم الوصول للحد الأقصى لعدد الملفات`,"attach.download":`تحميل`,"mytickets.title":`تذاكري`,"mytickets.emailPrompt":`أدخل بريدك الإلكتروني لعرض تذاكرك`,"mytickets.emailPlaceholder":`your@email.com`,"mytickets.rememberMe":`تذكرني`,"mytickets.lookup":`البحث عن تذاكري`,"mytickets.lookingUp":`جارِ البحث...`,"mytickets.noTickets":`لا توجد تذاكر بعد.`,"mytickets.submitFirst":`أرسل تذكرتك الأولى`,"mytickets.noAccount":`لم يتم العثور على تذاكر لهذا البريد.`,"detail.description":`الوصف`,"detail.attachments":`المرفقات`,"detail.noAttachments":`لا توجد مرفقات`,"detail.replies":`المحادثة`,"detail.noReplies":`لا توجد ردود بعد.`,"detail.replyPlaceholder":`اكتب رداً...`,"detail.sendReply":`إرسال`,"detail.sending":`جارِ الإرسال...`,"detail.staff":`فريق الدعم`,"detail.you":`أنت`,"detail.loading":`جارِ تحميل التذكرة...`,"track.title":`تتبع تذكرة`,"track.tokenPlaceholder":`أدخل رمز التتبع (trk_...)`,"track.submit":`تتبع`,"track.tracking":`جارِ التتبع...`,"track.recentTickets":`التذاكر الأخيرة`,"track.invalidToken":`رمز التتبع غير صالح أو منتهي.`,"prefs.clearEmail":`مسح البريد المحفوظ`,"prefs.emailCleared":`تم مسح البريد`,"auth.login":`تسجيل الدخول`,"auth.logout":`تسجيل الخروج`,"auth.sessionExpired":`انتهت الجلسة. يرجى تسجيل الدخول مرة أخرى.`,"prefs.accentColor":`لون التمييز`,"form.categoryPlaceholder":`اختر فئة`,"form.categoryBack":`رجوع`,"form.categorySelected":`الفئة`,"diag.title":`مشاركة معلومات التشخيص`,"diag.hint":`ساعدنا في حل مشكلتك بشكل أسرع`,"diag.screenResolution":`دقة الشاشة`,"diag.deviceType":`نوع الجهاز`,"diag.timezone":`المنطقة الزمنية`,"diag.referrerUrl":`رابط المصدر`,"diag.language":`لغة المتصفح`,"diag.platform":`المنصة`,"detail.resolve":`تحديد كمحلول`,"detail.resolving":`جارِ الحل...`,"detail.resolved":`محلول`,"detail.sla":`اتفاقية الخدمة`},f={primaryColor:`#42b983`,mode:`light`,borderRadius:`8px`,fontFamily:`inherit`,zIndex:9999};function p(e){return e===`auto`?typeof window<`u`&&window.matchMedia?.(`(prefers-color-scheme: dark)`).matches?`dark`:`light`:e??`light`}function m(e={}){let t={...f,...e,mode:p(e.mode??f.mode)},n=h(t.primaryColor),r=Math.min(n.l+30,95),i=Math.max(n.l-15,10);return[`--rqd-primary: ${t.primaryColor}`,`--rqd-primary-h: ${n.h}`,`--rqd-primary-s: ${n.s}%`,`--rqd-primary-l: ${n.l}%`,`--rqd-primary-light: hsl(${n.h}, ${n.s}%, ${r}%)`,`--rqd-primary-dark: hsl(${n.h}, ${n.s}%, ${i}%)`,`--rqd-radius: ${t.borderRadius}`,`--rqd-font: ${t.fontFamily}`,`--rqd-z: ${t.zIndex}`,`--rqd-bg: ${t.mode===`dark`?`#1a1a2e`:`#ffffff`}`,`--rqd-bg-secondary: ${t.mode===`dark`?`#16213e`:`#f8f9fa`}`,`--rqd-text: ${t.mode===`dark`?`#e0e0e0`:`#1a1a2e`}`,`--rqd-text-secondary: ${t.mode===`dark`?`#a0a0b0`:`#6c757d`}`,`--rqd-border: ${t.mode===`dark`?`#2a2a4a`:`#e0e0e0`}`,`--rqd-input-bg: ${t.mode===`dark`?`#0f3460`:`#ffffff`}`,`--rqd-shadow: ${t.mode===`dark`?`0 8px 32px rgba(0,0,0,0.4)`:`0 8px 32px rgba(0,0,0,0.12)`}`].join(`; `)}function h(e){let t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);if(!t)return{h:160,s:51,l:49};let n=parseInt(t[1],16)/255,r=parseInt(t[2],16)/255,i=parseInt(t[3],16)/255,a=Math.max(n,r,i),o=Math.min(n,r,i),s=0,c=0,l=(a+o)/2;if(a!==o){let e=a-o;c=l>.5?e/(2-a-o):e/(a+o),s=a===n?((r-i)/e+(r<i?6:0))/6:a===r?((i-n)/e+2)/6:((n-r)/e+4)/6}return{h:Math.round(s*360),s:Math.round(c*100),l:Math.round(l*100)}}function ee(){return te}let te=`:host { all: initial; }
|
|
2
2
|
.rqd-root { font-family: var(--rqd-font, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif); font-size: 14px; line-height: 1.5; color: var(--rqd-text); -webkit-font-smoothing: antialiased; }
|
|
3
3
|
.rqd-fab { position: fixed; bottom: 20px; width: 56px; height: 56px; border-radius: 50%; background: var(--rqd-primary); color: #fff; border: none; cursor: pointer; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 16px rgba(0,0,0,0.2); transition: transform 0.2s, box-shadow 0.2s; pointer-events: auto; z-index: var(--rqd-z, 9999); }
|
|
4
4
|
.rqd-fab:hover { transform: scale(1.08); box-shadow: 0 6px 20px rgba(0,0,0,0.25); }
|
|
@@ -105,6 +105,22 @@ var ReqdeskWidget=(function(e,t){Object.defineProperty(e,Symbol.toStringTag,{val
|
|
|
105
105
|
.rqd-ticket-list { display: flex; flex-direction: column; gap: 6px; }
|
|
106
106
|
.rqd-loading { text-align: center; padding: 24px 0; color: var(--rqd-text-secondary); font-size: 14px; }
|
|
107
107
|
.rqd-reply-compose { margin-top: 12px; display: flex; flex-direction: column; gap: 8px; }
|
|
108
|
+
.rqd-category-list { display: flex; flex-direction: column; gap: 4px; margin-bottom: 14px; }
|
|
109
|
+
.rqd-category-item { display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: var(--rqd-bg-secondary); border: 1px solid transparent; border-radius: calc(var(--rqd-radius, 8px) / 2); cursor: pointer; font-size: 14px; font-family: inherit; color: var(--rqd-text); transition: border-color 0.15s, background 0.15s; text-align: start; width: 100%; }
|
|
110
|
+
.rqd-category-item:hover { border-color: var(--rqd-primary); }
|
|
111
|
+
.rqd-category-item-chevron { color: var(--rqd-text-secondary); font-size: 16px; }
|
|
112
|
+
.rqd-category-breadcrumb { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; margin-bottom: 8px; font-size: 12px; color: var(--rqd-text-secondary); }
|
|
113
|
+
.rqd-category-breadcrumb button { background: none; border: none; color: var(--rqd-primary); cursor: pointer; font-size: 12px; font-family: inherit; padding: 0; }
|
|
114
|
+
.rqd-category-breadcrumb button:hover { text-decoration: underline; }
|
|
115
|
+
.rqd-category-breadcrumb-sep { color: var(--rqd-text-secondary); }
|
|
116
|
+
.rqd-category-selected { display: flex; align-items: center; gap: 8px; padding: 8px 12px; background: var(--rqd-primary-light); border-radius: calc(var(--rqd-radius, 8px) / 2); font-size: 13px; color: var(--rqd-primary-dark); margin-bottom: 14px; }
|
|
117
|
+
.rqd-category-selected button { background: none; border: none; color: var(--rqd-primary-dark); cursor: pointer; font-size: 14px; margin-left: auto; padding: 0; }
|
|
118
|
+
.rqd-diag-toggle { display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; background: var(--rqd-bg-secondary); border-radius: calc(var(--rqd-radius, 8px) / 2); cursor: pointer; font-size: 13px; color: var(--rqd-text-secondary); border: none; width: 100%; font-family: inherit; text-align: start; margin-bottom: 8px; }
|
|
119
|
+
.rqd-diag-toggle:hover { color: var(--rqd-text); }
|
|
120
|
+
.rqd-diag-panel { display: flex; flex-direction: column; gap: 6px; padding: 8px 0; }
|
|
121
|
+
.rqd-diag-item { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--rqd-text-secondary); }
|
|
122
|
+
.rqd-diag-item input[type="checkbox"] { accent-color: var(--rqd-primary); width: 14px; height: 14px; }
|
|
123
|
+
.rqd-diag-item-value { color: var(--rqd-text); font-family: monospace; font-size: 11px; margin-left: auto; max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
108
124
|
.rqd-auth-btn { background: rgba(255,255,255,0.2); border: 1px solid rgba(255,255,255,0.4); color: #fff; cursor: pointer; padding: 4px 12px; border-radius: 12px; font-size: 12px; font-weight: 500; font-family: inherit; transition: background 0.15s; white-space: nowrap; }
|
|
109
125
|
.rqd-auth-btn:hover { background: rgba(255,255,255,0.3); }
|
|
110
126
|
.rqd-color-presets { display: flex; gap: 8px; flex-wrap: wrap; }
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { S as configureWidgetClient, a as saveTrackingToken, b as trackTicket, c as getWidgetStyles, d as en, l as themeToVars, n as getTrackingTokens, o as saveWidgetConfig, r as loadWidgetConfig, u as ar, v as submitTicket, y as submitTrackingReply } from "./storage-PjDHb5v7.js";
|
|
2
2
|
//#region src/shadow-dom.ts
|
|
3
3
|
let shadowRoot = null;
|
|
4
4
|
let hostEl = null;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as TicketResult, i as PublicReply, l as TrackedTicketResult, o as SubmitTicketData, r as OidcAuthConfig, s as ThemeConfig, t as CustomerConfig, u as WidgetError } from "./types-
|
|
1
|
+
import { c as TicketResult, i as PublicReply, l as TrackedTicketResult, o as SubmitTicketData, r as OidcAuthConfig, s as ThemeConfig, t as CustomerConfig, u as WidgetError } from "./types-rPiXlS0A.js";
|
|
2
2
|
import { ReactNode } from "react";
|
|
3
3
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
4
|
|
|
@@ -104,4 +104,4 @@ declare function loadWidgetConfig(apiKey: string): WidgetConfigPersist | null;
|
|
|
104
104
|
|
|
105
105
|
//#endregion
|
|
106
106
|
export { type CustomerConfig, FloatingWidget, type PublicReply, ReqdeskProvider, type ReqdeskProviderProps, ShadowRoot, type SubmitTicketData, SupportPortal, type SupportPortalProps, type ThemeConfig, TicketForm, type TicketFormProps, type TicketResult, type TrackedTicketResult, type UseReqdeskReturn, type WidgetConfigPersist, type WidgetError, loadWidgetConfig as getWidgetDefaults, useReqdesk };
|
|
107
|
-
//# sourceMappingURL=react-
|
|
107
|
+
//# sourceMappingURL=react-DYAKyC3I.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-
|
|
1
|
+
{"version":3,"file":"react-DYAKyC3I.d.ts","names":[],"sources":["../src/react/types.ts","../src/react/ReqdeskProvider.tsx","../src/react/TicketForm.tsx","../src/react/SupportPortal.tsx","../src/react/FloatingWidget.tsx","../src/react/useReqdesk.ts","../src/react/shadow-root.tsx","../src/storage.ts"],"mappings":";;;;;UAIiB,oBAAA;;SAER;EAFQ,KAAA,CAAA,EAGP,WAHO;EAAoB,QAAA,CAAA,EAAA,MAAA;UAE5B,CAAA,EAGI,cAHJ;cACC,CAAA,EAGO,MAHP,CAAA,MAAA,EAAA,MAAA,CAAA;UAEG,EAED,KAAA,CAAM,SAFL;;AAED,UAGK,eAAA,CAHC;EAAS,IAAA,CAAA,EAAA,UAAA,GAAA,QAAA;EAGV,QAAA,CAAA,EAAA,cAAe,GAAA,aAAA;EAAA,eAAA,CAAA,EAAA,MAAA;iBAIH,CAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,GAAA,IAAA;SACT,CAAA,EAAA,CAAA,KAAA,EAAA,WAAA,EAAA,GAAA,IAAA;WAEJ,CAAA,EAAA,MAAA;EAAa,KAAA,CAAA,EAAnB,KAAA,CAAM,aAAa;AAG7B;AAOiB,UAPA,kBAAA,CAOgB;EAAA,eAAA,CAAA,EAAA,MAAA;kBACZ,CAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GAAA,IAAA;WAA2B,CAAA,EAAA,MAAA;OAAR,CAAA,EAJ9B,KAAA,CAAM,aAIwB;;AACV,UAFb,gBAAA,CAEa;cACsB,CAAA,IAAA,EAF/B,gBAE+B,CAAA,EAFZ,OAEY,CAFJ,YAEI,CAAA;aAE3C,CAAA,KAAA,EAAA,MAAA,CAAA,EAHqB,OAGrB,CAH6B,mBAG7B,CAAA;EAAW,mBAAA,CAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EAFgC,OAEhC,CAAA,IAAA,CAAA;;SAAX;;;;iBCAO,eAAA;;;;;;;;GAAqF,uBAAoB,kBAAA,CAAA,GAAA,CAAA;;;;iBCxBzG,UAAA;;;;;;GAA4E,kBAAe,kBAAA,CAAA,GAAA,CAAA;;;;iBCN3F,aAAA;;GAA6B,qBAAkB,kBAAA,CAAA,GAAA,CAAA;;;;UCYrD,mBAAA;;;6BAGmB;EJjBZ,OAAA,CAAA,EAAA,CAAA,KAAA,EIkBG,WJlBiB,EAAA,GAAA,IAAA;;AAE5B,iBIuCO,cAAA,CJvCP;EAAA,QAAA;EAAA,SAAA;EAAA,eAAA;EAAA;AAAA,CAAA,EI4CN,mBJ5CM,CAAA,EI4Ca,kBAAA,CAAA,GAAA,CAAA,OJ5Cb;;;iBKDO,UAAA,CAAA,GAAc;;;;UCDpB,eAAA;YACE;;iBAGI,UAAA;;GAAyB,kBAAe,kBAAA,CAAA,GAAA,CAAA;;;UCRvC,mBAAA;;;;;IPIA,IAAA,CAAA,EAAA,OAAA,GAAA,MAAoB,GAAA,MAAA;EAAA,CAAA;QAE5B,CAAA,EAAA,aAAA,GAAA,gBAAA;;AAYoB,iBO6Eb,gBAAA,CP7Ea,MAAA,EAAA,MAAA,CAAA,EO6EqB,mBP7ErB,GAAA,IAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as TicketResult, i as PublicReply, l as TrackedTicketResult, o as SubmitTicketData, r as OidcAuthConfig, s as ThemeConfig, t as CustomerConfig, u as WidgetError } from "./types-
|
|
1
|
+
import { c as TicketResult, i as PublicReply, l as TrackedTicketResult, o as SubmitTicketData, r as OidcAuthConfig, s as ThemeConfig, t as CustomerConfig, u as WidgetError } from "./types-i3IgBEjw.cjs";
|
|
2
2
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
3
|
import { ReactNode } from "react";
|
|
4
4
|
|
|
@@ -104,4 +104,4 @@ declare function loadWidgetConfig(apiKey: string): WidgetConfigPersist | null;
|
|
|
104
104
|
|
|
105
105
|
//#endregion
|
|
106
106
|
export { type CustomerConfig, FloatingWidget, type PublicReply, ReqdeskProvider, type ReqdeskProviderProps, ShadowRoot, type SubmitTicketData, SupportPortal, type SupportPortalProps, type ThemeConfig, TicketForm, type TicketFormProps, type TicketResult, type TrackedTicketResult, type UseReqdeskReturn, type WidgetConfigPersist, type WidgetError, loadWidgetConfig as getWidgetDefaults, useReqdesk };
|
|
107
|
-
//# sourceMappingURL=react-
|
|
107
|
+
//# sourceMappingURL=react-PYPqwxcj.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-
|
|
1
|
+
{"version":3,"file":"react-PYPqwxcj.d.cts","names":[],"sources":["../src/react/types.ts","../src/react/ReqdeskProvider.tsx","../src/react/TicketForm.tsx","../src/react/SupportPortal.tsx","../src/react/FloatingWidget.tsx","../src/react/useReqdesk.ts","../src/react/shadow-root.tsx","../src/storage.ts"],"mappings":";;;;;UAIiB,oBAAA;;SAER;EAFQ,KAAA,CAAA,EAGP,WAHO;EAAoB,QAAA,CAAA,EAAA,MAAA;UAE5B,CAAA,EAGI,cAHJ;cACC,CAAA,EAGO,MAHP,CAAA,MAAA,EAAA,MAAA,CAAA;UAEG,EAED,KAAA,CAAM,SAFL;;AAED,UAGK,eAAA,CAHC;EAAS,IAAA,CAAA,EAAA,UAAA,GAAA,QAAA;EAGV,QAAA,CAAA,EAAA,cAAe,GAAA,aAAA;EAAA,eAAA,CAAA,EAAA,MAAA;iBAIH,CAAA,EAAA,CAAA,MAAA,EAAA,YAAA,EAAA,GAAA,IAAA;SACT,CAAA,EAAA,CAAA,KAAA,EAAA,WAAA,EAAA,GAAA,IAAA;WAEJ,CAAA,EAAA,MAAA;EAAa,KAAA,CAAA,EAAnB,KAAA,CAAM,aAAa;AAG7B;AAOiB,UAPA,kBAAA,CAOgB;EAAA,eAAA,CAAA,EAAA,MAAA;kBACZ,CAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,GAAA,IAAA;WAA2B,CAAA,EAAA,MAAA;OAAR,CAAA,EAJ9B,KAAA,CAAM,aAIwB;;AACV,UAFb,gBAAA,CAEa;cACsB,CAAA,IAAA,EAF/B,gBAE+B,CAAA,EAFZ,OAEY,CAFJ,YAEI,CAAA;aAE3C,CAAA,KAAA,EAAA,MAAA,CAAA,EAHqB,OAGrB,CAH6B,mBAG7B,CAAA;EAAW,mBAAA,CAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,CAAA,EAFgC,OAEhC,CAAA,IAAA,CAAA;;SAAX;;;;iBCAO,eAAA;;;;;;;;GAAqF,uBAAoB,kBAAA,CAAA,GAAA,CAAA;;;;iBCxBzG,UAAA;;;;;;GAA4E,kBAAe,kBAAA,CAAA,GAAA,CAAA;;;;iBCN3F,aAAA;;GAA6B,qBAAkB,kBAAA,CAAA,GAAA,CAAA;;;;UCYrD,mBAAA;;;6BAGmB;EJjBZ,OAAA,CAAA,EAAA,CAAA,KAAA,EIkBG,WJlBiB,EAAA,GAAA,IAAA;;AAE5B,iBIuCO,cAAA,CJvCP;EAAA,QAAA;EAAA,SAAA;EAAA,eAAA;EAAA;AAAA,CAAA,EI4CN,mBJ5CM,CAAA,EI4Ca,kBAAA,CAAA,GAAA,CAAA,OJ5Cb;;;iBKDO,UAAA,CAAA,GAAc;;;;UCDpB,eAAA;YACE;;iBAGI,UAAA;;GAAyB,kBAAe,kBAAA,CAAA,GAAA,CAAA;;;UCRvC,mBAAA;;;;;IPIA,IAAA,CAAA,EAAA,OAAA,GAAA,MAAoB,GAAA,MAAA;EAAA,CAAA;QAE5B,CAAA,EAAA,aAAA,GAAA,gBAAA;;AAYoB,iBO6Eb,gBAAA,CP7Ea,MAAA,EAAA,MAAA,CAAA,EO6EqB,mBP7ErB,GAAA,IAAA"}
|
package/dist/react.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_storage = require("./storage-
|
|
2
|
+
const require_storage = require("./storage-DqhhTxeh.cjs");
|
|
3
3
|
let react = require("react");
|
|
4
4
|
let _tanstack_react_query = require("@tanstack/react-query");
|
|
5
5
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
@@ -481,6 +481,132 @@ function SupportPortal({ className }) {
|
|
|
481
481
|
}) });
|
|
482
482
|
}
|
|
483
483
|
//#endregion
|
|
484
|
+
//#region src/react/queries.ts
|
|
485
|
+
const widgetTicketDetailOptions = (ticketId) => (0, _tanstack_react_query.queryOptions)({
|
|
486
|
+
queryKey: ["widget-ticket", ticketId],
|
|
487
|
+
queryFn: () => require_storage.getTicketDetail(ticketId),
|
|
488
|
+
staleTime: 6e4,
|
|
489
|
+
enabled: !!ticketId
|
|
490
|
+
});
|
|
491
|
+
const widgetMyTicketsOptions = (projectId, userId) => (0, _tanstack_react_query.queryOptions)({
|
|
492
|
+
queryKey: [
|
|
493
|
+
"widget-tickets",
|
|
494
|
+
projectId,
|
|
495
|
+
userId
|
|
496
|
+
],
|
|
497
|
+
queryFn: () => require_storage.listMyTickets(projectId, userId),
|
|
498
|
+
staleTime: 3e4,
|
|
499
|
+
placeholderData: _tanstack_react_query.keepPreviousData,
|
|
500
|
+
enabled: !!userId
|
|
501
|
+
});
|
|
502
|
+
const widgetUserOptions = (projectId, email) => (0, _tanstack_react_query.queryOptions)({
|
|
503
|
+
queryKey: [
|
|
504
|
+
"widget-user",
|
|
505
|
+
projectId,
|
|
506
|
+
email
|
|
507
|
+
],
|
|
508
|
+
queryFn: () => require_storage.resolveWidgetUser(projectId, email),
|
|
509
|
+
staleTime: 5 * 6e4,
|
|
510
|
+
enabled: !!email
|
|
511
|
+
});
|
|
512
|
+
const widgetCategoriesOptions = (projectId, parentId) => (0, _tanstack_react_query.queryOptions)({
|
|
513
|
+
queryKey: [
|
|
514
|
+
"widget-categories",
|
|
515
|
+
projectId,
|
|
516
|
+
parentId ?? "root"
|
|
517
|
+
],
|
|
518
|
+
queryFn: () => require_storage.getCategories(projectId, parentId),
|
|
519
|
+
staleTime: 5 * 6e4
|
|
520
|
+
});
|
|
521
|
+
//#endregion
|
|
522
|
+
//#region src/client-metadata.ts
|
|
523
|
+
const STORAGE_PREFIX = "reqdesk_diag_";
|
|
524
|
+
const DEFAULT_PREFS = {
|
|
525
|
+
screenResolution: false,
|
|
526
|
+
deviceType: false,
|
|
527
|
+
timezone: false,
|
|
528
|
+
referrerUrl: false,
|
|
529
|
+
language: false,
|
|
530
|
+
platform: false
|
|
531
|
+
};
|
|
532
|
+
/** Always collected — minimal, non-sensitive */
|
|
533
|
+
function collectMinimalMetadata() {
|
|
534
|
+
const meta = {};
|
|
535
|
+
try {
|
|
536
|
+
meta.pageUrl = window.location.href;
|
|
537
|
+
meta.userAgent = navigator.userAgent;
|
|
538
|
+
} catch {}
|
|
539
|
+
return meta;
|
|
540
|
+
}
|
|
541
|
+
/** Full diagnostic set — only included for opted-in fields */
|
|
542
|
+
function collectDiagnosticMetadata(prefs) {
|
|
543
|
+
const meta = {};
|
|
544
|
+
try {
|
|
545
|
+
if (prefs.screenResolution) meta.screenResolution = `${screen.width}x${screen.height}`;
|
|
546
|
+
if (prefs.deviceType) meta.deviceType = detectDeviceType();
|
|
547
|
+
if (prefs.timezone) meta.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
548
|
+
if (prefs.referrerUrl && document.referrer) meta.referrerUrl = document.referrer;
|
|
549
|
+
if (prefs.language) meta.language = navigator.language;
|
|
550
|
+
if (prefs.platform) meta.platform = navigator.platform;
|
|
551
|
+
} catch {}
|
|
552
|
+
return meta;
|
|
553
|
+
}
|
|
554
|
+
/** Combine minimal + opted-in diagnostic metadata */
|
|
555
|
+
function collectAllMetadata(apiKey) {
|
|
556
|
+
const prefs = getMetadataPreferences(apiKey);
|
|
557
|
+
return {
|
|
558
|
+
...collectMinimalMetadata(),
|
|
559
|
+
...collectDiagnosticMetadata(prefs)
|
|
560
|
+
};
|
|
561
|
+
}
|
|
562
|
+
function getMetadataPreferences(apiKey) {
|
|
563
|
+
try {
|
|
564
|
+
const raw = localStorage.getItem(`${STORAGE_PREFIX}${apiKey}`);
|
|
565
|
+
if (raw) return {
|
|
566
|
+
...DEFAULT_PREFS,
|
|
567
|
+
...JSON.parse(raw)
|
|
568
|
+
};
|
|
569
|
+
} catch {}
|
|
570
|
+
return { ...DEFAULT_PREFS };
|
|
571
|
+
}
|
|
572
|
+
function saveMetadataPreferences(apiKey, prefs) {
|
|
573
|
+
try {
|
|
574
|
+
localStorage.setItem(`${STORAGE_PREFIX}${apiKey}`, JSON.stringify(prefs));
|
|
575
|
+
} catch {}
|
|
576
|
+
}
|
|
577
|
+
function detectDeviceType() {
|
|
578
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
579
|
+
if (/tablet|ipad|playbook|silk/i.test(ua)) return "tablet";
|
|
580
|
+
if (/mobile|iphone|ipod|android.*mobile|windows phone/i.test(ua)) return "mobile";
|
|
581
|
+
return "desktop";
|
|
582
|
+
}
|
|
583
|
+
const DIAGNOSTIC_FIELDS = [
|
|
584
|
+
{
|
|
585
|
+
key: "screenResolution",
|
|
586
|
+
labelKey: "diag.screenResolution"
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
key: "deviceType",
|
|
590
|
+
labelKey: "diag.deviceType"
|
|
591
|
+
},
|
|
592
|
+
{
|
|
593
|
+
key: "timezone",
|
|
594
|
+
labelKey: "diag.timezone"
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
key: "referrerUrl",
|
|
598
|
+
labelKey: "diag.referrerUrl"
|
|
599
|
+
},
|
|
600
|
+
{
|
|
601
|
+
key: "language",
|
|
602
|
+
labelKey: "diag.language"
|
|
603
|
+
},
|
|
604
|
+
{
|
|
605
|
+
key: "platform",
|
|
606
|
+
labelKey: "diag.platform"
|
|
607
|
+
}
|
|
608
|
+
];
|
|
609
|
+
//#endregion
|
|
484
610
|
//#region src/react/views/SubmitTicketView.tsx
|
|
485
611
|
const translations$4 = {
|
|
486
612
|
en: require_storage.en,
|
|
@@ -530,6 +656,19 @@ function SubmitTicketView({ projectId, onSuccess, onError, isAuthenticated, user
|
|
|
530
656
|
const [uploadProgress, setUploadProgress] = (0, react.useState)(null);
|
|
531
657
|
const [success, setSuccess] = (0, react.useState)(null);
|
|
532
658
|
const [rememberEmail, setRememberEmail] = (0, react.useState)(!!savedEmail);
|
|
659
|
+
const [categoryPath, setCategoryPath] = (0, react.useState)([]);
|
|
660
|
+
const [selectedCategory, setSelectedCategory] = (0, react.useState)(null);
|
|
661
|
+
const { data: categories = [] } = (0, _tanstack_react_query.useQuery)(widgetCategoriesOptions(projectId, categoryPath.length > 0 ? categoryPath[categoryPath.length - 1].id : null));
|
|
662
|
+
const [diagOpen, setDiagOpen] = (0, react.useState)(false);
|
|
663
|
+
const [diagPrefs, setDiagPrefs] = (0, react.useState)(getMetadataPreferences(ctx.apiKey));
|
|
664
|
+
const diagValues = collectDiagnosticMetadata({
|
|
665
|
+
screenResolution: true,
|
|
666
|
+
deviceType: true,
|
|
667
|
+
timezone: true,
|
|
668
|
+
referrerUrl: true,
|
|
669
|
+
language: true,
|
|
670
|
+
platform: true
|
|
671
|
+
});
|
|
533
672
|
const t = (0, react.useCallback)((key) => {
|
|
534
673
|
if (ctx.translations?.[key]) return ctx.translations[key];
|
|
535
674
|
return (translations$4[ctx.language] ?? translations$4.en)[key] ?? key;
|
|
@@ -616,12 +755,15 @@ function SubmitTicketView({ projectId, onSuccess, onError, isAuthenticated, user
|
|
|
616
755
|
}
|
|
617
756
|
setErrors({});
|
|
618
757
|
if (rememberEmail && email) require_storage.saveWidgetEmail(ctx.apiKey, email);
|
|
758
|
+
saveMetadataPreferences(ctx.apiKey, diagPrefs);
|
|
619
759
|
const validFiles = files.filter((f) => !f.error);
|
|
620
760
|
const data = {
|
|
621
761
|
title,
|
|
622
762
|
description: formData.get("description")?.trim() || void 0,
|
|
623
763
|
email,
|
|
624
|
-
priority: formData.get("priority") ?? "medium"
|
|
764
|
+
priority: formData.get("priority") ?? "medium",
|
|
765
|
+
categoryId: selectedCategory?.id,
|
|
766
|
+
clientMetadata: collectAllMetadata(ctx.apiKey)
|
|
625
767
|
};
|
|
626
768
|
submitMutation.mutate({
|
|
627
769
|
data,
|
|
@@ -802,6 +944,97 @@ function SubmitTicketView({ projectId, onSuccess, onError, isAuthenticated, user
|
|
|
802
944
|
]
|
|
803
945
|
})]
|
|
804
946
|
}),
|
|
947
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
948
|
+
className: "rqd-form-group",
|
|
949
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
|
|
950
|
+
className: "rqd-label",
|
|
951
|
+
children: t("form.categorySelected")
|
|
952
|
+
}), selectedCategory ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
953
|
+
className: "rqd-category-selected",
|
|
954
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
|
|
955
|
+
categoryPath.map((c) => c.name).join(" > "),
|
|
956
|
+
categoryPath.length > 0 ? " > " : "",
|
|
957
|
+
selectedCategory.name
|
|
958
|
+
] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
959
|
+
type: "button",
|
|
960
|
+
onClick: () => {
|
|
961
|
+
setSelectedCategory(null);
|
|
962
|
+
setCategoryPath([]);
|
|
963
|
+
},
|
|
964
|
+
children: "×"
|
|
965
|
+
})]
|
|
966
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [categoryPath.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
967
|
+
className: "rqd-category-breadcrumb",
|
|
968
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
969
|
+
type: "button",
|
|
970
|
+
onClick: () => setCategoryPath([]),
|
|
971
|
+
children: t("form.categoryPlaceholder")
|
|
972
|
+
}), categoryPath.map((c, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
973
|
+
className: "rqd-category-breadcrumb-sep",
|
|
974
|
+
children: "›"
|
|
975
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
976
|
+
type: "button",
|
|
977
|
+
onClick: () => setCategoryPath((prev) => prev.slice(0, i + 1)),
|
|
978
|
+
children: c.name
|
|
979
|
+
})] }, c.id))]
|
|
980
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
981
|
+
className: "rqd-category-list",
|
|
982
|
+
children: [categories.map((cat) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
983
|
+
type: "button",
|
|
984
|
+
className: "rqd-category-item",
|
|
985
|
+
onClick: () => {
|
|
986
|
+
if (cat.hasChildren) setCategoryPath((prev) => [...prev, cat]);
|
|
987
|
+
else setSelectedCategory(cat);
|
|
988
|
+
},
|
|
989
|
+
children: [cat.name, cat.hasChildren && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
990
|
+
className: "rqd-category-item-chevron",
|
|
991
|
+
children: "›"
|
|
992
|
+
})]
|
|
993
|
+
}, cat.id)), categories.length === 0 && categoryPath.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
994
|
+
style: {
|
|
995
|
+
fontSize: 13,
|
|
996
|
+
color: "var(--rqd-text-secondary)"
|
|
997
|
+
},
|
|
998
|
+
children: t("form.categoryPlaceholder")
|
|
999
|
+
})]
|
|
1000
|
+
})] })]
|
|
1001
|
+
}),
|
|
1002
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1003
|
+
className: "rqd-form-group",
|
|
1004
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
1005
|
+
type: "button",
|
|
1006
|
+
className: "rqd-diag-toggle",
|
|
1007
|
+
onClick: () => setDiagOpen((prev) => !prev),
|
|
1008
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("diag.title") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: diagOpen ? "▲" : "▼" })]
|
|
1009
|
+
}), diagOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1010
|
+
className: "rqd-diag-panel",
|
|
1011
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
1012
|
+
style: {
|
|
1013
|
+
fontSize: 12,
|
|
1014
|
+
color: "var(--rqd-text-secondary)",
|
|
1015
|
+
margin: "0 0 6px"
|
|
1016
|
+
},
|
|
1017
|
+
children: t("diag.hint")
|
|
1018
|
+
}), DIAGNOSTIC_FIELDS.map((field) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
1019
|
+
className: "rqd-diag-item",
|
|
1020
|
+
children: [
|
|
1021
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
1022
|
+
type: "checkbox",
|
|
1023
|
+
checked: diagPrefs[field.key],
|
|
1024
|
+
onChange: (e) => setDiagPrefs((prev) => ({
|
|
1025
|
+
...prev,
|
|
1026
|
+
[field.key]: e.target.checked
|
|
1027
|
+
}))
|
|
1028
|
+
}),
|
|
1029
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t(field.labelKey) }),
|
|
1030
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
1031
|
+
className: "rqd-diag-item-value",
|
|
1032
|
+
children: diagValues[field.key] ?? "—"
|
|
1033
|
+
})
|
|
1034
|
+
]
|
|
1035
|
+
}, field.key))]
|
|
1036
|
+
})]
|
|
1037
|
+
}),
|
|
805
1038
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
806
1039
|
className: "rqd-form-group",
|
|
807
1040
|
children: [
|
|
@@ -865,35 +1098,6 @@ function SubmitTicketView({ projectId, onSuccess, onError, isAuthenticated, user
|
|
|
865
1098
|
});
|
|
866
1099
|
}
|
|
867
1100
|
//#endregion
|
|
868
|
-
//#region src/react/queries.ts
|
|
869
|
-
const widgetTicketDetailOptions = (ticketId) => (0, _tanstack_react_query.queryOptions)({
|
|
870
|
-
queryKey: ["widget-ticket", ticketId],
|
|
871
|
-
queryFn: () => require_storage.getTicketDetail(ticketId),
|
|
872
|
-
staleTime: 6e4,
|
|
873
|
-
enabled: !!ticketId
|
|
874
|
-
});
|
|
875
|
-
const widgetMyTicketsOptions = (projectId, userId) => (0, _tanstack_react_query.queryOptions)({
|
|
876
|
-
queryKey: [
|
|
877
|
-
"widget-tickets",
|
|
878
|
-
projectId,
|
|
879
|
-
userId
|
|
880
|
-
],
|
|
881
|
-
queryFn: () => require_storage.listMyTickets(projectId, userId),
|
|
882
|
-
staleTime: 3e4,
|
|
883
|
-
placeholderData: _tanstack_react_query.keepPreviousData,
|
|
884
|
-
enabled: !!userId
|
|
885
|
-
});
|
|
886
|
-
const widgetUserOptions = (projectId, email) => (0, _tanstack_react_query.queryOptions)({
|
|
887
|
-
queryKey: [
|
|
888
|
-
"widget-user",
|
|
889
|
-
projectId,
|
|
890
|
-
email
|
|
891
|
-
],
|
|
892
|
-
queryFn: () => require_storage.resolveWidgetUser(projectId, email),
|
|
893
|
-
staleTime: 5 * 6e4,
|
|
894
|
-
enabled: !!email
|
|
895
|
-
});
|
|
896
|
-
//#endregion
|
|
897
1101
|
//#region src/react/views/MyTicketsView.tsx
|
|
898
1102
|
const translations$3 = {
|
|
899
1103
|
en: require_storage.en,
|
|
@@ -1075,6 +1279,24 @@ function TicketDetailView({ ticketId, onBack }) {
|
|
|
1075
1279
|
if (context?.previous) queryClient.setQueryData(["widget-ticket", ticketId], context.previous);
|
|
1076
1280
|
}
|
|
1077
1281
|
});
|
|
1282
|
+
const resolveMutation = (0, _tanstack_react_query.useMutation)({
|
|
1283
|
+
mutationFn: () => require_storage.closeTicket(ticketId),
|
|
1284
|
+
onMutate: async () => {
|
|
1285
|
+
await queryClient.cancelQueries({ queryKey: ["widget-ticket", ticketId] });
|
|
1286
|
+
const previous = queryClient.getQueryData(["widget-ticket", ticketId]);
|
|
1287
|
+
if (previous) queryClient.setQueryData(["widget-ticket", ticketId], {
|
|
1288
|
+
...previous,
|
|
1289
|
+
status: "resolved"
|
|
1290
|
+
});
|
|
1291
|
+
return { previous };
|
|
1292
|
+
},
|
|
1293
|
+
onSuccess: () => {
|
|
1294
|
+
queryClient.invalidateQueries({ queryKey: ["widget-ticket", ticketId] });
|
|
1295
|
+
},
|
|
1296
|
+
onError: (_err, _vars, context) => {
|
|
1297
|
+
if (context?.previous) queryClient.setQueryData(["widget-ticket", ticketId], context.previous);
|
|
1298
|
+
}
|
|
1299
|
+
});
|
|
1078
1300
|
if (isLoading) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1079
1301
|
className: "rqd-loading",
|
|
1080
1302
|
children: t("detail.loading")
|
|
@@ -1183,11 +1405,28 @@ function TicketDetailView({ ticketId, onBack }) {
|
|
|
1183
1405
|
onChange: (e) => setReplyBody(e.target.value),
|
|
1184
1406
|
placeholder: t("detail.replyPlaceholder"),
|
|
1185
1407
|
rows: 3
|
|
1186
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1408
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
1409
|
+
style: {
|
|
1410
|
+
display: "flex",
|
|
1411
|
+
gap: 8
|
|
1412
|
+
},
|
|
1413
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1414
|
+
className: "rqd-btn rqd-btn-primary",
|
|
1415
|
+
style: { flex: 1 },
|
|
1416
|
+
onClick: () => replyMutation.mutate(replyBody.trim()),
|
|
1417
|
+
disabled: !replyBody.trim() || replyMutation.isPending,
|
|
1418
|
+
children: replyMutation.isPending ? t("detail.sending") : t("detail.sendReply")
|
|
1419
|
+
}), ticket.status !== "resolved" && ticket.status !== "closed" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
1420
|
+
className: "rqd-btn rqd-btn-secondary",
|
|
1421
|
+
style: {
|
|
1422
|
+
flex: 0,
|
|
1423
|
+
whiteSpace: "nowrap",
|
|
1424
|
+
padding: "10px 16px"
|
|
1425
|
+
},
|
|
1426
|
+
onClick: () => resolveMutation.mutate(),
|
|
1427
|
+
disabled: resolveMutation.isPending,
|
|
1428
|
+
children: resolveMutation.isPending ? t("detail.resolving") : t("detail.resolve")
|
|
1429
|
+
})]
|
|
1191
1430
|
})]
|
|
1192
1431
|
})
|
|
1193
1432
|
] });
|
package/dist/react.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './react-
|
|
1
|
+
export * from './react-PYPqwxcj.cjs';
|
package/dist/react.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './react-
|
|
1
|
+
export * from './react-DYAKyC3I.js';
|