{ "version": 3, "sources": ["../../../node_modules/react/node_modules/object-assign/index.js", "../../../node_modules/react/cjs/react.production.min.js", "../../../node_modules/react/index.js", "../../../node_modules/react-dom/node_modules/object-assign/index.js", "../../../node_modules/scheduler/cjs/scheduler.production.min.js", "../../../node_modules/scheduler/index.js", "../../../node_modules/react-dom/cjs/react-dom.production.min.js", "../../../node_modules/react-dom/index.js", "../../../node_modules/react-is/cjs/react-is.production.min.js", "../../../node_modules/react-is/index.js", "../../../node_modules/invariant/browser.js", "../../../../artcloud.dash/node_modules/object-assign/index.js", "../../../../artcloud.dash/node_modules/react/cjs/react.production.min.js", "../../../../artcloud.dash/node_modules/react/index.js", "../../../../artcloud.dash/source/scripts/campaign/blocks/Comment.jsx", "../../../../artcloud.dash/source/scripts/campaign/blocks/Block.jsx", "../../../../artcloud.dash/source/scripts/campaign/utility/Name.jsx", "../../../../artcloud.dash/source/scripts/campaign/utility/TypeConfig.jsx", "../../../../artcloud.dash/source/scripts/campaign/utility/Utilities.jsx", "../../../../artcloud.dash/source/scripts/campaign/blocks/Button.jsx", "../../../../artcloud.dash/source/scripts/campaign/blocks/Columns.jsx", "../../../../artcloud.dash/source/scripts/campaign/blocks/Divider.jsx", "../../../../artcloud.dash/source/scripts/campaign/utility/Token.jsx", "../../../../artcloud.click/node_modules/react/node_modules/object-assign/index.js", "../../../../artcloud.click/node_modules/react/cjs/react.production.min.js", "../../../../artcloud.click/node_modules/react/index.js", "../../../../artcloud.click/source/scripts/common/PageType.jsx", "../../../../artcloud.click/source/scripts/layout/Kit.jsx", "../../../../artcloud.click/source/scripts/common/Utilities.jsx", "../../../../artcloud.click/source/scripts/common/Token.jsx", "../../../../artcloud.dash/source/scripts/campaign/blocks/Text.jsx", "../../../../artcloud.dash/source/scripts/campaign/blocks/Footer.jsx", "../../../../artcloud.dash/source/scripts/campaign/blocks/Image.jsx", "../../../../artcloud.dash/source/scripts/campaign/blocks/InventoryList.jsx", "../../../../artcloud.dash/source/scripts/campaign/blocks/Logo.jsx", "../../../../artcloud.dash/source/scripts/campaign/blocks/Social.jsx", "../../../../artcloud.dash/source/scripts/campaign/utility/BuilderBlock.jsx", "../../../../artcloud.dash/source/scripts/components/repositories/Type.jsx", "../../../../artcloud.dash/source/scripts/campaign/blocks/InventoryCell.jsx", "../../../../artcloud.dash/node_modules/scheduler/cjs/scheduler.production.min.js", "../../../../artcloud.dash/node_modules/scheduler/index.js", "../../../../artcloud.dash/node_modules/react-dom/cjs/react-dom.production.min.js", "../../../../artcloud.dash/node_modules/react-dom/index.js", "../../../../artcloud.dash/source/scripts/artcloud.js", "../../../../artcloud.collateral/node_modules/object-assign/index.js", "../../../../artcloud.collateral/node_modules/react/cjs/react.production.min.js", "../../../../artcloud.collateral/node_modules/react/index.js", "../../../../artcloud.collateral/node_modules/scheduler/cjs/scheduler.production.min.js", "../../../../artcloud.collateral/node_modules/scheduler/index.js", "../../../../artcloud.collateral/node_modules/react-dom/cjs/react-dom.production.min.js", "../../../../artcloud.collateral/node_modules/react-dom/index.js", "../../../../artcloud.collateral/source/utility/Name.jsx", "../../../../artcloud.collateral/source/utility/Utilities.jsx", "../../../../artcloud.collateral/source/common/Container.jsx", "../../../../artcloud.collateral/source/utility/Token.jsx", "../../../../artcloud.collateral/source/utility/Kit.jsx", "../../../../artcloud.collateral/source/common/TypeConfig.jsx", "../../../../artcloud.collateral/source/layout/Columns.jsx", "../../../../artcloud.collateral/source/common/CompanyAddress.jsx", "../../../../artcloud.collateral/source/common/Content.jsx", "../../../../artcloud.collateral/source/common/CompanyContactInfo.jsx", "../../../../artcloud.collateral/source/common/Logo.jsx", "../../../../artcloud.collateral/source/common/Separator.jsx", "../../../../artcloud.collateral/source/common/Text.jsx", "../../../../artcloud.collateral/source/common/Types.jsx", "../../../../artcloud.collateral/source/common/List.jsx", "../../../../artcloud.collateral/source/common/NonBreakingContainer.jsx", "../../../../artcloud.collateral/source/layout/Types.jsx", "../../../../artcloud.collateral/source/utility/Config.jsx", "../../../../artcloud.collateral/source/common/ContentContainer.jsx", "../../../../artcloud.collateral/source/common/PageHeader.jsx", "../../../../artcloud.collateral/source/common/Component.jsx", "../../../../artcloud.collateral/source/common/Image.jsx", "../../../../artcloud.collateral/source/common/Item.jsx", "../../../../artcloud.collateral/source/common/ItemMeta.jsx", "../../../../artcloud.collateral/source/artist/ItemMeta.jsx", "../../../../artcloud.collateral/source/common/ItemV2.jsx", "../../../../artcloud.collateral/source/artist/ItemContainer.jsx", "../../../../artcloud.collateral/source/artist/ArtistMeta.jsx", "../../../../artcloud.collateral/source/artist/Name.jsx", "../../../../artcloud.collateral/source/artist/Bio.jsx", "../../../../artcloud.collateral/source/artist/CV.jsx", "../../../../artcloud.collateral/source/artist/Image.jsx", "../../../../artcloud.collateral/source/common/ItemContainerV2.jsx", "../../../../artcloud.collateral/source/common/ItemContainer.jsx", "../../../../artcloud.collateral/source/artist/ArtistContainer.jsx", "../../../../artcloud.collateral/source/certificate/Item.jsx", "../../../../artcloud.collateral/source/certificate/ItemMeta.jsx", "../../../../artcloud.collateral/source/common/Signature.jsx", "../../../../artcloud.collateral/source/certificate/Statement.jsx", "../../../../artcloud.collateral/source/certificate/ItemContainer.jsx", "../../../../artcloud.collateral/source/common/LineItemCell.jsx", "../../../../artcloud.collateral/source/consignment/LineItemCell.jsx", "../../../../artcloud.collateral/source/utility/FontImports.jsx", "../../../../artcloud.collateral/source/invoice/LineItemCell.jsx", "../../../../artcloud.collateral/source/mosaic/Item.jsx", "../../../../artcloud.collateral/source/mosaic/ItemMeta.jsx", "../../../../artcloud.collateral/source/mosaic/ItemContainer.jsx", "../../../../artcloud.collateral/source/invoice/PaymentCreditCell.jsx", "../../../../artcloud.collateral/source/pricelist/ItemCell.jsx", "../../../../artcloud.collateral/source/purchaseOrder/LineItemCell.jsx", "../../../../artcloud.collateral/source/tearsheet/Image.jsx", "../../../../artcloud.collateral/source/tearsheet/Item.jsx", "../../../../artcloud.collateral/source/tearsheet/ItemMeta.jsx", "../../../../artcloud.collateral/source/tearsheet/ItemContainer.jsx", "../../../../artcloud.collateral/source/artist/Templates.jsx", "../../../../artcloud.collateral/source/certificate/Templates.jsx", "../../../../artcloud.collateral/source/consignment/Templates.jsx", "../../../../artcloud.collateral/source/invoice/Templates.jsx", "../../../../artcloud.collateral/source/mosaic/Templates.jsx", "../../../../artcloud.collateral/source/offer/Templates.jsx", "../../../../artcloud.collateral/source/pricelist/Templates.jsx", "../../../../artcloud.collateral/source/tearsheet/Templates.jsx", "../../../../artcloud.collateral/source/utility/Templates.jsx", "../../../../artcloud.collateral/source/artist/Types.jsx", "../../../../artcloud.collateral/source/certificate/Types.jsx", "../../../../artcloud.collateral/source/consignment/Address.jsx", "../../../../artcloud.collateral/source/consignment/ContactMeta.jsx", "../../../../artcloud.collateral/source/consignment/Item.jsx", "../../../../artcloud.collateral/source/consignment/ItemContainer.jsx", "../../../../artcloud.collateral/source/consignment/LineItems.jsx", "../../../../artcloud.collateral/source/consignment/Meta.jsx", "../../../../artcloud.collateral/source/consignment/Signature.jsx", "../../../../artcloud.collateral/source/consignment/Totals.jsx", "../../../../artcloud.collateral/source/consignment/Types.jsx", "../../../../artcloud.collateral/source/invoice/ContactMeta.jsx", "../../../../artcloud.collateral/source/invoice/LineItems.jsx", "../../../../artcloud.collateral/source/common/Meta.jsx", "../../../../artcloud.collateral/source/invoice/Meta.jsx", "../../../../artcloud.collateral/source/invoice/Payments.jsx", "../../../../artcloud.collateral/source/invoice/Signature.jsx", "../../../../artcloud.collateral/source/common/Totals.jsx", "../../../../artcloud.collateral/source/invoice/Totals.jsx", "../../../../artcloud.collateral/source/invoice/Address.jsx", "../../../../artcloud.collateral/source/invoice/Items.jsx", "../../../../artcloud.collateral/source/invoice/Notes.jsx", "../../../../artcloud.collateral/source/invoice/Types.jsx", "../../../../artcloud.collateral/source/mosaic/Types.jsx", "../../../../artcloud.collateral/source/offer/ContactMeta.jsx", "../../../../artcloud.collateral/source/offer/Meta.jsx", "../../../../artcloud.collateral/source/offer/Types.jsx", "../../../../artcloud.collateral/source/pricelist/ItemsList.jsx", "../../../../artcloud.collateral/source/pricelist/Item.jsx", "../../../../artcloud.collateral/source/pricelist/ItemContainer.jsx", "../../../../artcloud.collateral/source/pricelist/Types.jsx", "../../../../artcloud.collateral/source/purchaseOrder/ContactMeta.jsx", "../../../../artcloud.collateral/source/purchaseOrder/LineItems.jsx", "../../../../artcloud.collateral/source/purchaseOrder/Meta.jsx", "../../../../artcloud.collateral/source/purchaseOrder/Types.jsx", "../../../../artcloud.collateral/source/tearsheet/Types.jsx", "../../../../artcloud.collateral/source/utility/Types.jsx", "../../../../artcloud.collateral/source/RenderedCollateral.jsx", "../../../../artcloud.dash/source/scripts/components/repositories/Repository.jsx", "../../../../artcloud.dash/source/scripts/components/common/editor/Utilities.jsx", "../../../node_modules/@stripe/react-stripe-js/dist/react-stripe.umd.js", "../../../source/scripts/app.jsx", "../../../source/scripts/page/Arrivals.jsx", "../../../source/scripts/common/container/Cell.jsx", "../../../source/scripts/common/input/Button.jsx", "../../../source/scripts/common/input/LinkButton.jsx", "../../../source/scripts/common/container/Image.jsx", "../../../source/scripts/common/container/Container.jsx", "../../../node_modules/consolidated-events/lib/index.esm.js", "../../../node_modules/react-waypoint/es/index.js", "../../../source/scripts/common/container/Loading.jsx", "../../../source/scripts/common/container/Popup.jsx", "../../../source/scripts/common/container/Form.jsx", "../../../source/scripts/common/input/Arrows.jsx", "../../../source/scripts/common/input/Text.jsx", "../../../source/scripts/common/container/Slider.jsx", "../../../source/scripts/common/container/Carousel.jsx", "../../../source/scripts/page/Art.jsx", "../../../source/scripts/page/Artist.jsx", "../../../source/scripts/common/container/Prospects.jsx", "../../../source/scripts/page/Artists.jsx", "../../../source/scripts/common/repository/Type.jsx", "../../../source/scripts/page/ArtistsCategory.jsx", "../../../source/scripts/page/Browse.jsx", "../../../source/scripts/common/container/Filter.jsx", "../../../source/scripts/page/Cities.jsx", "../../../source/scripts/page/City.jsx", "../../../node_modules/@googlemaps/js-api-loader/src/index.ts", "../../../node_modules/@react-google-maps/marker-clusterer/src/ClusterIcon.tsx", "../../../node_modules/@react-google-maps/marker-clusterer/src/Cluster.tsx", "../../../node_modules/@react-google-maps/marker-clusterer/src/Clusterer.tsx", "../../../node_modules/@react-google-maps/infobox/src/InfoBox.tsx", "../../../node_modules/@react-google-maps/api/src/map-context.ts", "../../../node_modules/@react-google-maps/api/src/utils/reduce.ts", "../../../node_modules/@react-google-maps/api/src/utils/foreach.ts", "../../../node_modules/@react-google-maps/api/src/utils/helper.ts", "../../../node_modules/@react-google-maps/api/src/GoogleMap.tsx", "../../../node_modules/@react-google-maps/api/node_modules/regenerator-runtime/runtime.js", "../../../node_modules/@react-google-maps/api/src/utils/isbrowser.ts", "../../../node_modules/@react-google-maps/api/src/utils/injectscript.ts", "../../../node_modules/@react-google-maps/api/src/utils/prevent-google-fonts.ts", "../../../node_modules/@react-google-maps/api/src/utils/make-load-script-url.ts", "../../../node_modules/@react-google-maps/api/src/LoadScript.tsx", "../../../node_modules/@react-google-maps/api/src/useLoadScript.tsx", "../../../node_modules/@react-google-maps/api/src/LoadScriptNext.tsx", "../../../node_modules/@react-google-maps/api/src/useJsApiLoader.tsx", "../../../node_modules/@react-google-maps/api/src/components/maps/TrafficLayer.tsx", "../../../node_modules/@react-google-maps/api/src/components/maps/BicyclingLayer.tsx", "../../../node_modules/@react-google-maps/api/src/components/maps/TransitLayer.tsx", "../../../node_modules/@react-google-maps/api/src/components/drawing/DrawingManager.tsx", "../../../node_modules/@react-google-maps/api/src/components/drawing/Marker.tsx", "../../../node_modules/@react-google-maps/api/src/components/addons/MarkerClusterer.tsx", "../../../node_modules/@react-google-maps/api/src/components/addons/InfoBox.tsx", "../../../node_modules/@react-google-maps/api/src/components/drawing/InfoWindow.tsx", "../../../node_modules/@react-google-maps/api/src/components/drawing/Polyline.tsx", "../../../node_modules/@react-google-maps/api/src/components/drawing/Polygon.tsx", "../../../node_modules/@react-google-maps/api/src/components/drawing/Rectangle.tsx", "../../../node_modules/@react-google-maps/api/src/components/drawing/Circle.tsx", "../../../node_modules/@react-google-maps/api/src/components/drawing/Data.tsx", "../../../node_modules/@react-google-maps/api/src/components/kml/KmlLayer.tsx", "../../../node_modules/@react-google-maps/api/src/components/dom/dom-helper.ts", "../../../node_modules/@react-google-maps/api/src/components/dom/OverlayView.tsx", "../../../node_modules/@react-google-maps/api/src/utils/noop.ts", "../../../node_modules/@react-google-maps/api/src/components/overlays/GroundOverlay.tsx", "../../../node_modules/@react-google-maps/api/src/components/heatmap/HeatmapLayer.tsx", "../../../node_modules/@react-google-maps/api/src/components/streetview/StreetViewPanorama.tsx", "../../../node_modules/@react-google-maps/api/src/components/streetview/StreetViewService.tsx", "../../../node_modules/@react-google-maps/api/src/components/directions/DirectionsService.tsx", "../../../node_modules/@react-google-maps/api/src/components/directions/DirectionsRenderer.tsx", "../../../node_modules/@react-google-maps/api/src/components/distance-matrix/DistanceMatrixService.tsx", "../../../node_modules/@react-google-maps/api/src/components/places/StandaloneSearchBox.tsx", "../../../node_modules/@react-google-maps/api/src/components/places/Autocomplete.tsx", "../../../source/scripts/common/container/HubspotForm.jsx", "../../../source/scripts/page/Claim.jsx", "../../../source/scripts/common/input/Checkbox.jsx", "../../../source/scripts/common/container/Testimonial.jsx", "../../../source/scripts/page/Onboarding.jsx", "../../../../artcloud.dash/source/scripts/campaign/CampaignRenderer.jsx", "../../../source/scripts/common/repository/Device.jsx", "../../../source/scripts/common/repository/Testimonial.jsx", "../../../source/scripts/page/Galleries.jsx", "../../../source/scripts/common/input/DropDown.jsx", "../../../source/scripts/page/Gallery.jsx", "../../../source/scripts/page/Index.jsx", "../../../source/scripts/page/Invoice.jsx", "../../../node_modules/@stripe/stripe-js/dist/index.mjs", "../../../source/scripts/page/InvoiceConfirmation.jsx", "../../../source/scripts/page/Labels.jsx", "../../../source/scripts/page/List.jsx", "../../../source/scripts/page/PasswordReset.jsx", "../../../source/scripts/page/Profile.jsx", "../../../source/scripts/page/Search.jsx", "../../../source/scripts/marketing/Footer.jsx", "../../../source/scripts/marketing/Container.jsx", "../../../source/scripts/marketing/Navigation.jsx", "../../../source/scripts/page/Onboarding2.jsx", "../../../source/scripts/app-shared.jsx", "../../../source/scripts/page/Show.jsx", "../../../source/scripts/page/Shows.jsx", "../../../source/scripts/page/Trending.jsx", "../../../source/scripts/page/Unsubscribe.jsx", "../../../source/scripts/error/Auth.jsx", "../../../source/scripts/error/Internal.jsx", "../../../source/scripts/error/NotFound.jsx"], "sourcesContent": ["/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n", "/** @license React v16.13.1\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cQ.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTimeb}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"\"+b.valueOf().toString()+\"\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;dpc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;gzf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(gl&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;by?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;yy?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;cf))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(lN.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;hd.tailExpiration&&1b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTimea?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10 component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){awi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;cb||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTimeQ.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k {\r\n if (!props.document || document) {\r\n return;\r\n }\r\n setDocument(props.document);\r\n const element = props.document.getElementById(props.id);\r\n if (!element) {\r\n return;\r\n }\r\n element.outerHTML = element.innerHTML;\r\n }, [props.document]);\r\n return
\r\n}\r\n\r\nexport default Comment;", "import React from 'react';\r\n\r\nimport Comment from './Comment.jsx';\r\n\r\nfunction Wrapper(props) {\r\n const style = props.style ? { ...props.style } : {};\r\n style.minWidth = '100%';\r\n const width = props.maxWidth || 600;\r\n\r\n let content = props.children;\r\n if (props.isLayout != true) {\r\n content = (\r\n \r\n \r\n \r\n {content}\r\n \r\n \r\n \r\n );\r\n }\r\n const containerStyle = props.containerStyle ? { ...props.containerStyle } : {};\r\n containerStyle.maxWidth = `${width}px`;\r\n return (\r\n \r\n \r\n \r\n
\r\n {\r\n props.renderMso &&\r\n \r\n \r\n \r\n \r\n \r\n
`} />\r\n }\r\n \r\n
\r\n {content}\r\n
\r\n {\r\n props.renderMso &&\r\n
`} />\r\n }\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport { Wrapper }", "const Name = {\r\n Block: {\r\n Column: 'column',\r\n Divider: 'divider',\r\n Footer: 'footer',\r\n HeaderText: 'headerText',\r\n Image: 'image',\r\n LinkButton: 'button',\r\n Logo: 'logo',\r\n Social: 'social',\r\n Text: 'text',\r\n\r\n Inventory: {\r\n Button: 'inventory-button',\r\n Image: 'inventory-image',\r\n List: 'inventory-list',\r\n Text: 'inventory-meta-text'\r\n }\r\n },\r\n\r\n Content: {\r\n InventoryCell: 'inventoryCell',\r\n InventoryCellOverride: 'inventoryCellOverride'\r\n },\r\n\r\n Group: {\r\n ImageLeftTextRight: 'image-left-text-right',\r\n ImageRightTextLeft: 'image-right-text-left'\r\n }\r\n}\r\nexport default Name;", "const TypeConfig = {\r\n defaultBackgroundColor: '#333333',\r\n defaultFontFamily: 'helvetica,sans-serif',\r\n options: {\r\n alignment: () => ([\r\n { display: 'Left', value: 'left' },\r\n { display: 'Center', value: 'center' },\r\n { display: 'Right', value: 'right' }\r\n ]),\r\n fontFamily: () => ([\r\n { display: 'Arial', value: `arial,sans-serif` },\r\n { display: 'Brush Script MT', value: `'Brush Script MT',cursive` },\r\n { display: 'Courier New', value: `'courier new',monospace` },\r\n { display: 'Garamond', value: `garamond,serif` },\r\n { display: 'Georgia', value: `georgia,serif` },\r\n { display: 'Helvetica', value: `helvetica,sans-serif` },\r\n { display: 'Tahoma', value: `tahoma,sans-serif` },\r\n { display: 'Times New Roman', value: `'Times New Roman',serif` },\r\n { display: 'Trebuchet MS', value: `'trebuchet ms',sans-serif` },\r\n { display: 'Verdana', value: `verdana,sans-serif` }\r\n ]),\r\n measurement: (includePercent) => {\r\n const options = [{ display: 'PX', value: 'px' }];\r\n if (includePercent == true) {\r\n options.push({ display: '%', value: '%' });\r\n }\r\n return options;\r\n },\r\n }\r\n}\r\nexport default TypeConfig;", "const Utilities = {\r\n cdnUrl: 'https://cdn.artcld.com/img/',\r\n columnWidth: (columnCount) => 600 / columnCount,\r\n imageSize: (columnWidth) => Math.round(columnWidth * 0.82),\r\n imageUrl: (image, size, transforms) => {\r\n if (!image || !image.id) {\r\n return;\r\n }\r\n if (image.extension == 'gif') {\r\n return `${Utilities.cdnUrl}${image.id}.${image.extension}`;\r\n }\r\n let _transforms = '';\r\n if (size) {\r\n _transforms = `w_${size}`;\r\n }\r\n if (transforms) {\r\n if (_transforms.length > 0) {\r\n _transforms += ',';\r\n }\r\n _transforms += transforms;\r\n }\r\n return `${Utilities.cdnUrl}${_transforms ? `${_transforms}/` : ''}${image.id}.${image.extension}`;\r\n },\r\n isNullOrWhitespace: function (value) {\r\n if (!value) {\r\n return true;\r\n }\r\n return value.toString().trim().length == 0\r\n },\r\n maxImageWidth: (columnCount) => `${(600 / columnCount) - 36}`,\r\n copyObject: function (source, destination) {\r\n if (!source || !destination) {\r\n return;\r\n }\r\n for (let id in source) {\r\n destination[id] = source[id];\r\n }\r\n },\r\n _mapBorderProperty: function (style, propNameBase, propName, propValue, propUnit) {\r\n if (propValue == undefined || propValue == '') {\r\n return;\r\n }\r\n if (!style[`${propNameBase}Style`]) {\r\n style[`${propNameBase}Style`] = 'solid';\r\n }\r\n style[propName] = `${propValue}`;\r\n\r\n if (propUnit) {\r\n style[propName] += propUnit;\r\n }\r\n },\r\n mapStyleConfigProps: function (style, configProps, handleProp) {\r\n for (let propName in configProps) {\r\n let prop = configProps[propName];\r\n if (prop != undefined && prop.unit) {\r\n const propValue = (prop.value || '').trim();\r\n switch (propName) {\r\n case 'borderBottomWidth':\r\n Utilities._mapBorderProperty(style, 'borderBottom', propName, propValue, prop.unit);\r\n continue;\r\n case 'borderLeftWidth':\r\n Utilities._mapBorderProperty(style, 'borderLeft', propName, propValue, prop.unit);\r\n continue;\r\n case 'borderRightWidth':\r\n Utilities._mapBorderProperty(style, 'borderRight', propName, propValue, prop.unit);\r\n continue;\r\n case 'borderTopWidth':\r\n Utilities._mapBorderProperty(style, 'borderTop', propName, propValue, prop.unit);\r\n continue;\r\n default:\r\n if (handleProp && handleProp(propName, propValue, prop.unit)) {\r\n continue;\r\n }\r\n break;\r\n }\r\n if (propValue != \"\") {\r\n style[propName] = `${propValue}${prop.unit}`;\r\n }\r\n continue;\r\n }\r\n if (prop != true && prop != false) {\r\n if (prop && prop.toString) {\r\n prop = prop.toString().trim();\r\n } else {\r\n prop = (prop || '').trim();\r\n }\r\n }\r\n switch (propName) {\r\n case 'borderBottomColor':\r\n Utilities._mapBorderProperty(style, 'borderBottom', propName, prop);\r\n continue;\r\n case 'borderLeftColor':\r\n Utilities._mapBorderProperty(style, 'borderLeft', propName, prop);\r\n continue;\r\n case 'borderRightColor':\r\n Utilities._mapBorderProperty(style, 'borderRight', propName, prop);\r\n continue;\r\n case 'borderTopColor':\r\n Utilities._mapBorderProperty(style, 'borderTop', propName, prop);\r\n continue;\r\n default:\r\n if (handleProp && handleProp(propName, prop)) {\r\n continue;\r\n }\r\n break;\r\n }\r\n if (prop != \"\" && prop != \"[object Object]\") {\r\n style[propName] = prop;\r\n }\r\n\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = Utilities;", "import React from 'react';\r\n\r\nimport { Wrapper } from './Block.jsx';\r\nimport Name from '../utility/Name.jsx';\r\nimport TypeConfig from '../utility/TypeConfig.jsx';\r\nimport Utilities from '../utility/Utilities.jsx';\r\n\r\nfunction BaseButtonComponent(props) {\r\n let design, wrapperStyle;\r\n let alignment = 'center';\r\n let fullWidth = false;\r\n const contentContainerStyle = { backgroundColor: TypeConfig.defaultBackgroundColor, borderCollapse: 'separate' };\r\n const contentStyle = {};\r\n const buttonStyle = { letterSpacing: 'normal', lineHeight: '100%', textAlign: 'center', textDecoration: 'none' };\r\n const innerStyle = {};\r\n if (props.blockConfig) {\r\n if (props.blockConfig.block) {\r\n Utilities.mapStyleConfigProps(contentContainerStyle, props.blockConfig.block, (propName, propValue, propUnit) => {\r\n switch (propName) {\r\n case 'backgroundColor':\r\n if (propValue) {\r\n innerStyle.backgroundColor = propValue;\r\n wrapperStyle = { backgroundColor: propValue };\r\n }\r\n return true;\r\n case 'buttonColor':\r\n if (propValue) {\r\n contentContainerStyle.backgroundColor = propValue;\r\n }\r\n return true;\r\n case 'design':\r\n design = propValue;\r\n return true;\r\n case 'fontFamily':\r\n if (propValue) {\r\n contentStyle[propName] = propValue;\r\n }\r\n return true;\r\n case 'color':\r\n case 'textAlign':\r\n if (propValue) {\r\n buttonStyle[propName] = propValue;\r\n }\r\n return true;\r\n case 'fontSize':\r\n if (propValue && propUnit) {\r\n contentStyle[propName] = `${propValue}${propUnit}`;\r\n }\r\n return true;\r\n case 'isBold':\r\n if (propValue) {\r\n buttonStyle.fontWeight = 'bold';\r\n }\r\n return true;\r\n case 'isItalic':\r\n if (propValue) {\r\n buttonStyle.fontStyle = 'italic';\r\n }\r\n return true;\r\n case 'isUnderline':\r\n if (propValue) {\r\n buttonStyle.textDecoration = 'underline';\r\n }\r\n return true;\r\n case 'letterSpacing':\r\n case 'lineHeight':\r\n if (propValue && propUnit) {\r\n buttonStyle[propName] = `${propValue}${propUnit}`;\r\n }\r\n return true;\r\n default:\r\n return props.onShouldMapStyleConfigProp && !props.onShouldMapStyleConfigProp(propName);\r\n }\r\n });\r\n }\r\n if (props.blockConfig.layout) {\r\n Utilities.mapStyleConfigProps(contentStyle, props.blockConfig.layout, (propName, propValue, propUnit) => {\r\n switch (propName) {\r\n case 'alignment':\r\n alignment = propValue;\r\n return true;\r\n case 'fullWidth':\r\n fullWidth = propValue;\r\n return true;\r\n case 'marginBottom':\r\n case 'marginLeft':\r\n case 'marginRight':\r\n case 'marginTop':\r\n if (propValue && propUnit) {\r\n innerStyle[propName.replace('margin', 'padding')] = `${propValue}${propUnit}`;\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n }\r\n if (!design) {\r\n design = props.defaultText;\r\n }\r\n if (props.builder) {\r\n buttonStyle.pointerEvents = 'none';\r\n }\r\n const designProps = {\r\n className: 'mcnButton',\r\n style: buttonStyle,\r\n title: design || ''\r\n }\r\n if (props.link) {\r\n design = {design}\r\n } else {\r\n design = {design}\r\n }\r\n let content = (\r\n \r\n \r\n \r\n \r\n \r\n {design}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n if (props.useWrapper != false) {\r\n content = (\r\n \r\n {content}\r\n \r\n );\r\n }\r\n return content;\r\n}\r\nconst BaseButtonTypeConfig = {\r\n defaultDesign: (defaultText) => `

${defaultText || 'Shop Now'}

`,\r\n panel: {\r\n block: function (defaultText) {\r\n const group = 'block';\r\n return {\r\n group,\r\n label: 'Design',\r\n options: [\r\n {\r\n display: 'Display Text',\r\n fullWidth: true,\r\n group,\r\n name: 'design',\r\n type: 'text',\r\n value: defaultText\r\n },\r\n {\r\n display: 'Text Properties',\r\n group,\r\n id: 'textProps',\r\n type: 'header'\r\n },\r\n {\r\n display: 'Font Family',\r\n group,\r\n name: 'fontFamily',\r\n options: TypeConfig.options.fontFamily(),\r\n type: 'dropdown',\r\n value: TypeConfig.defaultFontFamily\r\n },\r\n {\r\n display: 'Font Size',\r\n group,\r\n name: 'fontSize',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement',\r\n value: { value: '16', unit: 'px' }\r\n },\r\n {\r\n display: 'Line Height',\r\n group,\r\n name: 'lineHeight',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement'\r\n },\r\n {\r\n display: 'Letter Spacing',\r\n group,\r\n name: 'letterSpacing',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement'\r\n },\r\n {\r\n display: 'Color',\r\n group,\r\n name: 'color',\r\n showAlpha: false,\r\n type: 'color',\r\n value: '#ffffff'\r\n },\r\n {\r\n display: 'Text Alignment',\r\n group,\r\n name: 'textAlign',\r\n options: TypeConfig.options.alignment(),\r\n type: 'dropdown',\r\n value: 'center'\r\n },\r\n {\r\n display: 'Bold',\r\n group,\r\n name: 'isBold',\r\n type: 'checkbox',\r\n value: true\r\n },\r\n {\r\n display: 'Italic',\r\n group,\r\n name: 'isItalic',\r\n type: 'checkbox',\r\n value: false\r\n },\r\n {\r\n display: 'Underline',\r\n group,\r\n name: 'isUnderline',\r\n type: 'checkbox',\r\n value: false\r\n },\r\n {\r\n fullWidth: true,\r\n group,\r\n type: 'spacer-short'\r\n },\r\n {\r\n display: 'Background/Border Properties',\r\n group,\r\n id: 'buttonProps',\r\n type: 'header'\r\n },\r\n {\r\n display: 'Background Color',\r\n group,\r\n name: 'backgroundColor',\r\n showAlpha: false,\r\n type: 'color'\r\n },\r\n {\r\n display: 'Button Color',\r\n group,\r\n name: 'buttonColor',\r\n showAlpha: false,\r\n type: 'color',\r\n value: TypeConfig.defaultBackgroundColor\r\n },\r\n {\r\n display: 'Border Radius',\r\n group,\r\n name: 'borderRadius',\r\n options: TypeConfig.options.measurement(true),\r\n type: 'measurement',\r\n value: { value: '3', unit: 'px' }\r\n },\r\n {\r\n display: 'Border',\r\n group,\r\n name: 'border',\r\n options: TypeConfig.options.measurement(),\r\n type: 'border'\r\n },\r\n {\r\n fullWidth: true,\r\n group,\r\n type: 'spacer-short'\r\n },\r\n ]\r\n };\r\n },\r\n layout: function () {\r\n const group = 'layout';\r\n return {\r\n group,\r\n label: 'Layout',\r\n options: [\r\n {\r\n display: 'Padding/Margin',\r\n group,\r\n max: '100',\r\n name: 'paddingMargin',\r\n options: TypeConfig.options.measurement(),\r\n type: 'paddingMargin',\r\n value: {\r\n marginBottom: { value: '18', unit: 'px' },\r\n marginLeft: { value: '18', unit: 'px' },\r\n marginRight: { value: '18', unit: 'px' },\r\n marginTop: { value: '18', unit: 'px' },\r\n paddingBottom: { value: '15', unit: 'px' },\r\n paddingLeft: { value: '15', unit: 'px' },\r\n paddingRight: { value: '15', unit: 'px' },\r\n paddingTop: { value: '15', unit: 'px' }\r\n }\r\n },\r\n {\r\n display: 'Full Width',\r\n group,\r\n name: 'fullWidth',\r\n type: 'checkbox',\r\n value: false\r\n },\r\n {\r\n display: 'Button Placement',\r\n group,\r\n name: 'alignment',\r\n options: TypeConfig.options.alignment(),\r\n type: 'dropdown',\r\n value: 'center',\r\n visible: (config) => config.layout && !config.layout.fullWidth\r\n }\r\n ]\r\n };\r\n }\r\n }\r\n}\r\nconst BaseButton = { Component: BaseButtonComponent, TypeConfig: BaseButtonTypeConfig };\r\n\r\n// region LINK BUTTON\r\n\r\nfunction LinkButtonComponent(props) {\r\n let link;\r\n if (props.blockConfig && props.blockConfig.block && props.blockConfig.block.url) {\r\n link = props.blockConfig.block.url;\r\n }\r\n return propName != 'url'} />\r\n}\r\nconst LinkButtonTypeConfig = {\r\n defaultText: () => 'Shop Now',\r\n panel: {\r\n block: function () {\r\n const config = BaseButtonTypeConfig.panel.block(LinkButtonTypeConfig.defaultText());\r\n config.options.splice(0, 0,\r\n {\r\n display: 'Button Link',\r\n group: config.group,\r\n name: 'url',\r\n fullWidth: true,\r\n type: 'text'\r\n }\r\n );\r\n return config;\r\n },\r\n layout: BaseButtonTypeConfig.panel.layout\r\n }\r\n}\r\nconst LinkButtonBlockTypeDefinition = (group) => {\r\n return {\r\n id: Name.Block.LinkButton,\r\n config: {\r\n block: LinkButtonTypeConfig.panel.block(),\r\n layout: LinkButtonTypeConfig.panel.layout()\r\n },\r\n display: 'Button',\r\n group,\r\n image: 'button.png'\r\n };\r\n}\r\nconst LinkButton = { BlockTypeDefinition: LinkButtonBlockTypeDefinition, Component: LinkButtonComponent, TypeConfig: LinkButtonTypeConfig };\r\n\r\nexport { BaseButton, LinkButton }", "import React from 'react';\r\n\r\nimport { Wrapper } from './Block.jsx';\r\nimport { BuilderBlock, EmptyPlaceholder, withBlockRendering } from '../utility/BuilderBlock.jsx';\r\nimport Comment from './Comment.jsx';\r\nimport Name from '../utility/Name.jsx';\r\nimport TypeConfig from '../utility/TypeConfig.jsx';\r\nimport Utilities from '../utility/Utilities.jsx';\r\n\r\nlet defaultColumnCount = 2;\r\nfunction ColumnsComponent(props) {\r\n let columnCount = defaultColumnCount;\r\n let content;\r\n const containerStyle = { borderCollapse: 'separate' };\r\n const wrapperStyle = {};\r\n if (props.blockConfig) {\r\n if (props.blockConfig.block) {\r\n Utilities.mapStyleConfigProps(containerStyle, props.blockConfig.block, (propName, propValue, propUnit) => {\r\n switch (propName) {\r\n case 'backgroundColor':\r\n wrapperStyle.backgroundColor = propValue;\r\n return true;\r\n case 'contentColor':\r\n containerStyle.backgroundColor = propValue;\r\n return true;\r\n case 'columnCount':\r\n columnCount = parseInt(propValue, 10) || columnCount;\r\n return true;\r\n }\r\n });\r\n }\r\n if (props.blockConfig.layout) {\r\n Utilities.mapStyleConfigProps(wrapperStyle, props.blockConfig.layout);\r\n }\r\n }\r\n let columnWidth = 600;\r\n if (containerStyle.borderLeftWidth && containerStyle.borderLeftStyle != 'none') {\r\n const temp = parseInt(containerStyle.borderLeftWidth, 10);\r\n if (!isNaN(temp)) {\r\n columnWidth -= temp;\r\n }\r\n }\r\n if (containerStyle.borderRightWidth && containerStyle.borderRightStyle != 'none') {\r\n const temp = parseInt(containerStyle.borderRightWidth, 10);\r\n if (!isNaN(temp)) {\r\n columnWidth -= temp;\r\n }\r\n }\r\n columnWidth /= columnCount;\r\n if (props.blocks) {\r\n content = props.blocks.map((d, i) => {\r\n return (\r\n \r\n )\r\n });\r\n }\r\n if (props.builder) {\r\n content =
{content}
\r\n }\r\n content = (\r\n \r\n {\r\n props.renderMso &&\r\n `} />\r\n }\r\n {content}\r\n {\r\n props.renderMso &&\r\n
`} />\r\n }\r\n
\r\n )\r\n if (props.builder) {\r\n content = (\r\n <>\r\n \r\n {content}\r\n
\r\n \r\n {\r\n props.dragging &&\r\n
\r\n }\r\n \r\n );\r\n }\r\n return content;\r\n}\r\nconst ColumnsTypeConfig = {\r\n panel: {\r\n block: function () {\r\n const group = 'design';\r\n return {\r\n group,\r\n label: 'Design',\r\n options: [\r\n {\r\n display: 'Background Color',\r\n group,\r\n name: 'backgroundColor',\r\n type: 'color'\r\n },\r\n {\r\n display: 'Content Background Color',\r\n group,\r\n name: 'contentColor',\r\n type: 'color'\r\n },\r\n {\r\n display: 'Column Count',\r\n group,\r\n name: 'columnCount',\r\n options: [\r\n { display: '2', value: 2 },\r\n { display: '3', value: 3 }\r\n ],\r\n relatedProperties: [\r\n 'alignment-col3',\r\n 'backgroundColor-col3'\r\n ],\r\n type: 'dropdown',\r\n value: defaultColumnCount\r\n },\r\n {\r\n display: 'Border Radius',\r\n group,\r\n name: 'borderRadius',\r\n options: TypeConfig.options.measurement(true),\r\n type: 'measurement'\r\n },\r\n {\r\n display: 'Border',\r\n group,\r\n name: 'border',\r\n options: TypeConfig.options.measurement(),\r\n type: 'border'\r\n }\r\n ]\r\n }\r\n },\r\n layout: function () {\r\n const group = 'layout';\r\n return {\r\n group,\r\n label: 'Layout',\r\n options: [\r\n {\r\n display: 'Padding Top',\r\n fullWidth: true,\r\n group,\r\n max: '100',\r\n name: 'paddingTop',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement-slider'\r\n },\r\n {\r\n display: 'Padding Bottom',\r\n fullWidth: true,\r\n group,\r\n max: '100',\r\n name: 'paddingBottom',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement-slider'\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n};\r\nconst ColumnsBlockTypeDefinition = (group) => {\r\n return {\r\n id: Name.Block.Column,\r\n config: {\r\n block: ColumnsTypeConfig.panel.block(),\r\n blocks: [[], []],\r\n layout: ColumnsTypeConfig.panel.layout()\r\n },\r\n dataBlockType: 'container',\r\n dataType: 'layout',\r\n display: 'Columns',\r\n group,\r\n image: 'columns.png'\r\n };\r\n};\r\nconst Columns = { BlockTypeDefinition: ColumnsBlockTypeDefinition, Component: ColumnsComponent, TypeConfig: ColumnsTypeConfig };\r\n\r\nfunction _ColumnContainer(props) {\r\n const blocks = props.blocks || [];\r\n const columnWidth = props.width || 300;\r\n const dataType = 'layout-vertical';\r\n\r\n let id;\r\n let className = 'Content';\r\n let content = props.onBlockRendering(blocks, () => ({ frameDoc: props.frameDoc, maxWidth: columnWidth, renderMso: props.renderMso }));\r\n if (props.builder) {\r\n className += ' layout-cont layout-child';\r\n id = `${props.blockId}-child-${props.index}`;\r\n content = (\r\n \r\n {\r\n props.builder &&\r\n props.dragging &&\r\n
\r\n }\r\n {content}\r\n {\r\n props.builder &&\r\n <>\r\n {\r\n blocks.length == 0 &&\r\n !props.dragging &&\r\n \r\n }\r\n {\r\n props.dragging &&\r\n
\r\n }\r\n \r\n }\r\n
\r\n )\r\n }\r\n return (\r\n <>\r\n {\r\n props.renderMso &&\r\n `} />\r\n }\r\n {\r\n props.builder &&\r\n props.index > 0 &&\r\n
\r\n //
\r\n }\r\n \r\n \r\n \r\n \r\n {content}\r\n \r\n \r\n \r\n \r\n {\r\n props.renderMso &&\r\n `} />\r\n }\r\n \r\n )\r\n}\r\nconst ColumnContainer = withBlockRendering(_ColumnContainer);\r\n\r\nexport default Columns;", "import React from 'react';\r\n\r\nimport { Wrapper } from './Block.jsx';\r\nimport Name from '../utility/Name.jsx';\r\nimport TypeConfig from '../utility/TypeConfig.jsx';\r\nimport Utilities from '../utility/Utilities.jsx';\r\n\r\nfunction DividerComponent(props) {\r\n let wrapperStyle;\r\n const contentStyle = {\r\n borderTopColor: '#EAEAEA',\r\n borderTopStyle: 'solid',\r\n borderTopWidth: '2px',\r\n minWidth: '100%',\r\n };\r\n const contentContainerStyle = {};\r\n if (props.blockConfig) {\r\n if (props.blockConfig.block) {\r\n Utilities.mapStyleConfigProps(contentStyle, props.blockConfig.block, (propName, propValue) => {\r\n switch (propName) {\r\n case 'backgroundColor':\r\n wrapperStyle = { backgroundColor: propValue };\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n if (props.blockConfig.layout) {\r\n Utilities.mapStyleConfigProps(contentContainerStyle, props.blockConfig.layout);\r\n }\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\nconst DividerTypeConfig = {\r\n panel: {\r\n block: function ({ backgroundColor }) {\r\n const group = 'block';\r\n return {\r\n group,\r\n label: 'Design',\r\n options: [\r\n {\r\n display: 'Background Color',\r\n group,\r\n name: 'backgroundColor',\r\n type: 'color',\r\n value: backgroundColor\r\n },\r\n {\r\n display: 'Line Color',\r\n group,\r\n name: 'borderTopColor',\r\n type: 'color',\r\n value: '#EAEAEA'\r\n },\r\n {\r\n display: 'Line Width',\r\n fullWidth: true,\r\n group,\r\n max: '20',\r\n name: 'borderTopWidth',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement-slider',\r\n value: { value: '2', unit: 'px' }\r\n }\r\n ]\r\n }\r\n },\r\n layout: function () {\r\n const group = 'layout';\r\n return {\r\n group,\r\n label: 'Layout',\r\n options: [\r\n {\r\n disabled: ['marginLeft', 'marginRight', 'marginBottom', 'marginTop'],\r\n display: 'Padding/Margin',\r\n group,\r\n max: '100',\r\n name: 'paddingMargin',\r\n options: TypeConfig.options.measurement(),\r\n type: 'paddingMargin',\r\n value: {\r\n paddingBottom: { value: '18', unit: 'px' },\r\n paddingLeft: { value: '18', unit: 'px' },\r\n paddingRight: { value: '18', unit: 'px' },\r\n paddingTop: { value: '18', unit: 'px' }\r\n }\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n}\r\nconst DividerBlockTypeDefinition = (group, { backgroundColor }) => {\r\n return {\r\n id: Name.Block.Divider,\r\n config: {\r\n block: DividerTypeConfig.panel.block({ backgroundColor }),\r\n layout: DividerTypeConfig.panel.layout()\r\n },\r\n display: 'Divider',\r\n group,\r\n image: 'hr.png'\r\n }\r\n}\r\nconst Divider = { BlockTypeDefinition: DividerBlockTypeDefinition, Component: DividerComponent, TypeConfig: DividerTypeConfig };\r\n\r\nexport default Divider;", "const Token = {\r\n Company: 'COMPANY',\r\n FirstName: 'FIRST_NAME',\r\n LastName: 'LAST_NAME',\r\n Prefix: 'PREFIX',\r\n SpouseFirstName: 'SPOUSE_FIRST_NAME',\r\n SpouseLastName: 'SPOUSE_LAST_NAME',\r\n SpousePrefix: 'SPOUSE_PREFIX',\r\n\r\n Inventory: {\r\n Artist: 'ARTIST',\r\n Date: 'DATE',\r\n Dimensions: 'DIMENSIONS',\r\n Edition: 'EDITION',\r\n Medium: 'MEDIUM',\r\n Price: 'PRICE',\r\n Title: 'TITLE'\r\n },\r\n\r\n Footer: {\r\n CurrentYear: 'CURRENT_YEAR',\r\n ListCompany: 'LIST_COMPANY',\r\n ListAddressHtml: 'LIST_ADDRESS_HTML'\r\n },\r\n\r\n getTag: (token) => {\r\n switch (token) {\r\n case Token.Company:\r\n return 'Company';\r\n case Token.FirstName:\r\n return 'FirstName';\r\n case Token.LastName:\r\n return 'LastName';\r\n case Token.Prefix:\r\n return 'Prefix';\r\n case Token.SpouseFirstName:\r\n return 'SpouseFirstName';\r\n case Token.SpouseLastName:\r\n return 'SpouseLastName';\r\n case Token.SpousePrefix:\r\n return 'SpousePrefix';\r\n }\r\n },\r\n\r\n getDefaultTokenConfig: (display, token) => {\r\n return {\r\n display: display,\r\n format: (data) => { return `{${data.token}${data.default ? `(${data.default})` : ''}}` },\r\n options: [\r\n { display: 'Default Value', name: 'default' }\r\n ],\r\n token: token\r\n }\r\n },\r\n\r\n getWrappedTokenConfig: (display, token) => {\r\n return {\r\n display: display,\r\n format: (data) => { return `${data.before || ''}{${data.token}${data.default ? `(${data.default})` : ''}}${data.after || ''}` },\r\n options: [\r\n { display: 'Prefix Label', name: 'before' },\r\n { display: 'Suffix Label', name: 'after' },\r\n { display: 'Default Value', name: 'default' }\r\n ],\r\n token: token\r\n };\r\n },\r\n\r\n extractTokenOptions: (tokenizedString, handler) => {\r\n if (!tokenizedString) {\r\n return {};\r\n }\r\n let parsedResultString = tokenizedString;\r\n let char, options;\r\n let indexStart = parsedResultString.indexOf('{');\r\n let indexEnd = indexStart;\r\n let keyword = '';\r\n let parsingList = false;\r\n let parsingOptions = false;\r\n let tokens = [];\r\n let parsingString = false;\r\n while (indexStart >= 0 && indexEnd < parsedResultString.length - 1) {\r\n indexEnd += 1;\r\n char = parsedResultString.charAt(indexEnd);\r\n switch (char) {\r\n case '(':\r\n if (parsingList || parsingOptions || parsingString) {\r\n options += char;\r\n break;\r\n }\r\n // Start options\r\n options = '';\r\n parsingOptions = true;\r\n break;\r\n case ')':\r\n if (parsingList || parsingString) {\r\n options += char;\r\n break;\r\n }\r\n // End options\r\n parsingOptions = false;\r\n break;\r\n case '[':\r\n if (parsingOptions) {\r\n parsingList = true;\r\n\r\n // List components are converted to strings (wrapped in quotes) since they will be parsed separately\r\n options += char;\r\n }\r\n break;\r\n case '\"':\r\n if (parsingList || parsingOptions) {\r\n options += '\"';\r\n parsingString = !parsingString;\r\n }\r\n break;\r\n case ']':\r\n if (parsingOptions) {\r\n // List components are converted to strings (wrapped in quotes) since they will be parsed separately\r\n options += char;\r\n }\r\n parsingList = false;\r\n break;\r\n case '}':\r\n if (parsingOptions) {\r\n options += char;\r\n break;\r\n }\r\n // End keyword\r\n let parsedProps;\r\n if (options) {\r\n try { parsedProps = JSON.parse(`{${options}}`); } catch (e) { }\r\n }\r\n if (parsedProps) {\r\n parsedProps.tag = Token.getTag(keyword);\r\n }\r\n let replaceString;\r\n switch (keyword) {\r\n case 'ALTERNATE_PRICES':\r\n case 'GROUP':\r\n if (!parsedProps) {\r\n break;\r\n }\r\n let parsedComponents = [];\r\n if (parsedProps.components && parsedProps.components.length > 0) {\r\n // Get replacement strings for each component in the group\r\n parsedProps.components.forEach((d) => {\r\n if (!d) {\r\n return;\r\n }\r\n const string = d.replaceAll('\"', '\\\\\\\"').replaceAll(\"*'\", '\"').trim();\r\n const tokenOptions = Token.extractTokenOptions(string, handler);\r\n if (tokenOptions.parsedResultString === \"\") {\r\n return;\r\n }\r\n if (tokenOptions.parsedResultString != undefined) {\r\n parsedComponents.push(tokenOptions.parsedResultString);\r\n tokens.push(...tokenOptions.tokens);\r\n } else {\r\n parsedComponents.push(d);\r\n }\r\n })\r\n }\r\n replaceString = parsedComponents.join(parsedProps.separator ? parsedProps.separator : '');\r\n break;\r\n default:\r\n if (handler && parsedProps) {\r\n // Get the replacement string for the token keyword and props\r\n replaceString = handler(keyword, parsedProps);\r\n parsedProps.replaceString = replaceString;\r\n tokens.push(parsedProps);\r\n }\r\n }\r\n if (replaceString != undefined) {\r\n // Replace the token with the replacement string\r\n parsedResultString = parsedResultString.substring(0, indexStart) + replaceString + parsedResultString.substring(indexEnd + 1);\r\n\r\n // Update end index to point to the end of the replacement string so parts of the string aren't skipped or processed twice\r\n indexEnd = indexStart + replaceString.length;\r\n }\r\n keyword = '';\r\n options = undefined;\r\n\r\n // Find start of next keyword (if present)\r\n indexStart = parsedResultString.indexOf('{', indexEnd);\r\n indexEnd = indexStart;\r\n break;\r\n default:\r\n if (parsingOptions) {\r\n options += char;\r\n } else {\r\n keyword += char;\r\n }\r\n break;\r\n }\r\n }\r\n return { tokens, parsedResultString };\r\n }\r\n}\r\nexport default Token;", "/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n", "/** @license React v16.13.1\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cQ.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k (config && config.documents && config.documents.kit) || {},\r\n _kitConfig: (kit, pageType) => {\r\n switch (pageType) {\r\n case Kit.Context.Button.Primary:\r\n case Kit.Context.Button.Secondary:\r\n return kit[Kit.Type.Button] && kit[Kit.Type.Button][pageType];\r\n case Kit.Context.Cell.Artist.Grid:\r\n case Kit.Context.Cell.Blog:\r\n case Kit.Context.Cell.Exhibition.Grid:\r\n case Kit.Context.Cell.Exhibition.Parallax:\r\n case Kit.Context.Cell.Inventory.Grid:\r\n case Kit.Context.Cell.Inventory.Waterfall:\r\n case Kit.Context.Cell.RecentlyViewed:\r\n return kit[Kit.Type.Cell] && kit[Kit.Type.Cell][pageType];\r\n case Kit.Context.Global.Header1:\r\n case Kit.Context.Global.Header2:\r\n case Kit.Context.Global.Header3:\r\n case Kit.Context.Global.Header4:\r\n case Kit.Context.Global.Header5:\r\n case Kit.Context.Global.Header6:\r\n case Kit.Context.Global.Paragraph:\r\n return kit[Kit.Type.Global] && kit[Kit.Type.Global][pageType];\r\n case PageType.Cart:\r\n case PageType.SearchResults:\r\n return kit[PageType.Custom];\r\n default:\r\n return kit[pageType];\r\n }\r\n },\r\n designKit: (config, context, index = 0) => {\r\n const kit = Kit._kit(config);\r\n const designKit = Kit._kitConfig(kit, context);\r\n return designKit && designKit.length > index && designKit[index];\r\n },\r\n kit: (config, pageType) => {\r\n const kit = Kit._kit(config);\r\n let pageKit = Kit._kitConfig(kit, pageType);\r\n if (pageKit && pageKit.page) {\r\n pageKit = pageKit.page;\r\n }\r\n return pageKit;\r\n },\r\n\r\n Button: {\r\n token: 'BUTTON_TEXT',\r\n\r\n clearBlockConfig: (blockConfig) => {\r\n if (!blockConfig || !blockConfig.config) {\r\n return;\r\n }\r\n const propNamesString = [\r\n 'backgroundColor',\r\n 'borderBottomColor',\r\n 'borderBottomStyle',\r\n 'borderLeftColor',\r\n 'borderLeftStyle',\r\n 'borderRightColor',\r\n 'borderRightStyle',\r\n 'borderTopColor',\r\n 'borderTopStyle'\r\n ];\r\n const propNamesObject = [\r\n 'borderRadius',\r\n 'borderBottomWidth',\r\n 'borderLeftWidth',\r\n 'borderRightWidth',\r\n 'borderTopWidth'\r\n ]\r\n for (let key in blockConfig.config) {\r\n if (!blockConfig.config[key]) {\r\n continue;\r\n }\r\n switch (key) {\r\n case 'layout':\r\n const propNames = [\r\n 'height',\r\n 'paddingBottom',\r\n 'paddingLeft',\r\n 'paddingRight',\r\n 'paddingTop',\r\n 'marginBottom',\r\n 'marginLeft',\r\n 'marginRight',\r\n 'marginTop',\r\n 'width'\r\n ];\r\n for (let propName of propNames) {\r\n if (blockConfig.config[key][propName]) {\r\n blockConfig.config[key][propName].value = '';\r\n }\r\n }\r\n break;\r\n default:\r\n for (let propName of propNamesString) {\r\n if (blockConfig.config[key][propName]) {\r\n blockConfig.config[key][propName] = undefined;\r\n }\r\n }\r\n for (let propName of propNamesObject) {\r\n if (blockConfig.config[key][propName]) {\r\n blockConfig.config[key][propName].value = '';\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n },\r\n\r\n updateBlockDesign: (blockConfig, designKitConfig) => {\r\n if (!blockConfig || !blockConfig.config || !designKitConfig || !designKitConfig.config) {\r\n return;\r\n }\r\n const testString = '', index);\r\n if (end < 0) {\r\n continue;\r\n }\r\n index = end + 1;\r\n end = component.lastIndexOf('');\r\n if (end < 0) {\r\n continue;\r\n }\r\n const contentString = component.substring(index, end);\r\n design += `

${contentString}

`\r\n }\r\n if (design) {\r\n blockConfig.config[key].design = design;\r\n }\r\n }\r\n }\r\n },\r\n\r\n Page: {\r\n // _defaultPropNames: ['marginLeft', 'marginRight', 'maxWidth', 'paddingLeft', 'paddingRight'],\r\n currentValue: (_options) => {\r\n const options = _options || {};\r\n if (options.inLayout == true) {\r\n return;\r\n }\r\n const pageKit = Kit.kit(options.config, options.pageType);\r\n let propertyName = options.name;\r\n switch (propertyName) {\r\n case 'marginLeft':\r\n case 'marginRight':\r\n case 'paddingLeft':\r\n case 'paddingRight':\r\n if (options.blockConfig) {\r\n switch (options.blockConfig.type) {\r\n case Kit.Type.ArtistDetail:\r\n case Kit.Type.BlogPost:\r\n case Kit.Type.CustomPage:\r\n case Kit.Type.ExhibitionDetail:\r\n case Kit.Type.InventoryDetail:\r\n case PageType.Cart:\r\n case PageType.SearchResults:\r\n return;\r\n }\r\n }\r\n break;\r\n case 'marginBottom':\r\n case 'marginTop':\r\n case 'paddingBottom':\r\n case 'paddingTop':\r\n switch (options.pageType) {\r\n case Kit.Type.HeaderText1:\r\n case Kit.Type.HeaderText2:\r\n case Kit.Type.HeaderText3:\r\n break;\r\n default:\r\n if (options.blockConfig) {\r\n switch (options.blockConfig.type) {\r\n case Kit.Type.ArtistDetail:\r\n case Kit.Type.BlogPost:\r\n case Kit.Type.CustomPage:\r\n case Kit.Type.ExhibitionDetail:\r\n case Kit.Type.InventoryDetail:\r\n case PageType.Cart:\r\n case PageType.SearchResults:\r\n break;\r\n default:\r\n return;\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n if (!pageKit || pageKit[propertyName] == undefined) {\r\n return;\r\n }\r\n let value = pageKit[propertyName];\r\n if (value.unit) {\r\n if (value.value != undefined && value.value.length > 0) {\r\n value = `${value.value}${value.unit}`;\r\n } else {\r\n value = undefined;\r\n }\r\n }\r\n return value;\r\n },\r\n maxWidth: (config, pageType) => {\r\n const pageKit = Kit.kit(config, pageType);\r\n if (pageKit && pageKit.maxWidth && pageKit.maxWidth.value && pageKit.maxWidth.value.length > 0) {\r\n return `${pageKit.maxWidth.value}${pageKit.maxWidth.unit}`;\r\n }\r\n },\r\n updateComponentStyle: (style, config, pageType, propertyNames) => {\r\n const pageKit = Kit.kit(config, pageType);\r\n if (!style || !pageKit) {\r\n return style;\r\n }\r\n const _propertyNames = propertyNames || ['marginLeft', 'marginRight', 'paddingLeft', 'paddingRight'];\r\n _propertyNames.forEach((name) => {\r\n if (!style[name] && pageKit[name]) {\r\n if (pageKit[name].value == undefined) {\r\n style[name] = pageKit[name];\r\n } else if (pageKit[name].value && pageKit[name].value.length > 0) {\r\n style[name] = `${pageKit[name].value}${pageKit[name].unit}`;\r\n }\r\n }\r\n });\r\n return style;\r\n }\r\n },\r\n\r\n Context: {\r\n Button: {\r\n Custom: 'custom',\r\n Primary: 'primary',\r\n Secondary: 'secondary'\r\n },\r\n Cell: {\r\n Artist: {\r\n Grid: 'artist_grid'\r\n },\r\n Blog: 'blog',\r\n Exhibition: {\r\n Grid: 'show_grid',\r\n Parallax: 'show_parallax'\r\n },\r\n Inventory: {\r\n Grid: 'inventory_grid',\r\n Waterfall: 'inventory_waterfall'\r\n },\r\n RecentlyViewed: 'recently_viewed'\r\n },\r\n Global: {\r\n Header1: 'h1',\r\n Header2: 'h2',\r\n Header3: 'h3',\r\n Header4: 'h4',\r\n Header5: 'h5',\r\n Header6: 'h6',\r\n Paragraph: 'p'\r\n }\r\n },\r\n\r\n Type: {\r\n ArtistDetail: PageType.ArtistDetail,\r\n BlogPost: PageType.Content.Blog,\r\n Button: 'button',\r\n Cell: 'cell',\r\n CustomPage: PageType.Custom,\r\n ExhibitionDetail: PageType.ExhibitionDetail,\r\n Global: 'global',\r\n InventoryDetail: PageType.InventoryDetail,\r\n\r\n // DEPRECATED\r\n HeaderText1: 'headerText1',\r\n HeaderText2: 'headerText2',\r\n HeaderText3: 'headerText3'\r\n }\r\n}\r\nexport default Kit;", "const Utilities = {\r\n addMobileStyle: (id, styleString) => {\r\n const mobileStyleId = 'mobileStyle';\r\n let element = document.getElementById(mobileStyleId);\r\n let html;\r\n if (element) {\r\n html = element.innerHTML;\r\n }\r\n html = `${html || ''}${Utilities.createMobileStyle(id, styleString)}`;\r\n if (!element) {\r\n element = document.createElement('STYLE');\r\n element.id = mobileStyleId;\r\n document.head.appendChild(element);\r\n }\r\n element.innerHTML = html;\r\n },\r\n\r\n copyObject: (source, destination) => {\r\n if (!source || !destination) {\r\n return;\r\n }\r\n for (let id in source) {\r\n destination[id] = source[id];\r\n }\r\n },\r\n\r\n createMobileStyle: (id, styleString) => `@media(max-width: 768px){.tennies #${id}{${styleString}}}`,\r\n\r\n extractStyle: (value) => {\r\n let testString = ' {\r\n return (Math.random() * (new Date().getTime())).toString().replace('.', '_');\r\n },\r\n\r\n _injectStyleIntoString: (styleString, injectString, options) => {\r\n let testString = '= 0) {\r\n index += testString.length;\r\n let insertionString = injectString;\r\n if (options && options.prepend == true) {\r\n if (insertionString.charAt(insertionString.length - 1) != ';') {\r\n insertionString += ';'\r\n }\r\n return styleString.substring(0, index) + insertionString + styleString.substring(index);\r\n }\r\n const endIndex = styleString.indexOf('\"', index);\r\n if (endIndex >= 0) {\r\n if (options && options.replace == true) {\r\n return styleString.substring(0, index) + insertionString + styleString.substring(endIndex);\r\n }\r\n switch (styleString.charAt(endIndex - 1)) {\r\n case ';':\r\n case '\"':\r\n break;\r\n default:\r\n insertionString = `;${insertionString}`;\r\n break;\r\n }\r\n return styleString.substring(0, endIndex) + insertionString + styleString.substring(endIndex);\r\n }\r\n } else {\r\n testString = '= 0) {\r\n index += testString.length;\r\n return styleString.substring(0, index) + ` style=\"${injectString}\"` + styleString.substring(index);\r\n }\r\n }\r\n return styleString;\r\n },\r\n\r\n injectStyleIntoString: (styleString, injectString, options) => {\r\n const components = styleString.split(' {\r\n const temp = document.createElement('DIV');\r\n temp.innerHTML = html || '';\r\n return temp.innerText.trim().length == 0;\r\n },\r\n\r\n isValidURL: (document, string) => {\r\n if (!document || !string) {\r\n return false;\r\n }\r\n var a = document.createElement('a');\r\n a.href = string;\r\n return (a.host && a.host != window.location.host);\r\n },\r\n\r\n moveTokenStyle: (tokenString, style) => {\r\n let endIndex;\r\n let testString = 'style=\"';\r\n let index = tokenString.indexOf(testString);\r\n while (index >= 0) {\r\n index += testString.length;\r\n endIndex = tokenString.indexOf('\"', index);\r\n if (index < 0) {\r\n break;\r\n }\r\n Utilities.copyObject(Utilities.styleFromString(tokenString.substring(index, endIndex)), style);\r\n index = tokenString.indexOf(testString, endIndex);\r\n }\r\n\r\n let typeStyle = 'p';\r\n testString = 'data-heading=\"';\r\n index = tokenString.indexOf(testString);\r\n if (index >= 0) {\r\n index += testString.length;\r\n endIndex = tokenString.indexOf('\"', index);\r\n if (endIndex > 0) {\r\n typeStyle = tokenString.substring(index, endIndex);\r\n }\r\n }\r\n return typeStyle;\r\n },\r\n\r\n parseQueryString: (query) => {\r\n const pairs = query.split('&');\r\n const queryStringMap = {};\r\n for (var i = 0; i < pairs.length; i++) {\r\n const pair = pairs[i].split('=');\r\n // If first entry with this name\r\n if (typeof queryStringMap[pair[0]] === 'undefined') {\r\n queryStringMap[pair[0]] = decodeURIComponent(pair[1]);\r\n // If second entry with this name\r\n } else if (typeof queryStringMap[pair[0]] === 'string') {\r\n const arr = [queryStringMap[pair[0]], decodeURIComponent(pair[1])];\r\n queryStringMap[pair[0]] = arr;\r\n // If third or later entry with this name\r\n } else {\r\n queryStringMap[pair[0]].push(decodeURIComponent(pair[1]));\r\n }\r\n }\r\n return queryStringMap;\r\n },\r\n\r\n rgbaToHex: (rgba) => {\r\n if (!rgba) {\r\n return {};\r\n }\r\n let _rgba = rgba.replace('rgba(', '');\r\n let r, redValue, g, greenValue, b, blueValue, a;\r\n let index = _rgba.indexOf(',');\r\n if (index >= 0) {\r\n redValue = parseInt(_rgba.substring(0, index), 10);\r\n if (isNaN(redValue)) {\r\n r = '00';\r\n } else {\r\n r = redValue.toString(16);\r\n if (r.length == 1) {\r\n r = '0' + r;\r\n }\r\n }\r\n _rgba = _rgba.substring(index + 1);\r\n } else {\r\n return { hex: rgba };\r\n }\r\n index = _rgba.indexOf(',');\r\n if (index >= 0) {\r\n greenValue = parseInt(_rgba.substring(0, index), 10);\r\n if (isNaN(greenValue)) {\r\n g = '00';\r\n } else {\r\n g = greenValue.toString(16);\r\n if (g.length == 1) {\r\n g = '0' + g;\r\n }\r\n }\r\n _rgba = _rgba.substring(index + 1);\r\n }\r\n index = _rgba.indexOf(',');\r\n if (index >= 0) {\r\n blueValue = parseInt(_rgba.substring(0, index), 10);\r\n if (isNaN(blueValue)) {\r\n b = '00';\r\n } else {\r\n b = blueValue.toString(16);\r\n if (b.length == 1) {\r\n b = '0' + b;\r\n }\r\n }\r\n _rgba = _rgba.substring(index + 1);\r\n }\r\n index = _rgba.indexOf(')');\r\n if (index >= 0) {\r\n a = parseFloat(_rgba.substring(0, index));\r\n }\r\n if (isNaN(a)) {\r\n a = 1;\r\n }\r\n return { hex: `${r}${g}${b}`, alpha: a, r: redValue, g: greenValue, b: blueValue };\r\n },\r\n\r\n styleFromString: (styleString) => {\r\n const style = {};\r\n if (styleString) {\r\n styleString.split(';').forEach((d) => {\r\n const pair = d.split(':');\r\n if (pair.length < 2 || pair[1] == undefined) {\r\n return;\r\n }\r\n const value = pair[1].toString().trim();\r\n if (!value) {\r\n return;\r\n }\r\n let key = pair[0].toString().trim();\r\n let index = key.indexOf('-');\r\n if (index > 0) {\r\n key = key.substring(0, index) + key.substring(index + 1, index + 2).toUpperCase() + key.substring(index + 2);\r\n }\r\n style[key] = value;\r\n })\r\n }\r\n return style;\r\n },\r\n\r\n uuidv4: () => {\r\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>\r\n (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\r\n );\r\n }\r\n}\r\n\r\nexport default Utilities;", "import React from 'react';\r\n\r\nimport Kit from '../layout/Kit.jsx';\r\nimport Utilities from './Utilities.jsx';\r\n\r\nconst Token = {\r\n AlternateDimensions: 'ALTERNATE_DIMENSIONS',\r\n AlternatePrices: 'ALTERNATE_PRICES',\r\n ArtistCV: 'ARTIST_CV',\r\n ArtistBiography: 'ARTIST_BIOGRAPHY',\r\n ArtistLifespan: 'ARTIST_LIFESPAN',\r\n ArtistName: 'ARTIST_NAME',\r\n BlogPostLink: 'BLOG_POST_LINK',\r\n ButtonText: Kit.Button.token,\r\n CompanyName: 'COMPANY_NAME',\r\n ContactPageLink: 'CONTACT_PAGE_LINK',\r\n Count: 'COUNT',\r\n Date: 'DATE',\r\n Description: 'DESCRIPTION',\r\n Dimensions: 'DIMENSIONS',\r\n Discount: 'DISCOUNT',\r\n Edition: 'EDITION',\r\n EditionCount: 'EDITION_COUNT',\r\n ErrorMessage: 'ERROR_MESSAGE',\r\n Excerpt: 'EXCERPT',\r\n Framed: 'FRAMED',\r\n Framing: 'FRAMING',\r\n Group: 'GROUP',\r\n HeaderText: 'HEADER_TEXT',\r\n Hours: 'HOURS',\r\n InputText: 'INPUT_TEXT',\r\n InventoryNumber: 'INVENTORY_NUMBER',\r\n ItemTitle: 'ITEM_TITLE',\r\n Location: 'LOCATION',\r\n Medium: 'MEDIUM',\r\n Notes: 'NOTES',\r\n OpeningReception: 'OPENING_RECEPTION',\r\n ParagraphText: 'PARAGRAPH_TEXT',\r\n Phone: 'PHONE',\r\n PromoCode: 'PROMO_CODE',\r\n Price: 'PRICE',\r\n Published: 'PUBLISHED',\r\n SearchTerm: 'SEARCH_TERM',\r\n SKU: 'SKU',\r\n Sold: 'SOLD',\r\n StatusIndicator: 'STATUS_INDICATOR',\r\n TabTitle: 'TAB_TITLE',\r\n Title: 'TITLE',\r\n Unframed: 'UNFRAMED',\r\n\r\n Address: {\r\n City: 'CITY',\r\n Country: 'COUNTRY',\r\n Line1: 'ADDRESS_LINE1',\r\n Line2: 'ADDRESS_LINE2',\r\n State: 'STATE',\r\n Zip: 'ZIP'\r\n },\r\n\r\n Cart: {\r\n EstimatedShipping: 'ESTIMATED_SHIPPING',\r\n EstimatedTax: 'ESTIMATED_TAX',\r\n Subtotal: 'SUBTOTAL'\r\n },\r\n\r\n ExchangeCurrency: {\r\n Rate: [\r\n 'AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AWG', 'AZN',\r\n 'BAM', 'BBD', 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BOV',\r\n 'BRL', 'BSD', 'BTN', 'BWP', 'BYN', 'BZD', 'CAD', 'CDF', 'CHE', 'CHF',\r\n 'CHW', 'CLF', 'CLP', 'CNY', 'COP', 'COU', 'CRC', 'CUP', 'CVE', 'CZK',\r\n 'DJF', 'DKK', 'DOP', 'DZD', 'EGP', 'ERN', 'ETB', 'EUR', 'FJD', 'FKP',\r\n 'GBP', 'GEL', 'GHS', 'GIP', 'GMD', 'GNF', 'GTQ', 'GYD', 'HKD', 'HNL',\r\n 'HTG', 'HUF', 'IDR', 'ILS', 'INR', 'IQD', 'IRR', 'ISK', 'JMD', 'JOD',\r\n 'JPY', 'KES', 'KGS', 'KHR', 'KMF', 'KPW', 'KRW', 'KWD', 'KYD', 'KZT',\r\n 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LYD', 'MAD', 'MDL', 'MGA', 'MKD',\r\n 'MMK', 'MNT', 'MOP', 'MRU', 'MUR', 'MVR', 'MWK', 'MXN', 'MXV', 'MYR',\r\n 'MZN', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NZD', 'OMR', 'PAB', 'PEN',\r\n 'PGK', 'PHP', 'PKR', 'PLN', 'PYG', 'QAR', 'RON', 'RSD', 'RUB', 'RWF',\r\n 'SAR', 'SBD', 'SCR', 'SDG', 'SEK', 'SGD', 'SHP', 'SLE', 'SOS', 'SRD',\r\n 'SSP', 'STN', 'SVC', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TOP',\r\n 'TRY', 'TTD', 'TWD', 'TZS', 'UAH', 'UGX', 'USD', 'USN', 'UYI', 'UYU',\r\n 'UYW', 'UZS', 'VED', 'VES', 'VND', 'VUV', 'WST', 'XAF', 'XAG', 'XAU',\r\n 'XBA', 'XBB', 'XBC', 'XBD', 'XCD', 'XDR', 'XOF', 'XPD', 'XPF', 'XPT',\r\n 'XSU', 'XTS', 'XUA', 'XXX', 'YER', 'ZAR', 'ZMW', 'ZWG'\r\n ],\r\n\r\n value: (type) => Token.ExchangeCurrency.Rate.indexOf(type)\r\n },\r\n\r\n parsing: {\r\n artist: (data, keyword, options) => {\r\n let artist = data || {};\r\n if (artist.artist) {\r\n artist = artist.artist;\r\n }\r\n let replaceString = '';\r\n switch (keyword) {\r\n case Token.Address.Country:\r\n if (artist.address && artist.address.country && artist.address.country.length > 0) {\r\n replaceString = Token.getReplacementString(artist.address.country, options);\r\n }\r\n break;\r\n case Token.Address.State:\r\n if (artist.address && artist.address.state && artist.address.state.length > 0) {\r\n replaceString = Token.getReplacementString(artist.address.state, options);\r\n }\r\n break;\r\n case Token.ArtistBiography:\r\n if (artist.bio && artist.bio.length > 0) {\r\n replaceString = artist.bio;\r\n } else if (artist.description && artist.description.length > 0) {\r\n replaceString = artist.description;\r\n }\r\n if (replaceString) {\r\n if (replaceString.startsWith('');\r\n }\r\n replaceString = Token.getReplacementString(replaceString, options);\r\n }\r\n break;\r\n case Token.ArtistCV:\r\n if (artist.curriculumVitae && artist.curriculumVitae.length > 0) {\r\n replaceString = artist.curriculumVitae;\r\n }\r\n if (replaceString.length > 0) {\r\n if (replaceString.startsWith('');\r\n }\r\n replaceString = Token.getReplacementString(replaceString, options);\r\n }\r\n break;\r\n case Token.ArtistLifespan:\r\n if (artist.lifespan && artist.lifespan.length > 0) {\r\n replaceString = Token.getReplacementString(artist.lifespan, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.ArtistName:\r\n if (artist.name && artist.name.length > 0) {\r\n replaceString = Token.getReplacementString(artist.name, options);\r\n\r\n let className = 'notranslate';\r\n if (data.wrapContent != false) {\r\n className = `${data.contentClassNames && data.contentClassNames[keyword] || 'artwork__artist'} ${className}`;\r\n }\r\n replaceString = `${replaceString}`;\r\n }\r\n break;\r\n default:\r\n replaceString = undefined;\r\n break;\r\n }\r\n return replaceString;\r\n },\r\n\r\n blogContent: (data, keyword, options) => {\r\n const blog = data.blogContent || {};\r\n\r\n let replaceString = '';\r\n switch (keyword) {\r\n case Token.BlogPostLink:\r\n if (options && options.display && options.display.length > 0 && data.link) {\r\n replaceString = `${options.display}`;\r\n }\r\n break;\r\n case Token.Excerpt:\r\n if (blog.excerpt && blog.excerpt.length > 0) {\r\n replaceString = Token.getReplacementString(blog.excerpt, options);\r\n }\r\n break;\r\n case Token.Published:\r\n if (blog.publishedAt && blog.publishedAt.length > 0) {\r\n replaceString = Token.getReplacementString(blog.publishedAt, options);\r\n } else {\r\n const date = new Date();\r\n replaceString = `${date.getUTCMonth() + 1}/${date.getUTCDate()}/${date.getUTCFullYear()}`;\r\n }\r\n break;\r\n case Token.Title:\r\n if (blog.title && blog.title.length > 0) {\r\n replaceString = Token.getReplacementString(blog.title, options);\r\n if (data.link) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n default:\r\n replaceString = undefined;\r\n break;\r\n }\r\n return replaceString;\r\n },\r\n\r\n inventory: (data, keyword, options) => {\r\n const edition = data.edition || {};\r\n const inventory = data.inventory || {};\r\n\r\n let replaceString = '';\r\n const temp = Token.ExchangeCurrency.value(keyword);\r\n if (temp >= 0) {\r\n if (edition.prices) {\r\n for (let i = 0; i < edition.prices.length; i++) {\r\n if (edition.prices[i].currency != temp) {\r\n continue;\r\n }\r\n const value = edition.prices[i].value;\r\n if (value && value.length > 0) {\r\n replaceString = Token.getReplacementString(value, options);\r\n }\r\n break;\r\n }\r\n }\r\n return replaceString;\r\n }\r\n switch (keyword) {\r\n case Token.AlternateDimensions:\r\n if (edition.alternateDimensions && edition.alternateDimensions.length > 0) {\r\n replaceString = Token.getReplacementString(edition.alternateDimensions, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.ArtistLifespan:\r\n if (inventory.artist && inventory.artist.lifespan && inventory.artist.lifespan.length > 0) {\r\n replaceString = Token.getReplacementString(inventory.artist.lifespan, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.ArtistName:\r\n if (inventory.artist && inventory.artist.name && inventory.artist.name.length > 0) {\r\n replaceString = Token.getReplacementString(inventory.artist.name, options);\r\n\r\n let className = 'notranslate';\r\n if (data.wrapContent != false) {\r\n className = `artwork__artist ${className}`;\r\n }\r\n replaceString = `${replaceString}`;\r\n }\r\n break;\r\n case Token.Date:\r\n if (inventory.date && inventory.date.length > 0) {\r\n replaceString = Token.getReplacementString(inventory.date, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.Dimensions:\r\n if (edition.dimensions && edition.dimensions.display && edition.dimensions.display.formatted && edition.dimensions.display.formatted.length > 0) {\r\n replaceString = Token.getReplacementString(edition.dimensions.display.formatted, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.Edition:\r\n if (edition.edition && edition.edition.length > 0) {\r\n replaceString = Token.getReplacementString(edition.edition, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.Framed:\r\n if (edition.isFramed && options && options.display && options.display.length > 0) {\r\n replaceString = options.display;\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.Framing:\r\n if (edition.framing && edition.framing.length > 0) {\r\n replaceString = Token.getReplacementString(edition.framing, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.InventoryNumber:\r\n if (inventory.number != null && (inventory.number + '').length > 0) {\r\n replaceString = Token.getReplacementString(inventory.number, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.Location:\r\n if (inventory.location && inventory.location.length > 0) {\r\n replaceString = Token.getReplacementString(inventory.location, options);\r\n }\r\n break;\r\n case Token.Medium:\r\n if (inventory.medium && inventory.medium.length > 0) {\r\n replaceString = Token.getReplacementString(inventory.medium, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.Notes:\r\n if (inventory.notes && inventory.notes.length > 0) {\r\n replaceString = Token.getReplacementString(Token.cleanTokenValueForReplacement(inventory.notes), options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.Price:\r\n if (edition.price && edition.price.length > 0) {\r\n if (options && options.showIfSold == 'false' && edition.isSold) {\r\n break;\r\n }\r\n replaceString = Token.getReplacementString(edition.price, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.SKU:\r\n if (inventory.sku && inventory.sku.length > 0) {\r\n replaceString = Token.getReplacementString(inventory.sku, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.Sold:\r\n if (edition.isSold && options && options.display && options.display.length > 0) {\r\n replaceString = options.display;\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.StatusIndicator: {\r\n let className, colorKey;\r\n if (edition.isSold) {\r\n className = 'artwork__sold-sticker';\r\n colorKey = 'colorSold';\r\n } else if (!edition.active) {\r\n className = 'artwork__inactive-sticker';\r\n colorKey = 'colorInactive';\r\n }\r\n if (colorKey) {\r\n const style = [];\r\n if (options) {\r\n if (options[colorKey]) {\r\n style.push(`background-color:${options[colorKey]}`);\r\n }\r\n if (options.size) {\r\n style.push(`height:${options.size}`);\r\n style.push(`width:${options.size}`);\r\n }\r\n }\r\n replaceString = ``;\r\n }\r\n break;\r\n }\r\n case Token.Title:\r\n if (inventory.title && inventory.title.length > 0) {\r\n replaceString = Token.getReplacementString(inventory.title, options);\r\n\r\n let className = 'notranslate';\r\n if (data.wrapContent != false) {\r\n className = `artwork__title ${className}`;\r\n }\r\n replaceString = `${replaceString}`;\r\n }\r\n break;\r\n case Token.Unframed:\r\n if (!edition.isFramed && options && options.display && options.display.length > 0) {\r\n replaceString = options.display;\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n default:\r\n replaceString = undefined;\r\n break;\r\n }\r\n return replaceString;\r\n },\r\n\r\n pages: (data, keyword, options) => {\r\n let page = data || {};\r\n if (page.pages) {\r\n page = page.pages;\r\n }\r\n let replaceString = '';\r\n switch (keyword) {\r\n case Token.Title:\r\n if (page.title && page.title.length > 0) {\r\n replaceString = Token.getReplacementString(page.title, options);\r\n }\r\n break;\r\n default:\r\n replaceString = undefined;\r\n break;\r\n }\r\n return replaceString;\r\n },\r\n\r\n show: (data, keyword, options) => {\r\n const show = data.show || {};\r\n\r\n let replaceString = '';\r\n switch (keyword) {\r\n case Token.Date:\r\n if (show.date && show.date.length > 0) {\r\n replaceString = Token.getReplacementString(show.date, options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.Description:\r\n if (show.about && show.about.length > 0) {\r\n replaceString = Token.getReplacementString(Token.cleanTokenValueForReplacement(show.about), options);\r\n if (data.wrapContent != false) {\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n case Token.OpeningReception:\r\n if (show.openingReception && show.openingReception.length > 0) {\r\n replaceString = Token.getReplacementString(Token.cleanTokenValueForReplacement(show.openingReception), options);\r\n }\r\n break;\r\n case Token.Title:\r\n if (show.title && show.title.length > 0) {\r\n replaceString = Token.getReplacementString(show.title, options);\r\n if (data.wrapContent != false) {\r\n let className = 'notranslate';\r\n if (data.wrapContent != false) {\r\n className = `${data.contentClassNames && data.contentClassNames[keyword] || 'show__card__title'} ${className}`;\r\n }\r\n replaceString = `${replaceString}`;\r\n }\r\n }\r\n break;\r\n default:\r\n replaceString = undefined;\r\n break;\r\n }\r\n return replaceString;\r\n }\r\n },\r\n\r\n cleanTokenValueForReplacement: (tokenValue) => {\r\n let cleanToken = tokenValue\r\n .replaceAll('\\n', '')\r\n .replaceAll('
', '');\r\n const headingTypes = [\r\n Kit.Context.Global.Paragraph,\r\n Kit.Context.Global.Header1,\r\n Kit.Context.Global.Header2,\r\n Kit.Context.Global.Header3,\r\n Kit.Context.Global.Header4,\r\n Kit.Context.Global.Header5,\r\n Kit.Context.Global.Header6\r\n ];\r\n headingTypes.forEach((d) => {\r\n cleanToken = cleanToken\r\n .replaceAll(`<${d} style=\"`, '`, '')\r\n });\r\n return cleanToken;\r\n },\r\n\r\n convertTokenContainers: (design, conversionMap) => {\r\n if (!conversionMap || !design || design.indexOf('');\r\n let _design = '';\r\n\r\n const searchString = 'token=\"';\r\n let endIndex, startIndex, tag, token;\r\n lines.forEach((d) => {\r\n startIndex = d.indexOf(searchString);\r\n while (startIndex >= 0) {\r\n startIndex += searchString.length;\r\n endIndex = d.indexOf('\"', startIndex);\r\n if (endIndex < 0) {\r\n // Something went wrong\r\n break;\r\n } else {\r\n token = d.substring(startIndex, endIndex);\r\n tag = conversionMap[token];\r\n if (tag) {\r\n // Found conversion for token => Convert entire line and stop processing\r\n _design += `${d.replace('`\r\n return;\r\n }\r\n }\r\n // Find next token\r\n startIndex = d.indexOf(searchString, endIndex);\r\n }\r\n if (d) {\r\n // No conversion found => Leave line as is\r\n _design += `${d}

`;\r\n }\r\n });\r\n return _design;\r\n },\r\n\r\n getReplacementString: (value, options) => {\r\n let replaceString = '';\r\n if (value && value.toString().length > 0) {\r\n if (options && options.before) {\r\n replaceString += options.before;\r\n }\r\n replaceString += value;\r\n if (options && options.after) {\r\n replaceString += options.after;\r\n }\r\n }\r\n return replaceString;\r\n },\r\n\r\n parseTokenizedString: function (tokenizedString, handler) {\r\n let parsedResultString = tokenizedString;\r\n let char, options;\r\n let indexStart = parsedResultString.indexOf('{');\r\n let indexEnd = indexStart;\r\n let keyword = '';\r\n let parsingList = false;\r\n let parsingOptions = false;\r\n let parsingString = false;\r\n while (indexStart >= 0 && indexEnd < parsedResultString.length - 1) {\r\n indexEnd += 1;\r\n char = parsedResultString.charAt(indexEnd);\r\n switch (char) {\r\n case '(':\r\n if (parsingList || parsingOptions || parsingString) {\r\n options += char;\r\n break;\r\n }\r\n // Start options\r\n options = '';\r\n parsingOptions = true;\r\n break;\r\n case ')':\r\n if (parsingList || parsingString) {\r\n options += char;\r\n break;\r\n }\r\n // End options\r\n parsingOptions = false;\r\n break;\r\n case '[':\r\n if (parsingOptions) {\r\n parsingList = true;\r\n\r\n // List components are converted to strings (wrapped in quotes) since they will be parsed separately\r\n options += char;\r\n }\r\n break;\r\n case '\"':\r\n if (parsingList || parsingOptions) {\r\n options += '\"';\r\n parsingString = !parsingString;\r\n }\r\n break;\r\n case ']':\r\n if (parsingOptions) {\r\n // List components are converted to strings (wrapped in quotes) since they will be parsed separately\r\n options += char;\r\n }\r\n parsingList = false;\r\n break;\r\n case '}':\r\n if (parsingOptions) {\r\n options += char;\r\n break;\r\n }\r\n // End keyword\r\n let parsedProps;\r\n if (options) {\r\n try { parsedProps = JSON.parse(`{${options}}`); } catch (e) { }\r\n }\r\n let replaceString;\r\n switch (keyword) {\r\n case Token.AlternatePrices:\r\n case Token.Group:\r\n if (!parsedProps) {\r\n break;\r\n }\r\n let parsedComponents = [];\r\n if (parsedProps.components && parsedProps.components.length > 0) {\r\n // Get replacement strings for each component in the group\r\n parsedProps.components.forEach((d) => {\r\n if (!d) {\r\n return;\r\n }\r\n const string = d.replaceAll('\"', '\\\\\\\"').replaceAll(\"*'\", '\"').trim();\r\n const parsedComponent = Token.parseTokenizedString(string, handler);\r\n if (parsedComponent === \"\") {\r\n return;\r\n }\r\n if (parsedComponent != undefined) {\r\n parsedComponents.push(parsedComponent);\r\n } else {\r\n parsedComponents.push(d);\r\n }\r\n })\r\n }\r\n replaceString = Token.getReplacementString(parsedComponents.join(parsedProps.separator ? parsedProps.separator : ''), parsedProps);\r\n break;\r\n default:\r\n if (handler) {\r\n // Get the replacement string for the token keyword and props\r\n replaceString = handler(keyword, parsedProps);\r\n }\r\n }\r\n if (replaceString != undefined) {\r\n // Replace the token with the replacement string\r\n parsedResultString = parsedResultString.substring(0, indexStart) + replaceString + parsedResultString.substring(indexEnd + 1);\r\n\r\n // Update end index to point to the end of the replacement string so parts of the string aren't skipped or processed twice\r\n indexEnd = indexStart + replaceString.length;\r\n }\r\n keyword = '';\r\n options = undefined;\r\n\r\n // Find start of next keyword (if present)\r\n indexStart = parsedResultString.indexOf('{', indexEnd);\r\n indexEnd = indexStart;\r\n break;\r\n default:\r\n if (parsingOptions) {\r\n options += char;\r\n } else {\r\n keyword += char;\r\n }\r\n break;\r\n }\r\n }\r\n return parsedResultString;\r\n },\r\n\r\n // TOKEN CONFIG\r\n\r\n getAlternatePricesTokenConfig: () => {\r\n return {\r\n display: 'Alternate Prices',\r\n options: Token.ExchangeCurrency.Rate.map(d => Token.getAlternatePriceTokenConfig(d)),\r\n token: Token.AlternatePrices\r\n }\r\n },\r\n\r\n getAlternatePriceTokenConfig: (value) => {\r\n return { ...Token.getWrappedTokenConfig(value, value), includeInTokenMap: true, name: value }\r\n },\r\n\r\n getPriceTokenConfig: () => {\r\n const priceToken = Token.getWrappedTokenConfig('Price', Token.Price);\r\n priceToken.options.splice(0, 0, { defaultValue: 'true', label: 'Show if sold?', name: 'showIfSold', type: 'toggle', value: 'true' });\r\n return priceToken;\r\n },\r\n\r\n getStatusIndicatorTokenConfig: (token) => {\r\n return {\r\n display: 'Status Indicator',\r\n isObject: true,\r\n options: [\r\n { display: 'Sold Color', name: 'colorSold', type: 'color' },\r\n { display: 'Inactive Color', name: 'colorInactive', type: 'color' },\r\n { display: 'Size', name: 'size', type: 'measurement' }\r\n ],\r\n token\r\n }\r\n },\r\n\r\n getWrappedTokenConfig: (display, token) =>{\r\n return {\r\n display,\r\n format: (data) => { return `${data.before || ''}{${data.token}}${data.after || ''}` },\r\n options: [\r\n { display: 'Prefix Label', name: 'before' },\r\n { display: 'Suffix Label', name: 'after' }\r\n ],\r\n token\r\n };\r\n },\r\n\r\n // HOC\r\n\r\n withContentTokenParsing: (WrappedComponent, { allowEmptyContent, contentTokenSourceHandler, extraParseConditionHandler, headerConversionMap }, tokenHandler) => {\r\n return function (props) {\r\n const [id, setId] = React.useState(undefined);\r\n React.useEffect(() => { setId(Utilities.generateUniqueId()) }, []);\r\n \r\n const parseContent = function (props, tokenizedString) {\r\n if (!tokenizedString || !id) {\r\n return '';\r\n }\r\n let design = Token.convertTokenContainers(tokenizedString, headerConversionMap);\r\n design = Token.parseTokenizedString(design, (keyword, options) => tokenHandler ? tokenHandler(props, keyword, options) : '');\r\n if (Utilities.isHTMLContentEmpty(design)) {\r\n return '';\r\n }\r\n return design;\r\n }\r\n const [content, setContent] = React.useState(undefined);\r\n const updateContent = (props, tokenizedString) => {\r\n if (!id) {\r\n return;\r\n }\r\n setContent(parseContent(props, tokenizedString))\r\n }\r\n const parseConditions = [id, props.blockConfig.block.design];\r\n if (extraParseConditionHandler) {\r\n parseConditions.push(...extraParseConditionHandler(props));\r\n }\r\n React.useEffect(() => updateContent(props, contentTokenSourceHandler ? contentTokenSourceHandler(props) : props.blockConfig.block.design), parseConditions);\r\n \r\n if (allowEmptyContent != true && !props.builder && content != undefined && content.length == 0) {\r\n return null;\r\n }\r\n return {props.children}\r\n }\r\n }\r\n};\r\nexport default Token;", "import React from 'react';\r\n\r\nimport { Wrapper } from './Block.jsx';\r\nimport Name from '../utility/Name.jsx';\r\nimport Token from '../utility/Token.jsx';\r\nimport TypeConfig from '../utility/TypeConfig.jsx';\r\nimport Utilities from '../utility/Utilities.jsx';\r\n\r\nimport { default as ClickToken } from '../../../../../artcloud.click/source/scripts/common/Token.jsx';\r\n\r\nfunction BaseTextComponent(props) {\r\n if (!props.builder && props.content != undefined && props.content.length == 0) {\r\n return null;\r\n }\r\n let innerStyle, wrapperStyle;\r\n const contentContainerStyle = { borderCollapse: 'separate', maxWidth: '100%', minWidth: '100%' }\r\n const contentStyle = { fontFamily: TypeConfig.defaultFontFamily };\r\n if (props.blockConfig) {\r\n if (props.blockConfig.block) {\r\n Utilities.mapStyleConfigProps(contentContainerStyle, props.blockConfig.block, (propName, propValue) => {\r\n switch (propName) {\r\n case 'backgroundColor':\r\n wrapperStyle = { backgroundColor: propValue };\r\n return true;\r\n case 'contentColor':\r\n contentContainerStyle.backgroundColor = propValue;\r\n return true;\r\n case 'design':\r\n return true;\r\n }\r\n });\r\n }\r\n if (props.blockConfig.layout) {\r\n Utilities.mapStyleConfigProps(contentStyle, props.blockConfig.layout, (propName, propValue, propUnit) => {\r\n switch (propName) {\r\n case 'marginBottom':\r\n case 'marginLeft':\r\n case 'marginRight':\r\n case 'marginTop':\r\n if (propValue && propUnit) {\r\n if (!innerStyle) {\r\n innerStyle = {};\r\n }\r\n innerStyle[propName.replace('margin', 'padding')] = `${propValue}${propUnit}`;\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\nconst BaseTextTypeConfig = {\r\n panel: {\r\n block: function ({ backgroundColor, design }) {\r\n const group = 'block';\r\n return {\r\n group,\r\n label: 'Content',\r\n options: [\r\n {\r\n display: 'Design Your Content',\r\n group,\r\n includeGroupOption: false,\r\n name: 'design',\r\n type: 'rich-text-campaign',\r\n value: design\r\n },\r\n {\r\n display: 'Background Color',\r\n group,\r\n name: 'backgroundColor',\r\n type: 'color',\r\n value: backgroundColor\r\n },\r\n {\r\n display: 'Content Background Color',\r\n group,\r\n name: 'contentColor',\r\n type: 'color'\r\n },\r\n {\r\n display: 'Border Radius',\r\n group,\r\n name: 'borderRadius',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement'\r\n },\r\n {\r\n display: 'Border',\r\n group,\r\n name: 'border',\r\n options: TypeConfig.options.measurement(),\r\n type: 'border'\r\n }\r\n ]\r\n }\r\n },\r\n layout: function () {\r\n const group = 'layout';\r\n return {\r\n group,\r\n label: 'Layout',\r\n options: [\r\n {\r\n display: 'Padding/Margin',\r\n group,\r\n max: '100',\r\n name: 'paddingMargin',\r\n options: TypeConfig.options.measurement(),\r\n type: 'paddingMargin',\r\n value: {\r\n paddingBottom: { value: '18', unit: 'px' },\r\n paddingLeft: { value: '18', unit: 'px' },\r\n paddingRight: { value: '18', unit: 'px' },\r\n paddingTop: { value: '18', unit: 'px' }\r\n }\r\n }\r\n ]\r\n };\r\n }\r\n }\r\n};\r\nconst BaseText = { Component: BaseTextComponent, TypeConfig: BaseTextTypeConfig };\r\n\r\n// region HEADER TEXT\r\n\r\nconst HeaderTextTypeConfig = {\r\n defaultDesign: () => `

Header

`,\r\n panel: {\r\n block: () => BaseTextTypeConfig.panel.block({ design: HeaderTextTypeConfig.defaultDesign() }),\r\n layout: BaseTextTypeConfig.panel.layout\r\n }\r\n}\r\nconst HeaderTextBlockTypeDefinition = (group) => {\r\n return {\r\n id: Name.Block.HeaderText,\r\n config: {\r\n block: HeaderTextTypeConfig.panel.block(),\r\n layout: HeaderTextTypeConfig.panel.layout()\r\n },\r\n display: 'Header',\r\n group,\r\n image: 'heading.png'\r\n };\r\n}\r\nconst HeaderText = { BlockTypeDefinition: HeaderTextBlockTypeDefinition, Component: TokenizedTextComponent, TypeConfig: HeaderTextTypeConfig };\r\n\r\n// TOKENIZED TEXT\r\n\r\nfunction TokenizedTextComponent(props) {\r\n const parseContent = (tokenizedString) => {\r\n if (!tokenizedString) {\r\n return '';\r\n }\r\n return ClickToken.parseTokenizedString(tokenizedString, (keyword) => {\r\n let replaceString = '';\r\n switch (keyword) {\r\n case Token.Company:\r\n case Token.FirstName:\r\n case Token.LastName:\r\n case Token.Prefix:\r\n case Token.SpouseFirstName:\r\n case Token.SpouseLastName:\r\n case Token.SpousePrefix:\r\n replaceString = `*|${keyword}|*`\r\n break;\r\n }\r\n return replaceString;\r\n });\r\n }\r\n const design = props.blockConfig && props.blockConfig.block && props.blockConfig.block.design;\r\n const [content, setContent] = React.useState(undefined);\r\n React.useEffect(() => {\r\n setContent(parseContent(props.blockConfig.block.design));\r\n }, [design]);\r\n return \r\n}\r\nconst TokenizedTextTokens = () => {\r\n return [\r\n Token.getDefaultTokenConfig('Prefix', Token.Prefix),\r\n Token.getDefaultTokenConfig('First Name', Token.FirstName),\r\n Token.getDefaultTokenConfig('Last Name', Token.LastName),\r\n Token.getDefaultTokenConfig('Spouse Prefix', Token.SpousePrefix),\r\n Token.getDefaultTokenConfig('Spouse First Name', Token.SpouseFirstName),\r\n Token.getDefaultTokenConfig('Spouse Last Name', Token.SpouseLastName),\r\n Token.getDefaultTokenConfig('Company', Token.Company)\r\n ];\r\n}\r\nconst TokenizedTextTypeConfig = {\r\n defaultDesign: () => `

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

`,\r\n panel: {\r\n block: () => BaseTextTypeConfig.panel.block({ design: TokenizedTextTypeConfig.defaultDesign() }),\r\n layout: BaseTextTypeConfig.panel.layout\r\n }\r\n}\r\nconst TokenizedTextBlockTypeDefinition = (group) => {\r\n return {\r\n id: Name.Block.Text,\r\n config: {\r\n block: TokenizedTextTypeConfig.panel.block(),\r\n layout: TokenizedTextTypeConfig.panel.layout()\r\n },\r\n display: 'Text',\r\n group,\r\n image: 'text.png'\r\n };\r\n}\r\nconst TokenizedText = { BlockTypeDefinition: TokenizedTextBlockTypeDefinition, Component: TokenizedTextComponent, Tokens: TokenizedTextTokens, TypeConfig: TokenizedTextTypeConfig };\r\n\r\nexport { BaseText, HeaderText, TokenizedText };", "import React from 'react';\r\n\r\nimport Name from '../utility/Name.jsx';\r\nimport { BaseText } from './Text.jsx';\r\nimport Token from '../utility/Token.jsx';\r\nimport TypeConfig from '../utility/TypeConfig.jsx';\r\n\r\nimport { default as ClickToken } from '../../../../../artcloud.click/source/scripts/common/Token.jsx';\r\n\r\nfunction FooterComponent(props) {\r\n const parseContent = (tokenizedString) => {\r\n if (!tokenizedString) {\r\n return '';\r\n }\r\n return ClickToken.parseTokenizedString(tokenizedString, (keyword) => {\r\n let replaceString = '';\r\n switch (keyword) {\r\n case Token.Footer.CurrentYear:\r\n case Token.Footer.ListAddressHtml:\r\n case Token.Footer.ListCompany:\r\n replaceString = `*|${keyword}|*`\r\n break;\r\n }\r\n return replaceString;\r\n });\r\n }\r\n const design = props.blockConfig && props.blockConfig.block && props.blockConfig.block.design;\r\n const [content, setContent] = React.useState(undefined);\r\n React.useEffect(() => {\r\n setContent(parseContent(props.blockConfig.block.design));\r\n }, [design]);\r\n\r\n let linkTextDecoration = 'none';\r\n let textDecoration = 'none';\r\n let unsubscribeContainerStyle = '';\r\n let unsubscribeLinkStyle = '';\r\n if (props.blockConfig && props.blockConfig.unsubscribe) {\r\n for (let propName in props.blockConfig.unsubscribe) {\r\n const prop = props.blockConfig.unsubscribe[propName];\r\n let propValue = prop;\r\n if (propValue == undefined) {\r\n continue;\r\n }\r\n if (propValue.unit) {\r\n propValue = `${prop.value.trim()}${prop.unit}`;\r\n } else if (propValue != true && propValue != false) {\r\n propValue = propValue.trim();\r\n }\r\n if (propValue === '') {\r\n continue;\r\n }\r\n switch (propName) {\r\n case 'borderBottomColor':\r\n unsubscribeContainerStyle += `border-bottom-color:${propValue};`\r\n break;\r\n case 'borderBottomStyle':\r\n unsubscribeContainerStyle += `border-bottom-style:${propValue};`\r\n break;\r\n case 'borderBottomWidth':\r\n unsubscribeContainerStyle += `border-bottom-width:${propValue};`\r\n break;\r\n case 'borderLeftColor':\r\n unsubscribeContainerStyle += `border-left-color:${propValue};`\r\n break;\r\n case 'borderLeftStyle':\r\n unsubscribeContainerStyle += `border-left-style:${propValue};`\r\n break;\r\n case 'borderLeftWidth':\r\n unsubscribeContainerStyle += `border-left-width:${propValue};`\r\n break;\r\n case 'borderRightColor':\r\n unsubscribeContainerStyle += `border-right-color:${propValue};`\r\n break;\r\n case 'borderRightStyle':\r\n unsubscribeContainerStyle += `border-right-style:${propValue};`\r\n break;\r\n case 'borderRightWidth':\r\n unsubscribeContainerStyle += `border-right-width:${propValue};`\r\n break;\r\n case 'borderTopColor':\r\n unsubscribeContainerStyle += `border-top-color:${propValue};`\r\n break;\r\n case 'borderTopStyle':\r\n unsubscribeContainerStyle += `border-top-style:${propValue};`\r\n break;\r\n case 'borderTopWidth':\r\n unsubscribeContainerStyle += `border-top-width:${propValue};`\r\n break;\r\n case 'isBold':\r\n if (propValue) {\r\n unsubscribeContainerStyle += 'font-weight:bold;';\r\n }\r\n break;\r\n case 'isItalic':\r\n if (propValue) {\r\n unsubscribeContainerStyle += 'font-style:italic;';\r\n }\r\n break;\r\n case 'isUnderline':\r\n if (propValue) {\r\n textDecoration = 'underline';\r\n }\r\n break;\r\n case 'paddingBottom':\r\n unsubscribeContainerStyle += `padding-bottom:${propValue};`\r\n break;\r\n case 'paddingLeft':\r\n unsubscribeContainerStyle += `padding-left:${propValue};`\r\n break;\r\n case 'paddingRight':\r\n unsubscribeContainerStyle += `padding-right:${propValue};`\r\n break;\r\n case 'paddingTop':\r\n unsubscribeContainerStyle += `padding-top:${propValue};`\r\n break;\r\n case 'color-link':\r\n unsubscribeLinkStyle += `${propName.replace('-link', '')}:${propValue};`\r\n break;\r\n case 'isBold-link':\r\n unsubscribeLinkStyle += `font-weight:${propValue ? 'bold' : 'normal'};`;\r\n break;\r\n case 'isItalic-link':\r\n unsubscribeLinkStyle += `font-style:${propValue ? 'italic' : 'normal'};`;\r\n break;\r\n case 'isUnderline-link':\r\n linkTextDecoration = propValue ? 'underline' : 'none';\r\n unsubscribeLinkStyle += `text-decoration:${linkTextDecoration};`;\r\n break;\r\n case 'font-size':\r\n if (prop.value < 9) {\r\n propValue = '9px';\r\n }\r\n // Intentional fallthrough\r\n default:\r\n unsubscribeContainerStyle += `${propName}:${propValue};`\r\n break;\r\n }\r\n }\r\n }\r\n if (unsubscribeContainerStyle.indexOf('font-family') < 0) {\r\n unsubscribeContainerStyle += `font-family:${TypeConfig.defaultFontFamily};`\r\n }\r\n if (unsubscribeLinkStyle.indexOf('color') < 0) {\r\n unsubscribeLinkStyle += 'color:inherit;'\r\n }\r\n if (unsubscribeLinkStyle.indexOf('text-decoration') < 0) {\r\n unsubscribeLinkStyle += 'text-decoration:none;'\r\n }\r\n if (linkTextDecoration == textDecoration) {\r\n unsubscribeContainerStyle += `text-decoration:${textDecoration};`\r\n }\r\n let _content = content || '';\r\n _content += `

Want to change how you receive these emails?

You can unsubscribe from this list

`\r\n if (props.renderWatermark) {\r\n const watermarkLink = 'https://artcloud.com/manager-for-artists';\r\n const watermarkTextStyle = 'color:#898989;font-family:Lato,Roboto,Helvetica,Arial;font-size:15px;margin:0;';\r\n _content += `

POWERED BY

\"ArtCloud\"

Learn more about how ArtCloud empowers the art world.

`;\r\n }\r\n _content += `
`;\r\n return \r\n}\r\nconst FooterTokens = () => {\r\n return [\r\n Token.getDefaultTokenConfig('Current Year', Token.Footer.CurrentYear),\r\n Token.getDefaultTokenConfig('List Company', Token.Footer.ListCompany),\r\n Token.getDefaultTokenConfig('List Address HTML', Token.Footer.ListAddressHtml)\r\n ]\r\n}\r\nconst FooterTypeConfig = {\r\n defaultDesign: () => `

Copyright *|${Token.Footer.CurrentYear}|* *|${Token.Footer.ListCompany}|*, All rights reserved.

 

 

 

Our mailing address is:

*|${Token.Footer.ListAddressHtml}|*

`,\r\n panel: {\r\n block: () => BaseText.TypeConfig.panel.block({ backgroundColor: TypeConfig.defaultBackgroundColor, design: FooterTypeConfig.defaultDesign() }),\r\n layout: function () {\r\n const group = 'layout';\r\n return {\r\n group,\r\n label: 'Layout',\r\n options: [\r\n {\r\n display: 'Padding/Margin',\r\n group,\r\n max: '100',\r\n name: 'paddingMargin',\r\n options: TypeConfig.options.measurement(),\r\n type: 'paddingMargin',\r\n value: {\r\n paddingBottom: { value: '72', unit: 'px' },\r\n paddingLeft: { value: '18', unit: 'px' },\r\n paddingRight: { value: '18', unit: 'px' },\r\n paddingTop: { value: '9', unit: 'px' }\r\n }\r\n }\r\n ]\r\n }\r\n },\r\n unsubscribe: function () {\r\n const group = 'unsubscribe';\r\n return {\r\n group,\r\n label: 'Unsubscribe',\r\n options: [\r\n {\r\n display: 'Font Family',\r\n group,\r\n name: 'font-family',\r\n options: TypeConfig.options.fontFamily(),\r\n type: 'dropdown',\r\n value: TypeConfig.defaultFontFamily\r\n },\r\n {\r\n display: 'Font Size',\r\n group,\r\n name: 'font-size',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement',\r\n value: { value: '12', unit: 'px' }\r\n },\r\n {\r\n display: 'Line Height',\r\n group,\r\n name: 'line-height',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement',\r\n value: { value: '18', unit: 'px' }\r\n },\r\n {\r\n display: 'Letter Spacing',\r\n group,\r\n name: 'letter-spacing',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement'\r\n },\r\n {\r\n display: 'Text Color',\r\n group,\r\n name: 'color',\r\n type: 'color',\r\n value: '#ffffff'\r\n },\r\n {\r\n display: 'Text Transform',\r\n group,\r\n name: 'text-transform',\r\n options: [\r\n { display: 'None', value: 'none' },\r\n { display: 'Capitalize', value: 'capitalize' },\r\n { display: 'Uppercase', value: 'uppercase' },\r\n { display: 'Lowercase', value: 'lowercase' }\r\n ],\r\n type: 'dropdown',\r\n value: 'none'\r\n },\r\n {\r\n display: 'Text Alignment',\r\n group,\r\n name: 'text-align',\r\n options: TypeConfig.options.alignment(),\r\n type: 'dropdown',\r\n value: 'center'\r\n },\r\n {\r\n group,\r\n type: 'spacer'\r\n },\r\n {\r\n display: 'Text Bold',\r\n group,\r\n name: 'isBold',\r\n type: 'checkbox',\r\n value: false\r\n },\r\n {\r\n display: 'Text Italic',\r\n group,\r\n name: 'isItalic',\r\n type: 'checkbox',\r\n value: false\r\n },\r\n {\r\n display: 'Text Underline',\r\n group,\r\n name: 'isUnderline',\r\n type: 'checkbox',\r\n value: false\r\n },\r\n {\r\n group,\r\n type: 'spacer'\r\n },\r\n {\r\n display: 'Link Color',\r\n group,\r\n name: 'color-link',\r\n type: 'color'\r\n },\r\n {\r\n group,\r\n type: 'spacer'\r\n },\r\n {\r\n display: 'Link Bold',\r\n group,\r\n name: 'isBold-link',\r\n type: 'checkbox',\r\n value: false\r\n },\r\n {\r\n display: 'Link Italic',\r\n group,\r\n name: 'isItalic-link',\r\n type: 'checkbox',\r\n value: false\r\n },\r\n {\r\n display: 'Link Underline',\r\n group,\r\n name: 'isUnderline-link',\r\n type: 'checkbox',\r\n value: false\r\n },\r\n {\r\n display: 'Background/Border Properties',\r\n group,\r\n id: 'borderProps',\r\n type: 'header'\r\n },\r\n {\r\n display: 'Background',\r\n group,\r\n name: 'background-color',\r\n type: 'color'\r\n },\r\n {\r\n display: 'Border Radius',\r\n group,\r\n name: 'border-radius',\r\n options: TypeConfig.options.measurement(true),\r\n type: 'measurement'\r\n },\r\n {\r\n display: 'Border',\r\n group,\r\n name: 'border',\r\n options: TypeConfig.options.measurement(),\r\n type: 'border'\r\n },\r\n {\r\n display: 'Layout Properties',\r\n group,\r\n id: 'layoutProps',\r\n type: 'header'\r\n },\r\n {\r\n disabled: ['marginLeft', 'marginRight', 'marginBottom', 'marginTop'],\r\n display: 'Padding/Margin',\r\n group,\r\n max: '100',\r\n name: 'paddingMargin',\r\n options: TypeConfig.options.measurement(),\r\n type: 'paddingMargin',\r\n value: {\r\n paddingBottom: { value: '28', unit: 'px' },\r\n paddingTop: { value: '28', unit: 'px' }\r\n }\r\n }\r\n ]\r\n }\r\n }\r\n }\r\n}\r\nfunction FooterBlockTypeDefinition(group) {\r\n return {\r\n id: Name.Block.Footer,\r\n config: {\r\n block: FooterTypeConfig.panel.block(),\r\n layout: FooterTypeConfig.panel.layout(),\r\n unsubscribe: FooterTypeConfig.panel.unsubscribe()\r\n },\r\n display: 'Footer',\r\n group,\r\n image: 'templates/footer.svg',\r\n imageFullWidth: true\r\n };\r\n}\r\nconst Footer = { BlockTypeDefinition: FooterBlockTypeDefinition, Component: FooterComponent, Tokens: FooterTokens, TypeConfig: FooterTypeConfig };\r\n\r\nexport default Footer;", "import React from 'react';\r\n\r\nimport { Wrapper } from './Block.jsx';\r\nimport Name from '../utility/Name.jsx';\r\nimport TypeConfig from '../utility/TypeConfig.jsx';\r\nimport Utilities from '../utility/Utilities.jsx';\r\n\r\nfunction ImageComponent(props) {\r\n let alt = props.alt;\r\n let image = props.image;\r\n let isCropped, link, wrapperStyle;\r\n let width = props.maxWidth || 600;\r\n const contentStyle = { textAlign: 'center' };\r\n const imageStyle = { display: 'inline', maxWidth: '800px', paddingBottom: 0, verticalAlign: 'bottom' };\r\n if (props.blockConfig) {\r\n if (props.blockConfig.block) {\r\n if (props.blockConfig.block.image && props.blockConfig.block.image.width) {\r\n width = Math.min(props.blockConfig.block.image.width, width);\r\n }\r\n Utilities.mapStyleConfigProps(imageStyle, props.blockConfig.block, (propName, propValue) => {\r\n switch (propName) {\r\n case 'alt':\r\n alt = propValue || alt;\r\n return true;\r\n case 'backgroundColor':\r\n if (propValue) {\r\n wrapperStyle = { backgroundColor: propValue };\r\n }\r\n return true;\r\n case 'image':\r\n image = props.blockConfig.block.image;\r\n return true;\r\n case 'isCropped':\r\n isCropped = propValue;\r\n return true;\r\n case 'url':\r\n link = propValue;\r\n return true;\r\n }\r\n });\r\n }\r\n if (props.blockConfig.layout) {\r\n Utilities.mapStyleConfigProps(contentStyle, props.blockConfig.layout, (propName, propValue) => {\r\n switch (propName) {\r\n case 'paddingLeft':\r\n case 'paddingRight':\r\n if (propValue) {\r\n width -= propValue;\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n }\r\n if (imageStyle.borderLeftWidth && imageStyle.borderLeftStyle != 'none') {\r\n const temp = parseInt(imageStyle.borderLeftWidth, 10);\r\n if (!isNaN(temp)) {\r\n width -= temp;\r\n }\r\n }\r\n if (imageStyle.borderRightWidth && imageStyle.borderRightStyle != 'none') {\r\n const temp = parseInt(imageStyle.borderRightWidth, 10);\r\n if (!isNaN(temp)) {\r\n width -= temp;\r\n }\r\n }\r\n const imageUrlFromImage = (image) => {\r\n let size = 564;\r\n if (image.width) {\r\n if (image.width < 1200) {\r\n size = undefined;\r\n } else {\r\n size = 1200\r\n }\r\n }\r\n let transforms;\r\n if (isCropped) {\r\n transforms = '';\r\n if (size) {\r\n transforms = `h_${size},`;\r\n }\r\n transforms += 'c_fill';\r\n }\r\n return Utilities.imageUrl(image, size, transforms);\r\n }\r\n let imageUrl;\r\n if (image) {\r\n imageUrl = imageUrlFromImage(image);\r\n }\r\n if (!imageUrl) {\r\n if (!props.builder) {\r\n return null;\r\n }\r\n if (props.defaultImage) {\r\n imageUrl = imageUrlFromImage(props.defaultImage);\r\n }\r\n }\r\n let content = (\r\n \r\n );\r\n if (link && link.length > 0) {\r\n content = (\r\n {content}\r\n );\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {content}\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\nconst ImageTypeConfig = {\r\n defaultImage: { extension: 'jpg', height: 532, id: 'mda6928wfib20j4c9sta', width: 800 },\r\n panel: {\r\n block: function ({ alt, image }) {\r\n const group = 'block';\r\n return {\r\n group,\r\n label: 'Design',\r\n options: [\r\n {\r\n display: 'Image',\r\n group,\r\n name: 'image',\r\n type: 'image',\r\n value: image\r\n },\r\n {\r\n display: 'Use Cropped Square Image',\r\n group,\r\n name: 'isCropped',\r\n type: 'checkbox',\r\n value: false\r\n },\r\n {\r\n display: 'Background Color',\r\n group,\r\n name: 'backgroundColor',\r\n type: 'color'\r\n },\r\n {\r\n display: 'Border Radius',\r\n group,\r\n name: 'borderRadius',\r\n options: TypeConfig.options.measurement(true),\r\n type: 'measurement'\r\n },\r\n {\r\n display: 'Border',\r\n group,\r\n name: 'border',\r\n options: TypeConfig.options.measurement(),\r\n type: 'border'\r\n },\r\n {\r\n fullWidth: true,\r\n group,\r\n type: 'spacer-short'\r\n },\r\n {\r\n display: 'Alt Text',\r\n fullWidth: true,\r\n group,\r\n name: 'alt',\r\n type: 'text',\r\n value: alt\r\n },\r\n {\r\n display: 'Image Link',\r\n fullWidth: true,\r\n group,\r\n name: 'url',\r\n type: 'text'\r\n }\r\n ]\r\n };\r\n },\r\n layout: function () {\r\n const group = 'layout';\r\n return {\r\n group,\r\n label: 'Layout',\r\n options: [\r\n {\r\n disabled: ['marginLeft', 'marginRight', 'marginBottom', 'marginTop'],\r\n display: 'Padding/Margin',\r\n group,\r\n max: '300',\r\n name: 'paddingMargin',\r\n options: TypeConfig.options.measurement(),\r\n type: 'paddingMargin',\r\n value: {\r\n paddingBottom: { value: '9', unit: 'px' },\r\n paddingLeft: { value: '18', unit: 'px' },\r\n paddingRight: { value: '18', unit: 'px' },\r\n paddingTop: { value: '9', unit: 'px' }\r\n }\r\n }\r\n ]\r\n };\r\n }\r\n }\r\n};\r\nconst ImageBlockTypeDefinition = (group) => {\r\n return {\r\n id: Name.Block.Image,\r\n config: {\r\n block: ImageTypeConfig.panel.block({ image: ImageTypeConfig.defaultImage }),\r\n layout: ImageTypeConfig.panel.layout()\r\n },\r\n display: 'Image',\r\n group,\r\n image: 'image.png'\r\n };\r\n}\r\nconst Image = { BlockTypeDefinition: ImageBlockTypeDefinition, Component: ImageComponent, TypeConfig: ImageTypeConfig };\r\n\r\nexport default Image;", "import React from 'react';\r\n\r\nimport { Wrapper } from './Block.jsx';\r\nimport { EmptyPlaceholder } from '../utility/BuilderBlock.jsx';\r\nimport Comment from './Comment.jsx';\r\nimport { InventoryCellContainer } from './InventoryCell.jsx';\r\nimport Name from '../utility/Name.jsx';\r\nimport TypeConfig from '../utility/TypeConfig.jsx';\r\nimport Utilities from '../utility/Utilities.jsx';\r\n\r\nconst defaultColumnCount = 3;\r\nfunction InventoryListComponent(props) {\r\n const inventory = props.blockConfig.inventory || [];\r\n const isEmpty = inventory.length == 0;\r\n if (isEmpty) {\r\n if (props.builder) {\r\n return Select at least one inventory item\r\n }\r\n return null;\r\n }\r\n let cellPadding = InventoryCellContainer.TypeConfig.defaultCellPadding;\r\n let columnCount = defaultColumnCount;\r\n let rowSpacing = '18px';\r\n let cellConfig;\r\n const wrapperStyle = {};\r\n if (props.blockConfig) {\r\n cellConfig = props.blockConfig.block && props.blockConfig.block.cell;\r\n Utilities.mapStyleConfigProps(wrapperStyle, props.blockConfig.layout, (propName, propValue, propUnit) => {\r\n switch (propName) {\r\n case 'cellPadding':\r\n cellPadding = parseInt(propValue, 10);\r\n return true;\r\n case 'columnCount':\r\n columnCount = parseInt(propValue, 10) || columnCount;\r\n return true;\r\n case 'rowSpacing':\r\n if (propValue && propUnit) {\r\n rowSpacing = `${propValue}${propUnit}`;\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n const alignment = columnCount == 1 ? 'center' : 'left';\r\n const columnWidth = Utilities.columnWidth(columnCount);\r\n\r\n let cells = [];\r\n const rows = [];\r\n inventory.forEach((d, i) => {\r\n if (!d || !d.data) {\r\n return;\r\n }\r\n if (cells.length >= columnCount) {\r\n rows.push(cells);\r\n cells = [];\r\n }\r\n let contentConfig = cellConfig;\r\n if (d.useDefaultCellDesign != true && d.cell && d.cell.blocks && d.cell.blocks.length > 0) {\r\n contentConfig = d.cell;\r\n }\r\n cells.push(\r\n \r\n );\r\n });\r\n if (cells.length > 0) {\r\n rows.push(cells);\r\n }\r\n const content = rows.map((d, i) => {\r\n const rowStyle = {};\r\n if (i < rows.length - 1) {\r\n rowStyle.paddingBottom = rowSpacing;\r\n }\r\n return (\r\n \r\n {d}\r\n \r\n )\r\n });\r\n return {content}\r\n}\r\nconst InventoryListTypeConfig = {\r\n panel: {\r\n block: function () { },\r\n inventory: function (isTemplate = false) {\r\n const group = 'inventory';\r\n const config = {\r\n dynamic: true,\r\n dynamicContent: {\r\n display: 'Inventory',\r\n displayProperty: 'data',\r\n fullWidth: true,\r\n group,\r\n type: 'sortable',\r\n options: [\r\n {\r\n group,\r\n name: 'inventory',\r\n type: 'inventory'\r\n }\r\n ],\r\n onHeaderDisplay: (data, config) => {\r\n let imageUrl;\r\n if (data && data.Image) {\r\n imageUrl = Utilities.imageUrl({ extension: data.Image.Extension, id: data.Image.S3Id }, 20, 'c_fit');\r\n }\r\n let display = data && data.Title || '';\r\n if (!config.useDefaultCellDesign && config.cell && config.cell.blocks && config.cell.blocks.length > 0) {\r\n display = <>{display}\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n {display}\r\n \r\n );\r\n }\r\n },\r\n group,\r\n label: 'Inventory',\r\n options: [],\r\n };\r\n if (!isTemplate) {\r\n config.dynamicContent.options.push(\r\n {\r\n display: 'Use Default Cell Design',\r\n fullWidth: true,\r\n group: group,\r\n name: 'useDefaultCellDesign',\r\n type: 'checkbox',\r\n value: true\r\n },\r\n {\r\n display: 'Edit Cell For This Item',\r\n group: group,\r\n type: 'edit-text',\r\n value: {\r\n keyPath: ['cell'],\r\n name: Name.Content.InventoryCellOverride\r\n },\r\n visible: (config) => config && config.useDefaultCellDesign == false\r\n }\r\n )\r\n }\r\n config.options.push(\r\n {\r\n display: 'Edit Inventory',\r\n fullWidth: true,\r\n group,\r\n offsetTop: true,\r\n type: 'edit-button',\r\n value: config.dynamicContent\r\n },\r\n {\r\n display: 'Edit Cell Design',\r\n fullWidth: true,\r\n group,\r\n type: 'edit-button',\r\n value: {\r\n keyPath: ['block', 'cell'],\r\n name: Name.Content.InventoryCell\r\n }\r\n }\r\n );\r\n if (!isTemplate) {\r\n config.options.push({\r\n fullWidth: true,\r\n group,\r\n type: 'info',\r\n value: '* Inventory Items with a red dot indicate the default cell design has been overriden for that item'\r\n })\r\n } else {\r\n config.options.push({\r\n fullWidth: true,\r\n group,\r\n type: 'spacer-short'\r\n })\r\n }\r\n return config;\r\n },\r\n layout: function () {\r\n const group = 'layout';\r\n return {\r\n label: 'Design',\r\n group,\r\n options: [\r\n {\r\n display: 'Background Color',\r\n group,\r\n name: 'backgroundColor',\r\n type: 'color'\r\n },\r\n {\r\n display: 'Column Count',\r\n group,\r\n name: 'columnCount',\r\n options: [\r\n { display: '1', value: 1 },\r\n { display: '2', value: 2 },\r\n { display: '3', value: 3 }\r\n ],\r\n type: 'dropdown',\r\n value: defaultColumnCount\r\n },\r\n {\r\n display: 'Cell Padding',\r\n fullWidth: true,\r\n group,\r\n max: '100',\r\n name: 'cellPadding',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement-slider',\r\n value: { value: `${InventoryCellContainer.TypeConfig.defaultCellPadding}`, unit: 'px' }\r\n },\r\n {\r\n display: 'Row Spacing',\r\n fullWidth: true,\r\n group,\r\n max: '100',\r\n name: 'rowSpacing',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement-slider',\r\n value: { value: '18', unit: 'px' }\r\n },\r\n {\r\n display: 'Padding Top',\r\n fullWidth: true,\r\n group,\r\n max: '100',\r\n name: 'paddingTop',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement-slider'\r\n },\r\n {\r\n display: 'Padding Bottom',\r\n fullWidth: true,\r\n group,\r\n max: '100',\r\n name: 'paddingBottom',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement-slider'\r\n }\r\n ]\r\n };\r\n }\r\n }\r\n}\r\nconst InventoryListBlockTypeDefinition = (group, campaignType) => {\r\n return {\r\n id: Name.Block.Inventory.List,\r\n config: {\r\n block: {},\r\n inventory: InventoryListTypeConfig.panel.inventory(campaignType),\r\n layout: InventoryListTypeConfig.panel.layout(),\r\n defaults: [\r\n { configName: 'block', propertyName: 'cell', propertyValue: InventoryCellContainer.TypeConfig.defaultDesign({}) }\r\n ]\r\n },\r\n display: 'Inventory Container',\r\n group,\r\n image: 'inventory.png'\r\n };\r\n}\r\nconst InventoryList = { BlockTypeDefinition: InventoryListBlockTypeDefinition, Component: InventoryListComponent, TypeConfig: InventoryListTypeConfig };\r\n\r\nfunction InventoryRow(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n {\r\n props.renderMso &&\r\n `} />\r\n }\r\n {props.children}\r\n {\r\n props.renderMso &&\r\n
`} />\r\n }\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default InventoryList;", "import React from 'react';\r\n\r\nimport Image from './Image.jsx';\r\nimport Name from '../utility/Name.jsx';\r\nimport TypeConfig from '../utility/TypeConfig.jsx';\r\n\r\nfunction LogoComponent(props) {\r\n let alt, defaultImage;\r\n if (props.data) {\r\n alt = props.data.Company;\r\n if (props.data.Logo) {\r\n defaultImage = { extension: props.data.Logo.Extension, height: props.data.Logo.Height, id: props.data.Logo.S3Id || props.data.Logo.Id, width: props.data.Logo.Width };\r\n }\r\n }\r\n return \r\n}\r\nconst LogoTypeConfig = {\r\n panel: {\r\n block: function (defaultImage, alt) {\r\n return Image.TypeConfig.panel.block(defaultImage);\r\n },\r\n layout: function () {\r\n const group = 'layout';\r\n return {\r\n group,\r\n label: 'Layout',\r\n options: [\r\n {\r\n disabled: ['marginLeft', 'marginRight', 'marginBottom', 'marginTop'],\r\n display: 'Padding/Margin',\r\n group,\r\n max: '300',\r\n name: 'paddingMargin',\r\n options: TypeConfig.options.measurement(),\r\n type: 'paddingMargin',\r\n value: {\r\n paddingBottom: { value: '63', unit: 'px' },\r\n paddingLeft: { value: '18', unit: 'px' },\r\n paddingRight: { value: '18', unit: 'px' },\r\n paddingTop: { value: '63', unit: 'px' }\r\n }\r\n }\r\n ]\r\n };\r\n }\r\n }\r\n}\r\nconst LogoBlockTypeDefinition = (group, data) => {\r\n let alt, image;\r\n if (data) {\r\n alt = data.Company;\r\n if (data.Logo) {\r\n image = { extension: data.Logo.Extension, height: data.Logo.Height, id: data.Logo.Id, width: data.Logo.Width };\r\n }\r\n }\r\n return {\r\n id: Name.Block.Logo,\r\n config: {\r\n block: LogoTypeConfig.panel.block({ alt, image }),\r\n layout: LogoTypeConfig.panel.layout()\r\n },\r\n display: 'Logo',\r\n group,\r\n image: 'logo.svg'\r\n };\r\n}\r\nconst Logo = { BlockTypeDefinition: LogoBlockTypeDefinition, Component: LogoComponent, TypeConfig: LogoTypeConfig };\r\n\r\nexport default Logo;", "import React from 'react';\r\n\r\nimport { Wrapper } from './Block.jsx';\r\nimport Comment from './Comment.jsx';\r\nimport Name from '../utility/Name.jsx';\r\nimport TypeConfig from '../utility/TypeConfig.jsx';\r\nimport Utilities from \"../utility/Utilities.jsx\";\r\n\r\nfunction SocialComponent(props) {\r\n let content, contentStyle, innerStyle, wrapperStyle;\r\n let horizontalSpacing = 28;\r\n let iconAlignment = 'center';\r\n const contentContainerStyle = { borderCollapse: 'separate', maxWidth: '100%', minWidth: '100%' };\r\n if (props.blockConfig) {\r\n const iconProps = { iconAlignment: 'center', paddingLeft: `${horizontalSpacing / 2}px`, paddingRight: `${horizontalSpacing / 2}px` };\r\n if (props.blockConfig.block) {\r\n wrapperStyle = {};\r\n Utilities.mapStyleConfigProps(contentContainerStyle, props.blockConfig.block, (propName, propValue, propUnit) => {\r\n switch (propName) {\r\n case 'backgroundColor':\r\n wrapperStyle = { backgroundColor: propValue };\r\n return true;\r\n case 'contentColor':\r\n contentContainerStyle.backgroundColor = propValue;\r\n return true;\r\n case 'horizontalSpacing':\r\n horizontalSpacing = propValue;\r\n return true;\r\n case 'iconSize':\r\n case 'verticalSpacing':\r\n iconProps[propName] = { unit: propUnit, value: propValue };\r\n return true;\r\n case 'iconAlignment':\r\n iconAlignment = propValue;\r\n // Intentional fallthrough\r\n case 'iconStyle':\r\n iconProps[propName] = propValue;\r\n return true;\r\n }\r\n });\r\n }\r\n const _horizontalSpacing = parseInt(horizontalSpacing, 10);\r\n if (!isNaN(_horizontalSpacing)) {\r\n switch (iconProps.iconAlignment) {\r\n case 'left':\r\n iconProps.paddingLeft = undefined;\r\n iconProps.paddingRight = `${_horizontalSpacing}px`;\r\n break;\r\n case 'right':\r\n iconProps.paddingLeft = `${_horizontalSpacing}px`;\r\n iconProps.paddingRight = undefined;\r\n break;\r\n default:\r\n iconProps.paddingLeft = `${_horizontalSpacing / 2}px`;\r\n iconProps.paddingRight = `${_horizontalSpacing / 2}px`;\r\n break;\r\n }\r\n }\r\n if (props.blockConfig.layout) {\r\n contentStyle = {};\r\n innerStyle = {};\r\n Utilities.mapStyleConfigProps(contentStyle, props.blockConfig.layout, (propName, propValue, propUnit) => {\r\n switch (propName) {\r\n case 'marginBottom':\r\n case 'marginLeft':\r\n case 'marginRight':\r\n case 'marginTop':\r\n if (propValue && propUnit) {\r\n if (!innerStyle) {\r\n innerStyle = {};\r\n }\r\n innerStyle[propName.replace('margin', 'padding')] = `${propValue}${propUnit}`;\r\n }\r\n return true;\r\n }\r\n });\r\n }\r\n if (props.blockConfig.social) {\r\n content = props.blockConfig.social.map((d, i) =>\r\n \r\n );\r\n }\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n props.renderMso &&\r\n `} />\r\n }\r\n {content}\r\n {\r\n props.renderMso &&\r\n
`} />\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n}\r\nconst SocialTypeConfig = {\r\n panel: {\r\n block: function () {\r\n const group = 'block';\r\n return {\r\n group,\r\n label: 'Design',\r\n options: [\r\n {\r\n display: 'Background Color',\r\n group,\r\n name: 'backgroundColor',\r\n type: 'color',\r\n value: TypeConfig.defaultBackgroundColor\r\n },\r\n {\r\n display: 'Content Background Color',\r\n group,\r\n name: 'contentColor',\r\n type: 'color'\r\n },\r\n {\r\n display: 'Border Radius',\r\n group,\r\n name: 'borderRadius',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement'\r\n },\r\n {\r\n display: 'Border',\r\n group,\r\n name: 'border',\r\n options: TypeConfig.options.measurement(),\r\n type: 'border'\r\n },\r\n {\r\n fullWidth: true,\r\n group,\r\n type: 'spacer-short'\r\n },\r\n {\r\n display: 'Icon Properties',\r\n group,\r\n id: 'iconProps',\r\n type: 'header'\r\n },\r\n {\r\n display: 'Icon Style',\r\n group,\r\n name: 'iconStyle',\r\n options: [\r\n { display: 'Light', value: 'light' },\r\n { display: 'Dark', value: 'dark' }\r\n ],\r\n type: 'dropdown',\r\n value: 'light'\r\n },\r\n {\r\n display: 'Icon Alignment',\r\n group,\r\n name: 'iconAlignment',\r\n options: TypeConfig.options.alignment(),\r\n type: 'dropdown',\r\n value: 'center'\r\n },\r\n {\r\n display: 'Icon Size',\r\n fullWidth: true,\r\n group,\r\n max: '50',\r\n name: 'iconSize',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement-slider',\r\n value: { value: '24', unit: 'px' }\r\n },\r\n {\r\n display: 'Horizontal Spacing',\r\n fullWidth: true,\r\n group,\r\n max: '100',\r\n name: 'horizontalSpacing',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement-slider',\r\n value: { value: '28', unit: 'px' }\r\n },\r\n {\r\n display: 'Vertical Spacing',\r\n fullWidth: true,\r\n group,\r\n max: '50',\r\n name: 'verticalSpacing',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement-slider'\r\n }\r\n ]\r\n }\r\n },\r\n layout: function () {\r\n const group = 'layout';\r\n return {\r\n group,\r\n label: 'Layout',\r\n options: [\r\n {\r\n display: 'Padding/Margin',\r\n group,\r\n max: '100',\r\n name: 'paddingMargin',\r\n options: TypeConfig.options.measurement(),\r\n type: 'paddingMargin',\r\n value: {\r\n paddingBottom: { value: '9', unit: 'px' },\r\n paddingLeft: { value: '27', unit: 'px' },\r\n paddingRight: { value: '27', unit: 'px' },\r\n paddingTop: { value: '18', unit: 'px' }\r\n }\r\n }\r\n ]\r\n };\r\n },\r\n social: function () {\r\n const group = 'social';\r\n const config = {\r\n dynamic: true,\r\n dynamicContent: {\r\n display: 'Social Platform',\r\n displayProperty: 'platform',\r\n fullWidth: true,\r\n group,\r\n type: 'sortable',\r\n options: [\r\n {\r\n display: 'Platform',\r\n group,\r\n name: 'platform',\r\n options: [\r\n { display: '1st Dibs', value: 'dibs' },\r\n { display: 'ArtCloud', value: 'artcloud' },\r\n { display: 'Artnet', value: 'artnet' },\r\n { display: 'Artsy', value: 'artsy' },\r\n { display: 'Bluesky', value: 'bluesky' },\r\n { display: 'Facebook', value: 'facebook' },\r\n { display: 'Houzz', value: 'houzz' },\r\n { display: 'Instagram', value: 'instagram' },\r\n { display: 'LinkedIn', value: 'linkedin' },\r\n { display: 'Pinterest', value: 'pinterest' },\r\n { display: 'TikTok', value: 'tiktok' },\r\n { display: 'Twitter', value: 'twitter' },\r\n { display: 'Vimeo', value: 'vimeo' },\r\n { display: 'YouTube', value: 'youtube' },\r\n { display: '- Spacer - ', value: 'spacer' }\r\n ],\r\n relatedProperties: [\r\n 'url'\r\n ],\r\n type: 'dropdown',\r\n value: 'facebook'\r\n },\r\n {\r\n default: {\r\n 'artcloud': 'https://artcloud.com/',\r\n 'artnet': 'http://www.artnet.com/',\r\n 'artsy': 'https://www.artsy.net/',\r\n 'bluesky': 'https://bsky.app/',\r\n 'dibs': 'https://www.1stdibs.com/',\r\n 'facebook': 'https://facebook.com/',\r\n 'houzz': 'https://www.houzz.com/',\r\n 'instagram': 'https://www.instagram.com/',\r\n 'linkedin': 'https://www.linkedin.com/',\r\n 'pinterest': 'https://www.pinterest.com/',\r\n 'spacer': undefined,\r\n 'tiktok': 'https://tiktok.com/',\r\n 'twitter': 'https://twitter.com/',\r\n 'vimeo': 'https://vimeo.com/',\r\n 'youtube': 'https://youtube.com/',\r\n },\r\n display: 'Social URL',\r\n fullWidth: true,\r\n group,\r\n name: 'url',\r\n relatedProperty: 'platform',\r\n relatedPropertyOverridable: true,\r\n type: 'text',\r\n value: 'https://facebook.com/',\r\n visible: (config) => config && config.platform != 'spacer'\r\n },\r\n {\r\n fullWidth: true,\r\n group,\r\n type: 'spacer-short'\r\n },\r\n {\r\n display: 'Icon Size',\r\n fullWidth: true,\r\n group,\r\n max: '50',\r\n name: 'iconSize',\r\n options: TypeConfig.options.measurement(),\r\n type: 'measurement-slider'\r\n },\r\n {\r\n fullWidth: true,\r\n group,\r\n type: 'info',\r\n value: '* Setting Icon Size will override the global configuration',\r\n }\r\n ]\r\n },\r\n group,\r\n label: 'Platforms',\r\n options: []\r\n };\r\n config.options.push({\r\n display: 'Add Social Platform',\r\n fullWidth: true,\r\n group,\r\n type: 'insert-button',\r\n value: config.dynamicContent\r\n });\r\n return config;\r\n },\r\n },\r\n\r\n parsing: {\r\n socialLinks: (links) => {\r\n const socialPlatforms = [];\r\n if (!links) {\r\n return socialPlatforms;\r\n }\r\n if (links.FacebookUrl) {\r\n socialPlatforms.push({\r\n id: `social-facebook-${new Date().getTime()}`,\r\n platform: \"facebook\",\r\n url: links.FacebookUrl\r\n });\r\n }\r\n if (links.TwitterUrl) {\r\n socialPlatforms.push({\r\n id: `social-twitter-${new Date().getTime()}`,\r\n platform: \"twitter\",\r\n url: links.TwitterUrl\r\n });\r\n }\r\n if (links.InstagramUrl) {\r\n socialPlatforms.push({\r\n id: `social-instagram-${new Date().getTime()}`,\r\n platform: \"instagram\",\r\n url: links.InstagramUrl\r\n });\r\n }\r\n if (links.PinterestUrl) {\r\n socialPlatforms.push({\r\n id: `social-pinterest-${new Date().getTime()}`,\r\n platform: \"pinterest\",\r\n url: links.PinterestUrl\r\n });\r\n }\r\n if (links.ArtsyUrl) {\r\n socialPlatforms.push({\r\n id: `social-artsy-${new Date().getTime()}`,\r\n platform: \"artsy\",\r\n url: links.ArtsyUrl\r\n });\r\n }\r\n if (links.ArtnetUrl) {\r\n socialPlatforms.push({\r\n id: `social-artnet-${new Date().getTime()}`,\r\n platform: \"artnet\",\r\n url: links.ArtnetUrl\r\n });\r\n }\r\n if (links.FirstDibsUrl) {\r\n socialPlatforms.push({\r\n id: `social-dibs-${new Date().getTime()}`,\r\n platform: \"dibs\",\r\n url: links.FirstDibsUrl\r\n });\r\n }\r\n if (links.HouzzUrl) {\r\n socialPlatforms.push({\r\n id: `social-houzz-${new Date().getTime()}`,\r\n platform: \"houzz\",\r\n url: links.HouzzUrl\r\n });\r\n }\r\n if (links.YouTubeUrl) {\r\n socialPlatforms.push({\r\n id: `social-youtube-${new Date().getTime()}`,\r\n platform: \"youtube\",\r\n url: links.YouTubeUrl\r\n });\r\n }\r\n if (links.LinkedInUrl) {\r\n socialPlatforms.push({\r\n id: `social-linkedin-${new Date().getTime()}`,\r\n platform: \"linkedin\",\r\n url: links.LinkedInUrl\r\n });\r\n }\r\n if (links.TikTokUrl) {\r\n socialPlatforms.push({\r\n id: `social-tiktok-${new Date().getTime()}`,\r\n platform: \"tiktok\",\r\n url: links.TikTokUrl\r\n });\r\n }\r\n if (links.VimeoUrl) {\r\n socialPlatforms.push({\r\n id: `social-vimeo-${new Date().getTime()}`,\r\n platform: \"vimeo\",\r\n url: links.VimeoUrl\r\n });\r\n }\r\n if (links.BlueskyUrl) {\r\n socialPlatforms.push({\r\n id: `social-bluesky-${new Date().getTime()}`,\r\n platform: \"bluesky\",\r\n url: links.BlueskyUrl\r\n });\r\n }\r\n return socialPlatforms;\r\n }\r\n }\r\n};\r\nconst SocialBlockTypeDefinition = (group, { links }) => {\r\n const socialPlatforms = SocialTypeConfig.parsing.socialLinks(links);\r\n return {\r\n id: Name.Block.Social,\r\n config: {\r\n block: SocialTypeConfig.panel.block(),\r\n social: SocialTypeConfig.panel.social(),\r\n layout: SocialTypeConfig.panel.layout(),\r\n defaults: [{ configName: \"social\", propertyValue: socialPlatforms }]\r\n },\r\n display: 'Social Links',\r\n group,\r\n image: 'social.svg',\r\n };\r\n}\r\nconst Social = { BlockTypeDefinition: SocialBlockTypeDefinition, Component: SocialComponent, TypeConfig: SocialTypeConfig };\r\n\r\n// region SOCIAL PLATFORM\r\n\r\nfunction SocialPlatformComponent(props) {\r\n let alt, platform, url;\r\n let iconSize = '24';\r\n const contentStyle = { paddingTop: '3px' }; // Fudge factor for inline table display issue\r\n if (props.globalConfig) {\r\n if (props.globalConfig.iconSize && props.globalConfig.iconSize.value) {\r\n iconSize = props.globalConfig.iconSize.value;\r\n }\r\n if (props.globalConfig.verticalSpacing && props.globalConfig.verticalSpacing.value) {\r\n contentStyle.paddingBottom = `${props.globalConfig.verticalSpacing.value}${props.globalConfig.verticalSpacing.unit}`;\r\n }\r\n switch (props.globalConfig.iconAlignment) {\r\n case 'left':\r\n if (props.index != props.count - 1) {\r\n contentStyle.paddingRight = props.globalConfig.paddingRight;\r\n }\r\n contentStyle.paddingLeft = props.globalConfig.paddingLeft;\r\n break;\r\n case 'right':\r\n if (props.index != 0) {\r\n contentStyle.paddingLeft = props.globalConfig.paddingLeft;\r\n }\r\n contentStyle.paddingRight = props.globalConfig.paddingRight;\r\n break;\r\n default:\r\n contentStyle.paddingLeft = props.globalConfig.paddingLeft;\r\n contentStyle.paddingRight = props.globalConfig.paddingRight;\r\n break;\r\n }\r\n }\r\n if (props.blockConfig) {\r\n if (props.blockConfig.iconSize && props.blockConfig.iconSize.value && props.blockConfig.iconSize.value.length > 0) {\r\n iconSize = props.blockConfig.iconSize.value;\r\n }\r\n platform = props.blockConfig.platform;\r\n switch (platform) {\r\n case 'artcloud':\r\n alt = 'ArtCloud';\r\n break;\r\n case 'artnet':\r\n alt = 'Artnet';\r\n break;\r\n case 'artsy':\r\n alt = 'Artsy';\r\n break;\r\n case 'bluesky':\r\n alt = 'Bluesky';\r\n platform = 'bsky';\r\n break;\r\n case 'dibs':\r\n alt = '1st Dibs';\r\n platform = '1stdibs';\r\n break;\r\n case 'facebook':\r\n alt = 'Facebook';\r\n break;\r\n case 'houzz':\r\n alt = 'Houzz';\r\n break;\r\n case 'instagram':\r\n alt = 'Instagram';\r\n break;\r\n case 'linkedin':\r\n alt = 'LinkedIn';\r\n break;\r\n case 'pinterest':\r\n alt = 'Pinterest';\r\n break;\r\n case 'tiktok':\r\n alt = 'TikTok';\r\n break;\r\n case 'twitter':\r\n alt = 'Twitter';\r\n break;\r\n case 'vimeo':\r\n alt = 'Vimeo';\r\n break;\r\n case 'youtube':\r\n alt = 'YouTube';\r\n break;\r\n }\r\n url = props.blockConfig.url;\r\n }\r\n let imageUrl = '';\r\n if (platform && platform != 'spacer') {\r\n imageUrl = `https://artcld-pub.s3.amazonaws.com/assets/campaign/icons/outline-${props.globalConfig && props.globalConfig.iconStyle || 'light'}-${platform}-48.png`;\r\n }\r\n return (\r\n <>\r\n {\r\n props.renderMso &&\r\n `} />\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {\r\n imageUrl &&\r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n props.renderMso &&\r\n `} />\r\n }\r\n \r\n )\r\n}\r\n\r\nexport default Social;", "import React, { useEffect, useState } from 'react';\r\n\r\nimport { LinkButton } from '../blocks/Button.jsx';\r\nimport Columns from '../blocks/Columns.jsx';\r\nimport Divider from '../blocks/Divider.jsx';\r\nimport Footer from '../blocks/Footer.jsx';\r\nimport Image from '../blocks/Image.jsx';\r\nimport * as InventoryCell from '../blocks/InventoryCell.jsx';\r\nimport InventoryList from '../blocks/InventoryList.jsx';\r\nimport Logo from '../blocks/Logo.jsx';\r\nimport Name from './Name.jsx';\r\nimport Social from '../blocks/Social.jsx';\r\nimport { HeaderText, TokenizedText } from '../blocks/Text.jsx';\r\n\r\nfunction GetComponentAndData(block, providedData) {\r\n if (!block || !block.type) {\r\n return null;\r\n }\r\n let data = block;\r\n let Component;\r\n switch (block.type.value) {\r\n case Name.Block.Column:\r\n Component = Columns.Component;\r\n break;\r\n case Name.Block.Divider:\r\n Component = Divider.Component;\r\n break;\r\n case Name.Block.Footer:\r\n Component = Footer.Component;\r\n break;\r\n case Name.Block.HeaderText:\r\n Component = HeaderText.Component;\r\n break;\r\n case Name.Block.Image:\r\n Component = Image.Component;\r\n break;\r\n case Name.Block.Inventory.Button:\r\n Component = InventoryCell.InventoryButton.Component;\r\n data = providedData;\r\n break;\r\n case Name.Block.Inventory.Image:\r\n Component = InventoryCell.InventoryImage.Component;\r\n data = providedData;\r\n break;\r\n case Name.Block.Inventory.List:\r\n Component = InventoryList.Component;\r\n break;\r\n case Name.Block.Inventory.Text:\r\n Component = InventoryCell.InventoryMeta.Component;\r\n data = providedData;\r\n break;\r\n case Name.Block.LinkButton:\r\n Component = LinkButton.Component;\r\n break;\r\n case Name.Block.Logo:\r\n Component = Logo.Component;\r\n data = providedData;\r\n break;\r\n case Name.Block.Social:\r\n Component = Social.Component;\r\n break;\r\n case Name.Block.Text:\r\n default:\r\n Component = TokenizedText.Component;\r\n break;\r\n }\r\n return { component: Component, data };\r\n}\r\n\r\nclass BuilderBlock extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleClick = this.handleClick.bind(this);\r\n }\r\n\r\n shouldComponentUpdate(nextProps) {\r\n switch (nextProps.dataType) {\r\n case 'column':\r\n case 'layout':\r\n case 'layout-horizontal':\r\n case 'layout-vertical':\r\n return true;\r\n }\r\n return !nextProps.dragging;\r\n }\r\n\r\n handleClick(event) {\r\n if (event) {\r\n event.stopPropagation();\r\n }\r\n if (this.props.onBlockClick) {\r\n this.props.onBlockClick(this.props.blockId);\r\n }\r\n }\r\n\r\n render() {\r\n const props = this.props;\r\n let className = 'builder-block draggable';\r\n if (props.active) {\r\n className += ' draggable-active';\r\n }\r\n let dragOutline;\r\n switch (props.dataType) {\r\n case 'column':\r\n case 'layout':\r\n case 'layout-horizontal':\r\n case 'layout-vertical':\r\n className += ' layout';\r\n break;\r\n default:\r\n if (props.renderDragOutline != false) {\r\n dragOutline = ;\r\n }\r\n break;\r\n }\r\n if (props.className) {\r\n className += ` ${props.className}`;\r\n }\r\n return (\r\n \r\n {props.children}\r\n {dragOutline}\r\n
\r\n );\r\n }\r\n}\r\n\r\nfunction EmptyPlaceholder(props) {\r\n const style = { minHeight: props.minHeight || '40px', minWidth: props.minWidth || '10px' };\r\n if (props.fullWidth) {\r\n style.width = '100%';\r\n }\r\n return
{props.children}
\r\n}\r\n\r\nfunction PageBottomHiddenDraggable(props) {\r\n return (\r\n \r\n