@namphuongtechnologi/np-hub 0.2.0 → 0.2.2

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/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react/SupportWidget.tsx"],"sourcesContent":["import {\n createElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { SupportWidgetElement } from \"../component/support-widget.element\";\nimport { WIDGET_EVENTS } from \"../component/events/widget-events\";\nimport { registerSupportWidget } from \"../register\";\nimport type {\n SupportSubmissionInput,\n SupportUserPrefill,\n} from \"../types/public\";\n\nregisterSupportWidget();\n\nexport interface SupportWidgetProps {\n projectId: string;\n isDev?: boolean;\n priority?: number;\n coordinators?: string[];\n emailContacts?: string[];\n toastDuration?: number;\n width?: string | number;\n height?: string | number;\n right?: string | number;\n bottom?: string | number;\n left?: string | number;\n top?: string | number;\n user?: SupportUserPrefill;\n formPrefill?: SupportSubmissionInput;\n onSubmitSuccess?: (detail: unknown) => void;\n onSubmitError?: (detail: unknown) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport function SupportWidget({\n projectId,\n isDev,\n priority,\n coordinators,\n emailContacts,\n toastDuration,\n width,\n height,\n right,\n bottom,\n left,\n top,\n user,\n formPrefill,\n onSubmitSuccess,\n onSubmitError,\n onOpen,\n onClose,\n}: SupportWidgetProps) {\n const [mounted, setMounted] = useState(false);\n const widgetRef = useRef<SupportWidgetElement | null>(null);\n\n const setWidgetRef = useCallback((node: SupportWidgetElement | null) => {\n widgetRef.current = node;\n }, []);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n const el = widgetRef.current;\n if (!el) return;\n el.setConfig({\n projectId,\n isDev,\n priority,\n coordinators,\n emailContacts,\n toastDuration,\n });\n }, [projectId, isDev, priority, coordinators, emailContacts, toastDuration]);\n\n useEffect(() => {\n const el = widgetRef.current;\n if (!el || !user) return;\n el.setUser(user);\n }, [user]);\n\n useEffect(() => {\n const el = widgetRef.current;\n if (!el || !formPrefill) return;\n el.setFormPrefill(formPrefill);\n }, [formPrefill]);\n\n useEffect(() => {\n const el = widgetRef.current;\n if (!el) return;\n\n const handleSuccess = (event: Event) => {\n onSubmitSuccess?.((event as CustomEvent).detail);\n };\n const handleError = (event: Event) => {\n onSubmitError?.((event as CustomEvent).detail);\n };\n\n if (onSubmitSuccess) {\n el.addEventListener(WIDGET_EVENTS.SUBMIT_SUCCESS, handleSuccess);\n }\n if (onSubmitError) {\n el.addEventListener(WIDGET_EVENTS.SUBMIT_ERROR, handleError);\n }\n if (onOpen) {\n el.addEventListener(WIDGET_EVENTS.OPEN, onOpen);\n }\n if (onClose) {\n el.addEventListener(WIDGET_EVENTS.CLOSE, onClose);\n }\n\n return () => {\n if (onSubmitSuccess) {\n el.removeEventListener(WIDGET_EVENTS.SUBMIT_SUCCESS, handleSuccess);\n }\n if (onSubmitError) {\n el.removeEventListener(WIDGET_EVENTS.SUBMIT_ERROR, handleError);\n }\n if (onOpen) {\n el.removeEventListener(WIDGET_EVENTS.OPEN, onOpen);\n }\n if (onClose) {\n el.removeEventListener(WIDGET_EVENTS.CLOSE, onClose);\n }\n };\n }, [onSubmitSuccess, onSubmitError, onOpen, onClose]);\n\n if (!mounted) {\n return null;\n }\n\n return createElement(\"np-hub\", {\n ref: setWidgetRef,\n \"project-id\": projectId,\n ...(isDev ? { \"is-dev\": true } : {}),\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n ...(right !== undefined ? { right } : {}),\n ...(bottom !== undefined ? { bottom } : {}),\n ...(left !== undefined ? { left } : {}),\n ...(top !== undefined ? { top } : {}),\n });\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/react/SupportWidget.tsx"],"sourcesContent":["import {\n createElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { SupportWidgetElement } from \"../component/support-widget.element\";\nimport { WIDGET_EVENTS } from \"../component/events/widget-events\";\nimport { registerSupportWidget } from \"../register\";\nimport type {\n SupportSubmissionInput,\n SupportUserPrefill,\n} from \"../types/public\";\n\nregisterSupportWidget();\n\nexport interface SupportWidgetProps {\n projectId: string;\n isDev?: boolean;\n priority?: number;\n coordinators?: string[];\n emailContacts?: string[];\n toastDuration?: number | { success?: number; error?: number };\n width?: string | number;\n height?: string | number;\n right?: string | number;\n bottom?: string | number;\n left?: string | number;\n top?: string | number;\n user?: SupportUserPrefill;\n formPrefill?: SupportSubmissionInput;\n onSubmitSuccess?: (detail: unknown) => void;\n onSubmitError?: (detail: unknown) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport function SupportWidget({\n projectId,\n isDev,\n priority,\n coordinators,\n emailContacts,\n toastDuration,\n width,\n height,\n right,\n bottom,\n left,\n top,\n user,\n formPrefill,\n onSubmitSuccess,\n onSubmitError,\n onOpen,\n onClose,\n}: SupportWidgetProps) {\n const [mounted, setMounted] = useState(false);\n const widgetRef = useRef<SupportWidgetElement | null>(null);\n\n const setWidgetRef = useCallback((node: SupportWidgetElement | null) => {\n widgetRef.current = node;\n }, []);\n\n useEffect(() => {\n setMounted(true);\n }, []);\n\n useEffect(() => {\n const el = widgetRef.current;\n if (!el) return;\n el.setConfig({\n projectId,\n isDev,\n priority,\n coordinators,\n emailContacts,\n toastDuration,\n });\n }, [projectId, isDev, priority, coordinators, emailContacts, toastDuration]);\n\n useEffect(() => {\n const el = widgetRef.current;\n if (!el || !user) return;\n el.setUser(user);\n }, [user]);\n\n useEffect(() => {\n const el = widgetRef.current;\n if (!el || !formPrefill) return;\n el.setFormPrefill(formPrefill);\n }, [formPrefill]);\n\n useEffect(() => {\n const el = widgetRef.current;\n if (!el) return;\n\n const handleSuccess = (event: Event) => {\n onSubmitSuccess?.((event as CustomEvent).detail);\n };\n const handleError = (event: Event) => {\n onSubmitError?.((event as CustomEvent).detail);\n };\n\n if (onSubmitSuccess) {\n el.addEventListener(WIDGET_EVENTS.SUBMIT_SUCCESS, handleSuccess);\n }\n if (onSubmitError) {\n el.addEventListener(WIDGET_EVENTS.SUBMIT_ERROR, handleError);\n }\n if (onOpen) {\n el.addEventListener(WIDGET_EVENTS.OPEN, onOpen);\n }\n if (onClose) {\n el.addEventListener(WIDGET_EVENTS.CLOSE, onClose);\n }\n\n return () => {\n if (onSubmitSuccess) {\n el.removeEventListener(WIDGET_EVENTS.SUBMIT_SUCCESS, handleSuccess);\n }\n if (onSubmitError) {\n el.removeEventListener(WIDGET_EVENTS.SUBMIT_ERROR, handleError);\n }\n if (onOpen) {\n el.removeEventListener(WIDGET_EVENTS.OPEN, onOpen);\n }\n if (onClose) {\n el.removeEventListener(WIDGET_EVENTS.CLOSE, onClose);\n }\n };\n }, [onSubmitSuccess, onSubmitError, onOpen, onClose]);\n\n if (!mounted) {\n return null;\n }\n\n return createElement(\"np-hub\", {\n ref: setWidgetRef,\n \"project-id\": projectId,\n ...(isDev ? { \"is-dev\": true } : {}),\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n ...(right !== undefined ? { right } : {}),\n ...(bottom !== undefined ? { bottom } : {}),\n ...(left !== undefined ? { left } : {}),\n ...(top !== undefined ? { top } : {}),\n });\n}\n"],"mappings":"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","names":[]}
package/dist/register.cjs CHANGED
@@ -191,9 +191,9 @@ var SupportWidgetElement = class extends HTMLElement {
191
191
  this.prefilledAttachments = [];
192
192
  this.previewUrls = [];
193
193
  this.closeAfterSuccessTimer = null;
194
- this.toastAutoCloseTimer = null;
195
194
  this.toastCountdownInterval = null;
196
- this.toastDuration = 4e3;
195
+ this.toastSuccessDuration = 4e3;
196
+ this.toastErrorDuration = 4e3;
197
197
  this.toastRemainingMs = 0;
198
198
  this.toastTotalMs = 0;
199
199
  this.isToastPaused = false;
@@ -221,7 +221,6 @@ var SupportWidgetElement = class extends HTMLElement {
221
221
  disconnectedCallback() {
222
222
  window.removeEventListener("resize", this.handleResize);
223
223
  this.clearCloseAfterSuccessTimer();
224
- this.clearToastAutoCloseTimer();
225
224
  this.clearToastCountdown();
226
225
  }
227
226
  attributeChangedCallback() {
@@ -234,6 +233,10 @@ var SupportWidgetElement = class extends HTMLElement {
234
233
  this.user = user;
235
234
  this.prefillFromState();
236
235
  }
236
+ /**
237
+ * Updates the widget configuration.
238
+ * Supports custom toast auto-close durations via `toastDuration`.
239
+ */
237
240
  setConfig(config) {
238
241
  this.config = {
239
242
  ...this.config,
@@ -259,7 +262,23 @@ var SupportWidgetElement = class extends HTMLElement {
259
262
  this.emailContacts = config.emailContacts;
260
263
  }
261
264
  if (config.toastDuration !== void 0) {
262
- this.toastDuration = this.normalizeToastDuration(config.toastDuration);
265
+ const duration = config.toastDuration;
266
+ if (typeof duration === "number") {
267
+ const val = this.normalizeToastDuration(duration);
268
+ this.toastSuccessDuration = val;
269
+ this.toastErrorDuration = val;
270
+ } else if (duration && typeof duration === "object") {
271
+ if (duration.success !== void 0) {
272
+ this.toastSuccessDuration = this.normalizeToastDuration(duration.success);
273
+ } else {
274
+ this.toastSuccessDuration = 4e3;
275
+ }
276
+ if (duration.error !== void 0) {
277
+ this.toastErrorDuration = this.normalizeToastDuration(duration.error);
278
+ } else {
279
+ this.toastErrorDuration = 4e3;
280
+ }
281
+ }
263
282
  }
264
283
  }
265
284
  setFormPrefill(data) {
@@ -277,9 +296,14 @@ var SupportWidgetElement = class extends HTMLElement {
277
296
  var _a, _b;
278
297
  this.clearCloseAfterSuccessTimer();
279
298
  this.resetFormData();
299
+ this.hideToast(false);
280
300
  (_b = (_a = this.shadowRoot) == null ? void 0 : _a.getElementById("modal")) == null ? void 0 : _b.classList.remove("show");
281
301
  this.dispatchEvent(new CustomEvent(WIDGET_EVENTS.CLOSE, { bubbles: true }));
282
302
  }
303
+ /**
304
+ * Helper method to trigger a mock/demo toast popup for testing and development.
305
+ * @param type - Either "success" or "error"
306
+ */
283
307
  showDemoToast(type) {
284
308
  if (type === "success") {
285
309
  this.showToast({
@@ -306,9 +330,27 @@ var SupportWidgetElement = class extends HTMLElement {
306
330
  };
307
331
  const toastDurationAttr = this.getAttribute("toast-duration");
308
332
  if (toastDurationAttr !== null) {
309
- const parsed = parseInt(toastDurationAttr, 10);
310
- if (!isNaN(parsed)) {
311
- this.toastDuration = this.normalizeToastDuration(parsed);
333
+ const trimmed = toastDurationAttr.trim();
334
+ if (trimmed.startsWith("{")) {
335
+ try {
336
+ const parsed = JSON.parse(trimmed);
337
+ if (parsed && typeof parsed === "object") {
338
+ if (parsed.success !== void 0) {
339
+ this.toastSuccessDuration = this.normalizeToastDuration(Number(parsed.success));
340
+ }
341
+ if (parsed.error !== void 0) {
342
+ this.toastErrorDuration = this.normalizeToastDuration(Number(parsed.error));
343
+ }
344
+ }
345
+ } catch (e) {
346
+ }
347
+ } else {
348
+ const parsed = parseInt(trimmed, 10);
349
+ if (!isNaN(parsed)) {
350
+ const val = this.normalizeToastDuration(parsed);
351
+ this.toastSuccessDuration = val;
352
+ this.toastErrorDuration = val;
353
+ }
312
354
  }
313
355
  }
314
356
  }
@@ -749,7 +791,7 @@ var SupportWidgetElement = class extends HTMLElement {
749
791
  this.clearFieldError("email");
750
792
  this.clearFieldError("content");
751
793
  }
752
- showToast(payload, autoCloseMs = this.toastDuration) {
794
+ showToast(payload, autoCloseMs) {
753
795
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
754
796
  const toastEl = (_a = this.shadowRoot) == null ? void 0 : _a.getElementById("toast");
755
797
  const titleEl = (_b = this.shadowRoot) == null ? void 0 : _b.getElementById("toast-title");
@@ -770,7 +812,6 @@ var SupportWidgetElement = class extends HTMLElement {
770
812
  if (!toastEl || !titleEl || !messageEl || !detailsEl || !requestCodeEl || !linkRowEl || !linkEl || !countdownBarEl) {
771
813
  return;
772
814
  }
773
- this.clearToastAutoCloseTimer();
774
815
  this.clearToastCountdown();
775
816
  titleEl.textContent = payload.title;
776
817
  messageEl.textContent = payload.message;
@@ -799,8 +840,9 @@ var SupportWidgetElement = class extends HTMLElement {
799
840
  linkRowEl.classList.add("is-hidden");
800
841
  detailsEl.classList.add("is-hidden");
801
842
  }
802
- this.toastRemainingMs = autoCloseMs;
803
- this.toastTotalMs = autoCloseMs;
843
+ const duration = autoCloseMs !== void 0 ? autoCloseMs : payload.type === "success" ? this.toastSuccessDuration : this.toastErrorDuration;
844
+ this.toastRemainingMs = duration;
845
+ this.toastTotalMs = duration;
804
846
  const toastCardEl = (_l = this.shadowRoot) == null ? void 0 : _l.querySelector(".toast-card");
805
847
  this.isToastPaused = Boolean(toastCardEl == null ? void 0 : toastCardEl.matches(":hover"));
806
848
  toastEl.classList.remove("success", "error");
@@ -811,7 +853,7 @@ var SupportWidgetElement = class extends HTMLElement {
811
853
  countdownBarEl
812
854
  );
813
855
  }
814
- hideToast() {
856
+ hideToast(shouldCloseModal = true) {
815
857
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
816
858
  const toastEl = (_a = this.shadowRoot) == null ? void 0 : _a.getElementById("toast");
817
859
  const titleEl = (_b = this.shadowRoot) == null ? void 0 : _b.getElementById("toast-title");
@@ -832,7 +874,7 @@ var SupportWidgetElement = class extends HTMLElement {
832
874
  if (!toastEl || !titleEl || !messageEl || !detailsEl || !requestCodeEl || !linkRowEl || !linkEl || !countdownBarEl) {
833
875
  return;
834
876
  }
835
- this.clearToastAutoCloseTimer();
877
+ const isSuccess = toastEl.classList.contains("success");
836
878
  this.clearToastCountdown();
837
879
  this.toastRemainingMs = 0;
838
880
  this.toastTotalMs = 0;
@@ -853,6 +895,9 @@ var SupportWidgetElement = class extends HTMLElement {
853
895
  countdownEl.classList.add("is-hidden");
854
896
  }
855
897
  toastEl.classList.remove("success", "error", "show");
898
+ if (isSuccess && shouldCloseModal) {
899
+ this.close();
900
+ }
856
901
  }
857
902
  startToastCountdown(countdownEl, secondsEl, barEl) {
858
903
  const updateCountdown = () => {
@@ -895,12 +940,6 @@ var SupportWidgetElement = class extends HTMLElement {
895
940
  title: content.type === "success" ? "G\u1EEDi y\xEAu c\u1EA7u th\xE0nh c\xF4ng" : "G\u1EEDi y\xEAu c\u1EA7u th\u1EA5t b\u1EA1i"
896
941
  };
897
942
  }
898
- clearToastAutoCloseTimer() {
899
- if (this.toastAutoCloseTimer !== null) {
900
- window.clearTimeout(this.toastAutoCloseTimer);
901
- this.toastAutoCloseTimer = null;
902
- }
903
- }
904
943
  normalizeToastDuration(value) {
905
944
  if (!Number.isFinite(value) || value <= 0) {
906
945
  return 4e3;
@@ -952,7 +991,7 @@ var SupportWidgetElement = class extends HTMLElement {
952
991
  async submit() {
953
992
  var _a;
954
993
  this.clearCloseAfterSuccessTimer();
955
- this.hideToast();
994
+ this.hideToast(false);
956
995
  if (!this.validateRequiredFields()) {
957
996
  this.dispatchEvent(
958
997
  new CustomEvent(WIDGET_EVENTS.SUBMIT_ERROR, {
@@ -1042,8 +1081,8 @@ var SupportWidgetElement = class extends HTMLElement {
1042
1081
  })
1043
1082
  );
1044
1083
  this.closeAfterSuccessTimer = window.setTimeout(() => {
1045
- this.close();
1046
- }, 1200);
1084
+ this.hideToast();
1085
+ }, this.toastSuccessDuration);
1047
1086
  } catch (error) {
1048
1087
  const errorContent = mapHttpClientError(error);
1049
1088
  this.showToast(this.toToastPayload(errorContent));