{"version":3,"file":"handle-update-ui-16bd7c72.js","sources":["../../../client/src/javascripts/customer_pages/_prism-builder/common/tools/text/font-list.js","../../../client/src/javascripts/customer_pages/_prism-builder/utils/private-mode.js","../../../client/src/javascripts/customer_pages/_prism-builder/common/page-base.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/quantity/quantity-pricing-tools.js","../../../client/src/javascripts/customer_pages/_prism-builder/quantity/price-and-quantity-base.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/utils/category-info.js","../../../node_modules/smart-mixin/index.js","../../../node_modules/react-mixin/index.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/stash-fns.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/prism-builder-custom-sections.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/card-top-nav-active.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/chevron.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/misc/address-form.jsx","../../../node_modules/tinycolor2/esm/tinycolor.js","../../../node_modules/@livelink/snapster/dist/edge.js","../../../node_modules/@livelink/snapster/dist/box.js","../../../node_modules/@livelink/snapster/dist/grid.js","../../../node_modules/@livelink/snapster/dist/renderer.js","../../../node_modules/@livelink/snapster/dist/snap.js","../../../node_modules/@livelink/snapster/dist/snapster.js","../../javascripts/libs/stacktrace.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/logger.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/prism-quality.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/geom/point.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/slots/utils.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/slots/imageLoaders.js","../../../client/src/javascripts/customer_pages/_prism-builder/common/slot-tools/simple/constants.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/geom/line.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/geom/polygon.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/slots/slotBase.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/slots/matrix.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/slots/imageSlot.js","../../../client/src/javascripts/customer_pages/_prism-builder/utils/text-preview-url.js","../../../client/src/javascripts/customer_pages/_prism-builder/utils/has-foil-text.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/slots/textSlot.js","../../../node_modules/lodash/isNumber.js","../../../client/src/javascripts/customer_pages/_prism-builder/stores/useSlotStore.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/slots/customSlots.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/custom-colour-history.js","../../../client/src/javascripts/customer_pages/_prism-builder/utils/filled-image-slot-confirmation.js","../../../client/src/javascripts/customer_pages/_utils/tools/prism_builder_history.js","../../../client/src/javascripts/customer_pages/_prism-builder/trays/prism-builder-reloader.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/prism-builder-history.js","../../../node_modules/parchment/dist/parchment.js","../../../node_modules/quill/core/polyfill.js","../../../node_modules/fast-diff/diff.js","../../../node_modules/object-keys/isArguments.js","../../../node_modules/object-keys/implementation.js","../../../node_modules/object-keys/index.js","../../../node_modules/has-symbols/shams.js","../../../node_modules/has-tostringtag/shams.js","../../../node_modules/has-symbols/index.js","../../../node_modules/get-intrinsic/node_modules/function-bind/implementation.js","../../../node_modules/get-intrinsic/node_modules/function-bind/index.js","../../../node_modules/has/node_modules/function-bind/implementation.js","../../../node_modules/has/node_modules/function-bind/index.js","../../../node_modules/has/src/index.js","../../../node_modules/get-intrinsic/index.js","../../../node_modules/call-bind/node_modules/function-bind/implementation.js","../../../node_modules/call-bind/node_modules/function-bind/index.js","../../../node_modules/call-bind/index.js","../../../node_modules/call-bind/callBound.js","../../../node_modules/is-arguments/index.js","../../../node_modules/define-properties/node_modules/has-property-descriptors/index.js","../../../node_modules/define-properties/index.js","../../../node_modules/object-is/implementation.js","../../../node_modules/object-is/polyfill.js","../../../node_modules/object-is/shim.js","../../../node_modules/object-is/index.js","../../../node_modules/is-regex/index.js","../../../node_modules/functions-have-names/index.js","../../../node_modules/regexp.prototype.flags/implementation.js","../../../node_modules/regexp.prototype.flags/polyfill.js","../../../node_modules/regexp.prototype.flags/shim.js","../../../node_modules/regexp.prototype.flags/index.js","../../../node_modules/is-date-object/index.js","../../../node_modules/deep-equal/index.js","../../../node_modules/extend/index.js","../../../node_modules/quill-delta/lib/op.js","../../../node_modules/quill-delta/lib/delta.js","../../../node_modules/quill/blots/break.js","../../../node_modules/quill/blots/text.js","../../../node_modules/quill/blots/inline.js","../../../node_modules/quill/blots/block.js","../../../node_modules/quill/formats/code.js","../../../node_modules/quill/blots/cursor.js","../../../node_modules/clone/clone.js","../../../node_modules/quill/core/editor.js","../../../node_modules/quill/node_modules/eventemitter3/index.js","../../../node_modules/quill/core/logger.js","../../../node_modules/quill/core/emitter.js","../../../node_modules/quill/core/module.js","../../../node_modules/quill/core/selection.js","../../../node_modules/quill/core/theme.js","../../../node_modules/quill/core/quill.js","../../../node_modules/quill/blots/container.js","../../../node_modules/quill/blots/embed.js","../../../node_modules/quill/blots/scroll.js","../../../node_modules/quill/formats/align.js","../../../node_modules/quill/formats/color.js","../../../node_modules/quill/formats/background.js","../../../node_modules/quill/formats/direction.js","../../../node_modules/quill/formats/font.js","../../../node_modules/quill/formats/size.js","../../../node_modules/quill/modules/clipboard.js","../../../node_modules/quill/modules/history.js","../../../node_modules/quill/modules/keyboard.js","../../../node_modules/quill/core.js","../../../node_modules/lodash/_baseLodash.js","../../../node_modules/lodash/_LodashWrapper.js","../../../node_modules/lodash/_flatRest.js","../../../node_modules/lodash/_metaMap.js","../../../node_modules/lodash/_getData.js","../../../node_modules/lodash/_realNames.js","../../../node_modules/lodash/_getFuncName.js","../../../node_modules/lodash/_LazyWrapper.js","../../../node_modules/lodash/_wrapperClone.js","../../../node_modules/lodash/wrapperLodash.js","../../../node_modules/lodash/_isLaziable.js","../../../node_modules/lodash/_createFlow.js","../../../node_modules/lodash/flow.js","../../../node_modules/lodash/_basePropertyOf.js","../../../node_modules/lodash/_escapeHtmlChar.js","../../../node_modules/lodash/escape.js","../../../node_modules/lodash/_unescapeHtmlChar.js","../../../node_modules/lodash/unescape.js","../../../node_modules/quill/modules/toolbar.js","../../../node_modules/quill/formats/bold.js","../../../node_modules/quill/formats/italic.js","../../../node_modules/quill/formats/underline.js","../../../node_modules/quill/formats/strike.js","../../../client/src/javascripts/customer_pages/_utils/quill/formats/font-style.js","../../../client/src/javascripts/customer_pages/_utils/font-size-converter.js","../../../client/src/javascripts/customer_pages/_utils/quill/formats/size-style.js","../../../client/src/javascripts/customer_pages/_utils/lazy-google-font.js","../../../client/src/javascripts/customer_pages/_utils/quill.js","../../../client/src/javascripts/customer_pages/_prism-builder/stores/useTabTray.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/prism-view-canvas.js","../../../client/src/javascripts/customer_pages/_prism-builder/context/app-type.js","../../../client/src/javascripts/customer_pages/_prism-builder/desktop/notices/change-orientation-notice.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/edit-area/prism-view.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/common/slot-tools/simple/image-slot-tool-simple.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/misc/image-watcher.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/canvas-image.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/common/chiclets-base.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/utils/hide-used-photos.js","../../../client/src/javascripts/customer_pages/_prism-builder/common/trays/photos-tray-base.jsx","../../../client/src/javascripts/customer_pages/_utils/refresh-on-events.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/common/trays/favourites-tray-item-preview.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/common/trays/favourites-tray-item-preview-desktop.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/utils/drag-item.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/utils/spinner.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/common/trays/layouts-tray-base.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/trays/option-tray-mixin.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/common/trays/options/title.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/common/trays/options/price-difference.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/common/trays/variable-tray-base.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/common/trays/wraps-tray-base.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/mobile/mobile-add-to-cart-button.jsx","../../../node_modules/zustand/esm/middleware.mjs","../../../client/src/javascripts/customer_pages/_prism-builder/stores/usePageStore.js","../../../client/src/javascripts/customer_pages/_prism-builder/common/notices/add-to-cart-notice-base.jsx","../../../client/src/javascripts/customer_pages/_prism-builder/utils/card-nav.js","../../../node_modules/lodash/_baseFilter.js","../../../node_modules/lodash/filter.js","../../../client/src/javascripts/customer_pages/_prism-builder/prism/record-uploads.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/set-bleed-warning.js","../../../client/src/javascripts/customer_pages/_prism-builder/dispatcher-methods/register-page-navigation.js","../../../client/src/javascripts/customer_pages/_prism-builder/dispatcher-methods/register-page-loader.js","../../../client/src/javascripts/customer_pages/_prism-builder/dispatcher-methods/register-preview-mode.js","../../../client/src/javascripts/customer_pages/_prism-builder/dispatcher-methods/register-upload-process.js","../../../client/src/javascripts/customer_pages/_prism-builder/misc/handle-update-ui.js"],"sourcesContent":["\nimport { FontStore } from '../../../utils/stores';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\n// --------------------------------------------\n\nfunction fontList() {\n const options = {};\n\n for (let i = 0; i < FontStore.list.length; i++) {\n ((font) => {\n if (!options[font.group]) {\n options[font.group] = [];\n }\n\n const fontName = (font.name === 'Sans' ? 'Open Sans' : font.name);\n\n options[font.group].push({\n name: fontName,\n title: font.title === 'Sans' ? 'Open Sans' : font.title,\n thumb: `${location.origin}/edt/fnt/smp/${usePrismItemStore.getState().prismItem.sec}/${encodeURIComponent(fontName)}`,\n });\n })(FontStore.list[i]);\n }\n\n return ['Classic', 'Modern', 'Script', 'Themed']\n .reduce((memo, group) => memo.concat(options[group]), [])\n .filter(Boolean)\n .sort(sorter);\n\n function sorter(a, b) {\n if (a.title < b.title) {\n return -1;\n }\n if (a.title > b.title) {\n return 1;\n }\n return 0;\n }\n}\n\n// --------------------------------------------\n\nexport default fontList;\n","const isSafari =\n !!navigator.vendor &&\n navigator.vendor.indexOf('Apple') > -1 &&\n navigator.userAgent &&\n !navigator.userAgent.match('CriOS');\n\nasync function testPrivateMode() {\n try {\n const testFile = new File(['test'], 'test.txt', { type: 'text/plain' });\n const db = await new Promise((resolve, reject) => {\n const request = indexedDB.open('fileTest', 1);\n request.onerror = () => reject(request.error);\n request.onsuccess = () => resolve(request.result);\n request.onupgradeneeded = (e) => {\n const db = e.target.result;\n db.createObjectStore('files', { keyPath: 'id' });\n };\n });\n\n const transaction = db.transaction(['files'], 'readwrite');\n const store = transaction.objectStore('files');\n await store.put({ id: 1, file: testFile });\n return false;\n } catch (e) {\n return true; // Return true if Private mode (likely saving failed)\n }\n}\n\nconst safariPrivateMode = async () => isSafari && (await testPrivateMode());\n\nexport { safariPrivateMode };\n","'use strict';\n\n// Import Libraries\nimport React from 'react';\n// Import JS Modules\nimport { builderDispatch, PrismUI } from '../../_utils/ui';\nimport { ThumbnailStore } from '../utils/stores';\nimport { TYPES } from './tray-base';\nimport { safariPrivateMode } from '../utils/private-mode';\nimport { useGenStore } from 'stores/useGenStore';\n\nclass PageBase extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handlePrismItemLoaded = this.handlePrismItemLoaded.bind(this);\n this.handleChicletClicked = this.handleChicletClicked.bind(this);\n this.handleEntiretyClick = this.handleEntiretyClick.bind(this);\n\n this.state = {\n tray: {},\n canvas: { maxHeight: 0, maxWidth: 0 }\n };\n\n this.prevSlot = {};\n this.prismItemLoaded = false;\n }\n\n async componentDidMount() {\n this.dispatchToken = builderDispatch.register(payload => {\n switch (payload.type) {\n case PrismUI.ITEM_LOADED:\n this.handlePrismItemLoaded();\n break;\n case PrismUI.SLOT_CHANGED:\n this.handleSlotChanged(payload);\n break;\n }\n });\n\n const isSafariPrivate = await safariPrivateMode();\n\n if (window.newrelic) {\n window.newrelic.setCustomAttribute('safariPrivateMode', isSafariPrivate);\n }\n\n useGenStore.setState({ isSafariPrivate });\n\n this.setupResizeObserver(window.ResizeObserver);\n }\n\n componentWillUnmount() {\n builderDispatch.unregister(this.dispatchToken);\n\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n }\n }\n\n handlePrismItemLoaded() {\n if (!this.prismItemLoaded) {\n this.updateCanvasSize();\n }\n }\n\n handleSlotChanged({ slot = {}, view = {} }, onPhotosTrayShown = null) {\n if ((view.selected && this.isSpineText(view.selected))\n || this.isSpineText(this.prevSlot)) {\n this.prevSlot = view.selected;\n return;\n }\n if (slot && slot.isImage && !slot.img) {\n // Always set the tray to photos tray for new UI\n const slotIsColour = slot.isColour();\n const trayName = (this.props.viewport.isMobile) ? TYPES.photos : TYPES.design;\n\n this.setState(() => ({\n tray: {\n name: trayName,\n visible: true\n }\n }), () => {\n if (ThumbnailStore.empty() && !slotIsColour) {\n this.fireAddPhotos();\n }\n if (typeof onPhotosTrayShown === 'function') {\n onPhotosTrayShown();\n }\n });\n }\n if (view.selected) this.prevSlot = view.selected;\n }\n\n handleChicletClicked(name) {\n this.setState(({ tray: { name: prevName } }) => {\n name || (name = prevName); // if name is undefined then use the previous one in order to toggle the tray\n\n return {\n tray: {\n name,\n visible: true\n }\n };\n });\n }\n\n handleEntiretyClick(e) {\n // clear any selected slots in the editor\n if ($(e.target).closest('.ub-view-bg').length === 0) {\n activeView.selectSlotById(null);\n }\n }\n\n isSpineText(slot) {\n return slot.id === 'spine-text';\n }\n\n setupResizeObserver(ResizeObserverClass) {\n this.resizeObserver = new ResizeObserverClass(entries => {\n try {\n // Use requestAnimationFrame to defer DOM updates\n requestAnimationFrame(() => {\n if (entries.some(entry => entry.target === this.main)) {\n if (this.prismItemLoaded) {\n this.updateCanvasSizeSafely();\n }\n }\n });\n } catch (error) {\n console.error('Error in ResizeObserver callback:', error);\n }\n });\n \n if (this.main) {\n this.resizeObserver.observe(this.main);\n }\n }\n\n updateCanvasSizeSafely() {\n const canvasWidth = this.main.offsetWidth;\n const canvasHeight = this.main.offsetHeight;\n const canvas = this.state.canvas;\n \n // Update the canvas dimensions only if they are different\n if (canvas.width !== canvasWidth || canvas.height !== canvasHeight) {\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n }\n }\n \n updateCanvasSize() {\n window.requestAnimationFrame(() => {\n // Calculate the available space within the prismContainerElement\n const { height: maxHeight, width: maxWidth } = this.prismContainerExtents;\n\n this.setState({\n canvas: {\n maxHeight,\n maxWidth\n }\n });\n });\n }\n}\n\nexport default PageBase;\n","import QuantityPricingToolsBase from '../../_utils/tools/quantity-pricing-tools';\nimport isCard from '../utils/is-card';\nimport { isAlbum } from '../trays/tray-determiner';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\n\nfunction showQuantityDropdown() {\n return wkData.show_quantity_dropdown;\n}\n\nlet transientUnitPrices;\n\nclass QuantityPricingTools extends QuantityPricingToolsBase {\n constructor(product = wkData) {\n super({\n useSetsWherePossible: ['bundle', 'set'].includes(wkData.collection_name) || showQuantityDropdown(),\n productSetCopies: product.set_copies,\n unitPrices: transientUnitPrices || product.prices.prices.unit_prices,\n });\n\n this.perPagePrices = product.prices.prices.per_page_prices;\n }\n\n generateOptions() {\n const productName = (() => {\n if (isCard()) {\n return 'card';\n }\n if (isAlbum()) {\n return 'book';\n }\n })();\n\n return super.generateOptions(productName);\n }\n\n getUnitPriceForQuantity(quantity = wkData.copies) {\n let price = this.getBasePrice(quantity);\n\n if (this.perPagePrices && this.additionalPages > 0) {\n price += (this.additionalPages * this.perPagePrices.extra_page_price);\n }\n\n return price;\n }\n\n getBasePrice(quantity) {\n return super.getUnitPriceForQuantity(quantity);\n }\n\n get additionalPages() {\n if (this.perPagePrices) {\n const prismItem = usePrismItemStore.getState().prismItem;\n return Math.ceil((prismItem.pageCount - this.perPagePrices.free_pages) / this.perPagePrices.page_multiples);\n }\n\n return 0;\n }\n\n currentOrFirstAvailableCopies(previousValue = wkData.copies) {\n return super.currentOrFirstAvailableCopies(previousValue);\n }\n\n replaceUnitPrices(prices) {\n // temporarily overwrite unit prices with some arbritary value\n // used for price affecting chiclet options\n this.unitPrices = transientUnitPrices = [].concat(prices).map(({ price, from = 1 }) => ({\n price,\n from,\n }));\n }\n\n resetUnitPrices() {\n // revert the temporarily overwritten unit prices\n this.unitPrices = wkData.prices.prices.unit_prices;\n transientUnitPrices = undefined;\n return this;\n }\n\n get completeUnitPrices() {\n // inject the temporarily overwritten unit prices\n // into an object which resembles wkData.prices\n const prices = { ...wkData.prices };\n prices.prices.unit_prices = this.unitPrices;\n\n return prices;\n }\n\n productName(quantity = 1) {\n if (isCard()) {\n return quantity == 1 ? 'card' : 'cards';\n }\n if (isAlbum()) {\n return quantity == 1 ? 'book' : 'books';\n }\n\n return quantity == 1 ? 'copy' : 'copies';\n }\n}\n\nexport default QuantityPricingTools;\n","'use strict';\n\n// Import Libraries\nimport React from 'react';\n// Import JS Modules\nimport QuantityPricingTools from './quantity-pricing-tools';\nimport { PrismUI,\n builderDispatch } from '../../_utils/ui';\nimport Currency from '../../_utils/tools/currency';\nimport pluralize from '../../_utils/tools/pluralize';\n// Import JSX Modules\n\n// -----------------------------------------------------------\nclass PriceAndQuantityBase extends React.PureComponent {\n constructor(props) {\n super(props);\n }\n\n componentDidMount() {\n this.dispatchToken = builderDispatch.register(payload => {\n switch (payload.type) {\n case PrismUI.EVENT_QUANTITY_CHANGED:\n if (payload.value) {\n this.handleQuantityChange(payload.value);\n }\n this.forceUpdate();\n break;\n case PrismUI.ITEM_LOADED:\n this.handleItemLoaded();\n break;\n case PrismUI.OPTION_SELECTED:\n this.handleOptionSelected(payload);\n break;\n }\n });\n }\n\n componentWillUnmount() {\n builderDispatch.unregister(this.dispatchToken);\n }\n\n get quantityPricingTools() {\n return new QuantityPricingTools();\n }\n\n get isGenuineSet() {\n const {collection_name: collectionName} = wkData;\n\n return collectionName == 'set';\n }\n\n get selectOptions() {\n const {unit_quantity: unitQuantity} = wkData;\n\n return this.quantityPricingTools.generateOptions().map(({product, quantity, unitPrice, cost}) => {\n if (this.isGenuineSet) {\n product = `${pluralize('set', quantity)} of ${unitQuantity} ${pluralize(product, unitQuantity)}`;\n }\n\n const labelData = { product, quantity, unitPrice, unitQuantity, cost };\n\n return {\n value: quantity,\n label: this.renderOptionLabel(labelData),\n text: this.renderOptionText(labelData)\n };\n });\n }\n\n renderOptionText() {\n // Stub\n }\n\n renderOptionLabel({ product, quantity, unitPrice, unitQuantity, cost }) {\n return `${quantity} ${product} ${Currency.format(cost)} (${this.renderEachPrice(unitPrice, unitQuantity)} each)`;\n }\n\n renderEachPrice(unitPrice, unitQuantity) {\n const parts = [];\n\n // if there's a rounding error show the approximately symbol\n if (unitPrice % unitQuantity) {\n parts.push('~');\n }\n\n parts.push(Currency.format(Math.round(unitPrice / unitQuantity)));\n\n return parts.join('');\n }\n\n handleItemLoaded() {\n const copies = this.quantityPricingTools.resetUnitPrices().currentOrFirstAvailableCopies();\n this.handleQuantityChange(copies);\n this.forceUpdate();\n }\n\n handleOptionSelected({variable, option}) {\n if (variable.affects_price) {\n this.quantityPricingTools.replaceUnitPrices({price: option.minimum_price});\n this.forceUpdate();\n }\n }\n}\n\nexport default PriceAndQuantityBase;\n","import { usePrismItemStore } from 'stores/usePrismItemStore';\n\n// pulls information about the product's category from the server\n// used for descriptions and learning about filters and options\n\n// --------------------------------------------------------------------\n\nfunction categoryInfoUrl() {\n const prismItem = usePrismItemStore.getState().prismItem;\n\n if (prismItem.design_code) {\n return wkData.category_info_url.replace(/design_code=[^&]*/, `design_code=${prismItem.design_code}`);\n }\n\n return wkData.category_info_url;\n}\n\n// --------------------------------------------------------------------\n\nconst getCategoryInfo = (function () {\n const cachedData = {};\n\n return function () {\n const url = categoryInfoUrl();\n\n if (cachedData.hasOwnProperty(url)) {\n return Promise.resolve(cachedData[url]);\n }\n\n return fetch(url, {\n credentials: 'same-origin',\n })\n .then((response) => response.json())\n .then((data) => {\n cachedData[url] = data;\n\n return data;\n });\n };\n}());\n\n// --------------------------------------------------------------------\n\nfunction currentProductFilterInfo(options = {}) {\n return new Promise((resolve) => {\n getCategoryInfo()\n .then((data) => {\n const { platform = 'desktop' } = options;\n const platformAvailabilityKey = (data.platform_availabilities || {})[platform];\n\n data.products = data.products.filter((product) => product.platform_availability & platformAvailabilityKey);\n\n return data;\n })\n .then((data) => {\n const currentProduct = data.products.find((product) => product.id == wkData.product_id) || data.products[0] || {}; // this could be null if the product isn't legitimately available on the currently platform\n\n data.products = data.products.filter((product) => product.double_page == currentProduct.double_page);\n\n data.filters.forEach((filter) => {\n filter.options = (filter.options || []).filter((option) => data.products.some((product) => product.filters[filter.title] == option.title));\n });\n\n data.filters = data.filters.filter((filter) => filter.options.length > 0);\n\n resolve({\n product: currentProduct,\n data,\n });\n });\n });\n}\n\n// --------------------------------------------------------------------\n\nfunction findProductByFilters(products, filters) {\n products = [].concat(products);\n\n return products.find((product) => {\n for (const filter in filters) {\n if (product.filters[filter] != filters[filter]) return false;\n }\n\n return true;\n });\n}\n\n// --------------------------------------------------------------------\n\nfunction doFiltersMatchAProduct(products, filters) {\n return !!findProductByFilters(products, filters);\n}\n\n// --------------------------------------------------------------------\n\nfunction fireTransform(targetProductId, customFilters) {\n const prismItem = usePrismItemStore.getState().prismItem;\n const url = wkData.remember_url.replace(/remember/, 'transform');\n const params = {\n product_id: targetProductId,\n custom_filters: customFilters,\n prism_product_theme: prismItem.design_code\n };\n\n return fetch(url, {\n body: JSON.stringify(params),\n headers: {\n 'content-type': 'application/json'\n },\n method: 'POST',\n credentials: 'same-origin',\n }).then((response) => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then((response) => response.json()); // parses response to JSON\n}\n\n// --------------------------------------------------------------------\n\nexport {\n getCategoryInfo,\n currentProductFilterInfo,\n findProductByFilters,\n doFiltersMatchAProduct,\n fireTransform,\n};\n","function objToStr(x){ return Object.prototype.toString.call(x); };\n\nfunction returner(x) { return x; }\n\nfunction wrapIfFunction(thing){\n return typeof thing !== \"function\" ? thing\n : function(){\n return thing.apply(this, arguments);\n };\n}\n\nfunction setNonEnumerable(target, key, value){\n if (key in target){\n target[key] = value;\n }\n else {\n Object.defineProperty(target, key, {\n value: value,\n writable: true,\n configurable: true\n });\n }\n}\n\nfunction defaultNonFunctionProperty(left, right, key){\n if (left !== undefined && right !== undefined) {\n var getTypeName = function(obj){\n if (obj && obj.constructor && obj.constructor.name) {\n return obj.constructor.name;\n }\n else {\n return objToStr(obj).slice(8, -1);\n }\n };\n throw new TypeError('Cannot mixin key ' + key + ' because it is provided by multiple sources, '\n + 'and the types are ' + getTypeName(left) + ' and ' + getTypeName(right));\n }\n return left === undefined ? right : left;\n};\n\nfunction assertObject(obj, obj2){\n var type = objToStr(obj);\n if (type !== '[object Object]') {\n var displayType = obj.constructor ? obj.constructor.name : 'Unknown';\n var displayType2 = obj2.constructor ? obj2.constructor.name : 'Unknown';\n throw new Error('cannot merge returned value of type ' + displayType + ' with an ' + displayType2);\n }\n};\n\n\nvar mixins = module.exports = function makeMixinFunction(rules, _opts){\n var opts = _opts || {};\n\n if (!opts.unknownFunction) {\n opts.unknownFunction = mixins.ONCE;\n }\n\n if (!opts.nonFunctionProperty) {\n opts.nonFunctionProperty = defaultNonFunctionProperty;\n }\n\n return function applyMixin(source, mixin){\n Object.keys(mixin).forEach(function(key){\n var left = source[key], right = mixin[key], rule = rules[key];\n\n // this is just a weird case where the key was defined, but there's no value\n // behave like the key wasn't defined\n if (left === undefined && right === undefined) return;\n\n // do we have a rule for this key?\n if (rule) {\n // may throw here\n var fn = rule(left, right, key);\n setNonEnumerable(source, key, wrapIfFunction(fn));\n return;\n }\n\n var leftIsFn = typeof left === \"function\";\n var rightIsFn = typeof right === \"function\";\n\n // check to see if they're some combination of functions or undefined\n // we already know there's no rule, so use the unknown function behavior\n if (leftIsFn && right === undefined\n || rightIsFn && left === undefined\n || leftIsFn && rightIsFn) {\n // may throw, the default is ONCE so if both are functions\n // the default is to throw\n setNonEnumerable(source, key, wrapIfFunction(opts.unknownFunction(left, right, key)));\n return;\n }\n\n // we have no rule for them, one may be a function but one or both aren't\n // our default is MANY_MERGED_LOOSE which will merge objects, concat arrays\n // and throw if there's a type mismatch or both are primitives (how do you merge 3, and \"foo\"?)\n source[key] = opts.nonFunctionProperty(left, right, key);\n });\n };\n};\n\nmixins._mergeObjects = function(obj1, obj2) {\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n return obj1.concat(obj2);\n }\n\n assertObject(obj1, obj2);\n assertObject(obj2, obj1);\n\n var result = {};\n Object.keys(obj1).forEach(function(k){\n if (Object.prototype.hasOwnProperty.call(obj2, k)) {\n throw new Error('cannot merge returns because both have the ' + JSON.stringify(k) + ' key');\n }\n result[k] = obj1[k];\n });\n\n Object.keys(obj2).forEach(function(k){\n // we can skip the conflict check because all conflicts would already be found\n result[k] = obj2[k];\n });\n return result;\n};\n\n// define our built-in mixin types\nmixins.ONCE = function(left, right, key){\n if (left && right) {\n throw new TypeError('Cannot mixin ' + key + ' because it has a unique constraint.');\n }\n return left || right;\n};\n\nmixins.MANY = function(left, right, key){\n return function(){\n if (right) right.apply(this, arguments);\n return left ? left.apply(this, arguments) : undefined;\n };\n};\n\nmixins.MANY_MERGED_LOOSE = function(left, right, key) {\n if (left && right) {\n return mixins._mergeObjects(left, right);\n }\n return left || right;\n};\n\nmixins.MANY_MERGED = function(left, right, key){\n return function(){\n var res1 = right && right.apply(this, arguments);\n var res2 = left && left.apply(this, arguments);\n if (res1 && res2) {\n return mixins._mergeObjects(res1, res2)\n }\n return res2 || res1;\n };\n};\n\nmixins.REDUCE_LEFT = function(_left, _right, key){\n var left = _left || returner;\n var right = _right || returner;\n return function(){\n return right.call(this, left.apply(this, arguments));\n };\n};\n\nmixins.REDUCE_RIGHT = function(_left, _right, key){\n var left = _left || returner;\n var right = _right || returner;\n return function(){\n return left.call(this, right.apply(this, arguments));\n };\n};\n\n","var mixin = require('smart-mixin');\nvar assign = require('object-assign');\n\nvar mixinProto = mixin({\n // lifecycle stuff is as you'd expect\n componentDidMount: mixin.MANY,\n UNSAFE_componentWillMount: mixin.MANY,\n UNSAFE_componentWillReceiveProps: mixin.MANY,\n shouldComponentUpdate: mixin.ONCE,\n UNSAFE_componentWillUpdate: mixin.MANY,\n componentDidUpdate: mixin.MANY,\n componentWillUnmount: mixin.MANY,\n getChildContext: mixin.MANY_MERGED\n});\n\nfunction setDefaultProps(reactMixin) {\n var getDefaultProps = reactMixin.getDefaultProps;\n\n if (getDefaultProps) {\n reactMixin.defaultProps = getDefaultProps();\n\n delete reactMixin.getDefaultProps;\n }\n}\n\nfunction setInitialState(reactMixin) {\n var getInitialState = reactMixin.getInitialState;\n var UNSAFE_componentWillMount = reactMixin.UNSAFE_componentWillMount;\n\n function applyInitialState(instance) {\n var state = instance.state || {};\n assign(state, getInitialState.call(instance));\n instance.state = state;\n }\n\n if (getInitialState) {\n if (!UNSAFE_componentWillMount) {\n reactMixin.UNSAFE_componentWillMount = function() {\n applyInitialState(this);\n };\n } else {\n reactMixin.UNSAFE_componentWillMount = function() {\n applyInitialState(this);\n UNSAFE_componentWillMount.call(this);\n };\n }\n\n delete reactMixin.getInitialState;\n }\n}\n\nfunction mixinClass(reactClass, reactMixin) {\n setDefaultProps(reactMixin);\n setInitialState(reactMixin);\n\n var prototypeMethods = {};\n var staticProps = {};\n\n Object.keys(reactMixin).forEach(function(key) {\n if (key === 'mixins') {\n return; // Handled below to ensure proper order regardless of property iteration order\n }\n if (key === 'statics') {\n return; // gets special handling\n } else if (typeof reactMixin[key] === 'function') {\n prototypeMethods[key] = reactMixin[key];\n } else {\n staticProps[key] = reactMixin[key];\n }\n });\n\n mixinProto(reactClass.prototype, prototypeMethods);\n\n var mergePropTypes = function(left, right, key) {\n if (!left) return right;\n if (!right) return left;\n\n var result = {};\n Object.keys(left).forEach(function(leftKey) {\n if (!right[leftKey]) {\n result[leftKey] = left[leftKey];\n }\n });\n\n Object.keys(right).forEach(function(rightKey) {\n if (left[rightKey]) {\n result[rightKey] = function checkBothContextTypes() {\n return right[rightKey].apply(this, arguments) && left[rightKey].apply(this, arguments);\n };\n } else {\n result[rightKey] = right[rightKey];\n }\n });\n\n return result;\n };\n\n mixin({\n childContextTypes: mergePropTypes,\n contextTypes: mergePropTypes,\n propTypes: mixin.MANY_MERGED_LOOSE,\n defaultProps: mixin.MANY_MERGED_LOOSE\n })(reactClass, staticProps);\n\n // statics is a special case because it merges directly onto the class\n if (reactMixin.statics) {\n Object.getOwnPropertyNames(reactMixin.statics).forEach(function(key) {\n var left = reactClass[key];\n var right = reactMixin.statics[key];\n\n if (left !== undefined && right !== undefined) {\n throw new TypeError('Cannot mixin statics because statics.' + key + ' and Component.' + key + ' are defined.');\n }\n\n reactClass[key] = left !== undefined ? left : right;\n });\n }\n\n // If more mixins are defined, they need to run. This emulate's react's behavior.\n // See behavior in code at:\n // https://github.com/facebook/react/blob/41aa3496aa632634f650edbe10d617799922d265/src/isomorphic/classic/class/ReactClass.js#L468\n // Note the .reverse(). In React, a fresh constructor is created, then all mixins are mixed in recursively,\n // then the actual spec is mixed in last.\n //\n // With ES6 classes, the properties are already there, so smart-mixin mixes functions (a, b) -> b()a(), which is\n // the opposite of how React does it. If we reverse this array, we basically do the whole logic in reverse,\n // which makes the result the same. See the test for more.\n // See also:\n // https://github.com/facebook/react/blob/41aa3496aa632634f650edbe10d617799922d265/src/isomorphic/classic/class/ReactClass.js#L853\n if (reactMixin.mixins) {\n reactMixin.mixins.reverse().forEach(mixinClass.bind(null, reactClass));\n }\n\n return reactClass;\n}\n\nmodule.exports = (function() {\n var reactMixin = mixinProto;\n\n reactMixin.onClass = function(reactClass, mixin) {\n // we mutate the mixin so let's clone it\n mixin = assign({}, mixin);\n return mixinClass(reactClass, mixin);\n };\n\n reactMixin.decorate = function(mixin) {\n return function(reactClass) {\n return reactMixin.onClass(reactClass, mixin);\n };\n };\n\n return reactMixin;\n})();\n","\nconst imgStateHash = {};\n\n// -----------------------------------------------------------\n// stashFns\n// -----------------------------------------------------------\nlet localZoomFn;\nconst imgDefaults = {\n gamma: 1,\n zoom: 1,\n};\nconst stashFns = {\n setZoomFn(zoomFn) {\n localZoomFn = zoomFn;\n },\n\n getImgSlotRef(slot) {\n slot = slot || {};\n return `${slot.id}---${slot.imgId}`;\n },\n\n setImgStateValue(imgSlotRef, key, value) {\n if (!imgStateHash[imgSlotRef]) imgStateHash[imgSlotRef] = {}; // create a new hash for this particular image\n if (!isNaN(value)) {\n imgStateHash[imgSlotRef][key] = value;\n }\n },\n\n straightenChangeDelegator(imgSlotRef, angle) {\n this.setImgStateValue(imgSlotRef, 'straighten', Number(angle));\n },\n\n gammaChangeDelegator(imgSlotRef, gamma) {\n this.setImgStateValue(imgSlotRef, 'gamma', Number(gamma));\n },\n\n zoomChangeDelegator(imgSlotRef, zoom) {\n this.setImgStateValue(imgSlotRef, 'zoom', Number(zoom));\n },\n\n setEl1ZoomSlider(toZoom, zoom) {\n const imgSlotRef = this.getImgSlotRef(toZoom);\n this.zoomChangeDelegator(imgSlotRef, zoom);\n localZoomFn = localZoomFn || function () {};\n localZoomFn(zoom);\n },\n\n getImageStateValue(imgSlotRef, key) {\n const slotRefVals = imgStateHash[imgSlotRef] || {};\n let value = imgDefaults[key];\n if (slotRefVals.hasOwnProperty(key)) value = slotRefVals[key];\n if (isNaN(value)) value = imgDefaults[key];\n return value;\n },\n\n getAllImageStateValues(imgSlotRef, data) {\n data = data || {};\n return $.extend(true, {}, imgDefaults, imgStateHash[imgSlotRef] || {}, data);\n },\n};\n\nexport default stashFns;\n","import { usePrismItemStore } from 'stores/usePrismItemStore'\n\nconst PrismBuilderCustomSections = {\n all: [\n {\n title: 'Envelope',\n name: 'envelope',\n id: 'envelope',\n isEnabled() {\n return window.wkData.values.hasEnvelopeOption;\n },\n spread: {\n title: 'Envelope',\n customPageId: 'envelope',\n pages() {\n return [usePrismItemStore.getState().prismItem.product.sections.length];\n },\n spread: 0,\n },\n },\n ],\n enabledSectionCount() {\n let i = 0;\n\n this.all.forEach((section) => {\n if (section.isEnabled()) {\n i += 1;\n }\n });\n\n return i;\n },\n getById(id) {\n let section;\n this.all.forEach((s) => {\n if (s.id === id) {\n section = s;\n }\n });\n return section;\n },\n isAnySectionEnabled() {\n return this.enabledSectionCount() >= 1;\n },\n};\n\nexport default PrismBuilderCustomSections;\n","import { usePrismItemStore } from 'stores/usePrismItemStore';\nimport PrismBuilderCustomSections from './prism-builder-custom-sections';\n\nfunction cardTopNavActive() {\n const prismItem = usePrismItemStore.getState().prismItem;\n\n return prismItem && prismItem.product && prismItem.product.sections\n && (prismItem.product.sections.length + PrismBuilderCustomSections.enabledSectionCount() > 1)\n && window.wkData.product.type === 'wmcard';\n}\n\nexport default cardTopNavActive;\n","import React from 'react';\nimport classNames from 'classnames';\n\nconst chevronDirections = {\n previous: 'left',\n next: 'right'\n};\n\nconst Chevron = ({ rel, disabled, label, onClick }) => (\n <>\n { !disabled ?\n\n <button\n aria-label={`${chevronDirections[rel]} to ${label}`}\n className={classNames('btn btn-link chevron', rel)}\n disabled={disabled}\n rel={rel}\n onClick={onClick}\n >\n <i aria-hidden=\"true\" className={`fas fa-chevron-${chevronDirections[rel]}`} />\n </button>\n : null\n }\n </>\n);\nexport default Chevron;\n","import React, { Component, PureComponent } from 'react';\nimport ReactDOM from 'react-dom';\nimport { prismAction } from '../utils/stores';\n\nclass TextField extends Component {\n constructor (props) {\n super(props);\n\n this.state = {};\n this.handleChange = this.handleChange.bind(this);\n }\n\n UNSAFE_componentWillMount () {\n this.copyProps(this.props);\n }\n\n UNSAFE_componentWillReceiveProps (nextProps) {\n this.copyProps(nextProps);\n }\n\n render () {\n return (\n <input \n type=\"text\"\n className=\"form-control\"\n ref=\"input\"\n required\n value={ this.state.value }\n placeholder={ this.props.placeholder }\n autoComplete=\"no\"\n onChange={ this.handleChange } \n />\n );\n }\n\n getValue() {\n return ReactDOM.findDOMNode(this.refs.input).value;\n }\n\n handleChange (e) {\n this.setState({\n value: e.target.value\n });\n }\n\n copyProps (props) {\n this.setState(props);\n }\n}\n\nclass AddressForm extends PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {};\n this.handleSetAddress = this.setAddress.bind(this);\n }\n\n UNSAFE_componentWillMount () {\n if (this.props.address) {\n this.setAddress(this.props.address);\n }\n }\n\n UNSAFE_componentWillReceiveProps (nextProps) {\n if (nextProps.address) {\n this.setAddress(nextProps.address);\n }\n }\n\n render () {\n return (\n <form className=\"address-form\">\n <div className=\"form-row\">\n <TextField value={ this.state.name } placeholder=\"Name\" ref=\"name\" />\n </div>\n <div className=\"form-row\">\n <div className=\"col-6\">\n <TextField value={ this.state.streetAdd1 } placeholder=\"Address\" ref=\"streetAdd1\" />\n </div>\n <div className=\"col-6\">\n <TextField value={ this.state.streetAdd2 } placeholder=\"Apt, Suite, Building, etc. (optional)\" ref=\"streetAdd2\" />\n </div>\n </div>\n <div className=\"form-row\">\n <div className=\"col-6\">\n <TextField value={ this.state.city } placeholder=\"City\" ref=\"city\" />\n </div>\n <div className=\"col-3\">\n <TextField value={ this.state.state } placeholder=\"State\" ref=\"state\" />\n </div>\n <div className=\"col-3\">\n <TextField value={ this.state.zip } placeholder=\"Zip Code\" ref=\"zip\" />\n </div>\n </div>\n </form>\n );\n }\n\n getAddress () {\n return {\n name: this.refs.name.getValue(),\n streetAdd1: this.refs.streetAdd1.getValue(),\n streetAdd2: this.refs.streetAdd2.getValue(),\n city: this.refs.city.getValue(),\n state: this.refs.state.getValue(),\n zip: this.refs.zip.getValue(),\n country: this.refs.country ? this.refs.country.getValue() : 'US'\n };\n }\n\n setAddress (address) {\n const { name, streetAdd1, streetAdd2, city, state, zip, country } = address;\n\n this.setState({ name, streetAdd1, streetAdd2, city, state, zip, country });\n }\n}\n\nclass AddressModal extends Component {\n addressFields = ['name', 'streetAdd1', 'streetAdd2', 'city', 'state', 'zip'];\n\n constructor(props) {\n super(props);\n\n this.state = {};\n this.handleSetAddress = this.handleSetAddress.bind(this);\n }\n\n componentDidMount() {\n $(ReactDOM.findDOMNode(this)).modal({\n keyboard: true,\n show: false\n }).on('show.bs.modal', () => {\n this.setState({ address: Object.assign({}, wkData.values.returnAddress) });\n }).on('hidden.bs.modal', () => {\n this.setState({ address: null });\n });\n }\n\n componentWillUnmount() {\n $(ReactDOM.findDOMNode(this)).modal('hide');\n }\n\n render() {\n return (\n <div className=\"modal fade\">\n <div className=\"modal-dialog modal-lg\">\n <div className=\"modal-content\">\n <div className=\"modal-header\">\n <h5>Enter return address for your envelopes<sup>*</sup></h5>\n <button type=\"button\" className=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">×</span></button>\n </div>\n <div className=\"modal-body\">\n <AddressForm ref=\"addressForm\" address={ this.state.address } />\n </div>\n <div className=\"modal-footer\">\n <h6 className=\"flex-grow-1 text-left\"><sup>*</sup>Envelope printing not available for 1 hour cards</h6>\n <button className=\"btn btn-primary float-right\"\n data-dismiss=\"modal\"\n onClick={ this.handleSetAddress }>\n Done\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n handleSetAddress() {\n const address = this.address(),\n empty = this.isAddressEmpty(address);\n\n wkData.values.returnAddress = address;\n wkData.values.useReturnAddress = empty ? '' : 'yes';\n\n prismAction.save_wkdata();\n\n this.props.onDone();\n }\n\n address() {\n const address = this.refs.addressForm.getAddress();\n\n this.addressFields.forEach(function(field) {\n address[field] = address[field].trim();\n });\n\n return address;\n }\n\n isAddressEmpty(address) {\n let isEmpty = true;\n\n this.addressFields.forEach(function(field) {\n if (!!address[field]) {\n isEmpty = false;\n }\n });\n\n return isEmpty;\n }\n\n open() {\n $(ReactDOM.findDOMNode(this)).modal('show');\n }\n\n close() {\n $(ReactDOM.findDOMNode(this)).modal('hide');\n }\n}\n\nexport default AddressModal;\n","// This file is autogenerated. It's used to publish ESM to npm.\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\n// https://github.com/bgrins/TinyColor\n// Brian Grinstead, MIT License\n\nvar trimLeft = /^\\s+/;\nvar trimRight = /\\s+$/;\nfunction tinycolor(color, opts) {\n color = color ? color : \"\";\n opts = opts || {};\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n var rgb = inputToRGB(color);\n this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n if (this._r < 1) this._r = Math.round(this._r);\n if (this._g < 1) this._g = Math.round(this._g);\n if (this._b < 1) this._b = Math.round(this._b);\n this._ok = rgb.ok;\n}\ntinycolor.prototype = {\n isDark: function isDark() {\n return this.getBrightness() < 128;\n },\n isLight: function isLight() {\n return !this.isDark();\n },\n isValid: function isValid() {\n return this._ok;\n },\n getOriginalInput: function getOriginalInput() {\n return this._originalInput;\n },\n getFormat: function getFormat() {\n return this._format;\n },\n getAlpha: function getAlpha() {\n return this._a;\n },\n getBrightness: function getBrightness() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function getLuminance() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r / 255;\n GsRGB = rgb.g / 255;\n BsRGB = rgb.b / 255;\n if (RsRGB <= 0.03928) R = RsRGB / 12.92;else R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n if (GsRGB <= 0.03928) G = GsRGB / 12.92;else G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n if (BsRGB <= 0.03928) B = BsRGB / 12.92;else B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n return 0.2126 * R + 0.7152 * G + 0.0722 * B;\n },\n setAlpha: function setAlpha(value) {\n this._a = boundAlpha(value);\n this._roundA = Math.round(100 * this._a) / 100;\n return this;\n },\n toHsv: function toHsv() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return {\n h: hsv.h * 360,\n s: hsv.s,\n v: hsv.v,\n a: this._a\n };\n },\n toHsvString: function toHsvString() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = Math.round(hsv.h * 360),\n s = Math.round(hsv.s * 100),\n v = Math.round(hsv.v * 100);\n return this._a == 1 ? \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" : \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \" + this._roundA + \")\";\n },\n toHsl: function toHsl() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return {\n h: hsl.h * 360,\n s: hsl.s,\n l: hsl.l,\n a: this._a\n };\n },\n toHslString: function toHslString() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = Math.round(hsl.h * 360),\n s = Math.round(hsl.s * 100),\n l = Math.round(hsl.l * 100);\n return this._a == 1 ? \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" : \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \" + this._roundA + \")\";\n },\n toHex: function toHex(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function toHexString(allow3Char) {\n return \"#\" + this.toHex(allow3Char);\n },\n toHex8: function toHex8(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function toHex8String(allow4Char) {\n return \"#\" + this.toHex8(allow4Char);\n },\n toRgb: function toRgb() {\n return {\n r: Math.round(this._r),\n g: Math.round(this._g),\n b: Math.round(this._b),\n a: this._a\n };\n },\n toRgbString: function toRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \")\" : \"rgba(\" + Math.round(this._r) + \", \" + Math.round(this._g) + \", \" + Math.round(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function toPercentageRgb() {\n return {\n r: Math.round(bound01(this._r, 255) * 100) + \"%\",\n g: Math.round(bound01(this._g, 255) * 100) + \"%\",\n b: Math.round(bound01(this._b, 255) * 100) + \"%\",\n a: this._a\n };\n },\n toPercentageRgbString: function toPercentageRgbString() {\n return this._a == 1 ? \"rgb(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%)\" : \"rgba(\" + Math.round(bound01(this._r, 255) * 100) + \"%, \" + Math.round(bound01(this._g, 255) * 100) + \"%, \" + Math.round(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function toName() {\n if (this._a === 0) {\n return \"transparent\";\n }\n if (this._a < 1) {\n return false;\n }\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function toFilter(secondColor) {\n var hex8String = \"#\" + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = \"#\" + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n return \"progid:DXImageTransform.Microsoft.gradient(\" + gradientType + \"startColorstr=\" + hex8String + \",endColorstr=\" + secondHex8String + \")\";\n },\n toString: function toString(format) {\n var formatSet = !!format;\n format = format || this._format;\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n return formattedString || this.toHexString();\n },\n clone: function clone() {\n return tinycolor(this.toString());\n },\n _applyModification: function _applyModification(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function lighten() {\n return this._applyModification(_lighten, arguments);\n },\n brighten: function brighten() {\n return this._applyModification(_brighten, arguments);\n },\n darken: function darken() {\n return this._applyModification(_darken, arguments);\n },\n desaturate: function desaturate() {\n return this._applyModification(_desaturate, arguments);\n },\n saturate: function saturate() {\n return this._applyModification(_saturate, arguments);\n },\n greyscale: function greyscale() {\n return this._applyModification(_greyscale, arguments);\n },\n spin: function spin() {\n return this._applyModification(_spin, arguments);\n },\n _applyCombination: function _applyCombination(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function analogous() {\n return this._applyCombination(_analogous, arguments);\n },\n complement: function complement() {\n return this._applyCombination(_complement, arguments);\n },\n monochromatic: function monochromatic() {\n return this._applyCombination(_monochromatic, arguments);\n },\n splitcomplement: function splitcomplement() {\n return this._applyCombination(_splitcomplement, arguments);\n },\n // Disabled until https://github.com/bgrins/TinyColor/issues/254\n // polyad: function (number) {\n // return this._applyCombination(polyad, [number]);\n // },\n triad: function triad() {\n return this._applyCombination(polyad, [3]);\n },\n tetrad: function tetrad() {\n return this._applyCombination(polyad, [4]);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function (color, opts) {\n if (_typeof(color) == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n } else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n var rgb = {\n r: 0,\n g: 0,\n b: 0\n };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n if (_typeof(color) == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n a = boundAlpha(a);\n return {\n ok: ok,\n format: color.format || format,\n r: Math.min(255, Math.max(rgb.r, 0)),\n g: Math.min(255, Math.max(rgb.g, 0)),\n b: Math.min(255, Math.max(rgb.b, 0)),\n a: a\n };\n}\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// <http://www.w3.org/TR/css3-color/>\n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b) {\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n l = (max + min) / 2;\n if (max == min) {\n h = s = 0; // achromatic\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n l: l\n };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n function hue2rgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n if (s === 0) {\n r = g = b = l; // achromatic\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n var max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n var h,\n s,\n v = max;\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n if (max == min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h,\n s: s,\n v: v\n };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hsvToRgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n return {\n r: r * 255,\n g: g * 255,\n b: b * 255\n };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n return hex.join(\"\");\n}\n\n// `rgbaToHex`\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n return hex.join(\"\");\n}\n\n// `rgbaToArgbHex`\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];\n return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) return false;\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\ntinycolor.random = function () {\n return tinycolor.fromRatio({\n r: Math.random(),\n g: Math.random(),\n b: Math.random()\n });\n};\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\nfunction _desaturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\nfunction _saturate(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\nfunction _greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\nfunction _lighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\nfunction _brighten(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var rgb = tinycolor(color).toRgb();\n rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));\n rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));\n rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));\n return tinycolor(rgb);\n}\nfunction _darken(color, amount) {\n amount = amount === 0 ? 0 : amount || 10;\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction _spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\nfunction _complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\nfunction polyad(color, number) {\n if (isNaN(number) || number <= 0) {\n throw new Error(\"Argument to polyad must be a positive number\");\n }\n var hsl = tinycolor(color).toHsl();\n var result = [tinycolor(color)];\n var step = 360 / number;\n for (var i = 1; i < number; i++) {\n result.push(tinycolor({\n h: (hsl.h + i * step) % 360,\n s: hsl.s,\n l: hsl.l\n }));\n }\n return result;\n}\nfunction _splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [tinycolor(color), tinycolor({\n h: (h + 72) % 360,\n s: hsl.s,\n l: hsl.l\n }), tinycolor({\n h: (h + 216) % 360,\n s: hsl.s,\n l: hsl.l\n })];\n}\nfunction _analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results;) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\nfunction _monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h,\n s = hsv.s,\n v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n while (results--) {\n ret.push(tinycolor({\n h: h,\n s: s,\n v: v\n }));\n v = (v + modification) % 1;\n }\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function (color1, color2, amount) {\n amount = amount === 0 ? 0 : amount || 50;\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n var p = amount / 100;\n var rgba = {\n r: (rgb2.r - rgb1.r) * p + rgb1.r,\n g: (rgb2.g - rgb1.g) * p + rgb1.g,\n b: (rgb2.b - rgb1.b) * p + rgb1.b,\n a: (rgb2.a - rgb1.a) * p + rgb1.a\n };\n return tinycolor(rgba);\n};\n\n// Readability Functions\n// ---------------------\n// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n// `contrast`\n// Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\ntinycolor.readability = function (color1, color2) {\n var c1 = tinycolor(color1);\n var c2 = tinycolor(color2);\n return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);\n};\n\n// `isReadable`\n// Ensure that foreground and background color combinations meet WCAG2 guidelines.\n// The third argument is an optional Object.\n// the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n// the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n// If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n// *Example*\n// tinycolor.isReadable(\"#000\", \"#111\") => false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function (color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n out = false;\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function (baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors;\n level = args.level;\n size = args.size;\n for (var i = 0; i < colorList.length; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n if (tinycolor.isReadable(baseColor, bestColor, {\n level: level,\n size: size\n }) || !includeFallbackColors) {\n return bestColor;\n } else {\n args.includeFallbackColors = false;\n return tinycolor.mostReadable(baseColor, [\"#fff\", \"#000\"], args);\n }\n};\n\n// Big List of Colors\n// ------------------\n// <https://www.w3.org/TR/css-color-4/#named-colors>\nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n var flipped = {};\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) n = \"100%\";\n var processPercent = isPercentage(n);\n n = Math.min(max, Math.max(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(n - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return n % max / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return Math.min(1, Math.max(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf(\".\") != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf(\"%\") != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? \"0\" + c : \"\" + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = n * 100 + \"%\";\n }\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return parseIntFromHex(h) / 255;\n}\nvar matchers = function () {\n // <http://www.w3.org/TR/css3-values/#integers>\n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // <http://www.w3.org/TR/css3-values/#number-value>\n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n}();\n\n// `isValidCSSUnit`\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see `matchers` above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// `stringInputToObject`\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n color = color.replace(trimLeft, \"\").replace(trimRight, \"\").toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n } else if (color == \"transparent\") {\n return {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n format: \"name\"\n };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if (match = matchers.rgb.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3]\n };\n }\n if (match = matchers.rgba.exec(color)) {\n return {\n r: match[1],\n g: match[2],\n b: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsl.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3]\n };\n }\n if (match = matchers.hsla.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n l: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hsv.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3]\n };\n }\n if (match = matchers.hsva.exec(color)) {\n return {\n h: match[1],\n s: match[2],\n v: match[3],\n a: match[4]\n };\n }\n if (match = matchers.hex8.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex6.exec(color)) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if (match = matchers.hex4.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n a: convertHexToDecimal(match[4] + \"\" + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if (match = matchers.hex3.exec(color)) {\n return {\n r: parseIntFromHex(match[1] + \"\" + match[1]),\n g: parseIntFromHex(match[2] + \"\" + match[2]),\n b: parseIntFromHex(match[3] + \"\" + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n return false;\n}\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\n level: \"AA\",\n size: \"small\"\n };\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\n level: level,\n size: size\n };\n}\n\nexport { tinycolor as default };\n","export default class Edge {\n constructor(options) {\n this.direction = options.direction;\n this.position = options.position;\n this.type = options.type;\n }\n is(edge) {\n return this.direction === edge.direction && this.position === edge.position;\n }\n}\n","import Edge from \"./edge\";\nexport default class Box {\n constructor(options) {\n this.x = options.x;\n this.y = options.y;\n this.width = options.width;\n this.height = options.height;\n this.type = options.type;\n }\n get top() {\n return this.y;\n }\n get middle() {\n return this.y + (this.height / 2);\n }\n get bottom() {\n return this.y + this.height;\n }\n get left() {\n return this.x;\n }\n get center() {\n return this.x + (this.width / 2);\n }\n get right() {\n return this.x + this.width;\n }\n get horizontals() {\n return [\n new Edge({ direction: 'horizontal', position: this.top, type: this.type }),\n new Edge({ direction: 'horizontal', position: this.middle, type: this.type }),\n new Edge({ direction: 'horizontal', position: this.bottom, type: this.type })\n ];\n }\n get verticals() {\n return [\n new Edge({ direction: 'vertical', position: this.left, type: this.type }),\n new Edge({ direction: 'vertical', position: this.center, type: this.type }),\n new Edge({ direction: 'vertical', position: this.right, type: this.type })\n ];\n }\n get edges() {\n return [...this.horizontals, ...this.verticals];\n }\n}\n","export default class Grid {\n constructor() {\n this.horizontals = [];\n this.verticals = [];\n }\n add(box) {\n this.horizontals.push(...this.distinct(box.horizontals, this.horizontals));\n this.verticals.push(...this.distinct(box.verticals, this.verticals));\n }\n clear() {\n this.horizontals = [];\n this.verticals = [];\n }\n get edges() {\n return [...this.horizontals, ...this.verticals];\n }\n matches(box) {\n return this.edges.filter(edge => box.edges.some(compare => compare.is(edge)));\n }\n distinct(edges, existing) {\n return edges.filter(edge => !existing.some(compare => compare.is(edge)));\n }\n}\n","const defaultSetup = (options) => {\n const { element, edge } = options;\n const modifiers = [edge.direction];\n if (edge.type)\n modifiers.push(edge.type);\n const classes = ['guide', ...modifiers.map(modifier => `guide--${modifier}`)];\n element.className = classes.join(' ');\n};\nconst defaultPositioner = (options) => {\n const { element, edge } = options;\n element.style[edge.direction === 'horizontal' ? 'top' : 'left'] = `${edge.position}px`;\n};\nconst defaultReset = (options) => {\n const style = options.element.style;\n style.top = null;\n style.left = null;\n};\nexport default class Renderer {\n constructor(options) {\n this.document = options.document;\n this.container = options.container;\n this.setup = options.setup || defaultSetup;\n this.positioner = options.positioner || defaultPositioner;\n this.reset = options.reset || defaultReset;\n this.elements = [];\n }\n draw(edges) {\n let count = 0;\n for (const edge of edges) {\n const element = this.elements[count] || this.createElement();\n this.setup({ element, edge });\n this.reset({ element });\n this.positioner({ element, edge });\n count++;\n }\n this.removeGuidesFrom(count);\n }\n createElement() {\n const element = this.document.createElement('div');\n this.container.appendChild(element);\n this.elements.push(element);\n return element;\n }\n removeGuidesFrom(start) {\n for (const element of this.elements.splice(start)) {\n this.container.removeChild(element);\n }\n }\n}\n","export default class Snap {\n constructor(options) {\n this.grid = options.grid;\n this.threshold = options.threshold || 8;\n }\n to(box) {\n const grid = this.grid;\n const { left, center, right, width, x, top, middle, bottom, height, y } = box;\n return {\n x: this.snapAxis(grid.verticals, left, center, right, width, x),\n y: this.snapAxis(grid.horizontals, top, middle, bottom, height, y)\n };\n }\n snapAxis(edges, start, middle, end, extent, fallback) {\n for (let edge of edges) {\n for (const [position, offset] of [\n [start, 0], [middle, extent / 2], [end, extent]\n ]) {\n const snapped = this.snapped(edge, position, offset, fallback);\n if (snapped !== fallback)\n return snapped;\n }\n }\n return fallback;\n }\n snapped(edge, position, offset, fallback) {\n return this.snappable(edge.position, position) ? edge.position - offset : fallback;\n }\n snappable(compare, position) {\n return compare - this.threshold < position && compare + this.threshold > position;\n }\n}\n","import Grid from './grid';\nimport Box from './box';\nimport Snap from './snap';\nimport Renderer from './renderer';\nexport default class Snapster {\n constructor(options) {\n this.grid = new Grid();\n this.snapping = new Snap({ grid: this.grid, threshold: options.threshold || 8 });\n this.renderer = new Renderer({\n document: options.document,\n container: options.container,\n setup: options.setup,\n positioner: options.positioner,\n reset: options.reset\n });\n }\n populate(boxes) {\n this.grid.clear();\n for (const box of boxes)\n this.grid.add(new Box(box));\n }\n snap(box) {\n const position = this.snapping.to(new Box(box));\n this.renderer.draw(this.grid.matches(new Box({\n x: position.x === null ? box.x : position.x,\n y: position.y === null ? box.y : position.y,\n width: box.width,\n height: box.height,\n type: box.type\n })));\n return position;\n }\n clear() {\n this.renderer.draw([]);\n }\n}\n","// Domain Public by Eric Wendelin http://eriwen.com/ (2008)\n// Luke Smith http://lucassmith.name/ (2008)\n// Loic Dachary <loic@dachary.org> (2008)\n// Johan Euphrosine <proppy@aminche.com> (2008)\n// Oyvind Sean Kinsey http://kinsey.no/blog (2010)\n// Victor Homyakov <victor-homyakov@users.sourceforge.net> (2010)\n\n/**\n * Main function giving a function stack trace with a forced or passed in Error\n *\n * @cfg {Error} e The error to create a stacktrace from (optional)\n * @cfg {Boolean} guess If we should try to resolve the names of anonymous functions\n * @return {Array} of Strings with functions, lines, files, and arguments where possible\n */\nfunction printStackTrace(options) {\n options = options || {guess: true};\n var ex = options.e || null, guess = !!options.guess;\n var p = new printStackTrace.implementation(), result = p.run(ex);\n return (guess) ? p.guessAnonymousFunctions(result) : result;\n}\n\nprintStackTrace.implementation = function() {\n};\n\nprintStackTrace.implementation.prototype = {\n /**\n * @param {Error} ex The error to create a stacktrace from (optional)\n * @param {String} mode Forced mode (optional, mostly for unit tests)\n */\n run: function(ex, mode) {\n ex = ex || this.createException();\n // examine exception properties w/o debugger\n //for (var prop in ex) {alert(\"Ex['\" + prop + \"']=\" + ex[prop]);}\n mode = mode || this.mode(ex);\n if (mode === 'other') {\n return this.other(arguments.callee);\n } else {\n return this[mode](ex);\n }\n },\n\n createException: function() {\n try {\n this.undef();\n } catch (e) {\n return e;\n }\n },\n\n /**\n * Mode could differ for different exception, e.g.\n * exceptions in Chrome may or may not have arguments or stack.\n *\n * @return {String} mode of operation for the exception\n */\n mode: function(e) {\n if (e['arguments'] && e.stack) {\n return 'chrome';\n } else if (e.stack && e.sourceURL) {\n return 'safari';\n } else if (e.stack && e.number) {\n return 'ie';\n } else if (typeof e.message === 'string' && typeof window !== 'undefined' && window.opera) {\n // e.message.indexOf(\"Backtrace:\") > -1 -> opera\n // !e.stacktrace -> opera\n if (!e.stacktrace) {\n return 'opera9'; // use e.message\n }\n // 'opera#sourceloc' in e -> opera9, opera10a\n if (e.message.indexOf('\\n') > -1 && e.message.split('\\n').length > e.stacktrace.split('\\n').length) {\n return 'opera9'; // use e.message\n }\n // e.stacktrace && !e.stack -> opera10a\n if (!e.stack) {\n return 'opera10a'; // use e.stacktrace\n }\n // e.stacktrace && e.stack -> opera10b\n if (e.stacktrace.indexOf(\"called from line\") < 0) {\n return 'opera10b'; // use e.stacktrace, format differs from 'opera10a'\n }\n // e.stacktrace && e.stack -> opera11\n return 'opera11'; // use e.stacktrace, format differs from 'opera10a', 'opera10b'\n } else if (e.stack) {\n return 'firefox';\n }\n return 'other';\n },\n\n /**\n * Given a context, function name, and callback function, overwrite it so that it calls\n * printStackTrace() first with a callback and then runs the rest of the body.\n *\n * @param {Object} context of execution (e.g. window)\n * @param {String} functionName to instrument\n * @param {Function} function to call with a stack trace on invocation\n */\n instrumentFunction: function(context, functionName, callback) {\n context = context || window;\n var original = context[functionName];\n context[functionName] = function instrumented() {\n callback.call(this, printStackTrace().slice(4));\n return context[functionName]._instrumented.apply(this, arguments);\n };\n context[functionName]._instrumented = original;\n },\n\n /**\n * Given a context and function name of a function that has been\n * instrumented, revert the function to it's original (non-instrumented)\n * state.\n *\n * @param {Object} context of execution (e.g. window)\n * @param {String} functionName to de-instrument\n */\n deinstrumentFunction: function(context, functionName) {\n if (context[functionName].constructor === Function &&\n context[functionName]._instrumented &&\n context[functionName]._instrumented.constructor === Function) {\n context[functionName] = context[functionName]._instrumented;\n }\n },\n\n /**\n * Given an Error object, return a formatted Array based on Chrome's stack string.\n *\n * @param e - Error object to inspect\n * @return Array<String> of function calls, files and line numbers\n */\n chrome: function(e) {\n var stack = (e.stack + '\\n').replace(/^\\S[^\\(]+?[\\n$]/gm, '').\n replace(/^\\s+(at eval )?at\\s+/gm, '').\n replace(/^([^\\(]+?)([\\n$])/gm, '{anonymous}()@$1$2').\n replace(/^Object.<anonymous>\\s*\\(([^\\)]+)\\)/gm, '{anonymous}()@$1').split('\\n');\n stack.pop();\n return stack;\n },\n\n /**\n * Given an Error object, return a formatted Array based on Safari's stack string.\n *\n * @param e - Error object to inspect\n * @return Array<String> of function calls, files and line numbers\n */\n safari: function(e) {\n return e.stack.replace(/\\[native code\\]\\n/m, '')\n .replace(/^(?=\\w+Error\\:).*$\\n/m, '')\n .replace(/^@/gm, '{anonymous}()@')\n .split('\\n');\n },\n\n /**\n * Given an Error object, return a formatted Array based on IE's stack string.\n *\n * @param e - Error object to inspect\n * @return Array<String> of function calls, files and line numbers\n */\n ie: function(e) {\n var lineRE = /^.*at (\\w+) \\(([^\\)]+)\\)$/gm;\n return e.stack.replace(/at Anonymous function /gm, '{anonymous}()@')\n .replace(/^(?=\\w+Error\\:).*$\\n/m, '')\n .replace(lineRE, '$1@$2')\n .split('\\n');\n },\n\n /**\n * Given an Error object, return a formatted Array based on Firefox's stack string.\n *\n * @param e - Error object to inspect\n * @return Array<String> of function calls, files and line numbers\n */\n firefox: function(e) {\n return e.stack.replace(/(?:\\n@:0)?\\s+$/m, '').replace(/^[\\(@]/gm, '{anonymous}()@').split('\\n');\n },\n\n opera11: function(e) {\n var ANON = '{anonymous}', lineRE = /^.*line (\\d+), column (\\d+)(?: in (.+))? in (\\S+):$/;\n var lines = e.stacktrace.split('\\n'), result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n var location = match[4] + ':' + match[1] + ':' + match[2];\n var fnName = match[3] || \"global code\";\n fnName = fnName.replace(/<anonymous function: (\\S+)>/, \"$1\").replace(/<anonymous function>/, ANON);\n result.push(fnName + '@' + location + ' -- ' + lines[i + 1].replace(/^\\s+/, ''));\n }\n }\n\n return result;\n },\n\n opera10b: function(e) {\n // \"<anonymous function: run>([arguments not available])@file://localhost/G:/js/stacktrace.js:27\\n\" +\n // \"printStackTrace([arguments not available])@file://localhost/G:/js/stacktrace.js:18\\n\" +\n // \"@file://localhost/G:/js/test/functional/testcase1.html:15\"\n var lineRE = /^(.*)@(.+):(\\d+)$/;\n var lines = e.stacktrace.split('\\n'), result = [];\n\n for (var i = 0, len = lines.length; i < len; i++) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n var fnName = match[1]? (match[1] + '()') : \"global code\";\n result.push(fnName + '@' + match[2] + ':' + match[3]);\n }\n }\n\n return result;\n },\n\n /**\n * Given an Error object, return a formatted Array based on Opera 10's stacktrace string.\n *\n * @param e - Error object to inspect\n * @return Array<String> of function calls, files and line numbers\n */\n opera10a: function(e) {\n // \" Line 27 of linked script file://localhost/G:/js/stacktrace.js\\n\"\n // \" Line 11 of inline#1 script in file://localhost/G:/js/test/functional/testcase1.html: In function foo\\n\"\n var ANON = '{anonymous}', lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n'), result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n var fnName = match[3] || ANON;\n result.push(fnName + '()@' + match[2] + ':' + match[1] + ' -- ' + lines[i + 1].replace(/^\\s+/, ''));\n }\n }\n\n return result;\n },\n\n // Opera 7.x-9.2x only!\n opera9: function(e) {\n // \" Line 43 of linked script file://localhost/G:/js/stacktrace.js\\n\"\n // \" Line 7 of inline#1 script in file://localhost/G:/js/test/functional/testcase1.html\\n\"\n var ANON = '{anonymous}', lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n'), result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(ANON + '()@' + match[2] + ':' + match[1] + ' -- ' + lines[i + 1].replace(/^\\s+/, ''));\n }\n }\n\n return result;\n },\n\n // Safari 5-, IE 9-, and others\n other: function(curr) {\n var ANON = '{anonymous}', fnRE = /function\\s*([\\w\\-$]+)?\\s*\\(/i, stack = [], fn, args, maxStackSize = 10;\n while (curr && curr['arguments'] && stack.length < maxStackSize) {\n fn = fnRE.test(curr.toString()) ? RegExp.$1 || ANON : ANON;\n args = Array.prototype.slice.call(curr['arguments'] || []);\n stack[stack.length] = fn + '(' + this.stringifyArguments(args) + ')';\n curr = curr.caller;\n }\n return stack;\n },\n\n /**\n * Given arguments array as a String, subsituting type names for non-string types.\n *\n * @param {Arguments} args\n * @return {Array} of Strings with stringified arguments\n */\n stringifyArguments: function(args) {\n var result = [];\n var slice = Array.prototype.slice;\n for (var i = 0; i < args.length; ++i) {\n var arg = args[i];\n if (arg === undefined) {\n result[i] = 'undefined';\n } else if (arg === null) {\n result[i] = 'null';\n } else if (arg.constructor) {\n if (arg.constructor === Array) {\n if (arg.length < 3) {\n result[i] = '[' + this.stringifyArguments(arg) + ']';\n } else {\n result[i] = '[' + this.stringifyArguments(slice.call(arg, 0, 1)) + '...' + this.stringifyArguments(slice.call(arg, -1)) + ']';\n }\n } else if (arg.constructor === Object) {\n result[i] = '#object';\n } else if (arg.constructor === Function) {\n result[i] = '#function';\n } else if (arg.constructor === String) {\n result[i] = '\"' + arg + '\"';\n } else if (arg.constructor === Number) {\n result[i] = arg;\n }\n }\n }\n return result.join(',');\n },\n\n sourceCache: {},\n\n /**\n * @return the text from a given URL\n */\n ajax: function(url) {\n var req = this.createXMLHTTPObject();\n if (req) {\n try {\n req.open('GET', url, false);\n //req.overrideMimeType('text/plain');\n //req.overrideMimeType('text/javascript');\n req.send(null);\n //return req.status == 200 ? req.responseText : '';\n return req.responseText;\n } catch (e) {\n }\n }\n return '';\n },\n\n /**\n * Try XHR methods in order and store XHR factory.\n *\n * @return <Function> XHR function or equivalent\n */\n createXMLHTTPObject: function() {\n var xmlhttp, XMLHttpFactories = [\n function() {\n return new XMLHttpRequest();\n }, function() {\n return new ActiveXObject('Msxml2.XMLHTTP');\n }, function() {\n return new ActiveXObject('Msxml3.XMLHTTP');\n }, function() {\n return new ActiveXObject('Microsoft.XMLHTTP');\n }\n ];\n for (var i = 0; i < XMLHttpFactories.length; i++) {\n try {\n xmlhttp = XMLHttpFactories[i]();\n // Use memoization to cache the factory\n this.createXMLHTTPObject = XMLHttpFactories[i];\n return xmlhttp;\n } catch (e) {\n }\n }\n },\n\n /**\n * Given a URL, check if it is in the same domain (so we can get the source\n * via Ajax).\n *\n * @param url <String> source url\n * @return False if we need a cross-domain request\n */\n isSameDomain: function(url) {\n return typeof location !== \"undefined\" && url.indexOf(location.hostname) !== -1; // location may not be defined, e.g. when running from nodejs.\n },\n\n /**\n * Get source code from given URL if in the same domain.\n *\n * @param url <String> JS source URL\n * @return <Array> Array of source code lines\n */\n getSource: function(url) {\n // TODO reuse source from script tags?\n if (!(url in this.sourceCache)) {\n this.sourceCache[url] = this.ajax(url).split('\\n');\n }\n return this.sourceCache[url];\n },\n\n guessAnonymousFunctions: function(stack) {\n for (var i = 0; i < stack.length; ++i) {\n var reStack = /\\{anonymous\\}\\(.*\\)@(.*)/,\n reRef = /^(.*?)(?::(\\d+))(?::(\\d+))?(?: -- .+)?$/,\n frame = stack[i], ref = reStack.exec(frame);\n\n if (ref) {\n var m = reRef.exec(ref[1]);\n if (m) { // If falsey, we did not get any file/line information\n var file = m[1], lineno = m[2], charno = m[3] || 0;\n if (file && this.isSameDomain(file) && lineno) {\n var functionName = this.guessAnonymousFunction(file, lineno, charno);\n stack[i] = frame.replace('{anonymous}', functionName);\n }\n }\n }\n }\n return stack;\n },\n\n guessAnonymousFunction: function(url, lineNo, charNo) {\n var ret;\n try {\n ret = this.findFunctionName(this.getSource(url), lineNo);\n } catch (e) {\n ret = 'getSource failed with url: ' + url + ', exception: ' + e.toString();\n }\n return ret;\n },\n\n findFunctionName: function(source, lineNo) {\n // FIXME findFunctionName fails for compressed source\n // (more than one function on the same line)\n // function {name}({args}) m[1]=name m[2]=args\n var reFunctionDeclaration = /function\\s+([^(]*?)\\s*\\(([^)]*)\\)/;\n // {name} = function ({args}) TODO args capture\n // /['\"]?([0-9A-Za-z_]+)['\"]?\\s*[:=]\\s*function(?:[^(]*)/\n var reFunctionExpression = /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/;\n // {name} = eval()\n var reFunctionEvaluation = /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/;\n // Walk backwards in the source lines until we find\n // the line which matches one of the patterns above\n var code = \"\", line, maxLines = Math.min(lineNo, 20), m, commentPos;\n for (var i = 0; i < maxLines; ++i) {\n // lineNo is 1-based, source[] is 0-based\n line = source[lineNo - i - 1];\n commentPos = line.indexOf('//');\n if (commentPos >= 0) {\n line = line.substr(0, commentPos);\n }\n // TODO check other types of comments? Commented code may lead to false positive\n if (line) {\n code = line + code;\n m = reFunctionExpression.exec(code);\n if (m && m[1]) {\n return m[1];\n }\n m = reFunctionDeclaration.exec(code);\n if (m && m[1]) {\n //return m[1] + \"(\" + (m[2] || \"\") + \")\";\n return m[1];\n }\n m = reFunctionEvaluation.exec(code);\n if (m && m[1]) {\n return m[1];\n }\n }\n }\n return '(?)';\n }\n};\n\nexport default printStackTrace;\n","import printStackTrace from '../../../../../../public/javascripts/libs/stacktrace';\n\n\nconst __slice = Array.prototype.slice;\n\nconst error = function (e, location) {\n let key; let str; let\n value;\n str = void 0;\n if (typeof e === 'string') {\n str = e;\n if (printStackTrace) {\n str += printStackTrace({\n guess: true,\n }).join('\\n');\n }\n } else if (e) {\n str = 'Error: ';\n for (key in e) {\n value = e[key];\n if (key.toUpperCase() === key) continue;\n str += `${key}: ${value}\\n`;\n }\n if (printStackTrace) {\n str += printStackTrace({\n guess: true,\n e,\n }).join('\\n');\n }\n }\n if (location) str = `::${location}:: ${str}`;\n if (console.error) {\n console.error(e, str);\n } else if (console.log) console.log(e, str);\n return false;\n};\n\nconst log = function () {\n let args;\n args = arguments.length >= 1 ? __slice.call(arguments, 0) : [];\n};\n\nconst debug = function () {\n let args;\n args = arguments.length >= 1 ? __slice.call(arguments, 0) : [];\n};\n\nconst wkLogger = {\n error,\n log,\n debug\n}\n\nexport default wkLogger\n","\nconst PrismQuality = {};\nPrismQuality.Good = new Image();\nPrismQuality.Good.crossOrigin = 'use-credentials';\nPrismQuality.Good.src = '/wm/images/build/good_quality.png';\n\nPrismQuality.Okay = new Image();\nPrismQuality.Okay.crossOrigin = 'use-credentials';\nPrismQuality.Okay.src = '/wm/images/build/okay_quality.png';\n\nPrismQuality.Poor = new Image();\nPrismQuality.Poor.crossOrigin = 'use-credentials';\nPrismQuality.Poor.src = '/wm/images/build/poor_quality.png';\n\nPrismQuality.exclamation = new Image();\nPrismQuality.exclamation.crossOrigin = 'use-credentials';\nPrismQuality.exclamation.src = '/wm/images/build/exclamation-18.png';\n\nPrismQuality.exclamationBlack = new Image();\nPrismQuality.exclamationBlack.crossOrigin = 'use-credentials';\nPrismQuality.exclamationBlack.src = '/wm/images/build/exclamation-black.png';\n\nexport default PrismQuality;\n","class Point {\n /**\n * Simple point representation.\n * @constructor\n */\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n\n /**\n * Adds another point to this one\n * @param {Point} that\n * @return {Point} thisArg\n */\n add(that) {\n this.x += that.x;\n this.y += that.y;\n return this;\n }\n\n /**\n * Subtracts another point from this point\n * @param {Point} that\n * @return {Point} thisArg\n */\n subtract(that) {\n this.x -= that.x;\n this.y -= that.y;\n return this;\n }\n\n /**\n * Returns the angle in degrees between this point and another.\n * @param {Point} point\n * @return {Number}\n */\n getAngle(point) {\n return (Math.atan2(point.y - this.y, point.x - this.x) * 180) / Math.PI;\n }\n\n /**\n * Calculates the distance between two points\n *\n * @param {Point} point\n * @return {Number}\n */\n distanceFrom(point) {\n return Math.sqrt(Math.pow(point.x - this.x, 2) + Math.pow(point.y - this.y, 2));\n }\n\n /**\n * Rotates this Point around a given origin for the given degrees.\n * @param {Point} origin\n * @param {Number} degrees\n */\n rotate(origin, degrees) {\n const radians = Point.degreesToRadians(degrees);\n const sin = Math.sin(radians);\n const cos = Math.cos(radians);\n\n this.subtract(origin);\n\n const { x, y } = this;\n (this.x = x * cos - y * sin), (this.y = x * sin + y * cos);\n\n return this.add(origin);\n }\n\n /**\n * Returns the center position between this point and another.\n * (Note, the x/y positions might be floating points)\n * @param {Point} other\n * @return {Point}\n */\n getMiddle(other) {\n return new Point((this.x + other.x) / 2, (this.y + other.y) / 2);\n }\n\n toString() {\n return `Point(${this.x},${this.y})`;\n }\n\n /**\n * Converts the given value from degrees to radians (used for Math calculations)\n * @param {integer} degrees\n * @return {float}\n */\n static degreesToRadians(degrees) {\n return degrees * (Math.PI / 180);\n }\n\n static shouldStopAction(w, h, slot, angle) {\n if (w < slot.minWidth || h < slot.minHeight) return true;\n if (angle === null) return false;\n if (angle > 90 || angle < -90) return true;\n return false;\n }\n\n static createResizeValues(relativeXY, coords, location, slot) {\n const { handler, opposite } = coords;\n const centerPoints = slot.getCenter(true);\n const angle = slot._angle;\n const center = new Point(centerPoints.pivotX, centerPoints.pivotY);\n let diffAng = null;\n\n const mousePoint = new Point(relativeXY.x, relativeXY.y);\n // Opposite point. Rotate it to get the visual position\n const oppositePointRotated = new Point(opposite.x, opposite.y).rotate(\n center,\n angle\n );\n\n // If a handler point is needed, indicates that this is one of the \"middle\" handlers\n // The mouse coordinates need to be rotated to join the straight line that connects\n // the handler point and the opposite point.\n if (handler) {\n const handlerRotated = new Point(handler.x, handler.y).rotate(\n center,\n angle\n );\n\n const angleOppRotAndHandRot = oppositePointRotated.getAngle(\n handlerRotated\n );\n const angleOppositeAndMouse = oppositePointRotated.getAngle(mousePoint);\n\n diffAng = angleOppositeAndMouse - angleOppRotAndHandRot;\n\n mousePoint.rotate(oppositePointRotated, -diffAng);\n }\n\n // calculate the new center\n const centerPoint = mousePoint.getMiddle(oppositePointRotated);\n // rotate the opposite point back around the new center point\n const oppositePointUnrotated = oppositePointRotated.rotate(\n centerPoint,\n -angle\n );\n // rotate the mouse point around the new center.\n const mousePointNormalised = mousePoint.rotate(centerPoint, -angle);\n\n const aspectRatio = slot.w / slot.h;\n\n let w;\n let h;\n let x;\n let y;\n switch (location) {\n case 'top-middle':\n h = oppositePointUnrotated.y - mousePointNormalised.y;\n y = oppositePointUnrotated.y - h;\n\n if (slot.isText) {\n w = h * aspectRatio;\n } else {\n w = slot._w;\n }\n x = oppositePointUnrotated.x - w / 2;\n break;\n case 'bottom-middle':\n h = mousePointNormalised.y - oppositePointUnrotated.y;\n y = oppositePointUnrotated.y;\n\n if (slot.isText) {\n w = h * aspectRatio;\n } else {\n w = slot._w;\n }\n x = mousePointNormalised.x - w / 2;\n\n break;\n case 'middle-right':\n w = mousePointNormalised.x - oppositePointUnrotated.x;\n x = oppositePointUnrotated.x;\n\n if (slot.isText) {\n h = w / aspectRatio;\n } else {\n h = slot._h;\n }\n y = mousePointNormalised.y - h / 2;\n break;\n case 'middle-left':\n w = oppositePointUnrotated.x - mousePointNormalised.x;\n x = oppositePointUnrotated.x - w;\n\n if (slot.isText) {\n h = w / aspectRatio;\n } else {\n h = slot._h;\n }\n y = mousePointNormalised.y - h / 2;\n break;\n case 'top-left':\n w = oppositePointUnrotated.x - mousePointNormalised.x;\n x = oppositePointUnrotated.x - w;\n\n if (slot.isText) {\n h = w / aspectRatio;\n } else {\n h = oppositePointUnrotated.y - mousePointNormalised.y;\n }\n y = oppositePointUnrotated.y - h;\n break;\n case 'bottom-right':\n w = mousePointNormalised.x - oppositePointUnrotated.x;\n x = oppositePointUnrotated.x;\n\n if (slot.isText) {\n h = w / aspectRatio;\n } else {\n h = mousePointNormalised.y - oppositePointUnrotated.y;\n }\n\n y = oppositePointUnrotated.y;\n break;\n case 'top-right':\n w = mousePointNormalised.x - oppositePointUnrotated.x;\n x = oppositePointUnrotated.x;\n\n if (slot.isText) {\n h = w / aspectRatio;\n } else {\n h = oppositePointUnrotated.y - mousePointNormalised.y;\n }\n y = oppositePointUnrotated.y - h;\n break;\n case 'bottom-left':\n w = oppositePointUnrotated.x - mousePointNormalised.x;\n x = oppositePointUnrotated.x - w;\n if (slot.isText) {\n h = w / aspectRatio;\n } else {\n h = mousePointNormalised.y - oppositePointUnrotated.y;\n }\n y = oppositePointUnrotated.y;\n break;\n }\n\n const stopAction = Point.shouldStopAction(w, h, slot, diffAng);\n\n if (stopAction) return null;\n\n return {\n x,\n y,\n w,\n h,\n };\n }\n}\n\nexport default Point;","export const stripString = (string) => `${string}`.replace(/^\\s*/, '').replace(/\\s*$/, '');\n\nexport const safeNumber = (value, defaultValue) => {\n if (typeof value !== 'number') return defaultValue;\n if (!isFinite(value)) return defaultValue;\n return value;\n}\n\nexport const limit = (number, min, max) => {\n if (number <= min) return min;\n if (number >= max) return max;\n return number;\n}\n\nexport const isNumber = (e) => typeof e === 'number' && !isNaN(e);\n\nconst contextApplyMatrixInternalD = (ctx, d) => {\n ctx.translate(d.dx, d.dy);\n ctx.rotate(d.angle2);\n ctx.scale(d.sx, d.sy);\n // ctx.scale(1, 1);\n return ctx.rotate(d.angle1);\n};\n\nconst arrayToMatrixInternalD = (arr) => {\n return new window.dojox.gfx.Matrix2D({\n xx: arr[0],\n yx: arr[1],\n xy: arr[2],\n yy: arr[3],\n dx: arr[4],\n dy: arr[5],\n });\n};\n\nexport const ctxApplyMatrix = (ctx, meta) => {\n let d;\n if (!meta.matrix_decomposed) {\n meta.matrix_decomposed = window.dojox.gfx.decompose(\n arrayToMatrixInternalD(meta.matrix)\n );\n }\n d = meta.matrix_decomposed;\n return contextApplyMatrixInternalD(ctx, d);\n};\n\nexport const RealMatrix = true;\n","const PlaceFiller = new Image();\nPlaceFiller.crossOrigin = 'use-credentials';\nPlaceFiller.src = '/images/prism/missing.png';\n\nwindow.PlaceFiller = PlaceFiller;\n\nconst LoadingImage = new Image();\nLoadingImage.crossOrigin = 'use-credentials';\nLoadingImage.src = '/images/prism/loading.png';\n\nconst BlankImage = new Image();\nBlankImage.crossOrigin = 'use-credentials';\nBlankImage.src = '/images/prism/blank.png';\n\nconst BlankEmptyImage = new Image();\nBlankEmptyImage.crossOrigin = 'use-credentials';\nBlankEmptyImage.src = '/images/prism/empty.png';\n\nconst imgComplete = img => img && img.complete;\n\nexport { PlaceFiller, LoadingImage, BlankImage, BlankEmptyImage, imgComplete };\n","export const TOP_TOOL_HEIGHT = 44;\nexport const BASE_TOOL_WIDTH = 104;\nexport const BASE_TOOL_HEIGHT = 44;\nexport const PAD = 20;\nexport const TOOL_HEIGHT = 33;\nexport const TOOL_WIDTH = 33;\n","import Point from './point';\n\nclass Line {\n /**\n * Constructor for Line object\n * @param {Point} p1\n * @param {Point} p2\n */\n constructor(p1, p2) {\n this.p1 = p1;\n this.p2 = p2;\n }\n\n dy() {\n return this.p2.y - this.p1.y;\n }\n\n dx() {\n return this.p2.x - this.p1.x;\n }\n\n\n closestPoint(point) {\n const A = point.x - this.p1.x;\n const B = point.y - this.p1.y;\n const C = this.p2.x - this.p1.x;\n const D = this.p2.y - this.p1.y;\n\n const dot = A * C + B * D;\n const len_sq = C * C + D * D;\n let param = -1;\n if (len_sq != 0) {\n // in case of 0 length line\n param = dot / len_sq;\n }\n\n let xx;\n let yy;\n\n if (param < 0) {\n xx = this.p1.x;\n yy = this.p1.y;\n } else if (param > 1) {\n xx = this.p2.x;\n yy = this.p2.y;\n } else {\n xx = this.p1.x + param * C;\n yy = this.p1.y + param * D;\n }\n\n return new Point(xx, yy);\n }\n\n toString() {\n return `Line(${this.p1.toString()} -> ${this.p2.toString()})`;\n }\n}\n\n\nexport { Line };\n","import { Line } from './line.js';\nimport Point from './point';\n\nclass Polygon {\n /**\n * Simple polygon representation.\n *\n * @param {Array[Point]} points - clockwise list of points\n * @constructor\n */\n constructor(points) {\n this.points = points;\n }\n\n /**\n * Find the closest point on a polygon to a position (point).\n * @param {Point} point\n */\n findClosestPointTo(point) {\n let closest;\n let closestIndex = -1;\n let distance;\n\n this.points.forEach((p, index) => {\n const d = p.distanceFrom(point);\n if ((closestIndex === -1) || (d < distance)) {\n closest = p;\n distance = d;\n closestIndex = index;\n }\n });\n\n const p1 = this.points[closestIndex];\n let p0;\n let p2;\n\n p0 = this.points[closestIndex - 1] || this.points[this.points.length - 1];\n p2 = this.points[closestIndex + 1] || this.points[0];\n\n [new Line(p0, p1), new Line(p1, p2)].forEach((line, index) => {\n const intersection = line.closestPoint(point);\n if (!intersection) {\n return;\n }\n\n const d = intersection.distanceFrom(point);\n if (d < distance) {\n closest = intersection;\n distance = d;\n }\n });\n\n return closest;\n }\n\n /**\n * @return Array of edges\n */\n edges() {\n return this.points.map((point, index) => new Line(point, this.points[index + 1] || this.points[0]));\n }\n\n toString() {\n return `Poly(${this.points.map((p) => p.toString()).join(',')})`;\n }\n\n /**\n * Returns a Polygon that represents a rectangle\n * @param {Number} x\n * @param {Number} y\n * @param {Number} w\n * @param {Number} h\n */\n static fromRectangle(x, y, w, h) {\n return new Polygon([\n new Point(x, y),\n new Point(x + w, y),\n new Point(x + w, y + h),\n new Point(x, y + h),\n ]);\n }\n}\n\nexport default Polygon;\n","// Import Modules\nimport { PanHandle } from '../../../_utils/image-editor';\nimport { EventEmitter } from 'wk-event-emitter';\nimport { PAD } from '../../common/slot-tools/simple/constants';\n\nimport Point from '../geom/point';\nimport Polygon from '../geom/polygon';\nimport Rectangle from '../../../_utils/img/geometry';\nimport { isClonedSlot } from '../../utils/special-slots';\nimport genericHelpers from '../../../_utils/generic-helpers';\nimport { isNumber, ctxApplyMatrix, limit } from './utils';\n\nclass SlotBase {\n RealMatrix = true;\n\n constructor() {\n this.constrain = [0, 0, 400, 400];\n\n this.x = 0;\n\n this.y = 0;\n\n this.ox = 0;\n\n this.oy = 0;\n\n this.w = 0;\n\n this.h = 0;\n\n this.angle = 0;\n\n this.xalign = 0.5;\n\n this.yalign = 0.5;\n\n this.zoom = 1;\n\n this.id = 'SET-ME';\n\n this.type = 'invalid';\n\n this.minHeight = 10;\n\n this.minWidth = 10;\n\n this.slotState = 'moving';\n\n this.needsPopover = false;\n }\n\n isClone() {\n return isClonedSlot(this.id);\n }\n\n isEmbellishment() {\n return false;\n }\n\n isSticker() {\n return false;\n }\n\n isPattern() {\n return false;\n }\n\n select() {\n let _ref;\n return (_ref = this.view) != null ? _ref.selectASlot(this) : void 0;\n }\n\n triggerRedraw() {\n if (!this.view) return;\n\n this.view.queueRedraw();\n }\n\n deselect() {\n let _ref;\n return (_ref = this.view) != null ? _ref.deselectASlot(this) : void 0;\n }\n\n hasPoint = function(x, y) {\n let h;\n let lx;\n let ty;\n let w;\n\n if (this.imatrix) {\n [x, y] = this.imatrix.transform_point(x, y);\n }\n\n w = this.w;\n h = this.h;\n lx = this.x - this.ox;\n ty = this.y - this.oy;\n\n const points = this._getRotatedPoint(x, y);\n\n if (\n points.x >= lx && points.x <= lx + w\n ? points.y >= ty && points.y <= ty + h\n : void 0\n ) {\n return true;\n }\n return false;\n };\n\n getPoints() {\n return [\n { x: this.x, y: this.y },\n { x: this.x + this.w, y: this.y },\n { x: this.x + this.w, y: this.y + this.h },\n { x: this.x, y: this.y + this.h },\n ].map(point => {\n if (this.matrix) {\n [point.x, point.y] = this.matrix.transform_point(point.x, point.y);\n }\n return point;\n });\n }\n\n resetXYWH() {\n this._angle = this.angle;\n this._x = this.x;\n this._y = this.y;\n this._w = this.w;\n this._h = this.h;\n this._ix = this.ix;\n this._iy = this.iy;\n }\n\n hasControlPoint(x, y) {\n const controlSize = 20;\n\n if (this.imatrix) {\n [x, y] = this.imatrix.transform_point(x, y);\n }\n\n const {\n topMiddle,\n bottomMiddle,\n middleRight,\n middleLeft,\n bottomLeft,\n topRight,\n topLeft,\n bottomRight,\n } = this.getSlotPoints();\n\n function minusControlPoint(point, size) {\n return point - size / 3;\n }\n\n function plusControlPoint(point, size) {\n return point + size / 3;\n }\n\n function minusControlPointSize(point, size) {\n return plusControlPoint(point, size) - size;\n }\n\n function plusControlPointSize(point, size) {\n return minusControlPoint(point, size) + size;\n }\n\n function middlePoints(x, y, pointX, pointY, size) {\n return x >= minusControlPoint(pointX, size) &&\n x <= plusControlPoint(pointX, size)\n ? y >= minusControlPoint(pointY, size) &&\n y <= plusControlPoint(pointY, size)\n : void 0;\n }\n\n function cornerPoints(x, y, pointX, pointY, size) {\n return x >= minusControlPointSize(pointX, size) &&\n x <= plusControlPoint(pointX, size)\n ? y >= minusControlPoint(pointY, size) &&\n y <= plusControlPointSize(pointY, size)\n : void 0;\n }\n\n if (middlePoints(x, y, topMiddle.x, topMiddle.y, controlSize)) {\n return 'top-middle';\n }\n\n if (middlePoints(x, y, bottomMiddle.x, bottomMiddle.y, controlSize)) {\n return 'bottom-middle';\n }\n\n if (middlePoints(x, y, middleRight.x, middleRight.y, controlSize)) {\n return 'middle-right';\n }\n\n if (middlePoints(x, y, middleLeft.x, middleLeft.y, controlSize)) {\n return 'middle-left';\n }\n\n if (cornerPoints(x, y, bottomLeft.x, bottomLeft.y, controlSize)) {\n return 'bottom-left';\n }\n if (cornerPoints(x, y, topRight.x, topRight.y, controlSize)) {\n return 'top-right';\n }\n if (cornerPoints(x, y, topLeft.x, topLeft.y, controlSize)) {\n return 'top-left';\n }\n if (cornerPoints(x, y, bottomRight.x, bottomRight.y, controlSize)) {\n return 'bottom-right';\n }\n return false;\n }\n\n hasImage() {\n return imgComplete(this.img);\n }\n\n stackable() {\n return this.type === 'stackable';\n }\n\n constrainCoord(val, cur, dim, ix1, ix2) {\n if (val + dim > this.constrain[ix1] + this.constrain[ix2]) {\n val = this.constrain[ix1] + this.constrain[ix2] - dim;\n }\n if (val < this.constrain[ix1]) val = this.constrain[ix1];\n if (val > cur + dim - 4) val = cur + dim - 4;\n if (val > this.constrain[ix1] + this.constrain[ix2]) {\n val = this.constrain[ix1] + this.constrain[ix2] - 2;\n }\n return val;\n }\n\n constrainDim(val, dim, ix1, ix2) {\n if (dim < 4) dim = 4;\n if (dim + val > this.constrain[ix2] + this.constrain[ix1]) {\n dim = this.constrain[ix1] + this.constrain[ix2] - val;\n }\n return dim;\n }\n\n drawHighlight(ctx) {\n ctx.save();\n try {\n this._drawHighlight(ctx);\n } finally {\n ctx.restore();\n }\n }\n\n _drawHighlight(ctx) {\n let fontSize;\n let h;\n let info;\n let p;\n let scale;\n let w;\n let x;\n let x_;\n let y;\n let y_;\n let data;\n const meta = this.meta;\n x = this.x - this.ox;\n y = this.y - this.oy;\n w = this.w - 1;\n h = this.h - 1;\n if (\n meta &&\n meta.rotate === 0 &&\n meta.shift[1] === 0 &&\n meta.shift[0] === 0\n ) {\n if (y < 0) {\n h -= y;\n y = 0;\n if (h > this.view.template['real-size'].height) {\n h = this.view.template['real-size'].height - 1;\n }\n }\n }\n\n if (meta) {\n if (this.RealMatrix) {\n ctxApplyMatrix(ctx, meta);\n } else {\n if (meta.shift) {\n ctx.translate(meta.shift[0], meta.shift[1]);\n }\n if (meta.scale) ctx.scale(meta.scale[0], meta.scale[1]);\n if (typeof meta.rotate === 'number' && meta.rotate !== 0) {\n ctx.rotate(meta.rotate);\n }\n }\n }\n ctx.lineCap = 'round';\n if (this.p) {\n if (window.PanHandle && imgComplete(this.img)) {\n ctx.save();\n try {\n info = this.data();\n ctx.translate(this.x, this.y);\n let handleScale = 0.27 * (800 / this.view.element.clientWidth);\n if (meta.scale) {\n handleScale /= meta.scale[0];\n }\n ctx.translate(\n (info.layout.w - PanHandle.width * handleScale) / 2,\n (info.layout.h - PanHandle.height * handleScale) / 2\n );\n // ctx.rotate(this.getAngleRadian());\n // ctx.scale(handleScale, handleScale);\n // ctx.drawImage(window.PanHandle, 0, 0);\n } finally {\n ctx.restore();\n }\n }\n }\n\n ctx.lineWidth = 2;\n fontSize = 10;\n let dash = 3;\n\n if (this.meta && this.meta.scale) {\n const scale = Math.abs(this.meta.scale[0]);\n ctx.lineWidth /= scale;\n fontSize /= scale;\n dash /= scale;\n }\n\n ctx.closePath();\n ctx.lineCap = 'butt';\n\n if (this.view.hasFocus()) {\n ctx.save();\n try {\n ctx.rotate(this.getAngleRadian());\n ctx.beginPath();\n if (window.Path2D && ctx.clip) {\n const region = new Path2D();\n region.rect(x - dash, y - dash, w + dash * 2, h + dash * 2);\n region.rect(x, y, w, h);\n ctx.clip(region, 'evenodd');\n }\n\n ctx.shadowColor = '#cb2c90';\n ctx.shadowBlur = dash / 3;\n ctx.strokeStyle = '#fff';\n ctx.strokeRect(x - 1, y - 1, w + 2, h + 2);\n ctx.shadowBlur = 0;\n } finally {\n ctx.restore();\n }\n }\n ctx.beginPath();\n ctx.lineDashOffset = dash;\n ctx.strokeStyle = '#cb2c90';\n try {\n ctx.save();\n if (this.stackable()) {\n ctx.translate(this.x + this.w / 2, this.y + this.h / 2);\n ctx.rotate(this.getAngleRadian());\n ctx.strokeRect(-w / 2, -h / 2, w, h);\n } else {\n ctx.strokeRect(x, y, w, h);\n }\n } finally {\n ctx.restore();\n }\n }\n\n bounds(x = null, y = null, w = null, h = null, a = null) {\n const points = Object.values(this.getSlotPoints(x, y, w, h, a));\n\n const xcoords = points.map(({ x }) => x);\n const ycoords = points.map(({ y }) => y);\n\n const min_x = Math.min(...xcoords);\n const min_y = Math.min(...ycoords);\n const max_x = Math.max(...xcoords);\n const max_y = Math.max(...ycoords);\n\n return {\n x: min_x,\n y: min_y,\n w: max_x - min_x,\n h: max_y - min_y,\n };\n }\n\n moveTo(x, y) {\n if (this.isText && this.fromTemplate) return;\n if (genericHelpers.isMobileViewport()) return;\n\n if (this.stackable() && !this.canMoveTo(x, y)) {\n const [cx, cy, cw, ch] = this.constrainTo();\n const constraint = Polygon.fromRectangle(cx, cy, cw, ch);\n const p = constraint.findClosestPointTo(new Point(x, y));\n if (p) {\n this.x = p.x;\n this.y = p.y;\n return;\n }\n }\n\n this.x = x;\n this.y = y;\n setTimeout(() => {\n EventEmitter.emit('prism-edit-slot-moved', {\n view: this.view,\n slot: this,\n });\n }, 10);\n }\n\n _set(name, value) {\n if (this.properties.indexOf(name) < 0) return false;\n\n const setter = `_set_${name}`;\n const fn = this[setter];\n\n if (fn && $.isFunction(fn)) {\n return fn.apply(this, [value]);\n }\n\n if (this[`${name}_min`] || this[`${name}_max`]) {\n value = limit(value, this[`${name}_min`], this[`${name}_max`]);\n }\n\n if (this[name] === value) {\n return false;\n }\n\n this[name] = value;\n\n if (\n {\n angle: 1,\n straighten: 1,\n gamma: 1,\n filter: 1,\n }[name]\n ) {\n this._img = null;\n }\n return true;\n }\n\n drawControlBackground(ctx, isSelected) {\n let h;\n let w;\n let x;\n let y;\n x = this.x - this.ox;\n y = this.y - this.oy;\n w = this.w;\n if (!isNumber(w) || w <= 0) w = 10;\n h = this.h;\n if (!isNumber(h) || h <= 0) h = 10;\n if (!(isSelected || this.string.length === 0)) return;\n\n if (this.meta) {\n if (this.RealMatrix) {\n ctxApplyMatrix(ctx, this.meta);\n } else {\n if (this.meta.shift) {\n ctx.translate(this.meta.shift[0], this.meta.shift[1]);\n }\n if (this.meta.scale) ctx.scale(this.meta.scale[0], this.meta.scale[1]);\n if (typeof this.meta.rotate === 'number' && this.meta.rotate !== 0) {\n ctx.rotate(this.meta.rotate);\n }\n }\n }\n ctx.beginPath();\n const px = this.x + this.w / 2;\n const py = this.y + this.h / 2;\n ctx.translate(px, py);\n ctx.rotate(this.getAngleRadian());\n ctx.rect(-w / 2, -h / 2, w, h);\n ctx.restore();\n }\n\n isMovingState() {\n return this.slotState === 'moving';\n }\n\n isInactiveState() {\n return this.slotState === 'inactive';\n }\n\n isPanningState() {\n return this.slotState === 'panning';\n }\n\n isEditingState() {\n return this.slotState === 'editing';\n }\n\n setSlotState(state) {\n const possibleSlotStates = ['inactive', 'moving', 'editing', 'panning'];\n\n if (possibleSlotStates.indexOf(state) >= 0) {\n this.slotState = state;\n return true;\n }\n return false;\n }\n\n setNeedsPopover(boolean) {\n this.needsPopover = boolean;\n }\n\n shouldRender() {\n return (\n (this.isText || this.stackable()) &&\n (this.slotState !== 'editing' || this.needsPopover) &&\n !this.isClone()\n );\n }\n\n drawControls(ctx, isSelected) {\n let h;\n let w;\n let x;\n let y;\n x = this.x - this.ox;\n y = this.y - this.oy;\n w = this.w;\n if (!isNumber(w) || w <= 0) w = 10;\n h = this.h;\n if (!isNumber(h) || h <= 0) h = 10;\n if (!(isSelected || this.string.length === 0)) return;\n\n if (this.meta) {\n if (this.RealMatrix) {\n ctxApplyMatrix(ctx, this.meta);\n } else {\n if (this.meta.shift) {\n ctx.translate(this.meta.shift[0], this.meta.shift[1]);\n }\n if (this.meta.scale) {\n ctx.scale(this.meta.scale[0], this.meta.scale[1]);\n }\n if (typeof this.meta.rotate === 'number' && this.meta.rotate !== 0) {\n ctx.rotate(this.meta.rotate);\n }\n }\n }\n\n ctx.lineWidth = 2 / this.view.scale;\n ctx.lineCap = 'butt';\n\n try {\n ctx.save();\n ctx.beginPath();\n if (this.isMovingState()) {\n ctx.setLineDash([]);\n }\n ctx.translate(this.x + this.w / 2, this.y + this.h / 2);\n ctx.rotate(this.getAngleRadian());\n\n if (this.isImage || !this.isEditingState() || this.needsPopover) {\n ctx.lineDashOffset = 0;\n ctx.strokeStyle = '#b6b7b9';\n ctx.strokeRect(-w / 2, -h / 2, w, h);\n\n ctx.lineDashOffset = 3;\n ctx.strokeStyle = '#5eb200';\n ctx.strokeRect(-w / 2, -h / 2, w, h);\n }\n\n const smallestScale = 4 / this.view.scale;\n const smallerScale = 6 / this.view.scale;\n\n const handleStyle = { stroke: '#5eb200', fill: '#fff' };\n ctx.setLineDash([]);\n\n function highlight(centerX, centerY, rounded = false) {\n ctx.beginPath();\n if (rounded === true) {\n const rectangleCenterX = centerX + smallerScale / 2;\n const rectangleCenterY = centerY + smallerScale / 2;\n ctx.arc(rectangleCenterX, rectangleCenterY, smallerScale, 0, 2 * Math.PI);\n } else {\n ctx.rect(centerX, centerY, smallerScale, smallerScale);\n }\n ctx.fillStyle = handleStyle.fill;\n ctx.fill();\n ctx.strokeStyle = handleStyle.stroke;\n ctx.stroke();\n }\n\n function startOffset(extent) {\n return -(extent / 2 + smallestScale);\n }\n\n function endOffset(extent) {\n return -extent / 2 + extent - smallerScale + smallestScale;\n }\n\n function middleOffset(extent) {\n return -extent / 2 + extent / 2 - smallerScale + smallestScale;\n }\n\n if (this.editable && this.isMovingState()) {\n // top left\n highlight(startOffset(w), startOffset(h), this.isText);\n // top right\n highlight(endOffset(w), startOffset(h), this.isText);\n // bottom left\n highlight(startOffset(w), endOffset(h), this.isText);\n //bottom right\n highlight(endOffset(w), endOffset(h), this.isText);\n\n if (!this.isText) {\n // bottom middle\n highlight(middleOffset(w), endOffset(h));\n // top middle\n highlight(middleOffset(w), startOffset(h));\n // middle right\n highlight(endOffset(w), middleOffset(h));\n // middle left\n highlight(startOffset(w), middleOffset(h));\n }\n }\n } finally {\n ctx.restore();\n }\n }\n\n _drawDiamondControl(ctx, centerX, centerY, scale) {\n const handleStyle = { stroke: '#7beb00', fill: '#a9ff4a' };\n const newScale = scale / 1.5;\n\n ctx.beginPath();\n ctx.moveTo(centerX, centerY);\n ctx.lineTo(centerX + newScale, centerY + newScale);\n ctx.lineTo(centerX, centerY + newScale * 2);\n ctx.lineTo(centerX - newScale, centerY + newScale);\n ctx.closePath();\n ctx.fillStyle = handleStyle.fill;\n ctx.fill();\n ctx.strokeStyle = handleStyle.stroke;\n ctx.stroke();\n }\n\n /**\n * Gets the points of the slot\n * @returns {object} points of the slot formatted as\n * {{x, y}}\n */\n getSlotPoints(x = null, y = null, width = null, height = null, angle = null) {\n x = isNumber(x) ? x : this.x;\n y = isNumber(y) ? y : this.y;\n width = isNumber(width) ? width : this.w;\n height = isNumber(height) ? height : this.h;\n angle = isNumber(angle) ? angle : this.angle;\n\n const topMiddle = this._getPoint(x + width / 2, y, angle);\n const bottomMiddle = this._getPoint(x + width / 2, y + height, angle);\n const middleRight = this._getPoint(x + width, y + height / 2, angle);\n const middleLeft = this._getPoint(x, y + height / 2, angle);\n const topLeft = this._getPoint(x, y, angle);\n const topRight = this._getPoint(x + width, y, angle);\n const bottomRight = this._getPoint(x + width, y + height, angle);\n const bottomLeft = this._getPoint(x, y + height, angle);\n\n return {\n topMiddle,\n bottomMiddle,\n middleRight,\n middleLeft,\n topLeft,\n topRight,\n bottomRight,\n bottomLeft,\n };\n }\n\n /**\n * Gets the points of the control items\n * @returns {object} points of the slot formatted as\n * {{x, y}}\n */\n getControlPoints() {\n const { x, y, w: width, h: height, angle } = this;\n\n const padding = 15;\n const bottomMenu = this._getPoint(\n x + width / 2,\n y + height + PAD * 1.25,\n angle\n );\n const topMenu = this._getPoint(x + width / 2, y - padding, angle);\n\n return {\n bottomMenu,\n topMenu,\n };\n }\n\n /**\n * @returns {number} angle converted to radians\n */\n getAngleRadian(angle = this.angle) {\n return Math.PI / (180.0 / angle || 0);\n }\n\n /**\n * @returns {number} angle converted to degrees\n */\n getAngleDegrees(angle = this.angle) {\n return (angle * 180) / Math.PI;\n }\n\n /**\n * Calculates new X and Y points from the current angle\n * @param {number} pointX the x coord to be rotated\n * @param {number} pointY\n * @returns {object} Newly moved point formatted as {x, y}\n */\n _getPoint(pointX, pointY, angleToUse) {\n const { pivotX, pivotY } = this.getCenter();\n let angle = this.getAngleRadian(angleToUse);\n\n // / get distance from center to point\n const diffX = pointX - pivotX;\n const diffY = pointY - pivotY;\n const distance = Math.sqrt(diffX * diffX + diffY * diffY);\n\n // / find angle from pivot to corner\n angle += Math.atan2(diffY, diffX);\n\n // / get new x and y and round it off to integer\n const x = pivotX + distance * Math.cos(angle);\n const y = pivotY + distance * Math.sin(angle);\n\n return { x, y };\n }\n\n /**\n * gets the centre point of the rectangle\n * @returns {object} center points of the rectangle {x, y}\n */\n getCenter(preDrag = false) {\n if (preDrag) {\n return {\n pivotX: this._x + this._w / 2,\n pivotY: this._y + this._h / 2,\n };\n }\n return {\n pivotX: this.x + this.w / 2,\n pivotY: this.y + this.h / 2,\n };\n }\n\n /**\n * Rotates the slot around its center and queues a re-draw\n * @param {number} mouseX The Y coord of the mouse\n * @param {number} mouseY The X coord of the mouse\n */\n rotateSlot(mouseX, mouseY, lock = 0) {\n const { x1, x2, y1, y2 } = this.view.slotRegion(this);\n const pivotX = x1 + (x2 - x1) / 2;\n const pivotY = y1 + (y2 - y1) / 2;\n\n let calculateAngle =\n (Math.atan2(mouseY - pivotY, mouseX - pivotX) * 180) / Math.PI - 90;\n\n if (calculateAngle < 0) {\n calculateAngle = 360 + calculateAngle;\n }\n if (lock > 0) {\n calculateAngle = parseInt(calculateAngle / lock, 10) * lock;\n }\n if (this.canRotate(calculateAngle)) {\n this.angle = calculateAngle;\n setTimeout(() => {\n EventEmitter.emit('prism-edit-slot-moved', {\n view: this.view,\n slot: this,\n });\n }, 10);\n this.view.drawGuides();\n this.triggerRedraw();\n }\n }\n\n /**\n * Rotates the slot around its center by 5 and queues a re-draw\n */\n keyRotate(amount) {\n let calculateAngle = this.angle + amount;\n if (!this.canRotate(calculateAngle)) return;\n\n if (calculateAngle < 0) {\n calculateAngle = 360 + calculateAngle;\n }\n this.angle = calculateAngle;\n\n setTimeout(() => {\n EventEmitter.emit('prism-edit-slot-moved', {\n view: this.view,\n slot: this,\n });\n }, 10);\n this.triggerRedraw();\n this.view.do_save();\n }\n\n /**\n * Rotates the slot around its center by 5 and queues a re-draw\n */\n setAngle(angle) {\n if (angle < 0) {\n angle = 360 + angle;\n }\n this.angle = angle;\n }\n\n /**\n * Notifies the view to save when rotating has finished\n */\n rotateComplete() {\n if (this.angle >= 357 || this.angle <= 3) {\n this.angle = 0;\n setTimeout(() => {\n EventEmitter.emit('prism-edit-slot-moved', {\n view: this.view,\n slot: this,\n });\n }, 10);\n this.triggerRedraw();\n }\n if (this.angle >= 87 && this.angle <= 93) {\n this.angle = 90;\n setTimeout(() => {\n EventEmitter.emit('prism-edit-slot-moved', {\n view: this.view,\n slot: this,\n });\n }, 10);\n this.triggerRedraw();\n }\n if (this.angle >= 177 && this.angle <= 183) {\n this.angle = 180;\n setTimeout(() => {\n EventEmitter.emit('prism-edit-slot-moved', {\n view: this.view,\n slot: this,\n });\n }, 10);\n this.triggerRedraw();\n }\n if (this.angle >= 267 && this.angle <= 273) {\n this.angle = 270;\n setTimeout(() => {\n EventEmitter.emit('prism-edit-slot-moved', {\n view: this.view,\n slot: this,\n });\n }, 10);\n this.triggerRedraw();\n }\n this.view.keepSelected = true;\n this.view.clearGuides();\n this.resetXYWH();\n this.view.do_save();\n }\n\n _getRotatedPoint(pointX, pointY) {\n const newAngle = 360 - this.angle;\n const pivotX = this.x + this.w / 2;\n const pivotY = this.y + this.h / 2;\n let angle = Math.PI / (180.0 / newAngle);\n\n // / get distance from center to point\n const diffX = pointX - pivotX;\n const diffY = pointY - pivotY;\n const distance = Math.sqrt(diffX * diffX + diffY * diffY);\n\n // / find angle from pivot to corner\n angle += Math.atan2(diffY, diffX);\n\n // / get new x and y and round it off to integer\n const x = pivotX + distance * Math.cos(angle);\n const y = pivotY + distance * Math.sin(angle);\n\n return { x, y };\n }\n\n constrainTo(x = null, y = null, w = null, h = null, a = null) {\n x = isNumber(x) ? x : this.x;\n y = isNumber(y) ? y : this.y;\n w = isNumber(w) ? w : this.w;\n h = isNumber(h) ? h : this.h;\n\n const points = Object.values(this.getSlotPoints(x, y, w, h, a));\n\n const xcoords = points.map(({ x }) => x);\n const ycoords = points.map(({ y }) => y);\n\n const min_x = Math.min(...xcoords);\n const min_y = Math.min(...ycoords);\n const max_x = Math.max(...xcoords);\n const max_y = Math.max(...ycoords);\n\n const ext = {\n x: min_x - x,\n y: min_y - y,\n w: max_x - min_x,\n h: max_y - min_y,\n };\n const [cx, cy, cw, ch] = this.constrain;\n\n return [cx - ext.x, cy - ext.y, cw - ext.w, ch - ext.h];\n }\n\n canMoveTo(x, y) {\n const [cx, cy, cw, ch] = this.constrainTo();\n return x >= cx && y >= cy && x <= cx + cw && y <= cy + ch;\n }\n\n canRotate(angle) {\n const points = this.getSlotPoints(null, null, null, null, angle);\n\n return this.withinConstraints(Object.values(points));\n }\n\n enforceBounds(editableArea) {\n if (!this.stackable()) return;\n if (!editableArea) return;\n\n if (this.insideRectangle(editableArea)) {\n return;\n }\n\n const bounds = this.bounds();\n const [, , min_w, min_h] = editableArea;\n const coeff_w = (min_w - 1) / bounds.w;\n const coeff_h = (min_h - 1) / bounds.h;\n const coeff = Math.min(coeff_w, coeff_h);\n\n let { x, y, w, h } = this;\n\n // console.warn(\"Slot %s is out of bounds: %f,%f (%f,%f)\", this.id, x, y, w, h);\n\n if (coeff < 1) {\n w = this.w * coeff;\n h = this.h * coeff;\n }\n\n // Safe because we've already checked it'll fit\n this.w = w;\n this.h = h;\n this.moveTo(x, y);\n // console.warn(\"Moved %s to %f,%f (%f,%f)\", this.id, this.x, this.y, w, h);\n }\n\n insideRectangle([x, y, w, h], loose = false) {\n const rect = new Rectangle(x, y, w, h);\n if (loose) {\n rect.modifyLimits(-3);\n }\n return Object.values(this.getPoints()).every(point =>\n rect.containsPoint(point)\n );\n }\n\n canResize({ x, y, w, h }, direction) {\n const points = this.getSlotPoints(x, y, w, h);\n const [cx, cy, cw, ch] = this.constrain;\n\n function startPoint(type, coord, start, extent = 0) {\n return Math[type](coord, start + extent);\n }\n\n function endPoint(coord, start, extent = 0) {\n return Math.min(Math.max(coord, start), start + extent);\n }\n\n switch (direction) {\n case 'top-middle':\n delete points.bottomLeft, points.bottomMiddle, points.bottomRight;\n points.topRight.x = startPoint('max', points.topRight.x, cx);\n points.topRight.y = endPoint(points.topRight.y, cy, ch);\n points.topLeft.x = startPoint('min', points.topLeft.x, cx, cw);\n points.topLeft.y = endPoint(points.topLeft.y, cy, ch);\n break;\n case 'bottom-middle':\n delete points.topLeft, points.topMiddle, points.topRight;\n points.bottomRight.x = startPoint('max', points.bottomRight.x, cx);\n points.bottomRight.y = endPoint(points.bottomRight.y, cy, ch);\n points.bottomLeft.x = startPoint('min', points.bottomLeft.x, cx);\n points.bottomLeft.y = endPoint(points.bottomLeft.y, cy, ch);\n break;\n case 'middle-right':\n delete points.topLeft, points.middleLeft, points.bottomLeft;\n points.topRight.x = startPoint('max', points.topRight.x, cx);\n points.topRight.y = endPoint(points.topRight.y, cy, ch);\n points.bottomRight.x = startPoint('max', points.bottomRight.x, cx);\n points.bottomRight.y = endPoint(points.bottomRight.y, cy, ch);\n break;\n case 'middle-left':\n delete points.bottomRight, points.middleRight, points.bottomRight;\n points.topLeft.x = startPoint('max', points.topLeft.x, cx);\n points.topLeft.y = endPoint(points.topLeft.y, cy, ch);\n points.bottomLeft.x = startPoint('max', points.bottomLeft.x, cx);\n points.bottomLeft.y = endPoint(points.bottomLeft.y, cy, ch);\n break;\n case 'top-left':\n delete points.bottomRight;\n points.topRight.x = startPoint('max', points.topRight.x, cx);\n points.topRight.y = endPoint(points.topRight.y, cy, ch);\n points.bottomLeft.x = endPoint(points.bottomLeft.x, cx, cw);\n points.bottomLeft.y = startPoint('max', points.bottomLeft.y, cy);\n break;\n case 'top-right':\n delete points.bottomLeft;\n points.topLeft.x = startPoint('min', points.topLeft.x, cx + cw);\n points.topLeft.y = endPoint(points.bottomRight.y, cy, ch);\n points.bottomRight.x = endPoint(points.bottomRight.x, cx, cw);\n points.bottomRight.y = startPoint('max', points.bottomRight.y, cy);\n break;\n case 'bottom-right':\n delete points.topLeft;\n points.topRight.x = endPoint(points.bottomLeft.x, cx, cw);\n points.topRight.y = startPoint('min', points.topRight.y, cy, ch);\n points.bottomLeft.x = startPoint('min', points.bottomLeft.x, cx, cw);\n points.bottomLeft.y = endPoint(points.bottomLeft.y, cy, ch);\n break;\n case 'bottom-left':\n delete points.topRight;\n points.topLeft.x = endPoint(points.topLeft.x, cx, cw);\n points.topLeft.y = startPoint('min', points.topLeft.y, cy, ch);\n points.bottomRight.x = startPoint('max', points.bottomRight.x, cx);\n points.bottomRight.y = endPoint(points.bottomRight.y, cy, ch);\n break;\n }\n\n return this.withinConstraints(Object.values(points));\n }\n\n resize({ x, y, w, h }, direction) {\n if (!this.canResize({ x, y, w, h }, direction)) {\n return;\n }\n\n this.moveTo(x, y);\n\n this.setClipSize(Math.max(w, this.minWidth), Math.max(h, this.minHeight));\n }\n\n withinConstraints(points) {\n const [x, y, w, h] = this.constrain;\n\n const xBetweenFn = betweenFactory(x, x + w);\n const yBetweenFn = betweenFactory(y, y + h);\n\n return points.every(p => xBetweenFn(p.x) && yBetweenFn(p.y));\n\n function betweenFactory(min, max) {\n // Limit precision to avoid unexpected results.\n min = Math.round(parseFloat(min) * 10000);\n max = Math.round(parseFloat(max) * 10000);\n\n return function between(value) {\n value = Math.round(parseFloat(value) * 10000);\n\n return value >= min && value <= max;\n };\n }\n }\n\n /**\n * Is this slot allowed to be overridden\n */\n canOverride() {\n return false;\n }\n\n /**\n * Checks if this slot is overridden\n */\n isOverride() {\n return false;\n }\n\n overriddenId() {}\n\n acceptsImage() {\n return false;\n }\n\n isOptionalBackground() {\n return false;\n }\n\n canShowEditLevel2() {\n return false;\n }\n}\n\nexport default SlotBase;","class MyMatrix {\n constructor(a, b, c, d, e, f) {\n // a = xx, b = xy\n // c = yx, d = yy\n // e = dx, f = dy\n \n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n }\n\n transform_point(x, y) {\n return [this.a * x + this.c * y + this.e, this.b * x + this.d * y + this.f];\n }\n\n invert() {\n const d = this.a * this.d - this.b * this.c;\n return new MyMatrix(\n this.d / d,\n -this.c / d,\n -this.c / d,\n this.a / d,\n (this.b * this.f - this.d * this.e) / d,\n (this.c * this.e - this.a * this.f) / d\n );\n }\n\n // assume degrees\n static rotate(angle) {\n angle = (angle * Math.PI) / 180;\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n\n return new MyMatrix(c, -s, s, c, 0, 0);\n }\n}\n\nwindow.MyMatrix = MyMatrix;\n\nexport default MyMatrix;\n","// Import Modules\nimport fetchImage from '../../../_utils/fetch-image';\nimport IU from '../../../_utils/img/img-utils';\nimport wkLogger from '../logger';\nimport PrismQuality from '../prism-quality';\nimport DpiThreshold from '../../utils/dpi-threshold';\n\nimport Point from '../geom/point';\nimport { isCalendarEventPhotoSlot } from '../../utils/special-slots';\nimport genericHelpers from '../../../_utils/generic-helpers';\nimport { isCanvas } from '../../trays/tray-determiner';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\nimport { safeNumber, ctxApplyMatrix } from './utils';\nimport { imgComplete, PlaceFiller, LoadingImage, BlankEmptyImage } from './imageLoaders';\nimport SlotBase from './slotBase';\nimport MyMatrix from './matrix';\n\nconst EditMode = {\n Content: 1,\n Layout: 2,\n};\n\nconst { imgHelpers } = IU;\n\nconst {\n imgHelpers: { urlMunge },\n} = IU;\n\nconst { MAX_ZOOM, MIN_ZOOM } = IU;\n\nclass ImageSlot extends SlotBase {\n RealMatrix = true;\n\n constructor(area, properties = {}) {\n super();\n\n this.editable = true;\n\n this.isImage = true;\n\n this.isText = false;\n\n this.type = 'image';\n this.scale = 2;\n\n this.straighten_min = -15;\n this.straighten_max = 15;\n\n this.gamma_min = 0.1;\n this.gamma_max = 1.9;\n this.lowDpi = false;\n\n // Allows view & constrain properties to be set on creation\n ['view', 'constrain'].forEach(key => {\n if (properties.hasOwnProperty(key)) {\n this[key] = properties[key];\n }\n });\n\n this.setCoords(area.x, area.y, area.w, area.h);\n this.editMode = EditMode.Content;\n }\n\n /**\n * Checks if this slot is overridden\n */\n isOverridePhoto() {\n return /^override-photo-/.test(this.id);\n }\n\n overriddenId() {\n if (this.isOverridePhoto()) {\n return this.id.replace(/^override-photo-/, '');\n }\n }\n\n static from(slotData, properties = {}) {\n // split the layout from the rest of the data\n const { layout, ...data } = slotData.data || {};\n\n // create the imageslot with the layout but fallback to 'pixel-coords' if needed\n const area =\n layout || (([x, y, w, h]) => ({ x, y, w, h }))(slotData['pixel-coords']);\n\n const slot = new ImageSlot(area, properties);\n\n // top level attributes\n ['id', 'type', 'content_type'].forEach(\n key => slotData.hasOwnProperty(key) && (slot[key] = slotData[key])\n );\n\n slotData.matrix && (slot.matrix = new MyMatrix(...slotData.matrix));\n slotData.imatrix && (slot.imatrix = new MyMatrix(...slotData.imatrix));\n\n // data object level attributes\n ['zindex', 'embellishment_type'].forEach(\n key =>\n !slot.hasOwnProperty(key) &&\n data.hasOwnProperty(key) &&\n (slot[key] = data[key])\n );\n\n if (!slot.stackable()) {\n slot.meta = slotData;\n }\n return slot;\n }\n\n restoreData(data) {\n let { img } = this;\n if (!img && data.url) {\n img = fetchImage(urlMunge(data.url), 'use-credentials');\n }\n return this.setImage(img || null, data.imgId, data);\n }\n\n clearData() {\n this.img = null;\n this.lowDpi = false;\n this.restoreData({});\n }\n\n data() {\n const data = {\n url: this.img ? this.img.src : void 0,\n imgId: this.imgId || this.image,\n x: safeNumber(this.ix, 0.5),\n y: safeNumber(this.iy, 0.5),\n zoom: safeNumber(this.zoomFactor, 1),\n angle: safeNumber(this.angle, 0),\n filter: this.filter || 'colour',\n stroke: this.stroke,\n straighten: safeNumber(this.straighten, 0),\n gamma: safeNumber(this.gamma, 1.0),\n lowDpi: this.lowDpi,\n zindex: this.zindex,\n layout: {\n x: safeNumber(this.x, 0),\n y: safeNumber(this.y, 0),\n w: safeNumber(this.w, 10),\n h: safeNumber(this.h, 10),\n },\n };\n\n if (this.isEmbellishment()) {\n data.embellishment_type = this.embellishment_type;\n }\n\n return data;\n }\n\n draw(ctx) {\n let _ref;\n if (this.original && this.original.img) this.img = this.original.img;\n if (imgComplete(this.img)) {\n var img = this._img || this.img;\n const vars = {};\n let ratio = this.img.width / this.img.height;\n\n if (this.meta && this.meta['pixel-coords']) {\n const r = this.meta['pixel-coords'];\n ratio = r[2] / r[3];\n }\n\n vars.fx = this.filter || 'colour';\n // vars.angle = this.angle;\n vars.angle = 0; // we do this in web prism\n vars.straighten = this.straighten;\n vars.gamma = this.gamma;\n\n const key = [\n vars.fx,\n vars.angle,\n vars.straighten,\n vars.gamma,\n ].join('-');\n\n if (this.key !== key || !this._img) {\n this.key = key;\n this._img = imgHelpers.doProcessPhoto(this.img, vars, ratio);\n img = this._img;\n }\n\n if (this.original) {\n this.drawCentred(ctx, img, this.original.data());\n } else {\n this.drawCentred(ctx, img, this.data());\n }\n } else if (this.isEmbellishment()) {\n // Don't render loading or placefiller images for embellishments\n return;\n } else if (this.img && !imgComplete(this.img) && LoadingImage.complete) {\n this.drawCentred(ctx, LoadingImage, {\n x: 0.5,\n y: 0.5,\n zoom: 1.0,\n angle: 0,\n filter: 'colour',\n });\n } else if (\n !this.img &&\n PlaceFiller.complete &&\n ((_ref = this.view) != null ? _ref.editable || this.isColour() : void 0)\n ) {\n if (this.isOptionalBackground()) {\n if (!this.imgId) {\n // Default white background?\n this.imgId = '#ffffff';\n }\n }\n var img;\n img = this.isClone() ? BlankEmptyImage : PlaceFiller;\n this.drawCentred(ctx, img, {\n x: 0.5,\n y: 0.5,\n zoom: 1.0,\n angle: 0,\n filter: 'colour',\n });\n }\n }\n\n draw_clip(ctx, clip_path) {\n if (!window.Path2D) {\n return;\n }\n const path = new Path2D(clip_path);\n ctx.clip(path, 'evenodd');\n }\n\n drawCentred(ctx, img, info) {\n let p;\n let _ref;\n if (!img) return;\n\n if (this.meta) {\n if (this.RealMatrix) {\n ctxApplyMatrix(ctx, this.meta);\n } else {\n ctx.translate(this.meta.shift[0], this.meta.shift[1]);\n ctx.scale(this.meta.scale[0], this.meta.scale[1]);\n ctx.rotate(this.meta.rotate);\n }\n if (this.meta.clip_path) {\n try {\n this.draw_clip(ctx, this.meta.clip_path);\n } catch (_error) {}\n }\n }\n\n ctx.save();\n try {\n if (this.isColour()) {\n this._drawColour(ctx);\n } else {\n this._drawImage(ctx, img, info);\n }\n } finally {\n ctx.restore();\n }\n }\n\n _drawImage(ctx, img, info) {\n const p = this.calculateRenderArea(img, info);\n if (this.stackable()) {\n ctx.translate(this.x + this.w / 2, this.y + this.h / 2);\n ctx.rotate(this.getAngleRadian());\n ctx.drawImage(\n img,\n p.img.x,\n p.img.y,\n p.img.w,\n p.img.h,\n -p.tgt.w / 2,\n -p.tgt.h / 2,\n p.tgt.w,\n p.tgt.h\n );\n } else {\n ctx.translate(this.x, this.y);\n ctx.rotate((Math.PI * (360 - info.angle)) / 180);\n ctx.drawImage(\n img,\n p.img.x,\n p.img.y,\n p.img.w,\n p.img.h,\n p.tgt.x,\n p.tgt.y,\n p.tgt.w,\n p.tgt.h\n );\n }\n this.p = p;\n }\n\n _drawColour(ctx) {\n const imgId = this.imgId || this.image;\n if (!(typeof imgId === 'string' && imgId.match(/^\\#[A-Fa-f0-9]{6}/))) {\n return;\n }\n\n ctx.beginPath();\n ctx.fillStyle = imgId;\n if (this.stackable()) {\n ctx.translate(this.x + this.w / 2, this.y + this.h / 2);\n ctx.rotate(this.getAngleRadian());\n ctx.rect(-this.w / 2, -this.h / 2, this.w, this.h);\n } else {\n const c = this.meta['real-coords'];\n ctx.rect(c[0], c[1], c[2], c[3]);\n }\n ctx.fill();\n }\n\n drawLowDpiWarning(ctx) {\n if (!this.hasLowDpi(this.slotData, this.photoData)) return;\n\n this.drawWarning(ctx, 'Low Quality');\n }\n\n drawOrientationWarning(ctx) {\n if (this.matchSlotOrientation() || this.hasLowDpi(this.slotData, this.photoData) || !isCanvas()) return;\n\n this.drawWarning(ctx, 'Orientation Mismatch', 'yellow', false);\n }\n\n drawWarning(ctx, msg, colour_scheme = 'default', show_icon = true) {\n // Getting same font as whole site\n const font = $('body')\n .css('fontFamily')\n .toString();\n const iconImg =\n colour_scheme === 'default'\n ? PrismQuality.exclamation\n : PrismQuality.exclamationBlack;\n const backgroundColour =\n colour_scheme === 'default'\n ? 'rgba(0, 0, 0, 0.68)'\n : 'rgba(255, 193, 32, 0.68)';\n const textColour =\n colour_scheme === 'default'\n ? 'rgba(255, 255, 255, 1)'\n : 'rgba(0, 0, 0, 1)';\n\n let x = this.x - this.ox;\n const y = this.y - this.oy;\n\n ctx.save();\n let w = this.w - 1;\n const h = this.h - 1;\n\n if (this.meta) {\n if (this.RealMatrix) {\n ctxApplyMatrix(ctx, this.meta);\n } else {\n if (this.meta.shift) {\n ctx.translate(this.meta.shift[0], this.meta.shift[1]);\n }\n if (this.meta.scale) ctx.scale(this.meta.scale[0], this.meta.scale[1]);\n if (typeof this.meta.rotate === 'number' && this.meta.rotate !== 0) {\n ctx.rotate(this.meta.rotate);\n }\n }\n }\n ctx.lineWidth = 2;\n let fontSize = 10;\n\n if (this.meta && this.meta.scale) {\n const scale = Math.abs(this.meta.scale[0]);\n ctx.lineWidth /= scale;\n fontSize /= scale;\n }\n\n const overlap = (w / 100) * 5;\n ctx.font = `${fontSize}px ${font}`;\n const info = ctx.measureText(msg);\n const info_width = info.width * 1.2;\n const dpi_x = x + (w - info_width) / 2;\n const dpi_y = y + h - fontSize - overlap;\n const msgHeight = fontSize * 1.2 + 1;\n\n ctx.globalAlpha = 1;\n if (this.view.selected && this.view.selected.img) {\n if (this.isCalendarDayEntry()) {\n // XXX This is due to calendar small slots, this will overlap the slot\n // and remain same readable fonsize\n const iconTextWidth = iconImg.width + info_width;\n w = iconTextWidth + iconTextWidth / 4;\n x -= iconTextWidth / 4;\n }\n ctx.fillStyle = backgroundColour;\n ctx.fillRect(x, dpi_y, w, msgHeight);\n ctx.drawImage(iconImg, dpi_x, dpi_y, msgHeight, msgHeight);\n ctx.fillStyle = textColour;\n ctx.fillText(msg, dpi_x + fontSize + info.width * 0.1, dpi_y + fontSize);\n }\n return ctx.restore();\n }\n\n calculateRenderArea(img, info) {\n const p = {\n img: {\n x: 0,\n y: 0,\n w: 0,\n h: 0,\n },\n tgt: {\n x: 0,\n y: 0,\n w: 0,\n h: 0,\n },\n };\n\n let x = 0;\n let y = 0;\n let w = 0;\n let h = 0;\n info.x = this.constrainRange(info.x, 0, 1.0);\n info.y = this.constrainRange(info.y, 0, 1.0);\n const align = {\n x: info.x,\n y: info.y,\n };\n let ih;\n let iw;\n\n if (this.stackable()) {\n iw = img.width;\n ih = img.height;\n w = this.w;\n h = this.h;\n info.x = align.x;\n info.y = align.y;\n } else {\n switch (info.angle) {\n case 0:\n iw = img.width;\n ih = img.height;\n w = this.w;\n h = this.h;\n info.x = align.x;\n info.y = align.y;\n break;\n case 270:\n ih = img.height;\n iw = img.width;\n w = this.h;\n h = this.w;\n y -= h;\n info.x = align.y;\n info.y = 1 - align.x;\n break;\n case 180:\n iw = img.width;\n ih = img.height;\n w = this.w;\n h = this.h;\n x -= w;\n y -= h;\n info.x = 1 - align.x;\n info.y = 1 - align.y;\n break;\n case 90:\n ih = img.height;\n iw = img.width;\n w = this.h;\n h = this.w;\n x -= w;\n info.y = align.x;\n info.x = 1 - align.y;\n }\n }\n const src_aspect = iw / ih;\n const tgt_aspect = w / h;\n if (tgt_aspect < src_aspect) {\n p.img.w = parseInt(ih * tgt_aspect, 10);\n p.img.h = ih;\n p.aspect = 'tgtmin';\n } else {\n p.img.w = iw;\n p.img.h = parseInt(iw / tgt_aspect, 10);\n p.aspect = 'srcmin';\n }\n p.img.w /= info.zoom;\n p.img.h /= info.zoom;\n p.img.x = info.x * (iw - p.img.w);\n p.img.y = info.y * (ih - p.img.h);\n if (p.img.x < 0) p.img.x = 0;\n if (p.img.y < 0) p.img.y = 0;\n if (p.img.w + p.img.x > iw) p.img.x = iw - p.img.w;\n if (p.img.h + p.img.y > ih) p.img.y = ih - p.img.h;\n if (p.img.x < 0) p.img.x = 0;\n if (p.img.y < 0) p.img.y = 0;\n if (p.img.w + p.img.x > iw) p.img.w = iw - p.img.x;\n if (p.img.h + p.img.y > ih) p.img.h = ih - p.img.y;\n p.tgt.x = x;\n p.tgt.y = y;\n p.tgt.w = w;\n p.tgt.h = h;\n return p;\n }\n\n imageInfo() {\n if (!this.imgId) return false;\n\n const prismItem = usePrismItemStore.getState().prismItem;\n\n if (!prismItem) return false;\n if (!prismItem.imageList) return false;\n\n for (let i = 0; i < prismItem.imageList.length; i++) {\n if (prismItem.imageList[i].id == this.imgId) {\n return prismItem.imageList[i];\n }\n }\n\n return false;\n }\n\n getSize() {\n const info = this.imageInfo() || {};\n\n return {\n width: info.width,\n height: info.height,\n };\n }\n\n get slotData() { \n return { ...this.data() };\n }\n\n get photoData() { \n return prismItem.imageList.find(image => image.id === Number(this.imgId)); \n }\n\n effectiveDims() {\n const imgInfo = this.imageInfo();\n if (!imgInfo) return false;\n\n const imgData = this.data();\n const adjHeight = imgInfo.height / imgData.zoom;\n const adjWidth = imgInfo.width / imgData.zoom;\n const sideWays = imgData.angle % 180 !== 0;\n\n if (sideWays) {\n return { x: adjHeight, y: adjWidth }; // x and y swapped if the image is \"on its side\"\n }\n\n return { x: adjWidth, y: adjHeight };\n }\n \n acceptsImage({ allowOptionalBackground = false } = {}) {\n const predicates = [this.isClone, this.isEmbellishment];\n\n if (!allowOptionalBackground) {\n predicates.push(this.isOptionalBackground);\n }\n\n return predicates.every(predicate => !predicate.call(this));\n }\n\n canAppend() {\n return (\n !this.img &&\n !this.isColour() &&\n !this.isClone() &&\n !this.isOptionalBackground() &&\n !this.isCalendarDayEntry()\n );\n }\n\n setAsClone(original) {\n return (this.original = original);\n }\n\n setAsColour(colour) {\n this.imgId = colour;\n this.img = null;\n }\n\n isColour() {\n if (typeof this.imgId === 'string') {\n if (this.imgId.match(/^#[A-Fa-f0-9]{6}$/)) {\n return true;\n }\n }\n return false;\n }\n\n setImage(img, imgId, data) {\n let _ref;\n let _ref2;\n let _ref3;\n let _ref4;\n let _ref5;\n const _this = this;\n if (!data) data = false;\n this.zoomFactor =\n (_ref = data != null ? data.zoom : void 0) != null ? _ref : 1;\n this.angle =\n (_ref2 = data != null ? data.angle : void 0) != null ? _ref2 : 0;\n this.ix = (_ref3 = data != null ? data.x : void 0) != null ? _ref3 : 0.5;\n this.iy = (_ref4 = data != null ? data.y : void 0) != null ? _ref4 : 0.5;\n this.filter =\n (_ref5 = data != null ? data.filter : void 0) != null ? _ref5 : 'colour';\n this.straighten =\n (_ref5 = data != null ? data.straighten : void 0) != null ? _ref5 : 0;\n this.gamma =\n (_ref5 = data != null ? data.gamma : void 0) != null ? _ref5 : 1.0;\n this.imgId = imgId;\n this.lowDpi = this.hasLowDpi(this.slotData, this.photoData);\n this.key = null;\n this._img = null;\n if (img) {\n this._img = null;\n this.img = img;\n this.setFilter(data.filter);\n\n if (imgComplete(img)) {\n _this.triggerRedraw();\n } else {\n img.onload = function(e) {\n _this.triggerRedraw();\n };\n }\n } else {\n this.img = null;\n this.image = null;\n _this.triggerRedraw();\n }\n }\n\n setData(imgInfo, data) {\n if (imgInfo) {\n const img = fetchImage(\n urlMunge(imgInfo.urls[data.filter] || imgInfo.url),\n 'use-credentials'\n );\n this.setImage(img, imgInfo.id, data);\n } else {\n this.setImage(null, null, {});\n }\n }\n\n properties = [\n 'angle',\n 'filter',\n 'gamma',\n 'imgId',\n 'ix',\n 'iy',\n 'straighten',\n 'zindex',\n 'zoomFactor',\n ];\n\n dragStopped() {\n this._set_ix(this.ix);\n return this._set_iy(this.iy);\n }\n\n setProperty(name, value) {\n if (!this.img) return false;\n if (this._set(name, value)) {\n return true;\n }\n return false;\n }\n\n straightenBy(value) {\n return this._set('straighten', this.straighten + value);\n }\n\n brightenBy(value) {\n return this._set('gamma', this.gamma + value);\n }\n\n setProperties(data) {\n const { x, y, zoom, filter, angle, ...properties } = data;\n data = Object.assign(properties, {\n ix: x,\n iy: y,\n zoomFactor: zoom,\n angle,\n });\n\n for (const [key, value] of Object.entries(data)) {\n if (typeof value !== 'undefined') this.setProperty(key, value);\n }\n\n if (typeof filter !== 'undefined') this.setFilter(filter);\n\n this.view.do_save();\n this.triggerRedraw();\n }\n\n _set_ix(value) {\n return (this.ix = this.constrainRange(value, 0, 1.0, 0.5));\n }\n\n _set_iy(value) {\n return (this.iy = this.constrainRange(value, 0, 1.0, 0.5));\n }\n\n zoomBy(mod) {\n if (!this.img) return false;\n return this.setZoom(this.zoomFactor + mod);\n }\n\n setZoom(zoom) {\n if (!this.img) return false;\n\n zoom = parseFloat(zoom);\n if (zoom < MIN_ZOOM) {\n zoom = MIN_ZOOM;\n }\n if (zoom > MAX_ZOOM) {\n zoom = MAX_ZOOM;\n }\n if (zoom !== this.zoomFactor) {\n this.zoomFactor = zoom;\n return true;\n }\n }\n\n rotate(angle) {\n if (!this.img) return false;\n\n let newAngle = this.angle + angle;\n while (newAngle < 360) newAngle += 360;\n if (this.stackable() && !this.canRotate(newAngle)) return;\n\n const [x, y] = (() => {\n return Math.abs(angle) === IU.RIGHT_ANGLE\n ? [this.iy, this.ix]\n : [this.ix, this.iy];\n })();\n\n this.setProperties({\n x,\n y,\n angle: newAngle % 360,\n });\n }\n\n setClipSize(w, h) {\n // Stickers are being cropped by the boundaries of the slot instead of scaling within it correctly.\n if (this.isSticker()) {\n w = h = Math.min(w, h);\n }\n this.w = w;\n this.h = h;\n }\n\n setCoords(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n\n this.moveTo(x, y);\n return this.setClipSize(w, h);\n }\n\n isLoading() {\n return this.img && !this.img.complete;\n }\n\n setFilter(filter = 'colour') {\n if (this.filter === filter) {\n return; // nothing to do here\n }\n\n if (this.img) {\n this._img = null;\n if (imgHelpers.doProcessPhoto) {\n // no-op - we process clientside\n } else {\n this.img.crossOrigin = 'use-credentials';\n this.img.src = urlMunge(\n this.img.src.replace(\n /\\/(greyscale|bw|sepia|colour|blue|bluetone)[a-z]*$/,\n `/${filter}`\n )\n );\n }\n this.filter = filter;\n }\n }\n\n constrainRange(val, min, max, def_value) {\n if (def_value != null && isNaN(val)) return def_value;\n if (val < min) return min;\n if (val > max) return max;\n return val;\n }\n\n moveImgBy(x, y) {\n const radiansAngle = Point.degreesToRadians(this.angle);\n\n const xMod = x * Math.cos(radiansAngle) + y * Math.sin(radiansAngle);\n const yMod = x * Math.sin(-radiansAngle) + y * Math.cos(radiansAngle);\n const dx = this.stackable() ? xMod : x;\n const dy = this.stackable() ? yMod : y;\n\n let img;\n if (x === 0 && y === 0) return;\n if (imgComplete(this.img)) {\n img = {\n w: this.img.width * this.zoomFactor - this.p.img.w,\n h: this.img.height * this.zoomFactor - this.p.img.h,\n };\n if (this.angle === 90 || this.angle === 270) {\n [img.w, img.h] = [img.h, img.w];\n }\n wkLogger.debug('Move by %o', {\n xMod,\n yMod,\n });\n if (img.w > 0) this._set_ix(this._ix - dx / img.w);\n if (img.h > 0) this._set_iy(this._iy - dy / img.h);\n }\n }\n\n slotRatio() {\n if (this.meta) {\n return this.meta['pixel-coords'][3] / this.meta['pixel-coords'][2];\n }\n return this.h / this.w;\n }\n\n editorData() {\n const { angle, ...slotData } = this.data();\n const stackable = this.stackable();\n\n return {\n ...slotData,\n id: this.id,\n image: this.img,\n angle: stackable ? 0 : angle,\n stackable,\n crop_ratio: this.slotRatio(),\n dimensions: {\n width: this.w || this.meta['real-coords'][WIDTH],\n height: this.h || this.meta['real-coords'][HEIGHT],\n },\n };\n }\n\n matchSlotOrientation() {\n const prismItem = usePrismItemStore.getState().prismItem;\n\n const photoData = prismItem.imageList.find(\n image => image.id === Number(this.imgId)\n );\n if (!photoData) return;\n\n return genericHelpers.imageMatchesSlotOrientation(photoData, this);\n }\n\n hasLowDpi(slotData, photoData) { \n if (this.meta || this.stackable()) {\n const dpiThreshold = new DpiThreshold(genericHelpers.getImageOutputDpiWithSlotData(slotData, photoData)).isTooLow;\n \n this.lowDpi = dpiThreshold;\n this.slotData.lowDpi = dpiThreshold;\n \n \n return dpiThreshold;\n }\n }\n\n isEmbellishment() {\n return this.content_type === 'embellishment';\n }\n\n isSticker() {\n return this.isEmbellishment() && this.embellishment_type === 'sticker';\n }\n\n isPattern() {\n return this.isEmbellishment() && this.embellishment_type === 'pattern';\n }\n\n isOptionalBackground() {\n return this.id === 'optional-bg';\n }\n\n canShowEditLevel2() {\n return !this.isEmbellishment();\n }\n\n isCalendarDayEntry() {\n return isCalendarEventPhotoSlot(this.id);\n }\n\n convertFromTemplateToStackable(editableArea) {\n const { meta } = this;\n if (!meta || this.stackable()) return;\n this.id = `override-photo-${meta.id}`;\n this.type = 'stackable';\n this.content_type = 'image';\n const [x, y] = this.matrix.transform_point(this.x, this.y);\n\n const realScaleX = meta.scale[0];\n const realScaleY = meta.scale[1];\n const scaleX = Math.abs(realScaleX);\n const scaleY = Math.abs(realScaleY);\n\n this.x = x;\n this.y = y;\n this.w *= scaleX;\n this.h *= scaleY;\n\n let angle = meta.rotate;\n\n if (realScaleX < 0 || realScaleY < 0) {\n const initialReference = new Point(this.x, this.y);\n if (realScaleX < 0 && realScaleY >= 0) {\n angle = -angle;\n const opposite = new Point(this.x - this.w, this.y);\n opposite.rotate(initialReference, this.getAngleDegrees(angle));\n this.x = opposite.x;\n this.y = opposite.y;\n }\n if (realScaleY < 0 && realScaleX >= 0) {\n angle = -angle;\n const opposite = new Point(this.x, this.y - this.h);\n opposite.rotate(initialReference, this.getAngleDegrees(angle));\n this.x = opposite.x;\n this.y = opposite.y;\n }\n if (realScaleY < 0 && realScaleX < 0) {\n const initialReference = new Point(this.x, this.y);\n const opposite = new Point(this.x - this.w, this.y - this.h);\n opposite.rotate(initialReference, angle);\n this.x = opposite.x;\n this.y = opposite.y;\n }\n }\n\n this.angle = this.getAngleDegrees(angle);\n\n const centerCoord = [this.x + this.w / 2, this.y + this.h / 2];\n const centerPoint = new Point(centerCoord[0], centerCoord[1]);\n const slotCoordRotated = new Point(this.x, this.y).rotate(\n centerPoint,\n this.angle\n );\n const diffX = this.x - slotCoordRotated.x;\n const diffY = this.y - slotCoordRotated.y;\n\n this.x += diffX;\n this.y += diffY;\n\n delete this.meta;\n delete this.matrix;\n delete this.imatrix;\n\n if (!this.insideRectangle(editableArea)) {\n this.enforceBounds(editableArea);\n }\n\n return this;\n }\n\n permittedToBeStacked() {\n return (\n this.fromTemplate && this.inEditableArea && !this.isOptionalBackground()\n );\n }\n}\n\nexport default ImageSlot;\n","\n// Import Libraries\nimport md5 from 'js-md5';\n\n// Import JS Modules\nimport UrlBuilder from '../../_utils/url-building';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\n// --------------------------------------------------------------------\n\nclass TextPreviewUrl {\n constructor(slot) {\n this.slot = slot;\n }\n\n generate() {\n const prismItem = usePrismItemStore.getState().prismItem;\n \n this.queryString || (this.queryString = this.generateQueryString());\n\n return `/edt/fnt/str/${prismItem.sec}/${prismItem.num}?${this.queryString}`;\n }\n\n generateQueryString() {\n const params = Object.assign(this.params, {\n random: this.md5,\n });\n\n return UrlBuilder.buildURLQuery(params);\n }\n\n get params() {\n if (this.memoizedParams) {\n return this.memoizedParams;\n }\n\n const {\n id, string, fontName, fontSize, fontWeight, fontSlant, zoom, align, valign, scale, w, h, renderer, stroke, templateId, pageIndex,\n } = this.slot;\n let { fontColour } = this.slot;\n\n if (fontColour.slice(0, 1) === '#') {\n fontColour = `X${fontColour.slice(1)}`;\n }\n\n const params = {\n text: string,\n colour: fontColour,\n font: fontName,\n size: fontSize,\n bold: fontWeight,\n italic: fontSlant,\n zoom,\n width: w,\n height: h,\n renderer,\n align,\n valign,\n scale,\n slt: id,\n template: templateId,\n index: pageIndex,\n };\n\n if (stroke) {\n ['width', 'opacity', 'colour', 'linejoin'].forEach((type) => {\n params[`stroke_${type}`] = stroke[type];\n });\n }\n\n return this.memoizedParams = params;\n }\n\n get md5() {\n return md5(UrlBuilder.buildURLQuery(this.params));\n }\n}\n\n// --------------------------------------------------------------------\n\nexport default TextPreviewUrl;\n","function validJSON(jsonString) {\n try {\n const parsedString = JSON.parse(jsonString);\n if (parsedString && typeof parsedString === 'object') return true;\n } catch (error) {\n console.warn(\n 'String in MyLab for this product is not valid: ',\n jsonString,\n ' error message: ',\n error,\n );\n return false;\n }\n return false;\n}\n\nfunction hasFoilText(adjustments) {\n return (\n adjustments.replace_prism_view_text_fill === true &&\n validJSON(adjustments.replacement_prism_view_text_fill_colour) === true\n );\n}\n\nexport { hasFoilText };\n","// Import Modules\nimport fetchImage from '../../../_utils/fetch-image';\nimport { EventEmitter } from 'wk-event-emitter';\nimport TextPreviewUrl from '../../utils/text-preview-url';\nimport { isCalendarEventTextSlot } from '../../utils/special-slots';\nimport IU from '../../../_utils/img/img-utils';\nimport genericHelpers from '../../../_utils/generic-helpers';\nimport { safeNumber, stripString, ctxApplyMatrix } from './utils';\nimport { imgComplete, BlankImage } from './imageLoaders';\nimport SlotBase from './slotBase';\nimport { replaceImageFillWithGradient } from '../../../_utils/img/canvas.js';\nimport { replaceImageFillWithWhiteAndThresholdAlpha } from '../../../_utils/img/canvas.js';\nimport { hasFoilText } from '../../utils/has-foil-text';\n\nconst {\n imgHelpers: { urlMunge },\n} = IU;\n\nclass TextSlot extends SlotBase {\n FONT_WEIGHT_NORMAL = 0;\n\n FONT_WEIGHT_BOLD = 1;\n\n FONT_SLANT_NORMAL = 0;\n\n FONT_SLANT_OBLIQUE = 1;\n\n RealMatrix = true;\n\n constructor(id) {\n super();\n\n this.isImage = false;\n\n this.isText = true;\n\n this.zoom = 1.0;\n\n this.type = 'text';\n\n const _this = this;\n\n this.id = id;\n\n this.string = 'Enter text';\n\n this.fontName = 'Lora';\n\n this.fontSize = 36;\n\n this.fontWeight = this.FONT_WEIGHT_NORMAL;\n\n this.fontSlant = this.FONT_SLANT_NORMAL;\n\n this.fontColour = '#000000';\n\n this.align = 'left';\n\n this.scale = 1.0;\n\n this.valign = 'top';\n\n this.renderer = 'simple'; // \"default\";\n\n this.img = new Image();\n\n this.img.onload = function(e) {\n return _this.onLoad(e);\n };\n }\n\n isLoading() {\n return this.img && !this.img.complete;\n }\n\n setAsClone(original) {\n return (this.original = original);\n }\n\n setRenderer(renderer) {\n if (this._set_renderer(renderer)) {\n return this.queueReload();\n }\n }\n\n _set_renderer(renderer) {\n renderer = 'simple';\n if (this.renderer !== renderer) {\n this.renderer = renderer;\n return true;\n }\n return false;\n }\n\n _set_scale(value) {\n let coords;\n let _ref;\n\n if (value === this.scale) return false;\n this.scale = value;\n coords = (_ref = this.meta) != null ? _ref['pixel-coords'] : void 0;\n if (this.meta && coords && this.fromTemplate) {\n this.x = coords[0];\n this.y = coords[1];\n this.w = coords[2];\n this.h = coords[3];\n }\n return true;\n }\n\n setScale(scale) {\n if (this._set_scale(scale)) return this.queueReload();\n }\n\n preview_url() {\n const data = this.data();\n\n if (data.string.length === 0) {\n if (!this.isCalendarDayEntry() && this.view && this.view.editable) {\n data.string = this.isClone() ? '' : 'Enter your text';\n } else {\n return BlankImage.src;\n }\n }\n\n return new TextPreviewUrl(data).generate();\n }\n\n isCalendarDayEntry() {\n return isCalendarEventTextSlot(this.id);\n }\n\n copyFrom(slot) {\n this.align = slot.align;\n this.fontColour = slot.fontColour;\n this.fontName = slot.fontName;\n this.fontWeight = slot.fontWeight;\n this.fontSize = slot.fontSize;\n this.fontSlant = slot.fontSlant;\n this.string = slot.string;\n this.valign = slot.valign;\n\n this._reload();\n }\n\n resizeToFit() {\n let changed = false;\n if (this.fromTemplate) return;\n\n if (this.constrain && this.constrain.length) {\n if (this.h > this.constrain[3]) {\n this.h = this.constrain[3];\n changed = true;\n }\n if (this.w > this.constrain[2]) {\n this.w = this.constrain[2];\n changed = true;\n }\n }\n\n if (changed) {\n this.queueReload('slot resizeToFit', 300);\n }\n }\n\n // called when re-sizing the text slot\n setClipSize(w, h) {\n if (this.fromTemplate) return;\n w = w > 10 ? (w > 400 ? 400 : w) : 10;\n h = h > 10 ? (h > 400 ? 400 : h) : 10;\n\n this.w = w;\n this.h = h;\n return this.queueReload('text resize', 2000); // 2s = Rough Prism Round-Trip Time for text render\n }\n\n moveBy(dx, dy) {\n if (this.fromTemplate) return false;\n\n this.x += dx;\n this.y += dy;\n return true;\n }\n\n queueReload(reason, time) {\n const _this = this;\n if (!this.timeoutID) {\n this.timeoutID = window.setTimeout(\n () => _this._reload(),\n time || 50,\n 'queued'\n );\n }\n }\n\n reload(reason) {\n if (!this._allow_reload) {\n this._pending_reload = true;\n return false;\n }\n if (this.timeoutID) {\n window.clearTimeout(this.timeoutID);\n this.timeoutID = false;\n }\n this._reload(reason);\n this._pending_reload = false;\n return true;\n }\n\n _reload() {\n this._pending_reload = false;\n this.timeoutID = false;\n if (this.meta) this.zoom = 1.0;\n\n // if (this.string === \"\") url = BlankImage.src;\n // Application.log(\"From url: %s to %s\", this.img.src, url);\n this.img = fetchImage(urlMunge(this.preview_url()), 'use-credentials', e =>\n this.onLoad(e)\n );\n }\n\n onLoad(e) {\n let _ref;\n if (!this.w || !this.h) {\n this.w = this.img.width;\n this.h = this.img.height;\n }\n this.scaledTo = 1.0;\n\n if (this.view && $.cookie) {\n const cname = `ts${this.view.pageIndex}_${this.id}`;\n const cookie = $.cookie(cname);\n $.removeCookie(cname, { path: '/' });\n if (cookie) {\n const data = JSON.parse(cookie);\n // check the size is the same as for this request\n if (data.sz == this.fontSize && (data.want && data.got)) {\n // this.scaledTo = 100 * data.got / data.want;\n if (this.scaledTo > 1) {\n const size = parseInt(0.5 + (this.scaledTo * this.fontSize) / 100);\n if (size > 2 && this.fontSize != size) {\n this.fontSize = size;\n this.reload();\n }\n }\n }\n }\n }\n\n this.triggerRedraw();\n }\n\n imgReady = false;\n\n properties = [\n 'align',\n 'angle',\n 'fontColour',\n 'fontName',\n 'fontSize',\n 'fontSlant',\n 'fontWeight',\n 'h',\n 'id',\n 'string',\n 'valign',\n 'renderer',\n 'scale',\n 'stroke',\n 'w',\n 'x',\n 'y',\n 'zindex',\n 'zoom',\n ];\n\n updateType() {\n if (this.fromTemplate) {\n this.type = 'text';\n this.content_type = 'text';\n } else {\n this.type = 'stackable';\n this.content_type = 'text';\n }\n }\n\n stackable() {\n return !this.fromTemplate;\n }\n\n data() {\n this.updateType();\n\n const data = this.properties.reduce((memo, property) => {\n switch (property) {\n case 'string':\n memo[property] = stripString(this[property]);\n break;\n case 'fontSize':\n memo[property] = Math.abs(this[property]);\n break;\n case 'renderer':\n memo[property] = 'simple'; // force simple renderer\n break;\n case 'x':\n case 'y':\n isNaN(this.x) || isNaN(this.y)\n ? (memo[property] = 10)\n : (memo[property] = this[property]);\n break;\n default:\n memo[property] = this[property];\n break;\n }\n\n return memo;\n }, {});\n\n data.editable = this.editable;\n data.templateId = this.view.template.id;\n data.pageIndex = this.view.pageIndex;\n\n data.layout = {\n x: safeNumber(this.x, 0),\n y: safeNumber(this.y, 0),\n w: safeNumber(this.w, 10),\n h: safeNumber(this.h, 10),\n };\n\n return data;\n }\n\n _set_fontSize(value) {\n value = parseInt(value);\n value = Math.abs(value);\n this.fontSize = Math.max(4, value);\n\n // For some reason this.fontSize equals value when\n // flow arrives in the function\n // want to use `return this.fontSize !== value`\n // but it's always going to be false.\n // We need to return true for the slot\n // to save to the server\n return true;\n }\n\n _set_align(value) {\n switch (value) {\n case 'left':\n case 'center':\n case 'right':\n this.align = value;\n break;\n case 'top':\n case 'middle':\n case 'bottom':\n this.valign = value;\n break;\n }\n return true;\n }\n\n setString(string) {\n return this.setProperty('string', `${string}`);\n }\n\n setProperty(name, value) {\n if (this._set(name, value)) {\n this.queueReload();\n this.string = this.string;\n EventEmitter.emit('text-slot-updated', this);\n return true;\n }\n\n return false;\n }\n\n restoreData(data) {\n return this.loadData(data);\n }\n\n loadData(data) {\n let changed = false;\n\n this.properties.forEach(property => {\n const value = data[property];\n if (\n value !== null &&\n value !== undefined &&\n !this.isClone() &&\n this._set(property, value)\n ) {\n changed = true;\n }\n });\n\n if (changed) {\n EventEmitter.emit('text-slot-updated', this);\n this._reload();\n return true;\n }\n\n return false;\n }\n\n zoomBy(factor) {\n this.fontSize += factor > 0 ? 2 : -2;\n return this.reload();\n }\n\n createOffscreenCanvasAndContext(width, height) {\n const canvas = new OffscreenCanvas(width, height);\n const context = canvas.getContext('2d', {\n willReadFrequently: true,\n });\n return [canvas, context];\n }\n\n validJSON(jsonString) {\n try {\n const parsedString = JSON.parse(jsonString);\n if (parsedString && typeof parsedString === 'object') return true;\n } catch (error) {\n console.warn(\n 'String in MyLab for this product is not valid: ',\n jsonString,\n ' error message: ',\n error,\n );\n return false;\n }\n return false;\n }\n\n prepareFoil() {\n try {\n // create OffscreenCanvas and Context for drawing on 2D view if slot does not already have one\n if (!this.slotCanvas || !this.slotContext) {\n [this.slotCanvas, this.slotContext] =\n this.createOffscreenCanvasAndContext(this.img.width, this.img.height);\n }\n\n // create OffscreenCanvas and Context for drawing on 3D view if slot does not already have one\n if (!this.slot3dCanvas || !this.slot3dContext) {\n [this.slot3dCanvas, this.slot3dContext] =\n this.createOffscreenCanvasAndContext(this.img.width, this.img.height);\n }\n\n if (\n this.slotCanvas.width !== this.img.width ||\n this.slotCanvas.height !== this.img.height\n ) {\n this.slotCanvas.width = this.img.width;\n this.slotCanvas.height = this.img.height;\n }\n\n if (\n this.slot3dCanvas.width !== this.img.width ||\n this.slot3dCanvas.height !== this.img.height\n ) {\n this.slot3dCanvas.width = this.img.width;\n this.slot3dCanvas.height = this.img.height;\n }\n\n // parse gradient value in MyLab\n const baseHSL = JSON.parse(\n wkData.prism_view_text_adjustments\n .replacement_prism_view_text_fill_colour,\n );\n\n // create gradient fill image for drawing to 2D view\n this.drawImage = replaceImageFillWithGradient(\n this.img,\n this.x,\n this.y,\n baseHSL,\n this.slotCanvas,\n this.slotContext,\n );\n\n // create white fill image for drawing to 3D view\n this.drawWhite = replaceImageFillWithWhiteAndThresholdAlpha(\n this.img,\n this.slot3dCanvas,\n this.slot3dContext,\n );\n } catch (error) {\n console.warn(error);\n }\n }\n\n draw(ctx) {\n if (!imgComplete(this.img)) {\n return;\n }\n\n if (!this.view || !this.view.editable) {\n if (this.string == '') {\n return;\n }\n }\n\n const { x } = this;\n const { y } = this;\n\n if (this.meta) {\n if (this.RealMatrix) {\n ctxApplyMatrix(ctx, this.meta);\n } else {\n if (this.meta.shift) {\n ctx.translate(this.meta.shift[0], this.meta.shift[1]);\n }\n if (this.meta.scale) {\n ctx.scale(this.meta.scale[0], this.meta.scale[1]);\n }\n if (typeof this.meta.rotate === 'number' && this.meta.rotate !== 0) {\n ctx.rotate(this.meta.rotate);\n }\n }\n }\n\n this.drawImage = this.img;\n\n // check if product features foil text\n if (wkData.prism_view_text_adjustments && !this.productHasFoilText)\n this.productHasFoilText = hasFoilText(wkData.prism_view_text_adjustments);\n\n // prepare canvases for creation of metallic text and white on black\n if (this.productHasFoilText === true) this.prepareFoil();\n\n if (this.meta && this.meta['real-coords']) {\n const w = this.meta['real-coords'][2];\n const h = this.meta['real-coords'][3];\n\n ctx.translate(x + w / 2, y + h / 2);\n ctx.rotate(this.getAngleRadian());\n\n if (this.productHasFoilText === true && ctx.canvas.id === '3DFoil') {\n ctx.drawImage(this.drawWhite, -w / 2, -h / 2, w, h);\n ctx.restore();\n } else {\n ctx.drawImage(this.drawImage, -w / 2, -h / 2, w, h);\n ctx.restore();\n }\n } else {\n ctx.translate(x + this.w / 2, y + this.h / 2);\n ctx.rotate(this.getAngleRadian());\n\n if (this.productHasFoilText === true && ctx.canvas.id === '3DFoil') {\n // if target canvas is intended for usage in the 3D view\n ctx.drawImage(this.drawWhite, -this.w / 2, -this.h / 2, this.w, this.h);\n ctx.restore();\n } else {\n // if target canvas is 2D view draw the image\n ctx.drawImage(this.drawImage, -this.w / 2, -this.h / 2, this.w, this.h);\n ctx.restore();\n }\n }\n }\n\n debug() {\n let canvas;\n let ctx;\n canvas = document.createElement('CANVAS');\n ctx = void 0;\n canvas.setAttribute('width', this.w);\n canvas.setAttribute('height', this.h);\n ctx = canvas.getContext('2d');\n ctx.drawImage(this.img, 0, 0, this.w, this.h, 0, 0, this.w, this.h);\n canvas.style.zIndex = 5000;\n canvas.style.position = 'absolute';\n canvas.style.left = '10px';\n canvas.style.top = '10px';\n $(canvas).observe('click', e => document.body.removeChild(canvas));\n return document.body.appendChild(canvas);\n }\n\n /**\n * Copies the properties of the provided text slot\n * @param {object} slot TextSlot to copy\n */\n copyOverrideFrom(slot) {\n const scale = slot.matrix.a;\n\n this.align = slot.align;\n this.fontColour = slot.fontColour;\n this.fontName = slot.fontName;\n this.fontWeight = slot.fontWeight;\n this.fontSize = Math.round(slot.fontSize * scale);\n this.fontSlant = slot.fontSlant;\n this.string = slot.string;\n this.valign = slot.valign;\n this.w = Math.round(slot.w * scale);\n this.h = Math.round(slot.h * scale);\n\n [this.x, this.y] = slot.matrix.transform_point(slot.x, slot.y);\n\n if (slot.meta.rotate !== 0) {\n this.angle = slot.meta.rotate;\n }\n }\n\n /**\n * Is this slot allowed to be overridden\n */\n canOverride() {\n return (\n !this.isOverride() &&\n this.permittedToBeStacked() &&\n !genericHelpers.disallowStackable()\n );\n }\n\n permittedToBeStacked() {\n return (\n this.fromTemplate &&\n this.inEditableArea &&\n !this.locked &&\n ![/spine-text/, /spineText/, /text-\\d{4}-\\d{2}-\\d{2}/].some(r =>\n r.test(this.id)\n )\n );\n }\n\n moveable() {\n return this.stackable() || this.permittedToBeStacked();\n }\n\n fixed() {\n return [/spine-text/, /spineText/, /text-\\d{4}-\\d{2}-\\d{2}/].some(r =>\n r.test(this.id)\n );\n }\n\n /**\n * Checks if this slot is overridden\n */\n isOverride() {\n return /^override-text-/.test(this.id);\n }\n\n overriddenId() {\n if (this.isOverride()) {\n return this.id.replace(/^override-text-/, '');\n }\n }\n}\n\nexport default TextSlot;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","import { create } from 'zustand';\n\n// This store would in the near future replace active clicked on slot for easy maintenance\n// Components should reference this rather than set local slot state with slot from FLUX\nexport const useSlotStore = create(set => ({\n slot: null,\n slotIndex: 0,\n lastSaved: null,\n updateSlot: slot => set({ slot }),\n updateSlotIndex: slotIndex => set({ slotIndex }),\n updateLastSaved: () => set({ lastSaved: new Date()})\n}));\n\nexport const useFocusedSlotStore = create(set => ({\n focusedSlot: null,\n updateFocusedSlot: slot => set({ focusedSlot: slot }),\n}));\n","// Import JS Modules\nimport { TextSlot } from '.';\nimport isNumber from 'lodash/isNumber';\nimport genericHelpers from '../../../_utils/generic-helpers';\nimport sendToGoogleAnalytics from '../../desktop/slot-tools/send-to-google-analytics';\nimport { getViewport } from '../../../_utils/hoc/with-viewport-size';\nimport { useSlotStore } from 'stores/useSlotStore';\nimport isCard from '../../../../customer_pages/_prism-builder/utils/is-card.js';\n\n\nconst customSlots = {\n get canAdd() {\n if (getViewport().isMobile) {\n return false;\n }\n\n if (isCard() && genericHelpers.disallowStackable()) {\n return prismViews.page.template.id.includes('front') ? false : true;\n }\n\n if (genericHelpers.disallowStackable() || !window.activeView) {\n return false;\n }\n\n return activeView.acceptsUserContent;\n },\n\n get freshLayout() {\n const [x, y, w, h] = window.activeView.editableArea;\n\n return {\n x: x + w / 2 - w / 4,\n y: y + h / 2 - h / 4,\n w: w / 2,\n h: h / 2,\n };\n },\n text: {\n add(str = '') {\n if (!customSlots.canAdd) return;\n activeView.deselectAll();\n const slot = new TextSlot(`text-${new Date().getTime()}`);\n Object.entries(customSlots.freshLayout).forEach(\n ([key, value]) => (slot[key] = value)\n );\n\n sendToGoogleAnalytics('stackable-text', 'add');\n\n slot.isUnconfirmedTextSlot = true;\n slot.slotState = 'editing';\n slot.type = 'stackable';\n slot.content_type = 'text';\n slot.valign = 'middle';\n slot.align = 'center';\n slot.string = str;\n slot.zindex = activeView.slots.length || 1;\n slot.h = slot.fontSize;\n\n activeView.addTextSlot(slot);\n activeView.selectASlot(slot);\n\n useSlotStore.getState().updateSlot(slot);\n },\n\n overrideSlot(sourceSlot) {\n const id = `override-text-${sourceSlot.id}`;\n sendToGoogleAnalytics('stackable-text', 'override');\n\n const slot = new TextSlot(id);\n slot.copyOverrideFrom(sourceSlot);\n sourceSlot.string = '';\n\n slot.type = 'stackable';\n slot.content_type = 'text';\n slot.zindex = activeView.slots.length || 1;\n\n activeView.addTextSlot(slot);\n activeView.selectASlot(slot);\n activeView.do_save();\n },\n },\n\n photos: {\n slotData({ id, view, data }) {\n if (!data) {\n data = {};\n }\n\n if (data.hasOwnProperty('zindex')) {\n data.zindex = view.slots.length || 1;\n }\n if (!data.hasOwnProperty('layout')) {\n data.layout = customSlots.freshLayout;\n }\n\n return {\n id,\n type: 'stackable',\n content_type: 'image',\n data\n };\n },\n\n add({ view }) {\n if (!customSlots.canAdd) return;\n const id = `photo-${new Date().getTime()}`;\n\n const slotData = this.slotData({ id, view });\n\n const slot = view.addPhotoSlot(slotData);\n view.selectASlot(slot);\n view.do_save();\n return slot;\n },\n\n restore({ id, img, imgId, data, view }) {\n const { x, y, w, h } = (data && data.layout) || {};\n const slotData = this.slotData({ id, view, data });\n const slot = view.addPhotoSlot(slotData);\n\n slot.setImage(img, imgId, data);\n // Not the neatest approach, but it should\n // ensure that the slot ends up as close to its\n // original size as possible.\n slot.setAngle(data.angle);\n slot.moveTo(0, 0);\n slot.setClipSize(w, h);\n slot.enforceBounds(view.editableArea);\n slot.moveTo(x, y);\n return slot;\n },\n },\n embellishments: {\n get freshLayoutSticker() {\n const [x, y, w, h] = activeView.editableArea;\n const size = Math.min(w / 4, h / 4);\n\n return {\n x: x + w / 2 - size / 2,\n y: y + h / 2 - size / 2,\n w: size,\n h: size,\n };\n },\n\n get freshLayout() {\n const layout = customSlots.freshLayout;\n\n // make the longest side as short as the shortest is\n layout.w = layout.h = Math.min(layout.w, layout.h);\n\n return layout;\n },\n\n freshLayoutFor(what) {\n switch (what) {\n case 'sticker':\n return this.freshLayoutSticker;\n default:\n return this.freshLayout;\n }\n },\n\n slotData(image, view, { id, data }) {\n data = data || {};\n\n return {\n slotData: {\n id,\n type: 'stackable',\n content_type: 'embellishment',\n content_url: image.src,\n data: {\n layout:\n data.layout ||\n this.freshLayoutFor(data.embellishment_type || 'sticker'),\n zindex: data.zindex || view.slots.length || 1,\n ...data,\n },\n },\n img: image,\n };\n },\n\n buildSlotData(type, view, src) {\n return new Promise(resolve => {\n const image = new Image();\n const data = {\n id: `${type}-${new Date().getTime()}`,\n data: { embellishment_type: type },\n };\n\n image.onload = function() {\n resolve(customSlots.embellishments.slotData(this, view, data));\n };\n image.src = src;\n });\n },\n\n async add({ src, type, view, x, y }) {\n if (!customSlots.canAdd) return;\n const { slotData, img } = await this.buildSlotData(type, view, src);\n\n // COMMENTED OUT UNTIL WEBPRISM CAN HANDLE EMBELLISHMENTS IN CUSTOM BACKGROUND\n // const slot = type === 'pattern' && activeView.selected && activeView.selected.isOptionalBackground()\n // ? activeView.selected\n // : activeView.addPhotoSlot(slotData);\n const slot = view.addPhotoSlot(slotData);\n // END OF COMMENTED OUT UNTIL WEBPRISM CAN HANDLE EMBELLISHMENTS IN CUSTOM BACKGROUND\n\n view.setImageById(slot.id, img);\n\n if (isNumber(x) && isNumber(y)) {\n slot.moveTo(x - slot.w / 2, y - slot.h / 2);\n }\n\n view.do_save();\n\n return slot;\n },\n\n restore({ id, img, data, view }) {\n const { slotData } = this.slotData(img, view, { id, data });\n\n const slot = view.addPhotoSlot(slotData);\n view.setImageById(slot.id, img);\n\n slot.setAngle(data.angle);\n slot.moveTo(0, 0);\n slot.setClipSize(data.layout.w, data.layout.h);\n slot.enforceBounds(view.editableArea);\n slot.moveTo(data.layout.x, data.layout.y);\n\n return slot;\n },\n },\n};\n\nexport default customSlots;\n","import uniq from 'lodash/uniq';\n\n// --------------------------------------------------------------------\n\nclass CustomColourHistory {\n constructor() {\n this._values = [];\n }\n\n values(length = 99) {\n return this._values.slice(0, length);\n }\n\n push(colour) {\n // place new colour on the front of the customColourHistory array and limit to 99 items\n this._values = uniq([].concat(colour, this._values));\n }\n}\n\n// --------------------------------------------------------------------\n\nexport default new CustomColourHistory();\n","import { WebUI, builderDispatch } from '../../_utils/ui';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\nexport default async function filledImageSlotConfirmation(confirmCallback) {\n const { filledImageSlot } = await usePrismItemStore.getState().checkSlots();\n\n if (filledImageSlot) {\n builderDispatch.dispatch({\n type: WebUI.SHOW_CONFIRMATION_DIALOG,\n message: 'By proceeding, you may need to re-add photos. Do you wish to continue?',\n onConfirm: confirmCallback\n });\n } else {\n confirmCallback();\n }\n};\n","const PrismBuilderHistory = {\n activeView() {\n return window.activeView;\n },\n\n clear() {\n this.activeView().historyStack.clear();\n },\n};\n\nexport default PrismBuilderHistory;\n","import { builderDispatch, PrismUI, WebUI } from '../../_utils/ui';\nimport PrismBuilderHistory from '../../_utils/tools/prism_builder_history';\nimport TemplateCache from '../templates/template-cache';\nimport { loadPrismItem } from '../utils/stores';\nimport { themeStore } from 'stores/themes';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\nconst PrismBuilderReloader = {\n start(data, clearBuilderHistory = true) {\n return new Promise((resolve, reject) => {\n this.goToFirstSection();\n this.clearCache();\n this.reloadWK(data);\n if (clearBuilderHistory) this.clearBuilderHistory();\n loadPrismItem(data.wk_data)\n .then(async () => {\n this.reloadBrowserUrl(data);\n\n themeStore.fetch();\n\n this.notifyPrismItemHasBeenLoaded();\n\n resolve();\n })\n .catch(() => {\n reject();\n });\n });\n },\n\n startReloadingNotification() {\n builderDispatch.delayedDispatch({\n type: WebUI.PAGES_TRAY_START_RELOAD,\n });\n },\n\n goToFirstSection() {\n const prismItem = usePrismItemStore.getState().prismItem;\n \n if (prismItem.currentPage >= prismItem.pageCount) {\n prismItem.currentPage = prismItem.pageCount - 1;\n builderDispatch.delayedDispatch({\n type: WebUI.HIDE_CUSTOM_PAGE,\n });\n }\n },\n\n clearCache() {\n TemplateCache.reset();\n builderDispatch.dispatch({ type: PrismUI.THEME_CHANGED });\n },\n\n reloadWK(data) {\n window.wkData = { ...data.wk_data, copies: wkData.copies };\n\n wkData.product.bleedWarning = {\n showForAlbum() {\n return ['album'].indexOf(wkData.product.type) > -1;\n },\n\n show() {\n return this.showForAlbum()\n || wkData.missing_attributes\n || wkData.disabled_options_chosen;\n },\n };\n },\n\n clearBuilderHistory() {\n PrismBuilderHistory.clear();\n },\n\n reloadBrowserUrl(data) {\n const editUrl = window.location.pathname.split(/\\//);\n\n // This should be able to be removed once https://livelinktech.atlassian.net/browse/TECH-7478\n // has gone to all web prism production environments, as the id will no longer change\n editUrl.pop();\n editUrl.push(data.wk_data.id);\n\n const title = data.title || data.wk_data.product_title;\n window.history.replaceState({}, title, this.buildReloadedUrl(editUrl));\n document.title = title;\n },\n\n notifyPrismItemHasBeenLoaded() {\n builderDispatch.dispatch({ type: PrismUI.ITEM_LOADED });\n },\n\n buildReloadedUrl(editUrl) {\n // Base URL\n let url = `${editUrl.join('/')}${window.location.search}`;\n // When transforming you can optionally pass in hash to\n // allow you to return to a specific spread. This should\n // be carried over between transforms\n if (window.location.hash) url += `#${window.location.hash.replace(/#/g, '')}`;\n\n return url;\n },\n};\n\nexport default PrismBuilderReloader;\n","import PrismJSON from './prism-json-encoder';\nimport { PrismUI, builderDispatch } from '../../_utils/ui';\nimport { loadPrismItem } from '../utils/stores';\nimport TemplateCache from '../templates/template-cache';\nimport PrismBuilderReloader from '../trays/prism-builder-reloader';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\n\nconst MAX_RETRY_SNAPSHOT = 3;\nclass PrismBuilderHistory {\n constructor(view) {\n this.view = view;\n this.stack = [];\n this.pointer = 1;\n this.disabled = false;\n this.urlTakeSnapshot = (wkData && wkData.remember_url) ? wkData.remember_url.replace(/remember/, 'snapshot') : '';\n this.urlRestoreFromSnapshot = (wkData && wkData.remember_url) ? wkData.remember_url.replace(/remember/, 'restore-from-snapshot') : '';\n this.fetchConfig = {\n headers: {\n 'content-type': 'application/json',\n },\n method: 'POST',\n credentials: 'same-origin'\n };\n this.skipsSave = [];\n this.retrySnapshotCount = MAX_RETRY_SNAPSHOT;\n this.pushCallback = [];\n this.saving = false;\n }\n\n clear = (dispatchUndoAction = false) => {\n this.stack = [];\n this.pointer = 1;\n this.clearAfterPush();\n if (dispatchUndoAction) builderDispatch.dispatch({ type: PrismUI.UNDO_CHANGED });\n }\n\n clearAfterPush = () => {\n this.saving = false;\n this.pushCallback = [];\n }\n\n movePointer = (pointer) => {\n this.pointer = pointer;\n }\n\n movePointerForward = () => {\n this.pointer = this.pointer + 1;\n }\n\n movePointerBackward = () => {\n if (this.pointer > 1) this.pointer = this.pointer - 1;\n } \n\n getOtherView = () => {\n\n if (this.view === prismViews.page) {\n return prismViews.pageRight;\n } else {\n return prismViews.page;\n }\n }\n\n addToPushCallback = (method, params) => {\n if (this.saving) this.pushCallback.push({ method, params });\n else {\n method(...params);\n this.clearAfterPush();\n }\n }\n\n callPushCallback = () => {\n this.pushCallback.forEach(callback => {\n callback.method(...callback.params);\n });\n this.clearAfterPush();\n }\n\n movePointerOtherViewToSnapshot = (direction = null) => {\n const possibleDirections = ['forward', 'backward'];\n const otherView = this.getOtherView();\n\n if (!possibleDirections.includes(direction) || !otherView) return;\n const { historyStack } = otherView;\n let stack;\n\n if (direction === 'forward') stack = historyStack.stack.slice(historyStack.pointer, historyStack.stack.length);\n if (direction === 'backward') stack = historyStack.stack.slice(0, historyStack.pointer - 1).reverse();\n\n\n let steps = stack.findIndex((stackStep) => {\n const decodedStackStep = PrismJSON.decode(stackStep);\n return !!decodedStackStep.snapshot && this.hasDifferentDesign(decodedStackStep);\n })\n\n if (direction === 'backward') historyStack.pointer -= steps + 1;\n if (direction === 'forward') {\n if (steps !== -1) historyStack.pointer += steps + 1;\n else {\n // If there in not a snapshot, things get complicated.\n // we get rid of lost history (everything beyond the current pointer)\n historyStack.stack.splice(historyStack.pointer, historyStack.stack.length);\n // and then we add a step to the stack with the snapshot of the other view\n historyStack.stack.push(this.currentEncodedState());\n // finally we point to the added step (should be the last one)\n historyStack.setPointerToLastState();\n }\n } \n }\n\n push = (state) => {\n this.sliceStack();\n const json = PrismJSON.encode(state);\n this.stack.push(json);\n this.setPointerToLastState();\n\n if (this.saving) this.callPushCallback();\n }\n\n preventSave = (data) => {\n const { dateIdentifier } = data;\n\n if (!dateIdentifier) return false;\n const prevent = dateIdentifier && this.skipsSave.includes(dateIdentifier);\n \n if (prevent) {\n this.deleteIdentifier(dateIdentifier);\n }\n return prevent;\n }\n\n deleteIdentifier = (dateIdentifier) => {\n const index = this.skipsSave.findIndex(identifier => identifier === dateIdentifier);\n this.skipsSave.splice(index, 1);\n }\n\n sliceStack = () => {\n this.stack = this.stack.slice(0, this.pointer || 9e9);\n }\n\n retryTakeSnapshot = (withPush) => {\n this.retrySnapshotCount--\n return this.takeSnapshot(withPush);\n }\n\n takeSnapshot = async (withPush = false) => {\n if (withPush) this.saving = true;\n \n return fetch(this.urlTakeSnapshot, { ...this.fetchConfig })\n .then(response => {\n if (response.ok) {\n return response.json();\n }\n throw Error (\"Unable to take snapshot\")\n })\n .then(dataResponse => {\n const snapshot = dataResponse.snapshot;\n const uniqueId = Date.now();\n const productId = wkData.product_id;\n this.addSnapshotToStep(prismViews.page, snapshot, uniqueId, productId);\n this.addSnapshotToStep(prismViews.pageRight, snapshot, uniqueId, productId);\n this.resetRetrySnapshotCount();\n })\n .catch(e => {\n if (this.retrySnapshotCount > 0) {\n return this.retryTakeSnapshot(withPush);\n } else {\n this.clear(true);\n this.resetRetrySnapshotCount();\n return null;\n }\n })\n }\n\n resetRetrySnapshotCount = () => {\n this.retrySnapshotCount = MAX_RETRY_SNAPSHOT;\n }\n\n addSnapshotToStep = (view, snapshot, uniqueId, productId) => {\n const { historyStack } = view;\n\n if (!historyStack) return;\n if (!historyStack.currentEncodedState()) return;\n \n const currentStep = PrismJSON.decode(historyStack.currentEncodedState());\n currentStep.snapshot = snapshot;\n currentStep.id = uniqueId;\n currentStep.productId = productId;\n const json = PrismJSON.encode(currentStep);\n historyStack.stack.splice(historyStack.pointer - 1, 1, json);\n }\n\n hasSameLayout = () => {\n const data = PrismJSON.decode(this.currentEncodedState());\n return data.templateID === this.view.template.id;\n }\n\n restoreFromSnapshot = async (snapshotCode, productId) => {\n return fetch(this.urlRestoreFromSnapshot, {\n body: JSON.stringify({\n snapshot_code: snapshotCode,\n product_id: productId,\n prism_product_theme: usePrismItemStore.getState().prismItem.design_code\n }),\n ...this.fetchConfig\n }).then(response => {\n if (response.ok) {\n return response.json();\n }\n throw Error (\"Unable to perform undo action\")\n }).then(data => {\n return data.wk_data;\n }).catch(e => {\n builderDispatch.dispatch({ type: PrismUI.ITEM_COPYING_FINISHED });\n this.clear(true);\n builderDispatch.delayedDispatch({ type: PrismUI.UNDO_CHANGED });\n return null;\n })\n }\n\n setStepTheme = (theme) => {\n const view = this.view;\n const otherView = this.getOtherView();\n this.modifyCurrentStep(view, 'theme', theme);\n this.modifyCurrentStep(otherView, 'theme', theme);\n }\n\n modifyCurrentStep = (view, field, value) => {\n if (!view.historyStack.pointedStateExists()) return;\n\n let data = PrismJSON.decode(view.historyStack.currentEncodedState());\n data[field] = value;\n const json = PrismJSON.encode(data);\n view.historyStack.stack.splice(view.historyStack.pointer - 1, 1, json);\n }\n\n setOtherViewJumpToNextSnapshot = () => {\n const otherView = this.getOtherView();\n const { historyStack } = otherView;\n const id = PrismJSON.decode(this.currentEncodedState()).id;\n const index = historyStack.stack.findIndex(step => {\n const stepData = PrismJSON.decode(step);\n\n if (!stepData.snapshot || !stepData.id) return false;\n return stepData.id === id;\n });\n\n if (index >= 0) {\n let nextStepData = PrismJSON.decode(historyStack.stack[index + 1]);\n\n if (!nextStepData.snapshot) {\n nextStepData.jumpToNextSnapshot = true;\n const json = PrismJSON.encode(nextStepData);\n historyStack.stack.splice(index + 1, 1, json);\n }\n }\n }\n \n undo = async () => {\n if(!this.canUndo()) return; \n\n this.movePointerBackward();\n\n if (this.pointedStateExists()) {\n builderDispatch.dispatch({ type: PrismUI.ITEM_COPYING });\n const data = PrismJSON.decode(this.currentEncodedState());\n\n if (this.shouldRestore(data)) { \n TemplateCache.reset();\n this.setOtherViewJumpToNextSnapshot();\n this.movePointerForward();\n await this.takeSnapshot(); \n this.movePointerOtherViewToSnapshot('backward');\n this.movePointerBackward();\n const prismData = await this.restore(data);\n builderDispatch.dispatch({ type: PrismUI.UNDO_CHANGED });\n\n if (prismData) {\n this.reloadPrismItem(prismData);\n } \n } else {\n this.saveData(data);\n }\n } else {\n this.clear(true);\n }\n builderDispatch.dispatch({ type: PrismUI.UNDO_CHANGED });\n }\n\n redo = async () => {\n\n if(!this.canRedo()) return;\n\n this.movePointerForward();\n\n if (this.pointedStateExists()) {\n builderDispatch.dispatch({ type: PrismUI.ITEM_COPYING });\n const data = PrismJSON.decode(this.currentEncodedState());\n\n if (this.shouldRestore(data, 'forward')) { \n TemplateCache.reset();\n const { dataRestore, pointer } = this.getRedoDataToRestore(data);\n this.movePointerBackward();\n await this.takeSnapshot(); \n this.movePointer(pointer);\n this.movePointerOtherViewToSnapshot('forward');\n const prismData = await this.restore(dataRestore);\n builderDispatch.dispatch({ type: PrismUI.UNDO_CHANGED });\n\n if (prismData) {\n this.reloadPrismItem(prismData);\n } \n } else {\n this.saveData(data);\n }\n builderDispatch.dispatch({ type: PrismUI.UNDO_CHANGED });\n } else {\n this.clear(true);\n }\n }\n\n saveData = (data) => {\n this.view.setData(data, undefined, this.hasSameLayout());\n builderDispatch.dispatch({ type: PrismUI.ITEM_COPYING_FINISHED });\n }\n\n shouldRestore = (followingData, direction = false) => {\n const followingDataHasSnapshot = !!followingData.snapshot;\n const shouldJumpToNextSnapshot = !!followingData.jumpToNextSnapshot;\n\n if (followingDataHasSnapshot) {\n return this.hasDifferentDesign(followingData) || this.hasDifferentProduct(followingData);\n } else if (shouldJumpToNextSnapshot && direction === 'forward') {\n return true;\n }\n return false;\n }\n\n hasDifferentDesign = (data) => {\n return data.theme !== this.view.album_manager.prismItem.theme;\n }\n\n hasDifferentProduct = (data) => {\n return data.productId !== wkData.product_id;\n }\n\n getRedoDataToRestore = (data) => {\n if (data.snapshot) {\n return {\n dataRestore: data,\n pointer: this.pointer\n };\n }\n\n if (data.jumpToNextSnapshot) {\n const index = this.stack.findIndex((stackStep, index) => {\n if (index <= this.pointer - 1) return false;\n const decodedStackStep = PrismJSON.decode(stackStep);\n return !!decodedStackStep.snapshot;\n });\n return {\n dataRestore: PrismJSON.decode(this.stack[index]),\n pointer: index + 1\n };\n }\n }\n\n reloadPrismItem = (prismData) => {\n setTimeout(() => {\n loadPrismItem(prismData, { initialPage: usePrismItemStore.getState().prismItem.currentPage }, true).\n then(() => {\n PrismBuilderReloader.reloadWK({ wk_data: prismData.data });\n })\n }, 500);\n }\n\n restore = async (data) => {\n const snapshotCode = data.snapshot.undo_snapshot;\n const productId = data.productId;\n return this.restoreFromSnapshot(snapshotCode, productId); \n }\n\n skipStep = (dateIdentifier) => {\n const otherView = this.getOtherView();\n this.skipsSave.push(dateIdentifier);\n otherView.historyStack.skipsSave.push(dateIdentifier);\n }\n\n pointedStateExists = () => {\n return !!this.currentEncodedState();\n }\n\n canUndo = () => {\n return this.pointer > 1;\n }\n\n canRedo = () => {\n return this.pointer < this.stack.length;\n }\n\n stepsAreDifferent = (state) => {\n const json = PrismJSON.encode(state);\n return this.currentEncodedState() !== json;\n }\n\n currentEncodedState = (position = null) => {\n const pointer = position == null ? this.pointer : position;\n return this.stack[pointer - 1];\n }\n\n setPointerToLastState = () => {\n const lastStatePosition = this.stack.length;\n this.movePointer(lastStatePosition);\n }\n}\n\nexport default PrismBuilderHistory;","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Parchment\"] = factory();\n\telse\n\t\troot[\"Parchment\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 9);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ParchmentError = /** @class */ (function (_super) {\n __extends(ParchmentError, _super);\n function ParchmentError(message) {\n var _this = this;\n message = '[Parchment] ' + message;\n _this = _super.call(this, message) || this;\n _this.message = message;\n _this.name = _this.constructor.name;\n return _this;\n }\n return ParchmentError;\n}(Error));\nexports.ParchmentError = ParchmentError;\nvar attributes = {};\nvar classes = {};\nvar tags = {};\nvar types = {};\nexports.DATA_KEY = '__blot';\nvar Scope;\n(function (Scope) {\n Scope[Scope[\"TYPE\"] = 3] = \"TYPE\";\n Scope[Scope[\"LEVEL\"] = 12] = \"LEVEL\";\n Scope[Scope[\"ATTRIBUTE\"] = 13] = \"ATTRIBUTE\";\n Scope[Scope[\"BLOT\"] = 14] = \"BLOT\";\n Scope[Scope[\"INLINE\"] = 7] = \"INLINE\";\n Scope[Scope[\"BLOCK\"] = 11] = \"BLOCK\";\n Scope[Scope[\"BLOCK_BLOT\"] = 10] = \"BLOCK_BLOT\";\n Scope[Scope[\"INLINE_BLOT\"] = 6] = \"INLINE_BLOT\";\n Scope[Scope[\"BLOCK_ATTRIBUTE\"] = 9] = \"BLOCK_ATTRIBUTE\";\n Scope[Scope[\"INLINE_ATTRIBUTE\"] = 5] = \"INLINE_ATTRIBUTE\";\n Scope[Scope[\"ANY\"] = 15] = \"ANY\";\n})(Scope = exports.Scope || (exports.Scope = {}));\nfunction create(input, value) {\n var match = query(input);\n if (match == null) {\n throw new ParchmentError(\"Unable to create \" + input + \" blot\");\n }\n var BlotClass = match;\n var node = \n // @ts-ignore\n input instanceof Node || input['nodeType'] === Node.TEXT_NODE ? input : BlotClass.create(value);\n return new BlotClass(node, value);\n}\nexports.create = create;\nfunction find(node, bubble) {\n if (bubble === void 0) { bubble = false; }\n if (node == null)\n return null;\n // @ts-ignore\n if (node[exports.DATA_KEY] != null)\n return node[exports.DATA_KEY].blot;\n if (bubble)\n return find(node.parentNode, bubble);\n return null;\n}\nexports.find = find;\nfunction query(query, scope) {\n if (scope === void 0) { scope = Scope.ANY; }\n var match;\n if (typeof query === 'string') {\n match = types[query] || attributes[query];\n // @ts-ignore\n }\n else if (query instanceof Text || query['nodeType'] === Node.TEXT_NODE) {\n match = types['text'];\n }\n else if (typeof query === 'number') {\n if (query & Scope.LEVEL & Scope.BLOCK) {\n match = types['block'];\n }\n else if (query & Scope.LEVEL & Scope.INLINE) {\n match = types['inline'];\n }\n }\n else if (query instanceof HTMLElement) {\n var names = (query.getAttribute('class') || '').split(/\\s+/);\n for (var i in names) {\n match = classes[names[i]];\n if (match)\n break;\n }\n match = match || tags[query.tagName];\n }\n if (match == null)\n return null;\n // @ts-ignore\n if (scope & Scope.LEVEL & match.scope && scope & Scope.TYPE & match.scope)\n return match;\n return null;\n}\nexports.query = query;\nfunction register() {\n var Definitions = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n Definitions[_i] = arguments[_i];\n }\n if (Definitions.length > 1) {\n return Definitions.map(function (d) {\n return register(d);\n });\n }\n var Definition = Definitions[0];\n if (typeof Definition.blotName !== 'string' && typeof Definition.attrName !== 'string') {\n throw new ParchmentError('Invalid definition');\n }\n else if (Definition.blotName === 'abstract') {\n throw new ParchmentError('Cannot register abstract class');\n }\n types[Definition.blotName || Definition.attrName] = Definition;\n if (typeof Definition.keyName === 'string') {\n attributes[Definition.keyName] = Definition;\n }\n else {\n if (Definition.className != null) {\n classes[Definition.className] = Definition;\n }\n if (Definition.tagName != null) {\n if (Array.isArray(Definition.tagName)) {\n Definition.tagName = Definition.tagName.map(function (tagName) {\n return tagName.toUpperCase();\n });\n }\n else {\n Definition.tagName = Definition.tagName.toUpperCase();\n }\n var tagNames = Array.isArray(Definition.tagName) ? Definition.tagName : [Definition.tagName];\n tagNames.forEach(function (tag) {\n if (tags[tag] == null || Definition.className == null) {\n tags[tag] = Definition;\n }\n });\n }\n }\n return Definition;\n}\nexports.register = register;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(0);\nvar Attributor = /** @class */ (function () {\n function Attributor(attrName, keyName, options) {\n if (options === void 0) { options = {}; }\n this.attrName = attrName;\n this.keyName = keyName;\n var attributeBit = Registry.Scope.TYPE & Registry.Scope.ATTRIBUTE;\n if (options.scope != null) {\n // Ignore type bits, force attribute bit\n this.scope = (options.scope & Registry.Scope.LEVEL) | attributeBit;\n }\n else {\n this.scope = Registry.Scope.ATTRIBUTE;\n }\n if (options.whitelist != null)\n this.whitelist = options.whitelist;\n }\n Attributor.keys = function (node) {\n return [].map.call(node.attributes, function (item) {\n return item.name;\n });\n };\n Attributor.prototype.add = function (node, value) {\n if (!this.canAdd(node, value))\n return false;\n node.setAttribute(this.keyName, value);\n return true;\n };\n Attributor.prototype.canAdd = function (node, value) {\n var match = Registry.query(node, Registry.Scope.BLOT & (this.scope | Registry.Scope.TYPE));\n if (match == null)\n return false;\n if (this.whitelist == null)\n return true;\n if (typeof value === 'string') {\n return this.whitelist.indexOf(value.replace(/[\"']/g, '')) > -1;\n }\n else {\n return this.whitelist.indexOf(value) > -1;\n }\n };\n Attributor.prototype.remove = function (node) {\n node.removeAttribute(this.keyName);\n };\n Attributor.prototype.value = function (node) {\n var value = node.getAttribute(this.keyName);\n if (this.canAdd(node, value) && value) {\n return value;\n }\n return '';\n };\n return Attributor;\n}());\nexports.default = Attributor;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar linked_list_1 = __webpack_require__(11);\nvar shadow_1 = __webpack_require__(5);\nvar Registry = __webpack_require__(0);\nvar ContainerBlot = /** @class */ (function (_super) {\n __extends(ContainerBlot, _super);\n function ContainerBlot(domNode) {\n var _this = _super.call(this, domNode) || this;\n _this.build();\n return _this;\n }\n ContainerBlot.prototype.appendChild = function (other) {\n this.insertBefore(other);\n };\n ContainerBlot.prototype.attach = function () {\n _super.prototype.attach.call(this);\n this.children.forEach(function (child) {\n child.attach();\n });\n };\n ContainerBlot.prototype.build = function () {\n var _this = this;\n this.children = new linked_list_1.default();\n // Need to be reversed for if DOM nodes already in order\n [].slice\n .call(this.domNode.childNodes)\n .reverse()\n .forEach(function (node) {\n try {\n var child = makeBlot(node);\n _this.insertBefore(child, _this.children.head || undefined);\n }\n catch (err) {\n if (err instanceof Registry.ParchmentError)\n return;\n else\n throw err;\n }\n });\n };\n ContainerBlot.prototype.deleteAt = function (index, length) {\n if (index === 0 && length === this.length()) {\n return this.remove();\n }\n this.children.forEachAt(index, length, function (child, offset, length) {\n child.deleteAt(offset, length);\n });\n };\n ContainerBlot.prototype.descendant = function (criteria, index) {\n var _a = this.children.find(index), child = _a[0], offset = _a[1];\n if ((criteria.blotName == null && criteria(child)) ||\n (criteria.blotName != null && child instanceof criteria)) {\n return [child, offset];\n }\n else if (child instanceof ContainerBlot) {\n return child.descendant(criteria, offset);\n }\n else {\n return [null, -1];\n }\n };\n ContainerBlot.prototype.descendants = function (criteria, index, length) {\n if (index === void 0) { index = 0; }\n if (length === void 0) { length = Number.MAX_VALUE; }\n var descendants = [];\n var lengthLeft = length;\n this.children.forEachAt(index, length, function (child, index, length) {\n if ((criteria.blotName == null && criteria(child)) ||\n (criteria.blotName != null && child instanceof criteria)) {\n descendants.push(child);\n }\n if (child instanceof ContainerBlot) {\n descendants = descendants.concat(child.descendants(criteria, index, lengthLeft));\n }\n lengthLeft -= length;\n });\n return descendants;\n };\n ContainerBlot.prototype.detach = function () {\n this.children.forEach(function (child) {\n child.detach();\n });\n _super.prototype.detach.call(this);\n };\n ContainerBlot.prototype.formatAt = function (index, length, name, value) {\n this.children.forEachAt(index, length, function (child, offset, length) {\n child.formatAt(offset, length, name, value);\n });\n };\n ContainerBlot.prototype.insertAt = function (index, value, def) {\n var _a = this.children.find(index), child = _a[0], offset = _a[1];\n if (child) {\n child.insertAt(offset, value, def);\n }\n else {\n var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n this.appendChild(blot);\n }\n };\n ContainerBlot.prototype.insertBefore = function (childBlot, refBlot) {\n if (this.statics.allowedChildren != null &&\n !this.statics.allowedChildren.some(function (child) {\n return childBlot instanceof child;\n })) {\n throw new Registry.ParchmentError(\"Cannot insert \" + childBlot.statics.blotName + \" into \" + this.statics.blotName);\n }\n childBlot.insertInto(this, refBlot);\n };\n ContainerBlot.prototype.length = function () {\n return this.children.reduce(function (memo, child) {\n return memo + child.length();\n }, 0);\n };\n ContainerBlot.prototype.moveChildren = function (targetParent, refNode) {\n this.children.forEach(function (child) {\n targetParent.insertBefore(child, refNode);\n });\n };\n ContainerBlot.prototype.optimize = function (context) {\n _super.prototype.optimize.call(this, context);\n if (this.children.length === 0) {\n if (this.statics.defaultChild != null) {\n var child = Registry.create(this.statics.defaultChild);\n this.appendChild(child);\n child.optimize(context);\n }\n else {\n this.remove();\n }\n }\n };\n ContainerBlot.prototype.path = function (index, inclusive) {\n if (inclusive === void 0) { inclusive = false; }\n var _a = this.children.find(index, inclusive), child = _a[0], offset = _a[1];\n var position = [[this, index]];\n if (child instanceof ContainerBlot) {\n return position.concat(child.path(offset, inclusive));\n }\n else if (child != null) {\n position.push([child, offset]);\n }\n return position;\n };\n ContainerBlot.prototype.removeChild = function (child) {\n this.children.remove(child);\n };\n ContainerBlot.prototype.replace = function (target) {\n if (target instanceof ContainerBlot) {\n target.moveChildren(this);\n }\n _super.prototype.replace.call(this, target);\n };\n ContainerBlot.prototype.split = function (index, force) {\n if (force === void 0) { force = false; }\n if (!force) {\n if (index === 0)\n return this;\n if (index === this.length())\n return this.next;\n }\n var after = this.clone();\n this.parent.insertBefore(after, this.next);\n this.children.forEachAt(index, this.length(), function (child, offset, length) {\n child = child.split(offset, force);\n after.appendChild(child);\n });\n return after;\n };\n ContainerBlot.prototype.unwrap = function () {\n this.moveChildren(this.parent, this.next);\n this.remove();\n };\n ContainerBlot.prototype.update = function (mutations, context) {\n var _this = this;\n var addedNodes = [];\n var removedNodes = [];\n mutations.forEach(function (mutation) {\n if (mutation.target === _this.domNode && mutation.type === 'childList') {\n addedNodes.push.apply(addedNodes, mutation.addedNodes);\n removedNodes.push.apply(removedNodes, mutation.removedNodes);\n }\n });\n removedNodes.forEach(function (node) {\n // Check node has actually been removed\n // One exception is Chrome does not immediately remove IFRAMEs\n // from DOM but MutationRecord is correct in its reported removal\n if (node.parentNode != null &&\n // @ts-ignore\n node.tagName !== 'IFRAME' &&\n document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return;\n }\n var blot = Registry.find(node);\n if (blot == null)\n return;\n if (blot.domNode.parentNode == null || blot.domNode.parentNode === _this.domNode) {\n blot.detach();\n }\n });\n addedNodes\n .filter(function (node) {\n return node.parentNode == _this.domNode;\n })\n .sort(function (a, b) {\n if (a === b)\n return 0;\n if (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) {\n return 1;\n }\n return -1;\n })\n .forEach(function (node) {\n var refBlot = null;\n if (node.nextSibling != null) {\n refBlot = Registry.find(node.nextSibling);\n }\n var blot = makeBlot(node);\n if (blot.next != refBlot || blot.next == null) {\n if (blot.parent != null) {\n blot.parent.removeChild(_this);\n }\n _this.insertBefore(blot, refBlot || undefined);\n }\n });\n };\n return ContainerBlot;\n}(shadow_1.default));\nfunction makeBlot(node) {\n var blot = Registry.find(node);\n if (blot == null) {\n try {\n blot = Registry.create(node);\n }\n catch (e) {\n blot = Registry.create(Registry.Scope.INLINE);\n [].slice.call(node.childNodes).forEach(function (child) {\n // @ts-ignore\n blot.domNode.appendChild(child);\n });\n if (node.parentNode) {\n node.parentNode.replaceChild(blot.domNode, node);\n }\n blot.attach();\n }\n }\n return blot;\n}\nexports.default = ContainerBlot;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(1);\nvar store_1 = __webpack_require__(6);\nvar container_1 = __webpack_require__(2);\nvar Registry = __webpack_require__(0);\nvar FormatBlot = /** @class */ (function (_super) {\n __extends(FormatBlot, _super);\n function FormatBlot(domNode) {\n var _this = _super.call(this, domNode) || this;\n _this.attributes = new store_1.default(_this.domNode);\n return _this;\n }\n FormatBlot.formats = function (domNode) {\n if (typeof this.tagName === 'string') {\n return true;\n }\n else if (Array.isArray(this.tagName)) {\n return domNode.tagName.toLowerCase();\n }\n return undefined;\n };\n FormatBlot.prototype.format = function (name, value) {\n var format = Registry.query(name);\n if (format instanceof attributor_1.default) {\n this.attributes.attribute(format, value);\n }\n else if (value) {\n if (format != null && (name !== this.statics.blotName || this.formats()[name] !== value)) {\n this.replaceWith(name, value);\n }\n }\n };\n FormatBlot.prototype.formats = function () {\n var formats = this.attributes.values();\n var format = this.statics.formats(this.domNode);\n if (format != null) {\n formats[this.statics.blotName] = format;\n }\n return formats;\n };\n FormatBlot.prototype.replaceWith = function (name, value) {\n var replacement = _super.prototype.replaceWith.call(this, name, value);\n this.attributes.copy(replacement);\n return replacement;\n };\n FormatBlot.prototype.update = function (mutations, context) {\n var _this = this;\n _super.prototype.update.call(this, mutations, context);\n if (mutations.some(function (mutation) {\n return mutation.target === _this.domNode && mutation.type === 'attributes';\n })) {\n this.attributes.build();\n }\n };\n FormatBlot.prototype.wrap = function (name, value) {\n var wrapper = _super.prototype.wrap.call(this, name, value);\n if (wrapper instanceof FormatBlot && wrapper.statics.scope === this.statics.scope) {\n this.attributes.move(wrapper);\n }\n return wrapper;\n };\n return FormatBlot;\n}(container_1.default));\nexports.default = FormatBlot;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar shadow_1 = __webpack_require__(5);\nvar Registry = __webpack_require__(0);\nvar LeafBlot = /** @class */ (function (_super) {\n __extends(LeafBlot, _super);\n function LeafBlot() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n LeafBlot.value = function (domNode) {\n return true;\n };\n LeafBlot.prototype.index = function (node, offset) {\n if (this.domNode === node ||\n this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n return Math.min(offset, 1);\n }\n return -1;\n };\n LeafBlot.prototype.position = function (index, inclusive) {\n var offset = [].indexOf.call(this.parent.domNode.childNodes, this.domNode);\n if (index > 0)\n offset += 1;\n return [this.parent.domNode, offset];\n };\n LeafBlot.prototype.value = function () {\n return _a = {}, _a[this.statics.blotName] = this.statics.value(this.domNode) || true, _a;\n var _a;\n };\n LeafBlot.scope = Registry.Scope.INLINE_BLOT;\n return LeafBlot;\n}(shadow_1.default));\nexports.default = LeafBlot;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(0);\nvar ShadowBlot = /** @class */ (function () {\n function ShadowBlot(domNode) {\n this.domNode = domNode;\n // @ts-ignore\n this.domNode[Registry.DATA_KEY] = { blot: this };\n }\n Object.defineProperty(ShadowBlot.prototype, \"statics\", {\n // Hack for accessing inherited static methods\n get: function () {\n return this.constructor;\n },\n enumerable: true,\n configurable: true\n });\n ShadowBlot.create = function (value) {\n if (this.tagName == null) {\n throw new Registry.ParchmentError('Blot definition missing tagName');\n }\n var node;\n if (Array.isArray(this.tagName)) {\n if (typeof value === 'string') {\n value = value.toUpperCase();\n if (parseInt(value).toString() === value) {\n value = parseInt(value);\n }\n }\n if (typeof value === 'number') {\n node = document.createElement(this.tagName[value - 1]);\n }\n else if (this.tagName.indexOf(value) > -1) {\n node = document.createElement(value);\n }\n else {\n node = document.createElement(this.tagName[0]);\n }\n }\n else {\n node = document.createElement(this.tagName);\n }\n if (this.className) {\n node.classList.add(this.className);\n }\n return node;\n };\n ShadowBlot.prototype.attach = function () {\n if (this.parent != null) {\n this.scroll = this.parent.scroll;\n }\n };\n ShadowBlot.prototype.clone = function () {\n var domNode = this.domNode.cloneNode(false);\n return Registry.create(domNode);\n };\n ShadowBlot.prototype.detach = function () {\n if (this.parent != null)\n this.parent.removeChild(this);\n // @ts-ignore\n delete this.domNode[Registry.DATA_KEY];\n };\n ShadowBlot.prototype.deleteAt = function (index, length) {\n var blot = this.isolate(index, length);\n blot.remove();\n };\n ShadowBlot.prototype.formatAt = function (index, length, name, value) {\n var blot = this.isolate(index, length);\n if (Registry.query(name, Registry.Scope.BLOT) != null && value) {\n blot.wrap(name, value);\n }\n else if (Registry.query(name, Registry.Scope.ATTRIBUTE) != null) {\n var parent_1 = Registry.create(this.statics.scope);\n blot.wrap(parent_1);\n parent_1.format(name, value);\n }\n };\n ShadowBlot.prototype.insertAt = function (index, value, def) {\n var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n var ref = this.split(index);\n this.parent.insertBefore(blot, ref);\n };\n ShadowBlot.prototype.insertInto = function (parentBlot, refBlot) {\n if (refBlot === void 0) { refBlot = null; }\n if (this.parent != null) {\n this.parent.children.remove(this);\n }\n var refDomNode = null;\n parentBlot.children.insertBefore(this, refBlot);\n if (refBlot != null) {\n refDomNode = refBlot.domNode;\n }\n if (this.domNode.parentNode != parentBlot.domNode ||\n this.domNode.nextSibling != refDomNode) {\n parentBlot.domNode.insertBefore(this.domNode, refDomNode);\n }\n this.parent = parentBlot;\n this.attach();\n };\n ShadowBlot.prototype.isolate = function (index, length) {\n var target = this.split(index);\n target.split(length);\n return target;\n };\n ShadowBlot.prototype.length = function () {\n return 1;\n };\n ShadowBlot.prototype.offset = function (root) {\n if (root === void 0) { root = this.parent; }\n if (this.parent == null || this == root)\n return 0;\n return this.parent.children.offset(this) + this.parent.offset(root);\n };\n ShadowBlot.prototype.optimize = function (context) {\n // TODO clean up once we use WeakMap\n // @ts-ignore\n if (this.domNode[Registry.DATA_KEY] != null) {\n // @ts-ignore\n delete this.domNode[Registry.DATA_KEY].mutations;\n }\n };\n ShadowBlot.prototype.remove = function () {\n if (this.domNode.parentNode != null) {\n this.domNode.parentNode.removeChild(this.domNode);\n }\n this.detach();\n };\n ShadowBlot.prototype.replace = function (target) {\n if (target.parent == null)\n return;\n target.parent.insertBefore(this, target.next);\n target.remove();\n };\n ShadowBlot.prototype.replaceWith = function (name, value) {\n var replacement = typeof name === 'string' ? Registry.create(name, value) : name;\n replacement.replace(this);\n return replacement;\n };\n ShadowBlot.prototype.split = function (index, force) {\n return index === 0 ? this : this.next;\n };\n ShadowBlot.prototype.update = function (mutations, context) {\n // Nothing to do by default\n };\n ShadowBlot.prototype.wrap = function (name, value) {\n var wrapper = typeof name === 'string' ? Registry.create(name, value) : name;\n if (this.parent != null) {\n this.parent.insertBefore(wrapper, this.next);\n }\n wrapper.appendChild(this);\n return wrapper;\n };\n ShadowBlot.blotName = 'abstract';\n return ShadowBlot;\n}());\nexports.default = ShadowBlot;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(1);\nvar class_1 = __webpack_require__(7);\nvar style_1 = __webpack_require__(8);\nvar Registry = __webpack_require__(0);\nvar AttributorStore = /** @class */ (function () {\n function AttributorStore(domNode) {\n this.attributes = {};\n this.domNode = domNode;\n this.build();\n }\n AttributorStore.prototype.attribute = function (attribute, value) {\n // verb\n if (value) {\n if (attribute.add(this.domNode, value)) {\n if (attribute.value(this.domNode) != null) {\n this.attributes[attribute.attrName] = attribute;\n }\n else {\n delete this.attributes[attribute.attrName];\n }\n }\n }\n else {\n attribute.remove(this.domNode);\n delete this.attributes[attribute.attrName];\n }\n };\n AttributorStore.prototype.build = function () {\n var _this = this;\n this.attributes = {};\n var attributes = attributor_1.default.keys(this.domNode);\n var classes = class_1.default.keys(this.domNode);\n var styles = style_1.default.keys(this.domNode);\n attributes\n .concat(classes)\n .concat(styles)\n .forEach(function (name) {\n var attr = Registry.query(name, Registry.Scope.ATTRIBUTE);\n if (attr instanceof attributor_1.default) {\n _this.attributes[attr.attrName] = attr;\n }\n });\n };\n AttributorStore.prototype.copy = function (target) {\n var _this = this;\n Object.keys(this.attributes).forEach(function (key) {\n var value = _this.attributes[key].value(_this.domNode);\n target.format(key, value);\n });\n };\n AttributorStore.prototype.move = function (target) {\n var _this = this;\n this.copy(target);\n Object.keys(this.attributes).forEach(function (key) {\n _this.attributes[key].remove(_this.domNode);\n });\n this.attributes = {};\n };\n AttributorStore.prototype.values = function () {\n var _this = this;\n return Object.keys(this.attributes).reduce(function (attributes, name) {\n attributes[name] = _this.attributes[name].value(_this.domNode);\n return attributes;\n }, {});\n };\n return AttributorStore;\n}());\nexports.default = AttributorStore;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(1);\nfunction match(node, prefix) {\n var className = node.getAttribute('class') || '';\n return className.split(/\\s+/).filter(function (name) {\n return name.indexOf(prefix + \"-\") === 0;\n });\n}\nvar ClassAttributor = /** @class */ (function (_super) {\n __extends(ClassAttributor, _super);\n function ClassAttributor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ClassAttributor.keys = function (node) {\n return (node.getAttribute('class') || '').split(/\\s+/).map(function (name) {\n return name\n .split('-')\n .slice(0, -1)\n .join('-');\n });\n };\n ClassAttributor.prototype.add = function (node, value) {\n if (!this.canAdd(node, value))\n return false;\n this.remove(node);\n node.classList.add(this.keyName + \"-\" + value);\n return true;\n };\n ClassAttributor.prototype.remove = function (node) {\n var matches = match(node, this.keyName);\n matches.forEach(function (name) {\n node.classList.remove(name);\n });\n if (node.classList.length === 0) {\n node.removeAttribute('class');\n }\n };\n ClassAttributor.prototype.value = function (node) {\n var result = match(node, this.keyName)[0] || '';\n var value = result.slice(this.keyName.length + 1); // +1 for hyphen\n return this.canAdd(node, value) ? value : '';\n };\n return ClassAttributor;\n}(attributor_1.default));\nexports.default = ClassAttributor;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(1);\nfunction camelize(name) {\n var parts = name.split('-');\n var rest = parts\n .slice(1)\n .map(function (part) {\n return part[0].toUpperCase() + part.slice(1);\n })\n .join('');\n return parts[0] + rest;\n}\nvar StyleAttributor = /** @class */ (function (_super) {\n __extends(StyleAttributor, _super);\n function StyleAttributor() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n StyleAttributor.keys = function (node) {\n return (node.getAttribute('style') || '').split(';').map(function (value) {\n var arr = value.split(':');\n return arr[0].trim();\n });\n };\n StyleAttributor.prototype.add = function (node, value) {\n if (!this.canAdd(node, value))\n return false;\n // @ts-ignore\n node.style[camelize(this.keyName)] = value;\n return true;\n };\n StyleAttributor.prototype.remove = function (node) {\n // @ts-ignore\n node.style[camelize(this.keyName)] = '';\n if (!node.getAttribute('style')) {\n node.removeAttribute('style');\n }\n };\n StyleAttributor.prototype.value = function (node) {\n // @ts-ignore\n var value = node.style[camelize(this.keyName)];\n return this.canAdd(node, value) ? value : '';\n };\n return StyleAttributor;\n}(attributor_1.default));\nexports.default = StyleAttributor;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(10);\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(2);\nvar format_1 = __webpack_require__(3);\nvar leaf_1 = __webpack_require__(4);\nvar scroll_1 = __webpack_require__(12);\nvar inline_1 = __webpack_require__(13);\nvar block_1 = __webpack_require__(14);\nvar embed_1 = __webpack_require__(15);\nvar text_1 = __webpack_require__(16);\nvar attributor_1 = __webpack_require__(1);\nvar class_1 = __webpack_require__(7);\nvar style_1 = __webpack_require__(8);\nvar store_1 = __webpack_require__(6);\nvar Registry = __webpack_require__(0);\nvar Parchment = {\n Scope: Registry.Scope,\n create: Registry.create,\n find: Registry.find,\n query: Registry.query,\n register: Registry.register,\n Container: container_1.default,\n Format: format_1.default,\n Leaf: leaf_1.default,\n Embed: embed_1.default,\n Scroll: scroll_1.default,\n Block: block_1.default,\n Inline: inline_1.default,\n Text: text_1.default,\n Attributor: {\n Attribute: attributor_1.default,\n Class: class_1.default,\n Style: style_1.default,\n Store: store_1.default,\n },\n};\nexports.default = Parchment;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkedList = /** @class */ (function () {\n function LinkedList() {\n this.head = this.tail = null;\n this.length = 0;\n }\n LinkedList.prototype.append = function () {\n var nodes = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n nodes[_i] = arguments[_i];\n }\n this.insertBefore(nodes[0], null);\n if (nodes.length > 1) {\n this.append.apply(this, nodes.slice(1));\n }\n };\n LinkedList.prototype.contains = function (node) {\n var cur, next = this.iterator();\n while ((cur = next())) {\n if (cur === node)\n return true;\n }\n return false;\n };\n LinkedList.prototype.insertBefore = function (node, refNode) {\n if (!node)\n return;\n node.next = refNode;\n if (refNode != null) {\n node.prev = refNode.prev;\n if (refNode.prev != null) {\n refNode.prev.next = node;\n }\n refNode.prev = node;\n if (refNode === this.head) {\n this.head = node;\n }\n }\n else if (this.tail != null) {\n this.tail.next = node;\n node.prev = this.tail;\n this.tail = node;\n }\n else {\n node.prev = null;\n this.head = this.tail = node;\n }\n this.length += 1;\n };\n LinkedList.prototype.offset = function (target) {\n var index = 0, cur = this.head;\n while (cur != null) {\n if (cur === target)\n return index;\n index += cur.length();\n cur = cur.next;\n }\n return -1;\n };\n LinkedList.prototype.remove = function (node) {\n if (!this.contains(node))\n return;\n if (node.prev != null)\n node.prev.next = node.next;\n if (node.next != null)\n node.next.prev = node.prev;\n if (node === this.head)\n this.head = node.next;\n if (node === this.tail)\n this.tail = node.prev;\n this.length -= 1;\n };\n LinkedList.prototype.iterator = function (curNode) {\n if (curNode === void 0) { curNode = this.head; }\n // TODO use yield when we can\n return function () {\n var ret = curNode;\n if (curNode != null)\n curNode = curNode.next;\n return ret;\n };\n };\n LinkedList.prototype.find = function (index, inclusive) {\n if (inclusive === void 0) { inclusive = false; }\n var cur, next = this.iterator();\n while ((cur = next())) {\n var length_1 = cur.length();\n if (index < length_1 ||\n (inclusive && index === length_1 && (cur.next == null || cur.next.length() !== 0))) {\n return [cur, index];\n }\n index -= length_1;\n }\n return [null, 0];\n };\n LinkedList.prototype.forEach = function (callback) {\n var cur, next = this.iterator();\n while ((cur = next())) {\n callback(cur);\n }\n };\n LinkedList.prototype.forEachAt = function (index, length, callback) {\n if (length <= 0)\n return;\n var _a = this.find(index), startNode = _a[0], offset = _a[1];\n var cur, curIndex = index - offset, next = this.iterator(startNode);\n while ((cur = next()) && curIndex < index + length) {\n var curLength = cur.length();\n if (index > curIndex) {\n callback(cur, index - curIndex, Math.min(length, curIndex + curLength - index));\n }\n else {\n callback(cur, 0, Math.min(curLength, index + length - curIndex));\n }\n curIndex += curLength;\n }\n };\n LinkedList.prototype.map = function (callback) {\n return this.reduce(function (memo, cur) {\n memo.push(callback(cur));\n return memo;\n }, []);\n };\n LinkedList.prototype.reduce = function (callback, memo) {\n var cur, next = this.iterator();\n while ((cur = next())) {\n memo = callback(memo, cur);\n }\n return memo;\n };\n return LinkedList;\n}());\nexports.default = LinkedList;\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(2);\nvar Registry = __webpack_require__(0);\nvar OBSERVER_CONFIG = {\n attributes: true,\n characterData: true,\n characterDataOldValue: true,\n childList: true,\n subtree: true,\n};\nvar MAX_OPTIMIZE_ITERATIONS = 100;\nvar ScrollBlot = /** @class */ (function (_super) {\n __extends(ScrollBlot, _super);\n function ScrollBlot(node) {\n var _this = _super.call(this, node) || this;\n _this.scroll = _this;\n _this.observer = new MutationObserver(function (mutations) {\n _this.update(mutations);\n });\n _this.observer.observe(_this.domNode, OBSERVER_CONFIG);\n _this.attach();\n return _this;\n }\n ScrollBlot.prototype.detach = function () {\n _super.prototype.detach.call(this);\n this.observer.disconnect();\n };\n ScrollBlot.prototype.deleteAt = function (index, length) {\n this.update();\n if (index === 0 && length === this.length()) {\n this.children.forEach(function (child) {\n child.remove();\n });\n }\n else {\n _super.prototype.deleteAt.call(this, index, length);\n }\n };\n ScrollBlot.prototype.formatAt = function (index, length, name, value) {\n this.update();\n _super.prototype.formatAt.call(this, index, length, name, value);\n };\n ScrollBlot.prototype.insertAt = function (index, value, def) {\n this.update();\n _super.prototype.insertAt.call(this, index, value, def);\n };\n ScrollBlot.prototype.optimize = function (mutations, context) {\n var _this = this;\n if (mutations === void 0) { mutations = []; }\n if (context === void 0) { context = {}; }\n _super.prototype.optimize.call(this, context);\n // We must modify mutations directly, cannot make copy and then modify\n var records = [].slice.call(this.observer.takeRecords());\n // Array.push currently seems to be implemented by a non-tail recursive function\n // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());\n while (records.length > 0)\n mutations.push(records.pop());\n // TODO use WeakMap\n var mark = function (blot, markParent) {\n if (markParent === void 0) { markParent = true; }\n if (blot == null || blot === _this)\n return;\n if (blot.domNode.parentNode == null)\n return;\n // @ts-ignore\n if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n // @ts-ignore\n blot.domNode[Registry.DATA_KEY].mutations = [];\n }\n if (markParent)\n mark(blot.parent);\n };\n var optimize = function (blot) {\n // Post-order traversal\n if (\n // @ts-ignore\n blot.domNode[Registry.DATA_KEY] == null ||\n // @ts-ignore\n blot.domNode[Registry.DATA_KEY].mutations == null) {\n return;\n }\n if (blot instanceof container_1.default) {\n blot.children.forEach(optimize);\n }\n blot.optimize(context);\n };\n var remaining = mutations;\n for (var i = 0; remaining.length > 0; i += 1) {\n if (i >= MAX_OPTIMIZE_ITERATIONS) {\n throw new Error('[Parchment] Maximum optimize iterations reached');\n }\n remaining.forEach(function (mutation) {\n var blot = Registry.find(mutation.target, true);\n if (blot == null)\n return;\n if (blot.domNode === mutation.target) {\n if (mutation.type === 'childList') {\n mark(Registry.find(mutation.previousSibling, false));\n [].forEach.call(mutation.addedNodes, function (node) {\n var child = Registry.find(node, false);\n mark(child, false);\n if (child instanceof container_1.default) {\n child.children.forEach(function (grandChild) {\n mark(grandChild, false);\n });\n }\n });\n }\n else if (mutation.type === 'attributes') {\n mark(blot.prev);\n }\n }\n mark(blot);\n });\n this.children.forEach(optimize);\n remaining = [].slice.call(this.observer.takeRecords());\n records = remaining.slice();\n while (records.length > 0)\n mutations.push(records.pop());\n }\n };\n ScrollBlot.prototype.update = function (mutations, context) {\n var _this = this;\n if (context === void 0) { context = {}; }\n mutations = mutations || this.observer.takeRecords();\n // TODO use WeakMap\n mutations\n .map(function (mutation) {\n var blot = Registry.find(mutation.target, true);\n if (blot == null)\n return null;\n // @ts-ignore\n if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n // @ts-ignore\n blot.domNode[Registry.DATA_KEY].mutations = [mutation];\n return blot;\n }\n else {\n // @ts-ignore\n blot.domNode[Registry.DATA_KEY].mutations.push(mutation);\n return null;\n }\n })\n .forEach(function (blot) {\n if (blot == null ||\n blot === _this ||\n //@ts-ignore\n blot.domNode[Registry.DATA_KEY] == null)\n return;\n // @ts-ignore\n blot.update(blot.domNode[Registry.DATA_KEY].mutations || [], context);\n });\n // @ts-ignore\n if (this.domNode[Registry.DATA_KEY].mutations != null) {\n // @ts-ignore\n _super.prototype.update.call(this, this.domNode[Registry.DATA_KEY].mutations, context);\n }\n this.optimize(mutations, context);\n };\n ScrollBlot.blotName = 'scroll';\n ScrollBlot.defaultChild = 'block';\n ScrollBlot.scope = Registry.Scope.BLOCK_BLOT;\n ScrollBlot.tagName = 'DIV';\n return ScrollBlot;\n}(container_1.default));\nexports.default = ScrollBlot;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(3);\nvar Registry = __webpack_require__(0);\n// Shallow object comparison\nfunction isEqual(obj1, obj2) {\n if (Object.keys(obj1).length !== Object.keys(obj2).length)\n return false;\n // @ts-ignore\n for (var prop in obj1) {\n // @ts-ignore\n if (obj1[prop] !== obj2[prop])\n return false;\n }\n return true;\n}\nvar InlineBlot = /** @class */ (function (_super) {\n __extends(InlineBlot, _super);\n function InlineBlot() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n InlineBlot.formats = function (domNode) {\n if (domNode.tagName === InlineBlot.tagName)\n return undefined;\n return _super.formats.call(this, domNode);\n };\n InlineBlot.prototype.format = function (name, value) {\n var _this = this;\n if (name === this.statics.blotName && !value) {\n this.children.forEach(function (child) {\n if (!(child instanceof format_1.default)) {\n child = child.wrap(InlineBlot.blotName, true);\n }\n _this.attributes.copy(child);\n });\n this.unwrap();\n }\n else {\n _super.prototype.format.call(this, name, value);\n }\n };\n InlineBlot.prototype.formatAt = function (index, length, name, value) {\n if (this.formats()[name] != null || Registry.query(name, Registry.Scope.ATTRIBUTE)) {\n var blot = this.isolate(index, length);\n blot.format(name, value);\n }\n else {\n _super.prototype.formatAt.call(this, index, length, name, value);\n }\n };\n InlineBlot.prototype.optimize = function (context) {\n _super.prototype.optimize.call(this, context);\n var formats = this.formats();\n if (Object.keys(formats).length === 0) {\n return this.unwrap(); // unformatted span\n }\n var next = this.next;\n if (next instanceof InlineBlot && next.prev === this && isEqual(formats, next.formats())) {\n next.moveChildren(this);\n next.remove();\n }\n };\n InlineBlot.blotName = 'inline';\n InlineBlot.scope = Registry.Scope.INLINE_BLOT;\n InlineBlot.tagName = 'SPAN';\n return InlineBlot;\n}(format_1.default));\nexports.default = InlineBlot;\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(3);\nvar Registry = __webpack_require__(0);\nvar BlockBlot = /** @class */ (function (_super) {\n __extends(BlockBlot, _super);\n function BlockBlot() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n BlockBlot.formats = function (domNode) {\n var tagName = Registry.query(BlockBlot.blotName).tagName;\n if (domNode.tagName === tagName)\n return undefined;\n return _super.formats.call(this, domNode);\n };\n BlockBlot.prototype.format = function (name, value) {\n if (Registry.query(name, Registry.Scope.BLOCK) == null) {\n return;\n }\n else if (name === this.statics.blotName && !value) {\n this.replaceWith(BlockBlot.blotName);\n }\n else {\n _super.prototype.format.call(this, name, value);\n }\n };\n BlockBlot.prototype.formatAt = function (index, length, name, value) {\n if (Registry.query(name, Registry.Scope.BLOCK) != null) {\n this.format(name, value);\n }\n else {\n _super.prototype.formatAt.call(this, index, length, name, value);\n }\n };\n BlockBlot.prototype.insertAt = function (index, value, def) {\n if (def == null || Registry.query(value, Registry.Scope.INLINE) != null) {\n // Insert text or inline\n _super.prototype.insertAt.call(this, index, value, def);\n }\n else {\n var after = this.split(index);\n var blot = Registry.create(value, def);\n after.parent.insertBefore(blot, after);\n }\n };\n BlockBlot.prototype.update = function (mutations, context) {\n if (navigator.userAgent.match(/Trident/)) {\n this.build();\n }\n else {\n _super.prototype.update.call(this, mutations, context);\n }\n };\n BlockBlot.blotName = 'block';\n BlockBlot.scope = Registry.Scope.BLOCK_BLOT;\n BlockBlot.tagName = 'P';\n return BlockBlot;\n}(format_1.default));\nexports.default = BlockBlot;\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(4);\nvar EmbedBlot = /** @class */ (function (_super) {\n __extends(EmbedBlot, _super);\n function EmbedBlot() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n EmbedBlot.formats = function (domNode) {\n return undefined;\n };\n EmbedBlot.prototype.format = function (name, value) {\n // super.formatAt wraps, which is what we want in general,\n // but this allows subclasses to overwrite for formats\n // that just apply to particular embeds\n _super.prototype.formatAt.call(this, 0, this.length(), name, value);\n };\n EmbedBlot.prototype.formatAt = function (index, length, name, value) {\n if (index === 0 && length === this.length()) {\n this.format(name, value);\n }\n else {\n _super.prototype.formatAt.call(this, index, length, name, value);\n }\n };\n EmbedBlot.prototype.formats = function () {\n return this.statics.formats(this.domNode);\n };\n return EmbedBlot;\n}(leaf_1.default));\nexports.default = EmbedBlot;\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(4);\nvar Registry = __webpack_require__(0);\nvar TextBlot = /** @class */ (function (_super) {\n __extends(TextBlot, _super);\n function TextBlot(node) {\n var _this = _super.call(this, node) || this;\n _this.text = _this.statics.value(_this.domNode);\n return _this;\n }\n TextBlot.create = function (value) {\n return document.createTextNode(value);\n };\n TextBlot.value = function (domNode) {\n var text = domNode.data;\n // @ts-ignore\n if (text['normalize'])\n text = text['normalize']();\n return text;\n };\n TextBlot.prototype.deleteAt = function (index, length) {\n this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length);\n };\n TextBlot.prototype.index = function (node, offset) {\n if (this.domNode === node) {\n return offset;\n }\n return -1;\n };\n TextBlot.prototype.insertAt = function (index, value, def) {\n if (def == null) {\n this.text = this.text.slice(0, index) + value + this.text.slice(index);\n this.domNode.data = this.text;\n }\n else {\n _super.prototype.insertAt.call(this, index, value, def);\n }\n };\n TextBlot.prototype.length = function () {\n return this.text.length;\n };\n TextBlot.prototype.optimize = function (context) {\n _super.prototype.optimize.call(this, context);\n this.text = this.statics.value(this.domNode);\n if (this.text.length === 0) {\n this.remove();\n }\n else if (this.next instanceof TextBlot && this.next.prev === this) {\n this.insertAt(this.length(), this.next.value());\n this.next.remove();\n }\n };\n TextBlot.prototype.position = function (index, inclusive) {\n if (inclusive === void 0) { inclusive = false; }\n return [this.domNode, index];\n };\n TextBlot.prototype.split = function (index, force) {\n if (force === void 0) { force = false; }\n if (!force) {\n if (index === 0)\n return this;\n if (index === this.length())\n return this.next;\n }\n var after = Registry.create(this.domNode.splitText(index));\n this.parent.insertBefore(after, this.next);\n this.text = this.statics.value(this.domNode);\n return after;\n };\n TextBlot.prototype.update = function (mutations, context) {\n var _this = this;\n if (mutations.some(function (mutation) {\n return mutation.type === 'characterData' && mutation.target === _this.domNode;\n })) {\n this.text = this.statics.value(this.domNode);\n }\n };\n TextBlot.prototype.value = function () {\n return this.text;\n };\n TextBlot.blotName = 'text';\n TextBlot.scope = Registry.Scope.INLINE_BLOT;\n return TextBlot;\n}(leaf_1.default));\nexports.default = TextBlot;\n\n\n/***/ })\n/******/ ]);\n});\n//# sourceMappingURL=parchment.js.map","let elem = document.createElement('div');\nelem.classList.toggle('test-class', false);\nif (elem.classList.contains('test-class')) {\n let _toggle = DOMTokenList.prototype.toggle;\n DOMTokenList.prototype.toggle = function(token, force) {\n if (arguments.length > 1 && !this.contains(token) === !force) {\n return force;\n } else {\n return _toggle.call(this, token);\n }\n };\n}\n\nif (!String.prototype.startsWith) {\n String.prototype.startsWith = function(searchString, position){\n position = position || 0;\n return this.substr(position, searchString.length) === searchString;\n };\n}\n\nif (!String.prototype.endsWith) {\n String.prototype.endsWith = function(searchString, position) {\n var subjectString = this.toString();\n if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n };\n}\n\nif (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, \"find\", {\n value: function(predicate) {\n if (this === null) {\n throw new TypeError('Array.prototype.find called on null or undefined');\n }\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n var list = Object(this);\n var length = list.length >>> 0;\n var thisArg = arguments[1];\n var value;\n\n for (var i = 0; i < length; i++) {\n value = list[i];\n if (predicate.call(thisArg, value, i, list)) {\n return value;\n }\n }\n return undefined;\n }\n });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n // Disable resizing in Firefox\n document.execCommand(\"enableObjectResizing\", false, false);\n // Disable automatic linkifying in IE11\n document.execCommand(\"autoUrlDetect\", false, false);\n});\n","/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int} cursor_pos Expected edit position in text1 (optional)\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos) {\n // Check for equality (speedup).\n if (text1 == text2) {\n if (text1) {\n return [[DIFF_EQUAL, text1]];\n }\n return [];\n }\n\n // Check cursor_pos within bounds\n if (cursor_pos < 0 || text1.length < cursor_pos) {\n cursor_pos = null;\n }\n\n // Trim off common prefix (speedup).\n var commonlength = diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = diff_compute_(text1, text2);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift([DIFF_EQUAL, commonprefix]);\n }\n if (commonsuffix) {\n diffs.push([DIFF_EQUAL, commonsuffix]);\n }\n diff_cleanupMerge(diffs);\n if (cursor_pos != null) {\n diffs = fix_cursor(diffs, cursor_pos);\n }\n diffs = fix_emoji(diffs);\n return diffs;\n};\n\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [[DIFF_INSERT, text2]];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [[DIFF_DELETE, text1]];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i != -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [[DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)]];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length == 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n }\n\n // Check to see if the problem can be split in two.\n var hm = diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = diff_main(text1_a, text2_a);\n var diffs_b = diff_main(text1_b, text2_b);\n // Merge the results.\n return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n }\n\n return diff_bisect_(text1, text2);\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = (delta % 2 != 0);\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (x1 < text1_length && y1 < text2_length &&\n text1.charAt(x1) == text2.charAt(y1)) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (x2 < text1_length && y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) ==\n text2.charAt(text2_length - y2 - 1)) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return diff_bisectSplit_(text1, text2, x1, y1);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = diff_main(text1a, text2a);\n var diffsb = diff_main(text1b, text2b);\n\n return diffs.concat(diffsb);\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\nfunction diff_commonPrefix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 ||\n text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.<string>} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = '';\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n var prefixLength = diff_commonPrefix(longtext.substring(i),\n shorttext.substring(j));\n var suffixLength = diff_commonSuffix(longtext.substring(0, i),\n shorttext.substring(0, j));\n if (best_common.length < suffixLength + prefixLength) {\n best_common = shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [best_longtext_a, best_longtext_b,\n best_shorttext_a, best_shorttext_b, best_common];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 4));\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 2));\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n */\nfunction diff_cleanupMerge(diffs) {\n diffs.push([DIFF_EQUAL, '']); // Add a dummy entry at the end.\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete + count_insert > 1) {\n if (count_delete !== 0 && count_insert !== 0) {\n // Factor out any common prefixies.\n commonlength = diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if ((pointer - count_delete - count_insert) > 0 &&\n diffs[pointer - count_delete - count_insert - 1][0] ==\n DIFF_EQUAL) {\n diffs[pointer - count_delete - count_insert - 1][1] +=\n text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, [DIFF_EQUAL,\n text_insert.substring(0, commonlength)]);\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixies.\n commonlength = diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] = text_insert.substring(text_insert.length -\n commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length -\n commonlength);\n text_delete = text_delete.substring(0, text_delete.length -\n commonlength);\n }\n }\n // Delete the offending records and add the merged ones.\n if (count_delete === 0) {\n diffs.splice(pointer - count_insert,\n count_delete + count_insert, [DIFF_INSERT, text_insert]);\n } else if (count_insert === 0) {\n diffs.splice(pointer - count_delete,\n count_delete + count_insert, [DIFF_DELETE, text_delete]);\n } else {\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert, [DIFF_DELETE, text_delete],\n [DIFF_INSERT, text_insert]);\n }\n pointer = pointer - count_delete - count_insert +\n (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;\n } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n if (diffs[pointer][1].substring(diffs[pointer][1].length -\n diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] = diffs[pointer - 1][1] +\n diffs[pointer][1].substring(0, diffs[pointer][1].length -\n diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n diff_cleanupMerge(diffs);\n }\n};\n\n\nvar diff = diff_main;\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n\n/*\n * Modify a diff such that the cursor position points to the start of a change:\n * E.g.\n * cursor_normalize_diff([[DIFF_EQUAL, 'abc']], 1)\n * => [1, [[DIFF_EQUAL, 'a'], [DIFF_EQUAL, 'bc']]]\n * cursor_normalize_diff([[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xyz']], 2)\n * => [2, [[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xy'], [DIFF_DELETE, 'z']]]\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} A tuple [cursor location in the modified diff, modified diff]\n */\nfunction cursor_normalize_diff (diffs, cursor_pos) {\n if (cursor_pos === 0) {\n return [DIFF_EQUAL, diffs];\n }\n for (var current_pos = 0, i = 0; i < diffs.length; i++) {\n var d = diffs[i];\n if (d[0] === DIFF_DELETE || d[0] === DIFF_EQUAL) {\n var next_pos = current_pos + d[1].length;\n if (cursor_pos === next_pos) {\n return [i + 1, diffs];\n } else if (cursor_pos < next_pos) {\n // copy to prevent side effects\n diffs = diffs.slice();\n // split d into two diff changes\n var split_pos = cursor_pos - current_pos;\n var d_left = [d[0], d[1].slice(0, split_pos)];\n var d_right = [d[0], d[1].slice(split_pos)];\n diffs.splice(i, 1, d_left, d_right);\n return [i + 1, diffs];\n } else {\n current_pos = next_pos;\n }\n }\n }\n throw new Error('cursor_pos is out of bounds!')\n}\n\n/*\n * Modify a diff such that the edit position is \"shifted\" to the proposed edit location (cursor_position).\n *\n * Case 1)\n * Check if a naive shift is possible:\n * [0, X], [ 1, Y] -> [ 1, Y], [0, X] (if X + Y === Y + X)\n * [0, X], [-1, Y] -> [-1, Y], [0, X] (if X + Y === Y + X) - holds same result\n * Case 2)\n * Check if the following shifts are possible:\n * [0, 'pre'], [ 1, 'prefix'] -> [ 1, 'pre'], [0, 'pre'], [ 1, 'fix']\n * [0, 'pre'], [-1, 'prefix'] -> [-1, 'pre'], [0, 'pre'], [-1, 'fix']\n * ^ ^\n * d d_next\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} Array of diff tuples\n */\nfunction fix_cursor (diffs, cursor_pos) {\n var norm = cursor_normalize_diff(diffs, cursor_pos);\n var ndiffs = norm[1];\n var cursor_pointer = norm[0];\n var d = ndiffs[cursor_pointer];\n var d_next = ndiffs[cursor_pointer + 1];\n\n if (d == null) {\n // Text was deleted from end of original string,\n // cursor is now out of bounds in new string\n return diffs;\n } else if (d[0] !== DIFF_EQUAL) {\n // A modification happened at the cursor location.\n // This is the expected outcome, so we can return the original diff.\n return diffs;\n } else {\n if (d_next != null && d[1] + d_next[1] === d_next[1] + d[1]) {\n // Case 1)\n // It is possible to perform a naive shift\n ndiffs.splice(cursor_pointer, 2, d_next, d)\n return merge_tuples(ndiffs, cursor_pointer, 2)\n } else if (d_next != null && d_next[1].indexOf(d[1]) === 0) {\n // Case 2)\n // d[1] is a prefix of d_next[1]\n // We can assume that d_next[0] !== 0, since d[0] === 0\n // Shift edit locations..\n ndiffs.splice(cursor_pointer, 2, [d_next[0], d[1]], [0, d[1]]);\n var suffix = d_next[1].slice(d[1].length);\n if (suffix.length > 0) {\n ndiffs.splice(cursor_pointer + 2, 0, [d_next[0], suffix]);\n }\n return merge_tuples(ndiffs, cursor_pointer, 3)\n } else {\n // Not possible to perform any modification\n return diffs;\n }\n }\n}\n\n/*\n * Check diff did not split surrogate pairs.\n * Ex. [0, '\\uD83D'], [-1, '\\uDC36'], [1, '\\uDC2F'] -> [-1, '\\uD83D\\uDC36'], [1, '\\uD83D\\uDC2F']\n * '\\uD83D\\uDC36' === 'ðŸ¶', '\\uD83D\\uDC2F' === 'ðŸ¯'\n *\n * @param {Array} diffs Array of diff tuples\n * @return {Array} Array of diff tuples\n */\nfunction fix_emoji (diffs) {\n var compact = false;\n var starts_with_pair_end = function(str) {\n return str.charCodeAt(0) >= 0xDC00 && str.charCodeAt(0) <= 0xDFFF;\n }\n var ends_with_pair_start = function(str) {\n return str.charCodeAt(str.length-1) >= 0xD800 && str.charCodeAt(str.length-1) <= 0xDBFF;\n }\n for (var i = 2; i < diffs.length; i += 1) {\n if (diffs[i-2][0] === DIFF_EQUAL && ends_with_pair_start(diffs[i-2][1]) &&\n diffs[i-1][0] === DIFF_DELETE && starts_with_pair_end(diffs[i-1][1]) &&\n diffs[i][0] === DIFF_INSERT && starts_with_pair_end(diffs[i][1])) {\n compact = true;\n\n diffs[i-1][1] = diffs[i-2][1].slice(-1) + diffs[i-1][1];\n diffs[i][1] = diffs[i-2][1].slice(-1) + diffs[i][1];\n\n diffs[i-2][1] = diffs[i-2][1].slice(0, -1);\n }\n }\n if (!compact) {\n return diffs;\n }\n var fixed_diffs = [];\n for (var i = 0; i < diffs.length; i += 1) {\n if (diffs[i][1].length > 0) {\n fixed_diffs.push(diffs[i]);\n }\n }\n return fixed_diffs;\n}\n\n/*\n * Try to merge tuples with their neigbors in a given range.\n * E.g. [0, 'a'], [0, 'b'] -> [0, 'ab']\n *\n * @param {Array} diffs Array of diff tuples.\n * @param {Int} start Position of the first element to merge (diffs[start] is also merged with diffs[start - 1]).\n * @param {Int} length Number of consecutive elements to check.\n * @return {Array} Array of merged diff tuples.\n */\nfunction merge_tuples (diffs, start, length) {\n // Check from (start-1) to (start+length).\n for (var i = start + length - 1; i >= 0 && i >= start - 1; i--) {\n if (i + 1 < diffs.length) {\n var left_d = diffs[i];\n var right_d = diffs[i+1];\n if (left_d[0] === right_d[1]) {\n diffs.splice(i, 2, [left_d[0], left_d[1] + right_d[1]]);\n }\n }\n }\n return diffs;\n}\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\ntry {\n\tnull.error; // eslint-disable-line no-unused-expressions\n} catch (e) {\n\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\tvar errorProto = getProto(getProto(e));\n\tINTRINSICS['%Error.prototype%'] = errorProto;\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar hasPropertyDescriptors = require('has-property-descriptors')();\n\nvar supportsDescriptors = origDefineProperty && hasPropertyDescriptors;\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object) {\n\t\tif (predicate === true) {\n\t\t\tif (object[name] === value) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (!isFunction(predicate) || !predicate()) {\n\t\t\treturn;\n\t\t}\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value; // eslint-disable-line no-param-reassign\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n","'use strict';\n\nvar functionsHaveNames = function functionsHaveNames() {\n\treturn typeof function f() {}.name === 'string';\n};\n\nvar gOPD = Object.getOwnPropertyDescriptor;\nif (gOPD) {\n\ttry {\n\t\tgOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\tgOPD = null;\n\t}\n}\n\nfunctionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() {\n\tif (!functionsHaveNames() || !gOPD) {\n\t\treturn false;\n\t}\n\tvar desc = gOPD(function () {}, 'name');\n\treturn !!desc && !!desc.configurable;\n};\n\nvar $bind = Function.prototype.bind;\n\nfunctionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() {\n\treturn functionsHaveNames() && typeof $bind === 'function' && function f() {}.bind().name !== '';\n};\n\nmodule.exports = functionsHaveNames;\n","'use strict';\n\nvar functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames();\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.hasIndices) {\n\t\tresult += 'd';\n\t}\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n\nif (functionsHaveConfigurableNames && Object.defineProperty) {\n\tObject.defineProperty(module.exports, 'name', { value: 'get flags' });\n}\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function getPolyfill() {\n\tif (supportsDescriptors && (/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (\n\t\t\tdescriptor\n\t\t\t&& typeof descriptor.get === 'function'\n\t\t\t&& typeof RegExp.prototype.dotAll === 'boolean'\n\t\t\t&& typeof RegExp.prototype.hasIndices === 'boolean'\n\t\t) {\n\t\t\t/* eslint getter-return: 0 */\n\t\t\tvar calls = '';\n\t\t\tvar o = {};\n\t\t\tObject.defineProperty(o, 'hasIndices', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'd';\n\t\t\t\t}\n\t\t\t});\n\t\t\tObject.defineProperty(o, 'sticky', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'y';\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (calls === 'dy') {\n\t\t\t\treturn descriptor.get;\n\t\t\t}\n\t\t}\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar getPolyfill = require('./polyfill');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar flagsBound = callBind(getPolyfill());\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n","'use strict';\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n","var objectKeys = require('object-keys');\nvar isArguments = require('is-arguments');\nvar is = require('object-is');\nvar isRegex = require('is-regex');\nvar flags = require('regexp.prototype.flags');\nvar isDate = require('is-date-object');\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n var opts = options || {};\n\n // 7.1. All identical values are equivalent, as determined by ===.\n if (opts.strict ? is(actual, expected) : actual === expected) {\n return true;\n }\n\n // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n return opts.strict ? is(actual, expected) : actual == expected;\n }\n\n /*\n * 7.4. For all other Object pairs, including Array objects, equivalence is\n * determined by having the same number of owned properties (as verified\n * with Object.prototype.hasOwnProperty.call), the same set of keys\n * (although not necessarily the same order), equivalent values for every\n * corresponding key, and an identical 'prototype' property. Note: this\n * accounts for both named and indexed properties on Arrays.\n */\n // eslint-disable-next-line no-use-before-define\n return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n return false;\n }\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') {\n return false;\n }\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n /* eslint max-statements: [2, 50] */\n var i, key;\n if (typeof a !== typeof b) { return false; }\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) { return false; }\n\n if (isArguments(a) !== isArguments(b)) { return false; }\n\n var aIsRegex = isRegex(a);\n var bIsRegex = isRegex(b);\n if (aIsRegex !== bIsRegex) { return false; }\n if (aIsRegex || bIsRegex) {\n return a.source === b.source && flags(a) === flags(b);\n }\n\n if (isDate(a) && isDate(b)) {\n return getTime.call(a) === getTime.call(b);\n }\n\n var aIsBuffer = isBuffer(a);\n var bIsBuffer = isBuffer(b);\n if (aIsBuffer !== bIsBuffer) { return false; }\n if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n if (a.length !== b.length) { return false; }\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) { return false; }\n }\n return true;\n }\n\n if (typeof a !== typeof b) { return false; }\n\n try {\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n } catch (e) { // happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) { return false; }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) { return false; }\n }\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) { return false; }\n }\n\n return true;\n}\n\nmodule.exports = deepEqual;\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","var equal = require('deep-equal');\nvar extend = require('extend');\n\n\nvar lib = {\n attributes: {\n compose: function (a, b, keepNull) {\n if (typeof a !== 'object') a = {};\n if (typeof b !== 'object') b = {};\n var attributes = extend(true, {}, b);\n if (!keepNull) {\n attributes = Object.keys(attributes).reduce(function (copy, key) {\n if (attributes[key] != null) {\n copy[key] = attributes[key];\n }\n return copy;\n }, {});\n }\n for (var key in a) {\n if (a[key] !== undefined && b[key] === undefined) {\n attributes[key] = a[key];\n }\n }\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n },\n\n diff: function(a, b) {\n if (typeof a !== 'object') a = {};\n if (typeof b !== 'object') b = {};\n var attributes = Object.keys(a).concat(Object.keys(b)).reduce(function (attributes, key) {\n if (!equal(a[key], b[key])) {\n attributes[key] = b[key] === undefined ? null : b[key];\n }\n return attributes;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n },\n\n transform: function (a, b, priority) {\n if (typeof a !== 'object') return b;\n if (typeof b !== 'object') return undefined;\n if (!priority) return b; // b simply overwrites us without priority\n var attributes = Object.keys(b).reduce(function (attributes, key) {\n if (a[key] === undefined) attributes[key] = b[key]; // null is a valid value\n return attributes;\n }, {});\n return Object.keys(attributes).length > 0 ? attributes : undefined;\n }\n },\n\n iterator: function (ops) {\n return new Iterator(ops);\n },\n\n length: function (op) {\n if (typeof op['delete'] === 'number') {\n return op['delete'];\n } else if (typeof op.retain === 'number') {\n return op.retain;\n } else {\n return typeof op.insert === 'string' ? op.insert.length : 1;\n }\n }\n};\n\n\nfunction Iterator(ops) {\n this.ops = ops;\n this.index = 0;\n this.offset = 0;\n};\n\nIterator.prototype.hasNext = function () {\n return this.peekLength() < Infinity;\n};\n\nIterator.prototype.next = function (length) {\n if (!length) length = Infinity;\n var nextOp = this.ops[this.index];\n if (nextOp) {\n var offset = this.offset;\n var opLength = lib.length(nextOp)\n if (length >= opLength - offset) {\n length = opLength - offset;\n this.index += 1;\n this.offset = 0;\n } else {\n this.offset += length;\n }\n if (typeof nextOp['delete'] === 'number') {\n return { 'delete': length };\n } else {\n var retOp = {};\n if (nextOp.attributes) {\n retOp.attributes = nextOp.attributes;\n }\n if (typeof nextOp.retain === 'number') {\n retOp.retain = length;\n } else if (typeof nextOp.insert === 'string') {\n retOp.insert = nextOp.insert.substr(offset, length);\n } else {\n // offset should === 0, length should === 1\n retOp.insert = nextOp.insert;\n }\n return retOp;\n }\n } else {\n return { retain: Infinity };\n }\n};\n\nIterator.prototype.peek = function () {\n return this.ops[this.index];\n};\n\nIterator.prototype.peekLength = function () {\n if (this.ops[this.index]) {\n // Should never return 0 if our index is being managed correctly\n return lib.length(this.ops[this.index]) - this.offset;\n } else {\n return Infinity;\n }\n};\n\nIterator.prototype.peekType = function () {\n if (this.ops[this.index]) {\n if (typeof this.ops[this.index]['delete'] === 'number') {\n return 'delete';\n } else if (typeof this.ops[this.index].retain === 'number') {\n return 'retain';\n } else {\n return 'insert';\n }\n }\n return 'retain';\n};\n\nIterator.prototype.rest = function () {\n if (!this.hasNext()) {\n return [];\n } else if (this.offset === 0) {\n return this.ops.slice(this.index);\n } else {\n var offset = this.offset;\n var index = this.index;\n var next = this.next();\n var rest = this.ops.slice(this.index);\n this.offset = offset;\n this.index = index;\n return [next].concat(rest);\n }\n};\n\n\nmodule.exports = lib;\n","var diff = require('fast-diff');\nvar equal = require('deep-equal');\nvar extend = require('extend');\nvar op = require('./op');\n\n\nvar NULL_CHARACTER = String.fromCharCode(0); // Placeholder char for embed in diff()\n\n\nvar Delta = function (ops) {\n // Assume we are given a well formed ops\n if (Array.isArray(ops)) {\n this.ops = ops;\n } else if (ops != null && Array.isArray(ops.ops)) {\n this.ops = ops.ops;\n } else {\n this.ops = [];\n }\n};\n\n\nDelta.prototype.insert = function (text, attributes) {\n var newOp = {};\n if (text.length === 0) return this;\n newOp.insert = text;\n if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n};\n\nDelta.prototype['delete'] = function (length) {\n if (length <= 0) return this;\n return this.push({ 'delete': length });\n};\n\nDelta.prototype.retain = function (length, attributes) {\n if (length <= 0) return this;\n var newOp = { retain: length };\n if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n newOp.attributes = attributes;\n }\n return this.push(newOp);\n};\n\nDelta.prototype.push = function (newOp) {\n var index = this.ops.length;\n var lastOp = this.ops[index - 1];\n newOp = extend(true, {}, newOp);\n if (typeof lastOp === 'object') {\n if (typeof newOp['delete'] === 'number' && typeof lastOp['delete'] === 'number') {\n this.ops[index - 1] = { 'delete': lastOp['delete'] + newOp['delete'] };\n return this;\n }\n // Since it does not matter if we insert before or after deleting at the same index,\n // always prefer to insert first\n if (typeof lastOp['delete'] === 'number' && newOp.insert != null) {\n index -= 1;\n lastOp = this.ops[index - 1];\n if (typeof lastOp !== 'object') {\n this.ops.unshift(newOp);\n return this;\n }\n }\n if (equal(newOp.attributes, lastOp.attributes)) {\n if (typeof newOp.insert === 'string' && typeof lastOp.insert === 'string') {\n this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n return this;\n } else if (typeof newOp.retain === 'number' && typeof lastOp.retain === 'number') {\n this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n return this;\n }\n }\n }\n if (index === this.ops.length) {\n this.ops.push(newOp);\n } else {\n this.ops.splice(index, 0, newOp);\n }\n return this;\n};\n\nDelta.prototype.chop = function () {\n var lastOp = this.ops[this.ops.length - 1];\n if (lastOp && lastOp.retain && !lastOp.attributes) {\n this.ops.pop();\n }\n return this;\n};\n\nDelta.prototype.filter = function (predicate) {\n return this.ops.filter(predicate);\n};\n\nDelta.prototype.forEach = function (predicate) {\n this.ops.forEach(predicate);\n};\n\nDelta.prototype.map = function (predicate) {\n return this.ops.map(predicate);\n};\n\nDelta.prototype.partition = function (predicate) {\n var passed = [], failed = [];\n this.forEach(function(op) {\n var target = predicate(op) ? passed : failed;\n target.push(op);\n });\n return [passed, failed];\n};\n\nDelta.prototype.reduce = function (predicate, initial) {\n return this.ops.reduce(predicate, initial);\n};\n\nDelta.prototype.changeLength = function () {\n return this.reduce(function (length, elem) {\n if (elem.insert) {\n return length + op.length(elem);\n } else if (elem.delete) {\n return length - elem.delete;\n }\n return length;\n }, 0);\n};\n\nDelta.prototype.length = function () {\n return this.reduce(function (length, elem) {\n return length + op.length(elem);\n }, 0);\n};\n\nDelta.prototype.slice = function (start, end) {\n start = start || 0;\n if (typeof end !== 'number') end = Infinity;\n var ops = [];\n var iter = op.iterator(this.ops);\n var index = 0;\n while (index < end && iter.hasNext()) {\n var nextOp;\n if (index < start) {\n nextOp = iter.next(start - index);\n } else {\n nextOp = iter.next(end - index);\n ops.push(nextOp);\n }\n index += op.length(nextOp);\n }\n return new Delta(ops);\n};\n\n\nDelta.prototype.compose = function (other) {\n var thisIter = op.iterator(this.ops);\n var otherIter = op.iterator(other.ops);\n var ops = [];\n var firstOther = otherIter.peek();\n if (firstOther != null && typeof firstOther.retain === 'number' && firstOther.attributes == null) {\n var firstLeft = firstOther.retain;\n while (thisIter.peekType() === 'insert' && thisIter.peekLength() <= firstLeft) {\n firstLeft -= thisIter.peekLength();\n ops.push(thisIter.next());\n }\n if (firstOther.retain - firstLeft > 0) {\n otherIter.next(firstOther.retain - firstLeft);\n }\n }\n var delta = new Delta(ops);\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n } else if (thisIter.peekType() === 'delete') {\n delta.push(thisIter.next());\n } else {\n var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n var thisOp = thisIter.next(length);\n var otherOp = otherIter.next(length);\n if (typeof otherOp.retain === 'number') {\n var newOp = {};\n if (typeof thisOp.retain === 'number') {\n newOp.retain = length;\n } else {\n newOp.insert = thisOp.insert;\n }\n // Preserve null when composing with a retain, otherwise remove it for inserts\n var attributes = op.attributes.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');\n if (attributes) newOp.attributes = attributes;\n delta.push(newOp);\n\n // Optimization if rest of other is just retain\n if (!otherIter.hasNext() && equal(delta.ops[delta.ops.length - 1], newOp)) {\n var rest = new Delta(thisIter.rest());\n return delta.concat(rest).chop();\n }\n\n // Other op should be delete, we could be an insert or retain\n // Insert + delete cancels out\n } else if (typeof otherOp['delete'] === 'number' && typeof thisOp.retain === 'number') {\n delta.push(otherOp);\n }\n }\n }\n return delta.chop();\n};\n\nDelta.prototype.concat = function (other) {\n var delta = new Delta(this.ops.slice());\n if (other.ops.length > 0) {\n delta.push(other.ops[0]);\n delta.ops = delta.ops.concat(other.ops.slice(1));\n }\n return delta;\n};\n\nDelta.prototype.diff = function (other, index) {\n if (this.ops === other.ops) {\n return new Delta();\n }\n var strings = [this, other].map(function (delta) {\n return delta.map(function (op) {\n if (op.insert != null) {\n return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n }\n var prep = (delta === other) ? 'on' : 'with';\n throw new Error('diff() called ' + prep + ' non-document');\n }).join('');\n });\n var delta = new Delta();\n var diffResult = diff(strings[0], strings[1], index);\n var thisIter = op.iterator(this.ops);\n var otherIter = op.iterator(other.ops);\n diffResult.forEach(function (component) {\n var length = component[1].length;\n while (length > 0) {\n var opLength = 0;\n switch (component[0]) {\n case diff.INSERT:\n opLength = Math.min(otherIter.peekLength(), length);\n delta.push(otherIter.next(opLength));\n break;\n case diff.DELETE:\n opLength = Math.min(length, thisIter.peekLength());\n thisIter.next(opLength);\n delta['delete'](opLength);\n break;\n case diff.EQUAL:\n opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);\n var thisOp = thisIter.next(opLength);\n var otherOp = otherIter.next(opLength);\n if (equal(thisOp.insert, otherOp.insert)) {\n delta.retain(opLength, op.attributes.diff(thisOp.attributes, otherOp.attributes));\n } else {\n delta.push(otherOp)['delete'](opLength);\n }\n break;\n }\n length -= opLength;\n }\n });\n return delta.chop();\n};\n\nDelta.prototype.eachLine = function (predicate, newline) {\n newline = newline || '\\n';\n var iter = op.iterator(this.ops);\n var line = new Delta();\n var i = 0;\n while (iter.hasNext()) {\n if (iter.peekType() !== 'insert') return;\n var thisOp = iter.peek();\n var start = op.length(thisOp) - iter.peekLength();\n var index = typeof thisOp.insert === 'string' ?\n thisOp.insert.indexOf(newline, start) - start : -1;\n if (index < 0) {\n line.push(iter.next());\n } else if (index > 0) {\n line.push(iter.next(index));\n } else {\n if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n return;\n }\n i += 1;\n line = new Delta();\n }\n }\n if (line.length() > 0) {\n predicate(line, {}, i);\n }\n};\n\nDelta.prototype.transform = function (other, priority) {\n priority = !!priority;\n if (typeof other === 'number') {\n return this.transformPosition(other, priority);\n }\n var thisIter = op.iterator(this.ops);\n var otherIter = op.iterator(other.ops);\n var delta = new Delta();\n while (thisIter.hasNext() || otherIter.hasNext()) {\n if (thisIter.peekType() === 'insert' && (priority || otherIter.peekType() !== 'insert')) {\n delta.retain(op.length(thisIter.next()));\n } else if (otherIter.peekType() === 'insert') {\n delta.push(otherIter.next());\n } else {\n var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n var thisOp = thisIter.next(length);\n var otherOp = otherIter.next(length);\n if (thisOp['delete']) {\n // Our delete either makes their delete redundant or removes their retain\n continue;\n } else if (otherOp['delete']) {\n delta.push(otherOp);\n } else {\n // We retain either their retain or insert\n delta.retain(length, op.attributes.transform(thisOp.attributes, otherOp.attributes, priority));\n }\n }\n }\n return delta.chop();\n};\n\nDelta.prototype.transformPosition = function (index, priority) {\n priority = !!priority;\n var thisIter = op.iterator(this.ops);\n var offset = 0;\n while (thisIter.hasNext() && offset <= index) {\n var length = thisIter.peekLength();\n var nextType = thisIter.peekType();\n thisIter.next();\n if (nextType === 'delete') {\n index -= Math.min(length, index - offset);\n continue;\n } else if (nextType === 'insert' && (offset < index || !priority)) {\n index += length;\n }\n offset += length;\n }\n return index;\n};\n\n\nmodule.exports = Delta;\n","import Parchment from 'parchment';\n\n\nclass Break extends Parchment.Embed {\n static value() {\n return undefined;\n }\n\n insertInto(parent, ref) {\n if (parent.children.length === 0) {\n super.insertInto(parent, ref);\n } else {\n this.remove();\n }\n }\n\n length() {\n return 0;\n }\n\n value() {\n return '';\n }\n}\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\n\n\nexport default Break;\n","import Parchment from 'parchment';\n\nclass TextBlot extends Parchment.Text { }\n\nexport default TextBlot;\n","import Text from './text';\nimport Parchment from 'parchment';\n\n\nclass Inline extends Parchment.Inline {\n static compare(self, other) {\n let selfIndex = Inline.order.indexOf(self);\n let otherIndex = Inline.order.indexOf(other);\n if (selfIndex >= 0 || otherIndex >= 0) {\n return selfIndex - otherIndex;\n } else if (self === other) {\n return 0;\n } else if (self < other) {\n return -1;\n } else {\n return 1;\n }\n }\n\n formatAt(index, length, name, value) {\n if (Inline.compare(this.statics.blotName, name) < 0 && Parchment.query(name, Parchment.Scope.BLOT)) {\n let blot = this.isolate(index, length);\n if (value) {\n blot.wrap(name, value);\n }\n } else {\n super.formatAt(index, length, name, value);\n }\n }\n\n optimize(context) {\n super.optimize(context);\n if (this.parent instanceof Inline &&\n Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {\n let parent = this.parent.isolate(this.offset(), this.length());\n this.moveChildren(parent);\n parent.wrap(this);\n }\n }\n}\nInline.allowedChildren = [Inline, Parchment.Embed, Text];\n// Lower index means deeper in the DOM tree, since not found (-1) is for embeds\nInline.order = [\n 'cursor', 'inline', // Must be lower\n 'underline', 'strike', 'italic', 'bold', 'script',\n 'link', 'code' // Must be higher\n];\n\n\nexport default Inline;\n","import extend from 'extend';\nimport Delta from 'quill-delta';\nimport Parchment from 'parchment';\nimport Break from './break';\nimport Inline from './inline';\nimport TextBlot from './text';\n\n\nconst NEWLINE_LENGTH = 1;\n\n\nclass BlockEmbed extends Parchment.Embed {\n attach() {\n super.attach();\n this.attributes = new Parchment.Attributor.Store(this.domNode);\n }\n\n delta() {\n return new Delta().insert(this.value(), extend(this.formats(), this.attributes.values()));\n }\n\n format(name, value) {\n let attribute = Parchment.query(name, Parchment.Scope.BLOCK_ATTRIBUTE);\n if (attribute != null) {\n this.attributes.attribute(attribute, value);\n }\n }\n\n formatAt(index, length, name, value) {\n this.format(name, value);\n }\n\n insertAt(index, value, def) {\n if (typeof value === 'string' && value.endsWith('\\n')) {\n let block = Parchment.create(Block.blotName);\n this.parent.insertBefore(block, index === 0 ? this : this.next);\n block.insertAt(0, value.slice(0, -1));\n } else {\n super.insertAt(index, value, def);\n }\n }\n}\nBlockEmbed.scope = Parchment.Scope.BLOCK_BLOT;\n// It is important for cursor behavior BlockEmbeds use tags that are block level elements\n\n\nclass Block extends Parchment.Block {\n constructor(domNode) {\n super(domNode);\n this.cache = {};\n }\n\n delta() {\n if (this.cache.delta == null) {\n this.cache.delta = this.descendants(Parchment.Leaf).reduce((delta, leaf) => {\n if (leaf.length() === 0) {\n return delta;\n } else {\n return delta.insert(leaf.value(), bubbleFormats(leaf));\n }\n }, new Delta()).insert('\\n', bubbleFormats(this));\n }\n return this.cache.delta;\n }\n\n deleteAt(index, length) {\n super.deleteAt(index, length);\n this.cache = {};\n }\n\n formatAt(index, length, name, value) {\n if (length <= 0) return;\n if (Parchment.query(name, Parchment.Scope.BLOCK)) {\n if (index + length === this.length()) {\n this.format(name, value);\n }\n } else {\n super.formatAt(index, Math.min(length, this.length() - index - 1), name, value);\n }\n this.cache = {};\n }\n\n insertAt(index, value, def) {\n if (def != null) return super.insertAt(index, value, def);\n if (value.length === 0) return;\n let lines = value.split('\\n');\n let text = lines.shift();\n if (text.length > 0) {\n if (index < this.length() - 1 || this.children.tail == null) {\n super.insertAt(Math.min(index, this.length() - 1), text);\n } else {\n this.children.tail.insertAt(this.children.tail.length(), text);\n }\n this.cache = {};\n }\n let block = this;\n lines.reduce(function(index, line) {\n block = block.split(index, true);\n block.insertAt(0, line);\n return line.length;\n }, index + text.length);\n }\n\n insertBefore(blot, ref) {\n let head = this.children.head;\n super.insertBefore(blot, ref);\n if (head instanceof Break) {\n head.remove();\n }\n this.cache = {};\n }\n\n length() {\n if (this.cache.length == null) {\n this.cache.length = super.length() + NEWLINE_LENGTH;\n }\n return this.cache.length;\n }\n\n moveChildren(target, ref) {\n super.moveChildren(target, ref);\n this.cache = {};\n }\n\n optimize(context) {\n super.optimize(context);\n this.cache = {};\n }\n\n path(index) {\n return super.path(index, true);\n }\n\n removeChild(child) {\n super.removeChild(child);\n this.cache = {};\n }\n\n split(index, force = false) {\n if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {\n let clone = this.clone();\n if (index === 0) {\n this.parent.insertBefore(clone, this);\n return this;\n } else {\n this.parent.insertBefore(clone, this.next);\n return clone;\n }\n } else {\n let next = super.split(index, force);\n this.cache = {};\n return next;\n }\n }\n}\nBlock.blotName = 'block';\nBlock.tagName = 'P';\nBlock.defaultChild = 'break';\nBlock.allowedChildren = [Inline, Parchment.Embed, TextBlot];\n\n\nfunction bubbleFormats(blot, formats = {}) {\n if (blot == null) return formats;\n if (typeof blot.formats === 'function') {\n formats = extend(formats, blot.formats());\n }\n if (blot.parent == null || blot.parent.blotName == 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {\n return formats;\n }\n return bubbleFormats(blot.parent, formats);\n}\n\n\nexport { bubbleFormats, BlockEmbed, Block as default };\n","import Delta from 'quill-delta';\nimport Parchment from 'parchment';\nimport Block from '../blots/block';\nimport Inline from '../blots/inline';\nimport TextBlot from '../blots/text';\n\n\nclass Code extends Inline {}\nCode.blotName = 'code';\nCode.tagName = 'CODE';\n\n\nclass CodeBlock extends Block {\n static create(value) {\n let domNode = super.create(value);\n domNode.setAttribute('spellcheck', false);\n return domNode;\n }\n\n static formats() {\n return true;\n }\n\n delta() {\n let text = this.domNode.textContent;\n if (text.endsWith('\\n')) { // Should always be true\n text = text.slice(0, -1);\n }\n return text.split('\\n').reduce((delta, frag) => {\n return delta.insert(frag).insert('\\n', this.formats());\n }, new Delta());\n }\n\n format(name, value) {\n if (name === this.statics.blotName && value) return;\n let [text, ] = this.descendant(TextBlot, this.length() - 1);\n if (text != null) {\n text.deleteAt(text.length() - 1, 1);\n }\n super.format(name, value);\n }\n\n formatAt(index, length, name, value) {\n if (length === 0) return;\n if (Parchment.query(name, Parchment.Scope.BLOCK) == null ||\n (name === this.statics.blotName && value === this.statics.formats(this.domNode))) {\n return;\n }\n let nextNewline = this.newlineIndex(index);\n if (nextNewline < 0 || nextNewline >= index + length) return;\n let prevNewline = this.newlineIndex(index, true) + 1;\n let isolateLength = nextNewline - prevNewline + 1;\n let blot = this.isolate(prevNewline, isolateLength);\n let next = blot.next;\n blot.format(name, value);\n if (next instanceof CodeBlock) {\n next.formatAt(0, index - prevNewline + length - isolateLength, name, value);\n }\n }\n\n insertAt(index, value, def) {\n if (def != null) return;\n let [text, offset] = this.descendant(TextBlot, index);\n text.insertAt(offset, value);\n }\n\n length() {\n let length = this.domNode.textContent.length;\n if (!this.domNode.textContent.endsWith('\\n')) {\n return length + 1;\n }\n return length;\n }\n\n newlineIndex(searchIndex, reverse = false) {\n if (!reverse) {\n let offset = this.domNode.textContent.slice(searchIndex).indexOf('\\n');\n return offset > -1 ? searchIndex + offset : -1;\n } else {\n return this.domNode.textContent.slice(0, searchIndex).lastIndexOf('\\n');\n }\n }\n\n optimize(context) {\n if (!this.domNode.textContent.endsWith('\\n')) {\n this.appendChild(Parchment.create('text', '\\n'));\n }\n super.optimize(context);\n let next = this.next;\n if (next != null && next.prev === this &&\n next.statics.blotName === this.statics.blotName &&\n this.statics.formats(this.domNode) === next.statics.formats(next.domNode)) {\n next.optimize(context);\n next.moveChildren(this);\n next.remove();\n }\n }\n\n replace(target) {\n super.replace(target);\n [].slice.call(this.domNode.querySelectorAll('*')).forEach(function(node) {\n let blot = Parchment.find(node);\n if (blot == null) {\n node.parentNode.removeChild(node);\n } else if (blot instanceof Parchment.Embed) {\n blot.remove();\n } else {\n blot.unwrap();\n }\n });\n }\n}\nCodeBlock.blotName = 'code-block';\nCodeBlock.tagName = 'PRE';\nCodeBlock.TAB = ' ';\n\n\nexport { Code, CodeBlock as default };\n","import Parchment from 'parchment';\nimport TextBlot from './text';\n\n\nclass Cursor extends Parchment.Embed {\n static value() {\n return undefined;\n }\n\n constructor(domNode, selection) {\n super(domNode);\n this.selection = selection;\n this.textNode = document.createTextNode(Cursor.CONTENTS);\n this.domNode.appendChild(this.textNode);\n this._length = 0;\n }\n\n detach() {\n // super.detach() will also clear domNode.__blot\n if (this.parent != null) this.parent.removeChild(this);\n }\n\n format(name, value) {\n if (this._length !== 0) {\n return super.format(name, value);\n }\n let target = this, index = 0;\n while (target != null && target.statics.scope !== Parchment.Scope.BLOCK_BLOT) {\n index += target.offset(target.parent);\n target = target.parent;\n }\n if (target != null) {\n this._length = Cursor.CONTENTS.length;\n target.optimize();\n target.formatAt(index, Cursor.CONTENTS.length, name, value);\n this._length = 0;\n }\n }\n\n index(node, offset) {\n if (node === this.textNode) return 0;\n return super.index(node, offset);\n }\n\n length() {\n return this._length;\n }\n\n position() {\n return [this.textNode, this.textNode.data.length];\n }\n\n remove() {\n super.remove();\n this.parent = null;\n }\n\n restore() {\n if (this.selection.composing || this.parent == null) return;\n let textNode = this.textNode;\n let range = this.selection.getNativeRange();\n let restoreText, start, end;\n if (range != null && range.start.node === textNode && range.end.node === textNode) {\n [restoreText, start, end] = [textNode, range.start.offset, range.end.offset];\n }\n // Link format will insert text outside of anchor tag\n while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {\n this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);\n }\n if (this.textNode.data !== Cursor.CONTENTS) {\n let text = this.textNode.data.split(Cursor.CONTENTS).join('');\n if (this.next instanceof TextBlot) {\n restoreText = this.next.domNode;\n this.next.insertAt(0, text);\n this.textNode.data = Cursor.CONTENTS;\n } else {\n this.textNode.data = text;\n this.parent.insertBefore(Parchment.create(this.textNode), this);\n this.textNode = document.createTextNode(Cursor.CONTENTS);\n this.domNode.appendChild(this.textNode);\n }\n }\n this.remove();\n if (start != null) {\n [start, end] = [start, end].map(function(offset) {\n return Math.max(0, Math.min(restoreText.data.length, offset - 1));\n });\n return {\n startNode: restoreText,\n startOffset: start,\n endNode: restoreText,\n endOffset: end\n };\n }\n }\n\n update(mutations, context) {\n if (mutations.some((mutation) => {\n return mutation.type === 'characterData' && mutation.target === this.textNode;\n })) {\n let range = this.restore();\n if (range) context.range = range;\n }\n }\n\n value() {\n return '';\n }\n}\nCursor.blotName = 'cursor';\nCursor.className = 'ql-cursor';\nCursor.tagName = 'span';\nCursor.CONTENTS = \"\\uFEFF\"; // Zero width no break space\n\n\nexport default Cursor;\n","var clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n nativeMap = Map;\n} catch(_) {\n // maybe a reference error because no `Map`. Give it a dummy value that no\n // value will ever be an instanceof.\n nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n nativeSet = Set;\n} catch(_) {\n nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n nativePromise = Promise;\n} catch(_) {\n nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n * should be cloned as well. Non-enumerable properties on the prototype\n * chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n includeNonEnumerable = circular.includeNonEnumerable;\n circular = circular.circular;\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth === 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (_instanceof(parent, nativeMap)) {\n child = new nativeMap();\n } else if (_instanceof(parent, nativeSet)) {\n child = new nativeSet();\n } else if (_instanceof(parent, nativePromise)) {\n child = new nativePromise(function (resolve, reject) {\n parent.then(function(value) {\n resolve(_clone(value, depth - 1));\n }, function(err) {\n reject(_clone(err, depth - 1));\n });\n });\n } else if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n if (Buffer.allocUnsafe) {\n // Node.js >= 4.5.0\n child = Buffer.allocUnsafe(parent.length);\n } else {\n // Older Node.js versions\n child = new Buffer(parent.length);\n }\n parent.copy(child);\n return child;\n } else if (_instanceof(parent, Error)) {\n child = Object.create(parent);\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n if (_instanceof(parent, nativeMap)) {\n parent.forEach(function(value, key) {\n var keyChild = _clone(key, depth - 1);\n var valueChild = _clone(value, depth - 1);\n child.set(keyChild, valueChild);\n });\n }\n if (_instanceof(parent, nativeSet)) {\n parent.forEach(function(value) {\n var entryChild = _clone(value, depth - 1);\n child.add(entryChild);\n });\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(parent);\n for (var i = 0; i < symbols.length; i++) {\n // Don't need to worry about cloning a symbol because it is a primitive,\n // like a number or string.\n var symbol = symbols[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n continue;\n }\n child[symbol] = _clone(parent[symbol], depth - 1);\n if (!descriptor.enumerable) {\n Object.defineProperty(child, symbol, {\n enumerable: false\n });\n }\n }\n }\n\n if (includeNonEnumerable) {\n var allPropertyNames = Object.getOwnPropertyNames(parent);\n for (var i = 0; i < allPropertyNames.length; i++) {\n var propertyName = allPropertyNames[i];\n var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n if (descriptor && descriptor.enumerable) {\n continue;\n }\n child[propertyName] = _clone(parent[propertyName], depth - 1);\n Object.defineProperty(child, propertyName, {\n enumerable: false\n });\n }\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n module.exports = clone;\n}\n","import Delta from 'quill-delta';\nimport DeltaOp from 'quill-delta/lib/op';\nimport Parchment from 'parchment';\nimport CodeBlock from '../formats/code';\nimport CursorBlot from '../blots/cursor';\nimport Block, { bubbleFormats } from '../blots/block';\nimport Break from '../blots/break';\nimport clone from 'clone';\nimport equal from 'deep-equal';\nimport extend from 'extend';\n\n\nconst ASCII = /^[ -~]*$/;\n\n\nclass Editor {\n constructor(scroll) {\n this.scroll = scroll;\n this.delta = this.getDelta();\n }\n\n applyDelta(delta) {\n let consumeNextNewline = false;\n this.scroll.update();\n let scrollLength = this.scroll.length();\n this.scroll.batchStart();\n delta = normalizeDelta(delta);\n delta.reduce((index, op) => {\n let length = op.retain || op.delete || op.insert.length || 1;\n let attributes = op.attributes || {};\n if (op.insert != null) {\n if (typeof op.insert === 'string') {\n let text = op.insert;\n if (text.endsWith('\\n') && consumeNextNewline) {\n consumeNextNewline = false;\n text = text.slice(0, -1);\n }\n if (index >= scrollLength && !text.endsWith('\\n')) {\n consumeNextNewline = true;\n }\n this.scroll.insertAt(index, text);\n let [line, offset] = this.scroll.line(index);\n let formats = extend({}, bubbleFormats(line));\n if (line instanceof Block) {\n let [leaf, ] = line.descendant(Parchment.Leaf, offset);\n formats = extend(formats, bubbleFormats(leaf));\n }\n attributes = DeltaOp.attributes.diff(formats, attributes) || {};\n } else if (typeof op.insert === 'object') {\n let key = Object.keys(op.insert)[0]; // There should only be one key\n if (key == null) return index;\n this.scroll.insertAt(index, key, op.insert[key]);\n }\n scrollLength += length;\n }\n Object.keys(attributes).forEach((name) => {\n this.scroll.formatAt(index, length, name, attributes[name]);\n });\n return index + length;\n }, 0);\n delta.reduce((index, op) => {\n if (typeof op.delete === 'number') {\n this.scroll.deleteAt(index, op.delete);\n return index;\n }\n return index + (op.retain || op.insert.length || 1);\n }, 0);\n this.scroll.batchEnd();\n return this.update(delta);\n }\n\n deleteText(index, length) {\n this.scroll.deleteAt(index, length);\n return this.update(new Delta().retain(index).delete(length));\n }\n\n formatLine(index, length, formats = {}) {\n this.scroll.update();\n Object.keys(formats).forEach((format) => {\n if (this.scroll.whitelist != null && !this.scroll.whitelist[format]) return;\n let lines = this.scroll.lines(index, Math.max(length, 1));\n let lengthRemaining = length;\n lines.forEach((line) => {\n let lineLength = line.length();\n if (!(line instanceof CodeBlock)) {\n line.format(format, formats[format]);\n } else {\n let codeIndex = index - line.offset(this.scroll);\n let codeLength = line.newlineIndex(codeIndex + lengthRemaining) - codeIndex + 1;\n line.formatAt(codeIndex, codeLength, format, formats[format]);\n }\n lengthRemaining -= lineLength;\n });\n });\n this.scroll.optimize();\n return this.update(new Delta().retain(index).retain(length, clone(formats)));\n }\n\n formatText(index, length, formats = {}) {\n Object.keys(formats).forEach((format) => {\n this.scroll.formatAt(index, length, format, formats[format]);\n });\n return this.update(new Delta().retain(index).retain(length, clone(formats)));\n }\n\n getContents(index, length) {\n return this.delta.slice(index, index + length);\n }\n\n getDelta() {\n return this.scroll.lines().reduce((delta, line) => {\n return delta.concat(line.delta());\n }, new Delta());\n }\n\n getFormat(index, length = 0) {\n let lines = [], leaves = [];\n if (length === 0) {\n this.scroll.path(index).forEach(function(path) {\n let [blot, ] = path;\n if (blot instanceof Block) {\n lines.push(blot);\n } else if (blot instanceof Parchment.Leaf) {\n leaves.push(blot);\n }\n });\n } else {\n lines = this.scroll.lines(index, length);\n leaves = this.scroll.descendants(Parchment.Leaf, index, length);\n }\n let formatsArr = [lines, leaves].map(function(blots) {\n if (blots.length === 0) return {};\n let formats = bubbleFormats(blots.shift());\n while (Object.keys(formats).length > 0) {\n let blot = blots.shift();\n if (blot == null) return formats;\n formats = combineFormats(bubbleFormats(blot), formats);\n }\n return formats;\n });\n return extend.apply(extend, formatsArr);\n }\n\n getText(index, length) {\n return this.getContents(index, length).filter(function(op) {\n return typeof op.insert === 'string';\n }).map(function(op) {\n return op.insert;\n }).join('');\n }\n\n insertEmbed(index, embed, value) {\n this.scroll.insertAt(index, embed, value);\n return this.update(new Delta().retain(index).insert({ [embed]: value }));\n }\n\n insertText(index, text, formats = {}) {\n text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n this.scroll.insertAt(index, text);\n Object.keys(formats).forEach((format) => {\n this.scroll.formatAt(index, text.length, format, formats[format]);\n });\n return this.update(new Delta().retain(index).insert(text, clone(formats)));\n }\n\n isBlank() {\n if (this.scroll.children.length == 0) return true;\n if (this.scroll.children.length > 1) return false;\n let block = this.scroll.children.head;\n if (block.statics.blotName !== Block.blotName) return false;\n if (block.children.length > 1) return false;\n return block.children.head instanceof Break;\n }\n\n removeFormat(index, length) {\n let text = this.getText(index, length);\n let [line, offset] = this.scroll.line(index + length);\n let suffixLength = 0, suffix = new Delta();\n if (line != null) {\n if (!(line instanceof CodeBlock)) {\n suffixLength = line.length() - offset;\n } else {\n suffixLength = line.newlineIndex(offset) - offset + 1;\n }\n suffix = line.delta().slice(offset, offset + suffixLength - 1).insert('\\n');\n }\n let contents = this.getContents(index, length + suffixLength);\n let diff = contents.diff(new Delta().insert(text).concat(suffix));\n let delta = new Delta().retain(index).concat(diff);\n return this.applyDelta(delta);\n }\n\n update(change, mutations = [], cursorIndex = undefined) {\n let oldDelta = this.delta;\n if (mutations.length === 1 &&\n mutations[0].type === 'characterData' &&\n mutations[0].target.data.match(ASCII) &&\n Parchment.find(mutations[0].target)) {\n // Optimization for character changes\n let textBlot = Parchment.find(mutations[0].target);\n let formats = bubbleFormats(textBlot);\n let index = textBlot.offset(this.scroll);\n let oldValue = mutations[0].oldValue.replace(CursorBlot.CONTENTS, '');\n let oldText = new Delta().insert(oldValue);\n let newText = new Delta().insert(textBlot.value());\n let diffDelta = new Delta().retain(index).concat(oldText.diff(newText, cursorIndex));\n change = diffDelta.reduce(function(delta, op) {\n if (op.insert) {\n return delta.insert(op.insert, formats);\n } else {\n return delta.push(op);\n }\n }, new Delta());\n this.delta = oldDelta.compose(change);\n } else {\n this.delta = this.getDelta();\n if (!change || !equal(oldDelta.compose(change), this.delta)) {\n change = oldDelta.diff(this.delta, cursorIndex);\n }\n }\n return change;\n }\n}\n\n\nfunction combineFormats(formats, combined) {\n return Object.keys(combined).reduce(function(merged, name) {\n if (formats[name] == null) return merged;\n if (combined[name] === formats[name]) {\n merged[name] = combined[name];\n } else if (Array.isArray(combined[name])) {\n if (combined[name].indexOf(formats[name]) < 0) {\n merged[name] = combined[name].concat([formats[name]]);\n }\n } else {\n merged[name] = [combined[name], formats[name]];\n }\n return merged;\n }, {});\n}\n\nfunction normalizeDelta(delta) {\n return delta.reduce(function(delta, op) {\n if (op.insert === 1) {\n let attributes = clone(op.attributes);\n delete attributes['image'];\n return delta.insert({ image: op.attributes.image }, attributes);\n }\n if (op.attributes != null && (op.attributes.list === true || op.attributes.bullet === true)) {\n op = clone(op);\n if (op.attributes.list) {\n op.attributes.list = 'ordered';\n } else {\n op.attributes.list = 'bullet';\n delete op.attributes.bullet;\n }\n }\n if (typeof op.insert === 'string') {\n let text = op.insert.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n return delta.insert(text, op.attributes);\n }\n return delta.push(op);\n }, new Delta());\n}\n\n\nexport default Editor;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @api private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {Mixed} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @api private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @api public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @api public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Boolean} exists Only check if there are listeners.\n * @returns {Array|Boolean}\n * @api public\n */\nEventEmitter.prototype.listeners = function listeners(event, exists) {\n var evt = prefix ? prefix + event : event\n , available = this._events[evt];\n\n if (exists) return !!available;\n if (!available) return [];\n if (available.fn) return [available.fn];\n\n for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) {\n ee[i] = available[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @api public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n var listener = new EE(fn, context || this)\n , evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n else if (!this._events[evt].fn) this._events[evt].push(listener);\n else this._events[evt] = [this._events[evt], listener];\n\n return this;\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n var listener = new EE(fn, context || this, true)\n , evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n else if (!this._events[evt].fn) this._events[evt].push(listener);\n else this._events[evt] = [this._events[evt], listener];\n\n return this;\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {Mixed} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n if (--this._eventsCount === 0) this._events = new Events();\n else delete this._events[evt];\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn\n && (!once || listeners.once)\n && (!context || listeners.context === context)\n ) {\n if (--this._eventsCount === 0) this._events = new Events();\n else delete this._events[evt];\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn\n || (once && !listeners[i].once)\n || (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else if (--this._eventsCount === 0) this._events = new Events();\n else delete this._events[evt];\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {String|Symbol} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) {\n if (--this._eventsCount === 0) this._events = new Events();\n else delete this._events[evt];\n }\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// This function doesn't apply anymore.\n//\nEventEmitter.prototype.setMaxListeners = function setMaxListeners() {\n return this;\n};\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","let levels = ['error', 'warn', 'log', 'info'];\nlet level = 'warn';\n\nfunction debug(method, ...args) {\n if (levels.indexOf(method) <= levels.indexOf(level)) {\n console[method](...args); // eslint-disable-line no-console\n }\n}\n\nfunction namespace(ns) {\n return levels.reduce(function(logger, method) {\n logger[method] = debug.bind(console, method, ns);\n return logger;\n }, {});\n}\n\ndebug.level = namespace.level = function(newLevel) {\n level = newLevel;\n};\n\n\nexport default namespace;\n","import EventEmitter from 'eventemitter3';\nimport logger from './logger';\n\nlet debug = logger('quill:events');\n\nconst EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];\n\nEVENTS.forEach(function(eventName) {\n document.addEventListener(eventName, (...args) => {\n [].slice.call(document.querySelectorAll('.ql-container')).forEach((node) => {\n // TODO use WeakMap\n if (node.__quill && node.__quill.emitter) {\n node.__quill.emitter.handleDOM(...args);\n }\n });\n });\n});\n\n\nclass Emitter extends EventEmitter {\n constructor() {\n super();\n this.listeners = {};\n this.on('error', debug.error);\n }\n\n emit() {\n debug.log.apply(debug, arguments);\n super.emit.apply(this, arguments);\n }\n\n handleDOM(event, ...args) {\n (this.listeners[event.type] || []).forEach(function({ node, handler }) {\n if (event.target === node || node.contains(event.target)) {\n handler(event, ...args);\n }\n });\n }\n\n listenDOM(eventName, node, handler) {\n if (!this.listeners[eventName]) {\n this.listeners[eventName] = [];\n }\n this.listeners[eventName].push({ node, handler })\n }\n}\n\nEmitter.events = {\n EDITOR_CHANGE : 'editor-change',\n SCROLL_BEFORE_UPDATE : 'scroll-before-update',\n SCROLL_OPTIMIZE : 'scroll-optimize',\n SCROLL_UPDATE : 'scroll-update',\n SELECTION_CHANGE : 'selection-change',\n TEXT_CHANGE : 'text-change'\n};\nEmitter.sources = {\n API : 'api',\n SILENT : 'silent',\n USER : 'user'\n};\n\n\nexport default Emitter;\n","class Module {\n constructor(quill, options = {}) {\n this.quill = quill;\n this.options = options;\n }\n}\nModule.DEFAULTS = {};\n\n\nexport default Module;\n","import Parchment from 'parchment';\nimport clone from 'clone';\nimport equal from 'deep-equal';\nimport Emitter from './emitter';\nimport logger from './logger';\n\nlet debug = logger('quill:selection');\n\n\nclass Range {\n constructor(index, length = 0) {\n this.index = index;\n this.length = length;\n }\n}\n\n\nclass Selection {\n constructor(scroll, emitter) {\n this.emitter = emitter;\n this.scroll = scroll;\n this.composing = false;\n this.mouseDown = false;\n this.root = this.scroll.domNode;\n this.cursor = Parchment.create('cursor', this);\n // savedRange is last non-null range\n this.lastRange = this.savedRange = new Range(0, 0);\n this.handleComposition();\n this.handleDragging();\n this.emitter.listenDOM('selectionchange', document, () => {\n if (!this.mouseDown) {\n setTimeout(this.update.bind(this, Emitter.sources.USER), 1);\n }\n });\n this.emitter.on(Emitter.events.EDITOR_CHANGE, (type, delta) => {\n if (type === Emitter.events.TEXT_CHANGE && delta.length() > 0) {\n this.update(Emitter.sources.SILENT);\n }\n });\n this.emitter.on(Emitter.events.SCROLL_BEFORE_UPDATE, () => {\n if (!this.hasFocus()) return;\n let native = this.getNativeRange();\n if (native == null) return;\n if (native.start.node === this.cursor.textNode) return; // cursor.restore() will handle\n // TODO unclear if this has negative side effects\n this.emitter.once(Emitter.events.SCROLL_UPDATE, () => {\n try {\n this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);\n } catch (ignored) {}\n });\n });\n this.emitter.on(Emitter.events.SCROLL_OPTIMIZE, (mutations, context) => {\n if (context.range) {\n const { startNode, startOffset, endNode, endOffset } = context.range;\n this.setNativeRange(startNode, startOffset, endNode, endOffset);\n }\n });\n this.update(Emitter.sources.SILENT);\n }\n\n handleComposition() {\n this.root.addEventListener('compositionstart', () => {\n this.composing = true;\n });\n this.root.addEventListener('compositionend', () => {\n this.composing = false;\n if (this.cursor.parent) {\n const range = this.cursor.restore();\n if (!range) return;\n setTimeout(() => {\n this.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n }, 1);\n }\n });\n }\n\n handleDragging() {\n this.emitter.listenDOM('mousedown', document.body, () => {\n this.mouseDown = true;\n });\n this.emitter.listenDOM('mouseup', document.body, () => {\n this.mouseDown = false;\n this.update(Emitter.sources.USER);\n });\n }\n\n focus() {\n if (this.hasFocus()) return;\n this.root.focus();\n this.setRange(this.savedRange);\n }\n\n format(format, value) {\n if (this.scroll.whitelist != null && !this.scroll.whitelist[format]) return;\n this.scroll.update();\n let nativeRange = this.getNativeRange();\n if (nativeRange == null || !nativeRange.native.collapsed || Parchment.query(format, Parchment.Scope.BLOCK)) return;\n if (nativeRange.start.node !== this.cursor.textNode) {\n let blot = Parchment.find(nativeRange.start.node, false);\n if (blot == null) return;\n // TODO Give blot ability to not split\n if (blot instanceof Parchment.Leaf) {\n let after = blot.split(nativeRange.start.offset);\n blot.parent.insertBefore(this.cursor, after);\n } else {\n blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen\n }\n this.cursor.attach();\n }\n this.cursor.format(format, value);\n this.scroll.optimize();\n this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n this.update();\n }\n\n getBounds(index, length = 0) {\n let scrollLength = this.scroll.length();\n index = Math.min(index, scrollLength - 1);\n length = Math.min(index + length, scrollLength - 1) - index;\n let node, [leaf, offset] = this.scroll.leaf(index);\n if (leaf == null) return null;\n [node, offset] = leaf.position(offset, true);\n let range = document.createRange();\n if (length > 0) {\n range.setStart(node, offset);\n [leaf, offset] = this.scroll.leaf(index + length);\n if (leaf == null) return null;\n [node, offset] = leaf.position(offset, true);\n range.setEnd(node, offset);\n return range.getBoundingClientRect();\n } else {\n let side = 'left';\n let rect;\n if (node instanceof Text) {\n if (offset < node.data.length) {\n range.setStart(node, offset);\n range.setEnd(node, offset + 1);\n } else {\n range.setStart(node, offset - 1);\n range.setEnd(node, offset);\n side = 'right';\n }\n rect = range.getBoundingClientRect();\n } else {\n rect = leaf.domNode.getBoundingClientRect();\n if (offset > 0) side = 'right';\n }\n return {\n bottom: rect.top + rect.height,\n height: rect.height,\n left: rect[side],\n right: rect[side],\n top: rect.top,\n width: 0\n };\n }\n }\n\n getNativeRange() {\n let selection = document.getSelection();\n if (selection == null || selection.rangeCount <= 0) return null;\n let nativeRange = selection.getRangeAt(0);\n if (nativeRange == null) return null;\n let range = this.normalizeNative(nativeRange);\n debug.info('getNativeRange', range);\n return range;\n }\n\n getRange() {\n let normalized = this.getNativeRange();\n if (normalized == null) return [null, null];\n let range = this.normalizedToRange(normalized);\n return [range, normalized];\n }\n\n hasFocus() {\n return document.activeElement === this.root;\n }\n\n normalizedToRange(range) {\n let positions = [[range.start.node, range.start.offset]];\n if (!range.native.collapsed) {\n positions.push([range.end.node, range.end.offset]);\n }\n let indexes = positions.map((position) => {\n let [node, offset] = position;\n let blot = Parchment.find(node, true);\n let index = blot.offset(this.scroll);\n if (offset === 0) {\n return index;\n } else if (blot instanceof Parchment.Container) {\n return index + blot.length();\n } else {\n return index + blot.index(node, offset);\n }\n });\n let end = Math.min(Math.max(...indexes), this.scroll.length() - 1);\n let start = Math.min(end, ...indexes);\n return new Range(start, end-start);\n }\n\n normalizeNative(nativeRange) {\n if (!contains(this.root, nativeRange.startContainer) ||\n (!nativeRange.collapsed && !contains(this.root, nativeRange.endContainer))) {\n return null;\n }\n let range = {\n start: { node: nativeRange.startContainer, offset: nativeRange.startOffset },\n end: { node: nativeRange.endContainer, offset: nativeRange.endOffset },\n native: nativeRange\n };\n [range.start, range.end].forEach(function(position) {\n let node = position.node, offset = position.offset;\n while (!(node instanceof Text) && node.childNodes.length > 0) {\n if (node.childNodes.length > offset) {\n node = node.childNodes[offset];\n offset = 0;\n } else if (node.childNodes.length === offset) {\n node = node.lastChild;\n offset = node instanceof Text ? node.data.length : node.childNodes.length + 1;\n } else {\n break;\n }\n }\n position.node = node, position.offset = offset;\n });\n return range;\n }\n\n rangeToNative(range) {\n let indexes = range.collapsed ? [range.index] : [range.index, range.index + range.length];\n let args = [];\n let scrollLength = this.scroll.length();\n indexes.forEach((index, i) => {\n index = Math.min(scrollLength - 1, index);\n let node, [leaf, offset] = this.scroll.leaf(index);\n [node, offset] = leaf.position(offset, i !== 0);\n args.push(node, offset);\n });\n if (args.length < 2) {\n args = args.concat(args);\n }\n return args;\n }\n\n scrollIntoView(scrollingContainer) {\n let range = this.lastRange;\n if (range == null) return;\n let bounds = this.getBounds(range.index, range.length);\n if (bounds == null) return;\n let limit = this.scroll.length()-1;\n let [first, ] = this.scroll.line(Math.min(range.index, limit));\n let last = first;\n if (range.length > 0) {\n [last, ] = this.scroll.line(Math.min(range.index + range.length, limit));\n }\n if (first == null || last == null) return;\n let scrollBounds = scrollingContainer.getBoundingClientRect();\n if (bounds.top < scrollBounds.top) {\n scrollingContainer.scrollTop -= (scrollBounds.top - bounds.top);\n } else if (bounds.bottom > scrollBounds.bottom) {\n scrollingContainer.scrollTop += (bounds.bottom - scrollBounds.bottom);\n }\n }\n\n setNativeRange(startNode, startOffset, endNode = startNode, endOffset = startOffset, force = false) {\n debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);\n if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null || endNode.parentNode == null)) {\n return;\n }\n let selection = document.getSelection();\n if (selection == null) return;\n if (startNode != null) {\n if (!this.hasFocus()) this.root.focus();\n let native = (this.getNativeRange() || {}).native;\n if (native == null || force ||\n startNode !== native.startContainer ||\n startOffset !== native.startOffset ||\n endNode !== native.endContainer ||\n endOffset !== native.endOffset) {\n\n if (startNode.tagName == \"BR\") {\n startOffset = [].indexOf.call(startNode.parentNode.childNodes, startNode);\n startNode = startNode.parentNode;\n }\n if (endNode.tagName == \"BR\") {\n endOffset = [].indexOf.call(endNode.parentNode.childNodes, endNode);\n endNode = endNode.parentNode;\n }\n let range = document.createRange();\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n } else {\n selection.removeAllRanges();\n this.root.blur();\n document.body.focus(); // root.blur() not enough on IE11+Travis+SauceLabs (but not local VMs)\n }\n }\n\n setRange(range, force = false, source = Emitter.sources.API) {\n if (typeof force === 'string') {\n source = force;\n force = false;\n }\n debug.info('setRange', range);\n if (range != null) {\n let args = this.rangeToNative(range);\n this.setNativeRange(...args, force);\n } else {\n this.setNativeRange(null);\n }\n this.update(source);\n }\n\n update(source = Emitter.sources.USER) {\n let oldRange = this.lastRange;\n let [lastRange, nativeRange] = this.getRange();\n this.lastRange = lastRange;\n if (this.lastRange != null) {\n this.savedRange = this.lastRange;\n }\n if (!equal(oldRange, this.lastRange)) {\n if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {\n this.cursor.restore();\n }\n let args = [Emitter.events.SELECTION_CHANGE, clone(this.lastRange), clone(oldRange), source];\n this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n if (source !== Emitter.sources.SILENT) {\n this.emitter.emit(...args);\n }\n }\n }\n}\n\n\nfunction contains(parent, descendant) {\n try {\n // Firefox inserts inaccessible nodes around video elements\n descendant.parentNode;\n } catch (e) {\n return false;\n }\n // IE11 has bug with Text nodes\n // https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect\n if (descendant instanceof Text) {\n descendant = descendant.parentNode;\n }\n return parent.contains(descendant);\n}\n\n\nexport { Range, Selection as default };\n","class Theme {\n constructor(quill, options) {\n this.quill = quill;\n this.options = options;\n this.modules = {};\n }\n\n init() {\n Object.keys(this.options.modules).forEach((name) => {\n if (this.modules[name] == null) {\n this.addModule(name);\n }\n });\n }\n\n addModule(name) {\n let moduleClass = this.quill.constructor.import(`modules/${name}`);\n this.modules[name] = new moduleClass(this.quill, this.options.modules[name] || {});\n return this.modules[name];\n }\n}\nTheme.DEFAULTS = {\n modules: {}\n};\nTheme.themes = {\n 'default': Theme\n};\n\n\nexport default Theme;\n","import './polyfill';\nimport Delta from 'quill-delta';\nimport Editor from './editor';\nimport Emitter from './emitter';\nimport Module from './module';\nimport Parchment from 'parchment';\nimport Selection, { Range } from './selection';\nimport extend from 'extend';\nimport logger from './logger';\nimport Theme from './theme';\n\nlet debug = logger('quill');\n\n\nclass Quill {\n static debug(limit) {\n if (limit === true) {\n limit = 'log';\n }\n logger.level(limit);\n }\n\n static find(node) {\n return node.__quill || Parchment.find(node);\n }\n\n static import(name) {\n if (this.imports[name] == null) {\n debug.error(`Cannot import ${name}. Are you sure it was registered?`);\n }\n return this.imports[name];\n }\n\n static register(path, target, overwrite = false) {\n if (typeof path !== 'string') {\n let name = path.attrName || path.blotName;\n if (typeof name === 'string') {\n // register(Blot | Attributor, overwrite)\n this.register('formats/' + name, path, target);\n } else {\n Object.keys(path).forEach((key) => {\n this.register(key, path[key], target);\n });\n }\n } else {\n if (this.imports[path] != null && !overwrite) {\n debug.warn(`Overwriting ${path} with`, target);\n }\n this.imports[path] = target;\n if ((path.startsWith('blots/') || path.startsWith('formats/')) &&\n target.blotName !== 'abstract') {\n Parchment.register(target);\n } else if (path.startsWith('modules') && typeof target.register === 'function') {\n target.register();\n }\n }\n }\n\n constructor(container, options = {}) {\n this.options = expandConfig(container, options);\n this.container = this.options.container;\n if (this.container == null) {\n return debug.error('Invalid Quill container', container);\n }\n if (this.options.debug) {\n Quill.debug(this.options.debug);\n }\n let html = this.container.innerHTML.trim();\n this.container.classList.add('ql-container');\n this.container.innerHTML = '';\n this.container.__quill = this;\n this.root = this.addContainer('ql-editor');\n this.root.classList.add('ql-blank');\n this.root.setAttribute('data-gramm', false);\n this.scrollingContainer = this.options.scrollingContainer || this.root;\n this.emitter = new Emitter();\n this.scroll = Parchment.create(this.root, {\n emitter: this.emitter,\n whitelist: this.options.formats\n });\n this.editor = new Editor(this.scroll);\n this.selection = new Selection(this.scroll, this.emitter);\n this.theme = new this.options.theme(this, this.options);\n this.keyboard = this.theme.addModule('keyboard');\n this.clipboard = this.theme.addModule('clipboard');\n this.history = this.theme.addModule('history');\n this.theme.init();\n this.emitter.on(Emitter.events.EDITOR_CHANGE, (type) => {\n if (type === Emitter.events.TEXT_CHANGE) {\n this.root.classList.toggle('ql-blank', this.editor.isBlank());\n }\n });\n this.emitter.on(Emitter.events.SCROLL_UPDATE, (source, mutations) => {\n let range = this.selection.lastRange;\n let index = range && range.length === 0 ? range.index : undefined;\n modify.call(this, () => {\n return this.editor.update(null, mutations, index);\n }, source);\n });\n let contents = this.clipboard.convert(`<div class='ql-editor' style=\"white-space: normal;\">${html}<p><br></p></div>`);\n this.setContents(contents);\n this.history.clear();\n if (this.options.placeholder) {\n this.root.setAttribute('data-placeholder', this.options.placeholder);\n }\n if (this.options.readOnly) {\n this.disable();\n }\n }\n\n addContainer(container, refNode = null) {\n if (typeof container === 'string') {\n let className = container;\n container = document.createElement('div');\n container.classList.add(className);\n }\n this.container.insertBefore(container, refNode);\n return container;\n }\n\n blur() {\n this.selection.setRange(null);\n }\n\n deleteText(index, length, source) {\n [index, length, , source] = overload(index, length, source);\n return modify.call(this, () => {\n return this.editor.deleteText(index, length);\n }, source, index, -1*length);\n }\n\n disable() {\n this.enable(false);\n }\n\n enable(enabled = true) {\n this.scroll.enable(enabled);\n this.container.classList.toggle('ql-disabled', !enabled);\n }\n\n focus() {\n let scrollTop = this.scrollingContainer.scrollTop;\n this.selection.focus();\n this.scrollingContainer.scrollTop = scrollTop;\n this.scrollIntoView();\n }\n\n format(name, value, source = Emitter.sources.API) {\n return modify.call(this, () => {\n let range = this.getSelection(true);\n let change = new Delta();\n if (range == null) {\n return change;\n } else if (Parchment.query(name, Parchment.Scope.BLOCK)) {\n change = this.editor.formatLine(range.index, range.length, { [name]: value });\n } else if (range.length === 0) {\n this.selection.format(name, value);\n return change;\n } else {\n change = this.editor.formatText(range.index, range.length, { [name]: value });\n }\n this.setSelection(range, Emitter.sources.SILENT);\n return change;\n }, source);\n }\n\n formatLine(index, length, name, value, source) {\n let formats;\n [index, length, formats, source] = overload(index, length, name, value, source);\n return modify.call(this, () => {\n return this.editor.formatLine(index, length, formats);\n }, source, index, 0);\n }\n\n formatText(index, length, name, value, source) {\n let formats;\n [index, length, formats, source] = overload(index, length, name, value, source);\n return modify.call(this, () => {\n return this.editor.formatText(index, length, formats);\n }, source, index, 0);\n }\n\n getBounds(index, length = 0) {\n let bounds;\n if (typeof index === 'number') {\n bounds = this.selection.getBounds(index, length);\n } else {\n bounds = this.selection.getBounds(index.index, index.length);\n }\n let containerBounds = this.container.getBoundingClientRect();\n return {\n bottom: bounds.bottom - containerBounds.top,\n height: bounds.height,\n left: bounds.left - containerBounds.left,\n right: bounds.right - containerBounds.left,\n top: bounds.top - containerBounds.top,\n width: bounds.width\n };\n }\n\n getContents(index = 0, length = this.getLength() - index) {\n [index, length] = overload(index, length);\n return this.editor.getContents(index, length);\n }\n\n getFormat(index = this.getSelection(true), length = 0) {\n if (typeof index === 'number') {\n return this.editor.getFormat(index, length);\n } else {\n return this.editor.getFormat(index.index, index.length);\n }\n }\n\n getIndex(blot) {\n return blot.offset(this.scroll);\n }\n\n getLength() {\n return this.scroll.length();\n }\n\n getLeaf(index) {\n return this.scroll.leaf(index);\n }\n\n getLine(index) {\n return this.scroll.line(index);\n }\n\n getLines(index = 0, length = Number.MAX_VALUE) {\n if (typeof index !== 'number') {\n return this.scroll.lines(index.index, index.length);\n } else {\n return this.scroll.lines(index, length);\n }\n }\n\n getModule(name) {\n return this.theme.modules[name];\n }\n\n getSelection(focus = false) {\n if (focus) this.focus();\n this.update(); // Make sure we access getRange with editor in consistent state\n return this.selection.getRange()[0];\n }\n\n getText(index = 0, length = this.getLength() - index) {\n [index, length] = overload(index, length);\n return this.editor.getText(index, length);\n }\n\n hasFocus() {\n return this.selection.hasFocus();\n }\n\n insertEmbed(index, embed, value, source = Quill.sources.API) {\n return modify.call(this, () => {\n return this.editor.insertEmbed(index, embed, value);\n }, source, index);\n }\n\n insertText(index, text, name, value, source) {\n let formats;\n [index, , formats, source] = overload(index, 0, name, value, source);\n return modify.call(this, () => {\n return this.editor.insertText(index, text, formats);\n }, source, index, text.length);\n }\n\n isEnabled() {\n return !this.container.classList.contains('ql-disabled');\n }\n\n off() {\n return this.emitter.off.apply(this.emitter, arguments);\n }\n\n on() {\n return this.emitter.on.apply(this.emitter, arguments);\n }\n\n once() {\n return this.emitter.once.apply(this.emitter, arguments);\n }\n\n pasteHTML(index, html, source) {\n this.clipboard.dangerouslyPasteHTML(index, html, source);\n }\n\n removeFormat(index, length, source) {\n [index, length, , source] = overload(index, length, source);\n return modify.call(this, () => {\n return this.editor.removeFormat(index, length);\n }, source, index);\n }\n\n scrollIntoView() {\n this.selection.scrollIntoView(this.scrollingContainer);\n }\n\n setContents(delta, source = Emitter.sources.API) {\n return modify.call(this, () => {\n delta = new Delta(delta);\n let length = this.getLength();\n let deleted = this.editor.deleteText(0, length);\n let applied = this.editor.applyDelta(delta);\n let lastOp = applied.ops[applied.ops.length - 1];\n if (lastOp != null && typeof(lastOp.insert) === 'string' && lastOp.insert[lastOp.insert.length-1] === '\\n') {\n this.editor.deleteText(this.getLength() - 1, 1);\n applied.delete(1);\n }\n let ret = deleted.compose(applied);\n return ret;\n }, source);\n }\n\n setSelection(index, length, source) {\n if (index == null) {\n this.selection.setRange(null, length || Quill.sources.API);\n } else {\n [index, length, , source] = overload(index, length, source);\n this.selection.setRange(new Range(index, length), source);\n if (source !== Emitter.sources.SILENT) {\n this.selection.scrollIntoView(this.scrollingContainer);\n }\n }\n }\n\n setText(text, source = Emitter.sources.API) {\n let delta = new Delta().insert(text);\n return this.setContents(delta, source);\n }\n\n update(source = Emitter.sources.USER) {\n let change = this.scroll.update(source); // Will update selection before selection.update() does if text changes\n this.selection.update(source);\n return change;\n }\n\n updateContents(delta, source = Emitter.sources.API) {\n return modify.call(this, () => {\n delta = new Delta(delta);\n return this.editor.applyDelta(delta, source);\n }, source, true);\n }\n}\nQuill.DEFAULTS = {\n bounds: null,\n formats: null,\n modules: {},\n placeholder: '',\n readOnly: false,\n scrollingContainer: null,\n strict: true,\n theme: 'default'\n};\nQuill.events = Emitter.events;\nQuill.sources = Emitter.sources;\n// eslint-disable-next-line no-undef\nQuill.version = typeof(QUILL_VERSION) === 'undefined' ? 'dev' : QUILL_VERSION;\n\nQuill.imports = {\n 'delta' : Delta,\n 'parchment' : Parchment,\n 'core/module' : Module,\n 'core/theme' : Theme\n};\n\n\nfunction expandConfig(container, userConfig) {\n userConfig = extend(true, {\n container: container,\n modules: {\n clipboard: true,\n keyboard: true,\n history: true\n }\n }, userConfig);\n if (!userConfig.theme || userConfig.theme === Quill.DEFAULTS.theme) {\n userConfig.theme = Theme;\n } else {\n userConfig.theme = Quill.import(`themes/${userConfig.theme}`);\n if (userConfig.theme == null) {\n throw new Error(`Invalid theme ${userConfig.theme}. Did you register it?`);\n }\n }\n let themeConfig = extend(true, {}, userConfig.theme.DEFAULTS);\n [themeConfig, userConfig].forEach(function(config) {\n config.modules = config.modules || {};\n Object.keys(config.modules).forEach(function(module) {\n if (config.modules[module] === true) {\n config.modules[module] = {};\n }\n });\n });\n let moduleNames = Object.keys(themeConfig.modules).concat(Object.keys(userConfig.modules));\n let moduleConfig = moduleNames.reduce(function(config, name) {\n let moduleClass = Quill.import(`modules/${name}`);\n if (moduleClass == null) {\n debug.error(`Cannot load ${name} module. Are you sure you registered it?`);\n } else {\n config[name] = moduleClass.DEFAULTS || {};\n }\n return config;\n }, {});\n // Special case toolbar shorthand\n if (userConfig.modules != null && userConfig.modules.toolbar &&\n userConfig.modules.toolbar.constructor !== Object) {\n userConfig.modules.toolbar = {\n container: userConfig.modules.toolbar\n };\n }\n userConfig = extend(true, {}, Quill.DEFAULTS, { modules: moduleConfig }, themeConfig, userConfig);\n ['bounds', 'container', 'scrollingContainer'].forEach(function(key) {\n if (typeof userConfig[key] === 'string') {\n userConfig[key] = document.querySelector(userConfig[key]);\n }\n });\n userConfig.modules = Object.keys(userConfig.modules).reduce(function(config, name) {\n if (userConfig.modules[name]) {\n config[name] = userConfig.modules[name];\n }\n return config;\n }, {});\n return userConfig;\n}\n\n// Handle selection preservation and TEXT_CHANGE emission\n// common to modification APIs\nfunction modify(modifier, source, index, shift) {\n if (this.options.strict && !this.isEnabled() && source === Emitter.sources.USER) {\n return new Delta();\n }\n let range = index == null ? null : this.getSelection();\n let oldDelta = this.editor.delta;\n let change = modifier();\n if (range != null) {\n if (index === true) index = range.index;\n if (shift == null) {\n range = shiftRange(range, change, source);\n } else if (shift !== 0) {\n range = shiftRange(range, index, shift, source);\n }\n this.setSelection(range, Emitter.sources.SILENT);\n }\n if (change.length() > 0) {\n let args = [Emitter.events.TEXT_CHANGE, change, oldDelta, source];\n this.emitter.emit(Emitter.events.EDITOR_CHANGE, ...args);\n if (source !== Emitter.sources.SILENT) {\n this.emitter.emit(...args);\n }\n }\n return change;\n}\n\nfunction overload(index, length, name, value, source) {\n let formats = {};\n if (typeof index.index === 'number' && typeof index.length === 'number') {\n // Allow for throwaway end (used by insertText/insertEmbed)\n if (typeof length !== 'number') {\n source = value, value = name, name = length, length = index.length, index = index.index;\n } else {\n length = index.length, index = index.index;\n }\n } else if (typeof length !== 'number') {\n source = value, value = name, name = length, length = 0;\n }\n // Handle format being object, two format name/value strings or excluded\n if (typeof name === 'object') {\n formats = name;\n source = value;\n } else if (typeof name === 'string') {\n if (value != null) {\n formats[name] = value;\n } else {\n source = name;\n }\n }\n // Handle optional source\n source = source || Emitter.sources.API;\n return [index, length, formats, source];\n}\n\nfunction shiftRange(range, index, length, source) {\n if (range == null) return null;\n let start, end;\n if (index instanceof Delta) {\n [start, end] = [range.index, range.index + range.length].map(function(pos) {\n return index.transformPosition(pos, source !== Emitter.sources.USER);\n });\n } else {\n [start, end] = [range.index, range.index + range.length].map(function(pos) {\n if (pos < index || (pos === index && source === Emitter.sources.USER)) return pos;\n if (length >= 0) {\n return pos + length;\n } else {\n return Math.max(index, pos + length);\n }\n });\n }\n return new Range(start, end - start);\n}\n\n\nexport { expandConfig, overload, Quill as default };\n","import Parchment from 'parchment';\nimport Block, { BlockEmbed } from './block';\n\n\nclass Container extends Parchment.Container { }\nContainer.allowedChildren = [Block, BlockEmbed, Container];\n\n\nexport default Container;\n","import Parchment from 'parchment';\nimport TextBlot from './text';\n\nconst GUARD_TEXT = \"\\uFEFF\";\n\n\nclass Embed extends Parchment.Embed {\n constructor(node) {\n super(node);\n this.contentNode = document.createElement('span');\n this.contentNode.setAttribute('contenteditable', false);\n [].slice.call(this.domNode.childNodes).forEach((childNode) => {\n this.contentNode.appendChild(childNode);\n });\n this.leftGuard = document.createTextNode(GUARD_TEXT);\n this.rightGuard = document.createTextNode(GUARD_TEXT);\n this.domNode.appendChild(this.leftGuard);\n this.domNode.appendChild(this.contentNode);\n this.domNode.appendChild(this.rightGuard);\n }\n\n index(node, offset) {\n if (node === this.leftGuard) return 0;\n if (node === this.rightGuard) return 1;\n return super.index(node, offset);\n }\n\n restore(node) {\n let range, textNode;\n let text = node.data.split(GUARD_TEXT).join('');\n if (node === this.leftGuard) {\n if (this.prev instanceof TextBlot) {\n let prevLength = this.prev.length();\n this.prev.insertAt(prevLength, text);\n range = {\n startNode: this.prev.domNode,\n startOffset: prevLength + text.length\n };\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(Parchment.create(textNode), this);\n range = {\n startNode: textNode,\n startOffset: text.length\n };\n }\n } else if (node === this.rightGuard) {\n if (this.next instanceof TextBlot) {\n this.next.insertAt(0, text);\n range = {\n startNode: this.next.domNode,\n startOffset: text.length\n }\n } else {\n textNode = document.createTextNode(text);\n this.parent.insertBefore(Parchment.create(textNode), this.next);\n range = {\n startNode: textNode,\n startOffset: text.length\n };\n }\n }\n node.data = GUARD_TEXT;\n return range;\n }\n\n update(mutations, context) {\n mutations.forEach((mutation) => {\n if (mutation.type === 'characterData' &&\n (mutation.target === this.leftGuard || mutation.target === this.rightGuard)) {\n let range = this.restore(mutation.target);\n if (range) context.range = range;\n }\n });\n }\n}\n\n\nexport default Embed;\n","import Parchment from 'parchment';\nimport Emitter from '../core/emitter';\nimport Block, { BlockEmbed } from './block';\nimport Break from './break';\nimport CodeBlock from '../formats/code';\nimport Container from './container';\n\n\nfunction isLine(blot) {\n return (blot instanceof Block || blot instanceof BlockEmbed);\n}\n\n\nclass Scroll extends Parchment.Scroll {\n constructor(domNode, config) {\n super(domNode);\n this.emitter = config.emitter;\n if (Array.isArray(config.whitelist)) {\n this.whitelist = config.whitelist.reduce(function(whitelist, format) {\n whitelist[format] = true;\n return whitelist;\n }, {});\n }\n // Some reason fixes composition issues with character languages in Windows/Chrome, Safari\n this.domNode.addEventListener('DOMNodeInserted', function() {});\n this.optimize();\n this.enable();\n }\n\n batchStart() {\n this.batch = true;\n }\n\n batchEnd() {\n this.batch = false;\n this.optimize();\n }\n\n deleteAt(index, length) {\n let [first, offset] = this.line(index);\n let [last, ] = this.line(index + length);\n super.deleteAt(index, length);\n if (last != null && first !== last && offset > 0) {\n if (first instanceof BlockEmbed || last instanceof BlockEmbed) {\n this.optimize();\n return;\n }\n if (first instanceof CodeBlock) {\n let newlineIndex = first.newlineIndex(first.length(), true);\n if (newlineIndex > -1) {\n first = first.split(newlineIndex + 1);\n if (first === last) {\n this.optimize();\n return;\n }\n }\n } else if (last instanceof CodeBlock) {\n let newlineIndex = last.newlineIndex(0);\n if (newlineIndex > -1) {\n last.split(newlineIndex + 1);\n }\n }\n let ref = last.children.head instanceof Break ? null : last.children.head;\n first.moveChildren(last, ref);\n first.remove();\n }\n this.optimize();\n }\n\n enable(enabled = true) {\n this.domNode.setAttribute('contenteditable', enabled);\n }\n\n formatAt(index, length, format, value) {\n if (this.whitelist != null && !this.whitelist[format]) return;\n super.formatAt(index, length, format, value);\n this.optimize();\n }\n\n insertAt(index, value, def) {\n if (def != null && this.whitelist != null && !this.whitelist[value]) return;\n if (index >= this.length()) {\n if (def == null || Parchment.query(value, Parchment.Scope.BLOCK) == null) {\n let blot = Parchment.create(this.statics.defaultChild);\n this.appendChild(blot);\n if (def == null && value.endsWith('\\n')) {\n value = value.slice(0, -1);\n }\n blot.insertAt(0, value, def);\n } else {\n let embed = Parchment.create(value, def);\n this.appendChild(embed);\n }\n } else {\n super.insertAt(index, value, def);\n }\n this.optimize();\n }\n\n insertBefore(blot, ref) {\n if (blot.statics.scope === Parchment.Scope.INLINE_BLOT) {\n let wrapper = Parchment.create(this.statics.defaultChild);\n wrapper.appendChild(blot);\n blot = wrapper;\n }\n super.insertBefore(blot, ref);\n }\n\n leaf(index) {\n return this.path(index).pop() || [null, -1];\n }\n\n line(index) {\n if (index === this.length()) {\n return this.line(index - 1);\n }\n return this.descendant(isLine, index);\n }\n\n lines(index = 0, length = Number.MAX_VALUE) {\n let getLines = (blot, index, length) => {\n let lines = [], lengthLeft = length;\n blot.children.forEachAt(index, length, function(child, index, length) {\n if (isLine(child)) {\n lines.push(child);\n } else if (child instanceof Parchment.Container) {\n lines = lines.concat(getLines(child, index, lengthLeft));\n }\n lengthLeft -= length;\n });\n return lines;\n };\n return getLines(this, index, length);\n }\n\n optimize(mutations = [], context = {}) {\n if (this.batch === true) return;\n super.optimize(mutations, context);\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_OPTIMIZE, mutations, context);\n }\n }\n\n path(index) {\n return super.path(index).slice(1); // Exclude self\n }\n\n update(mutations) {\n if (this.batch === true) return;\n let source = Emitter.sources.USER;\n if (typeof mutations === 'string') {\n source = mutations;\n }\n if (!Array.isArray(mutations)) {\n mutations = this.observer.takeRecords();\n }\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_BEFORE_UPDATE, source, mutations);\n }\n super.update(mutations.concat([])); // pass copy\n if (mutations.length > 0) {\n this.emitter.emit(Emitter.events.SCROLL_UPDATE, source, mutations);\n }\n }\n}\nScroll.blotName = 'scroll';\nScroll.className = 'ql-editor';\nScroll.tagName = 'DIV';\nScroll.defaultChild = 'block';\nScroll.allowedChildren = [Block, BlockEmbed, Container];\n\n\nexport default Scroll;\n","import Parchment from 'parchment';\n\nlet config = {\n scope: Parchment.Scope.BLOCK,\n whitelist: ['right', 'center', 'justify']\n};\n\nlet AlignAttribute = new Parchment.Attributor.Attribute('align', 'align', config);\nlet AlignClass = new Parchment.Attributor.Class('align', 'ql-align', config);\nlet AlignStyle = new Parchment.Attributor.Style('align', 'text-align', config);\n\nexport { AlignAttribute, AlignClass, AlignStyle };\n","import Parchment from 'parchment';\n\nclass ColorAttributor extends Parchment.Attributor.Style {\n value(domNode) {\n let value = super.value(domNode);\n if (!value.startsWith('rgb(')) return value;\n value = value.replace(/^[^\\d]+/, '').replace(/[^\\d]+$/, '');\n return '#' + value.split(',').map(function(component) {\n return ('00' + parseInt(component).toString(16)).slice(-2);\n }).join('');\n }\n}\n\nlet ColorClass = new Parchment.Attributor.Class('color', 'ql-color', {\n scope: Parchment.Scope.INLINE\n});\nlet ColorStyle = new ColorAttributor('color', 'color', {\n scope: Parchment.Scope.INLINE\n});\n\nexport { ColorAttributor, ColorClass, ColorStyle };\n","import Parchment from 'parchment';\nimport { ColorAttributor } from './color';\n\nlet BackgroundClass = new Parchment.Attributor.Class('background', 'ql-bg', {\n scope: Parchment.Scope.INLINE\n});\nlet BackgroundStyle = new ColorAttributor('background', 'background-color', {\n scope: Parchment.Scope.INLINE\n});\n\nexport { BackgroundClass, BackgroundStyle };\n","import Parchment from 'parchment';\n\nlet config = {\n scope: Parchment.Scope.BLOCK,\n whitelist: ['rtl']\n};\n\nlet DirectionAttribute = new Parchment.Attributor.Attribute('direction', 'dir', config);\nlet DirectionClass = new Parchment.Attributor.Class('direction', 'ql-direction', config);\nlet DirectionStyle = new Parchment.Attributor.Style('direction', 'direction', config);\n\nexport { DirectionAttribute, DirectionClass, DirectionStyle };\n","import Parchment from 'parchment';\n\nlet config = {\n scope: Parchment.Scope.INLINE,\n whitelist: ['serif', 'monospace']\n};\n\nlet FontClass = new Parchment.Attributor.Class('font', 'ql-font', config);\n\nclass FontStyleAttributor extends Parchment.Attributor.Style {\n value(node) {\n return super.value(node).replace(/[\"']/g, '');\n }\n}\n\nlet FontStyle = new FontStyleAttributor('font', 'font-family', config);\n\nexport { FontStyle, FontClass };\n","import Parchment from 'parchment';\n\nlet SizeClass = new Parchment.Attributor.Class('size', 'ql-size', {\n scope: Parchment.Scope.INLINE,\n whitelist: ['small', 'large', 'huge']\n});\nlet SizeStyle = new Parchment.Attributor.Style('size', 'font-size', {\n scope: Parchment.Scope.INLINE,\n whitelist: ['10px', '18px', '32px']\n});\n\nexport { SizeClass, SizeStyle };\n","import extend from 'extend';\nimport Delta from 'quill-delta';\nimport Parchment from 'parchment';\nimport Quill from '../core/quill';\nimport logger from '../core/logger';\nimport Module from '../core/module';\n\nimport { AlignAttribute, AlignStyle } from '../formats/align';\nimport { BackgroundStyle } from '../formats/background';\nimport CodeBlock from '../formats/code';\nimport { ColorStyle } from '../formats/color';\nimport { DirectionAttribute, DirectionStyle } from '../formats/direction';\nimport { FontStyle } from '../formats/font';\nimport { SizeStyle } from '../formats/size';\n\nlet debug = logger('quill:clipboard');\n\n\nconst DOM_KEY = '__ql-matcher';\n\nconst CLIPBOARD_CONFIG = [\n [Node.TEXT_NODE, matchText],\n [Node.TEXT_NODE, matchNewline],\n ['br', matchBreak],\n [Node.ELEMENT_NODE, matchNewline],\n [Node.ELEMENT_NODE, matchBlot],\n [Node.ELEMENT_NODE, matchSpacing],\n [Node.ELEMENT_NODE, matchAttributor],\n [Node.ELEMENT_NODE, matchStyles],\n ['li', matchIndent],\n ['b', matchAlias.bind(matchAlias, 'bold')],\n ['i', matchAlias.bind(matchAlias, 'italic')],\n ['style', matchIgnore]\n];\n\nconst ATTRIBUTE_ATTRIBUTORS = [\n AlignAttribute,\n DirectionAttribute\n].reduce(function(memo, attr) {\n memo[attr.keyName] = attr;\n return memo;\n}, {});\n\nconst STYLE_ATTRIBUTORS = [\n AlignStyle,\n BackgroundStyle,\n ColorStyle,\n DirectionStyle,\n FontStyle,\n SizeStyle\n].reduce(function(memo, attr) {\n memo[attr.keyName] = attr;\n return memo;\n}, {});\n\n\nclass Clipboard extends Module {\n constructor(quill, options) {\n super(quill, options);\n this.quill.root.addEventListener('paste', this.onPaste.bind(this));\n this.container = this.quill.addContainer('ql-clipboard');\n this.container.setAttribute('contenteditable', true);\n this.container.setAttribute('tabindex', -1);\n this.matchers = [];\n CLIPBOARD_CONFIG.concat(this.options.matchers).forEach(([selector, matcher]) => {\n if (!options.matchVisual && matcher === matchSpacing) return;\n this.addMatcher(selector, matcher);\n });\n }\n\n addMatcher(selector, matcher) {\n this.matchers.push([selector, matcher]);\n }\n\n convert(html) {\n if (typeof html === 'string') {\n this.container.innerHTML = html.replace(/\\>\\r?\\n +\\</g, '><'); // Remove spaces between tags\n return this.convert();\n }\n const formats = this.quill.getFormat(this.quill.selection.savedRange.index);\n if (formats[CodeBlock.blotName]) {\n const text = this.container.innerText;\n this.container.innerHTML = '';\n return new Delta().insert(text, { [CodeBlock.blotName]: formats[CodeBlock.blotName] });\n }\n let [elementMatchers, textMatchers] = this.prepareMatching();\n let delta = traverse(this.container, elementMatchers, textMatchers);\n // Remove trailing newline\n if (deltaEndsWith(delta, '\\n') && delta.ops[delta.ops.length - 1].attributes == null) {\n delta = delta.compose(new Delta().retain(delta.length() - 1).delete(1));\n }\n debug.log('convert', this.container.innerHTML, delta);\n this.container.innerHTML = '';\n return delta;\n }\n\n dangerouslyPasteHTML(index, html, source = Quill.sources.API) {\n if (typeof index === 'string') {\n this.quill.setContents(this.convert(index), html);\n this.quill.setSelection(0, Quill.sources.SILENT);\n } else {\n let paste = this.convert(html);\n this.quill.updateContents(new Delta().retain(index).concat(paste), source);\n this.quill.setSelection(index + paste.length(), Quill.sources.SILENT);\n }\n }\n\n onPaste(e) {\n if (e.defaultPrevented || !this.quill.isEnabled()) return;\n let range = this.quill.getSelection();\n let delta = new Delta().retain(range.index);\n let scrollTop = this.quill.scrollingContainer.scrollTop;\n this.container.focus();\n this.quill.selection.update(Quill.sources.SILENT);\n setTimeout(() => {\n delta = delta.concat(this.convert()).delete(range.length);\n this.quill.updateContents(delta, Quill.sources.USER);\n // range.length contributes to delta.length()\n this.quill.setSelection(delta.length() - range.length, Quill.sources.SILENT);\n this.quill.scrollingContainer.scrollTop = scrollTop;\n this.quill.focus();\n }, 1);\n }\n\n prepareMatching() {\n let elementMatchers = [], textMatchers = [];\n this.matchers.forEach((pair) => {\n let [selector, matcher] = pair;\n switch (selector) {\n case Node.TEXT_NODE:\n textMatchers.push(matcher);\n break;\n case Node.ELEMENT_NODE:\n elementMatchers.push(matcher);\n break;\n default:\n [].forEach.call(this.container.querySelectorAll(selector), (node) => {\n // TODO use weakmap\n node[DOM_KEY] = node[DOM_KEY] || [];\n node[DOM_KEY].push(matcher);\n });\n break;\n }\n });\n return [elementMatchers, textMatchers];\n }\n}\nClipboard.DEFAULTS = {\n matchers: [],\n matchVisual: true\n};\n\n\nfunction applyFormat(delta, format, value) {\n if (typeof format === 'object') {\n return Object.keys(format).reduce(function(delta, key) {\n return applyFormat(delta, key, format[key]);\n }, delta);\n } else {\n return delta.reduce(function(delta, op) {\n if (op.attributes && op.attributes[format]) {\n return delta.push(op);\n } else {\n return delta.insert(op.insert, extend({}, {[format]: value}, op.attributes));\n }\n }, new Delta());\n }\n}\n\nfunction computeStyle(node) {\n if (node.nodeType !== Node.ELEMENT_NODE) return {};\n const DOM_KEY = '__ql-computed-style';\n return node[DOM_KEY] || (node[DOM_KEY] = window.getComputedStyle(node));\n}\n\nfunction deltaEndsWith(delta, text) {\n let endText = \"\";\n for (let i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i) {\n let op = delta.ops[i];\n if (typeof op.insert !== 'string') break;\n endText = op.insert + endText;\n }\n return endText.slice(-1*text.length) === text;\n}\n\nfunction isLine(node) {\n if (node.childNodes.length === 0) return false; // Exclude embed blocks\n let style = computeStyle(node);\n return ['block', 'list-item'].indexOf(style.display) > -1;\n}\n\nfunction traverse(node, elementMatchers, textMatchers) { // Post-order\n if (node.nodeType === node.TEXT_NODE) {\n return textMatchers.reduce(function(delta, matcher) {\n return matcher(node, delta);\n }, new Delta());\n } else if (node.nodeType === node.ELEMENT_NODE) {\n return [].reduce.call(node.childNodes || [], (delta, childNode) => {\n let childrenDelta = traverse(childNode, elementMatchers, textMatchers);\n if (childNode.nodeType === node.ELEMENT_NODE) {\n childrenDelta = elementMatchers.reduce(function(childrenDelta, matcher) {\n return matcher(childNode, childrenDelta);\n }, childrenDelta);\n childrenDelta = (childNode[DOM_KEY] || []).reduce(function(childrenDelta, matcher) {\n return matcher(childNode, childrenDelta);\n }, childrenDelta);\n }\n return delta.concat(childrenDelta);\n }, new Delta());\n } else {\n return new Delta();\n }\n}\n\n\nfunction matchAlias(format, node, delta) {\n return applyFormat(delta, format, true);\n}\n\nfunction matchAttributor(node, delta) {\n let attributes = Parchment.Attributor.Attribute.keys(node);\n let classes = Parchment.Attributor.Class.keys(node);\n let styles = Parchment.Attributor.Style.keys(node);\n let formats = {};\n attributes.concat(classes).concat(styles).forEach((name) => {\n let attr = Parchment.query(name, Parchment.Scope.ATTRIBUTE);\n if (attr != null) {\n formats[attr.attrName] = attr.value(node);\n if (formats[attr.attrName]) return;\n }\n attr = ATTRIBUTE_ATTRIBUTORS[name];\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n attr = STYLE_ATTRIBUTORS[name]\n if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n attr = STYLE_ATTRIBUTORS[name];\n formats[attr.attrName] = attr.value(node) || undefined;\n }\n });\n if (Object.keys(formats).length > 0) {\n delta = applyFormat(delta, formats);\n }\n return delta;\n}\n\nfunction matchBlot(node, delta) {\n let match = Parchment.query(node);\n if (match == null) return delta;\n if (match.prototype instanceof Parchment.Embed) {\n let embed = {};\n let value = match.value(node);\n if (value != null) {\n embed[match.blotName] = value;\n delta = new Delta().insert(embed, match.formats(node));\n }\n } else if (typeof match.formats === 'function') {\n delta = applyFormat(delta, match.blotName, match.formats(node));\n }\n return delta;\n}\n\nfunction matchBreak(node, delta) {\n if (!deltaEndsWith(delta, '\\n')) {\n delta.insert('\\n');\n }\n return delta;\n}\n\nfunction matchIgnore() {\n return new Delta();\n}\n\nfunction matchIndent(node, delta) {\n let match = Parchment.query(node);\n if (match == null || match.blotName !== 'list-item' || !deltaEndsWith(delta, '\\n')) {\n return delta;\n }\n let indent = -1, parent = node.parentNode;\n while (!parent.classList.contains('ql-clipboard')) {\n if ((Parchment.query(parent) || {}).blotName === 'list') {\n indent += 1;\n }\n parent = parent.parentNode;\n }\n if (indent <= 0) return delta;\n return delta.compose(new Delta().retain(delta.length() - 1).retain(1, { indent: indent}));\n}\n\nfunction matchNewline(node, delta) {\n if (!deltaEndsWith(delta, '\\n')) {\n if (isLine(node) || (delta.length() > 0 && node.nextSibling && isLine(node.nextSibling))) {\n delta.insert('\\n');\n }\n }\n return delta;\n}\n\nfunction matchSpacing(node, delta) {\n if (isLine(node) && node.nextElementSibling != null && !deltaEndsWith(delta, '\\n\\n')) {\n let nodeHeight = node.offsetHeight + parseFloat(computeStyle(node).marginTop) + parseFloat(computeStyle(node).marginBottom);\n if (node.nextElementSibling.offsetTop > node.offsetTop + nodeHeight*1.5) {\n delta.insert('\\n');\n }\n }\n return delta;\n}\n\nfunction matchStyles(node, delta) {\n let formats = {};\n let style = node.style || {};\n if (style.fontStyle && computeStyle(node).fontStyle === 'italic') {\n formats.italic = true;\n }\n if (style.fontWeight && (computeStyle(node).fontWeight.startsWith('bold') ||\n parseInt(computeStyle(node).fontWeight) >= 700)) {\n formats.bold = true;\n }\n if (Object.keys(formats).length > 0) {\n delta = applyFormat(delta, formats);\n }\n if (parseFloat(style.textIndent || 0) > 0) { // Could be 0.5in\n delta = new Delta().insert('\\t').concat(delta);\n }\n return delta;\n}\n\nfunction matchText(node, delta) {\n let text = node.data;\n // Word represents empty line with <o:p> </o:p>\n if (node.parentNode.tagName === 'O:P') {\n return delta.insert(text.trim());\n }\n if (text.trim().length === 0 && node.parentNode.classList.contains('ql-clipboard')) {\n return delta;\n }\n if (!computeStyle(node.parentNode).whiteSpace.startsWith('pre')) {\n // eslint-disable-next-line func-style\n let replacer = function(collapse, match) {\n match = match.replace(/[^\\u00a0]/g, ''); // \\u00a0 is nbsp;\n return match.length < 1 && collapse ? ' ' : match;\n };\n text = text.replace(/\\r\\n/g, ' ').replace(/\\n/g, ' ');\n text = text.replace(/\\s\\s+/g, replacer.bind(replacer, true)); // collapse whitespace\n if ((node.previousSibling == null && isLine(node.parentNode)) ||\n (node.previousSibling != null && isLine(node.previousSibling))) {\n text = text.replace(/^\\s+/, replacer.bind(replacer, false));\n }\n if ((node.nextSibling == null && isLine(node.parentNode)) ||\n (node.nextSibling != null && isLine(node.nextSibling))) {\n text = text.replace(/\\s+$/, replacer.bind(replacer, false));\n }\n }\n return delta.insert(text);\n}\n\n\nexport { Clipboard as default, matchAttributor, matchBlot, matchNewline, matchSpacing, matchText };\n","import Parchment from 'parchment';\nimport Quill from '../core/quill';\nimport Module from '../core/module';\n\n\nclass History extends Module {\n constructor(quill, options) {\n super(quill, options);\n this.lastRecorded = 0;\n this.ignoreChange = false;\n this.clear();\n this.quill.on(Quill.events.EDITOR_CHANGE, (eventName, delta, oldDelta, source) => {\n if (eventName !== Quill.events.TEXT_CHANGE || this.ignoreChange) return;\n if (!this.options.userOnly || source === Quill.sources.USER) {\n this.record(delta, oldDelta);\n } else {\n this.transform(delta);\n }\n });\n this.quill.keyboard.addBinding({ key: 'Z', shortKey: true }, this.undo.bind(this));\n this.quill.keyboard.addBinding({ key: 'Z', shortKey: true, shiftKey: true }, this.redo.bind(this));\n if (/Win/i.test(navigator.platform)) {\n this.quill.keyboard.addBinding({ key: 'Y', shortKey: true }, this.redo.bind(this));\n }\n }\n\n change(source, dest) {\n if (this.stack[source].length === 0) return;\n let delta = this.stack[source].pop();\n this.stack[dest].push(delta);\n this.lastRecorded = 0;\n this.ignoreChange = true;\n this.quill.updateContents(delta[source], Quill.sources.USER);\n this.ignoreChange = false;\n let index = getLastChangeIndex(delta[source]);\n this.quill.setSelection(index);\n }\n\n clear() {\n this.stack = { undo: [], redo: [] };\n }\n\n cutoff() {\n this.lastRecorded = 0;\n }\n\n record(changeDelta, oldDelta) {\n if (changeDelta.ops.length === 0) return;\n this.stack.redo = [];\n let undoDelta = this.quill.getContents().diff(oldDelta);\n let timestamp = Date.now();\n if (this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0) {\n let delta = this.stack.undo.pop();\n undoDelta = undoDelta.compose(delta.undo);\n changeDelta = delta.redo.compose(changeDelta);\n } else {\n this.lastRecorded = timestamp;\n }\n this.stack.undo.push({\n redo: changeDelta,\n undo: undoDelta\n });\n if (this.stack.undo.length > this.options.maxStack) {\n this.stack.undo.shift();\n }\n }\n\n redo() {\n this.change('redo', 'undo');\n }\n\n transform(delta) {\n this.stack.undo.forEach(function(change) {\n change.undo = delta.transform(change.undo, true);\n change.redo = delta.transform(change.redo, true);\n });\n this.stack.redo.forEach(function(change) {\n change.undo = delta.transform(change.undo, true);\n change.redo = delta.transform(change.redo, true);\n });\n }\n\n undo() {\n this.change('undo', 'redo');\n }\n}\nHistory.DEFAULTS = {\n delay: 1000,\n maxStack: 100,\n userOnly: false\n};\n\nfunction endsWithNewlineChange(delta) {\n let lastOp = delta.ops[delta.ops.length - 1];\n if (lastOp == null) return false;\n if (lastOp.insert != null) {\n return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\\n');\n }\n if (lastOp.attributes != null) {\n return Object.keys(lastOp.attributes).some(function(attr) {\n return Parchment.query(attr, Parchment.Scope.BLOCK) != null;\n });\n }\n return false;\n}\n\nfunction getLastChangeIndex(delta) {\n let deleteLength = delta.reduce(function(length, op) {\n length += (op.delete || 0);\n return length;\n }, 0);\n let changeIndex = delta.length() - deleteLength;\n if (endsWithNewlineChange(delta)) {\n changeIndex -= 1;\n }\n return changeIndex;\n}\n\n\nexport { History as default, getLastChangeIndex };\n","import clone from 'clone';\nimport equal from 'deep-equal';\nimport extend from 'extend';\nimport Delta from 'quill-delta';\nimport DeltaOp from 'quill-delta/lib/op';\nimport Parchment from 'parchment';\nimport Quill from '../core/quill';\nimport logger from '../core/logger';\nimport Module from '../core/module';\n\nlet debug = logger('quill:keyboard');\n\nconst SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';\n\n\nclass Keyboard extends Module {\n static match(evt, binding) {\n binding = normalize(binding);\n if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(function(key) {\n return (!!binding[key] !== evt[key] && binding[key] !== null);\n })) {\n return false;\n }\n return binding.key === (evt.which || evt.keyCode);\n }\n\n constructor(quill, options) {\n super(quill, options);\n this.bindings = {};\n Object.keys(this.options.bindings).forEach((name) => {\n if (name === 'list autofill' &&\n quill.scroll.whitelist != null &&\n !quill.scroll.whitelist['list']) {\n return;\n }\n if (this.options.bindings[name]) {\n this.addBinding(this.options.bindings[name]);\n }\n });\n this.addBinding({ key: Keyboard.keys.ENTER, shiftKey: null }, handleEnter);\n this.addBinding({ key: Keyboard.keys.ENTER, metaKey: null, ctrlKey: null, altKey: null }, function() {});\n if (/Firefox/i.test(navigator.userAgent)) {\n // Need to handle delete and backspace for Firefox in the general case #1171\n this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true }, handleBackspace);\n this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true }, handleDelete);\n } else {\n this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true, prefix: /^.?$/ }, handleBackspace);\n this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true, suffix: /^.?$/ }, handleDelete);\n }\n this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: false }, handleDeleteRange);\n this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: false }, handleDeleteRange);\n this.addBinding({ key: Keyboard.keys.BACKSPACE, altKey: null, ctrlKey: null, metaKey: null, shiftKey: null },\n { collapsed: true, offset: 0 },\n handleBackspace);\n this.listen();\n }\n\n addBinding(key, context = {}, handler = {}) {\n let binding = normalize(key);\n if (binding == null || binding.key == null) {\n return debug.warn('Attempted to add invalid keyboard binding', binding);\n }\n if (typeof context === 'function') {\n context = { handler: context };\n }\n if (typeof handler === 'function') {\n handler = { handler: handler };\n }\n binding = extend(binding, context, handler);\n this.bindings[binding.key] = this.bindings[binding.key] || [];\n this.bindings[binding.key].push(binding);\n }\n\n listen() {\n this.quill.root.addEventListener('keydown', (evt) => {\n if (evt.defaultPrevented) return;\n let which = evt.which || evt.keyCode;\n let bindings = (this.bindings[which] || []).filter(function(binding) {\n return Keyboard.match(evt, binding);\n });\n if (bindings.length === 0) return;\n let range = this.quill.getSelection();\n if (range == null || !this.quill.hasFocus()) return;\n let [line, offset] = this.quill.getLine(range.index);\n let [leafStart, offsetStart] = this.quill.getLeaf(range.index);\n let [leafEnd, offsetEnd] = range.length === 0 ? [leafStart, offsetStart] : this.quill.getLeaf(range.index + range.length);\n let prefixText = leafStart instanceof Parchment.Text ? leafStart.value().slice(0, offsetStart) : '';\n let suffixText = leafEnd instanceof Parchment.Text ? leafEnd.value().slice(offsetEnd) : '';\n let curContext = {\n collapsed: range.length === 0,\n empty: range.length === 0 && line.length() <= 1,\n format: this.quill.getFormat(range),\n offset: offset,\n prefix: prefixText,\n suffix: suffixText\n };\n let prevented = bindings.some((binding) => {\n if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) return false;\n if (binding.empty != null && binding.empty !== curContext.empty) return false;\n if (binding.offset != null && binding.offset !== curContext.offset) return false;\n if (Array.isArray(binding.format)) {\n // any format is present\n if (binding.format.every(function(name) {\n return curContext.format[name] == null;\n })) {\n return false;\n }\n } else if (typeof binding.format === 'object') {\n // all formats must match\n if (!Object.keys(binding.format).every(function(name) {\n if (binding.format[name] === true) return curContext.format[name] != null;\n if (binding.format[name] === false) return curContext.format[name] == null;\n return equal(binding.format[name], curContext.format[name]);\n })) {\n return false;\n }\n }\n if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) return false;\n if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) return false;\n return binding.handler.call(this, range, curContext) !== true;\n });\n if (prevented) {\n evt.preventDefault();\n }\n });\n }\n}\n\nKeyboard.keys = {\n BACKSPACE: 8,\n TAB: 9,\n ENTER: 13,\n ESCAPE: 27,\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40,\n DELETE: 46\n};\n\nKeyboard.DEFAULTS = {\n bindings: {\n 'bold' : makeFormatHandler('bold'),\n 'italic' : makeFormatHandler('italic'),\n 'underline' : makeFormatHandler('underline'),\n 'indent': {\n // highlight tab or tab at beginning of list, indent or blockquote\n key: Keyboard.keys.TAB,\n format: ['blockquote', 'indent', 'list'],\n handler: function(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '+1', Quill.sources.USER);\n }\n },\n 'outdent': {\n key: Keyboard.keys.TAB,\n shiftKey: true,\n format: ['blockquote', 'indent', 'list'],\n // highlight tab or tab at beginning of list, indent or blockquote\n handler: function(range, context) {\n if (context.collapsed && context.offset !== 0) return true;\n this.quill.format('indent', '-1', Quill.sources.USER);\n }\n },\n 'outdent backspace': {\n key: Keyboard.keys.BACKSPACE,\n collapsed: true,\n shiftKey: null,\n metaKey: null,\n ctrlKey: null,\n altKey: null,\n format: ['indent', 'list'],\n offset: 0,\n handler: function(range, context) {\n if (context.format.indent != null) {\n this.quill.format('indent', '-1', Quill.sources.USER);\n } else if (context.format.list != null) {\n this.quill.format('list', false, Quill.sources.USER);\n }\n }\n },\n 'indent code-block': makeCodeBlockHandler(true),\n 'outdent code-block': makeCodeBlockHandler(false),\n 'remove tab': {\n key: Keyboard.keys.TAB,\n shiftKey: true,\n collapsed: true,\n prefix: /\\t$/,\n handler: function(range) {\n this.quill.deleteText(range.index - 1, 1, Quill.sources.USER);\n }\n },\n 'tab': {\n key: Keyboard.keys.TAB,\n handler: function(range) {\n this.quill.history.cutoff();\n let delta = new Delta().retain(range.index)\n .delete(range.length)\n .insert('\\t');\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n }\n },\n 'list empty enter': {\n key: Keyboard.keys.ENTER,\n collapsed: true,\n format: ['list'],\n empty: true,\n handler: function(range, context) {\n this.quill.format('list', false, Quill.sources.USER);\n if (context.format.indent) {\n this.quill.format('indent', false, Quill.sources.USER);\n }\n }\n },\n 'checklist enter': {\n key: Keyboard.keys.ENTER,\n collapsed: true,\n format: { list: 'checked' },\n handler: function(range) {\n let [line, offset] = this.quill.getLine(range.index);\n let formats = extend({}, line.formats(), { list: 'checked' });\n let delta = new Delta().retain(range.index)\n .insert('\\n', formats)\n .retain(line.length() - offset - 1)\n .retain(1, { list: 'unchecked' });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.scrollIntoView();\n }\n },\n 'header enter': {\n key: Keyboard.keys.ENTER,\n collapsed: true,\n format: ['header'],\n suffix: /^$/,\n handler: function(range, context) {\n let [line, offset] = this.quill.getLine(range.index);\n let delta = new Delta().retain(range.index)\n .insert('\\n', context.format)\n .retain(line.length() - offset - 1)\n .retain(1, { header: null });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.scrollIntoView();\n }\n },\n 'list autofill': {\n key: ' ',\n collapsed: true,\n format: { list: false },\n prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n handler: function(range, context) {\n let length = context.prefix.length;\n let [line, offset] = this.quill.getLine(range.index);\n if (offset > length) return true;\n let value;\n switch (context.prefix.trim()) {\n case '[]': case '[ ]':\n value = 'unchecked';\n break;\n case '[x]':\n value = 'checked';\n break;\n case '-': case '*':\n value = 'bullet';\n break;\n default:\n value = 'ordered';\n }\n this.quill.insertText(range.index, ' ', Quill.sources.USER);\n this.quill.history.cutoff();\n let delta = new Delta().retain(range.index - offset)\n .delete(length + 1)\n .retain(line.length() - 2 - offset)\n .retain(1, { list: value });\n this.quill.updateContents(delta, Quill.sources.USER);\n this.quill.history.cutoff();\n this.quill.setSelection(range.index - length, Quill.sources.SILENT);\n }\n },\n 'code exit': {\n key: Keyboard.keys.ENTER,\n collapsed: true,\n format: ['code-block'],\n prefix: /\\n\\n$/,\n suffix: /^\\s+$/,\n handler: function(range) {\n const [line, offset] = this.quill.getLine(range.index);\n const delta = new Delta()\n .retain(range.index + line.length() - offset - 2)\n .retain(1, { 'code-block': null })\n .delete(1);\n this.quill.updateContents(delta, Quill.sources.USER);\n }\n },\n 'embed left': makeEmbedArrowHandler(Keyboard.keys.LEFT, false),\n 'embed left shift': makeEmbedArrowHandler(Keyboard.keys.LEFT, true),\n 'embed right': makeEmbedArrowHandler(Keyboard.keys.RIGHT, false),\n 'embed right shift': makeEmbedArrowHandler(Keyboard.keys.RIGHT, true)\n }\n};\n\nfunction makeEmbedArrowHandler(key, shiftKey) {\n const where = key === Keyboard.keys.LEFT ? 'prefix' : 'suffix';\n return {\n key,\n shiftKey,\n altKey: null,\n [where]: /^$/,\n handler: function(range) {\n let index = range.index;\n if (key === Keyboard.keys.RIGHT) {\n index += (range.length + 1);\n }\n const [leaf, ] = this.quill.getLeaf(index);\n if (!(leaf instanceof Parchment.Embed)) return true;\n if (key === Keyboard.keys.LEFT) {\n if (shiftKey) {\n this.quill.setSelection(range.index - 1, range.length + 1, Quill.sources.USER);\n } else {\n this.quill.setSelection(range.index - 1, Quill.sources.USER);\n }\n } else {\n if (shiftKey) {\n this.quill.setSelection(range.index, range.length + 1, Quill.sources.USER);\n } else {\n this.quill.setSelection(range.index + range.length + 1, Quill.sources.USER);\n }\n }\n return false;\n }\n };\n}\n\n\nfunction handleBackspace(range, context) {\n if (range.index === 0 || this.quill.getLength() <= 1) return;\n let [line, ] = this.quill.getLine(range.index);\n let formats = {};\n if (context.offset === 0) {\n let [prev, ] = this.quill.getLine(range.index - 1);\n if (prev != null && prev.length() > 1) {\n let curFormats = line.formats();\n let prevFormats = this.quill.getFormat(range.index-1, 1);\n formats = DeltaOp.attributes.diff(curFormats, prevFormats) || {};\n }\n }\n // Check for astral symbols\n let length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix) ? 2 : 1;\n this.quill.deleteText(range.index-length, length, Quill.sources.USER);\n if (Object.keys(formats).length > 0) {\n this.quill.formatLine(range.index-length, length, formats, Quill.sources.USER);\n }\n this.quill.focus();\n}\n\nfunction handleDelete(range, context) {\n // Check for astral symbols\n let length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix) ? 2 : 1;\n if (range.index >= this.quill.getLength() - length) return;\n let formats = {}, nextLength = 0;\n let [line, ] = this.quill.getLine(range.index);\n if (context.offset >= line.length() - 1) {\n let [next, ] = this.quill.getLine(range.index + 1);\n if (next) {\n let curFormats = line.formats();\n let nextFormats = this.quill.getFormat(range.index, 1);\n formats = DeltaOp.attributes.diff(curFormats, nextFormats) || {};\n nextLength = next.length();\n }\n }\n this.quill.deleteText(range.index, length, Quill.sources.USER);\n if (Object.keys(formats).length > 0) {\n this.quill.formatLine(range.index + nextLength - 1, length, formats, Quill.sources.USER);\n }\n}\n\nfunction handleDeleteRange(range) {\n let lines = this.quill.getLines(range);\n let formats = {};\n if (lines.length > 1) {\n let firstFormats = lines[0].formats();\n let lastFormats = lines[lines.length - 1].formats();\n formats = DeltaOp.attributes.diff(lastFormats, firstFormats) || {};\n }\n this.quill.deleteText(range, Quill.sources.USER);\n if (Object.keys(formats).length > 0) {\n this.quill.formatLine(range.index, 1, formats, Quill.sources.USER);\n }\n this.quill.setSelection(range.index, Quill.sources.SILENT);\n this.quill.focus();\n}\n\nfunction handleEnter(range, context) {\n if (range.length > 0) {\n this.quill.scroll.deleteAt(range.index, range.length); // So we do not trigger text-change\n }\n let lineFormats = Object.keys(context.format).reduce(function(lineFormats, format) {\n if (Parchment.query(format, Parchment.Scope.BLOCK) && !Array.isArray(context.format[format])) {\n lineFormats[format] = context.format[format];\n }\n return lineFormats;\n }, {});\n this.quill.insertText(range.index, '\\n', lineFormats, Quill.sources.USER);\n // Earlier scroll.deleteAt might have messed up our selection,\n // so insertText's built in selection preservation is not reliable\n this.quill.setSelection(range.index + 1, Quill.sources.SILENT);\n this.quill.focus();\n Object.keys(context.format).forEach((name) => {\n if (lineFormats[name] != null) return;\n if (Array.isArray(context.format[name])) return;\n if (name === 'link') return;\n this.quill.format(name, context.format[name], Quill.sources.USER);\n });\n}\n\nfunction makeCodeBlockHandler(indent) {\n return {\n key: Keyboard.keys.TAB,\n shiftKey: !indent,\n format: {'code-block': true },\n handler: function(range) {\n let CodeBlock = Parchment.query('code-block');\n let index = range.index, length = range.length;\n let [block, offset] = this.quill.scroll.descendant(CodeBlock, index);\n if (block == null) return;\n let scrollIndex = this.quill.getIndex(block);\n let start = block.newlineIndex(offset, true) + 1;\n let end = block.newlineIndex(scrollIndex + offset + length);\n let lines = block.domNode.textContent.slice(start, end).split('\\n');\n offset = 0;\n lines.forEach((line, i) => {\n if (indent) {\n block.insertAt(start + offset, CodeBlock.TAB);\n offset += CodeBlock.TAB.length;\n if (i === 0) {\n index += CodeBlock.TAB.length;\n } else {\n length += CodeBlock.TAB.length;\n }\n } else if (line.startsWith(CodeBlock.TAB)) {\n block.deleteAt(start + offset, CodeBlock.TAB.length);\n offset -= CodeBlock.TAB.length;\n if (i === 0) {\n index -= CodeBlock.TAB.length;\n } else {\n length -= CodeBlock.TAB.length;\n }\n }\n offset += line.length + 1;\n });\n this.quill.update(Quill.sources.USER);\n this.quill.setSelection(index, length, Quill.sources.SILENT);\n }\n };\n}\n\nfunction makeFormatHandler(format) {\n return {\n key: format[0].toUpperCase(),\n shortKey: true,\n handler: function(range, context) {\n this.quill.format(format, !context.format[format], Quill.sources.USER);\n }\n };\n}\n\nfunction normalize(binding) {\n if (typeof binding === 'string' || typeof binding === 'number') {\n return normalize({ key: binding });\n }\n if (typeof binding === 'object') {\n binding = clone(binding, false);\n }\n if (typeof binding.key === 'string') {\n if (Keyboard.keys[binding.key.toUpperCase()] != null) {\n binding.key = Keyboard.keys[binding.key.toUpperCase()];\n } else if (binding.key.length === 1) {\n binding.key = binding.key.toUpperCase().charCodeAt(0);\n } else {\n return null;\n }\n }\n if (binding.shortKey) {\n binding[SHORTKEY] = binding.shortKey;\n delete binding.shortKey;\n }\n return binding;\n}\n\n\nexport { Keyboard as default, SHORTKEY };\n","import Parchment from 'parchment';\nimport Quill from './core/quill';\n\nimport Block, { BlockEmbed } from './blots/block';\nimport Break from './blots/break';\nimport Container from './blots/container';\nimport Cursor from './blots/cursor';\nimport Embed from './blots/embed';\nimport Inline from './blots/inline';\nimport Scroll from './blots/scroll';\nimport TextBlot from './blots/text';\n\nimport Clipboard from './modules/clipboard';\nimport History from './modules/history';\nimport Keyboard from './modules/keyboard';\n\nQuill.register({\n 'blots/block' : Block,\n 'blots/block/embed' : BlockEmbed,\n 'blots/break' : Break,\n 'blots/container' : Container,\n 'blots/cursor' : Cursor,\n 'blots/embed' : Embed,\n 'blots/inline' : Inline,\n 'blots/scroll' : Scroll,\n 'blots/text' : TextBlot,\n\n 'modules/clipboard' : Clipboard,\n 'modules/history' : History,\n 'modules/keyboard' : Keyboard\n});\n\nParchment.register(Block, Break, Cursor, Inline, Scroll, TextBlot);\n\n\nexport default Quill;\n","/**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\nfunction baseLodash() {\n // No operation performed.\n}\n\nmodule.exports = baseLodash;\n","var baseCreate = require('./_baseCreate'),\n baseLodash = require('./_baseLodash');\n\n/**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\nfunction LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n}\n\nLodashWrapper.prototype = baseCreate(baseLodash.prototype);\nLodashWrapper.prototype.constructor = LodashWrapper;\n\nmodule.exports = LodashWrapper;\n","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","var WeakMap = require('./_WeakMap');\n\n/** Used to store function metadata. */\nvar metaMap = WeakMap && new WeakMap;\n\nmodule.exports = metaMap;\n","var metaMap = require('./_metaMap'),\n noop = require('./noop');\n\n/**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\nvar getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n};\n\nmodule.exports = getData;\n","/** Used to lookup unminified function names. */\nvar realNames = {};\n\nmodule.exports = realNames;\n","var realNames = require('./_realNames');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\nfunction getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n}\n\nmodule.exports = getFuncName;\n","var baseCreate = require('./_baseCreate'),\n baseLodash = require('./_baseLodash');\n\n/** Used as references for the maximum length and index of an array. */\nvar MAX_ARRAY_LENGTH = 4294967295;\n\n/**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\nfunction LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n}\n\n// Ensure `LazyWrapper` is an instance of `baseLodash`.\nLazyWrapper.prototype = baseCreate(baseLodash.prototype);\nLazyWrapper.prototype.constructor = LazyWrapper;\n\nmodule.exports = LazyWrapper;\n","var LazyWrapper = require('./_LazyWrapper'),\n LodashWrapper = require('./_LodashWrapper'),\n copyArray = require('./_copyArray');\n\n/**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\nfunction wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n}\n\nmodule.exports = wrapperClone;\n","var LazyWrapper = require('./_LazyWrapper'),\n LodashWrapper = require('./_LodashWrapper'),\n baseLodash = require('./_baseLodash'),\n isArray = require('./isArray'),\n isObjectLike = require('./isObjectLike'),\n wrapperClone = require('./_wrapperClone');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\nfunction lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n}\n\n// Ensure wrappers are instances of `baseLodash`.\nlodash.prototype = baseLodash.prototype;\nlodash.prototype.constructor = lodash;\n\nmodule.exports = lodash;\n","var LazyWrapper = require('./_LazyWrapper'),\n getData = require('./_getData'),\n getFuncName = require('./_getFuncName'),\n lodash = require('./wrapperLodash');\n\n/**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\nfunction isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n}\n\nmodule.exports = isLaziable;\n","var LodashWrapper = require('./_LodashWrapper'),\n flatRest = require('./_flatRest'),\n getData = require('./_getData'),\n getFuncName = require('./_getFuncName'),\n isArray = require('./isArray'),\n isLaziable = require('./_isLaziable');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to compose bitmasks for function metadata. */\nvar WRAP_CURRY_FLAG = 8,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256;\n\n/**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\nfunction createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n}\n\nmodule.exports = createFlow;\n","var createFlow = require('./_createFlow');\n\n/**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\nvar flow = createFlow();\n\nmodule.exports = flow;\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\nmodule.exports = basePropertyOf;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map characters to HTML entities. */\nvar htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\n\n/**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\nvar escapeHtmlChar = basePropertyOf(htmlEscapes);\n\nmodule.exports = escapeHtmlChar;\n","var escapeHtmlChar = require('./_escapeHtmlChar'),\n toString = require('./toString');\n\n/** Used to match HTML entities and HTML characters. */\nvar reUnescapedHtml = /[&<>\"']/g,\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n/**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\nfunction escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n}\n\nmodule.exports = escape;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map HTML entities to characters. */\nvar htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n};\n\n/**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\nvar unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\nmodule.exports = unescapeHtmlChar;\n","var toString = require('./toString'),\n unescapeHtmlChar = require('./_unescapeHtmlChar');\n\n/** Used to match HTML entities and HTML characters. */\nvar reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source);\n\n/**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&`, `<`, `>`, `"`, and `'` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\nfunction unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n}\n\nmodule.exports = unescape;\n","import Delta from 'quill-delta';\nimport Parchment from 'parchment';\nimport Quill from '../core/quill';\nimport logger from '../core/logger';\nimport Module from '../core/module';\n\nlet debug = logger('quill:toolbar');\n\n\nclass Toolbar extends Module {\n constructor(quill, options) {\n super(quill, options);\n if (Array.isArray(this.options.container)) {\n let container = document.createElement('div');\n addControls(container, this.options.container);\n quill.container.parentNode.insertBefore(container, quill.container);\n this.container = container;\n } else if (typeof this.options.container === 'string') {\n this.container = document.querySelector(this.options.container);\n } else {\n this.container = this.options.container;\n }\n if (!(this.container instanceof HTMLElement)) {\n return debug.error('Container required for toolbar', this.options);\n }\n this.container.classList.add('ql-toolbar');\n this.controls = [];\n this.handlers = {};\n Object.keys(this.options.handlers).forEach((format) => {\n this.addHandler(format, this.options.handlers[format]);\n });\n [].forEach.call(this.container.querySelectorAll('button, select'), (input) => {\n this.attach(input);\n });\n this.quill.on(Quill.events.EDITOR_CHANGE, (type, range) => {\n if (type === Quill.events.SELECTION_CHANGE) {\n this.update(range);\n }\n });\n this.quill.on(Quill.events.SCROLL_OPTIMIZE, () => {\n let [range, ] = this.quill.selection.getRange(); // quill.getSelection triggers update\n this.update(range);\n });\n }\n\n addHandler(format, handler) {\n this.handlers[format] = handler;\n }\n\n attach(input) {\n let format = [].find.call(input.classList, (className) => {\n return className.indexOf('ql-') === 0;\n });\n if (!format) return;\n format = format.slice('ql-'.length);\n if (input.tagName === 'BUTTON') {\n input.setAttribute('type', 'button');\n }\n if (this.handlers[format] == null) {\n if (this.quill.scroll.whitelist != null && this.quill.scroll.whitelist[format] == null) {\n debug.warn('ignoring attaching to disabled format', format, input);\n return;\n }\n if (Parchment.query(format) == null) {\n debug.warn('ignoring attaching to nonexistent format', format, input);\n return;\n }\n }\n let eventName = input.tagName === 'SELECT' ? 'change' : 'click';\n input.addEventListener(eventName, (e) => {\n let value;\n if (input.tagName === 'SELECT') {\n if (input.selectedIndex < 0) return;\n let selected = input.options[input.selectedIndex];\n if (selected.hasAttribute('selected')) {\n value = false;\n } else {\n value = selected.value || false;\n }\n } else {\n if (input.classList.contains('ql-active')) {\n value = false;\n } else {\n value = input.value || !input.hasAttribute('value');\n }\n e.preventDefault();\n }\n this.quill.focus();\n let [range, ] = this.quill.selection.getRange();\n if (this.handlers[format] != null) {\n this.handlers[format].call(this, value);\n } else if (Parchment.query(format).prototype instanceof Parchment.Embed) {\n value = prompt(`Enter ${format}`);\n if (!value) return;\n this.quill.updateContents(new Delta()\n .retain(range.index)\n .delete(range.length)\n .insert({ [format]: value })\n , Quill.sources.USER);\n } else {\n this.quill.format(format, value, Quill.sources.USER);\n }\n this.update(range);\n });\n // TODO use weakmap\n this.controls.push([format, input]);\n }\n\n update(range) {\n let formats = range == null ? {} : this.quill.getFormat(range);\n this.controls.forEach(function(pair) {\n let [format, input] = pair;\n if (input.tagName === 'SELECT') {\n let option;\n if (range == null) {\n option = null;\n } else if (formats[format] == null) {\n option = input.querySelector('option[selected]');\n } else if (!Array.isArray(formats[format])) {\n let value = formats[format];\n if (typeof value === 'string') {\n value = value.replace(/\\\"/g, '\\\\\"');\n }\n option = input.querySelector(`option[value=\"${value}\"]`);\n }\n if (option == null) {\n input.value = ''; // TODO make configurable?\n input.selectedIndex = -1;\n } else {\n option.selected = true;\n }\n } else {\n if (range == null) {\n input.classList.remove('ql-active');\n } else if (input.hasAttribute('value')) {\n // both being null should match (default values)\n // '1' should match with 1 (headers)\n let isActive = formats[format] === input.getAttribute('value') ||\n (formats[format] != null && formats[format].toString() === input.getAttribute('value')) ||\n (formats[format] == null && !input.getAttribute('value'));\n input.classList.toggle('ql-active', isActive);\n } else {\n input.classList.toggle('ql-active', formats[format] != null);\n }\n }\n });\n }\n}\nToolbar.DEFAULTS = {};\n\n\nfunction addButton(container, format, value) {\n let input = document.createElement('button');\n input.setAttribute('type', 'button');\n input.classList.add('ql-' + format);\n if (value != null) {\n input.value = value;\n }\n container.appendChild(input);\n}\n\nfunction addControls(container, groups) {\n if (!Array.isArray(groups[0])) {\n groups = [groups];\n }\n groups.forEach(function(controls) {\n let group = document.createElement('span');\n group.classList.add('ql-formats');\n controls.forEach(function(control) {\n if (typeof control === 'string') {\n addButton(group, control);\n } else {\n let format = Object.keys(control)[0];\n let value = control[format];\n if (Array.isArray(value)) {\n addSelect(group, format, value);\n } else {\n addButton(group, format, value);\n }\n }\n });\n container.appendChild(group);\n });\n}\n\nfunction addSelect(container, format, values) {\n let input = document.createElement('select');\n input.classList.add('ql-' + format);\n values.forEach(function(value) {\n let option = document.createElement('option');\n if (value !== false) {\n option.setAttribute('value', value);\n } else {\n option.setAttribute('selected', 'selected');\n }\n input.appendChild(option);\n });\n container.appendChild(input);\n}\n\nToolbar.DEFAULTS = {\n container: null,\n handlers: {\n clean: function() {\n let range = this.quill.getSelection();\n if (range == null) return;\n if (range.length == 0) {\n let formats = this.quill.getFormat();\n Object.keys(formats).forEach((name) => {\n // Clean functionality in existing apps only clean inline formats\n if (Parchment.query(name, Parchment.Scope.INLINE) != null) {\n this.quill.format(name, false);\n }\n });\n } else {\n this.quill.removeFormat(range, Quill.sources.USER);\n }\n },\n direction: function(value) {\n let align = this.quill.getFormat()['align'];\n if (value === 'rtl' && align == null) {\n this.quill.format('align', 'right', Quill.sources.USER);\n } else if (!value && align === 'right') {\n this.quill.format('align', false, Quill.sources.USER);\n }\n this.quill.format('direction', value, Quill.sources.USER);\n },\n indent: function(value) {\n let range = this.quill.getSelection();\n let formats = this.quill.getFormat(range);\n let indent = parseInt(formats.indent || 0);\n if (value === '+1' || value === '-1') {\n let modifier = (value === '+1') ? 1 : -1;\n if (formats.direction === 'rtl') modifier *= -1;\n this.quill.format('indent', indent + modifier, Quill.sources.USER);\n }\n },\n link: function(value) {\n if (value === true) {\n value = prompt('Enter link URL:');\n }\n this.quill.format('link', value, Quill.sources.USER);\n },\n list: function(value) {\n let range = this.quill.getSelection();\n let formats = this.quill.getFormat(range);\n if (value === 'check') {\n if (formats['list'] === 'checked' || formats['list'] === 'unchecked') {\n this.quill.format('list', false, Quill.sources.USER);\n } else {\n this.quill.format('list', 'unchecked', Quill.sources.USER);\n }\n } else {\n this.quill.format('list', value, Quill.sources.USER);\n }\n }\n }\n}\n\n\nexport { Toolbar as default, addControls };\n","import Inline from '../blots/inline';\n\nclass Bold extends Inline {\n static create() {\n return super.create();\n }\n\n static formats() {\n return true;\n }\n\n optimize(context) {\n super.optimize(context);\n if (this.domNode.tagName !== this.statics.tagName[0]) {\n this.replaceWith(this.statics.blotName);\n }\n }\n}\nBold.blotName = 'bold';\nBold.tagName = ['STRONG', 'B'];\n\nexport default Bold;\n","import Bold from './bold';\n\nclass Italic extends Bold { }\nItalic.blotName = 'italic';\nItalic.tagName = ['EM', 'I'];\n\nexport default Italic;\n","import Inline from '../blots/inline';\n\nclass Underline extends Inline { }\nUnderline.blotName = 'underline';\nUnderline.tagName = 'U';\n\nexport default Underline;\n","import Inline from '../blots/inline';\n\nclass Strike extends Inline { }\nStrike.blotName = 'strike';\nStrike.tagName = 'S';\n\nexport default Strike;\n","import Parchment from 'parchment'\n\nclass FontAttributor extends Parchment.Attributor.Style {\n value(node) {\n return super.value(node).replace(/\"([^\"]+)\"/, '$1');\n }\n}\n\nlet FontStyle = new FontAttributor('font', 'font-family', {\n scope: Parchment.Scope.INLINE\n});\n\nexport default FontStyle;\n","function sizeFromQuillToUser(quillSize, multiplier) {\n return quillSize / multiplier;\n}\n\nfunction sizeFromUserToQuill(userSize, multiplier) {\n return Math.round(userSize * multiplier);\n}\n\nfunction setDefaultParagraphSize(element, slot) {\n const pTag = element.querySelector('p');\n\n const elementNodes = pTag.querySelectorAll('[style*=font-size]');\n const largestFontSize = largestTextSize(elementNodes, slot);\n const shouldSetFontSize = element.innerHTML == '<p></p>' || slot.isUnconfirmedTextSlot;\n\n const tagFontSize = shouldSetFontSize ? `${sizeFromUserToQuill(largestFontSize, slot.scale)}pt` : 'unset';\n pTag.style.fontSize = tagFontSize;\n pTag.style.fontFamily = slot.fontName;\n pTag.style.color = slot.fontColour;\n}\n\nfunction setParagraphFontSizes(element, slot) {\n const pTags = element.querySelectorAll('p');\n\n for (const el of pTags) {\n const elementNodes = el.querySelectorAll('[style*=font-size]');\n const largestFontSize = largestTextSize(elementNodes, slot);\n const shouldSetFontSize = elementNodes.length > 0;\n const tagFontSize = shouldSetFontSize ?\n `${sizeFromUserToQuill(largestFontSize, slot.scale)}pt`\n : `${sizeFromUserToQuill(slot.fontSize, slot.scale)}pt`;\n\n el.style.fontSize = tagFontSize;\n el.style.fontFamily = slot.fontName;\n el.style.color = slot.fontColour;\n }\n}\n\nfunction largestTextSize(elementNodes, slot) {\n const textSizes = textSizesFromNodes(elementNodes);\n\n if (textSizes.length) return sizeFromQuillToUser(Math.max(...textSizes), slot.scale);\n return slot.fontSize;\n}\n\nfunction smallestTextSize(elementNodes, slot) {\n const textSizes = textSizesFromNodes(elementNodes);\n\n if (textSizes.length) return sizeFromQuillToUser(Math.min(...textSizes), slot.scale);\n return slot.fontSize;\n}\n\nfunction textSizesFromNodes(elementNodes) {\n return Array.from(elementNodes).reduce((sizes, textNode) => {\n sizes.push(parseInt(textNode.style.fontSize));\n return sizes;\n }, []);\n}\n\nexport {\n largestTextSize, smallestTextSize, sizeFromQuillToUser, sizeFromUserToQuill, setDefaultParagraphSize, setParagraphFontSizes\n}\n","import Parchment from 'parchment';\nimport { sizeFromQuillToUser, sizeFromUserToQuill } from '../../font-size-converter';\nimport { useSlotStore } from 'stores/useSlotStore';\n\nclass SizeAttributor extends Parchment.Attributor.Style {\n\n add(node, value) {\n const converted = sizeFromUserToQuill(value, this.scaleFactor);\n\n if (!this.canAdd(node, converted)) return false;\n node.style.fontSize = `${converted}pt`;\n\n return true;\n }\n\n value(node) {\n let size = Number(super.value(node).replace(/pt$/, ''));\n\n // Sometimes Quill will randomly convert to pixels;\n // needs further investigation.\n if (isNaN(size) || size === 0) return null;\n\n return sizeFromQuillToUser(size, this.scaleFactor);\n }\n\n get scaleFactor() {\n const selected = useSlotStore.getState().slot;\n\n const scale = selected?.scale ?? 0;\n\n return scale\n }\n}\n\nlet SizeStyle = new SizeAttributor('size', 'font-size', {\n scope: Parchment.Scope.INLINE\n});\n\n\nexport default SizeStyle;\n","function lazyGoogleFont(fontName) {\n const fontID = fontName.toLowerCase().replace(/\\s+/, '-');\n\n if (!document.getElementById(fontID)) {\n const head = document.getElementsByTagName('head')[0];\n const link = document.createElement('link');\n link.id = fontID;\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = `//fonts.googleapis.com/css2?family=${fontName}:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700`;\n link.media = 'all';\n head.appendChild(link);\n }\n}\n\nexport default lazyGoogleFont;","import Quill from 'quill/core';\nimport flow from 'lodash/flow';\nimport escape from 'lodash/escape';\nimport unescape from 'lodash/unescape';\nimport tinycolor from 'tinycolor2';\nimport Toolbar from 'quill/modules/toolbar';\nimport Bold from 'quill/formats/bold';\nimport Italic from 'quill/formats/italic';\nimport Underline from 'quill/formats/underline';\nimport Strike from 'quill/formats/strike';\nimport { ColorStyle } from 'quill/formats/color';\nimport FontStyle from './quill/formats/font-style'\nimport SizeStyle from './quill/formats/size-style'\nimport lazyGoogleFont from './lazy-google-font';\nimport { sizeFromQuillToUser, sizeFromUserToQuill } from './font-size-converter';\nimport { getViewport } from './hoc/with-viewport-size';\n\n// Quill defaults to <strong /> and <em /> which are not\n// compatible with Pango.\nBold.tagName = 'b';\nItalic.tagName = 'i';\n\nconst debug = false;\n\nQuill.register({\n 'modules/toolbar': Toolbar,\n 'formats/bold': Bold,\n 'formats/italic': Italic,\n 'formats/underline': Underline,\n 'formats/strike': Strike,\n 'formats/color': ColorStyle,\n 'formats/font': FontStyle,\n 'formats/size': SizeStyle\n});\n\n// Initialize quill with some sensible defaults.\nQuill.init = function (id, toolbar, keyBindings = {}) {\n const quill = new Quill(id, {\n scrollingContainer: 'in-place__scroller',\n modules: {\n keyboard: {\n bindings: keyBindings\n },\n toolbar,\n clipboard: { matchVisual: false }\n }\n });\n\n // Remove the tab hotkey for ADA\n delete quill.getModule('keyboard').bindings['9'];\n\n return quill;\n}\n\nclass PangoToQuillResult {\n constructor({html, colors, fonts, fontSizes}) {\n this.html = html;\n this.colors = colors;\n this.fonts = fonts;\n this.fontSizes = fontSizes;\n }\n\n toString() {\n return this.html;\n }\n}\nclass QuillToPangoResult {\n constructor({ html }) {\n this.html = html;\n }\n\n toString() {\n return this.html;\n }\n}\n\nclass QuillHelpers {\n static get tags() {\n return ['i', 'b', 's', 'u', 'span'];\n }\n\n static pangoToQuill(html, scale) {\n if (!html) return '';\n\n const colors = [];\n const fonts = [];\n const fontSizes = [];\n\n const result = flow([\n applyFonts,\n applySizes,\n applyColors,\n mergeStyles,\n formatLineBreaks\n ])(html);\n\n if (debug) console.log('pangoToQuill', result);\n\n return new PangoToQuillResult({html: result, colors, fonts, fontSizes});\n\n function applyColors(text) {\n return styleAttributeFromPango(text, 'foreground', 'color', value => {\n colors.push(value);\n return tinycolor(value).toRgbString();\n });\n }\n\n function applyFonts(text) {\n const result = styleAttributeFromPango(text, 'font_family', 'font-family', value => {\n lazyGoogleFont(value);\n fonts.push(value);\n return `\"${value}\"`;\n });\n\n return result;\n }\n\n function applySizes(text) {\n const result = styleAttributeFromPango(text, 'size', 'font-size', value => {\n fontSizes.push(value);\n return `${sizeFromUserToQuill(Number(value), scale)}pt`;\n });\n\n return result;\n }\n\n function mergeStyles(text) {\n return text.replace(/\"\\s*style=\"/g, ';');\n }\n\n function formatLineBreaks(text) {\n const lines = text.split('\\n');\n if (lines.length <= 1) return text;\n\n return lines.map(line => `${line}<br />`).join('');\n }\n\n function styleAttributeFromPango(text, pangoAttribute, cssAttribute, transform) {\n return text.replace((new RegExp(`${pangoAttribute}=\"([^\"]+)\"`, 'g')), (attribute, value) => {\n return `style=\"${cssAttribute}: ${escape(transform(value))}\"`;\n });\n }\n }\n\n static quillToPango(html, scale) {\n const result = flow([\n applySizes,\n applyFonts,\n applyColors,\n stripStyleAttributes,\n convertToSpans,\n formatWhiteSpace,\n removeCursorTag,\n removeEmptySpan\n ])(html);\n\n if (debug) console.log('quillToPango', result);\n\n return new QuillToPangoResult({html: result});\n\n function applyColors(text) {\n return appendPangoAttributesFromStyle(text, 'color', 'foreground', value => {\n return tinycolor(value).toHexString();\n });\n }\n\n function applyFonts(text) {\n return appendPangoAttributesFromStyle(text, 'font-family', 'font_family', value => {\n return value.replace(/[\"']([^'\"]+)[\"']/, '$1');\n });\n }\n\n function applySizes(text) {\n return appendPangoAttributesFromStyle(text, 'font-size', 'size', value => {\n return Math.round(sizeFromQuillToUser(Number(value.replace('pt', '')), scale));\n });\n }\n\n function convertToSpans(text) {\n return text.replace(/<\\/?([a-z]+) ?[^>]*>/gi, (match, tag) => {\n if (tag === 'p') {\n if (match !== '</p>') return match.replace('<p', '<span');\n return '</span>\\n';\n }\n\n if (QuillHelpers.tags.includes(tag)) {\n // Apply any styles on non 'span' tags to nested spans:\n // `<b foreground=\"red\">Hello</b>` ->\n // `<b><span foreground=\"red\">Hello</span></b>`\n if (tag !== 'span') {\n if (match !== `</${tag}>`) return match.replace(`<${tag}`, `<${tag}><span`);\n return match.replace(`</${tag}>`, `</span></${tag}>`);\n }\n\n return match;\n }\n\n return '';\n });\n }\n\n // If you start clicking around without any text, Quill\n // will inject a weird cursor span as a placeholder.\n function removeCursorTag(text) {\n return text.replace(/<span class=\\\"ql-cursor\\\">.<\\/span>/, '');\n }\n\n // Non breaking white space will display in the canvas,\n // so replace then with normal spaces.\n function formatWhiteSpace(text) {\n return text.replace(/ /g, ' ');\n }\n\n function appendPangoAttributesFromStyle(text, cssAttribute, pangoAttribute, transform) {\n return text.replace(/style=\"([^\"]+)\"/g, (attribute, style) => {\n const match = unescape(style).match(new RegExp(`${cssAttribute}:\\s*([^;]+)`));\n\n if (!match) return attribute;\n\n const value = match[1];\n const transformed = value ? transform(value.trim()) : null;\n\n // Append, leaving style attribute alone in case there are more.\n return transformed ? `${attribute} ${pangoAttribute}=\"${transformed}\"` : attribute;\n });\n }\n\n function stripStyleAttributes(text) {\n return text.replace(/\\s*style=\"([^\"]+)\"/g, '');\n }\n\n function removeEmptySpan(text) {\n return text.trim().match(/^<span([^>]*)><\\/span>$/) ? '' : text;\n }\n }\n}\n\nexport { Quill, QuillHelpers };\n","import { create } from 'zustand';\n\n// We would expand this in the future to handle side tabs and trays\nexport const useTabTray = create(set => ({\n showPhotosTray: false,\n updateShowPhotosTray: (bool) => set({ showPhotosTray: bool}),\n}));\n","import each from 'lodash/each';\nimport findIndex from 'lodash/findIndex';\nimport { PrismUI } from '../../_utils/ui';\nimport fetchImage from '../../_utils/fetch-image';\nimport IU from '../../_utils/img/img-utils';\nimport tinycolor from 'tinycolor2';\nimport Snapster from '@livelink/snapster';\nimport wkLogger from './logger.js';\nimport { EventEmitter } from 'wk-event-emitter';\nimport {\n MyMatrix,\n TextSlot,\n customSlots,\n ImageSlot,\n imgComplete,\n} from './slots';\nimport customColourHistory from '../misc/custom-colour-history';\nimport PrismJSON from './prism-json-encoder';\nimport TemplateCache from '../templates/template-cache';\nimport { prismAction } from '../utils/stores';\nimport Point from './geom/point';\nimport filledImageSlotConfirmation from '../utils/filled-image-slot-confirmation';\nimport { isClonedSlot } from '../utils/special-slots';\nimport templateInterrogator from '../misc/template-interrogator.js';\nimport PrismBuilderHistory from './prism-builder-history';\nimport { QuillHelpers } from '../../_utils/quill';\nimport { getViewport } from '../../_utils/hoc/with-viewport-size';\nimport genericHelpers from '../../_utils/generic-helpers';\nimport sendToGoogleAnalytics from '../desktop/slot-tools/send-to-google-analytics';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\nimport { useSlotStore, useFocusedSlotStore } from 'stores/useSlotStore';\nimport { useTemplateSelectStore } from 'stores/useTemplateStore';\nimport { useTabTray } from 'stores/useTabTray';\nimport { hasFoilText } from '../utils/has-foil-text';\n\nconst MOUSE_DOWN = 'pointerdown touchstart mousedown';\n\nconst MOUSE_MOVE = 'pointermove touchmove mousemove';\n\nconst MOUSE_UP = 'pointerup touchend mouseup';\n\nconst toInteger = (str, default_value) => {\n let i;\n i = parseInt(str, 10);\n if (isNaN(i)) {\n if (arguments_.length > 1) {\n return default_value;\n }\n return 0;\n }\n return i;\n};\n\nconst stopEvent = (e) => {\n e.preventDefault();\n return e.stopPropagation();\n};\n\nconst __indexOf =\n Array.prototype.indexOf ||\n function(item) {\n for (let i = 0, l = this.length; i < l; i++) {\n if (i in this && this[i] === item) return i;\n }\n return -1;\n };\nconst { imgHelpers } = IU;\n// temporarily until 'mobile-ui' is webpackified: not proud of this!!\nwindow.PrismJSON = PrismJSON;\n\nconst OPTIONAL_BG = 'optional-bg';\n\nconst cornerCursorSegments = (() => {\n const circle = 360;\n const eighth = circle / 8;\n const sixteenth = eighth / 2;\n const segments = [];\n for (let step = sixteenth; step < circle; step += eighth) {\n segments.push(step);\n }\n return segments;\n})();\n\nconst capitalizedDirection = {\n horizontal: 'Horizontal',\n vertical: 'Vertical',\n};\n\nclass PrismViewCanvas {\n constructor(id, template, data, element = null) {\n const _this = this;\n this.stashFns = null; // Placeholder for a mixin\n this.id = id;\n this.mode = 1;\n this.el = element ? $(element) : $(`#${id}`);\n this.element = this.el.get(0);\n this.editable = true;\n this.template = null;\n this.scale = 1;\n this.revision = 0;\n this._allow_redraw = true;\n this.saveBlocked = false;\n this.user_actions = [];\n this._snapster =\n window.featureFlags &&\n window.featureFlags.show_slot_positioning_tools &&\n new Snapster({\n document,\n container: this.element.closest('.snap-container'),\n threshold: 4,\n positioner: ({ element, edge }) => {\n const shrinkage = this.element.clientWidth / this.element.width;\n const position = edge.position * this.scale * shrinkage;\n const from = edge.direction === 'horizontal' ? 'top' : 'left';\n\n element.style[from] = `${position}px`;\n element.ariaLabel =\n `${capitalizedDirection[edge.direction]} guide at ${Math.round(\n position\n )} ` + `pixels from the ${from}`;\n },\n });\n if (!this.historyStack) this.historyStack = new PrismBuilderHistory(this);\n this.wrapperHighlight = false;\n if (this.undoStack == null) this.undoStack = [];\n if (this.undoPointer == null) this.undoPointer = 0;\n\n EventEmitter.on('text-slot-updated', slot => {\n if (_this.slots && __indexOf.call(_this.slots, slot) >= 0) {\n return _this.do_save();\n }\n });\n\n // Polyfill to test handling of the offscreen canvas in test suite\n if (!window.OffscreenCanvas) {\n window.OffscreenCanvas = class OffscreenCanvas {\n constructor(width, height) {\n this.canvas = document.createElement(\"canvas\");\n this.canvas.width = width;\n this.canvas.height = height;\n\n this.canvas.convertToBlob = () => {\n return new Promise(resolve => {\n this.canvas.toBlob(resolve);\n });\n };\n\n return this.canvas;\n }\n };\n }\n\n let offscreenWidth = 800;\n let offscreenHeight = 800;\n\n if (this.element && this.element.width && this.element.height){\n offscreenWidth = this.element.width;\n offscreenHeight = this.element.height;\n }\n\n // REALBUILD\n this.contentCanvas = new OffscreenCanvas(offscreenWidth, offscreenHeight);\n this.contentContext = this.contentCanvas.getContext('2d');\n this.annotateCanvas = new OffscreenCanvas(offscreenWidth, offscreenHeight);\n this.annotateContext = this.annotateCanvas.getContext('2d');\n\n if (wkData.prism_view_text_adjustments && !this.productHasFoilText)\n this.productHasFoilText = hasFoilText(wkData.prism_view_text_adjustments);\n\n if (this.productHasFoilText == true) {\n this.foilTextCanvas = new OffscreenCanvas(offscreenWidth, offscreenHeight,);\n this.foilTextContext = this.foilTextCanvas.getContext('2d');\n };\n\n this.el.addClass('prism-viewport-canvas');\n this.el.on('focusin', () => {\n _this.queueRedraw('focusin');\n });\n this.el.on('focusout', () => {\n _this.queueRedraw('focusout');\n });\n this.el.on('keydown', ({ originalEvent: event }) => {\n const ymod = 10;\n const xmod = 10;\n const angleMod = 1;\n const shiftMod = event.shiftKey ? 3 : 1;\n\n switch (event.keyCode) {\n case 83: // s\n case 40: // ArrowDown\n // Handle 'downwards'\n if (_this.selected && _this.selected.stackable() && event.altKey) {\n event.preventDefault();\n event.ctrlKey || event.metaKey\n ? // Decrease selected slot's Z-index\n _this.decreaseIndex()\n : // Move selected slot down\n event.shiftKey &&\n _this.selected.moveTo(_this.selected.x, _this.selected.y + 8);\n break;\n }\n if (_this.selected && _this.selected.isImage)\n _this.selected.moveImgBy(0, -1 * ymod * shiftMod);\n break;\n case 87: // w\n case 38: // ArrowUp\n // Handle 'upwards'\n if (_this.selected && _this.selected.stackable() && event.altKey) {\n event.preventDefault();\n event.ctrlKey || event.metaKey\n ? // Increase selected slot's Z-index\n _this.increaseIndex()\n : // Move selected slot up\n event.shiftKey &&\n _this.selected.moveTo(_this.selected.x, _this.selected.y - 8);\n break;\n }\n if (_this.selected && _this.selected.isImage)\n _this.selected.moveImgBy(0, 1 * ymod * shiftMod);\n break;\n case 65: // a\n case 37: // ArrowLeft\n // Handle 'leftwards'\n if (\n _this.selected &&\n _this.selected.stackable() &&\n event.altKey &&\n event.shiftKey\n ) {\n event.preventDefault();\n event.ctrlKey || event.metaKey\n ? // Rotate selected slot 'anti-clockwise'\n _this.selected.isImage\n ? _this.rotate(-5)\n : _this.selected.keyRotate(-5)\n : // Move selected slot left\n _this.selected.moveTo(_this.selected.x - 8, _this.selected.y);\n break;\n }\n if (_this.selected && _this.selected.isImage)\n _this.selected.moveImgBy(-1 * xmod * shiftMod, 0);\n break;\n case 68: // d\n case 39: // ArrowRight\n // Handle 'rightwards'\n if (\n _this.selected &&\n _this.selected.stackable() &&\n event.altKey &&\n event.shiftKey\n ) {\n event.preventDefault();\n event.ctrlKey || event.metaKey\n ? // Rotate selected slot 'clockwise'\n _this.selected.isImage\n ? _this.rotate(5)\n : _this.selected.keyRotate(5)\n : // Move selected slot right\n _this.selected.moveTo(_this.selected.x + 8, _this.selected.y);\n break;\n }\n if (_this.selected && _this.selected.isImage)\n _this.selected.moveImgBy(xmod * shiftMod, 0);\n break;\n case 82: // r\n // Rotate\n if (_this.selected && _this.selected.isImage)\n _this.rotate(event.shiftKey ? 90 : -90);\n break;\n case 84: // t\n if (_this.selected && _this.selected.isText)\n _this.selected.keyRotate(event.shiftKey ? -3 : 3);\n break;\n case 13: // Enter\n if (!_this.selected) _this.selectSlotByIndex(0);\n else {\n EventEmitter.emit(PrismUI.SLOT_ACTIVATE, {\n view: _this,\n slot: _this.selected,\n });\n }\n if (_this.selected.isText) this.clickFixedTextSlot();\n break;\n case 27: // Escape\n if (_this.selected) _this.deselectAll();\n break;\n case 67: // c\n _this.setFilter('colour');\n break;\n case 66: // b\n _this.setFilter('greyscale');\n break;\n case 86: // v\n _this.setFilter('sepia');\n break;\n case 187: // Equal\n if (_this.selected && _this.selected.isImage)\n _this._scrollWheelZoom(_this.selected, 10 * shiftMod);\n break;\n case 189: // Minus\n if (_this.selected && _this.selected.isImage)\n _this._scrollWheelZoom(_this.selected, -10 * shiftMod);\n break;\n case 78: // n\n _this.straightenBy(-1 * angleMod * shiftMod);\n break;\n case 77: // m\n _this.straightenBy(angleMod * shiftMod);\n break;\n case 188: // Comma\n _this.brightenBy(-0.1 * shiftMod);\n break;\n case 190: // Period\n _this.brightenBy(0.1 * shiftMod);\n break;\n case 9: // Tab\n if (\n !event.shiftKey &&\n _this.selected &&\n _this.selectedIndex + 1 < _this.slots.length\n ) {\n _this.selectNextSlot();\n } else if (\n event.shiftKey &&\n _this.selected &&\n _this.selectedIndex > 0\n ) {\n _this.selectPreviousSlot();\n } else {\n return;\n // allow default\n }\n break;\n case 8: // Backspace\n case 46: // Delete\n if (_this.selected && _this.selected.isImage) {\n const slot = _this.selected;\n\n if (!_this.selected.isEmbellishment() && slot.img) {\n slot.view.removeImageFromSlot(slot.id);\n } else if (slot.stackable()) {\n slot.view.deleteSlotById(slot.id);\n }\n }\n break;\n case 49: // 1\n case 50: // 2\n case 51: // 3\n case 52: // 4\n case 53: // 5\n case 54: // 6\n case 55: // 7\n case 56: // 8\n case 57: // 9\n const { key: index } = event;\n _this.selectSlotByIndex(index - 1);\n break;\n case 48: // 0\n _this.deselectAll();\n break;\n default:\n return;\n }\n\n event.preventDefault();\n _this.queueRedraw('key event');\n });\n // this.el.on('dblclick', e => {\n // e.stopPropagation();\n // if (!_this.ready(e)) return;\n // _this.doubleClickTextSlot();\n // return false;\n // });\n this.el.on('click', e => {\n e.stopPropagation();\n if (!_this.ready(e)) return;\n _this.clickFixedTextSlot();\n return false;\n });\n this.el.on(MOUSE_DOWN, e => {\n if (!_this.ready(e)) return;\n _this.activateView();\n _this.control = false;\n _this.drag = false;\n e.preventDefault();\n _this.mouseDown(_this.slotIndex(_this.relativePoint(e)), e);\n return false;\n });\n this.el.on(MOUSE_UP, e => {\n if (!_this.ready(e)) return;\n _this.activateView();\n e.preventDefault();\n _this.mouseUp(\n _this.slotIndex(_this.relativePoint(e), { dragIsActive: true }),\n e\n );\n return false;\n });\n this.el.on(MOUSE_MOVE, e => {\n if (!_this.ready(e)) return;\n e.preventDefault();\n _this.mouseMove(\n _this.slotIndex(_this.relativePoint(e), { dragIsActive: true }),\n e\n );\n return false;\n });\n this.el.on('dragover dragenter dragleave', (e, syntheticEvent) => {\n e = syntheticEvent || e;\n if (!_this.ready(e) || _this.saveBlocked) return;\n _this.activateView();\n _this.dragImageHover(e);\n e.preventDefault();\n return false;\n });\n this.el.on('drop', e => {\n if (!_this.ready(e) || _this.saveBlocked) return;\n _this.activateView();\n e.stopPropagation();\n _this.onDrop(_this.slotIndex(_this.relativePoint(e)), e);\n return false;\n });\n this.el.on('mouseover', e => {\n if (!_this.ready(e)) return;\n _this.mouseIn(_this.slotIndex(_this.relativePoint(e)), e);\n return false;\n });\n this.el.on('mouseout', e => {\n if (!_this.ready(e)) return;\n _this.mouseOut(_this.slotIndex(_this.relativePoint(e)), e);\n return false;\n });\n this.el.on('mousewheel', e => {\n if (!_this.ready(e)) return;\n _this.scrollWheel(_this.slotIndex(_this.relativePoint(e)), e);\n return false;\n });\n this.el.on('DOMMouseScroll', e => {\n if (!_this.ready(e)) return;\n _this.scrollWheel(_this.slotIndex(_this.relativePoint(e)), e);\n return false;\n });\n if (template) {\n this.loadTemplate(template);\n\n if (data) {\n this.setData(data);\n }\n this.do_save();\n }\n\n EventEmitter.on(PrismUI.PAGE_CHANGED_OUTSIDE_EDITOR, (payload) => {\n if (payload.page.index == this.pageIndex) {\n // it's us - update\n this.setData(payload.page);\n this.queueRedraw();\n }\n })\n }\n\n static IMAGE_EDIT = 1;\n\n static LAYOUT_EDIT = 2;\n\n static SLOT_MANIPULATION = 4;\n\n static slotHasUserData (slot) {\n if (!slot) return;\n if (!slot.data) return;\n const data = slot.data();\n\n switch (slot.content_type || slot.type) {\n case 'text':\n return data.string && data.string.length && true;\n case 'image':\n return data.url && data.url.length && true;\n }\n };\n\n static hasUserData (data) {\n let slot;\n let _i;\n let _len;\n let _ref;\n if ((data != null ? data.slots : void 0) != null) {\n _ref = data.slots;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n slot = _ref[_i];\n if (PrismViewCanvas.slotHasUserData(slot)) return true;\n }\n }\n return false;\n };\n\n setMode (mode) {\n if (\n this.selected?.stackable() &&\n !this.template.context_canvas &&\n mode !== PrismViewCanvas.SLOT_MANIPULATION\n ) {\n this.selected.setSlotState(\n this.selected.isUnconfirmedTextSlot ? 'editing' : 'moving'\n );\n }\n\n return this.queueRedraw();\n };\n\n ready (e) {\n return (\n this.editable &&\n this.template &&\n this.inDOM() &&\n this.el.hasClass('showing')\n );\n };\n\n active () {\n return (\n this === window.activeView && this.inDOM() && this.el.hasClass('showing')\n );\n };\n\n inDOM () {\n return (\n window.getComputedStyle &&\n window.getComputedStyle(this.element).display !== 'none'\n );\n };\n\n hasTexts () {\n if (!this.editable) return false;\n if (this.template) return this.template.tso.length > 0;\n return false;\n };\n\n hasPhotos () {\n if (!this.editable) return false;\n if (this.template) return this.template.pso.length > 0;\n return false;\n };\n\n changeTemplate (template) {\n return this.loadTemplate(template);\n };\n\n setFilter (filter, slot) {\n slot = slot || this.selected;\n if (!slot || !slot.isImage) return;\n if (slot.setFilter(filter)) {\n this.do_save();\n this.queueRedraw('filter changed');\n }\n };\n\n brightenBy (value, slot) {\n slot = slot || this.selected;\n if (!slot || !slot.isImage) return;\n if (slot.brightenBy(value)) {\n this.do_save();\n this.queueRedraw('gamma changed');\n }\n };\n\n loadTemplateAndData (template, data) {\n this.suppressSave('load-template-and-data', () => {\n this.loadTemplate(template);\n this._setData(data);\n });\n };\n\n loadTemplate (template, noSave) {\n let id;\n let im;\n let imageProps;\n let p;\n let re;\n let slot;\n let slot_data;\n let _fn;\n let _i;\n let _j;\n let _k;\n let _len;\n let num_photo_slots;\n let num_text_slots;\n let photo_slots;\n let text_slots;\n let slot_id;\n let _ref5;\n let _ref6;\n const _this = this;\n this.theme_loading = true;\n this.template = template;\n this.slots = [];\n if (!template.size && !template['pixel-size']) {\n throw 'Incomplete template';\n }\n if (window.TemplateCache) {\n TemplateCache.get(template.id, () => {});\n }\n try {\n this.clearCanvas('loadTemplate');\n } catch (ez) {\n wkLogger.error(ez);\n }\n this.do_selectTheme(this.template.id);\n imageProps = ['fgImage', 'bgImage', 'lfgImage', 'lbgImage'];\n _fn = function(p) {\n _this[p] = new Image();\n return $(_this[p]).on('load', e =>\n _this.queueRedraw(`${p} loaded : ${_this[p].src}`)\n );\n };\n for (_i = 0, _len = imageProps.length; _i < _len; _i++) {\n p = imageProps[_i];\n _fn(p);\n }\n this.updateSize(false);\n\n this.overlays = {};\n this.editableArea = null;\n this.acceptsUserContent = false;\n\n if (this.template.id != '@blank') {\n this.editableArea = this.template['context-area'] || [\n 0,\n 0,\n this.template.size.width,\n this.template.size.height,\n ];\n this.acceptsUserContent =\n this.editableArea[IU.X] + this.editableArea[IU.WIDTH] > -1 &&\n this.editableArea[IU.Y] + this.editableArea[IU.HEIGHT] > -1;\n\n this.fgImage.crossOrigin = 'use-credentials';\n this.fgImage.src = this.template.over;\n this.bgImage.crossOrigin = 'use-credentials';\n this.bgImage.src = this.template.back;\n this.lfgImage.crossOrigin = 'use-credentials';\n\n const size = this.isDoubleCover() ? 'dbl' : 'lrg';\n\n this.lfgImage.src =\n (this.template.prefix || '') +\n this.fgImage.src.replace(/fg\\.ui\\.png/, `${size}.fg.ui.png`);\n this.lbgImage.crossOrigin = 'use-credentials';\n this.lbgImage.src =\n (this.template.prefix || '') +\n this.bgImage.src.replace(/bg\\.ui\\.png/, `${size}.bg.ui.png`);\n\n if (this.template.overlays) {\n for (let j = 0; j < this.template.overlays.length; j++) {\n (function(index, overlay) {\n const im = new Image();\n im.crossOrigin = 'use-credentials';\n im.onload = this.queueRedraw.bind(this, `loaded ${template.id}`);\n im.src = overlay.src;\n this.overlays[index] = im;\n }.bind(this)(j, this.template.overlays[j]));\n }\n }\n\n photo_slots = this.template.pso;\n for (\n _j = 0, num_photo_slots = photo_slots.length;\n _j < num_photo_slots;\n _j++\n ) {\n id = photo_slots[_j];\n this.addPhotoSlot(this.template.photo_slots[id]);\n }\n\n text_slots = template.tso;\n for (\n _k = 0, num_text_slots = text_slots.length;\n _k < num_text_slots;\n _k++\n ) {\n id = text_slots[_k];\n if (!(id != null)) continue;\n slot_data = this.template.text_slots[id.toString()];\n slot = new TextSlot(slot_data.id);\n slot._set('fontName', slot_data.font);\n slot._set('fontWeight', +(slot_data.weight.toLowerCase() !== 'normal'));\n slot._set('fontSlant', +(slot_data.style.toLowerCase() !== 'normal'));\n slot._set('fontSize', toInteger(slot_data.size, 12));\n slot._set('fontColour', tinycolor(slot_data.fill).toHexString());\n slot._set('stroke', slot_data.stroke);\n if (\n (slot_id = slot_data.id) === 'credits' ||\n slot_id === 'recipient' ||\n slot_id === 'message' ||\n slot_id === 'sender'\n ) {\n slot._set('string', '');\n } else {\n re = /(your text|text here|your message|name here|your name|name or message|^name|^message$)/i;\n if (re.test((_ref5 = slot_data.default) != null ? _ref5 : '')) {\n slot._set('string', '');\n } else {\n slot._set(\n 'string',\n (_ref6 = slot_data.default) != null ? _ref6 : ''\n );\n }\n }\n [slot.x, slot.y, slot.w, slot.h] = slot_data['pixel-coords'];\n slot_data.fromTemplate = true;\n slot._set('align', slot_data.align);\n slot._set('valign', slot_data.valign);\n\n // Override defaults\n if (slot_data.id === 'spine-text') {\n if (toInteger(slot_data.size) < 5) {\n slot._set('fontSize', 27);\n }\n slot._set('valign', 'middle');\n }\n\n im = slot_data.imatrix;\n slot.imatrix = new MyMatrix(im[0], im[1], im[2], im[3], im[4], im[5]);\n im = slot_data.matrix;\n slot.matrix = new MyMatrix(im[0], im[1], im[2], im[3], im[4], im[5]);\n slot._set('scale', this.scale);\n slot.fromTemplate = true;\n slot.inEditableArea = slot.insideRectangle(this.editableArea);\n slot.editable = false;\n slot.locked = slot_data.locked;\n slot.meta = slot_data;\n this.addTextSlot(slot);\n }\n }\n this.deselectAll();\n this.theme_loading = false;\n\n return this.updateSize(true);\n };\n\n outputDimensions () {\n let width, height;\n\n if (!this.template) return;\n\n if (this.template['print-area']) {\n [, , width, height] = this.template['print-area'];\n return { width, height };\n }\n if (this.template['context-area']) {\n [, , width, height] = this.template['context-area'];\n return { width, height };\n }\n // This is an object with width & height\n return this.template.size;\n };\n\n eventOffset (event) {\n let ex;\n let ey;\n let touch;\n\n // Used for <DragItem />\n if (!event.originalEvent) {\n // event.touches is empty when releasing so you need\n // to use event.changedTouches\n const touches =\n (event.touches && event.touches[0]) ||\n (event.changedTouches && event.changedTouches[0]) ||\n {};\n\n // You can't modify the React SyntheticEvent so use\n // a jQuery event instead\n return $.Event('touchmove', {\n pageX: touches.clientX,\n pageY: touches.clientY,\n });\n }\n\n if (event.originalEvent.changedTouches) {\n touch = event.originalEvent.changedTouches[0];\n if (touch) {\n ex = touch.pageX;\n ey = touch.pageY;\n }\n }\n\n if (!(ex || ey)) {\n ex = event.pageX;\n ey = event.pageY;\n\n if (ex || ey) return event;\n }\n\n if (!(ex || ey)) {\n ex = event.originalEvent.pageX;\n ey = event.originalEvent.pageY;\n }\n\n if (!(ex || ey)) {\n if (event.originalEvent.touches) {\n touch = event.originalEvent.touches[0];\n if (touch) {\n ex = touch.pageX;\n ey = touch.pageY;\n }\n }\n }\n event.pageX = ex;\n event.pageY = ey;\n\n return event;\n };\n\n relativePoint (event) {\n event = this.eventOffset(event);\n const pos = this.el.offset();\n\n if (pos) {\n const scale = this.element.clientWidth / this.element.width;\n\n return {\n x: (event.pageX - pos.left - this.xOffset) / (scale * this.scale),\n y: (event.pageY - pos.top - this.yOffset) / (scale * this.scale),\n };\n }\n\n return {\n x: 0,\n y: 0,\n };\n };\n\n activateView () {\n if (this.blank) return;\n\n usePrismItemStore.setState(({ prismItem }) => ({\n prismItem: { ...prismItem, currentPage: this.pageIndex },\n }));\n\n if (window.activeView !== this) {\n if (window.prismViews) {\n for (const k in prismViews) {\n if (prismViews[k].selectSlotById) {\n prismViews[k].selectSlotById(null);\n }\n }\n }\n\n const oldView = activeView;\n\n window.activeView = this;\n }\n };\n\n clearCanvas (reason) {\n if (!this.element.getContext) return;\n this.context = this.element.getContext('2d');\n return this.context.clearRect(\n 0,\n 0,\n this.element.clientWidth,\n this.element.clientHeight\n );\n };\n\n updateSize (auto_redraw) {\n let i,\n minDim,\n oldscale,\n slot,\n theight,\n tpr,\n twidth,\n vpheight,\n vpr,\n vpwidth,\n xoff,\n yoff;\n vpwidth = this.element.width;\n vpheight = this.element.height;\n this.contentCanvas.width = vpwidth;\n this.contentCanvas.height = vpheight;\n this.annotateCanvas.width = vpwidth;\n this.annotateCanvas.height = vpheight;\n if (this.productHasFoilText && this.productHasFoilText == true) {\n this.foilTextCanvas.width = vpwidth;\n this.foilTextCanvas.height = vpheight;\n };\n vpr = (vpwidth + 0.0) / vpheight;\n oldscale = this.scale;\n xoff = this.xOffset;\n yoff = this.yOffset;\n if (this.template) {\n if (!this.template.size) {\n this.template.size = this.template['pixel-size'];\n }\n twidth = this.template.size.width;\n theight = this.template.size.height;\n\n if (auto_redraw) {\n let extraResize = 2;\n if (this.isDoubleCover()) extraResize = 4;\n\n this.el.attr('width', twidth * extraResize);\n this.el.attr('height', theight * extraResize);\n }\n\n tpr = (twidth + 0.0) / theight;\n if (tpr > vpr) {\n this.scale = (vpwidth + 0.0) / twidth;\n } else {\n this.scale = (vpheight + 0.0) / theight;\n }\n if (this.scale > 2.0 && !this.isDoubleCover()) this.scale = 2.0;\n this.xOffset = parseInt((vpwidth - this.scale * twidth) / 2, 10);\n this.yOffset = 0;\n } else {\n minDim = vpwidth;\n if (minDim > vpheight) minDim = vpheight;\n this.scale = minDim / 400.0;\n if (this.scale > 2.0) this.scale = 2.0;\n }\n if (this.slots) {\n i = 0;\n while (i < this.slots.length) {\n slot = this.slots[i];\n try {\n if (slot) {\n if (slot.isText && slot.setScale) {\n slot.setScale(this.scale);\n } else {\n slot.viewscale = this.scale;\n }\n }\n } catch (e) {\n wkLogger.error(e, {\n slot,\n });\n }\n i += 1;\n }\n }\n if (auto_redraw) return this.queueRedraw();\n };\n\n queueRedraw (reason) {\n this.updateSize(false);\n return this.redraw();\n };\n\n redraw (reason, highlight = false) {\n this.highlight = highlight;\n if (highlight) this.setWrapperBorder(false);\n this.pending_redraw = true;\n return true;\n };\n\n stopRedraw () {};\n\n allowRedraw () {\n if (this.pending_redraw) return this.redraw();\n };\n\n draw_wrapper (method, what, ctx) {\n const args = Array.prototype.slice.call(arguments, 1);\n let err;\n let response;\n if (this.debug_render_time) console.time(what);\n ctx.save();\n try {\n response = method.call(this, ctx);\n } catch (e) {\n if (window.debugPrism) console.error(`view.render.${what} - %o`, e);\n } finally {\n ctx.restore();\n }\n if (this.debug_render_time) console.timeEnd(what);\n\n return response;\n };\n\n _draw_clear () {\n this.context.clearRect(0, 0, this.element.width, this.element.height);\n this.contentContext.clearRect(0, 0, this.element.width, this.element.height);\n this.annotateContext.clearRect(0, 0, this.element.width, this.element.height);\n };\n\n _draw_spy (ctx) {\n if (!this.debug_save_restore) return;\n if (!ctx.XX) {\n (function(ctx) {\n let i = 0;\n const sv = ctx.save.bind(ctx);\n ctx.save = function() {\n const e = new Error();\n console.warn('%i save - %s', i++, e.stack.split(/\\n/)[2]);\n sv();\n };\n const rs = ctx.restore.bind(ctx);\n ctx.restore = function() {\n const e = new Error();\n console.warn('%i restore - %s', --i, e.stack.split(/\\n/)[2]);\n rs();\n };\n ctx.XX = true;\n })(ctx);\n }\n };\n\n _draw_hatch() {\n const ctx = this.context;\n let i;\n ctx.beginPath();\n ctx.fillStyle = '#fff';\n ctx.fillRect(0, 0, this.element.width, this.element.height);\n ctx.lineWidth = 5;\n ctx.strokeStyle = '#f7f7f7';\n for (i = -1 * this.element.height; i < this.element.width; i += 30) {\n ctx.moveTo(i + this.element.height, 0);\n ctx.lineTo(i, this.element.height);\n }\n ctx.stroke();\n ctx.lineWidth = 2;\n ctx.strokeStyle = '#d9d9d9';\n ctx.strokeRect(1, 1, this.element.width - 2, this.element.height - 2);\n };\n\n _draw_text_for_blank() {\n const ctx = this.context;\n const twidth = (this.template.size.width * this.scale) / 2;\n const theight = (this.template.size.height * this.scale) / 2;\n const clientBaseFont = window\n .getComputedStyle(document.body, null)\n .getPropertyValue('font-family')\n .split('-')[0];\n\n ctx.fillStyle = '#6d6e71';\n // text1\n const text1 = 'Inside Cover';\n\n ctx.font = `32px ${clientBaseFont}-Bold`;\n\n const text1PosX = twidth - ctx.measureText(text1).width / 2 || twidth / 2;\n const text1Height =\n ctx.measureText(text1).actualBoundingBoxAscent +\n ctx.measureText(text1).actualBoundingBoxDescent || 32;\n const text1PosY = theight - text1Height / 2;\n\n ctx.globalCompositeOperation = 'source-over';\n ctx.fillText(text1, text1PosX, text1PosY);\n\n // text2\n const text2 = 'This will remain blank';\n ctx.font = `24px ${clientBaseFont}-Regular`;\n\n const text2PosX = twidth - ctx.measureText(text2).width / 2 || twidth / 2;\n const text2Height =\n ctx.measureText(text1).actualBoundingBoxAscent +\n ctx.measureText(text1).actualBoundingBoxDescent || 24;\n const text2PosY = text1PosY + text2Height / 2 + text1Height;\n\n ctx.globalCompositeOperation = 'source-over';\n ctx.fillText(text2, text2PosX, text2PosY);\n };\n\n _draw_inside_cover() {\n this._draw_hatch();\n };\n\n _redraw (reason, highlight = false) {\n let ctx;\n let i;\n let rect;\n let slot;\n let theight;\n let twidth;\n let _i;\n let _len;\n let _ref;\n\n if (!this.inDOM()) {\n // Ignore redraws when canvas is not visible.\n return;\n }\n\n this.pending_redraw = false;\n this.timeoutID = null;\n if (!this.template) return;\n if (!this.context) {\n if (this.element.getContext) {\n this.context = this.element.getContext('2d');\n } else {\n return false;\n }\n }\n\n ctx = this.context;\n\n if (!ctx) {\n // alert(\"Trying to draw, but unable to get context...?\");\n return false;\n }\n if (this.debug_render_time) console.time('drawAll');\n\n this._draw_clear();\n\n this._draw_spy(ctx);\n\n if (this.blank) {\n switch (this.hatch) {\n case 'blank':\n case 'lines':\n this._draw_hatch(this.annotateContext);\n this._draw_text_for_blank(this.annotateContext);\n break;\n case 'inside-cover':\n this._draw_inside_cover(this.annotateContext);\n break;\n }\n return;\n }\n\n this.draw_wrapper(function(ctx) {\n ctx.translate(this.xOffset, this.yOffset);\n ctx.scale(this.scale, this.scale);\n\n // if (imgComplete(this.bgImage)) ctx.drawImage(this.bgImage, 0, 0);\n this.draw_wrapper(function(ctx) {\n if (\n this.scale > 1 &&\n this.lbgImage &&\n imgComplete(this.lbgImage) &&\n this.lbgImage.width > 0\n ) {\n ctx.scale(1 / this.scale, 1 / this.scale);\n ctx.drawImage(this.lbgImage, 0, 0);\n } else if (imgComplete(this.bgImage)) {\n ctx.drawImage(this.bgImage, 0, 0);\n }\n }, 'draw.bgImage', this.contentContext);\n\n i = 0;\n while (i < this.slots.length) {\n slot = this.slots[i];\n if (slot.isImage && !slot.stackable() && !this.slotIsOverridden(slot)) {\n this.draw_wrapper((ctx) => {\n // ctx.rect(1, 1, this.template.size.width - 2, this.template.size.height - 2);\n // ctx.clip();\n slot.draw(ctx);\n }, `draw.slot.${slot.id}`, this.contentContext);\n }\n i += 1;\n }\n }, 'bgAndSlots', this.contentContext);\n\n this.draw_wrapper(function(ctx) {\n ctx.translate(this.xOffset, this.yOffset);\n ctx.scale(this.scale, this.scale);\n if (false && window.wkData && window.wkData.product.type === 'album') {\n // XXX: nasty hacky way to avoid showing bleed overlay\n // WM only have backgrounds\n } else if (\n this.scale > 1 &&\n this.lfgImage &&\n imgComplete(this.lfgImage) &&\n this.lfgImage.width > 0\n ) {\n ctx.scale(1 / this.scale, 1 / this.scale);\n ctx.drawImage(this.lfgImage, 0, 0);\n } else if (imgComplete(this.fgImage)) {\n ctx.drawImage(this.fgImage, 0, 0);\n }\n }, 'draw.fgImage', this.contentContext);\n\n if (!this.typeIs(/^(canvas|album|framedcanvas)/)) {\n // if (this.show_overlays) this.drawOverlays(ctx, this.contentContext); // REALBUILD\n if (this.show_overlays) this.drawOverlays(this.contentContext);\n }\n\n this.draw_wrapper(function(ctx) {\n if (\n this.template.context_canvas &&\n typeof this.template.context_area !== 'undefined'\n ) {\n rect = this.template.context_area;\n ctx.translate(this.xOffset, this.yOffset);\n ctx.scale(this.scale, this.scale); // XXX : is this used?\n\n ctx.lineWidth = 1;\n ctx.globalAlpha = 0.3;\n ctx.fillRect(0, 0, this.template.size.width, rect[1]);\n ctx.fillRect(0, rect[1], rect[0], this.template.size.height - rect[1]);\n ctx.fillRect(\n rect[0],\n rect[1] + rect[3],\n rect[2],\n this.template.size.height - rect[1] - rect[3]\n );\n ctx.fillRect(\n rect[0] + rect[2],\n rect[1],\n this.template.size.width - rect[2] - rect[0],\n this.template.size.height - rect[1]\n );\n ctx.globalAlpha = 1;\n ctx.strokeStyle = '#009';\n ctx.strokeRect(rect[0] - 0.5, rect[1] - 0.5, rect[2] + 1, rect[3] + 1);\n }\n }, 'draw.bounds', this.annotateContext);\n\n // draw shadows for photobook pages here...?\n this.draw_wrapper(function(ctx) {\n if (this.template.canvas) {\n let m = 1;\n if (window.activeView === this && this.selectable) {\n ctx.lineWidth = 5;\n m = 1;\n ctx.strokeStyle = '#ffc003';\n ctx.fillStyle = '#000';\n twidth = this.template.size.width * this.scale;\n theight = this.template.size.height * this.scale;\n ctx.strokeRect(\n Math.ceil(this.xOffset) + m * 0.5,\n Math.ceil(this.yOffset) + m * 0.5,\n Math.floor(twidth) - m,\n Math.floor(theight) - m\n );\n }\n }\n }, 'draw.pageSelectState', this.annotateContext);\n\n // We'll probably want to remove this when WM realise that\n // it's really confusing to display the wrong background colour\n // for no good reason other than someone liked it on a wireframe\n if (this.editable && this.selected && this.selected.shouldRender()) {\n this.draw_wrapper(function(ctx) {\n ctx.translate(this.xOffset, this.yOffset);\n ctx.scale(this.scale, this.scale);\n this.selected.drawControlBackground(ctx, true);\n }, 'draw.textControls', this.annotateContext);\n }\n\n _ref = this.getSlotsToDraw();\n if (_ref && _ref.length) {\n if (this.productHasFoilText === true) this.foilSlots = [];\n\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n slot = _ref[_i];\n if (slot && slot.shouldRender()) {\n this.draw_wrapper(function(ctx) {\n ctx.translate(this.xOffset, this.yOffset);\n ctx.scale(this.scale, this.scale);\n slot.draw(ctx);\n }, `draw.slot.${slot.id}`, this.contentContext);\n\n if (this.productHasFoilText === true && slot.id.includes('foiltext'))\n this.foilSlots.push(slot);\n }\n }\n\n if (\n wkData.three_dimensional_view.quick_preview_available === true &&\n this.productHasFoilText === true &&\n this.foilSlots.length >= 1\n ) {\n if (this.onFoilClear) {\n this.onFoilClear(this);\n }\n\n for (const slot of this.foilSlots) {\n this.draw_wrapper(\n function (ctx) {\n ctx.canvas.id = '3DFoil';\n ctx.translate(this.xOffset, this.yOffset);\n ctx.scale(this.scale, this.scale);\n slot.draw(ctx);\n },\n `draw.slot.${slot.id}`,\n this.foilTextContext,\n );\n }\n\n if (this.onFoilDraw) {\n this.onFoilDraw(this);\n }\n }\n }\n\n if (this.typeIs(/^(canvas|album|framedcanvas)/)) {\n if (this.show_overlays) this.drawOverlays(this.annotateContext);\n }\n\n if (this.wrapperHighlight) {\n this.draw_wrapper(function(ctx) {\n ctx.translate(0, 0);\n ctx.shadowBlur = 5;\n ctx.lineWidth = 5;\n ctx.strokeStyle = '#cd3695';\n ctx.strokeRect(0, 0, this.element.width, this.element.height);\n }, 'draw.wrapperHighlight', this.annotateContext);\n }\n\n if (\n this.selected &&\n this.selected.isImage &&\n this.editable\n ) {\n this.draw_wrapper(function(ctx) {\n ctx.translate(this.xOffset, this.yOffset);\n ctx.scale(this.scale, this.scale);\n if (\n this.selected.stackable() &&\n !this.highlight &&\n !genericHelpers.isMobileViewport()\n ) {\n this.selected.drawControls(ctx, true);\n this.selected.drawOrientationWarning(ctx, this.selected);\n this.selected.drawLowDpiWarning(ctx);\n } else {\n this.selected.drawHighlight(ctx);\n this.selected.drawOrientationWarning(ctx, this.selected);\n this.selected.drawLowDpiWarning(ctx);\n }\n }, 'draw.imageHighlight', this.annotateContext);\n }\n\n if (this.editable && this.selected && this.selected.isText) {\n this.draw_wrapper(function(ctx) {\n ctx.translate(this.xOffset, this.yOffset);\n ctx.scale(this.scale, this.scale);\n this.selected.drawControls(ctx, true);\n }, 'draw.textControls', this.annotateContext);\n }\n\n if (this.isLoading()) {\n this.draw_wrapper(function (ctx) {\n const sz = 30;\n const offset = sz + 6;\n const str = `${parseInt(this.loadStatus() * 100, 10)}%`;\n let text_size;\n\n twidth = this.template.size.width * this.scale;\n theight = this.template.size.height * this.scale;\n\n ctx.fillStyle = 'rgba(255,255,255,1)';\n ctx.beginPath();\n ctx.arc(twidth - offset, offset, sz, 0, Math.PI * 2);\n ctx.fill();\n\n ctx.beginPath();\n ctx.fillStyle = 'rgb(0,0,0)';\n ctx.font = '14px BogleWeb-Regular';\n text_size = ctx.measureText(str);\n ctx.fillText(\n str,\n twidth - offset - text_size.width / 2,\n offset + (text_size.height || ctx.measureText('0').width) / 2\n );\n\n ctx.strokeStyle = 'rgb(233,233,233)';\n ctx.lineWidth = 6;\n ctx.lineCap = 'round';\n\n ctx.beginPath();\n ctx.arc(twidth - offset, offset, sz, 0, Math.PI * 2);\n ctx.stroke();\n\n ctx.strokeStyle = '#cb2c90';\n ctx.lineWidth = 6;\n ctx.beginPath();\n ctx.arc(\n twidth - offset,\n offset,\n sz,\n 0 - Math.PI / 2,\n Math.PI * 2 * this.loadStatus() - Math.PI / 2\n );\n ctx.stroke();\n }, 'loading', this.annotateContext);\n }\n\n // REALBUILD\n this.context.drawImage(this.contentCanvas, 0, 0)\n this.context.drawImage(this.annotateCanvas, 0, 0)\n if (this.onDraw) {\n this.onDraw(this);\n }\n\n if (this.debug_render_time) console.timeEnd('drawAll');\n };\n\n typeIs (pattern) {\n const klass = '';\n if (window.wkData && wkData.product.type) {\n return wkData.product.type.match(pattern);\n }\n return undefined;\n };\n\n /**\n * This relies on pattern matching in the product id\n * probably reliable but there may be a more reliable way of doing this!\n *\n */\n subTypeIs (pattern) {\n if (window.wkData && wkData.product.id) {\n return wkData.product.id.match(pattern);\n }\n };\n\n hasFocus () {\n return document.activeElement === this.element;\n };\n\n drawOverlays (ctx) {\n this.draw_wrapper(function(ctx) {\n ctx.translate(this.xOffset, this.yOffset);\n ctx.scale(this.scale, this.scale); // XXX : is this used?\n\n const overlays = this.overlayImages();\n\n for (let i = 0; i < overlays.length; i++) {\n const overlay = overlays[i];\n if (overlay && overlay.complete && !overlay.error) {\n ctx.save();\n try {\n if (overlay.width > 400 || overlay.height > 400) {\n ctx.scale(0.5, 0.5);\n }\n ctx.drawImage(overlay, 0, 0);\n } catch (eg) {}\n ctx.restore();\n } else if (imgComplete(this.fgImage)) {\n ctx.drawImage(this.fgImage, 0, 0);\n }\n }\n }, 'draw.overlays', ctx);\n };\n\n slotIndex (point, { dragIsActive, allow, ignoreSelected } = {}) {\n let control;\n let i;\n let slot;\n\n allow = allow || (slot => true);\n\n // A drag/move is already active\n if (\n this.control &&\n this.drag &&\n dragIsActive &&\n this.selected &&\n this.selectedIndex === this.drag.index\n ) {\n return this.selectedIndex;\n }\n\n this.control = false;\n if (!this.slots) return null;\n\n // Check selected image first\n if (!ignoreSelected && this.selected && this.selected.stackable()) {\n slot = this.selected;\n if (allow(slot)) {\n control = slot.hasControlPoint(point.x, point.y);\n if (control) {\n this.control = control;\n return this.selectedIndex;\n }\n }\n }\n\n i = this.slots.length;\n while (i >= 1) {\n i -= 1;\n slot = this.slots[i];\n if (!allow(slot)) continue;\n\n if (slot && slot.hasPoint(point.x, point.y)) {\n this.control = slot.isText ? 'text' : 'image';\n return i;\n }\n }\n return null;\n };\n\n overlayImages () {\n if (!window.wkData) return null;\n const overlays = [];\n const values = [];\n\n for (const key in wkData.values) {\n values.push(wkData.values[key]);\n }\n\n for (let i = 0; i < this.template.overlays.length; i++) {\n const template = this.template.overlays[i];\n\n if (values.indexOf(template.id) !== -1) {\n overlays.push(this.overlays[i]);\n }\n }\n\n return overlays;\n };\n\n slotFind (name) {\n return this.slots.find(s => s.id === name);\n };\n\n addTextSlot (slot) {\n if (!slot.fromTemplate) slot.editable = true;\n\n slot.view = this;\n slot.constrain = this.editableArea;\n\n this.overriddenSlotIdsMemo = null;\n this.slots.push(slot);\n this.orderToZindex();\n\n slot.moveTo(slot.x, slot.y);\n slot.queueReload();\n };\n\n removeTextSlot (slot) {\n this.overriddenSlotIdsMemo = null;\n this.slots = this.slots.filter(s => s.id === slot.id);\n\n this.do_save();\n\n if (this.selected && slot.id === this.selected.id) {\n this._selectSlot(null, null);\n }\n return this.queueRedraw();\n };\n\n addPhotoSlot (slotData) {\n const slot = ImageSlot.from(slotData, {\n view: this,\n constrain: this.editableArea,\n });\n\n this.overriddenSlotIdsMemo = null;\n\n slot.inEditableArea = slot.insideRectangle(this.editableArea, true);\n slot.fromTemplate = true;\n\n if (slot.stackable()) {\n this.slots.push(slot);\n this.orderToZindex();\n } else {\n this.slots[slotData.index] = slot;\n }\n\n return slot;\n };\n\n startDragImage (index, e) {\n e = this.eventOffset(e);\n this.dragPending = null;\n\n return (this.drag = {\n control: this.control,\n index,\n x: e.pageX,\n y: e.pageY,\n });\n };\n\n startDragText (index, e) {\n e = this.eventOffset(e);\n this.dragPending = null;\n\n return (this.drag = {\n control: this.control,\n index,\n x: e.pageX,\n y: e.pageY,\n });\n };\n\n startMoveImage (index, e) {\n // e = this.eventOffset(e);\n this.dragPending = null;\n\n return (this.drag = {\n control: this.control,\n index,\n x: e.pageX,\n y: e.pageY,\n });\n };\n\n startDragImageLayout (index, e) {\n e = this.eventOffset(e);\n this.dragPending = null;\n\n return (this.drag = {\n control: this.control,\n index,\n x: e.pageX,\n y: e.pageY,\n });\n };\n\n setTextProperty (propName, value) {\n if (this.selected && this.selected.isText) {\n this.selected.setProperty(propName, value);\n this.selected.queueReload();\n }\n };\n\n setTextProperties (properties) {\n if (this.selected && this.selected.isText) {\n for (const property in properties) {\n if (properties.hasOwnProperty(property)) {\n this.selected.setProperty(property, properties[property]);\n }\n }\n this.selected.queueReload();\n }\n };\n\n clickFixedTextSlot() {\n // TBD: This method is likely not doing anything worthwhile\n if (this.selected && !this.selected.editable && this.selected.isText) {\n useSlotStore.getState().updateSlot(this.selected);\n }\n }\n\n mouseDown (index, e) {\n let curSelected;\n let slot;\n if (this.blank) return;\n if (!this.hasFocus()) {\n window.requestAnimationFrame(() => {\n this.element.focus();\n });\n }\n\n curSelected = this.selectedIndex;\n this.click(index, e);\n\n if (this.selectedIndex !== curSelected) return;\n if (!this.drag && index !== null) {\n stopEvent(e);\n this.dragModified = false;\n const slot = this.slots[index];\n slot.resetXYWH();\n switch (this.mode) {\n case PrismViewCanvas.IMAGE_EDIT:\n if (slot.isImage) {\n this.setDragActive(e);\n this.startDragImage(index, e);\n slot.slotState = 'panning';\n }\n break;\n case PrismViewCanvas.SLOT_MANIPULATION:\n this.setDragActive(e);\n this.startMoveImage(index, e);\n break;\n case PrismViewCanvas.LAYOUT_EDIT:\n break;\n }\n }\n };\n\n setDragActive (e) {\n $(document.body).addClass('editor-drag');\n if (this.element.setPointerCapture && e.pointerId)\n this.element.setPointerCapture(e.pointerId);\n };\n\n setDragNotActive (e) {\n $(document.body).removeClass('editor-drag');\n if (this.element.releasePointerCapture && e.pointerId)\n this.element.releasePointerCapture(e.pointerId);\n };\n\n hide () {\n this.element.style.display = 'none';\n };\n\n show () {\n this.element.style.display = 'inline-block';\n };\n\n calculateImageSlotOnDropDimensions (photoData, maxSlotSize) {\n const { height: imageHeight, width: imageWidth } = photoData;\n const imageSizeRelation = imageHeight / imageWidth;\n let adjustedImageHeight = maxSlotSize;\n let adjustedImageWidth = maxSlotSize;\n\n if (imageSizeRelation >= 1) {\n adjustedImageWidth = maxSlotSize / imageSizeRelation;\n } else {\n adjustedImageHeight = maxSlotSize * imageSizeRelation;\n }\n return { height: adjustedImageHeight, width: adjustedImageWidth };\n };\n\n calculateImageSlotOnDropPosition (e, imageSize) {\n const relativePointerPosition = this.relativePoint(e);\n return {\n x: relativePointerPosition.x - imageSize.width / 2,\n y: relativePointerPosition.y - imageSize.height / 2,\n };\n };\n\n createImageSlotOnDrop (e) {\n const slot = customSlots.photos.add({ view: this });\n sendToGoogleAnalytics('stackable-photo', 'add-on-drop');\n\n if (!slot) return;\n const photoId = e.originalEvent.dataTransfer.getData('photoId');\n const prismItem = usePrismItemStore.getState().prismItem;\n\n const photoData = prismItem.imageList.find(\n image => image.id === Number(photoId)\n );\n const wrapperDimensions = this.outputDimensions();\n const smallerSideSize = Math.min(...Object.values(wrapperDimensions));\n const maxSlotSize = Number((smallerSideSize / 4).toFixed(2));\n\n const imageSize = this.calculateImageSlotOnDropDimensions(\n photoData,\n maxSlotSize\n );\n const slotPosition = this.calculateImageSlotOnDropPosition(e, imageSize);\n\n slot.setClipSize(imageSize.width, imageSize.height);\n slot.enforceBounds(window.activeView.editableArea);\n slot.moveTo(slotPosition.x, slotPosition.y);\n return slot;\n };\n\n onDrop = async function onDrop(index, e) {\n this.setWrapperBorder(false);\n\n if (this.blank || (this.slots[index] && this.slots[index].id.match(/\\:/)))\n return;\n\n const data = this.getEventPayload(e);\n\n if (!data) return;\n\n if (data.photoId) {\n let imageSlot =\n this.topLayerImageSlotAcceptingImage(e) ||\n this.createImageSlotOnDrop(e);\n if (!imageSlot) return;\n const { photoId: id, url } = data;\n const imgData = { id, image: id, url };\n const img = fetchImage(imgHelpers.urlMunge(url), 'use-credentials');\n this.dropImage(e, img, imgData, imageSlot);\n\n return;\n }\n\n if (data.embellishmentId) {\n this.dropEmbellishment(e, data);\n return this.deselectAll();\n }\n\n if (data.colour) {\n this.dropColour(e, data.colour);\n return this.deselectAll();\n }\n\n if (data.layoutId) {\n const { layoutId: templateID, orientation } = data;\n\n this.activateView();\n\n useTemplateSelectStore\n .getState()\n .updateTemplateSelectStore({ templateID, orientation });\n\n useTabTray.getState().updateShowPhotosTray(true);\n\n return this.deselectAll();\n }\n\n if (data.themeName) {\n this.activateView();\n filledImageSlotConfirmation(() => {\n prismAction.set_theme(data.themeName, templateData => {\n const { historyStack } = this;\n historyStack.addToPushCallback(historyStack.setStepTheme, [\n templateData.theme,\n ]);\n });\n });\n }\n };\n\n isEditingState () {\n return this.selected.slotState === 'editing';\n };\n\n mouseUp (index, e) {\n if (this.blank) return;\n if (this.drag) {\n stopEvent(e);\n if (MOUSE_UP === 'mouseup') this.mouseMove(this.drag.index, e);\n switch (this.mode) {\n case PrismViewCanvas.IMAGE_EDIT:\n this.slots[this.drag.index].dragStopped();\n break;\n case PrismViewCanvas.SLOT_MANIPULATION:\n this.keepSelected = true;\n break;\n case PrismViewCanvas.LAYOUT_EDIT:\n break;\n }\n const slot = this.slots[this.drag.index];\n if (slot) {\n slot.resetXYWH();\n }\n this.drag = null;\n if (this.dragModified) {\n this.do_save();\n this.queueRedraw();\n }\n }\n this.clearGuides();\n this.setDragNotActive(e);\n };\n\n mouseMove (index, e) {\n if (this.selected && this.isEditingState()) return;\n if (this.blank) return;\n\n if (this.drag) {\n const slot = this.slots[this.drag.index];\n if (!slot) {\n return;\n }\n\n stopEvent(e);\n\n e = this.eventOffset(e);\n\n const scale = this.element.clientWidth / this.element.width;\n let dx = (e.pageX - this.drag.x) / (scale * this.scale);\n let dy = (e.pageY - this.drag.y) / (scale * this.scale);\n\n if (dx !== 0 || dy !== 0) this.dragModified = true;\n\n switch (this.mode) {\n case PrismViewCanvas.SLOT_MANIPULATION:\n switch (this.drag.control) {\n case 'text':\n case 'image':\n slot.moveTo(slot._x + dx, slot._y + dy);\n this.snap(slot);\n break;\n case 'top-right':\n case 'top-left':\n case 'bottom-right':\n case 'bottom-left':\n case 'top-middle':\n case 'middle-left':\n case 'middle-right':\n case 'bottom-middle':\n const coords = (() => {\n switch (this.drag.control) {\n case 'top-middle':\n return {\n handler: { x: slot._x + slot._w / 2, y: slot._y },\n opposite: {\n x: slot._x + slot._w / 2,\n y: slot._y + slot._h,\n },\n };\n case 'middle-right':\n return {\n handler: {\n x: slot._x + slot._w,\n y: slot._y + slot._h / 2,\n },\n opposite: { x: slot._x, y: slot._y + slot._h / 2 },\n };\n case 'middle-left':\n return {\n handler: { x: slot._x, y: slot._y + slot._h / 2 },\n opposite: { x: slot._x + slot._w, y: slot._y + slot._h / 2 }\n };\n case 'bottom-middle':\n return {\n handler: { x: slot._x + slot._w / 2, y: slot._y + slot._h },\n opposite: { x: slot._x + slot._w / 2, y: slot._y }\n };\n case 'top-left':\n return {\n handler: { x: slot._x, y: slot._y },\n opposite: { x: slot._x + slot._w, y: slot._y + slot._h }\n };\n case 'top-right':\n return {\n handler: { x: slot._x + slot._w, y: slot._y },\n opposite: { x: slot._x, y: slot._y + slot._h }\n };\n case 'bottom-right':\n return {\n handler: { x: slot._x + slot._w, y: slot._y + slot._h },\n opposite: { x: slot._x, y: slot._y }\n };\n case 'bottom-left':\n return {\n handler: { x: slot._x, y: slot._y + slot._h },\n opposite: { x: slot._x + slot._w, y: slot._y }\n };\n }\n })();\n\n const resizedCoords = Point.createResizeValues(\n this.relativePoint(e),\n coords,\n this.drag.control,\n slot\n );\n\n if (!resizedCoords) return;\n\n this.drawGuides();\n slot.resize(resizedCoords, this.drag.control);\n\n break;\n }\n setTimeout(() => {\n EventEmitter.emit('prism-edit-slot-moved', {\n view: this,\n slot,\n });\n }, 10);\n break;\n case PrismViewCanvas.IMAGE_EDIT:\n switch (this.drag.control) {\n case 'image':\n if (slot.isSticker()) {\n slot.moveTo(slot._x + dx, slot._y + dy);\n // this.startMoveImage(index, e);\n setTimeout(() => {\n EventEmitter.emit('prism-edit-slot-moved', {\n view: this,\n slot,\n });\n }, 10);\n } else {\n let { imatrix } = slot;\n const scale = slot.stackable() ? 3 : 1;\n\n if (slot.stackable()) {\n imatrix = MyMatrix.rotate(-slot.angle).invert();\n }\n\n let xy1 = [];\n let xy2 = [];\n\n xy1[0] = e.pageX - this.xOffset;\n xy1[1] = e.pageY - this.yOffset;\n\n xy2[0] = this.drag.x - this.xOffset;\n xy2[1] = this.drag.y - this.yOffset;\n\n dx = (xy1[0] - xy2[0]) * scale;\n dy = (xy1[1] - xy2[1]) * scale;\n\n this.slots[this.drag.index].moveImgBy(dx, dy);\n }\n break;\n }\n // this.startDragImage(this.drag.index, e);\n setTimeout(() => {\n EventEmitter.emit('prism-edit-slot-moved', {\n view: this,\n slot,\n });\n }, 10);\n\n break;\n }\n\n if (!(dx === 0 && dy === 0)) {\n return this.queueRedraw('Image drag');\n }\n\n return;\n } // end of if (this.drag) {\n\n if (index !== null) {\n const slot = this.slots[index];\n if (!slot || this.slotIsOverridden(slot)) {\n return;\n }\n\n const cornersArray = [\n 'image',\n 'text',\n 'top-left',\n 'up-down',\n 'top-right',\n 'left-right',\n ].join(' ');\n\n $(this.element).removeClass(cornersArray);\n if (slot.isMovingState()) {\n switch (this.control) {\n case 'image':\n if (slot.stackable() && !slot.isSticker()) {\n $(this.element).addClass(this.control);\n }\n break;\n case 'text':\n $(this.element).addClass(this.control);\n break;\n case 'top-left':\n case 'bottom-right':\n if (slot.stackable()) {\n $(this.element).addClass(nodeClass(slot));\n }\n break;\n case 'top-middle':\n case 'bottom-middle':\n if (slot.stackable()) {\n $(this.element).addClass(nodeClass(slot, 1));\n }\n break;\n case 'top-right':\n case 'bottom-left':\n if (slot.stackable()) {\n $(this.element).addClass(nodeClass(slot, 2));\n }\n break;\n case 'middle-right':\n case 'middle-left':\n if (slot.stackable()) {\n $(this.element).addClass(nodeClass(slot, 3));\n }\n break;\n }\n }\n\n function nodeClass({ angle: currentAngle }, rotate = 0) {\n const cursors = ['top-left', 'up-down', 'top-right', 'left-right'];\n\n let index = cornerCursorSegments.reduceRight(\n (accumulator, segment, index) =>\n currentAngle < segment ? index : accumulator,\n 0\n );\n\n index += rotate;\n\n return cursors[index % cursors.length];\n }\n }\n };\n\n mouseIn (index, e) {};\n\n mouseOut (index, e) {\n return index;\n };\n\n click(index, e) {\n e.stopPropagation();\n if (this.selected && this.isEditingState()) return;\n\n if (index === null) this.deselectAll();\n\n if (this.blank) return;\n wkLogger.log({\n index,\n event: e,\n });\n\n const clickedOnSlot = this.slots[index];\n\n if (clickedOnSlot && getViewport().isDesktop) {\n const interactionMode =\n clickedOnSlot.editable || !clickedOnSlot.isText ? 'moving' : 'editing';\n clickedOnSlot.setSlotState(interactionMode);\n }\n\n EventEmitter.emit('prism-edit-slot-click', {\n view: this,\n slot: clickedOnSlot,\n });\n\n if (index === this.selectedIndex) return;\n this._selectSlot(this.slots[index], index);\n return this.queueRedraw();\n }\n\n populateGuides (slot) {\n if (!this._snapster) return;\n\n const [x, y, width, height] = this.editableArea;\n\n this._snapster.populate([\n {\n x,\n y,\n width,\n height,\n type: 'page',\n },\n ...[\n ...this.slots.filter(\n slot => slot.stackable() && slot !== this.selected\n ),\n ].map(slot => ({\n x: slot.bounds().x,\n y: slot.bounds().y,\n width: slot.bounds().w,\n height: slot.bounds().h,\n type: 'normal',\n })),\n ]);\n };\n\n snap (slot) {\n if (!this._snapster) return;\n\n const { x, y, w: width, h: height } = slot.bounds();\n const offsetX = width - (width + slot.w) / 2;\n const offsetY = height - (height + slot.h) / 2;\n const position = this._snapster.snap({ x, y, width, height });\n\n slot.moveTo(position.x + offsetX, position.y + offsetY);\n };\n\n drawGuides () {\n if (!this._snapster) return;\n if (!this.selected) return;\n const { x, y, w: width, h: height } = this.selected.bounds();\n\n this._snapster.snap({ x, y, width, height });\n };\n\n clearGuides () {\n if (!this._snapster) return;\n this._snapster.clear();\n };\n\n slotRegion (slot) {\n const p1 = this.pointToPage(slot, slot.x, slot.y);\n const p2 = this.pointToPage(slot, slot.x, slot.y + slot.h);\n const p3 = this.pointToPage(slot, slot.x + slot.w, slot.y);\n const p4 = this.pointToPage(slot, slot.x + slot.w, slot.y + slot.h);\n\n const x1 = Math.min(p1[0], p2[0], p3[0], p4[0]);\n const x2 = Math.max(p1[0], p2[0], p3[0], p4[0]);\n const y1 = Math.min(p1[1], p2[1], p3[1], p4[1]);\n const y2 = Math.max(p1[1], p2[1], p3[1], p4[1]);\n return {\n x1,\n x2,\n y1,\n y2,\n };\n };\n\n pointToPage (slot, x, y) {\n const scale = this.element.clientWidth / this.element.width;\n const off = this.el.offset();\n let yo;\n let xo;\n if (slot.matrix) {\n const xy = slot.matrix.transform_point(x, y);\n xo = scale * (xy[0] + this.xOffset) * this.scale;\n yo = scale * (xy[1] + this.yOffset) * this.scale;\n return [off.left + xo, off.top + yo];\n }\n // Need to visit scaling for images\n xo = this.scale * scale * (x + this.xOffset);\n yo = this.scale * scale * (y + this.yOffset);\n return [off.left + xo, off.top + yo];\n };\n\n selectSlotById (slot_id) {\n let index;\n let slot;\n let _len;\n let _ref;\n _ref = this.slots;\n if (!_ref) return;\n for (index = 0, _len = _ref.length; index < _len; index++) {\n slot = _ref[index];\n if (slot.id === slot_id) return this._selectSlot(slot, index);\n }\n return this._selectSlot(null, null);\n };\n\n selectFirstImageSlot () {\n let i = 0;\n while (i < this.slots.length) {\n if (this.slots[i].acceptsImage()) {\n // This function was wrongly doing the logic of selectNextEmptyImageSlot\n this._selectSlot(this.slots[i], i);\n return this.slots[i].id;\n }\n i += 1;\n }\n return null;\n };\n\n selectFirstSlot () {\n for (let i = 0; i < this.slots.length; i++) {\n if (!this.slots[i].isOptionalBackground()) {\n const slot = this.slots[i];\n this._selectSlot(slot, i, { fireEvent: false });\n this.el.focus();\n\n useFocusedSlotStore.getState().updateFocusedSlot(slot);\n\n return slot.id;\n }\n }\n\n return null;\n };\n\n selectNextImageSlot () {\n let i = this.selectedIndex + 1;\n while (i < this.slots.length) {\n if (this.slots[i].acceptsImage()) {\n this._selectSlot(this.slots[i], i);\n return this.slots[i].id;\n }\n i += 1;\n }\n return null;\n };\n\n selectPreviousSlot () {\n let i = this.selectedIndex - 1;\n if (i > -1) {\n this._selectSlot(this.slots[i], i);\n return this.slots[i].id;\n }\n // should we check for background image?\n i = this.slots.length - 1;\n this._selectSlot(this.slots[i], i);\n\n return null;\n };\n\n selectSlotByIndex (index) {\n if (index >= 0 && index < this.slots.length) {\n this._selectSlot(this.slots[index], index);\n return this.slots[index].id;\n }\n this._selectSlot(null, null);\n\n return null;\n };\n\n selectNextSlot () {\n let i = this.selectedIndex + 1;\n if (i >= this.slots.length) {\n i = 0;\n }\n\n const slot = this.slots[i];\n\n this._selectSlot(slot, i, { fireEvent: false });\n this.el.focus();\n\n useFocusedSlotStore.getState().updateFocusedSlot(slot);\n\n return slot.id;\n };\n\n selectNextEmptyImageSlot () {\n let i = this.selectedIndex + 1;\n while (i < this.slots.length) {\n if (this.slots[i].acceptsImage() && !this.slots[i].img) {\n this._selectSlot(this.slots[i], i);\n return this.slots[i].id;\n }\n i += 1;\n }\n return null;\n };\n\n findFirstAvailableImageSlot () {\n const imageSlots = this.slots.filter(slot => slot.acceptsImage());\n if (imageSlots.length === 1) {\n return imageSlots[0].id;\n }\n\n return (imageSlots.find(slot => !slot.img) || {}).id;\n };\n\n deselectASlot (select_slot) {\n if (this.isEditingState()) {\n this.selected.slotState = 'moving';\n }\n\n if (this.selected === select_slot) {\n this._selectSlot(null, null);\n return this.queueRedraw();\n }\n };\n\n textSlotIsEmpty () {\n const editor = document.querySelector('.in-place__content');\n\n return editor.textContent.trim() === '' && this.selected.string === '';\n };\n\n deleteSelectedSlot () {\n const selectedSlot = this.selected;\n\n if (selectedSlot.fixed()) {\n this.setSlotStateAndSave('moving');\n return;\n }\n\n selectedSlot.view.deleteSlotById(selectedSlot.id);\n };\n\n saveOrDiscardTextSlot () {\n this.textSlotIsEmpty()\n ? this.deleteSelectedSlot()\n : this.selectAndSaveTextSlot();\n };\n\n selectAndSaveTextSlot () {\n const editor = document.querySelector('.in-place__content');\n\n const selectedSlot = this.selected;\n const pango = QuillHelpers.quillToPango(\n editor.innerHTML,\n selectedSlot.scale\n ).toString();\n\n selectedSlot.setString(pango);\n selectedSlot.isUnconfirmedTextSlot = false;\n this.setSlotStateAndSave('inactive');\n };\n\n setSlotStateAndSave (state) {\n this.selected.setSlotState(state);\n this.do_save();\n };\n\n deselectAll () {\n const selectedSlot = this.selected;\n\n if (selectedSlot && (selectedSlot.isText || !this.keepSelected)) {\n if (selectedSlot.isEditingState()) this.saveOrDiscardTextSlot();\n\n this._selectSlot(null, null);\n }\n\n this.keepSelected = false;\n return this.queueRedraw();\n };\n\n selectASlot (select_slot) {\n const previousIndex = this.selectedIndex;\n\n this.slots.forEach((slot, index) => {\n if (slot === select_slot) this._selectSlot(slot, index);\n });\n\n if (this.selectedIndex !== previousIndex) return this.queueRedraw();\n };\n\n _selectSlot (slot, index, options = {}) {\n if (slot && this.slotIsOverridden(slot)) {\n return;\n }\n\n const oldIndex = this.selectedIndex;\n\n if (oldIndex !== index) {\n this.do_save();\n }\n\n if (typeof index === 'number') {\n this.lastSelectedIndex = index;\n }\n\n wkLogger.log({\n selectSlot: 'yes',\n index,\n slot: this.slots[index],\n });\n\n if (index !== null && this.slots[index] && !this.slots[index].isClone()) {\n if (slot.canOverride()) {\n customSlots.text.overrideSlot(slot);\n return;\n }\n\n this.selected = slot;\n\n this.selectedIndex = index;\n\n useSlotStore.getState().updateSlot(this.selected);\n\n useSlotStore.getState().updateSlotIndex(this.selectedIndex);\n } else {\n this.selected = null;\n this.selectedIndex = null;\n\n // setting consumable store to null\n useSlotStore.getState().updateSlot(null);\n useSlotStore.getState().updateSlotIndex(null);\n }\n\n if (this.selected) {\n this.mode = PrismViewCanvas.IMAGE_EDIT;\n\n if (this.selected.stackable()) {\n if (this.selected.isInactiveState()) {\n this.selected.setSlotState('moving');\n }\n this.mode = PrismViewCanvas.SLOT_MANIPULATION;\n }\n\n if (this.canConvertPhotoFromTemplateToStackable(slot)) {\n this.setMode(PrismViewCanvas.SLOT_MANIPULATION);\n slot.convertFromTemplateToStackable(this.editableArea);\n this.orderToZindex();\n }\n\n this.populateGuides(slot);\n }\n\n if (oldIndex !== this.selectedIndex) {\n if (this.selected) {\n this.selected.activatedAt = new Date().getTime();\n }\n\n const { fireEvent = true } = options;\n if (fireEvent) {\n EventEmitter.emit('prism-edit-slot-changed', {\n view: this,\n slot: this.selected,\n });\n }\n }\n };\n\n canConvertPhotoFromTemplateToStackable (slot) {\n return (\n !genericHelpers.disallowStackable() &&\n this.template &&\n slot.isImage &&\n templateInterrogator.tagIntersect(this.template, 'blank-overlay') &&\n slot.permittedToBeStacked() &&\n wkData.builder_static_photos_editable\n );\n };\n\n removeImageFromSlot (slot_id, callback = () => {}) {\n each(this.slots, (slot, index) => {\n // Using match instead of equal will make sure we also clean out this slot mirrors if there is any\n if (slot.id === slot_id || slot.id.match(`${slot_id}:`)) {\n slot.clearData();\n }\n });\n this.keepSelected = true;\n this.deselectAll();\n this.do_save();\n this.queueRedraw('Slot emptied');\n // Investigate this \"callback\". Doesn't seem to be used anywhere;\n callback();\n };\n\n _scrollWheelZoom (toZoom, delta) {\n const zoomed = toZoom.zoomBy(0.05 * (delta / 3)); // Smoother zooming - was doing three 'clicks' at a time\n if (zoomed) {\n EventEmitter.emit(PrismUI.ZOOM_CHANGED, {\n zoom: zoomed,\n view: this,\n slot: toZoom,\n });\n this.stashFns.setEl1ZoomSlider(toZoom, zoomed);\n this.do_save();\n this.queueRedraw('Image zoomed');\n }\n };\n\n scrollWheel (index, e) {\n let delta = 0;\n\n if (!this.selected || this.selected !== this.slots[index]) return;\n if (this.mode === PrismViewCanvas.SLOT_MANIPULATION) return;\n\n if (!e) e = window.event;\n if (e != null ? e.originalEvent : void 0) e = e.originalEvent;\n if (e.wheelDelta) {\n delta = e.wheelDelta / 40;\n if (window.opera) delta = -delta;\n } else if (e.detail) delta = -e.detail / 1;\n if (delta) {\n if (index !== null && this.slots[index].zoomBy) {\n this._scrollWheelZoom(this.slots[index], delta);\n } else if (this.selected) {\n this._scrollWheelZoom(this.selected, delta);\n }\n }\n if (e.preventDefault) e.preventDefault();\n return (e.returnValue = false);\n };\n\n zoomIn () {\n if (this.selected) {\n this.selected.zoomBy(0.05);\n this.do_save();\n }\n return this.redraw('Image zoomed in');\n };\n\n zoomOut () {\n if (this.selected) {\n this.selected.zoomBy(-0.05);\n this.do_save();\n }\n return this.redraw('Image zoomed out');\n };\n\n zoomBy (value) {\n let _ref;\n if (((_ref = this.selected) != null ? _ref.zoomBy : void 0) != null) {\n // WTF CoffeeScript !\n this.selected.zoomBy(value);\n this.do_save();\n }\n return this.redraw('Image zoomed out');\n };\n\n setZoom (value) {\n let _ref;\n if (((_ref = this.selected) != null ? _ref.setZoom : void 0) != null) {\n // WTF CoffeeScript !\n this.selected.setZoom(value);\n this.do_save();\n }\n return this.redraw('Zoom set');\n };\n\n moveBy (field, value) {\n if (this.selected) {\n this.selected.setProperty(field, this.selected[field] + value);\n this.do_save();\n }\n return this.redraw();\n };\n\n // this adds angle onto the current image\n straightenBy (angle, slot) {\n slot = slot || this.selected;\n if (!slot || !slot.isImage) return;\n\n if (slot.straightenBy(angle)) {\n this.do_save();\n this.redraw('Image straightened');\n }\n };\n\n // this adds angle onto the current image\n rotate (angle) {\n if (this.selected) {\n this.selected.rotate(angle);\n this.do_save();\n }\n return this.redraw('Image rotated');\n };\n\n setSelectedImage (img, id, data) {\n data = data || {};\n data.image = id;\n\n if (this.selected && this.selected.isImage) {\n this.setImageById(this.selected.id, img, data);\n }\n return this.do_save();\n };\n\n _appendImage (img, img_id, slot_id, data) {\n let i;\n\n if (this.selected) {\n if (this.selected.isImage && !this.selected.img) {\n this.setSelectedImage(img, img_id);\n\n if (data) this.selected.restoreData(data);\n\n return {\n index: this.selectedIndex,\n slot: this.selected,\n };\n }\n }\n\n i = 0;\n while (i < this.slots.length) {\n if (this.slots[i].isImage && this.slots[i].canAppend()) {\n this.setImageById(this.slots[i].id, img, { image: img_id });\n\n if (data) {\n this.findImageSlotById(this.slots[i].id).restoreData(data);\n }\n\n return {\n index: i,\n slot: this.slots[i],\n };\n }\n i += 1;\n }\n return false;\n };\n\n _addText (textSlot) {\n // Copy just editable textSlots or copy if the new\n // template have a slot with the same id\n if (textSlot.editable) {\n textSlot.angle || (textSlot.angle = 0);\n this.addTextSlot(textSlot);\n return;\n }\n\n let found = false;\n\n for (var i = 0; i < this.slots.length; i++) {\n var slot = this.slots[i];\n\n if (\n slot.isText &&\n slot.id === textSlot.id &&\n textSlot.string.length > 0\n ) {\n found = true;\n slot.copyFrom(textSlot);\n break;\n }\n }\n\n if (found) return;\n\n for (var i = 0; i < this.slots.length; i++) {\n slot = this.slots[i];\n\n if (slot.isText && textSlot.string.length > 0) {\n slot.copyFrom(textSlot);\n }\n }\n };\n\n appendImage (img, id) {\n let info;\n info = this._appendImage(img, id);\n if (info) {\n this._selectSlot(info.slot, info.index);\n return this.do_save();\n }\n };\n\n findTextSlotById (id) {\n return this.slots.find(s => s.isText && s.id === id);\n };\n\n findImageSlotById (id) {\n return this.slots.find(s => s.isImage && s.id === id);\n };\n\n getClones (id) {\n const clonePrefix = `${id}:`;\n return function() {\n const ref = this.slots;\n let i;\n let len;\n const results = [];\n let slot;\n for (i = 0, len = ref.length; i < len; i++) {\n slot = ref[i];\n if (slot.id.slice(0, clonePrefix.length) === clonePrefix) {\n results.push(slot);\n }\n }\n return results;\n }.call(this);\n };\n\n _setImageAsColourWithoutSaving (id, colour) {\n let clone;\n let clones;\n let slot;\n let i;\n let len;\n\n slot = this.findImageSlotById(id);\n if (!slot) {\n return false;\n }\n\n clones = this.getClones(id);\n\n slot.setAsColour(colour);\n for (i = 0, len = clones.length; i < len; i++) {\n clone = clones[i];\n clone.setAsColour(colour);\n clone.setAsClone(slot);\n }\n return true;\n };\n\n setImageAsColour (id, colour) {\n if (this._setImageAsColourWithoutSaving(id, colour)) {\n wkLogger.log('setImageAsColour', id, colour);\n this.queueRedraw();\n this.do_save();\n }\n };\n\n setBackgroundColour (colour) {\n return this.setImageAsColour(OPTIONAL_BG, colour);\n };\n\n getBackgroundColour () {\n const slot = this.findImageSlotById(OPTIONAL_BG);\n\n if (!slot) return null;\n if (!slot.isColour()) return null;\n\n return slot.imgId;\n };\n\n noPhotoBackground () {\n if (!this.template || !this.template.tags) return null;\n return this.template.tags.indexOf('no-image-bg') !== -1;\n };\n\n slotAccepts (id, data) {\n data = data || {};\n const imgId = data.image || data.imgId;\n\n if (id !== OPTIONAL_BG) {\n return true;\n }\n\n if (this.noPhotoBackground() && imgId) {\n // photo -> imgId is a number\n // colour -> imgId is a string\n return typeof imgId === 'string';\n }\n\n return true;\n };\n\n setImageById (id, img, data) {\n if (!this.slotAccepts(id, data)) {\n wkLogger.log('[blocked] setImageById', id, img, data);\n return false;\n }\n\n wkLogger.log('setImageById', id, img, data);\n\n const slot = this.findImageSlotById(id);\n if (!slot) return; // TODO - images needs updating when design changes (background colour canvases )\n\n let imgId = 'missing-image-param';\n if (data) {\n imgId = data.image || data.imgId;\n data.angle = slot.angle || 0;\n }\n slot.setImage(img, imgId, data);\n const results = [];\n\n for (const clone of this.getClones(id)) {\n clone.setImage(img, imgId, data);\n results.push(clone.setAsClone(slot));\n }\n\n return results;\n };\n\n dropImage (e, img, data = {}, slot = null) {\n let slotIdx = null;\n if (!slot) {\n slotIdx = this.slotIndex(this.relativePoint(e), {\n allow: slot => slot.isImage && !slot.isEmbellishment(),\n });\n slot = slotIdx !== null && this.slots[slotIdx];\n }\n\n if (slot && slot.acceptsImage({ allowOptionalBackground: true })) {\n const { stashFns } = this;\n if (stashFns) {\n const imgSlotRef = stashFns.getImgSlotRef({\n id: slot.id,\n imgId: data.id,\n });\n data = stashFns.getAllImageStateValues(imgSlotRef, data);\n }\n\n this.setImageById(slot.id, img, data);\n this.setMode(PrismViewCanvas.IMAGE_EDIT);\n this.do_save();\n return true;\n }\n return false;\n };\n\n dropEmbellishment = async function(e, { src, type }) {\n // COMMENTED OUT UNTIL WEBPRISM CAN HANDLE EMBELLISHMENTS IN CUSTOM BACKGROUND\n // if (type === 'pattern') {\n // const slotIdx = this.slotIndex(this.relativePoint(e), { allow: (slot => slot.isImage) });\n // const slot = slotIdx !== null && this.slots[slotIdx];\n\n // if (slot && slot.isOptionalBackground()) {\n // const { img } = await customSlots.embellishments.buildSlotData(src);\n // this.dropImage(e, img);\n // return;\n // }\n // }\n // END OF COMMENTED OUT UNTIL WEBPRISM CAN HANDLE EMBELLISHMENTS IN CUSTOM BACKGROUND\n const { x, y } = this.relativePoint(e);\n const slot = await customSlots.embellishments.add({\n src,\n type,\n view: this,\n x,\n y,\n });\n if (this.active()) {\n this.selectASlot(slot);\n }\n };\n\n dropColour (e, colour) {\n const slotIdx = this.slotIndex(this.relativePoint(e), {\n allow: slot => slot.isImage && !slot.isEmbellishment(),\n });\n const slot = slotIdx !== null && this.slots[slotIdx];\n\n if (slot && slot.isImage && !slot.stackable()) {\n this._setImageAsColourWithoutSaving(slot.id, colour);\n this.setMode(PrismViewCanvas.IMAGE_EDIT);\n this.do_save();\n return true;\n }\n return false;\n };\n\n setWrapperBorder (borderState) {\n this.wrapperHighlight = borderState;\n };\n\n setWrapperBorderWhenDragging (e) {\n if (e.type === 'dragleave') {\n this.setWrapperBorder(false);\n } else {\n this.deselectAll();\n this.setWrapperBorder(true);\n }\n this.redraw('Image dragged over wrapper', false);\n };\n\n dragImageHover (e) {\n const ev = e.originalEvent || e;\n\n if (\n ev.dataTransfer &&\n ev.dataTransfer.types.indexOf('embellishmentid') != -1\n ) {\n this.deselectAll();\n this.redraw('Embellishment drag', false);\n return true;\n }\n\n const slotIdx = this.slotIndex(this.relativePoint(e), {\n allow: slot => slot.isImage,\n ignoreSelected: true,\n });\n\n if (slotIdx !== null && ev.dataTransfer) {\n ev.dataTransfer.dropEffect = 'copy';\n }\n\n if (!slotIdx) {\n this.setWrapperBorderWhenDragging(ev);\n }\n\n if (slotIdx !== this.selectedIndex) {\n const slot = this.slots[slotIdx];\n if (slot && slot.acceptsImage({ allowOptionalBackground: true })) {\n this._selectSlot(slot, slotIdx, { fireEvent: false });\n this.redraw('Image dragged over slot', true);\n }\n return true;\n }\n return false;\n };\n\n getImages () {\n const list = [];\n\n let i = 0;\n while (i < this.slots.length) {\n const slot = this.slots[i];\n if (slot.isImage && (slot.img || slot.imgId || slot.stackable())) {\n list.push({\n img: slot.img,\n imgId: slot.imgId,\n slotId: slot.id,\n data: slot.data(),\n content_type: slot.content_type,\n });\n }\n i += 1;\n }\n\n return list;\n };\n\n getTexts () {\n let i, list, slot;\n\n list = [];\n\n for (i = 0; i < this.slots.length; i++) {\n slot = this.slots[i];\n if (slot.isText && slot.string) {\n list.push(slot);\n }\n }\n\n return list;\n };\n\n setImages (list) {\n const selectedID = this.selected ? this.selected.id : null;\n const self = this;\n this.deselectAll();\n\n list.forEach(({ slotId, img, imgId, image, content_type, data }) => {\n if (slotId === OPTIONAL_BG) {\n if (img) {\n this.setImageById(slotId, img, { image: imgId });\n const slot = this.findImageSlotById(slotId);\n slot && slot.restoreData(data);\n } else {\n this._setImageAsColourWithoutSaving(slotId, imgId);\n }\n return;\n }\n\n if (content_type === 'image') {\n const slot = customSlots.photos.restore({\n id: slotId,\n img,\n imgId,\n data,\n view: self,\n });\n\n restoreSelection(slot);\n } else if (content_type === 'embellishment') {\n const embellishment = { id: slotId, img, data, view: self };\n const slot = customSlots.embellishments.restore(embellishment);\n restoreSelection(slot);\n } else {\n const slot = this._appendImage(img, image || imgId, slotId, data);\n restoreSelection(slot);\n }\n });\n\n return this.do_save();\n\n function restoreSelection(slot) {\n if (slot && slot.id === selectedID) {\n self.selectASlot(slot);\n }\n }\n };\n setTexts (list) {\n for (let i = 0; i < list.length; i++) {\n this._addText(list[i]);\n }\n\n return this.do_save();\n };\n\n hasMissingImages () {\n return this.slots.some(slot => slot.isImage && !slot.img);\n };\n\n deleteSlotById (id) {\n this.overriddenSlotIdsMemo = null;\n this.slots = this.slots.filter(el => el.id !== id);\n\n if (this.selected && this.selected.id === id) {\n this._selectSlot(null, null);\n\n this.do_save();\n this.queueRedraw();\n }\n };\n\n deleteImage (imageId) {\n const slotsToEmpty = this.slots.filter(el => el.imgId === imageId);\n\n for (let i = 0; i < slotsToEmpty.length; i++) {\n this.removeImageFromSlot(slotsToEmpty[i].id);\n }\n };\n\n orderToZindex () {\n let index = 0;\n for (let i = 0; i < this.slots.length; i++) {\n if (this.slots[i] && this.slots[i].stackable()) {\n this.slots[i].zindex = index++;\n }\n }\n };\n\n _setData (data) {\n const { stashFns } = this;\n const self = this;\n\n if (data === null || (data && data.hatch) || (data && data.blank)) {\n this.blank = true;\n this.hatch = data.hatch;\n this.data = null;\n this.pageIndex = undefined;\n return;\n }\n\n if (data.hasOwnProperty('output_width')) {\n this.output_width = data.output_width;\n this.output_width_l = data.output_width_l;\n this.output_width_p = data.output_width_p;\n }\n\n if (data.hasOwnProperty('index')) {\n if (this.pageIndex !== data.index) {\n // page change?\n this.historyStack.clear();\n }\n this.pageIndex = data.index;\n }\n\n data.slots\n .sort((a, b) => {\n if (a.type === 'stackable' && b.type !== 'stackable') {\n return -1;\n }\n if (a.type !== 'stackable' && b.type === 'stackable') {\n return 1;\n }\n if (a.type !== 'stackable' && b.type !== 'stackable') {\n return 0;\n }\n if (\n a.data &&\n a.data.zindex !== undefined &&\n b.data &&\n b.data.zindex !== undefined\n ) {\n return a.data.zindex - b.data.zindex;\n }\n })\n .forEach(json_slot => {\n switch (json_slot.content_type || json_slot.type) {\n case 'image':\n setSlotImage.call(this, json_slot);\n break;\n case 'text':\n setSlotText.call(this, json_slot);\n break;\n case 'embellishment':\n const image = new Image();\n image.src = json_slot.content_url;\n json_slot.img = image;\n setSlotImage.call(this, json_slot);\n break;\n default:\n console.error('Unable to restore slot: %o', json_slot);\n break;\n }\n });\n\n function setSlotText(json_slot) {\n const slotIsPredefined = ![/^text[0-9]*/i, /^override-text-/].some(r =>\n json_slot.id.match(r)\n );\n\n let slot = this.findTextSlotById(json_slot.id);\n if (!slot) {\n if (slotIsPredefined) {\n // Do not copy over text slots unless those are\n // user inserted floating texts.\n return;\n }\n\n slot = new TextSlot(json_slot.id);\n stackableInit(json_slot, slot);\n\n this.addTextSlot(slot);\n }\n\n if (!isClonedSlot(json_slot.id)) {\n this.getClones(json_slot.id).forEach(clone => {\n clone.restoreData(json_slot.data);\n clone.setAsClone(slot);\n });\n\n slot.restoreData(json_slot.data);\n\n if (json_slot.type === 'stackable') {\n stackableChecks(slot);\n }\n }\n\n // When copying data from an existing slot,\n // do not copy over the position, unless the slot is\n // a user inserted one.\n if (slotIsPredefined) {\n delete json_slot.data.w;\n delete json_slot.data.h;\n delete json_slot.data.x;\n delete json_slot.data.y;\n }\n\n slot.restoreData(json_slot.data);\n slot.moveTo(slot.x, slot.y);\n\n if (json_slot.type === 'stackable') {\n stackableChecks(slot);\n }\n\n slot.queueReload('after resize', 5);\n }\n\n function setSlotImage(json_slot) {\n let slot = this.findImageSlotById(json_slot.id);\n\n if (!slot && json_slot.type === 'stackable') {\n slot = this.addPhotoSlot(json_slot);\n stackableInit(json_slot, slot);\n }\n\n if (!slot) return;\n\n ['imgId', 'image', 'img'].forEach(\n property =>\n json_slot[property] && (slot[property] = json_slot[property])\n );\n\n if (this.imageManager) {\n json_slot = this.imageManager.findImage(json_slot);\n }\n\n if (!isClonedSlot(json_slot.id)) {\n // not a clone\n slot.imgId = slot.imgId || slot.image;\n\n const imgSlotRef = stashFns.getImgSlotRef(slot);\n stashFns.straightenChangeDelegator(imgSlotRef, slot.angle);\n stashFns.gammaChangeDelegator(imgSlotRef, slot.gamma);\n stashFns.zoomChangeDelegator(imgSlotRef, slot.zoomFactor);\n\n this.getClones(json_slot.id).forEach(clone => {\n clone.restoreData(json_slot.data);\n clone.setAsClone(slot);\n });\n\n slot.restoreData(json_slot.data);\n\n if (json_slot.type === 'stackable') {\n stackableChecks(slot);\n }\n }\n }\n\n function stackableInit(json_slot, slot) {\n ['type', 'content_type'].forEach(\n property =>\n json_slot.hasOwnProperty(property) &&\n (slot[property] = json_slot[property])\n );\n }\n\n function stackableChecks(slot) {\n slot.enforceBounds(self.editableArea);\n }\n };\n\n hideCanvas () {\n this.hatch = false;\n this.blank = false;\n this.firstPage = false;\n this.el.addClass('invisible');\n this.show_overlays = this.firstPage;\n this.hint = 'invisible';\n };\n\n sanitiseSlotColour (slot) {\n const sanitiseTextSlot = () => {\n slot.data.fontColour = tinycolor(slot.data.fontColour).toHexString();\n customColourHistory.push(slot.data.fontColour);\n };\n\n switch (slot.type) {\n case 'text':\n return sanitiseTextSlot();\n }\n };\n\n setData (data, hint, skipTemplateCache = false) {\n if (!data || !data.slots) return;\n\n const selectedID = this.selected ? this.selected.id : null;\n\n data.slots.forEach(this.sanitiseSlotColour);\n\n this.hatch = false;\n this.blank = false;\n\n // the following logic determines whether we are on the cover page\n // N.B. when changing pages, hint always set to a value; thus we know we are\n // no longer at the cover page\n if (!!data.name && hint === undefined) {\n this.firstPage = true;\n } else if (hint !== undefined) {\n this.firstPage = false;\n }\n\n if (hint === 'invisible') this.el.addClass('invisible');\n else this.el.removeClass('invisible');\n\n if (data === null) {\n this.blank = true;\n this.hatch = false;\n if (this.selected) this.deselectAll();\n return;\n }\n\n // De-select any slots & notify UI\n if (data.hasOwnProperty('index') && data.index !== this.pageIndex) {\n this.deselectAll();\n }\n\n // to ensure show_overlays shows correctly\n this.show_overlays = this.firstPage;\n\n this.blank = false;\n this.hint = hint; // (this.hint) being used anywhere?\n\n switch (hint) {\n case 'blank':\n case 'hatch':\n this.blank = true;\n data.hatch = 'lines';\n break;\n case 'invisible':\n this.blank = true;\n data.hatch = false;\n break;\n case 'open-cover':\n this.show_overlays = false;\n break;\n case 'inside-cover':\n this.blank = true;\n data.hatch = 'inside-cover';\n break;\n }\n\n if (data.template) {\n this.loadTemplateAndData(data.template, data);\n } else if (skipTemplateCache) {\n this.loadTemplateAndData(this.template, data);\n } else if (data.templateID && TemplateCache.store[data.templateID]) {\n this.loadTemplateAndData(TemplateCache.store[data.templateID], data);\n } else {\n TemplateCache.get(data.templateID, () => {\n this.loadTemplateAndData(TemplateCache.store[data.templateID], data);\n });\n return;\n }\n\n if (selectedID) {\n this.selectSlotById(selectedID);\n }\n return this.do_save(data);\n };\n\n getData () {\n const slots = this.getSlotsToDraw().map(slot => {\n const { img, ...data } = slot.data();\n const { imgId, image } = data;\n\n return {\n id: slot.id,\n type: slot.type,\n content_type: slot.content_type,\n content_url: slot.isEmbellishment() && (data.url || (img && img.src)),\n url: img && img.src,\n image: imgId || image,\n data,\n };\n });\n\n // clean up any undefinedes\n slots.forEach(slot => {\n Object.entries(slot).forEach(\n ([key, value]) => Boolean(value) === false && delete slot[key]\n );\n });\n\n return {\n slots,\n dtID: this.template['cc-dt-id'],\n templateID: this.template.id,\n theme: this.album_manager.theme,\n };\n };\n\n push_undo_state (state) {\n if (this.selected && this.selected.isUnconfirmedTextSlot) return;\n if (this.in_undo) return;\n\n if (this.historyStack.stepsAreDifferent(state)) {\n this.el.trigger('ccSave');\n this.historyStack.push(state);\n\n useSlotStore.getState().updateSlot(this.selected);\n }\n };\n\n do_undo () {\n try {\n this.in_undo = true;\n this.historyStack.undo();\n if (this.selected) {\n this.selectSlotById(this.selected.id);\n }\n } catch (_error) {}\n return (this.in_undo = false);\n };\n\n can_undo () {\n return this.historyStack.canUndo();\n };\n\n can_redo () {\n return this.historyStack.canRedo();\n };\n\n loadStatus () {\n let slot;\n let _i;\n let _len;\n let _ref;\n let total = 4.25;\n let complete = 0.25;\n\n if (imgComplete(this.fgImage)) complete++;\n if (imgComplete(this.bgImage)) complete++;\n if (imgComplete(this.lfgImage)) complete++;\n if (imgComplete(this.lbgImage)) complete++;\n for (_i in this.overlays) {\n _ref = this.overlays[_i];\n total++;\n if (imgComplete(_ref)) complete++;\n }\n _ref = this.slots;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n slot = _ref[_i];\n total++;\n if (slot && !slot.isLoading()) complete++;\n }\n return complete / total;\n };\n\n isLoading () {\n let slot;\n let _i;\n let _len;\n let _ref;\n if (!(imgComplete(this.fgImage) && imgComplete(this.bgImage))) return true;\n if (!(imgComplete(this.lfgImage) && imgComplete(this.lbgImage)))\n return true;\n for (_i in this.overlays) {\n _ref = this.overlays[_i];\n if (!imgComplete(_ref)) return true;\n }\n _ref = this.slots;\n for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n slot = _ref[_i];\n if (slot && slot.isLoading()) return true;\n }\n return false;\n };\n\n do_redo () {\n try {\n this.in_undo = true;\n this.historyStack.redo();\n } catch (_error) {}\n return (this.in_undo = false);\n };\n\n setSaveBlocked (setBlockedValue) {\n this.saveBlocked = setBlockedValue;\n };\n\n // Set saves to undefined to prevent this action from triggering a save.\n userAction (what, action, saves = 0) {\n try {\n this.user_actions.unshift({ what, saves });\n return action(this);\n } finally {\n const result = this.user_actions.shift();\n if (result.saves > 0) {\n this.do_save();\n }\n }\n };\n\n suppressSave (what, action) {\n return this.userAction(what, action, undefined);\n };\n\n do_save (data = null) {\n if (data && this.historyStack.preventSave(data)) return;\n if (this.saveBlocked) return;\n if (this.user_actions[0]) {\n this.user_actions[0].save++;\n return;\n }\n\n if (!this.theme_loading) {\n useSlotStore.getState().updateLastSaved();\n this.push_undo_state(this.getData())\n };\n\n if (this.album_manager) {\n this.album_manager.fireSave(this);\n }\n };\n\n do_selectTheme (theme) {\n if (this.album_manager) return this.album_manager.selectTheme(theme);\n };\n\n can_edit () {\n let _ref;\n return (\n this.editable && ((_ref = this.slots) != null ? _ref.length : void 0) > 0\n );\n };\n\n overlaps (x, y) {\n const rect = this.element.getBoundingClientRect();\n\n if (x < rect.left || x > rect.right) {\n return false;\n }\n if (y < rect.top || y > rect.bottom) {\n return false;\n }\n return true;\n };\n\n hasOptionalBackground () {\n return (this.slots || []).some(slot => slot.isOptionalBackground());\n };\n\n getEventPayload (event) {\n if (event.dataTransfer) {\n return JSON.parse(event.dataTransfer.getData('text') || '{}');\n }\n\n if (event.originalEvent) {\n return JSON.parse(event.originalEvent.dataTransfer.getData('text') || '{}');\n }\n\n if (event.target.hasAttribute('data-payload')) {\n return JSON.parse(event.target.getAttribute('data-payload') || '{}');\n }\n\n return null;\n };\n\n menuPoints (slot) {\n const { topMenu, bottomMenu } = slot.getControlPoints();\n const bMenu = this.pointToPage(slot, bottomMenu.x, bottomMenu.y);\n const tMenu = this.pointToPage(slot, topMenu.x, topMenu.y);\n return {\n tMenu,\n bMenu,\n };\n };\n\n highestPoint (slot, extraHeight) {\n let {\n topLeft,\n topRight,\n bottomRight,\n bottomLeft,\n bottomMiddle,\n } = slot.getSlotPoints();\n bottomMiddle.y -= extraHeight;\n const points = [topLeft, topRight, bottomRight, bottomLeft, bottomMiddle];\n const yPoints = points.map(p => this.pointToPage(slot, p.x, p.y)[1]);\n\n return Math.min(yPoints[0], yPoints[1], yPoints[2], yPoints[3], yPoints[4]);\n };\n\n decreaseIndex () {\n const index = useSlotStore.getState().slotIndex;\n\n const prevSlot = this.slots[index - 1];\n if (!prevSlot) {\n // there's no slot below this one\n return;\n }\n\n if (!prevSlot.stackable()) {\n return;\n }\n\n const currentSlot = this.slots[index];\n\n this.slots[index] = prevSlot;\n this.slots[index - 1] = currentSlot;\n this.orderToZindex();\n\n this.selectedIndex -= 1;\n\n useSlotStore.getState().updateSlotIndex(index - 1);\n\n this.do_save();\n return this.queueRedraw();\n };\n\n increaseIndex () {\n const index = useSlotStore.getState().slotIndex;\n\n const nextSlot = this.slots[index + 1];\n\n if (!nextSlot) {\n // there's no slot above this one\n return;\n }\n\n const currentSlot = this.slots[index];\n\n this.slots[index] = nextSlot;\n this.slots[index + 1] = currentSlot;\n this.orderToZindex();\n\n this.selectedIndex += 1;\n\n useSlotStore.getState().updateSlotIndex(index + 1);\n\n this.do_save();\n return this.queueRedraw();\n };\n\n overriddenSlotIds () {\n return (\n this.overriddenSlotIdsMemo ||\n (this.overriddenSlotIdsMemo = this.slots\n .map(s => s.overriddenId())\n .filter(Boolean)\n .reduce((memo, overriddenId) => {\n memo[overriddenId] = true;\n return memo;\n }, {}))\n );\n };\n\n slotIsOverridden (slot) {\n return this.overriddenSlotIds()[slot.id] === true;\n };\n\n getSlotsToDraw () {\n // we want all slots except those which have been overridden\n\n // find the ids of those slots which have been overridden\n const overriddenSlotIds = this.overriddenSlotIds();\n\n // and ensure we don't return any overridden slots\n return this.slots.filter(s => !overriddenSlotIds[s.id]);\n };\n\n deleteAllOverrideImageSlots () {\n this.slots = this.slots.filter(slot => {\n if (slot.isImage && slot.isOverridePhoto()) return false;\n return true;\n });\n };\n\n deleteAllTextSlots() {\n this.slots = this.slots.filter(slot => {\n return !slot.isText;\n });\n }\n\n repositionTextSlots (templateData) {\n this.slots.forEach(slot => {\n if (slot.isText && slot.type === 'text' && slot.string) { // ensure it only happens for fixed text slots and not calendar events and spine text\n const templateSlot = templateData.text_slots[slot.id];\n if (templateSlot) {\n slot.x = templateSlot['pixel-coords'][0];\n slot.y = templateSlot['pixel-coords'][1];\n slot.w = templateSlot['pixel-coords'][2];\n slot.h = templateSlot['pixel-coords'][3];\n }\n }\n });\n }\n\n onMoveMouseDown (slot, e) {\n this.control = false;\n this.drag = false;\n this.mode = PrismViewCanvas.SLOT_MANIPULATION;\n\n this.control = slot.isText ? 'text' : 'image';\n\n const index = findIndex(this.slots, s => s.id === slot.id);\n this.mouseDown(index, e);\n };\n\n onMoveMouseMove (slot, e) {\n this.mode = PrismViewCanvas.SLOT_MANIPULATION;\n\n const index = findIndex(this.slots, s => s.id === slot.id);\n this.mouseMove(index, e);\n };\n\n onMoveMousePanning () {\n this.mode = PrismViewCanvas.IMAGE_EDIT;\n };\n\n topLayerImageSlotAcceptingImage (e) {\n const { x, y } = this.relativePoint(e);\n const slotsInPosition = this.slots.filter(slot => {\n return (\n slot.hasPoint(x, y) &&\n slot.isImage &&\n slot.acceptsImage({ allowOptionalBackground: false })\n );\n });\n\n if (slotsInPosition.length === 0) return null;\n\n slotsInPosition\n .sort((a, b) => {\n const aValue = isNaN(Number(a.zindex)) ? -1 : Number(a.zindex);\n const bValue = isNaN(Number(b.zindex)) ? -1 : Number(b.zindex);\n return aValue - bValue;\n })\n .reverse();\n\n return slotsInPosition[0];\n };\n\n isDoubleCover () {\n if (!this.template.tags) return false;\n\n return templateInterrogator.tagIntersect(this.template, 'wrap-cover');\n };\n}\n\nexport default PrismViewCanvas;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n// React 16\n// export const AppType = React.createContext('web');\n\nclass AppTypeProvider extends React.Component {\n getChildContext() {\n return { appType: this.props.value };\n }\n\n render() {\n return React.Children.only(this.props.children);\n }\n}\nAppTypeProvider.childContextTypes = {\n appType: PropTypes.string,\n};\n\nexport const AppType = { Provider: AppTypeProvider };\n","import React from \"react\";\nimport Store from '../../../_utils/tools/store';\n\nexport default function ChangeOrientationNotice() {\n\n const alertColour = () => Store.isWalmart() ? 'alert-yellow' : 'alert-light';\n\n return (\n <div\n className = { `change-orientation alert ${alertColour()} fade show d-flex mx-auto border-0`}\n role=\"alert\"\n aria-label=\"Change Orientation Notice\"\n >\n <i className=\"fas fa-exclamation-circle mr-1\" />\n <p className=\"m-0\">Select the <strong>Layouts</strong> panel to switch<br />between Landscape and Portrait orientation</p>\n <button type=\"button\" className=\"close py-1 px-2\" data-dismiss=\"alert\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n )\n};\n","'use strict';\n\n// Import Libraries\nimport React from 'react';\nimport classNames from 'classnames';\nimport reactMixin from 'react-mixin';\n// Import JS Modules\nimport has from 'lodash/has';\nimport {\n WebUI,\n PrismUI,\n TrackPreviewMode,\n RefreshOnEvents,\n builderDispatch,\n} from '../../_utils/ui';\nimport stashFns from '../misc/stash-fns';\nimport {\n isAlbum,\n isCalendar,\n isCanvas,\n isMultiPageStandardProduct,\n} from '../trays/tray-determiner';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n// Import JSX Modules\nimport cardTopNavActive from '../misc/card-top-nav-active';\nimport Chevron from '../misc/chevron';\nimport EnvelopePage from '../misc/envelope-page';\nimport AddressModal from '../misc/address-form';\nimport PageSpreads from './page-spreads';\nimport PrismViewCanvas from '../prism/prism-view-canvas';\nimport { AppType } from '../context/app-type';\nimport ChangeOrientationNotice from '../desktop/notices/change-orientation-notice';\nimport { hasLayoutsTray } from '../trays/tray-determiner';\nimport { EventEmitter } from 'wk-event-emitter';\nimport { useSlotStore, useFocusedSlotStore } from 'stores/useSlotStore';\n\nexport const slotEvents = {\n focus: 'focus',\n changed: 'changed',\n};\n// -----------------------------------------------------------\n// PrismView\n// -----------------------------------------------------------\nclass PrismView extends React.Component {\n refreshOn = [\n WebUI.UPLOAD_PROGRESS,\n WebUI.UPDATE_PHOTOS,\n PrismUI.ITEM_LOADED,\n PrismUI.SLOT_MOVED,\n PrismUI.PREVIEW_2D_LOADED,\n ];\n\n constructor(props) {\n super(props);\n\n this.state = {\n selected: null,\n selectedID: null,\n double: false,\n customPage: undefined,\n previewDimensions: {\n height: 0,\n },\n slotEvent: null,\n saving: false,\n };\n\n this.handleZoom = this.handleZoom.bind(this);\n this.clearBG = this.clearBG.bind(this);\n this.navigateToNextSpread = this.navigateToNextSpread.bind(this);\n this.navigateToPreviousSpread = this.navigateToPreviousSpread.bind(this);\n this.showEnvelopeAddressForm = this.showEnvelopeAddressForm.bind(this);\n this.closeEnvelopeAddressForm = this.closeEnvelopeAddressForm.bind(this);\n }\n\n get canvasHeight() {\n return Math.min(this.props.maxHeight, 800);\n }\n\n get canvasWidth() {\n return Math.min(this.props.maxWidth, 800);\n }\n\n get canvasMaxWidth() {\n return window.innerWidth >= 1024\n ? Math.floor(this.props.maxWidth / 2)\n : this.props.maxWidth;\n }\n\n get appClass() {\n // React 16\n //switch(this.context) {\n switch (this.context.appType) {\n case 'app':\n return 'app';\n case 'web':\n return 'web';\n default:\n return 'unknown';\n }\n }\n\n componentDidMount() {\n this.view = new PrismViewCanvas('pageView', undefined, undefined);\n this.view.stashFns = stashFns;\n this.viewRight = new PrismViewCanvas('pageViewRight', undefined, undefined);\n this.viewRight.stashFns = stashFns;\n\n window.prismViews.page = this.view;\n window.prismViews.page.imageManager = usePrismItemStore.getState();\n window.prismViews.page.album_manager = usePrismItemStore.getState();\n\n window.prismViews.pageRight = this.viewRight;\n window.prismViews.pageRight.imageManager = usePrismItemStore.getState();\n window.prismViews.pageRight.album_manager = usePrismItemStore.getState();\n\n window.activeView = this.view;\n\n if (this.view.selected || this.viewRight.selected) {\n setTimeout(() => {\n this.forceUpdate();\n }, 10);\n }\n\n EventEmitter.on(PrismUI.SLOT_ACTIVATE, ({ slot }) =>\n this.handleSlotChanged(slot)\n );\n\n this.dispatchBaseToken = builderDispatch.register(payload => {\n switch (payload.type) {\n case PrismUI.SLOT_CHANGED:\n this.handleSlotChanged(payload.slot);\n break;\n\n case WebUI.SHOW_CUSTOM_PAGE:\n this.setState({\n customPage: {\n id: payload.customPageId,\n index: payload.customPageIndex,\n },\n });\n break;\n\n case WebUI.HIDE_CUSTOM_PAGE:\n this.setState({ customPage: undefined });\n break;\n\n case WebUI.DO_SHOW_SPREAD:\n const { spread, dateIdentifier } = payload;\n if (spread) {\n this.setState({ spread }, function() {\n const { pageIndex = spread.spread } = payload;\n this.navigateToPage(pageIndex, dateIdentifier);\n });\n }\n break;\n\n case WebUI.EDIT_AREA_RESIZED:\n setTimeout(this.forceUpdate.bind(this), 10);\n break;\n\n case PrismUI.SAVE_START:\n this.showSaving();\n this.setState({ saving: true });\n break;\n\n case PrismUI.SAVE_DONE:\n this.hideSaving();\n this.setState({ saving: false });\n break;\n }\n });\n\n (() => {\n window.requestAnimationFrame(draw);\n\n function draw() {\n if (\n window.prismViews &&\n prismViews.page &&\n prismViews.page.pending_redraw\n ) {\n prismViews.page._redraw('interval');\n }\n if (\n window.prismViews &&\n prismViews.pageRight &&\n prismViews.pageRight.pending_redraw\n ) {\n prismViews.pageRight._redraw('interval');\n }\n window.requestAnimationFrame(draw);\n }\n })();\n }\n\n componentWillUnmount() {\n EventEmitter.off(PrismUI.SLOT_ACTIVATE);\n\n if (this.dispatchBaseToken) builderDispatch.unregister(this.dispatchBaseToken);\n\n window.prismViews.page = null;\n }\n\n componentDidUpdate() {\n if (this.inPreview() && window.previewImage) {\n return;\n }\n\n const prismItem = usePrismItemStore.getState().prismItem;\n\n if (prismItem.pages) {\n this.view.queueRedraw();\n if (this.state.double) {\n this.viewRight.queueRedraw();\n }\n }\n\n this.view.editable = this.viewRight.editable = !this.inPreview();\n }\n\n get canvasPositioningStyle() {\n // This should only affect mobile and should not show if there's only a single page\n if (window.innerWidth >= 1024 || !this.state.double) return {};\n\n const canvasWidth = this.canvasWidth;\n const canvasHeight = this.canvasHeight;\n const offsetWidth = document.querySelector('#pageView').offsetWidth;\n const offsetHeight = document.querySelector('#pageView').offsetHeight;\n\n const transform = (() => {\n const centerWidth = offsetWidth / 2;\n const centerHeight = offsetHeight / 2;\n\n return offsetWidth == canvasWidth || offsetWidth > offsetHeight\n ? this.props.visiblePage === 'left'\n ? centerWidth\n : centerWidth - offsetWidth\n : this.props.visiblePage === 'left'\n ? centerHeight\n : centerHeight - offsetHeight;\n })();\n\n return {\n width: canvasWidth * 2,\n transform: `translateX(${transform}px)`,\n };\n }\n\n calculateHeight = () => {\n const { maxHeight } = this.props;\n if (window.innerWidth >= 2000 && !isAlbum() && !this.isMobile) {\n return maxHeight * 0.8;\n }\n return 'unset';\n };\n\n render() {\n const { maxWidth, maxHeight } = this.props,\n canvasStyle = {\n display: 'block',\n maxWidth,\n maxHeight,\n height: this.calculateHeight(),\n },\n canvasStyleRight = Object.assign({}, canvasStyle, {\n display: this.state.double ? 'inline-block' : 'none',\n }),\n { statusText, descriptionText } = this.ariaDescription();\n\n if (document.querySelectorAll('.ub-view-bg')[0] && this.state.double) {\n canvasStyle.maxWidth = canvasStyleRight.maxWidth = this.canvasMaxWidth;\n }\n const $customPageHtml = (() => {\n if (this.state.customPage) {\n if (this.state.customPage.id === 'envelope') {\n return [\n <EnvelopePage\n key=\"envelope-page\"\n onClick={this.showEnvelopeAddressForm}\n />,\n this.renderEnvelopeAddressForm(),\n ];\n }\n\n return (\n <div>\n Please add html template for custom section:{' '}\n {this.state.customPage.id}\n </div>\n );\n }\n })();\n\n const { visiblePage } = this.props;\n\n if (['album', 'print'].some(type => type === wkData.product.type)) {\n return (\n <div\n className={classNames(\n 'ub-canvas-container ub-view-bg w-100 canvas-surround',\n { 'preview-mode': this.inPreview() }\n )}\n onClick={this.clearBG}\n onTouchEnd={this.clearBG}>\n <div className=\"saving\" ref=\"saving\" style={{ display: 'none' }}>\n <div className=\"spinner spinner-mini\"></div>\n <span> Saving... </span>\n </div>\n {$customPageHtml}\n {this.renderUpsellButton()}\n <div\n className={classNames(\n 'canvas-wrapper canvas-surround',\n wkData.product.type\n )}\n style={{ maxWidth }}>\n <div>\n {isAlbum() && this.renderAddRemovePages()}\n <div\n className=\"canvas-positioning canvas-surround\"\n style={this.canvasPositioningStyle}>\n <div className=\"snap-container d-inline-block\">\n <canvas\n id=\"pageView\"\n className={classNames(\n 'showing prism-viewport-canvas',\n this.appClass,\n {\n 'ub-view-selected': this.isSelected('view'),\n 'noselect-album': isAlbum() && visiblePage === 'right',\n }\n )}\n width={window.innerWidth}\n height={window.innerHeight}\n style={canvasStyle}\n tabIndex=\"0\"\n aria-describedby=\"editor-description\"\n aria-label=\"main canvas\"\n />\n </div>\n <div className=\"snap-container d-inline-block\">\n <canvas\n id=\"pageViewRight\"\n className={classNames(\n 'showing prism-viewport-canvas',\n this.appClass,\n {\n 'ub-view-selected': this.isSelected('viewRight'),\n 'noselect-album': isAlbum() && visiblePage === 'left',\n }\n )}\n width={window.innerWidth}\n height={window.innerHeight}\n style={canvasStyleRight}\n tabIndex=\"0\"\n aria-describedby=\"editor-description\"\n aria-label=\"main canvas\"\n />\n </div>\n <div\n role=\"status\"\n id=\"editor-description\"\n className=\"editor-description sr-only\"\n aria-live=\"polite\">\n {statusText + ' ' + descriptionText}\n </div>\n </div>\n </div>\n </div>\n {[isAlbum, isMultiPageStandardProduct].some(fn => fn.call()) &&\n this.renderPagination()}\n {!this.inPreview() && this.renderTools()}\n </div>\n );\n }\n\n const { $3DPreview, $progressBar } =\n this.inPreview() && typeof this.renderThreeDPreview === 'function'\n ? this.renderThreeDPreview()\n : {};\n const isSquare =\n window.activeView &&\n window.activeView.template &&\n window.activeView.template.size.width ===\n window.activeView.template.size.height;\n const shouldDisplayOrientationNotice = !hasLayoutsTray()\n ? null\n : isCanvas() && !isSquare && <ChangeOrientationNotice />;\n return (\n <div\n className={classNames(\n 'ub-canvas-container ub-view-bg w-100 canvas-surround',\n {\n 'preview-mode': this.inPreview(),\n 'top-nav-active': cardTopNavActive(),\n }\n )}\n id={this.state.spread ? this.state.spread.title.toLowerCase() : ''}\n onClick={this.clearBG}\n ref={ref => (this.canvasCont = ref)}\n role=\"tabpanel\"\n onTouchEnd={this.clearBG}>\n <div className=\"saving\" ref=\"saving\" style={{ display: 'none' }}>\n <div className=\"spinner spinner-mini\"></div>\n <span> Saving... </span>\n </div>\n {shouldDisplayOrientationNotice}\n {$3DPreview}\n {$progressBar}\n {$customPageHtml}\n {this.renderUpsellButton()}\n <div\n className={classNames('canvas-wrapper canvas-surround', {\n 'd-none': this.customPageId() === 'envelope' || $3DPreview,\n })}\n style={{ maxWidth }}\n onClick={this.handleWrapperClick}>\n <div className=\"d-flex flex-column canvas-surround snap-container\">\n {isCalendar() && this.renderPagination('d-none d-lg-flex')}\n <div className=\"snap-container d-inline-block\">\n <canvas\n id=\"pageView\"\n className={classNames(\n 'showing left is-spread prism-viewport-canvas',\n this.appClass,\n { 'ub-view-selected': this.isSelected('view') }\n )}\n style={canvasStyle}\n tabIndex=\"0\"\n aria-describedby=\"editor-description\"\n aria-label=\"main canvas\"\n />\n </div>\n <div className=\"snap-container d-inline-block\">\n <canvas\n id=\"pageViewRight\"\n className={classNames(\n 'showing right prism-viewport-canvas',\n this.appClass,\n { 'ub-view-selected': this.isSelected('viewRight') }\n )}\n width={window.innerWidth}\n height={window.innerHeight}\n style={canvasStyleRight}\n tabIndex=\"0\"\n aria-describedby=\"editor-description\"\n aria-label=\"main canvas\"\n />\n </div>\n <div\n role=\"status\"\n id=\"editor-description\"\n className=\"editor-description sr-only\"\n aria-live=\"polite\">\n {statusText + ' ' + descriptionText}\n </div>\n </div>\n </div>\n {[isCalendar, isMultiPageStandardProduct].some(fn => fn.call()) &&\n this.renderPagination('d-flex d-lg-none')}\n {!this.inPreview() && this.renderTools()}\n </div>\n );\n }\n\n renderUpsellButton() {\n if (!window.wkData.builder_upsell_product) return null;\n // Viewport is currently only defined in the Desktop builder, not the mobile app builder\n if (!(this.props.viewport && this.props.viewport.isDesktop)) return null;\n\n return (\n <button\n className=\"upsell-button btn btn-link d-flex flex-column align-items-center p-0\"\n onClick={() => this.handleUpsellButtonOpen()}>\n <div\n className=\"rounded-circle\"\n style={{\n backgroundImage: `url(${window.wkData.builder_upsell_product.button_icon})`,\n }}></div>\n <i className=\"fas fa-reply ml-auto\" />\n {window.wkData.builder_upsell_product.button_text}\n </button>\n );\n }\n\n renderEnvelopeAddressForm() {\n return (\n <AddressModal\n key=\"address-modal\"\n ref=\"address\"\n onDone={this.closeEnvelopeAddressForm}\n />\n );\n }\n\n renderPagination() {\n // Stub\n }\n\n renderAddRemovePages() {\n // Stub\n }\n\n renderTools() {\n // Stub\n }\n\n showEnvelopeAddressForm() {\n this.refs.address.open();\n }\n\n closeEnvelopeAddressForm() {\n this.forceUpdate();\n this.refs.address.close();\n }\n\n renderChevron(rel) {\n const prismItem = usePrismItemStore.getState().prismItem;\n\n if (!window.activeView || !prismItem || !prismItem.product) return;\n\n // Define spreads and spreadIndex as instance variables\n // Note these will not trigger a re-render as they are not set by setState()\n if (!this.spreads || prismItem.pages.length !== prismItem.pageCount)\n this.spreads = new PageSpreads(prismItem).list();\n\n if (!this.spreadIndex && this.spreads) this.spreadIndex = 0;\n\n if (rel === 'next') {\n const nextSpread = this.spreads[this.spreadIndex + 1];\n return (\n <Chevron\n rel=\"next\"\n label={`page ${(nextSpread || {}).title}`}\n disabled={this.state.saving || !nextSpread}\n onClick={nextSpread && this.navigateToNextSpread}\n />\n );\n }\n\n if (rel === 'previous') {\n const prevSpread = this.spreads[this.spreadIndex - 1];\n return (\n <Chevron\n rel=\"previous\"\n label={`page ${(prevSpread || {}).title || 'disabled'}`}\n disabled={this.state.saving || !prevSpread}\n onClick={prevSpread && this.navigateToPreviousSpread}\n />\n );\n }\n }\n\n ariaDescription() {\n const slot = useSlotStore.getState().slot;\n\n const focusedSlot = useFocusedSlotStore.getState().focusedSlot;\n\n const { slotEvent } = this.state;\n\n const label =\n !!window.activeView && !!window.activeView.title\n ? Number(window.activeView.title)\n ? `Edit Page ${window.activeView.title}.`\n : `Edit ${window.activeView.title}.`\n : 'No slot selected.';\n\n if (\n focusedSlot &&\n window.activeView.slots &&\n slotEvent === slotEvents.focus\n ) {\n return this.getFocusDescription(focusedSlot);\n }\n\n if (slot && window.activeView.slots) {\n const prop = slot.isImage ? 'isImage' : 'isText',\n index =\n window.activeView.slots\n .filter(item => item[prop] === slot[prop])\n .indexOf(slot) + 1;\n\n if (slot.isImage) {\n if (PrismViewCanvas.slotHasUserData(slot)) {\n return {\n statusText: `You have selected photo slot ${index} - This slot has an image. ${\n slot.lowDpi ? 'Image used is low quality' : ''\n }`,\n descriptionText:\n 'Use the arrow keys to pan your image, plus/minus to zoom and R to rotate.',\n };\n }\n\n return {\n statusText: `You have selected photo slot ${index} - This slot does not have an image`,\n descriptionText: 'Use the image selector to find or upload a photo.',\n };\n }\n\n if (slot.isText) {\n if (PrismViewCanvas.slotHasUserData(slot)) {\n return {\n statusText: `You have selected text slot ${index}.`,\n descriptionText: `Currently reads: '${slot.string}.'`,\n };\n }\n\n return {\n statusText: `You have selected text slot ${index}.`,\n descriptionText: 'Currently it is empty.',\n };\n }\n }\n\n return {\n statusText: label,\n descriptionText: 'Click or use a number to select a slot.',\n };\n }\n\n getFocusDescription(focusedSlot) {\n const prop = focusedSlot.isImage ? 'isImage' : 'isText',\n index =\n window.activeView.slots\n .filter(item => item[prop] === focusedSlot[prop])\n .indexOf(focusedSlot) + 1;\n\n return {\n statusText: `${\n focusedSlot.isImage ? `Photo` : `Text`\n } slot ${index} has focus.`,\n descriptionText: 'Use the enter key to activate.',\n };\n }\n\n navigateToPreviousSpread(e) {\n e.preventDefault();\n\n if (this.isMobile) {\n // Return here as we don't want to update the spreadIndex\n if (\n isAlbum() &&\n this.props.visiblePage === 'right' &&\n this.state.spread.title !== '1'\n ) {\n return this.changeVisiblePage('left');\n }\n }\n\n this.changeVisiblePage('right');\n this.spreadIndex -= 1;\n\n builderDispatch.dispatch({\n type: WebUI.DO_SHOW_SPREAD,\n spread: this.spreads[this.spreadIndex],\n });\n }\n\n navigateToNextSpread(e) {\n e.preventDefault();\n\n if (this.isMobile) {\n // Return here as we don't want to update the spreadIndex\n if (isAlbum() && this.props.visiblePage === 'left') {\n return this.changeVisiblePage('right');\n }\n }\n\n // Cover +1 is a weird case as the first page is blank\n if (this.state.spread?.title !== 'Cover') {\n this.changeVisiblePage('left');\n }\n\n this.spreadIndex += 1;\n\n builderDispatch.dispatch({\n type: WebUI.DO_SHOW_SPREAD,\n spread: this.spreads[this.spreadIndex],\n });\n }\n\n activateSelectable(spread) {\n // Many of photobooks inticacies are handled by this method\n const updateSelectableAndTitle = (side, toBeUpdated) => {\n const prismItem = usePrismItemStore.getState().prismItem;\n\n if (spread[side] && spread[side].page) {\n const {\n [side]: { page },\n } = spread;\n\n this[toBeUpdated].selectable = !!page;\n\n if (!isNaN(page.section)) {\n const { sections } = prismItem.product;\n this[toBeUpdated].selectable =\n sections[page.section] && !sections[page.section].fixed;\n }\n\n // Pull title from prismItem if it contains \"-\" for single page spreads\n let title =\n prismItem.pages[this.spreadIndex] &&\n prismItem.pages[this.spreadIndex].name;\n if ((title && !title.includes('-')) || !title) title = page.title;\n if (spread.title === 'Cover') title = spread.title;\n\n // Remove 'Page' if exists\n if (typeof title === 'string') title = title.replace('Page ', '');\n\n this[toBeUpdated].title = title;\n } else {\n this[toBeUpdated].selectable = false;\n this[toBeUpdated].title = undefined;\n }\n };\n\n updateSelectableAndTitle('left', 'view');\n updateSelectableAndTitle('right', 'viewRight');\n this.selectAnActiveView();\n }\n\n selectAnActiveView() {\n // Selects an active view, prioritising the left view\n // This is used when one of the views is un-selectable\n if (!activeView.selectable) {\n if (this.view.selectable) {\n this.view.activateView();\n } else if (this.viewRight.selectable || this.viewRight.pageIndex === 0) {\n //this.viewRight.pageIndex === 0 indicates cover\n this.viewRight.activateView();\n }\n }\n }\n\n showSaving() {\n $(this.refs.saving).show();\n }\n\n hideSaving() {\n if (this.hideSavingTimeout) {\n clearTimeout(this.hideSavingTimeout);\n }\n this.hideSavingTimeout = setTimeout(() => {\n $(this.refs.saving).fadeOut();\n }, 500);\n }\n\n getZoom() {\n return this.state.selected ? this.state.selected.zoomFactor : 0;\n }\n\n handleWrapperClick = e => {\n if (activeView.selected && activeView.selected.slotState === 'editing') {\n e.stopPropagation();\n }\n };\n\n handleSlotChanged(slot) {\n if (slot && slot.isInactiveState()) return;\n\n this.setState({ slot, slotEvent: slotEvents.changed });\n }\n\n handleZoom(value) {\n value = parseFloat(value);\n\n const slot = this.state.selected;\n slot.zoomFactor = value;\n slot.view.zoomBy(0);\n stashFns.zoomChangeDelegator(stashFns.getImgSlotRef(slot), value);\n\n this.setState({\n selected: slot,\n });\n }\n\n clearBG(e) {\n if (\n e.target.className.indexOf('canvas-surround') !== -1 &&\n $('.canvas-wrapper').is(':visible')\n ) {\n // Selecting a slot can cause tools to appear under the current mouse pointer location.\n // When that happens a click is triggered on the parent element, which should\n // be ignored, because it's really a click on the canvas and has already been processed.\n // So we manually check for intersection and return early.\n if (!activeView.overlaps(e.clientX, e.clientY)) {\n activeView.deselectAll();\n }\n }\n\n this.forceUpdate();\n }\n\n isSelected(name) {\n if (this.inPreview()) {\n return false;\n }\n\n return (\n this[name] && this[name].selectable && this[name] === window.activeView\n );\n }\n\n navigateToPage = (pageIndex, dateIdentifier) => {\n // Update spreadIndex\n const { spread } = this.state;\n this.spreadIndex = pageIndex;\n\n if (spread.customPageId) {\n activeView = {\n pageIndex: spread.pages()[0],\n customPage: true,\n can_undo() {\n return false;\n },\n can_redo() {\n return false;\n },\n selectSlotById() {\n return true;\n },\n overlaps() {\n return false;\n },\n };\n\n this.view.selectable = false;\n this.viewRight.selectable = false;\n this.view.hideCanvas();\n this.view.show();\n\n this.dispatchWebUI(spread);\n return;\n }\n\n if (spread.left && spread.right) {\n this.updateViewsData(spread, dateIdentifier);\n\n this.view.show();\n this.viewRight.show();\n\n this.activateSelectable(spread);\n\n if (this.view.selectable && this.view.pageIndex === pageIndex) {\n this.view.activateView();\n } else if (\n this.viewRight.selectable &&\n this.viewRight.pageIndex === pageIndex\n ) {\n this.viewRight.activateView();\n } else {\n this.selectAnActiveView();\n }\n } else {\n // end if (spread.left && spread.right)\n const pgData = ([spread.left, spread.right].find(\n side => side && side.page\n ) || {})['page'];\n if (!pgData) return;\n\n usePrismItemStore\n .getState()\n .pageWithTemplate(pgData.index)\n .then(({ page }) => {\n if (dateIdentifier) page.dateIdentifier = dateIdentifier;\n this.view.setData(page);\n this.view.show();\n window.activeView = this.viewRight; // a hack to ensure PageThumbs are selected when navigating\n this.view.activateView();\n this.viewRight.hide();\n\n this.setState(({ double: prevDouble }) => {\n if (prevDouble) {\n return { double: false };\n }\n });\n });\n }\n\n this.dispatchWebUI(spread);\n this.activateSelectable(spread);\n };\n\n inPreview() {\n return (this.state || {}).mode === 'preview-mode';\n }\n\n customPageId() {\n return this.state.customPage && this.state.customPage.id;\n }\n\n dispatchWebUI(spread) {\n builderDispatch.delayedDispatch({\n type: WebUI.SHOWING_SPREAD,\n spread: spread,\n });\n\n builderDispatch.delayedDispatch({\n type: WebUI.PAGE_NAV,\n index: spread.pages()[0],\n pageIndex: this.spreadIndex,\n });\n }\n\n updateViewsData(spread, dateIdentifier) {\n if (!spread) return;\n\n // Update spreadIndex\n this.spreadIndex = spread && spread.spread;\n\n if (spread.left && spread.right) {\n if (has(spread.left, 'page.valid')) {\n usePrismItemStore.getState().getPage(spread.left.page.index, page => {\n if (dateIdentifier) page.dateIdentifier = dateIdentifier;\n this.view.setData(page, spread.left.hint, dateIdentifier);\n if (!has(spread.right, 'page.valid')) {\n this.viewRight.setData(spread.blankData(page), spread.right.hint);\n }\n });\n }\n\n if (has(spread.right, 'page.valid')) {\n usePrismItemStore.getState().getPage(spread.right.page.index, page => {\n if (dateIdentifier) page.dateIdentifier = dateIdentifier;\n this.viewRight.setData(page, spread.right.hint);\n if (!has(spread.left, 'page.valid')) {\n // set left synthetic\n this.view.setData(spread.blankData(page), spread.left.hint);\n }\n });\n }\n\n this.setState(\n () => {\n return { double: true };\n },\n () => {\n this.dispatchWebUI(spread);\n }\n );\n } else {\n const pgData = [spread.left, spread.right].find(\n side => side && side.page\n )['page'];\n usePrismItemStore.getState().getPage(pgData.index, page => {\n this.view.setData(page);\n this.view.show();\n window.activeView = this.viewRight; // a hack to ensure PageThumbs are selected when navigating\n this.view.activateView();\n this.viewRight.hide();\n\n this.setState(\n () => {\n return { double: false };\n },\n () => {\n this.dispatchWebUI(spread);\n }\n );\n });\n }\n }\n\n changeVisiblePage(page) {\n builderDispatch.delayedDispatch({\n type: WebUI.CHANGE_VISIBLE_PAGE,\n page,\n });\n }\n\n handleUpsellButtonOpen() {\n builderDispatch.delayedDispatch({\n type: WebUI.SHOWING_UPSELL_MODAL,\n });\n }\n}\n\n// React 16\n// PrismView.contextType = AppType;\nPrismView.contextTypes = AppType.Provider.childContextTypes;\n\nreactMixin(PrismView.prototype, RefreshOnEvents);\nreactMixin(PrismView.prototype, TrackPreviewMode);\n\nexport default PrismView;\n","// Import Libraries\nimport React from 'react';\nimport PropTypes from 'prop-types';\n// Import JS Modules\nimport { PrismUI } from '../../../../_utils/ui';\nimport PrismViewCanvas from '../../../prism/prism-view-canvas';\nimport IU from '../../../../_utils/img/img-utils';\nimport { TOP_TOOL_HEIGHT, BASE_TOOL_WIDTH, BASE_TOOL_HEIGHT } from './constants';\n// Import JSX Modules\nimport MananaSlider from '../../../../_utils/manana-slider';\nimport { EventEmitter } from 'wk-event-emitter';\n\nconst PAD = 10;\n\n// --------------------------------------------------------------------\n\nconst ImageSlotToolSimple = ({ slot }) => {\n if (!slot.editable) {\n return null;\n }\n if (!PrismViewCanvas.slotHasUserData(slot)) {\n return null;\n }\n\n const style = (() => {\n const { x1: leftSide, x2: rightSide, y1: topSide, y2: bottomSide } = slot.view.slotRegion(slot);\n\n if (rightSide - leftSide > (2 * BASE_TOOL_WIDTH) && bottomSide - topSide > (2 * (TOP_TOOL_HEIGHT + BASE_TOOL_HEIGHT))) {\n const right = innerWidth - rightSide + PAD;\n return {\n above: {\n top: topSide + PAD,\n right\n },\n below: {\n bottom: innerHeight - bottomSide + PAD,\n right\n }\n };\n }\n\n const right = innerWidth - rightSide;\n const left = (right > innerWidth - 2 * (BASE_TOOL_WIDTH + PAD)) ? 0 : 'auto';\n\n return {\n above: {\n top: topSide - PAD - TOP_TOOL_HEIGHT,\n right\n },\n below: {\n bottom: innerHeight - bottomSide - PAD - BASE_TOOL_HEIGHT,\n left,\n right\n }\n };\n })();\n\n return (\n <div className=\"slot-tools-simple image-slot\">\n <div className=\"tools-above position-fixed\" style={style.above}>\n <button\n aria-label=\"Delete photo\"\n className=\"btn btn-dark\"\n onClick={handleRemoveClick}>\n <i className=\"far fa-trash-alt\" />\n <span>Delete</span>\n </button>\n </div>\n\n <div className=\"tools-below position-fixed d-flex align-items-center\" style={style.below}>\n <div className=\"d-none slot-tools-simple-zoom\">\n <MananaSlider\n className=\"form-control form-control-lg form-control-range\"\n label=\"Crop or zoom\"\n max={IU.MAX_ZOOM}\n min={IU.MIN_ZOOM}\n step=\"0.01\"\n value={slot.zoomFactor || IU.DEF_ZOOM}\n handleChange={handleZoom} />\n </div>\n\n <button\n aria-label=\"Rotate photo 90 degrees\"\n className=\"btn btn-dark\"\n onClick={handleRotateClick}>\n <i className=\"fas fa-sync\" />\n <span>Rotate</span>\n </button>\n <button\n aria-label=\"Enhance photo\"\n className=\"btn btn-dark slot-tools-simple-open-el2\"\n onClick={handleLaunchEditLevel2}>\n <i className=\"far fa-edit\" />\n <span>Edit</span>\n </button>\n </div>\n </div>\n );\n\n function handleZoom(value) {\n slot.view.setZoom(value);\n }\n\n function handleRotateClick() {\n slot.view.rotate(-IU.RIGHT_ANGLE);\n }\n\n function handleLaunchEditLevel2() {\n EventEmitter.emit(PrismUI.OPEN_EDIT_MODAL, {\n view: slot.view,\n slot,\n });\n }\n\n function handleRemoveClick() {\n slot.setProperties({\n x: null,\n y: null,\n zoom: null\n });\n\n slot.view.removeImageFromSlot(slot.id);\n }\n};\n\nImageSlotToolSimple.propTypes = {\n slot: PropTypes.object.isRequired\n};\n\n// --------------------------------------------------------------------\n\nexport default ImageSlotToolSimple;\n","export const imgLoaded = function (img) {\n return img && img.complete && img.width > 0;\n};\n\nexport const imgLoading = function (img) {\n return img && img.src && (!img.complete);\n};\n\nexport const imgFailed = function (img) {\n return (!img) || (img && img.complete && img.width == 0);\n};\n\nexport class ImageWatcher {\n constructor(img, callback) {\n this.img = img;\n if (callback) {\n this.watch(callback);\n }\n }\n\n watch(callback) {\n if (this.watcher) this.unwatch();\n this.watcher = callback;\n this.img.addEventListener('load', this.watcher, true);\n this.img.addEventListener('error', this.watcher, true);\n if (imgLoaded(this.img) || imgFailed(this.img)) {\n window.setTimeout(() => {\n callback(`setTimeout on ${this.img.src}${[imgLoaded(this.img), imgFailed(this.img)].join(',')}`);\n }, 50);\n }\n }\n\n unwatch() {\n this.img.removeEventListener('load', this.watcher, true);\n this.img.removeEventListener('error', this.watcher, true);\n this.watcher = undefined;\n }\n}\n","// Import Libraries\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport SpinnerCover from '../../_utils/spinner-cover';\nimport {\n ImageWatcher,\n imgLoading,\n imgLoaded,\n imgFailed,\n} from './image-watcher';\n\nvar easing = {\n linear(x, t, b, c, d) {\n return b + c * x;\n },\n def: 'easeOutQuad',\n swing(x, t, b, c, d) {\n // alert($.easing.default);\n return easing[easing.def](x, t, b, c, d);\n },\n easeInQuad(x, t, b, c, d) {\n return c * (t /= d) * t + b;\n },\n easeOutQuad(x, t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n },\n easeInOutQuad(x, t, b, c, d) {\n if ((t /= d / 2) < 1) return (c / 2) * t * t + b;\n return (-c / 2) * (--t * (t - 2) - 1) + b;\n },\n easeInCubic(x, t, b, c, d) {\n return c * (t /= d) * t * t + b;\n },\n easeOutCubic(x, t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n },\n easeInOutCubic(x, t, b, c, d) {\n if ((t /= d / 2) < 1) return (c / 2) * t * t * t + b;\n return (c / 2) * ((t -= 2) * t * t + 2) + b;\n },\n easeInQuart(x, t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart(x, t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n easeInOutQuart(x, t, b, c, d) {\n if ((t /= d / 2) < 1) return (c / 2) * t * t * t * t + b;\n return (-c / 2) * ((t -= 2) * t * t * t - 2) + b;\n },\n easeInQuint(x, t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n },\n easeOutQuint(x, t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n },\n easeInOutQuint(x, t, b, c, d) {\n if ((t /= d / 2) < 1) return (c / 2) * t * t * t * t * t + b;\n return (c / 2) * ((t -= 2) * t * t * t * t + 2) + b;\n },\n easeInSine(x, t, b, c, d) {\n return -c * Math.cos((t / d) * (Math.PI / 2)) + c + b;\n },\n easeOutSine(x, t, b, c, d) {\n return c * Math.sin((t / d) * (Math.PI / 2)) + b;\n },\n easeInOutSine(x, t, b, c, d) {\n return (-c / 2) * (Math.cos((Math.PI * t) / d) - 1) + b;\n },\n easeInExpo(x, t, b, c, d) {\n return t == 0 ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n },\n easeOutExpo(x, t, b, c, d) {\n return t == d ? b + c : c * (-Math.pow(2, (-10 * t) / d) + 1) + b;\n },\n easeInOutExpo(x, t, b, c, d) {\n if (t == 0) return b;\n if (t == d) return b + c;\n if ((t /= d / 2) < 1) return (c / 2) * Math.pow(2, 10 * (t - 1)) + b;\n return (c / 2) * (-Math.pow(2, -10 * --t) + 2) + b;\n },\n easeInCirc(x, t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n },\n easeOutCirc(x, t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n },\n easeInOutCirc(x, t, b, c, d) {\n if ((t /= d / 2) < 1) return (-c / 2) * (Math.sqrt(1 - t * t) - 1) + b;\n return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n },\n easeInElastic(x, t, b, c, d) {\n let s = 1.70158;\n let p = 0;\n let a = c;\n if (t == 0) return b;\n if ((t /= d) == 1) return b + c;\n if (!p) p = d * 0.3;\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = (p / (2 * Math.PI)) * Math.asin(c / a);\n }\n return (\n -(\n a *\n Math.pow(2, 10 * (t -= 1)) *\n Math.sin(((t * d - s) * (2 * Math.PI)) / p)\n ) + b\n );\n },\n easeOutElastic(x, t, b, c, d) {\n let s = 1.70158;\n let p = 0;\n let a = c;\n if (t == 0) return b;\n if ((t /= d) == 1) return b + c;\n if (!p) p = d * 0.3;\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = (p / (2 * Math.PI)) * Math.asin(c / a);\n }\n return (\n a * Math.pow(2, -10 * t) * Math.sin(((t * d - s) * (2 * Math.PI)) / p) +\n c +\n b\n );\n },\n easeInOutElastic(x, t, b, c, d) {\n let s = 1.70158;\n let p = 0;\n let a = c;\n if (t == 0) return b;\n if ((t /= d / 2) == 2) return b + c;\n if (!p) p = d * (0.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n s = p / 4;\n } else {\n s = (p / (2 * Math.PI)) * Math.asin(c / a);\n }\n if (t < 1)\n return (\n -0.5 *\n (a *\n Math.pow(2, 10 * (t -= 1)) *\n Math.sin(((t * d - s) * (2 * Math.PI)) / p)) +\n b\n );\n return (\n a *\n Math.pow(2, -10 * (t -= 1)) *\n Math.sin(((t * d - s) * (2 * Math.PI)) / p) *\n 0.5 +\n c +\n b\n );\n },\n easeInBack(x, t, b, c, d, s) {\n if (s == undefined) s = 1.70158;\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n },\n easeOutBack(x, t, b, c, d, s) {\n if (s == undefined) s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n },\n easeInOutBack(x, t, b, c, d, s) {\n if (s == undefined) s = 1.70158;\n if ((t /= d / 2) < 1)\n return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;\n return (c / 2) * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;\n },\n easeInBounce(x, t, b, c, d) {\n return c - easing.easeOutBounce(x, d - t, 0, c, d) + b;\n },\n easeOutBounce(x, t, b, c, d) {\n if ((t /= d) < 1 / 2.75) return c * (7.5625 * t * t) + b;\n if (t < 2 / 2.75) return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;\n if (t < 2.5 / 2.75)\n return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;\n\n return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;\n },\n easeInOutBounce(x, t, b, c, d) {\n if (t < d / 2) return easing.easeInBounce(x, t * 2, 0, c, d) * 0.5 + b;\n return easing.easeOutBounce(x, t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n },\n};\n\nexport const DEFAULT_TRANSITION = 1000 * 0.7;\nconst MODE_TRANSITION = 'transition';\nconst MODE_ORIG_LOADING = 'orig-loading';\nconst MODE_ORIG = 'orig';\nconst MODE_IMG_FAILED = 'failed';\nconst MODE_IMG = 'img';\n\nclass CanvasImage extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n width: props.width || 1440,\n height: props.height || 1080,\n started: 0,\n mode: MODE_ORIG,\n };\n\n this.watches = {};\n }\n\n render() {\n // extract img property\n const {\n img,\n orig,\n background,\n width,\n height,\n setBelongsToCanvasImage,\n ...copyOfProps\n } = this.props;\n\n if (imgLoading(this.orig) || imgLoading(this.img)) {\n return (\n <div className=\"canvas-image-container\">\n <SpinnerCover spinning>\n <canvas\n ref=\"canvas\"\n width={this.state.width}\n height={this.state.height}\n {...copyOfProps}\n />\n </SpinnerCover>\n </div>\n );\n }\n return (\n <div>\n <canvas\n ref=\"canvas\"\n width={this.state.width}\n height={this.state.height}\n {...copyOfProps}\n />\n <span className=\"hover-icon fa-stack fa-2x text-black-50\">\n <i className=\"fas fa-square fa-stack-2x\" />\n <i className=\"fas fa-pencil-alt fa-stack-1x fa-inverse\" />\n </span>\n </div>\n );\n }\n\n componentDidMount() {\n const { setBelongsToCanvasImage } = this.props;\n this.resizeTo(this.orig);\n this.watch('img');\n this.watch('orig');\n this.checkMode();\n setBelongsToCanvasImage && setBelongsToCanvasImage();\n }\n\n componentWillUnmount() {\n this.unwatch('orig');\n this.unwatch('img');\n this.cancelDraw();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.img !== this.props.img) {\n imgLoading(this.orig)\n ? this.updateMode(MODE_ORIG_LOADING)\n : this.updateMode(MODE_ORIG);\n this.watch('img');\n this.checkMode();\n }\n if (prevProps.orig !== this.props.orig) {\n this.watch('orig');\n this.checkMode();\n }\n }\n\n updateMode(mode, callback) {\n this.setState({ mode }, () => {\n if (callback) {\n callback();\n }\n });\n }\n\n resizeTo(img) {\n if (!imgLoaded(img)) return;\n\n if (img.width === this.state.width && img.height === this.state.height)\n return;\n this.setState({\n width: img.width,\n height: img.height,\n });\n }\n\n watch(property) {\n this.unwatch(property);\n\n const image = this[property] || this.props[property];\n const loadedState = {};\n loadedState[property] = true;\n\n if (!image) return;\n\n if (typeof image === 'string') {\n const imgObj = new Image();\n imgObj.crossOrigin = 'anonymous';\n imgObj.src = image;\n this[property] = imgObj;\n } else {\n this[property] = image;\n }\n\n this.watches[property] = new ImageWatcher(this[property], why =>\n this.setState(loadedState, () =>\n this.checkMode([this[property].src, why])\n )\n );\n }\n\n unwatch(property) {\n const unloadedState = {};\n unloadedState[property] = false;\n\n this.watches[property] && this.watches[property].unwatch();\n delete this.watches[property];\n delete this[property];\n this.setState(unloadedState);\n }\n\n checkMode(why) {\n switch (this.state.mode) {\n case MODE_ORIG_LOADING:\n if (imgLoaded(this.orig)) {\n this.updateMode(MODE_ORIG, () => {\n this.resizeTo(this.orig);\n });\n }\n break;\n case MODE_ORIG:\n if (imgFailed(this.img)) {\n this.updateMode(MODE_IMG_FAILED, () => {\n if (imgLoaded(this.orig)) {\n this.resizeTo(this.orig);\n }\n });\n } else if (imgLoaded(this.img)) {\n this.setState(\n {\n mode: MODE_TRANSITION,\n started: this.now(),\n width: this.img.width,\n height: this.img.height,\n },\n () => this.draw()\n );\n }\n break;\n case MODE_TRANSITION:\n if (this.elapsed > this.animationTime) {\n this.updateMode(MODE_IMG, () => {\n this.setState({ started: 0 });\n });\n }\n break;\n case MODE_IMG_FAILED:\n break;\n }\n this.draw();\n }\n\n getContext() {\n return ReactDOM.findDOMNode(this.refs.canvas).getContext('2d');\n }\n\n queueDraw() {\n this.reqId = this.reqId || window.requestAnimationFrame(() => this.draw());\n }\n\n cancelDraw() {\n this.cancelled = true;\n if (this.reqId) window.cancelAnimationFrame(this.reqId);\n this.reqId = null;\n }\n\n draw() {\n const ctx = this.getContext();\n const { img } = this;\n const { orig } = this;\n\n if (this.props.background === 'transparent') {\n ctx.clearRect(0, 0, this.state.width, this.state.height);\n } else {\n ctx.fillStyle = this.props.background || '#f7f7f7';\n ctx.fillRect(0, 0, this.state.width, this.state.height);\n }\n\n this.reqId = null;\n switch (this.state.mode) {\n case MODE_TRANSITION:\n this.drawTransition(ctx, img, orig);\n break;\n case MODE_IMG:\n this.drawImg(ctx, img, 1);\n break;\n case MODE_ORIG_LOADING:\n case MODE_ORIG:\n case MODE_IMG_FAILED:\n default:\n this.drawImg(ctx, orig, 1);\n break;\n }\n }\n\n drawTransition(ctx, img, orig) {\n // val/max, val, start, end, max\n const time = this.elapsed;\n const max = this.animationTime;\n const origAlpha = 1 - easing.easeOutCubic(time / max, time, 0, 1.0, max);\n const imgAlpha = easing.easeInQuad(time / max, time, 0, 1.0, max);\n if (time === null) return;\n\n if (time < max) {\n this.drawImg(ctx, orig, origAlpha);\n this.queueDraw();\n } else {\n this.updateMode(MODE_IMG);\n }\n\n this.drawImg(ctx, img, imgAlpha);\n }\n\n drawImg(ctx, img, alpha) {\n if (!imgLoaded(img)) {\n return;\n }\n\n const s1 = this.state.width / img.width;\n const s2 = this.state.height / img.height;\n const s3 = s1 < s2 ? s1 : s2;\n const s = s3 > 1 ? 1 : s3;\n ctx.save();\n\n ctx.translate(Math.floor(this.state.width / 2), 0);\n ctx.scale(s3, s3);\n ctx.translate(-Math.floor(img.width / 2), 0);\n ctx.globalAlpha = alpha;\n ctx.drawImage(img, 0, 0);\n ctx.restore();\n }\n\n now() {\n return new Date().getTime();\n }\n\n get elapsed() {\n if (this.state.started) {\n return this.now() - this.state.started;\n }\n return null;\n }\n\n get animationTime() {\n return this.props.max || DEFAULT_TRANSITION;\n }\n}\n\nexport default CanvasImage;\n","'use strict';\n\n// Import Libraries\nimport React from 'react';\n// Import JS Modules\nimport { builderDispatch, WebUI, PrismUI } from '../../_utils/ui';\nimport { getViewport } from '../../_utils/hoc/with-viewport-size';\n\n// --------------------------------------------------------------------\n\nclass ChicletsBase extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n disabled: false\n };\n }\n\n componentDidMount() {\n this.loadItems();\n\n this.dispatchToken = builderDispatch.register(payload => {\n switch (payload.type) {\n case PrismUI.SAVE_DONE:\n this.loadItems();\n break;\n case WebUI.UPLOAD_ERROR:\n case WebUI.UPLOAD_BEGUN:\n case WebUI.UPLOAD_DONE:\n this.setState({\n disabled: false\n });\n break;\n case WebUI.HIDE_CUSTOM_PAGE:\n this.handleItemClick(getViewport().isMobile ? \"photos\" : \"design\");\n break;\n }\n });\n }\n\n componentWillUnmount() {\n builderDispatch.unregister(this.dispatchToken);\n }\n\n handleItemClick(option) {\n if (typeof this.props.onClicked === 'function') {\n activeView.deselectAll && activeView.deselectAll();\n this.props.onClicked(option);\n }\n }\n}\n\n// --------------------------------------------------------------------\n\nexport default ChicletsBase;\n","import { usePrismItemStore } from 'stores/usePrismItemStore';\n\nclass HideUsedPhotos {\n static get() {\n return sessionStorage.getItem(`hideUsedPhotos:${usePrismItemStore.getState().prismItem.id}`) === 'true';\n }\n\n static set(value) {\n sessionStorage.setItem(`hideUsedPhotos:${usePrismItemStore.getState().prismItem.id}`, `${value}`);\n }\n}\n\nexport default HideUsedPhotos;\n","'use strict';\n\n// Import Libraries\nimport React from 'react';\n// Import JS Modules\nimport fetchImage from '../../../_utils/fetch-image';\nimport IU from '../../../_utils/img/img-utils';\nimport stashFns from '../../misc/stash-fns';\nimport genericHelpers from '../../../_utils/generic-helpers';\nimport HideUsedPhotos from '../../utils/hide-used-photos';\nimport sendToGoogleAnalytics from '../../desktop/slot-tools/send-to-google-analytics';\nimport { ThumbnailStore, prismAction } from '../../utils/stores';\nimport { autofillOnImageUploadNormal } from '../../utils/autofill';\nimport { WebUI, PrismUI, builderDispatch } from '../../../_utils/ui';\nimport { isMultiPageStandardProduct } from '../../trays/tray-determiner';\nimport { fireAddPhotos } from '../../desktop/lib/add-photos-interface';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\nconst urlMunge = IU.imgHelpers.urlMunge;\n\n// --------------------------------------------------------------------\nclass PhotosTrayBase extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n pending: false,\n removed: [],\n };\n\n this.handleSaveDone = genericHelpers.debounce(this.handleSaveDone);\n }\n\n componentDidMount() {\n this.dispatchToken = builderDispatch.register(payload => {\n switch (payload.type) {\n case WebUI.UPLOAD_BEGUN:\n this.handleUploadBegun(payload);\n break;\n case WebUI.UPLOAD_PROGRESS:\n this.handleUploadProgress(payload);\n builderDispatch.delayedDispatch({\n type: PrismUI.IMAGES_UPDATED\n });\n break;\n case WebUI.UPLOAD_DONE:\n this.handleUploadDone();\n break;\n case PrismUI.SAVE_DONE:\n this.handleSaveDone();\n break;\n }\n });\n }\n\n componentWillUnmount() {\n builderDispatch.unregister(this.dispatchToken);\n }\n\n getThumbnails() {\n const images = (() => {\n const removed = this.state.removed.reduce((memo, id) => {\n memo[id] = true;\n return memo;\n }, {});\n\n return ThumbnailStore.list().filter(image => !removed[image.id]);\n })();\n\n return {\n $thumbnails: images.map(this.renderThumbnail),\n empty: images.length === 0\n };\n }\n\n handleUploadDone() {\n this.setState({ pending: false });\n }\n\n shouldAutofill = () => {\n if (isMultiPageStandardProduct() && this.hasSingleImageSlot()) return false;\n }\n\n hasSingleImageSlot = () => {\n if (!window.activeView) {\n return false;\n }\n\n let count = 0;\n\n window.activeView.slots.forEach(slot => {\n if (slot.isImage) {\n count++;\n }\n });\n\n return count === 1;\n }\n\n handleAddClick = (imageId, url) => {\n if (!window.activeView) {\n return;\n }\n const slotId = (() => {\n if (window.activeView && activeView.selected && activeView.selected.acceptsImage({ allowOptionalBackground: true })) {\n return activeView.selected.id;\n }\n\n return activeView.findFirstAvailableImageSlot();\n })();\n\n const imgSlotRef = stashFns.getImgSlotRef({ id: slotId, imgId: imageId });\n const data = stashFns.getAllImageStateValues(imgSlotRef, { image: imageId });\n const img = fetchImage(urlMunge(url), 'use-credentials');\n\n activeView.setImageById(slotId, img, data);\n activeView.do_save();\n\n builderDispatch.dispatch({\n type: WebUI.PHOTO_TRAY_IMAGE_CLICKED\n });\n }\n\n handleRemoveClick = (imageId) => {\n this.setState(prevState => {\n return {\n removed: prevState.removed.concat(imageId)\n }\n }, () => {\n prismAction.deleteImage(imageId).done(() => {\n ThumbnailStore.remove(imageId);\n // State needs to be forced as ThumbnailStore is bound to\n // the window and not flux/react state.\n this.forceUpdate();\n });\n });\n };\n\n handleUploadBegun({ number_of_files }) {\n this.setState(() => {\n return {\n pending: true,\n progress: {\n current: 1,\n total: number_of_files,\n },\n };\n });\n };\n\n handleUploadProgress() {\n this.setState(prevState => {\n const { progress: prevProgress } = prevState;\n const nextProgress = {\n ...prevProgress,\n current: prevProgress?.current + 1,\n };\n\n if (nextProgress?.current <= nextProgress.total) {\n return {\n progress: nextProgress,\n };\n }\n\n return {};\n });\n }\n\n handleHideUsedPhotos = () => {\n const callback = () => {\n HideUsedPhotos.set(this.state.filterUsed);\n };\n\n this.setState(({ filterUsed: prevFilterUsed }) => {\n return {\n filterUsed: !prevFilterUsed,\n };\n }, callback);\n };\n\n\n handleAutofillClick = () => {\n this.setState({\n showAutofillModal: true,\n });\n sendToGoogleAnalytics('photos-tray', 'autoFill-click')\n };\n\n handleAutofillClose = () => {\n this.setState({\n showAutofillModal: false,\n });\n };\n\n handlePhotoLoaderClick = () => {\n sendToGoogleAnalytics('photos-tray','add-photos')\n fireAddPhotos();\n };\n\n handleUploadClosed() {\n if (this.addPhotosButtonRef) {\n this.addPhotosButtonRef.focus();\n }\n }\n\n clearErrors = () => {\n this.setState({\n pending: false,\n progress: null,\n });\n usePrismItemStore.setState(() => ({\n failedImagesUploaded: []\n }));\n }\n\n handleSaveDone = () => {\n this.forceUpdate();\n };\n}\n\nexport default PhotosTrayBase;\n","// Import Libraries\nimport React from 'react';\n// Import JS Modules\nimport { builderDispatch } from './ui';\nimport genericHelpers from './generic-helpers';\n\n// -----------------------------------------------------------\n// refreshOnEvents\n// -----------------------------------------------------------\nfunction getDisplayName(Component) {\n return Component.displayName || Component.name || 'Component';\n}\n\nconst refreshOnEvents = (events, options = {}) => WrappedComponent => (\n class RefreshOnEvents extends React.Component {\n static displayName =\n `RefreshOnEvents(${getDisplayName(WrappedComponent)})`;\n\n\n constructor(props) {\n super(props);\n\n this.handleRefresh = genericHelpers.debounce(this.handleRefresh);\n }\n\n componentDidMount() {\n this.dispatchToken = builderDispatch.register(({ type }) => {\n if (events.indexOf(type) !== -1) {\n this.handleRefresh();\n }\n });\n }\n\n componentWillUnmount() {\n builderDispatch.unregister(this.dispatchToken);\n }\n\n render() {\n let props = this.props;\n if (options.key) { props = {key: options.key(), ...this.props}; }\n return <WrappedComponent {...props} />;\n }\n\n handleRefresh = () => {\n this.forceUpdate();\n }\n }\n);\n\nexport default refreshOnEvents;\n","import React from 'react';\n\nconst FavouritesTrayItemPreview = ({image}) => {\n return (\n <div className=\"favourites-tray-item-preview\">\n <img\n src={image}\n className=\"favourites-tray-item-preview-image\"\n alt=\"Favourites Tray Item Preview\"\n />\n </div>\n );\n}\n\nexport default FavouritesTrayItemPreview;\n","import React from 'react';\n\nconst FavouritesTrayItemPreviewDesktop = ({image, handleClick}) => {\n return (\n <div className=\"favourites-tray-item-preview-desktop-overlay\">\n <div className=\"favourites-tray-item-preview-desktop\">\n <img src={image} className=\"favourites-tray-item-preview-image-desktop\" alt=\"favourites preview\"/>\n <button\n className=\"btn btn-link btn-close float-right\"\n aria-label=\"Close\"\n autoFocus\n onClick={handleClick}>\n <i className=\"skinny-icon close\"/>\n </button>\n </div>\n </div>\n );\n}\n\nexport default FavouritesTrayItemPreviewDesktop;\n","import React, { Component } from 'react';\n\n// Import JS Modules\n\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport FavouritesTrayItemPreview from \"../common/trays/favourites-tray-item-preview\";\nimport FavouritesTrayItemPreviewDesktop from \"../common/trays/favourites-tray-item-preview-desktop\";\nimport { getViewport } from \"../../_utils/hoc/with-viewport-size\";\n\nconst DRAG_ITEM = 'drag-item';\nconst DRAG_ITEM_HEIGHT = 60;\nconst DRAG_ITEM_WIDTH = 92;\nlet previewTimeout;\n\nconst PreviewIconButton = ( { handleClick } ) => {\n return (\n <span className=\"btn-zoom position-relative\" onClick={handleClick} >\n <i className=\"skinny-icon zoom-in\" />\n </span>\n );\n}\n\nclass DragItem extends Component {\n static propTypes = {\n children: PropTypes.element.isRequired,\n className: PropTypes.string,\n onDragStart: PropTypes.func,\n onDrop: PropTypes.func,\n mobileTouchEvent: PropTypes.func,\n image: PropTypes.string,\n showPreviewIconButton: PropTypes.bool\n };\n\n constructor() {\n super();\n this.state = {};\n }\n\n render() {\n return (\n <div ref={drag => this.drag = drag} onContextMenu={this.showContextMenu}\n className={classNames('draggable-item d-inline-block', this.props.className)}\n draggable\n onDragStart={this.handleDragStart}\n onDragEnd={this.handleDragEnd}\n onTouchStart={this.handleTouchStart}\n onTouchMove={this.handleTouchMove}\n onTouchEnd={this.handleTouchEnd}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n onClick={this.handleClick}>\n {this.props.children}\n {this.state.showItemPreview && <FavouritesTrayItemPreview image={this.props.image} />}\n {\n this.state.showItemPreviewDesktop &&\n <FavouritesTrayItemPreviewDesktop\n image={this.props.image}\n handleClick={this.showItemPreviewDesktop}\n />\n }\n {\n this.showPreviewIconButton()\n && <PreviewIconButton\n handleClick={this.showItemPreviewDesktop}\n />\n }\n </div>\n );\n }\n\n get dragItem() {\n return document.getElementById(DRAG_ITEM);\n }\n\n get childItem() {\n return this.drag.children[0];\n }\n\n showContextMenu = (e) => {\n if (getViewport().isMobile) {\n e.preventDefault();\n e.stopPropagation();\n return false;\n }\n }\n\n showPreviewIconButton = () => {\n const { showPreviewIconButton } = this.props;\n if (getViewport().isMobile) return false;\n\n return showPreviewIconButton;\n }\n\n handleClick = () => {\n if (this.state.showItemPreview) {\n return this.handleTouch();\n }\n if (this.state.showItemPreviewDesktop) {\n return this.setState({ showItemPreviewDesktop: false })\n }\n this.childItem.click();\n };\n\n handleMouseEnter = () => {\n this.childItem.classList.add('hover');\n };\n\n handleMouseLeave = () => {\n this.childItem.classList.remove('hover');\n };\n\n handleDragStart = event => {\n const dataStr = this.childItem.dataset.dragPayload;\n const payload = JSON.parse(dataStr);\n\n event.dataTransfer.effectAllowed = 'copy';\n event.dataTransfer.setData('text', dataStr || '');\n Object.keys(payload).forEach((key) => {\n event.dataTransfer.setData(key, JSON.stringify(payload[key]));\n });\n }\n\n handleDragEnd = () => {\n };\n\n handleTouchStart = () => {\n this.previewTouchEvent();\n\n const dragItem = document.createElement('div');\n dragItem.id = DRAG_ITEM;\n document.body.appendChild(dragItem);\n\n this.backgroundImage = (this.backgroundImage || (() => {\n return `url(${this.childItem.dataset.dragImg})`;\n })());\n\n setTimeout(this.makeVisible, 500);\n };\n\n previewTouchEvent = () => {\n if (!getViewport().isMobile || !this.props.image) return false;\n let modalShowing = this.state.showItemPreview;\n\n previewTimeout = setTimeout(() => {\n this.setState({ showItemPreview: true });\n if (modalShowing) this.setState({ showItemPreview: false });\n }, 500);\n }\n\n handleTouch() {\n this.setState({ showItemPreview: false });\n }\n\n handleTouchMove = event => {\n this.clearPreviewTimeout();\n const dragItem = this.dragItem;\n const trayHeight = $('aside.chiclets-and-tray')[0].clientHeight;\n const scrollTray = $('div.button-ribbon > div.buttons.d-flex.w-100')[0];\n const { clientX, clientY } = event.touches[0];\n\n dragItem.style.left = (clientX - DRAG_ITEM_WIDTH) + 'px';\n dragItem.style.top = (clientY - DRAG_ITEM_HEIGHT) + 'px';\n dragItem.style.backgroundImage = this.backgroundImage;\n\n if (clientY < window.innerHeight - trayHeight) {\n scrollTray.classList.add('drag-start');\n }\n\n const view = this.getActiveView(clientX, clientY);\n $(view).trigger('dragover', event);\n };\n\n handleTouchEnd = event => {\n this.clearPreviewTimeout();\n const dragItem = this.dragItem;\n const scrollTray = $('div.button-ribbon > div.buttons.d-flex.w-100')[0];\n this.triggerCanvasEvent(event);\n dragItem.parentElement.removeChild(dragItem);\n scrollTray.classList.remove('drag-start');\n\n const { clientX, clientY } = event.changedTouches[0];\n const element = document.elementFromPoint(clientX, clientY);\n\n // Don't trigger the drop event if the drag item has\n // not left the tray\n if (element && element.closest('.chiclets-and-tray')) return;\n\n this.props.onDrop && this.props.onDrop();\n };\n\n clearPreviewTimeout = () => {\n if (previewTimeout) {\n clearTimeout(previewTimeout);\n previewTimeout = null;\n }\n if (this.state.showItemPreview) {\n this.setState({ showItemPreview: false });\n }\n }\n\n getActiveView = (x, y) => {\n // Get the element at the drag coordinates\n const element = document.elementFromPoint(x, y);\n\n return element && element.classList.contains('prism-viewport-canvas')\n ? element\n : null;\n }\n\n makeVisible = () => {\n const dragItem = this.dragItem;\n if (!dragItem) return;\n dragItem.classList.add('visible');\n };\n\n triggerCanvasEvent = event => {\n $(activeView.el).trigger('drop', event);\n };\n\n showItemPreviewDesktop = (e) => {\n e.stopPropagation();\n\n if (this.state.showItemPreviewDesktop) {\n return this.setState({ showItemPreviewDesktop: false })\n }\n\n this.setItemPreviewDesktopPosition(e.clientY, e.clientX);\n this.setState({ showItemPreviewDesktop: true })\n }\n\n setItemPreviewDesktopPosition = (top, left) => {\n const offsetTop = 80;\n const offsetLeft = 40;\n const element = document.documentElement;\n\n element.style.setProperty('--favourites-tray-item-preview-left', (left+offsetLeft) + \"px\");\n element.style.setProperty('--favourites-tray-item-preview-top', (top-offsetTop) + \"px\");\n }\n}\n\nexport default DragItem;\n","import React from 'react';\nimport classNames from 'classnames';\n\n const spinner = (props) => (\n <div className=\"spinner-backdrop\">\n <i className={ classNames(\"accent-text fas fa-circle-notch fa-spin\", props.classes) } />\n </div>\n);\n\n export default spinner;","'use strict';\n\n// Import Libraries\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport classNames from 'classnames';\n// Import JS Modules\nimport { getFoldersBySection } from '../../trays/favourites-tray-helpers';\nimport { hasEdgesTray } from '../../trays/tray-determiner';\nimport TemplateStore from '../../templates/template-store';\nimport templateInterrogator from '../../misc/template-interrogator';\nimport IU from '../../../_utils/img/img-utils';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\nimport { useTabTray } from 'stores/useTabTray';\nimport { useTemplateSelectStore } from 'stores/useTemplateStore';\n// Import JSX Modules\nimport DragItem from '../../utils/drag-item';\nimport Spinner from '../../utils/spinner';\nimport isCard from '../../utils/is-card';\nimport { isAlbum } from '../../trays/tray-determiner';\n\nimport sendToGoogleAnalytics from '../../desktop/slot-tools/send-to-google-analytics';\n\nconst urlMunge = IU.imgHelpers.urlMunge;\n\nconst layoutFilter = {\n left: 'right',\n right: 'left',\n};\n\n// --------------------------------------------------------------------\n\nclass LayoutTemplateItem extends React.PureComponent {\n state = {};\n\n componentDidMount() {\n this._isMounted = true;\n if (this.props.onMounted) {\n this.props.onMounted(this);\n } else if (this.props.autoLoad) {\n this.show();\n }\n }\n\n componentWillUnmount() {\n this._isMounted = false;\n }\n\n render() {\n const { loaded } = this.state;\n const {\n id,\n name,\n autoFocus,\n label,\n selected,\n draggable = true,\n } = this.props;\n\n if (!loaded) {\n return (\n <button\n className=\"btn btn-link btn-thumbnail\"\n aria-label={label}\n aria-pressed={selected}\n autoFocus={autoFocus}\n onClick={this.handleClick}>\n <Spinner />\n </button>\n );\n }\n\n const orientation = this.orientation;\n const src = this.src;\n\n const $button = (\n <button\n aria-label={label}\n aria-pressed={selected}\n className={classNames(\n 'btn btn-link btn-thumbnail flex-shrink-0 rounded-0',\n orientation,\n { selected: selected }\n )}\n data-click-event={`layout:${id}`}\n data-drag-img={src}\n data-drag-payload={JSON.stringify({ layoutId: id, orientation })}\n onClick={this.handleClick}>\n <img\n alt={name}\n className={classNames('img-fluid', {\n 'template-selected-modal': this.props.selectedTemplateEasyBooks,\n })}\n src={src}\n />\n </button>\n );\n\n if (!draggable) {\n return $button;\n }\n\n return (\n <DragItem className={classNames(orientation)} onDrop={this.handleClick}>\n {$button}\n </DragItem>\n );\n }\n\n get src() {\n let { src } = this.props;\n\n src = src.replace('/prismlayouts', '/prismthumbs');\n return urlMunge(src);\n }\n\n get orientation() {\n const { tags } = this.props;\n return templateInterrogator.orientationByTags(tags);\n }\n\n handleClick = async () => {\n if (this.props.onClick) {\n this.props.onClick(this.props.id);\n }\n\n sendToGoogleAnalytics('layouts', `${this.props.label}`);\n\n useTabTray.getState().updateShowPhotosTray(true);\n\n useTemplateSelectStore.getState().updateTemplateSelectStore({\n templateID: this.props.id,\n orientation: this.orientation,\n });\n };\n\n show = () => {\n const image = new Image();\n image.crossOrigin = 'use-credentials';\n image.onload = () => {\n this._isMounted &&\n this.setState({\n loaded: true,\n });\n };\n image.src = this.src;\n };\n}\n\n// --------------------------------------------------------------------\n\n// this is actually for design templates but it's called layouts\nclass LayoutsTrayBase extends React.Component {\n constructor(props) {\n super(props);\n }\n\n UNSAFE_componentWillMount() {\n this._observing = [];\n\n const observerOptions = {\n root: ReactDOM.findDOMNode(this),\n rootMargin: '0px 50px 50px 0px',\n };\n this._observer = new IntersectionObserver(\n this.handleItemHovedIntoView,\n observerOptions\n );\n }\n\n componentWillUnmount() {\n this._observer.disconnect();\n }\n\n get foldersBySection() {\n return getFoldersBySection(this.templateGroups, hasEdgesTray());\n }\n\n get templateGroups() {\n try {\n const templateGroups = TemplateStore.list() || [];\n\n const prismItem = usePrismItemStore.getState().prismItem;\n\n if (isCard())\n return templateInterrogator.filterTemplatesForThoseWithMultipleOrientations(\n templateGroups\n );\n if (isAlbum() && prismItem.pages?.[activeView.pageIndex]?.['page-is']) {\n const oppositeSide =\n layoutFilter[prismItem.pages[activeView.pageIndex]['page-is']];\n\n return templateInterrogator.filterTemplates(templateGroups, {\n side: oppositeSide,\n });\n }\n\n return templateGroups;\n } catch (error) {\n console.error(error);\n return [];\n }\n }\n\n handleItemMounted = item => {\n const element = ReactDOM.findDOMNode(item);\n\n this._observing.push({ item, element });\n this._observer.observe(element);\n };\n\n handleItemHovedIntoView = entries => {\n entries = entries.filter(entry => entry.isIntersecting);\n let i = 0;\n\n while (i < this._observing.length) {\n const observee = this._observing[i];\n\n if (entries.some(entry => entry.target == observee.element)) {\n observee.item.show();\n\n this._observer.unobserve(observee.element);\n this._observing.splice(i, 1);\n } else {\n i++;\n }\n }\n };\n}\n\n// --------------------------------------------------------------------\n\nexport { LayoutTemplateItem, LayoutsTrayBase };\n","// Import Libraries\nimport React from 'react';\n\n// Import JS Modules\nimport { findProductByFilters, fireTransform } from '../utils/category-info';\nimport { builderDispatch, PrismUI } from '../../_utils/ui';\nimport QuantityPricingTools from '../quantity/quantity-pricing-tools';\nimport PrismBuilderReloader from './prism-builder-reloader';\n\n// -----------------------------------------------------------\n\nconst OptionTrayMixin = WrappedComponent => (\n class OptionLoader extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n filter: {}\n };\n }\n\n componentDidMount() {\n this.loadData();\n\n this.dispatchToken = builderDispatch.register(payload => {\n switch (payload.type) {\n case PrismUI.ITEM_LOADED:\n this.loadData();\n break;\n }\n });\n }\n\n componentWillUnmount() {\n builderDispatch.unregister(this.dispatchToken);\n }\n\n render() {\n return <WrappedComponent ref={ ref => this.wrappedComponent = ref }\n {...this.props}\n filter={ this.state.filter }\n onFireTransform={this.fireTransform} />;\n }\n\n loadData() {\n this.wrappedComponent.currentProductFilterInfo().\n then(({ data, product }) => {\n const { name: filterName } = this.props,\n filter = Object.assign({}, data.filters.find(f => f.title == filterName)),\n productPrice = getProductPrice(product);\n\n // we only need to do this the filter that's pertinent to this tray\n (filter.options || []).forEach(option => {\n // these attributes have been added to the object\n // and they'll remain stuck to it unless we shear them off\n ['selected', 'enabled', 'priceDifference'].forEach(key => delete option[key]);\n\n // augment each filter option with 'selected'\n // if it's applicable to the current product.\n option.selected = option.title == product.filters[filter.title];\n\n // augment each filter option with 'enabled'\n // if the option can be used in order choose another product.\n const currentFilters = Object.assign({}, product.filters);\n currentFilters[filterName] = option.title;\n\n const matchingProduct = findProductByFilters(data.products, currentFilters);\n if (matchingProduct) {\n option.enabled = true;\n option.priceDifference = getProductPrice(matchingProduct) - productPrice;\n }\n });\n\n this.setState({\n filter\n });\n });\n\n function getProductPrice(product) {\n return (new QuantityPricingTools(product)).getUnitPriceForQuantity();\n }\n }\n\n fireTransform = async (value, transformAttempts=0) => {\n const { name: filterName } = this.props;\n\n const page = window.activeView.customPage ? window.prismViews.page : window.activeView;\n await page.historyStack.takeSnapshot();\n\n this.wrappedComponent.currentProductFilterInfo().\n then(({ data, product: currentProduct }) => {\n const targetFilters = {...currentProduct.filters, [filterName]: value},\n targetProduct = findProductByFilters(data.products, targetFilters);\n\n if (targetProduct && currentProduct.id != targetProduct.id) {\n this.showModal();\n\n fireTransform(targetProduct.id).\n then(data => {\n PrismBuilderReloader.start(data, false).\n finally(() => {\n this.hideModal();\n builderDispatch.delayedDispatch({\n type: PrismUI.PRODUCT_CHANGED\n });\n });\n }).\n catch(() => {\n if (++transformAttempts < 3) {\n setTimeout(() => this.fireTransform(value, transformAttempts), 500);\n return;\n }\n\n this.hideModal();\n });\n }\n });\n }\n\n showModal(action = 'show') {\n builderDispatch.delayedDispatch({\n type: PrismUI.MODAL_MESSAGE,\n action: action\n });\n }\n\n hideModal() {\n this.showModal('hide');\n }\n }\n);\n\n// -----------------------------------------------------------\n\nexport default OptionTrayMixin;\n","// Import Libraries\nimport React from 'react';\n// Import JS Modules\nimport filterPropertyTitleToUpperCase from '../../../../_utils/product-filter-property-title-to-uppercase';\n\n// --------------------------------------------------------------------\n\nfunction titleClean(s) {\n const regex = /\\\"/g\n\n return s.replace(regex, '');\n}\n\nfunction wrapParenthesesWithSpan(s) {\n const regex = /\\([^)]*\\)/g;\n\n const matches = s.match(regex);\n if (matches) {\n s = <span>{s.replace(regex, '')}<small>{matches[0]}</small></span>;\n }\n\n return s;\n}\n\nconst Title = ({ children: title }) => (\n <div className='option-title'>\n {wrapParenthesesWithSpan(titleClean(filterPropertyTitleToUpperCase(title)))}\n </div>\n);\n\n// --------------------------------------------------------------------\n\nexport default Title;\n","'use strict';\n\n// Import Libraries\nimport React from 'react';\nimport classNames from 'classnames';\n// Import JSX Modules\nimport Currency from '../../../../_utils/tools/currency';\n\n// --------------------------------------------------------------------\n\nconst PriceDifference = ({children}) => {\n const difference = parseFloat(children);\n\n if (difference) {\n const differenceIsHigher = difference > 0;\n\n return (\n <span className={ classNames('price-difference', {'price-difference-higher': differenceIsHigher, 'price-difference-lower': !differenceIsHigher}) }>\n { differenceIsHigher ? '+' : '-'}{Currency.format(Math.abs(difference))} ea.\n </span>\n );\n }\n\n return null;\n};\n\n// --------------------------------------------------------------------\n\nexport default PriceDifference;\n","// Import Libraries\nimport React from 'react';\nimport classNames from 'classnames';\n\n// Import JS Modules\nimport { findVariable } from '../../trays/tray-determiner';\nimport IU from '../../../_utils/img/img-utils';\nimport { PrismUI,\n builderDispatch } from '../../../_utils/ui';\n// Import JSX Modules\nimport Title from './options/title';\nimport sendToGoogleAnalytics from '../../desktop/slot-tools/send-to-google-analytics';\n\nconst urlMunge = IU.imgHelpers.urlMunge;\n\n// --------------------------------------------------------------------\n\nconst Variable = ({name, asset: src, value, selected, variableName, onClick}) => {\n const handleClick = (() => {\n if (!selected) {\n return () => {\n sendToGoogleAnalytics(`options-${variableName}`,`${value}`);\n onClick(value);\n };\n }\n })();\n\n src = src && urlMunge(src);\n\n return (\n <button className={ classNames('btn btn-link flex-shrink-0 btn-variable btn-text', {active: selected}) }\n title={ name }\n data-click-event={ `option:${ name }` }\n onClick={ handleClick }>\n <img src={ src }\n className={ classNames('img-fluid', {'d-none': !src}) } />\n <div className='option-text'>\n <Title>{ name }</Title>\n </div>\n </button>\n );\n};\n\n// --------------------------------------------------------------------\n\nclass VariableTrayBase extends React.Component {\n constructor(props) {\n super(props);\n\n this.handleItemClick = this.handleItemClick.bind(this);\n }\n\n componentDidMount() {\n this.dispatchToken = builderDispatch.register(payload => {\n switch (payload.type) {\n case PrismUI.ITEM_LOADED:\n this.forceUpdate();\n break;\n }\n });\n }\n\n componentWillUnmount() {\n builderDispatch.unregister(this.dispatchToken);\n }\n\n componentDidUpdate() {\n delete this._data;\n }\n\n get data() {\n return this._data || (this._data = findVariable(this.props.name) || {});\n }\n\n renderOption() {\n const selected = wkData.values[this.data.id];\n\n return function(option) {\n return <Variable key={option.name}\n { ...option }\n variableName={ this.props.name }\n selected={ option.value == selected }\n onClick={ this.handleItemClick } />;\n };\n }\n\n handleItemClick(value) {\n const option = this.data.options.find(o => o.value == value);\n\n wkData.values[this.data.id] = value;\n\n builderDispatch.dispatch({\n type: PrismUI.OPTION_SELECTED,\n variable: this.data,\n option: option\n });\n\n if (window.activeView) {\n window.activeView.queueRedraw();\n }\n\n this.forceUpdate();\n\n const formData = new FormData();\n formData.append(`values[${ this.data.id }]`, value);\n fetch(wkData.write_url, {\n method: 'POST',\n body: formData,\n credentials: 'same-origin'\n }).\n then(response => {\n if (response.ok) {\n activeView.do_save();\n }\n });\n }\n}\n\n// --------------------------------------------------------------------\n\nexport default VariableTrayBase;\n","// Import Libraries\nimport React from 'react';\nimport classNames from 'classnames';\n\n// Import JS Modules\nimport TemplateStore from '../../templates/template-store';\nimport { useTemplateSelectStore } from 'stores/useTemplateStore';\nimport { WebUI,\n builderDispatch } from '../../../_utils/ui';\n// Import JSX Modules\nimport Title from './options/title';\n\n// --------------------------------------------------------------------\n\nconst Wrap = ({title, wrap: value, selected, onClick}) => {\n const handleClick = (() => {\n if (!selected) {\n return () => {\n onClick(value);\n };\n }\n })();\n\n return (\n <button className={ classNames('btn btn-link flex-shrink-0 btn-option', {active: selected}) }\n title={ title }\n data-click-event={ `wrap:${ title }` }\n onClick={ handleClick }>\n <div className='option-text'>\n <Title>{ title }</Title>\n </div>\n </button>\n );\n};\n\n// --------------------------------------------------------------------\n\nclass WrapsTrayBase extends React.Component {\n constructor(props) {\n super(props);\n\n this.handleItemClick = this.handleItemClick.bind(this);\n }\n\n componentDidMount() {\n this.dispatchToken = builderDispatch.register(payload => {\n switch (payload.type) {\n case WebUI.TEMPLATE_CHANGED:\n this.forceUpdate();\n break;\n }\n });\n }\n\n componentWillUnmount() {\n builderDispatch.unregister(this.dispatchToken);\n }\n\n get data() {\n return TemplateStore.wraps();\n }\n\n renderOption() {\n const selected = (activeView && TemplateStore.currentWrap(activeView.template?.id) || {}).wrap;\n\n return function(option) {\n return (\n <Wrap \n key={option.wrap}\n { ...option }\n selected={ option.wrap === selected }\n onClick={ this.handleItemClick } \n />\n );\n }\n }\n\n handleItemClick(value) {\n const newTemplate = TemplateStore.templateForWrap(value, activeView.template.id);\n\n if (newTemplate) {\n useTemplateSelectStore.getState().updateTemplateSelectStore({ \n templateID: newTemplate\n });\n }\n }\n}\n\n// --------------------------------------------------------------------\n\nexport default WrapsTrayBase;\n","'use strict';\n\n// Import Libraries\nimport React from 'react';\nimport classNames from 'classnames';\n// Import JS Modules\nimport translate from '../../_utils/tools/translate';\nimport { PrismUI, builderDispatch } from '../../_utils/ui';\nimport sendToGoogleAnalytics from '../../_prism-builder/desktop/slot-tools/send-to-google-analytics';\n\n// --------------------------------------------------------------------\n\nconst MobileAddToCartButton = ({className}) => {\n return (\n <button className={classNames('btn btn-primary add-to-cart', className)}\n data-click-event=\"add-to-cart\"\n data-test=\"add-to-cart-mobile\"\n onClick={ handleClick }>\n { wkData.in_cart ? 'Done' : `Add to ${translate('Cart')}` }\n </button>\n );\n\n function handleClick() {\n sendToGoogleAnalytics('Mobile','addToCart')\n\n builderDispatch.dispatch({\n type: PrismUI.EVENT_ADD_TO_CART\n });\n }\n};\n\n// --------------------------------------------------------------------\n\nexport default MobileAddToCartButton;\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...a) => api.dispatch(...a), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api)\n return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && enabled) {\n console.warn(\n \"[zustand devtools middleware] Please install/enable Redux devtools extension\"\n );\n }\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = (state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording)\n return r;\n const action = nameOrAction === void 0 ? { type: anonymousActionType || \"anonymous\" } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...a) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && a[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...a);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format. \n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools)\n return;\n if (typeof api.dispatch !== \"function\")\n return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState)\n return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, f) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0)\n f(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = (selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n };\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nconst combine = (initialState, create) => (...a) => Object.assign({}, initialState, create(...a));\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(\n name,\n JSON.stringify(newValue, options == null ? void 0 : options.replacer)\n ),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst oldImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n getStorage: () => localStorage,\n serialize: JSON.stringify,\n deserialize: JSON.parse,\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage;\n try {\n storage = options.getStorage();\n } catch (e) {\n }\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const thenableSerialize = toThenable(options.serialize);\n const setItem = () => {\n const state = options.partialize({ ...get() });\n let errorInSync;\n const thenable = thenableSerialize({ state, version: options.version }).then(\n (serializedValue) => storage.setItem(options.name, serializedValue)\n ).catch((e) => {\n errorInSync = e;\n });\n if (errorInSync) {\n throw errorInSync;\n }\n return thenable;\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n let stateFromStorage;\n const hydrate = () => {\n var _a;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => cb(get()));\n const postRehydrationCallback = ((_a = options.onRehydrateStorage) == null ? void 0 : _a.call(options, get())) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((storageValue) => {\n if (storageValue) {\n return options.deserialize(storageValue);\n }\n }).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.getStorage) {\n storage = newOptions.getStorage();\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n hydrate();\n return stateFromStorage || configResult;\n};\nconst newImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage)\n return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState) => {\n var _a2;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n return setItem();\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persistImpl = (config, baseOptions) => {\n if (\"getStorage\" in baseOptions || \"serialize\" in baseOptions || \"deserialize\" in baseOptions) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.\"\n );\n }\n return oldImpl(config, baseOptions);\n }\n return newImpl(config, baseOptions);\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","import { create } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\nimport {\n WebUI,\n PrismUI,\n builderDispatch,\n} from '../../../customer_pages/_utils/ui';\n\nconst SUPPORTED_VIEW_MODES = ['edit', 'review', 'preview'];\n\nexport const usePageStore = create(\n subscribeWithSelector((set, get) => ({\n viewMode: 'edit',\n openPreview: () => {\n get().setViewMode('preview');\n builderDispatch.delayedDispatch({ type: PrismUI.EVENT_PREVIEW });\n },\n closePreview: () => {\n get().setViewMode('edit');\n builderDispatch.delayedDispatch({ type: WebUI.ENTER_EDIT_MODE });\n builderDispatch.delayedDispatch({ type: PrismUI.EVENT_EDIT });\n },\n setViewMode: mode => {\n if (!SUPPORTED_VIEW_MODES.includes(mode)) return;\n\n set({ viewMode: mode });\n },\n }))\n);\n","\n\n// Import Libraries\nimport React from 'react';\n// Import JS Modules\nimport { usePageStore } from 'stores/usePageStore';\nimport { PrismUI, builderDispatch } from '../../../_utils/ui';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\nimport genericHelpers from '../../../_utils/generic-helpers';\n// Import JSX Modules\n\n// --------------------------------------------------------------------\nclass AddToCartNoticeBase extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n viewMode: usePageStore.getState().viewMode\n };\n }\n\n componentDidMount() {\n this.dispatchToken = builderDispatch.register(payload => {\n switch (payload.type) {\n case PrismUI.EVENT_ADD_TO_CART:\n this.handleAddToCartRequest();\n break;\n }\n });\n\n this.unSubscribePageStore = usePageStore.subscribe(\n state => state.viewMode,\n viewMode => {\n this.setState({\n viewMode,\n });\n }\n );\n }\n\n componentWillUnmount() {\n builderDispatch.unregister(this.dispatchToken);\n\n this.unSubscribePageStore();\n }\n\n renderBody() {\n const $warnings = (function* ({ emptyImageSlot, unchangedDefaultText, lowDpiImage, emptyPage, orientationMismatch }) {\n const hidePreviewButton = wkData.three_dimensional_view.hide_preview_button;\n \n if (emptyImageSlot) {\n yield (\n <li className='d-flex' key=\"images\">\n <i className=\"fas fa-exclamation-circle flex-shrink-0\" />\n <p>One or more photo boxes are empty.</p>\n </li>\n );\n }\n\n if (emptyPage) {\n yield (\n <li className='d-flex' key=\"pages\">\n <i className=\"fas fa-exclamation-circle flex-shrink-0\" />\n <p>One or more pages have been left empty.</p>\n </li>\n );\n }\n\n if (unchangedDefaultText) {\n yield (\n <li className='d-flex' key=\"text\">\n <i className=\"fas fa-exclamation-circle flex-shrink-0\" />\n <p>Make sure all placeholder texts are updated.</p>\n </li>\n );\n }\n\n if (lowDpiImage) {\n yield (\n <li className='d-flex' key=\"low-dpi\">\n <i className=\"fas fa-exclamation-circle flex-shrink-0\" />\n <p>One or more low resolution images used. Consider changing the image or the layout.</p>\n </li>\n );\n }\n\n if (orientationMismatch) {\n yield (\n <li className='d-flex' key=\"text\">\n <i className=\"fas fa-exclamation-circle flex-shrink-0\" />\n {hidePreviewButton ? (\n <p>Your image does not match the selected orientation. Adjust the orientation in the <strong>Layouts</strong> tab if required.</p>\n ) : (\n <p>Your image does not match the selected orientation. Check in Preview, or adjust the orientation in the <strong>Layouts</strong> tab.</p>\n )}\n </li>\n );\n }\n \n if (genericHelpers.isEmptyPrintedEnvelope()) {\n yield (\n <li className='d-flex' key=\"text\">\n <i className=\"fas fa-exclamation-circle flex-shrink-0\" />\n <p>A return address is required for printed envelopes.</p>\n </li>\n );\n }\n })(this.state);\n\n return (\n <ul className='list-unstyled'>\n {Array.from($warnings)}\n </ul>\n );\n }\n\n close = () => {\n this.setState(() => {\n return {\n emptyImageSlot: undefined,\n unchangedDefaultText: undefined,\n lowDpiImage: undefined,\n emptyPage: undefined,\n orientationMismatch: undefined,\n };\n });\n }\n\n get shouldShowWarning() {\n const { emptyImageSlot, unchangedDefaultText, lowDpiImage, emptyPage, orientationMismatch } = this.state;\n\n return [emptyImageSlot, unchangedDefaultText, lowDpiImage, emptyPage, orientationMismatch].some(Boolean);\n }\n\n handleAddToCartRequest = async () => {\n\n await usePrismItemStore.getState().checkSlots().then(({\n emptyImageSlot,\n unchangedDefaultText,\n lowDpiImage,\n emptyPage,\n orientationMismatch,\n }) => {\n if (![emptyImageSlot, unchangedDefaultText, lowDpiImage, emptyPage, orientationMismatch].some(Boolean)) {\n this.addToCart();\n }\n this.setState(() => {\n return {\n emptyImageSlot,\n unchangedDefaultText,\n lowDpiImage,\n emptyPage,\n orientationMismatch,\n };\n });\n });\n }\n\n\n}\n\n// --------------------------------------------------------------------\n\nexport default AddToCartNoticeBase;\n","\n// Import JS Modules\nimport { WebUI, builderDispatch } from '../../_utils/ui';\nimport PrismBuilderCustomSections from '../misc/prism-builder-custom-sections';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\n// --------------------------------------------------------------------\n\nfunction cardPages() {\n const pages = [];\n\n const prismItem = usePrismItemStore.getState().prismItem;\n\n prismItem.product.sections.forEach((section) => {\n pages.push({\n title: section.title.replace(/ \\d\\d\\d\\d/, '').replace(/ Top/, ''),\n });\n });\n\n PrismBuilderCustomSections.all.forEach((section) => {\n if (section.isEnabled()) {\n pages.push({\n title: section.title,\n customPageId: section.id,\n });\n }\n });\n\n return pages;\n}\n\n// --------------------------------------------------------------------\n\nfunction cardNavLabel(title, orientation) {\n if (orientation === 'portrait' && title === 'Inside Cover') {\n return 'Left';\n }\n if (orientation === 'portrait' && title === 'Inside Facing') {\n return 'Right';\n }\n if (orientation === 'landscape' && title === 'Inside Cover') {\n return 'Top';\n }\n if (orientation === 'landscape' && title === 'Inside Facing') {\n return 'Bottom';\n }\n\n return title;\n}\n\n// --------------------------------------------------------------------\n\nfunction selectPage(value) {\n const page = cardPages()[value];\n if (!page) {\n return;\n }\n\n builderDispatch.dispatch({\n type: WebUI.GOTO_PAGE,\n page: value,\n customPageId: page.customPageId,\n explicit: true,\n });\n\n if (page.customPageId) {\n builderDispatch.dispatch({\n type: WebUI.SHOW_CUSTOM_PAGE,\n customPageId: page.customPageId,\n customPageIndex: value,\n });\n } else {\n builderDispatch.dispatch({\n type: WebUI.HIDE_CUSTOM_PAGE,\n });\n }\n}\n\n// --------------------------------------------------------------------\n\nexport {\n cardPages,\n cardNavLabel,\n selectPage,\n};\n","var baseEach = require('./_baseEach');\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nmodule.exports = baseFilter;\n","var arrayFilter = require('./_arrayFilter'),\n baseFilter = require('./_baseFilter'),\n baseIteratee = require('./_baseIteratee'),\n isArray = require('./isArray');\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nmodule.exports = filter;\n","import { builderDispatch, PrismUI } from '../../_utils/ui';\nimport find from 'lodash/find';\nimport filter from 'lodash/filter';\n\nbuilderDispatch.register((payload) => {\n switch (payload.type) {\n case PrismUI.IMAGES_UPDATED:\n recordNewUploads(payload.images, payload.album);\n break;\n }\n});\n\nfunction recordNewUploads(imageList, album) {\n const newUploads = filter(imageList, (image) =>\n // find images not already in our list\n !find(wkData.images, (image_ref) => (image_ref.image_id == image.id || image_ref.md5 == image.md5))).map((image) =>\n // translate output of prism to web-kiosk friendly format\n ({\n image_id: image.id,\n md5: image.md5,\n url: image.raw_url,\n filename: image.name,\n }));\n\n const newUploadsNotFromAlbums = newUploads.filter((u) => !(window.uploadedToAlbumIds || []).includes(u.image_id));\n if (newUploadsNotFromAlbums.length > 0) {\n $.post(wkData.remember_url, { images: newUploadsNotFromAlbums, album });\n }\n\n wkData.images = (wkData.images || []).concat(newUploads);\n}\n","\nwkData.product.bleedWarning = {\n showForAlbum() {\n return ['album'].indexOf(wkData.product.type) > -1;\n },\n show() {\n return this.showForAlbum() || wkData.missing_attributes || wkData.disabled_options_chosen;\n },\n};\n","\n// Import JS Modules\nimport { builderDispatch, WebUI, PrismUI } from '../../_utils/ui';\nimport PageSpreads from '../edit-area/page-spreads';\nimport PrismBuilderCustomSections from '../misc/prism-builder-custom-sections';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\nbuilderDispatch.register((payload) => {\n const prismItem = usePrismItemStore.getState().prismItem;\n \n const handleGoToPage = ({ customPageId, page }) => {\n const spread = (() => {\n if (customPageId) {\n return PrismBuilderCustomSections.getById(customPageId).spread;\n }\n\n return (new PageSpreads(prismItem)).find(page);\n })();\n\n if (spread) {\n builderDispatch.delayedDispatch({\n type: WebUI.DO_SHOW_SPREAD,\n spread,\n pageIndex: page,\n });\n }\n };\n\n const handleOptionSelected = ({ variable }) => {\n if (/cover/i.test(variable.name)) {\n if (activeView.pageIndex !== 0) {\n const spreads = (new PageSpreads(prismItem)).list();\n builderDispatch.delayedDispatch({\n type: WebUI.DO_SHOW_SPREAD,\n spread: spreads[0],\n });\n }\n }\n };\n\n switch (payload.type) {\n case WebUI.GOTO_PAGE:\n handleGoToPage(payload);\n break;\n\n case PrismUI.OPTION_SELECTED:\n handleOptionSelected(payload);\n break;\n }\n});\n","\n// Import JS Modules\nimport { builderDispatch, WebUI, PrismUI } from '../../_utils/ui';\nimport PageSpreads from '../edit-area/page-spreads';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\n\nbuilderDispatch.register((payload) => {\n if (window.debugFlux || window.location.hash == 'debug') console.log(payload);\n\n // this is the initial load handler\n window.requestAnimationFrame(() => {\n if (payload.type === PrismUI.DO_ITEM_LOAD) {\n document.title = wkData.product_title;\n\n // Copy fields into prismItem\n const { imageList, ...properties } = payload.data;\n const { dateIdentifier } = payload;\n\n // Assigning to new prism store\n usePrismItemStore.getState().updatePrismItem(properties);\n\n // set image list to new prism store\n usePrismItemStore.getState().updateImageList(imageList);\n\n // updating load active to new prism store\n usePrismItemStore.getState().updateLoadActive(false);\n\n prismViews.editable = true;\n\n builderDispatch.dispatch({\n type: WebUI.PAGES_CHANGED,\n detail: 'stores.js#loadPrismItem',\n });\n\n let requestedIndex = -1;\n if (location.hash.match(/#[0-9]+/)) {\n requestedIndex = Number(location.hash.substring(1));\n }\n\n // Remove the lingering hash\n window.history.replaceState({}, document.title, location.pathname + location.search);\n\n const spreads = (new PageSpreads(usePrismItemStore.getState().prismItem)).list();\n const spread = spreads[requestedIndex] || spreads.find((s) => s.includesPage(usePrismItemStore.getState().prismItem.currentPage)) || spreads[0];\n\n builderDispatch.delayedDispatch({\n type: WebUI.DO_SHOW_SPREAD,\n spread,\n dateIdentifier\n });\n\n // We only want to hide custom pages if the destination\n // is the first spread. Otherwise you could navigate to\n // a page and immediately get kicked back\n if (requestedIndex === 0) {\n builderDispatch.dispatch({\n type: WebUI.HIDE_CUSTOM_PAGE,\n });\n }\n\n usePrismItemStore.getState().updatePrismLoaded();\n }\n });\n});\n","// Import JS Modules\nimport { builderDispatch, WebUI, PrismUI } from '../../_utils/ui';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\nexport function globalPreviewLoader() {\n builderDispatch.register(payload => {\n switch (payload.type) {\n case WebUI.ENTER_PREVIEW_MODE:\n window.previewImage = null;\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = function() {\n window.previewImage = img;\n builderDispatch.dispatch({\n type: PrismUI.PREVIEW_2D_LOADED,\n img,\n pageIndex: 0,\n });\n };\n img.onerror = function() {\n window.previewImage = null;\n builderDispatch.dispatch({\n type: PrismUI.PREVIEW_2D_LOADED,\n img: false,\n });\n };\n img.src = previewURL();\n builderDispatch.delayedDispatch({\n type: PrismUI.PREVIEW_2D_LOADING,\n img,\n pageIndex: 0,\n });\n break;\n case PrismUI.UNDO_CHANGED:\n window.previewImage = null;\n break;\n }\n });\n}\n\nexport const PREVIEW_RESOLUTION = [1440, 1080];\n\nexport const previewURL = function(\n pageNumber = 0,\n time = new Date().getTime()\n) {\n const prismItem = usePrismItemStore.getState().prismItem;\n let qs = '';\n for (const key in wkData.values) {\n if (wkData.values[key])\n qs += `&vars[]=${encodeURIComponent(wkData.values[key])}`;\n }\n qs += `&vars[]=${encodeURIComponent(prismItem.theme)}`;\n qs += `&vars[]=${encodeURIComponent(prismItem.design_code)}`;\n\n const { host = 'http://localhost:3003', source = 'localhost' } =\n window.hotrodSettings || {};\n\n return `${host}/default/${source}/${prismItem.product.id}/${\n prismItem.id\n }?ts=${time + qs}`;\n};\n","\n// Import JS Modules\nimport {\n builderDispatch, WebUI, UI_STATE, PrismUI,\n} from '../../_utils/ui';\nimport { usePrismItemStore } from 'stores/usePrismItemStore';\n\nlet album;\n\nbuilderDispatch.register((payload) => {\n const prismItem = usePrismItemStore.getState().prismItem;\n\n switch (payload.type) {\n case WebUI.UPLOAD_BEGUN:\n album = payload.album;\n window.uploadedToAlbumIds || (window.uploadedToAlbumIds = []);\n\n if (prismItem.imageList.length > 0) return;\n if (usePrismItemStore.getState().usedImages().length > 0) return;\n if (prismItem.design_code.indexOf('.collage') < 0) return;\n if (prismItem.pageCount > 1) return;\n if (UI_STATE.collageTemplateFitAndAutofill) return;\n\n UI_STATE.collageTemplateFitAndAutofill = true;\n usePrismItemStore.getState().pageWithTemplate(activeView.pageIndex)\n .then((pageAndTemplate) => {\n const orientations = ['is-portrait', 'is-landscape', 'is-square'];\n const orientationTag = pageAndTemplate.template.tags.filter((a) => orientations.includes(a))[0];\n\n usePrismItemStore.getState().selectTemplateToFitImages(payload.number_of_files, orientationTag);\n });\n break;\n\n case WebUI.UPLOAD_PROGRESS:\n if (payload.source == 'albums') {\n window.uploadedToAlbumIds = window.uploadedToAlbumIds.concat(\n (payload.data || []).map((i) => i.id)\n );\n }\n\n usePrismItemStore.getState().refreshImages()\n .then(() => {\n if (prismItem.design_code.indexOf('.collage') < 0) return;\n if (prismItem.pageCount > 1 && prismItem.theme.indexOf('card') < 0) return;\n\n usePrismItemStore.getState().populateItemsImagesAfterUpload(payload.data);\n })\n .catch(() => { });\n break;\n\n case WebUI.UPLOAD_DONE:\n const autoFillImageUponUpload = usePrismItemStore.getState().autoFillImageUponUpload;\n usePrismItemStore.getState().refreshImages()\n .then((data) => {\n autoFillImageUponUpload();\n builderDispatch.dispatch({\n type: PrismUI.IMAGES_UPDATED,\n images: data,\n album,\n });\n })\n .catch((e) => {\n console.log(e);\n });\n break;\n }\n});\n","// Import JS Modules\nimport { curry } from 'lodash';\nimport { builderDispatch, PrismUI } from '../../_utils/ui';\nimport { EventEmitter } from 'wk-event-emitter';\nimport { useSlotStore } from 'stores/useSlotStore';\n\n// events that should update the new zustand slot store\nconst SLOT_UPDATE_EVENTS = {\n [PrismUI.SLOT_CHANGED]: true,\n [PrismUI.SLOT_CLICK]: true,\n [PrismUI.SLOT_MOVE]: false,\n};\n\n// events to be delayed\nconst SLOT_DELAYED_EVENTS = {\n [PrismUI.SLOT_CHANGED]: true,\n};\n\nconst curriedEventHandler = curry((eventType, { view, slot }) => {\n if (slot) {\n if (SLOT_UPDATE_EVENTS[eventType]) {\n useSlotStore.getState().updateSlot(slot);\n }\n\n if (SLOT_DELAYED_EVENTS[eventType]) {\n builderDispatch.delayedDispatch({\n type: eventType,\n slot,\n view,\n });\n } else {\n builderDispatch.dispatch({\n type: eventType,\n slot,\n view,\n });\n }\n }\n});\n\nconst handleSlotChanged = curriedEventHandler(PrismUI.SLOT_CHANGED);\n\nconst handleSlotClicked = curriedEventHandler(PrismUI.SLOT_CLICK);\n\nconst handleSlotMoved = curriedEventHandler(PrismUI.SLOT_MOVED);\n\nEventEmitter.on('prism-edit-slot-changed', handleSlotChanged);\n\nEventEmitter.on('prism-edit-slot-click', handleSlotClicked);\n\nEventEmitter.on('prism-edit-slot-moved', handleSlotMoved);\n"],"names":["fontList","options","i","FontStore","font","fontName","usePrismItemStore","memo","group","sorter","a","b","isSafari","testPrivateMode","testFile","resolve","reject","request","e","safariPrivateMode","PageBase","React","props","builderDispatch","payload","PrismUI","isSafariPrivate","useGenStore","slot","view","onPhotosTrayShown","slotIsColour","trayName","TYPES","ThumbnailStore","name","prevName","ResizeObserverClass","entries","entry","error","canvasWidth","canvasHeight","canvas","maxHeight","maxWidth","showQuantityDropdown","transientUnitPrices","QuantityPricingTools","QuantityPricingToolsBase","product","productName","isCard","isAlbum","quantity","price","prismItem","previousValue","prices","from","PriceAndQuantityBase","collectionName","unitQuantity","unitPrice","cost","pluralize","labelData","Currency","parts","copies","variable","option","categoryInfoUrl","getCategoryInfo","cachedData","url","response","data","currentProductFilterInfo","platform","platformAvailabilityKey","currentProduct","filter","findProductByFilters","products","filters","fireTransform","targetProductId","customFilters","params","objToStr","x","returner","wrapIfFunction","thing","setNonEnumerable","target","key","value","defaultNonFunctionProperty","left","right","getTypeName","obj","assertObject","obj2","type","displayType","displayType2","mixins","smartMixinModule","rules","_opts","opts","source","mixin","rule","fn","leftIsFn","rightIsFn","obj1","result","k","res1","res2","_left","_right","require$$0","assign","require$$1","mixinProto","setDefaultProps","reactMixin","getDefaultProps","setInitialState","getInitialState","UNSAFE_componentWillMount","applyInitialState","instance","state","mixinClass","reactClass","prototypeMethods","staticProps","mergePropTypes","leftKey","rightKey","imgStateHash","localZoomFn","imgDefaults","stashFns","zoomFn","imgSlotRef","angle","gamma","zoom","toZoom","slotRefVals","PrismBuilderCustomSections","section","id","s","cardTopNavActive","chevronDirections","Chevron","rel","disabled","label","onClick","classNames","TextField","Component","nextProps","ReactDOM","AddressForm","PureComponent","address","streetAdd1","streetAdd2","city","zip","country","AddressModal","__publicField","empty","prismAction","field","isEmpty","_typeof","trimLeft","trimRight","tinycolor","color","rgb","inputToRGB","RsRGB","GsRGB","BsRGB","R","G","B","boundAlpha","hsv","rgbToHsv","h","v","hsl","rgbToHsl","l","allow3Char","rgbToHex","allow4Char","rgbaToHex","bound01","hexNames","secondColor","hex8String","rgbaToArgbHex","secondHex8String","gradientType","format","formatSet","formattedString","hasAlpha","needsAlphaFormat","args","_lighten","_brighten","_darken","_desaturate","_saturate","_greyscale","_spin","_analogous","_complement","_monochromatic","_splitcomplement","polyad","newColor","convertToPercentage","ok","stringInputToObject","isValidCSSUnit","rgbToRgb","hsvToRgb","hslToRgb","g","max","min","d","r","hue2rgb","p","q","t","f","mod","hex","pad2","convertDecimalToHex","color1","color2","amount","clamp01","hue","number","step","results","slices","part","ret","modification","rgb1","rgb2","rgba","c1","c2","wcag2","readability","wcag2Parms","out","validateWCAG2Parms","baseColor","colorList","bestColor","bestScore","includeFallbackColors","level","size","names","flip","o","flipped","n","isOnePointZero","processPercent","isPercentage","val","parseIntFromHex","c","convertHexToDecimal","matchers","CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","named","match","parms","Edge","edge","Box","Grid","box","compare","edges","existing","defaultSetup","element","modifiers","classes","modifier","defaultPositioner","defaultReset","style","Renderer","count","start","Snap","grid","center","width","top","middle","bottom","height","y","end","extent","fallback","position","offset","snapped","Snapster","boxes","printStackTrace","ex","guess","mode","context","functionName","callback","original","stack","lineRE","ANON","lines","len","location","fnName","curr","fnRE","maxStackSize","slice","arg","req","xmlhttp","XMLHttpFactories","reStack","reRef","frame","ref","m","file","lineno","charno","lineNo","charNo","reFunctionDeclaration","reFunctionExpression","reFunctionEvaluation","code","line","maxLines","commentPos","__slice","str","log","debug","wkLogger","PrismQuality","Point","that","point","origin","degrees","radians","sin","cos","other","w","relativeXY","coords","handler","opposite","centerPoints","diffAng","mousePoint","oppositePointRotated","handlerRotated","angleOppRotAndHandRot","centerPoint","oppositePointUnrotated","mousePointNormalised","aspectRatio","stripString","string","safeNumber","defaultValue","limit","isNumber","contextApplyMatrixInternalD","ctx","arrayToMatrixInternalD","arr","ctxApplyMatrix","meta","PlaceFiller","LoadingImage","BlankImage","BlankEmptyImage","imgComplete","img","TOP_TOOL_HEIGHT","BASE_TOOL_WIDTH","BASE_TOOL_HEIGHT","PAD","TOOL_HEIGHT","TOOL_WIDTH","Line","p1","p2","A","C","D","dot","len_sq","param","xx","yy","Polygon","points","closest","closestIndex","distance","index","p0","intersection","SlotBase","lx","ty","isClonedSlot","_ref","topMiddle","bottomMiddle","middleRight","middleLeft","bottomLeft","topRight","topLeft","bottomRight","minusControlPoint","plusControlPoint","minusControlPointSize","plusControlPointSize","middlePoints","pointX","pointY","cornerPoints","cur","dim","ix1","ix2","info","handleScale","PanHandle","dash","scale","region","xcoords","ycoords","min_x","min_y","max_x","max_y","genericHelpers","cx","cy","cw","ch","EventEmitter","setter","isSelected","px","py","boolean","highlight","centerX","centerY","rounded","rectangleCenterX","smallerScale","rectangleCenterY","handleStyle","startOffset","smallestScale","endOffset","middleOffset","newScale","padding","bottomMenu","topMenu","angleToUse","pivotX","pivotY","diffX","diffY","preDrag","mouseX","mouseY","lock","x1","x2","y1","y2","calculateAngle","newAngle","ext","editableArea","bounds","min_w","min_h","coeff_w","coeff_h","coeff","loose","rect","Rectangle","direction","startPoint","coord","endPoint","xBetweenFn","betweenFactory","yBetweenFn","MyMatrix","EditMode","imgHelpers","IU","urlMunge","MAX_ZOOM","MIN_ZOOM","ImageSlot","area","properties","slotData","layout","fetchImage","vars","ratio","clip_path","path","imgId","isCanvas","msg","colour_scheme","show_icon","iconImg","backgroundColour","textColour","fontSize","overlap","info_width","dpi_x","dpi_y","msgHeight","iconTextWidth","align","ih","iw","src_aspect","tgt_aspect","image","imgInfo","imgData","adjHeight","adjWidth","allowOptionalBackground","predicates","predicate","colour","_ref2","_ref3","_ref4","_ref5","_this","def_value","radiansAngle","xMod","yMod","dx","dy","stackable","photoData","dpiThreshold","DpiThreshold","isCalendarEventPhotoSlot","realScaleX","realScaleY","scaleX","scaleY","initialReference","centerCoord","slotCoordRotated","TextPreviewUrl","UrlBuilder","fontWeight","fontSlant","valign","renderer","stroke","templateId","pageIndex","fontColour","md5","validJSON","jsonString","parsedString","hasFoilText","adjustments","TextSlot","isCalendarEventTextSlot","changed","reason","time","cname","cookie","property","factor","baseHSL","replaceImageFillWithGradient","replaceImageFillWithWhiteAndThresholdAlpha","baseGetTag","isObjectLike","numberTag","isNumber_1","useSlotStore","create","set","slotIndex","useFocusedSlotStore","customSlots","getViewport","sendToGoogleAnalytics","sourceSlot","what","src","CustomColourHistory","length","uniq","customColourHistory","filledImageSlotConfirmation","confirmCallback","filledImageSlot","WebUI","PrismBuilderHistory","PrismBuilderReloader","clearBuilderHistory","loadPrismItem","themeStore","TemplateCache","editUrl","title","MAX_RETRY_SNAPSHOT","dispatchUndoAction","pointer","method","possibleDirections","otherView","historyStack","steps","stackStep","decodedStackStep","PrismJSON","json","dateIdentifier","prevent","identifier","withPush","dataResponse","snapshot","uniqueId","productId","currentStep","snapshotCode","theme","stepData","nextStepData","prismData","dataRestore","followingData","followingDataHasSnapshot","shouldJumpToNextSnapshot","lastStatePosition","root","factory","module","this","modules","installedModules","__webpack_require__","moduleId","exports","getter","object","__extends","extendStatics","__","ParchmentError","_super","message","attributes","tags","types","Scope","input","query","BlotClass","node","find","bubble","scope","register","Definitions","_i","Definition","tagName","tagNames","tag","Registry","Attributor","attrName","keyName","attributeBit","item","linked_list_1","shadow_1","ContainerBlot","domNode","child","makeBlot","err","criteria","_a","descendants","lengthLeft","def","blot","childBlot","refBlot","targetParent","refNode","inclusive","force","after","mutations","addedNodes","removedNodes","mutation","attributor_1","store_1","container_1","FormatBlot","formats","replacement","wrapper","LeafBlot","ShadowBlot","parent_1","parentBlot","refDomNode","class_1","style_1","AttributorStore","attribute","styles","attr","prefix","className","ClassAttributor","matches","camelize","rest","StyleAttributor","format_1","leaf_1","scroll_1","inline_1","block_1","embed_1","text_1","Parchment","LinkedList","nodes","next","curNode","length_1","startNode","curIndex","curLength","OBSERVER_CONFIG","MAX_OPTIMIZE_ITERATIONS","ScrollBlot","records","mark","markParent","optimize","remaining","grandChild","isEqual","prop","InlineBlot","BlockBlot","EmbedBlot","TextBlot","text","elem","_toggle","token","searchString","subjectString","lastIndex","list","thisArg","DIFF_DELETE","DIFF_INSERT","DIFF_EQUAL","diff_main","text1","text2","cursor_pos","commonlength","diff_commonPrefix","commonprefix","diff_commonSuffix","commonsuffix","diffs","diff_compute_","diff_cleanupMerge","fix_cursor","fix_emoji","longtext","shorttext","hm","diff_halfMatch_","text1_a","text1_b","text2_a","text2_b","mid_common","diffs_a","diffs_b","diff_bisect_","text1_length","text2_length","max_d","v_offset","v_length","v1","v2","delta","front","k1start","k1end","k2start","k2end","k1","k1_offset","k2_offset","diff_bisectSplit_","k2","text1a","text2a","text1b","text2b","diffsb","pointermin","pointermax","pointermid","pointerstart","pointerend","diff_halfMatchI_","seed","j","best_common","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","prefixLength","suffixLength","hm1","hm2","count_delete","count_insert","text_delete","text_insert","changes","diff","diff_1","cursor_normalize_diff","current_pos","next_pos","split_pos","d_left","d_right","norm","ndiffs","cursor_pointer","d_next","merge_tuples","suffix","compact","starts_with_pair_end","ends_with_pair_start","fixed_diffs","left_d","right_d","toStr","isArguments","isArgs","keysShim","has","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","ctor","excludedKeys","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","isObject","isFunction","isString","theKeys","skipProto","skipConstructor","implementation","origKeys","originalKeys","keysWorksWithArguments","objectKeys","shams","sym","symObj","symVal","syms","descriptor","hasSymbols","origSymbol","hasSymbolSham","ERROR_MESSAGE","funcType","bound","binder","boundLength","boundArgs","Empty","functionBind","bind","undefined","$SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","$gOPD","throwTypeError","ThrowTypeError","getProto","needsEval","TypedArray","INTRINSICS","errorProto","doEval","gen","LEGACY_ALIASES","hasOwn","require$$2","$concat","$spliceApply","$replace","$strSlice","$exec","rePropName","reEscapeChar","stringToPath","first","last","quote","subString","getBaseIntrinsic","allowMissing","intrinsicName","alias","getIntrinsic","intrinsicBaseName","intrinsic","intrinsicRealName","skipFurtherCaching","isOwn","desc","GetIntrinsic","$apply","$call","$reflectApply","$defineProperty","$max","originalFunction","func","applyBind","callBind","$indexOf","callBound","hasToStringTag","$toString","isStandardArguments","isLegacyArguments","supportsStandardArguments","hasPropertyDescriptors","hasPropertyDescriptors_1","keys","concat","origDefineProperty","supportsDescriptors","defineProperty","defineProperties","map","defineProperties_1","numberIsNaN","polyfill","getPolyfill","define","shim","require$$3","require$$4","objectIs","isRegexMarker","badStringifier","throwRegexMarker","gOPD","regexClass","isRegex","hasLastIndexDataProperty","functionsHaveNames","$bind","functionsHaveNames_1","functionsHaveConfigurableNames","$Object","calls","TypeErr","regex","proto","flagsBound","regexp_prototype_flags","getDay","tryDateObject","dateClass","isDateObject","is","flags","isDate","require$$5","getTime","deepEqual","actual","expected","objEquiv","isUndefinedOrNull","isBuffer","aIsRegex","bIsRegex","aIsBuffer","bIsBuffer","ka","kb","deepEqual_1","isArray","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","setProperty","getProperty","extend","copy","copyIsArray","clone","deep","equal","lib","keepNull","priority","ops","Iterator","op","nextOp","opLength","retOp","NULL_CHARACTER","Delta","newOp","lastOp","passed","failed","initial","iter","thisIter","otherIter","firstOther","firstLeft","thisOp","otherOp","strings","prep","diffResult","component","newline","nextType","Break","parent","Inline","self","selfIndex","otherIndex","Text","NEWLINE_LENGTH","BlockEmbed","block","Block","leaf","bubbleFormats","head","Code","CodeBlock","frag","nextNewline","prevNewline","isolateLength","searchIndex","reverse","Cursor","selection","textNode","range","restoreText","_instanceof","nativeMap","nativeSet","nativePromise","circular","depth","prototype","includeNonEnumerable","allParents","allChildren","useBuffer","_clone","__getRegExpFlags","keyChild","valueChild","entryChild","attrs","symbols","symbol","allPropertyNames","propertyName","__objToStr","__isDate","__isArray","__isRegExp","re","ASCII","Editor","scroll","consumeNextNewline","scrollLength","normalizeDelta","DeltaOp","lengthRemaining","lineLength","codeIndex","codeLength","leaves","formatsArr","blots","combineFormats","embed","change","cursorIndex","oldDelta","textBlot","oldValue","CursorBlot","oldText","newText","combined","merged","Events","EE","once","events","event","exists","evt","available","ee","a1","a2","a3","a4","a5","listeners","listener","levels","namespace","ns","logger","newLevel","EVENTS","eventName","Emitter","Module","quill","Range","Selection","emitter","native","endNode","nativeRange","side","normalized","positions","indexes","contains","scrollingContainer","scrollBounds","oldRange","lastRange","descendant","Theme","moduleClass","Quill","overwrite","container","expandConfig","html","modify","contents","overload","enabled","scrollTop","containerBounds","focus","deleted","applied","userConfig","themeConfig","config","moduleConfig","shift","shiftRange","pos","Container","GUARD_TEXT","Embed","childNode","prevLength","isLine","Scroll","whitelist","newlineIndex","getLines","AlignAttribute","AlignStyle","ColorAttributor","ColorStyle","BackgroundStyle","DirectionAttribute","DirectionStyle","FontStyleAttributor","FontStyle","SizeStyle","DOM_KEY","CLIPBOARD_CONFIG","matchText","matchNewline","matchBreak","matchBlot","matchSpacing","matchAttributor","matchStyles","matchIndent","matchAlias","matchIgnore","ATTRIBUTE_ATTRIBUTORS","STYLE_ATTRIBUTORS","Clipboard","selector","matcher","elementMatchers","textMatchers","traverse","deltaEndsWith","paste","pair","applyFormat","computeStyle","endText","childrenDelta","indent","nodeHeight","replacer","collapse","History","dest","getLastChangeIndex","changeDelta","undoDelta","timestamp","endsWithNewlineChange","deleteLength","changeIndex","SHORTKEY","Keyboard","binding","normalize","handleEnter","handleBackspace","handleDelete","handleDeleteRange","which","bindings","leafStart","offsetStart","leafEnd","offsetEnd","prefixText","suffixText","curContext","makeFormatHandler","makeCodeBlockHandler","makeEmbedArrowHandler","shiftKey","where","prev","curFormats","prevFormats","nextLength","nextFormats","firstFormats","lastFormats","lineFormats","scrollIndex","baseLodash","_baseLodash","baseCreate","LodashWrapper","chainAll","_LodashWrapper","flatten","overRest","setToString","flatRest","_flatRest","WeakMap","metaMap","_metaMap","noop","getData","_getData","realNames","_realNames","objectProto","hasOwnProperty","getFuncName","array","otherFunc","_getFuncName","MAX_ARRAY_LENGTH","LazyWrapper","_LazyWrapper","copyArray","wrapperClone","_wrapperClone","lodash","wrapperLodash","isLaziable","funcName","_isLaziable","FUNC_ERROR_TEXT","WRAP_CURRY_FLAG","WRAP_PARTIAL_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","createFlow","fromRight","funcs","prereq","_createFlow","flow","flow_1","basePropertyOf","_basePropertyOf","htmlEscapes","escapeHtmlChar","_escapeHtmlChar","toString","reUnescapedHtml","reHasUnescapedHtml","escape","_escape","htmlUnescapes","unescapeHtmlChar","_unescapeHtmlChar","reEscapedHtml","reHasEscapedHtml","unescape","_unescape","Toolbar","addControls","selected","isActive","addButton","groups","controls","control","addSelect","values","Bold","Italic","Underline","Strike","FontAttributor","sizeFromQuillToUser","quillSize","multiplier","sizeFromUserToQuill","userSize","setDefaultParagraphSize","pTag","elementNodes","largestFontSize","largestTextSize","tagFontSize","setParagraphFontSizes","pTags","el","textSizes","textSizesFromNodes","smallestTextSize","sizes","SizeAttributor","converted","lazyGoogleFont","fontID","link","toolbar","keyBindings","PangoToQuillResult","colors","fonts","fontSizes","QuillToPangoResult","QuillHelpers","applyFonts","applySizes","applyColors","mergeStyles","formatLineBreaks","styleAttributeFromPango","pangoAttribute","cssAttribute","transform","stripStyleAttributes","convertToSpans","formatWhiteSpace","removeCursorTag","removeEmptySpan","appendPangoAttributesFromStyle","transformed","useTabTray","bool","MOUSE_DOWN","MOUSE_MOVE","MOUSE_UP","toInteger","default_value","stopEvent","__indexOf","OPTIONAL_BG","cornerCursorSegments","segments","capitalizedDirection","_PrismViewCanvas","template","imageSlot","templateID","orientation","useTemplateSelectStore","templateData","shrinkage","offscreenWidth","offscreenHeight","shiftMod","syntheticEvent","_len","noSave","im","imageProps","slot_data","_fn","_j","_k","num_photo_slots","num_text_slots","photo_slots","text_slots","slot_id","_ref6","ez","overlay","ey","touch","touches","auto_redraw","minDim","theight","tpr","twidth","vpheight","vpr","vpwidth","extraResize","sv","rs","clientBaseFont","text1PosX","text1Height","text1PosY","text2PosX","text2Height","text2PosY","text_size","pattern","overlays","dragIsActive","allow","ignoreSelected","propName","curSelected","maxSlotSize","imageHeight","imageWidth","imageSizeRelation","adjustedImageHeight","adjustedImageWidth","imageSize","relativePointerPosition","photoId","wrapperDimensions","smallerSideSize","slotPosition","resizedCoords","xy1","xy2","nodeClass","currentAngle","rotate","cursors","accumulator","segment","cornersArray","clickedOnSlot","interactionMode","offsetX","offsetY","p3","p4","off","yo","xo","xy","imageSlots","select_slot","selectedSlot","editor","pango","previousIndex","oldIndex","fireEvent","templateInterrogator","each","zoomed","img_id","textSlot","found","clonePrefix","clones","slotIdx","borderState","ev","selectedID","slotId","content_type","restoreSelection","embellishment","imageId","slotsToEmpty","json_slot","setSlotImage","setSlotText","slotIsPredefined","stackableInit","stackableChecks","sanitiseTextSlot","hint","skipTemplateCache","slots","total","complete","setBlockedValue","action","saves","bMenu","extraHeight","yPoints","prevSlot","currentSlot","nextSlot","overriddenId","overriddenSlotIds","templateSlot","findIndex","slotsInPosition","aValue","bValue","PrismViewCanvas","AppTypeProvider","PropTypes","AppType","ChangeOrientationNotice","alertColour","Store","slotEvents","PrismView$1","spread","pgData","page","prevDouble","draw","offsetWidth","offsetHeight","centerWidth","centerHeight","canvasStyle","canvasStyleRight","statusText","descriptionText","$customPageHtml","EnvelopePage","visiblePage","isMultiPageStandardProduct","$3DPreview","$progressBar","isSquare","shouldDisplayOrientationNotice","hasLayoutsTray","isCalendar","PageSpreads","nextSpread","prevSpread","focusedSlot","slotEvent","updateSelectableAndTitle","toBeUpdated","sections","PrismView","RefreshOnEvents","TrackPreviewMode","ImageSlotToolSimple","leftSide","rightSide","topSide","bottomSide","handleRemoveClick","MananaSlider","handleZoom","handleRotateClick","handleLaunchEditLevel2","imgLoaded","imgLoading","imgFailed","ImageWatcher","easing","DEFAULT_TRANSITION","MODE_TRANSITION","MODE_ORIG_LOADING","MODE_ORIG","MODE_IMG_FAILED","MODE_IMG","CanvasImage","orig","background","setBelongsToCanvasImage","copyOfProps","SpinnerCover","prevProps","loadedState","imgObj","why","unloadedState","origAlpha","imgAlpha","alpha","s1","s2","s3","ChicletsBase","HideUsedPhotos","PhotosTrayBase","prevState","prevFilterUsed","fireAddPhotos","images","removed","number_of_files","prevProgress","nextProgress","getDisplayName","refreshOnEvents","WrappedComponent","FavouritesTrayItemPreview","FavouritesTrayItemPreviewDesktop","handleClick","DRAG_ITEM","DRAG_ITEM_HEIGHT","DRAG_ITEM_WIDTH","previewTimeout","PreviewIconButton","DragItem","showPreviewIconButton","dataStr","dragItem","modalShowing","trayHeight","scrollTray","clientX","clientY","drag","spinner","layoutFilter","LayoutTemplateItem","loaded","autoFocus","draggable","Spinner","$button","LayoutsTrayBase","observee","observerOptions","getFoldersBySection","hasEdgesTray","templateGroups","TemplateStore","_b","oppositeSide","OptionTrayMixin","transformAttempts","filterName","targetFilters","targetProduct","productPrice","getProductPrice","currentFilters","matchingProduct","titleClean","wrapParenthesesWithSpan","Title","filterPropertyTitleToUpperCase","PriceDifference","children","difference","differenceIsHigher","Variable","variableName","VariableTrayBase","findVariable","formData","Wrap","WrapsTrayBase","newTemplate","MobileAddToCartButton","translate","subscribeWithSelectorImpl","get","api","origSubscribe","optListener","equalityFn","currentSlice","nextSlice","previousSlice","subscribeWithSelector","SUPPORTED_VIEW_MODES","usePageStore","AddToCartNoticeBase","emptyImageSlot","unchangedDefaultText","lowDpiImage","emptyPage","orientationMismatch","viewMode","$warnings","hidePreviewButton","cardPages","pages","cardNavLabel","selectPage","baseEach","baseFilter","collection","_baseFilter","arrayFilter","baseIteratee","filter_1","recordNewUploads","imageList","album","newUploads","image_ref","newUploadsNotFromAlbums","u","handleGoToPage","customPageId","handleOptionSelected","spreads","requestedIndex","globalPreviewLoader","previewURL","PREVIEW_RESOLUTION","pageNumber","qs","host","UI_STATE","pageAndTemplate","orientations","orientationTag","autoFillImageUponUpload","SLOT_UPDATE_EVENTS","SLOT_DELAYED_EVENTS","curriedEventHandler","curry","eventType","handleSlotChanged","handleSlotClicked","handleSlotMoved"],"mappings":"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","x_google_ignoreList":[6,7,13,14,15,16,17,18,19,35,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,159,163,164]}