UNPKG

@printcart/shopify-integration

Version:
1,331 lines 77.8 kB
var __defProp2 = Object.defineProperty; var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField2 = (obj, key, value) => { __defNormalProp2(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; var __accessCheck2 = (obj, member, msg) => { if (!member.has(obj)) throw TypeError("Cannot " + msg); }; var __privateGet2 = (obj, member, getter) => { __accessCheck2(obj, member, "read from private field"); return getter ? getter.call(obj) : member.get(obj); }; var __privateAdd2 = (obj, member, value) => { if (member.has(obj)) throw TypeError("Cannot add the same private member more than once"); member instanceof WeakSet ? member.add(obj) : member.set(obj, value); }; var __privateSet2 = (obj, member, value, setter) => { __accessCheck2(obj, member, "write to private field"); setter ? setter.call(obj, value) : member.set(obj, value); return value; }; var __privateMethod2 = (obj, member, method) => { __accessCheck2(obj, member, "access private method"); return method; }; const import_meta = {}; var _apiUrl, _designerUrl2, _designerInstance, _uploaderInstance, _quotationRequestInstance, _productForm, _cartForm, _initializeProductTools, initializeProductTools_fn, _openModal, openModal_fn, _closeModal, closeModal_fn, _registerCloseModal, registerCloseModal_fn, _openSelectModal, openSelectModal_fn, _modalTrap, modalTrap_fn, _addStyle, addStyle_fn, _handleUploadSuccess, handleUploadSuccess_fn, _handleDesignSuccess, handleDesignSuccess_fn, _registerUploaderEvents, registerUploaderEvents_fn, _registerDesignerEvents, registerDesignerEvents_fn, _getUnauthToken, getUnauthToken_fn, _getScriptSrc, getScriptSrc_fn, _getPrintcartProduct, getPrintcartProduct_fn, _createQuotationRequest, createQuotationRequest_fn, _getStoreDetail, getStoreDetail_fn, _createBtn, createBtn_fn, _openQRModal, openQRModal_fn, _closeQRModal, closeQRModal_fn, _initializeQuoteRequest, initializeQuoteRequest_fn, _handleQuotationRequest, handleQuotationRequest_fn, _quotationRequestOpen, quotationRequestOpen_fn, _language, language_fn, _applyLanguage, applyLanguage_fn; var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; var __accessCheck$1 = (obj, member, msg) => { if (!member.has(obj)) throw TypeError("Cannot " + msg); }; var __privateGet$1 = (obj, member, getter) => { __accessCheck$1(obj, member, "read from private field"); return getter ? getter.call(obj) : member.get(obj); }; var __privateAdd$1 = (obj, member, value) => { if (member.has(obj)) throw TypeError("Cannot add the same private member more than once"); member instanceof WeakSet ? member.add(obj) : member.set(obj, value); }; var __privateSet$1 = (obj, member, value, setter) => { __accessCheck$1(obj, member, "write to private field"); setter ? setter.call(obj, value) : member.set(obj, value); return value; }; var __privateMethod$1 = (obj, member, method) => { __accessCheck$1(obj, member, "access private method"); return method; }; var _designerUrl, _emitter$1, _initIframe$1, initIframe_fn$1, _registerEventListener, registerEventListener_fn, _createDesignUrl, createDesignUrl_fn, _emit$1, emit_fn$1; var events$1 = { exports: {} }; var R$1 = typeof Reflect === "object" ? Reflect : null; var ReflectApply$1 = R$1 && typeof R$1.apply === "function" ? R$1.apply : function ReflectApply2(target, receiver, args) { return Function.prototype.apply.call(target, receiver, args); }; var ReflectOwnKeys$1; if (R$1 && typeof R$1.ownKeys === "function") { ReflectOwnKeys$1 = R$1.ownKeys; } else if (Object.getOwnPropertySymbols) { ReflectOwnKeys$1 = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)); }; } else { ReflectOwnKeys$1 = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target); }; } function ProcessEmitWarning$1(warning) { if (console && console.warn) console.warn(warning); } var NumberIsNaN$1 = Number.isNaN || function NumberIsNaN2(value) { return value !== value; }; function EventEmitter$2() { EventEmitter$2.init.call(this); } events$1.exports = EventEmitter$2; events$1.exports.once = once2$1; EventEmitter$2.EventEmitter = EventEmitter$2; EventEmitter$2.prototype._events = void 0; EventEmitter$2.prototype._eventsCount = 0; EventEmitter$2.prototype._maxListeners = void 0; var defaultMaxListeners$1 = 10; function checkListener$1(listener) { if (typeof listener !== "function") { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } } Object.defineProperty(EventEmitter$2, "defaultMaxListeners", { enumerable: true, get: function() { return defaultMaxListeners$1; }, set: function(arg) { if (typeof arg !== "number" || arg < 0 || NumberIsNaN$1(arg)) { throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + "."); } defaultMaxListeners$1 = arg; } }); EventEmitter$2.init = function() { if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) { this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; } this._maxListeners = this._maxListeners || void 0; }; EventEmitter$2.prototype.setMaxListeners = function setMaxListeners(n) { if (typeof n !== "number" || n < 0 || NumberIsNaN$1(n)) { throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + "."); } this._maxListeners = n; return this; }; function _getMaxListeners$1(that) { if (that._maxListeners === void 0) return EventEmitter$2.defaultMaxListeners; return that._maxListeners; } EventEmitter$2.prototype.getMaxListeners = function getMaxListeners() { return _getMaxListeners$1(this); }; EventEmitter$2.prototype.emit = function emit(type) { var args = []; for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); var doError = type === "error"; var events2 = this._events; if (events2 !== void 0) doError = doError && events2.error === void 0; else if (!doError) return false; if (doError) { var er; if (args.length > 0) er = args[0]; if (er instanceof Error) { throw er; } var err = new Error("Unhandled error." + (er ? " (" + er.message + ")" : "")); err.context = er; throw err; } var handler = events2[type]; if (handler === void 0) return false; if (typeof handler === "function") { ReflectApply$1(handler, this, args); } else { var len = handler.length; var listeners22 = arrayClone$1(handler, len); for (var i = 0; i < len; ++i) ReflectApply$1(listeners22[i], this, args); } return true; }; function _addListener$1(target, type, listener, prepend) { var m; var events2; var existing; checkListener$1(listener); events2 = target._events; if (events2 === void 0) { events2 = target._events = /* @__PURE__ */ Object.create(null); target._eventsCount = 0; } else { if (events2.newListener !== void 0) { target.emit( "newListener", type, listener.listener ? listener.listener : listener ); events2 = target._events; } existing = events2[type]; } if (existing === void 0) { existing = events2[type] = listener; ++target._eventsCount; } else { if (typeof existing === "function") { existing = events2[type] = prepend ? [listener, existing] : [existing, listener]; } else if (prepend) { existing.unshift(listener); } else { existing.push(listener); } m = _getMaxListeners$1(target); if (m > 0 && existing.length > m && !existing.warned) { existing.warned = true; var w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type) + " listeners added. Use emitter.setMaxListeners() to increase limit"); w.name = "MaxListenersExceededWarning"; w.emitter = target; w.type = type; w.count = existing.length; ProcessEmitWarning$1(w); } } return target; } EventEmitter$2.prototype.addListener = function addListener(type, listener) { return _addListener$1(this, type, listener, false); }; EventEmitter$2.prototype.on = EventEmitter$2.prototype.addListener; EventEmitter$2.prototype.prependListener = function prependListener(type, listener) { return _addListener$1(this, type, listener, true); }; function onceWrapper$1() { if (!this.fired) { this.target.removeListener(this.type, this.wrapFn); this.fired = true; if (arguments.length === 0) return this.listener.call(this.target); return this.listener.apply(this.target, arguments); } } function _onceWrap$1(target, type, listener) { var state = { fired: false, wrapFn: void 0, target, type, listener }; var wrapped = onceWrapper$1.bind(state); wrapped.listener = listener; state.wrapFn = wrapped; return wrapped; } EventEmitter$2.prototype.once = function once(type, listener) { checkListener$1(listener); this.on(type, _onceWrap$1(this, type, listener)); return this; }; EventEmitter$2.prototype.prependOnceListener = function prependOnceListener(type, listener) { checkListener$1(listener); this.prependListener(type, _onceWrap$1(this, type, listener)); return this; }; EventEmitter$2.prototype.removeListener = function removeListener(type, listener) { var list, events2, position, i, originalListener; checkListener$1(listener); events2 = this._events; if (events2 === void 0) return this; list = events2[type]; if (list === void 0) return this; if (list === listener || list.listener === listener) { if (--this._eventsCount === 0) this._events = /* @__PURE__ */ Object.create(null); else { delete events2[type]; if (events2.removeListener) this.emit("removeListener", type, list.listener || listener); } } else if (typeof list !== "function") { position = -1; for (i = list.length - 1; i >= 0; i--) { if (list[i] === listener || list[i].listener === listener) { originalListener = list[i].listener; position = i; break; } } if (position < 0) return this; if (position === 0) list.shift(); else { spliceOne$1(list, position); } if (list.length === 1) events2[type] = list[0]; if (events2.removeListener !== void 0) this.emit("removeListener", type, originalListener || listener); } return this; }; EventEmitter$2.prototype.off = EventEmitter$2.prototype.removeListener; EventEmitter$2.prototype.removeAllListeners = function removeAllListeners(type) { var listeners22, events2, i; events2 = this._events; if (events2 === void 0) return this; if (events2.removeListener === void 0) { if (arguments.length === 0) { this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; } else if (events2[type] !== void 0) { if (--this._eventsCount === 0) this._events = /* @__PURE__ */ Object.create(null); else delete events2[type]; } return this; } if (arguments.length === 0) { var keys = Object.keys(events2); var key; for (i = 0; i < keys.length; ++i) { key = keys[i]; if (key === "removeListener") continue; this.removeAllListeners(key); } this.removeAllListeners("removeListener"); this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; return this; } listeners22 = events2[type]; if (typeof listeners22 === "function") { this.removeListener(type, listeners22); } else if (listeners22 !== void 0) { for (i = listeners22.length - 1; i >= 0; i--) { this.removeListener(type, listeners22[i]); } } return this; }; function _listeners$1(target, type, unwrap) { var events2 = target._events; if (events2 === void 0) return []; var evlistener = events2[type]; if (evlistener === void 0) return []; if (typeof evlistener === "function") return unwrap ? [evlistener.listener || evlistener] : [evlistener]; return unwrap ? unwrapListeners$1(evlistener) : arrayClone$1(evlistener, evlistener.length); } EventEmitter$2.prototype.listeners = function listeners(type) { return _listeners$1(this, type, true); }; EventEmitter$2.prototype.rawListeners = function rawListeners(type) { return _listeners$1(this, type, false); }; EventEmitter$2.listenerCount = function(emitter, type) { if (typeof emitter.listenerCount === "function") { return emitter.listenerCount(type); } else { return listenerCount$1.call(emitter, type); } }; EventEmitter$2.prototype.listenerCount = listenerCount$1; function listenerCount$1(type) { var events2 = this._events; if (events2 !== void 0) { var evlistener = events2[type]; if (typeof evlistener === "function") { return 1; } else if (evlistener !== void 0) { return evlistener.length; } } return 0; } EventEmitter$2.prototype.eventNames = function eventNames() { return this._eventsCount > 0 ? ReflectOwnKeys$1(this._events) : []; }; function arrayClone$1(arr, n) { var copy = new Array(n); for (var i = 0; i < n; ++i) copy[i] = arr[i]; return copy; } function spliceOne$1(list, index) { for (; index + 1 < list.length; index++) list[index] = list[index + 1]; list.pop(); } function unwrapListeners$1(arr) { var ret = new Array(arr.length); for (var i = 0; i < ret.length; ++i) { ret[i] = arr[i].listener || arr[i]; } return ret; } function once2$1(emitter, name) { return new Promise(function(resolve, reject) { function errorListener(err) { emitter.removeListener(name, resolver); reject(err); } function resolver() { if (typeof emitter.removeListener === "function") { emitter.removeListener("error", errorListener); } resolve([].slice.call(arguments)); } eventTargetAgnosticAddListener$1(emitter, name, resolver, { once: true }); if (name !== "error") { addErrorHandlerIfEventEmitter$1(emitter, errorListener, { once: true }); } }); } function addErrorHandlerIfEventEmitter$1(emitter, handler, flags) { if (typeof emitter.on === "function") { eventTargetAgnosticAddListener$1(emitter, "error", handler, flags); } } function eventTargetAgnosticAddListener$1(emitter, name, listener, flags) { if (typeof emitter.on === "function") { if (flags.once) { emitter.once(name, listener); } else { emitter.on(name, listener); } } else if (typeof emitter.addEventListener === "function") { emitter.addEventListener(name, function wrapListener(arg) { if (flags.once) { emitter.removeEventListener(name, wrapListener); } listener(arg); }); } else { throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); } } var EE = events$1.exports; const IFRAME_WRAPPER_ID$1 = "pc-designer-iframe-wrapper"; const IFRAME_ID$1 = "pc-designer-iframe"; class PrintcartDesigner { constructor(config) { __privateAdd$1(this, _initIframe$1); __privateAdd$1(this, _registerEventListener); __privateAdd$1(this, _createDesignUrl); __privateAdd$1(this, _emit$1); __publicField(this, "token"); __publicField(this, "productId"); __publicField(this, "options"); __privateAdd$1(this, _designerUrl, void 0); __privateAdd$1(this, _emitter$1, void 0); var _a; this.token = config.token; this.productId = config.productId; this.options = config.options; __privateSet$1(this, _designerUrl, ((_a = this.options) == null ? void 0 : _a.designerUrl) ? this.options.designerUrl : {}.VITE_CUSTOMIZER_URL ? {}.VITE_CUSTOMIZER_URL : "https://customizer.printcart.com"); __privateSet$1(this, _emitter$1, new EE()); if (!this.token || !this.productId) { console.error("Missing Config Params"); return; } __privateMethod$1(this, _initIframe$1, initIframe_fn$1).call(this); __privateMethod$1(this, _registerEventListener, registerEventListener_fn).call(this); } render() { const wrapper = document.getElementById(IFRAME_WRAPPER_ID$1); const iframe = document.getElementById(IFRAME_ID$1); if (!iframe || !(iframe instanceof HTMLIFrameElement) || !wrapper) { console.error("Can not find iframe element"); return; } const url = __privateMethod$1(this, _createDesignUrl, createDesignUrl_fn).call(this); iframe.src = url.href; wrapper.style.opacity = "1"; wrapper.style.visibility = "visible"; __privateMethod$1(this, _emit$1, emit_fn$1).call(this, "rendered"); } close() { const wrapper = document.getElementById(IFRAME_WRAPPER_ID$1); if (!wrapper) { console.error("Can not find iframe element"); return; } wrapper.style.opacity = "0"; wrapper.style.visibility = "hidden"; __privateMethod$1(this, _emit$1, emit_fn$1).call(this, "closed"); } editDesign(designId) { const url = __privateMethod$1(this, _createDesignUrl, createDesignUrl_fn).call(this); url.searchParams.set("design_id", designId); url.searchParams.set("task", "edit"); const wrapper = document.getElementById(IFRAME_WRAPPER_ID$1); const iframe = document.getElementById(IFRAME_ID$1); if (!iframe || !(iframe instanceof HTMLIFrameElement) || !wrapper) { console.error("Can not find iframe element"); return; } iframe.src = url.href; wrapper.style.opacity = "1"; wrapper.style.visibility = "visible"; __privateMethod$1(this, _emit$1, emit_fn$1).call(this, "edit"); } on(event, callback) { __privateGet$1(this, _emitter$1).on(event, callback); return this; } } _designerUrl = /* @__PURE__ */ new WeakMap(); _emitter$1 = /* @__PURE__ */ new WeakMap(); _initIframe$1 = /* @__PURE__ */ new WeakSet(); initIframe_fn$1 = function() { const wrapper = document.createElement("div"); wrapper.id = IFRAME_WRAPPER_ID$1; wrapper.style.cssText = "position:fixed;top:0;left:0;width:100vw;height:100vh;opacity:0;visibility:hidden;z-index:99999"; const iframe = document.createElement("iframe"); iframe.id = IFRAME_ID$1; iframe.width = "100%"; iframe.height = "100%"; wrapper.appendChild(iframe); document.body.appendChild(wrapper); }; _registerEventListener = /* @__PURE__ */ new WeakSet(); registerEventListener_fn = function() { window.addEventListener( "message", (event) => { if (event.origin === __privateGet$1(this, _designerUrl) && event.data.message === "closeDesignTool") { const wrapper = document.getElementById(IFRAME_WRAPPER_ID$1); if (!wrapper) return; wrapper.style.opacity = "0"; wrapper.style.visibility = "hidden"; __privateMethod$1(this, _emit$1, emit_fn$1).call(this, "closed"); } if (event.data.message === "finishLoad") { const iframe = document.getElementById(IFRAME_ID$1); __privateMethod$1(this, _emit$1, emit_fn$1).call(this, "render-finish"); if (iframe && iframe instanceof HTMLIFrameElement && iframe.contentWindow) { iframe.contentWindow.postMessage( { message: "customSettings", settings: this.options }, __privateGet$1(this, _designerUrl) ); } } if (event.data.message === "finishProcess") { __privateMethod$1(this, _emit$1, emit_fn$1).call(this, "upload-success", event.data.data.data); } if (event.data.message === "finishUpdate") { __privateMethod$1(this, _emit$1, emit_fn$1).call(this, "edit-success", event.data.data.data); } if (event.data.message === "uploadError") { __privateMethod$1(this, _emit$1, emit_fn$1).call(this, "upload-error", event.data); } }, false ); }; _createDesignUrl = /* @__PURE__ */ new WeakSet(); createDesignUrl_fn = function() { const url = new URL(__privateGet$1(this, _designerUrl)); url.searchParams.set("api_key", this.token); url.searchParams.set("product_id", this.productId); url.searchParams.set("parentUrl", window.location.href); return url; }; _emit$1 = /* @__PURE__ */ new WeakSet(); emit_fn$1 = function(event, ...args) { __privateGet$1(this, _emitter$1).emit(event, ...args); }; var __accessCheck = (obj, member, msg) => { if (!member.has(obj)) throw TypeError("Cannot " + msg); }; var __privateGet = (obj, member, getter) => { __accessCheck(obj, member, "read from private field"); return getter ? getter.call(obj) : member.get(obj); }; var __privateAdd = (obj, member, value) => { if (member.has(obj)) throw TypeError("Cannot add the same private member more than once"); member instanceof WeakSet ? member.add(obj) : member.set(obj, value); }; var __privateSet = (obj, member, value, setter) => { __accessCheck(obj, member, "write to private field"); setter ? setter.call(obj, value) : member.set(obj, value); return value; }; var __privateMethod = (obj, member, method) => { __accessCheck(obj, member, "access private method"); return method; }; var _unauthToken, _entityId, _iframeUrl, _emitter, _locale, _entityType, _emit, emit_fn, _initIframe, initIframe_fn, _messageEventListener, messageEventListener_fn; var events = { exports: {} }; var R = typeof Reflect === "object" ? Reflect : null; var ReflectApply = R && typeof R.apply === "function" ? R.apply : function ReflectApply22(target, receiver, args) { return Function.prototype.apply.call(target, receiver, args); }; var ReflectOwnKeys; if (R && typeof R.ownKeys === "function") { ReflectOwnKeys = R.ownKeys; } else if (Object.getOwnPropertySymbols) { ReflectOwnKeys = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)); }; } else { ReflectOwnKeys = function ReflectOwnKeys2(target) { return Object.getOwnPropertyNames(target); }; } function ProcessEmitWarning(warning) { if (console && console.warn) console.warn(warning); } var NumberIsNaN = Number.isNaN || function NumberIsNaN22(value) { return value !== value; }; function EventEmitter() { EventEmitter.init.call(this); } events.exports = EventEmitter; events.exports.once = once2; EventEmitter.EventEmitter = EventEmitter; EventEmitter.prototype._events = void 0; EventEmitter.prototype._eventsCount = 0; EventEmitter.prototype._maxListeners = void 0; var defaultMaxListeners = 10; function checkListener(listener) { if (typeof listener !== "function") { throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener); } } Object.defineProperty(EventEmitter, "defaultMaxListeners", { enumerable: true, get: function() { return defaultMaxListeners; }, set: function(arg) { if (typeof arg !== "number" || arg < 0 || NumberIsNaN(arg)) { throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + "."); } defaultMaxListeners = arg; } }); EventEmitter.init = function() { if (this._events === void 0 || this._events === Object.getPrototypeOf(this)._events) { this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; } this._maxListeners = this._maxListeners || void 0; }; EventEmitter.prototype.setMaxListeners = function setMaxListeners2(n) { if (typeof n !== "number" || n < 0 || NumberIsNaN(n)) { throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + "."); } this._maxListeners = n; return this; }; function _getMaxListeners(that) { if (that._maxListeners === void 0) return EventEmitter.defaultMaxListeners; return that._maxListeners; } EventEmitter.prototype.getMaxListeners = function getMaxListeners2() { return _getMaxListeners(this); }; EventEmitter.prototype.emit = function emit2(type) { var args = []; for (var i = 1; i < arguments.length; i++) args.push(arguments[i]); var doError = type === "error"; var events2 = this._events; if (events2 !== void 0) doError = doError && events2.error === void 0; else if (!doError) return false; if (doError) { var er; if (args.length > 0) er = args[0]; if (er instanceof Error) { throw er; } var err = new Error("Unhandled error." + (er ? " (" + er.message + ")" : "")); err.context = er; throw err; } var handler = events2[type]; if (handler === void 0) return false; if (typeof handler === "function") { ReflectApply(handler, this, args); } else { var len = handler.length; var listeners22 = arrayClone(handler, len); for (var i = 0; i < len; ++i) ReflectApply(listeners22[i], this, args); } return true; }; function _addListener(target, type, listener, prepend) { var m; var events2; var existing; checkListener(listener); events2 = target._events; if (events2 === void 0) { events2 = target._events = /* @__PURE__ */ Object.create(null); target._eventsCount = 0; } else { if (events2.newListener !== void 0) { target.emit( "newListener", type, listener.listener ? listener.listener : listener ); events2 = target._events; } existing = events2[type]; } if (existing === void 0) { existing = events2[type] = listener; ++target._eventsCount; } else { if (typeof existing === "function") { existing = events2[type] = prepend ? [listener, existing] : [existing, listener]; } else if (prepend) { existing.unshift(listener); } else { existing.push(listener); } m = _getMaxListeners(target); if (m > 0 && existing.length > m && !existing.warned) { existing.warned = true; var w = new Error("Possible EventEmitter memory leak detected. " + existing.length + " " + String(type) + " listeners added. Use emitter.setMaxListeners() to increase limit"); w.name = "MaxListenersExceededWarning"; w.emitter = target; w.type = type; w.count = existing.length; ProcessEmitWarning(w); } } return target; } EventEmitter.prototype.addListener = function addListener2(type, listener) { return _addListener(this, type, listener, false); }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.prependListener = function prependListener2(type, listener) { return _addListener(this, type, listener, true); }; function onceWrapper() { if (!this.fired) { this.target.removeListener(this.type, this.wrapFn); this.fired = true; if (arguments.length === 0) return this.listener.call(this.target); return this.listener.apply(this.target, arguments); } } function _onceWrap(target, type, listener) { var state = { fired: false, wrapFn: void 0, target, type, listener }; var wrapped = onceWrapper.bind(state); wrapped.listener = listener; state.wrapFn = wrapped; return wrapped; } EventEmitter.prototype.once = function once3(type, listener) { checkListener(listener); this.on(type, _onceWrap(this, type, listener)); return this; }; EventEmitter.prototype.prependOnceListener = function prependOnceListener2(type, listener) { checkListener(listener); this.prependListener(type, _onceWrap(this, type, listener)); return this; }; EventEmitter.prototype.removeListener = function removeListener2(type, listener) { var list, events2, position, i, originalListener; checkListener(listener); events2 = this._events; if (events2 === void 0) return this; list = events2[type]; if (list === void 0) return this; if (list === listener || list.listener === listener) { if (--this._eventsCount === 0) this._events = /* @__PURE__ */ Object.create(null); else { delete events2[type]; if (events2.removeListener) this.emit("removeListener", type, list.listener || listener); } } else if (typeof list !== "function") { position = -1; for (i = list.length - 1; i >= 0; i--) { if (list[i] === listener || list[i].listener === listener) { originalListener = list[i].listener; position = i; break; } } if (position < 0) return this; if (position === 0) list.shift(); else { spliceOne(list, position); } if (list.length === 1) events2[type] = list[0]; if (events2.removeListener !== void 0) this.emit("removeListener", type, originalListener || listener); } return this; }; EventEmitter.prototype.off = EventEmitter.prototype.removeListener; EventEmitter.prototype.removeAllListeners = function removeAllListeners2(type) { var listeners22, events2, i; events2 = this._events; if (events2 === void 0) return this; if (events2.removeListener === void 0) { if (arguments.length === 0) { this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; } else if (events2[type] !== void 0) { if (--this._eventsCount === 0) this._events = /* @__PURE__ */ Object.create(null); else delete events2[type]; } return this; } if (arguments.length === 0) { var keys = Object.keys(events2); var key; for (i = 0; i < keys.length; ++i) { key = keys[i]; if (key === "removeListener") continue; this.removeAllListeners(key); } this.removeAllListeners("removeListener"); this._events = /* @__PURE__ */ Object.create(null); this._eventsCount = 0; return this; } listeners22 = events2[type]; if (typeof listeners22 === "function") { this.removeListener(type, listeners22); } else if (listeners22 !== void 0) { for (i = listeners22.length - 1; i >= 0; i--) { this.removeListener(type, listeners22[i]); } } return this; }; function _listeners(target, type, unwrap) { var events2 = target._events; if (events2 === void 0) return []; var evlistener = events2[type]; if (evlistener === void 0) return []; if (typeof evlistener === "function") return unwrap ? [evlistener.listener || evlistener] : [evlistener]; return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); } EventEmitter.prototype.listeners = function listeners2(type) { return _listeners(this, type, true); }; EventEmitter.prototype.rawListeners = function rawListeners2(type) { return _listeners(this, type, false); }; EventEmitter.listenerCount = function(emitter, type) { if (typeof emitter.listenerCount === "function") { return emitter.listenerCount(type); } else { return listenerCount.call(emitter, type); } }; EventEmitter.prototype.listenerCount = listenerCount; function listenerCount(type) { var events2 = this._events; if (events2 !== void 0) { var evlistener = events2[type]; if (typeof evlistener === "function") { return 1; } else if (evlistener !== void 0) { return evlistener.length; } } return 0; } EventEmitter.prototype.eventNames = function eventNames2() { return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : []; }; function arrayClone(arr, n) { var copy = new Array(n); for (var i = 0; i < n; ++i) copy[i] = arr[i]; return copy; } function spliceOne(list, index) { for (; index + 1 < list.length; index++) list[index] = list[index + 1]; list.pop(); } function unwrapListeners(arr) { var ret = new Array(arr.length); for (var i = 0; i < ret.length; ++i) { ret[i] = arr[i].listener || arr[i]; } return ret; } function once2(emitter, name) { return new Promise(function(resolve, reject) { function errorListener(err) { emitter.removeListener(name, resolver); reject(err); } function resolver() { if (typeof emitter.removeListener === "function") { emitter.removeListener("error", errorListener); } resolve([].slice.call(arguments)); } eventTargetAgnosticAddListener(emitter, name, resolver, { once: true }); if (name !== "error") { addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true }); } }); } function addErrorHandlerIfEventEmitter(emitter, handler, flags) { if (typeof emitter.on === "function") { eventTargetAgnosticAddListener(emitter, "error", handler, flags); } } function eventTargetAgnosticAddListener(emitter, name, listener, flags) { if (typeof emitter.on === "function") { if (flags.once) { emitter.once(name, listener); } else { emitter.on(name, listener); } } else if (typeof emitter.addEventListener === "function") { emitter.addEventListener(name, function wrapListener(arg) { if (flags.once) { emitter.removeEventListener(name, wrapListener); } listener(arg); }); } else { throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter); } } var EventEmitter$1 = events.exports; const IFRAME_WRAPPER_ID = "pc-uploader-iframe-wrapper"; const IFRAME_ID = "pc-uploader-iframe"; class PrintcartUploader { constructor(config) { __privateAdd(this, _emit); __privateAdd(this, _initIframe); __privateAdd(this, _messageEventListener); __privateAdd(this, _unauthToken, void 0); __privateAdd(this, _entityId, void 0); __privateAdd(this, _iframeUrl, void 0); __privateAdd(this, _emitter, void 0); __privateAdd(this, _locale, void 0); __privateAdd(this, _entityType, void 0); __privateSet(this, _unauthToken, config.token); __privateSet(this, _entityId, config.sideId || config.productId); __privateSet(this, _entityType, config.productId ? "product" : "side"); __privateSet(this, _iframeUrl, config.uploaderUrl ? config.uploaderUrl : "https://upload-tool.pages.dev"); __privateSet(this, _emitter, new EventEmitter$1()); __privateSet(this, _locale, config.locale); if (!__privateGet(this, _unauthToken) || !__privateGet(this, _entityId)) { console.warn("Missing Config Params."); return; } __privateMethod(this, _initIframe, initIframe_fn).call(this); __privateMethod(this, _messageEventListener, messageEventListener_fn).call(this); } get locale() { return __privateGet(this, _locale); } open() { let wrapper = document.getElementById(IFRAME_WRAPPER_ID); let iframe = document.getElementById(IFRAME_ID); const url = new URL(__privateGet(this, _iframeUrl)); url.searchParams.set("token", __privateGet(this, _unauthToken)); if (__privateGet(this, _entityType) === "side") { url.searchParams.set("sideId", __privateGet(this, _entityId)); } else if (__privateGet(this, _entityType) === "product") { url.searchParams.set("productId", __privateGet(this, _entityId)); } url.searchParams.set("parentUrl", window.location.href); if (!iframe || !(iframe instanceof HTMLIFrameElement) || !wrapper) { console.warn("Can not find iframe element."); return; } iframe.src = url.href; wrapper.style.opacity = "1"; wrapper.style.visibility = "visible"; __privateMethod(this, _emit, emit_fn).call(this, "open"); } close() { let wrapper = document.getElementById(IFRAME_WRAPPER_ID); if (!wrapper) { console.error("Can not find iframe element"); return; } wrapper.style.opacity = "0"; wrapper.style.visibility = "hidden"; } on(event, callback) { __privateGet(this, _emitter).on(event, callback); return this; } } _unauthToken = /* @__PURE__ */ new WeakMap(); _entityId = /* @__PURE__ */ new WeakMap(); _iframeUrl = /* @__PURE__ */ new WeakMap(); _emitter = /* @__PURE__ */ new WeakMap(); _locale = /* @__PURE__ */ new WeakMap(); _entityType = /* @__PURE__ */ new WeakMap(); _emit = /* @__PURE__ */ new WeakSet(); emit_fn = function(event, ...args) { __privateGet(this, _emitter).emit(event, ...args); }; _initIframe = /* @__PURE__ */ new WeakSet(); initIframe_fn = function() { let wrapper = document.createElement("div"); wrapper.id = IFRAME_WRAPPER_ID; wrapper.style.cssText = "position:fixed;top:0;left:0;width:100vw;height:100vh;opacity:0;visibility:hidden;z-index:99999"; let iframe = document.createElement("iframe"); iframe.id = IFRAME_ID; iframe.width = "100%"; iframe.height = "100%"; iframe.style.borderWidth = "0"; wrapper.appendChild(iframe); document.body.appendChild(wrapper); }; _messageEventListener = /* @__PURE__ */ new WeakSet(); messageEventListener_fn = function() { let wrapper = document.getElementById(IFRAME_WRAPPER_ID); window.addEventListener( "message", (event) => { var _a; const originURL = new URL(event.origin); const iframeURL = new URL(__privateGet(this, _iframeUrl)); if (originURL.host === iframeURL.host) { if (event.data.uploaderEvent === "close" && wrapper) { wrapper.style.opacity = "0"; wrapper.style.visibility = "hidden"; __privateMethod(this, _emit, emit_fn).call(this, "close"); } if (event.data.uploaderEvent === "upload-success") { __privateMethod(this, _emit, emit_fn).call(this, "upload-success", event.data.data); } if (event.data.uploaderEvent === "upload-error") { __privateMethod(this, _emit, emit_fn).call(this, "upload-error", event.data.error); } const locale = __privateGet(this, _locale); const iframe = document.getElementById(IFRAME_ID); if (iframe && iframe instanceof HTMLIFrameElement) { __privateMethod(this, _emit, emit_fn).call(this, "onload"); if (locale && event.data.uploaderEvent === "loaded" && event.data.finished) { console.log("test"); iframe.focus(); (_a = iframe.contentWindow) == null ? void 0 : _a.postMessage( { locale }, __privateGet(this, _iframeUrl) ); } } } }, false ); }; var main = ""; class PrintcartDesignerShopify { constructor() { __privateAdd2(this, _initializeProductTools); __privateAdd2(this, _openModal); __privateAdd2(this, _closeModal); __privateAdd2(this, _registerCloseModal); __privateAdd2(this, _openSelectModal); __privateAdd2(this, _modalTrap); __privateAdd2(this, _addStyle); __privateAdd2(this, _handleUploadSuccess); __privateAdd2(this, _handleDesignSuccess); __privateAdd2(this, _registerUploaderEvents); __privateAdd2(this, _registerDesignerEvents); __privateAdd2(this, _getUnauthToken); __privateAdd2(this, _getScriptSrc); __privateAdd2(this, _getPrintcartProduct); __privateAdd2(this, _createQuotationRequest); __privateAdd2(this, _getStoreDetail); __privateAdd2(this, _createBtn); __privateAdd2(this, _openQRModal); __privateAdd2(this, _closeQRModal); __privateAdd2(this, _initializeQuoteRequest); __privateAdd2(this, _handleQuotationRequest); __privateAdd2(this, _quotationRequestOpen); __privateAdd2(this, _language); __privateAdd2(this, _applyLanguage); __privateAdd2(this, _apiUrl, void 0); __publicField2(this, "token"); __publicField2(this, "productId"); __publicField2(this, "options"); __privateAdd2(this, _designerUrl2, void 0); __privateAdd2(this, _designerInstance, void 0); __privateAdd2(this, _uploaderInstance, void 0); __privateAdd2(this, _quotationRequestInstance, void 0); __privateAdd2(this, _productForm, void 0); __privateAdd2(this, _cartForm, void 0); __publicField2(this, "locales"); this.token = __privateMethod2(this, _getUnauthToken, getUnauthToken_fn).call(this); this.productId = null; __privateSet2(this, _quotationRequestInstance, false); this.options = window.PrintcartDesignerShopifyOptions; __privateSet2(this, _apiUrl, {}.VITE_API_URL ? {}.VITE_API_URL : "https://api.printcart.com/v1/"); __privateSet2(this, _designerUrl2, {}.VITE_CUSTOMIZER_URL ? {}.VITE_CUSTOMIZER_URL : "https://customizer.printcart.com"); __privateSet2(this, _productForm, document.querySelector('form[action$="/cart/add"]')); __privateSet2(this, _cartForm, document.querySelector( 'form[action$="/cart/add"][data-type="add-to-cart-form"]' )); this.locales = { en: { start_design: "Start Design", pc_select_header: "Choose a way to design this product", upload_a_full_design: "Upload a full design", upload_design_file: "Upload Design file", have_a_complete_design: "Have a complete design", have_your_own_design: "Have your own design", design_here_online: "Design here online", already_have_a_design: "Already have your concept", customize_every_details: "Customize every details", request_us_to_design: "Request Us to Design", share_your_idea: "Share your ideas in a brief", our_designers_do_st: "Our designers will craft a custom design for you", note_desc: "Brief of what you would like designing", file_desc: "Upload any reference images or design files" }, es: { start_design: "Crear Dise\xF1o", pc_select_header: "Elija una forma de dise\xF1ar este producto", upload_a_full_design: "Sube tu dise\xF1o", upload_design_file: "Subir archivo de dise\xF1o", have_a_complete_design: "Tienes el dise\xF1o listo", have_your_own_design: "Tienes tu propio dise\xF1ador", design_here_online: "Dise\xF1a en linea aqu\xED", already_have_a_design: "Ya tienes tu idea lista", customize_every_details: " Personaliza todos los detalles", request_us_to_design: "Request Us to Design", share_your_idea: "Share your ideas in a brief", our_designers_do_st: "Our designers will craft a custom design for you", note_desc: "Brief of what you would like designing", file_desc: "Upload any reference images or design files" } }; if (!__privateGet2(this, _productForm)) { throw new Error( "This script can only be used inside a Shopify Product Page." ); } __privateMethod2(this, _addStyle, addStyle_fn).call(this); let variantId = null; let variantSelect = __privateGet2(this, _productForm).querySelector( 'form[action$="/cart/add"] [name="id"]' ); if (!variantSelect) { variantSelect = document.querySelector( 'form[action$="/cart/add"] [name="id"]' ); } variantId = variantSelect == null ? void 0 : variantSelect.value; variantSelect == null ? void 0 : variantSelect.addEventListener("change", () => { variantId = variantSelect.value; __privateMethod2(this, _initializeProductTools, initializeProductTools_fn).call(this, variantId); }); __privateMethod2(this, _initializeProductTools, initializeProductTools_fn).call(this, variantId); } } _apiUrl = new WeakMap(); _designerUrl2 = new WeakMap(); _designerInstance = new WeakMap(); _uploaderInstance = new WeakMap(); _quotationRequestInstance = new WeakMap(); _productForm = new WeakMap(); _cartForm = new WeakMap(); _initializeProductTools = new WeakSet(); initializeProductTools_fn = async function(variantId) { var _a, _b, _c; if (!variantId) { const shopifyMetaData = (_a = window == null ? void 0 : window.ShopifyAnalytics) == null ? void 0 : _a.meta; variantId = shopifyMetaData == null ? void 0 : shopifyMetaData.selectedVariantId; } if (!variantId) { throw new Error("Can not find product variant ID"); } const printcartProduct = await __privateMethod2(this, _getPrintcartProduct, getPrintcartProduct_fn).call(this, variantId); this.productId = (_b = printcartProduct == null ? void 0 : printcartProduct.data) == null ? void 0 : _b.id; const isDesignEnabled = printcartProduct.data.enable_design; const isUploadEnabled = printcartProduct.data.enable_upload; const isQuotationRequest = printcartProduct.data.enable_request_quote; await __privateMethod2(this, _language, language_fn).call(this); if (isDesignEnabled) { __privateSet2(this, _designerInstance, new PrintcartDesigner({ token: this.token, productId: this.productId, options: { ...(_c = this.options) == null ? void 0 : _c.designerOptions, designerUrl: __privateGet2(this, _designerUrl2) } })); __privateMethod2(this, _registerDesignerEvents, registerDesignerEvents_fn).call(this); } if (isUploadEnabled) { __privateSet2(this, _uploaderInstance, new PrintcartUploader({ token: this.token, productId: this.productId })); __privateMethod2(this, _registerUploaderEvents, registerUploaderEvents_fn).call(this); } if (isQuotationRequest) { __privateSet2(this, _quotationRequestInstance, true); __privateMethod2(this, _initializeQuoteRequest, initializeQuoteRequest_fn).call(this, printcartProduct.data); } if (isUploadEnabled || isDesignEnabled || isQuotationRequest) { __privateMethod2(this, _createBtn, createBtn_fn).call(this); } await __privateMethod2(this, _openSelectModal, openSelectModal_fn).call(this); await __privateMethod2(this, _registerCloseModal, registerCloseModal_fn).call(this); await __privateMethod2(this, _modalTrap, modalTrap_fn).call(this); await __privateMethod2(this, _applyLanguage, applyLanguage_fn).call(this); }; _openModal = new WeakSet(); openModal_fn = function() { const modal = document.getElementById("pc-select_wrap"); if (modal) { modal.style.display = "flex"; document.body.classList.add("pc-overflow"); } const closeBtn = modal == null ? void 0 : modal.querySelector("#pc-select_close-btn"); if (closeBtn && closeBtn instanceof HTMLButtonElement) closeBtn.focus(); }; _closeModal = new WeakSet(); closeModal_fn = function() { const modal = document.getElementById("pc-select_wrap"); if (modal) { modal.style.display = "none"; } document.body.classList.remove("pc-overflow"); }; _registerCloseModal = new WeakSet(); registerCloseModal_fn = function() { const closeModalBtn = document.getElementById("pc-select_close-btn"); const backdropCloseModal = document.getElementById("pc-content-overlay"); const handleClose = (e) => { if (e.key === "Escape") { __privateMethod2(this, _closeModal, closeModal_fn).call(this); } }; window.addEventListener("keydown", handleClose); closeModalBtn == null ? void 0 : closeModalBtn.addEventListener("click", () => __privateMethod2(this, _closeModal, closeModal_fn).call(this)); backdropCloseModal == null ? void 0 : backdropCloseModal.addEventListener("click", () => { const iframeWrap = document.getElementById("pc-designer-iframe-wrapper"); if ((iframeWrap == null ? void 0 : iframeWrap.style.visibility) !== "visible") { __privateMethod2(this, _closeModal, closeModal_fn).call(this); } }); }; _openSelectModal = new WeakSet(); openSelectModal_fn = function() { const uploadImgSrc = "https://files.printcart.com/common/upload.svg"; const designImgSrc = "https://files.printcart.com/common/design.svg"; const quoteImgSrc = "https://files.printcart.com/common/quote.svg"; const buttonUploader = `<button class="pc-select_btn" id="pc-select_btn_upload"> <div aria-hidden="true" class="pc-select_btn_wrap"> <div class="pc-select_btn_img"> <div class="pc-select_btn_img_inner"> <img src="${uploadImgSrc}" alt="Printcart Uploader" /> </div> </div> <div class="pc-select_btn_content"> <div class="pc-select_btn_content_inner"> <h2 class="pc-title" data-i18n="upload_a_full_design"></h2> <ul> <li data-i18n="have_a_complete_design"></li> <li data-i18n="have_your_own_design"></li> </ul> </div> </div> </div> <div class="visually-hidden" data-i18n="upload_design_file"></div> </button>`; const buttonDesigner = `<button class="pc-select_btn" id="pc-select_btn_design"> <div aria-hidden="true" class="pc-select_btn_wrap"> <div class="pc-select_btn_img"> <div class="pc-select_btn_img_inner"> <img src="${designImgSrc}" alt="Printcart Designer" /> </div> </div> <div class="pc-select_btn_content"> <div class="pc-select_btn_content_inner"> <h2 class="pc-title" data-i18n="design_here_online"></h2> <ul> <li data-i18n="already_have_a_design"></li> <li data-i18n="customize_every_details"></li> </ul> </div> </div> </div> <div class="visually-hidden" data-i18n="upload_design_file"></div> </button>`; const buttonQuoteRequest = `<button class="pc-select_btn" id="pc-select_btn_quote_request"> <div aria-hidden="true" class="pc-select_btn_wrap"> <div class="pc-select_btn_img"> <div class="pc-select_btn_img_inner"> <img src="${quoteImgSrc}" alt="Printcart Quotation Request" /> </div> </div> <div class="pc-select_btn_content"> <div class="pc-select_btn_content_inner"> <h2 class="pc-title" data-i18n="request_us_to_design"></h2> <ul> <li data-i18n="share_your_idea"></li> <li data-i18n="our_designers_do_st"></li> </ul> </div> </div> </div> <div class="visually-hidden" data-i18n="upload_design_file"></div> </button>`; const inner = ` <button aria-label="Close" id="pc-select_close-btn">