pb-sxp-ui 1.0.99 → 1.0.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +393 -178
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +23 -20
- package/dist/index.js +394 -178
- package/dist/index.js.map +1 -1
- package/dist/index.min.cjs +3 -3
- package/dist/index.min.cjs.map +1 -1
- package/dist/index.min.js +3 -3
- package/dist/index.min.js.map +1 -1
- package/dist/pb-ui.js +393 -178
- package/dist/pb-ui.js.map +1 -1
- package/dist/pb-ui.min.js +3 -3
- package/dist/pb-ui.min.js.map +1 -1
- package/es/core/components/SxpPageRender/ExpandableText.js +3 -2
- package/es/core/components/SxpPageRender/Hashtag/index.js +3 -1
- package/es/core/components/SxpPageRender/Navbar.js +4 -1
- package/es/core/components/SxpPageRender/VideoWidget/index.d.ts +1 -0
- package/es/core/components/SxpPageRender/VideoWidget/index.js +3 -3
- package/es/core/components/SxpPageRender/WaterFall/List.js +21 -10
- package/es/core/components/SxpPageRender/WaterFall/WaterfallList.js +24 -13
- package/es/core/components/SxpPageRender/index.d.ts +1 -0
- package/es/core/components/SxpPageRender/index.js +2 -1
- package/es/core/context/EditorDataProvider.d.ts +1 -0
- package/es/core/context/EditorDataProvider.js +2 -1
- package/es/core/utils/tool.d.ts +5 -0
- package/es/core/utils/tool.js +43 -0
- package/es/index.d.ts +0 -1
- package/es/index.js +0 -1
- package/es/materials/sxp/HashTag/settingRender.d.ts +19 -22
- package/es/materials/sxp/HashTag/settingRender.js +31 -13
- package/es/materials/sxp/popup/AppointForm/Form.d.ts +14 -0
- package/es/materials/sxp/popup/AppointForm/Form.js +8 -0
- package/es/materials/sxp/popup/AppointForm/index.js +25 -20
- package/es/materials/sxp/popup/AppointForm/settingRender.d.ts +9 -20
- package/es/materials/sxp/popup/AppointForm/settingRender.js +31 -13
- package/es/materials/sxp/popup/CommodityDetail/index.js +13 -4
- package/es/materials/sxp/popup/CommodityDetail/settingRender.d.ts +19 -22
- package/es/materials/sxp/popup/CommodityDetail/settingRender.js +31 -13
- package/es/materials/sxp/popup/CommodityDetailDiroNew/index.js +16 -5
- package/es/materials/sxp/popup/CommodityDetailDiroNew/settingRender.d.ts +19 -22
- package/es/materials/sxp/popup/CommodityDetailDiroNew/settingRender.js +31 -13
- package/es/materials/sxp/popup/Prompt/index.js +4 -1
- package/es/materials/sxp/popup/Prompt/settingRender.d.ts +10 -8
- package/es/materials/sxp/popup/Prompt/settingRender.js +16 -8
- package/es/materials/sxp/template/Appoint/index.js +4 -1
- package/es/materials/sxp/template/Commodity/index.js +7 -2
- package/es/materials/sxp/template/CommodityDiro/index.js +8 -3
- package/es/materials/sxp/template/CommodityDiroNew/index.js +7 -2
- package/es/materials/sxp/template/Link/index.js +4 -1
- package/es/materials/sxp/template/MultiCommodity/index.js +7 -2
- package/es/materials/sxp/template/MultiCommodityDiro/index.js +8 -3
- package/es/materials/sxp/template/MultiCommodityDiroNew/index.js +7 -2
- package/es/materials/sxp/template/components/settingRender.d.ts +16 -24
- package/es/materials/sxp/template/components/settingRender.js +30 -12
- package/lib/core/components/SxpPageRender/ExpandableText.js +3 -2
- package/lib/core/components/SxpPageRender/Hashtag/index.js +3 -1
- package/lib/core/components/SxpPageRender/Navbar.js +4 -1
- package/lib/core/components/SxpPageRender/VideoWidget/index.d.ts +1 -0
- package/lib/core/components/SxpPageRender/VideoWidget/index.js +3 -3
- package/lib/core/components/SxpPageRender/WaterFall/List.js +21 -10
- package/lib/core/components/SxpPageRender/WaterFall/WaterfallList.js +24 -13
- package/lib/core/components/SxpPageRender/index.d.ts +1 -0
- package/lib/core/components/SxpPageRender/index.js +2 -1
- package/lib/core/context/EditorDataProvider.d.ts +1 -0
- package/lib/core/context/EditorDataProvider.js +2 -1
- package/lib/core/utils/tool.d.ts +5 -0
- package/lib/core/utils/tool.js +45 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -3
- package/lib/materials/sxp/HashTag/settingRender.d.ts +19 -22
- package/lib/materials/sxp/HashTag/settingRender.js +31 -13
- package/lib/materials/sxp/popup/AppointForm/Form.d.ts +14 -0
- package/lib/materials/sxp/popup/AppointForm/Form.js +11 -0
- package/lib/materials/sxp/popup/AppointForm/index.js +24 -19
- package/lib/materials/sxp/popup/AppointForm/settingRender.d.ts +9 -20
- package/lib/materials/sxp/popup/AppointForm/settingRender.js +31 -14
- package/lib/materials/sxp/popup/CommodityDetail/index.js +13 -4
- package/lib/materials/sxp/popup/CommodityDetail/settingRender.d.ts +19 -22
- package/lib/materials/sxp/popup/CommodityDetail/settingRender.js +31 -13
- package/lib/materials/sxp/popup/CommodityDetailDiroNew/index.js +16 -5
- package/lib/materials/sxp/popup/CommodityDetailDiroNew/settingRender.d.ts +19 -22
- package/lib/materials/sxp/popup/CommodityDetailDiroNew/settingRender.js +31 -13
- package/lib/materials/sxp/popup/Prompt/index.js +4 -1
- package/lib/materials/sxp/popup/Prompt/settingRender.d.ts +10 -8
- package/lib/materials/sxp/popup/Prompt/settingRender.js +16 -9
- package/lib/materials/sxp/template/Appoint/index.js +4 -1
- package/lib/materials/sxp/template/Commodity/index.js +7 -2
- package/lib/materials/sxp/template/CommodityDiro/index.js +8 -3
- package/lib/materials/sxp/template/CommodityDiroNew/index.js +7 -2
- package/lib/materials/sxp/template/Link/index.js +4 -1
- package/lib/materials/sxp/template/MultiCommodity/index.js +7 -2
- package/lib/materials/sxp/template/MultiCommodityDiro/index.js +8 -3
- package/lib/materials/sxp/template/MultiCommodityDiroNew/index.js +7 -2
- package/lib/materials/sxp/template/components/settingRender.d.ts +16 -24
- package/lib/materials/sxp/template/components/settingRender.js +30 -12
- package/package.json +1 -1
- package/es/materials/sxp/defaultSetting.d.ts +0 -8
- package/es/materials/sxp/defaultSetting.js +0 -6
- package/lib/materials/sxp/defaultSetting.d.ts +0 -8
- package/lib/materials/sxp/defaultSetting.js +0 -9
package/dist/pb-ui.min.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pb-ui.min.js","sources":["../node_modules/tslib/tslib.es6.js","../src/core/utils/getDataByDS.ts","../src/core/utils/getSxpTokenInfo.ts","../src/core/utils/tool.ts","../src/core/utils/unzip.ts","../src/core/Pagebuilder/PagebuilderClass.ts","../src/core/Pagebuilder/index.tsx","../src/core/hooks/useEditor.ts","../src/core/hooks/useDataSource.ts","../src/core/utils/sessionStore.ts","../src/core/utils/localStore.ts","../src/core/components/SxpPageRender/useIconLink.ts","../src/core/utils/event.ts","../src/core/components/Consent/index.tsx","../src/core/context/SxpDataSourceProvider.tsx","../src/core/hooks/useSxpDataSource.ts","../src/core/hooks/useCurrentNode.ts","../src/core/context/DataSourceProvider.tsx","../src/core/context/EditorContext.tsx","../src/materials/sxp/popup/AppointForm/interactionRender.tsx","../src/materials/sxp/defaultSetting.ts","../src/materials/sxp/popup/AppointForm/settingRender.tsx","../src/core/hooks/useEventReport.ts","../src/materials/sxp/popup/AppointForm/index.tsx","../src/core/create.ts","../src/materials/sxp/popup/AppointForm/material.tsx","../src/materials/sxp/popup/CommodityDetail/settingRender.tsx","../node_modules/swiper/shared/ssr-window.esm.mjs","../node_modules/swiper/shared/utils.mjs","../node_modules/swiper/modules/mousewheel.mjs","../node_modules/swiper/shared/create-element-if-not-defined.mjs","../node_modules/swiper/shared/classes-to-selector.mjs","../node_modules/swiper/modules/pagination.mjs","../node_modules/swiper/modules/scrollbar.mjs","../node_modules/swiper/modules/autoplay.mjs","../node_modules/swiper/modules/free-mode.mjs","../node_modules/swiper/shared/swiper-core.mjs","../node_modules/swiper/shared/update-swiper.mjs","../node_modules/swiper/shared/update-on-virtual-data.mjs","../node_modules/swiper/swiper-react.mjs","../src/core/components/SxpPageRender/Modal/index.tsx","../src/core/components/SxpPageRender/ExpandableText.tsx","../src/core/components/SxpPageRender/FormatImage.tsx","../src/materials/sxp/popup/CommodityDetail/index.tsx","../src/materials/sxp/popup/CommodityDetail/material.tsx","../src/materials/sxp/popup/Prompt/interactionRender.tsx","../src/materials/sxp/popup/Prompt/settingRender.tsx","../src/materials/sxp/popup/Prompt/success.png","../src/core/utils/materials.ts","../src/materials/sxp/popup/Prompt/index.tsx","../src/materials/sxp/popup/Prompt/material.tsx","../src/materials/sxp/popup/CommodityDetailDiroNew/settingRender.tsx","../src/materials/sxp/popup/CommodityDetailDiroNew/index.tsx","../src/materials/sxp/popup/CommodityDetailDiroNew/material.tsx","../src/materials/sxp/template/components/settingRender.tsx","../src/materials/sxp/template/Commodity/interactionRender.tsx","../src/materials/sxp/template/components/EventProvider.tsx","../src/core/hooks/useOnScreen.ts","../src/materials/sxp/template/components/Img.tsx","../src/materials/sxp/template/Commodity/index.tsx","../src/materials/sxp/template/Commodity/material.tsx","../src/materials/sxp/template/Appoint/interactionRender.tsx","../src/materials/sxp/template/Appoint/index.tsx","../src/materials/sxp/template/Appoint/material.tsx","../src/materials/sxp/template/Link/index.tsx","../src/materials/sxp/template/Link/material.tsx","../src/materials/sxp/template/CommodityDiro/interactionRender.tsx","../src/materials/sxp/template/CommodityDiro/index.tsx","../src/materials/sxp/template/CommodityDiro/material.tsx","../src/materials/sxp/template/CommodityDiroNew/interactionRender.tsx","../src/materials/sxp/template/CommodityDiroNew/index.tsx","../src/materials/sxp/template/CommodityDiroNew/material.tsx","../src/materials/sxp/template/MultiCommodityDiro/interactionRender.tsx","../src/materials/sxp/template/components/Scroll.tsx","../src/materials/sxp/template/MultiCommodityDiro/index.tsx","../src/materials/sxp/template/MultiCommodityDiro/material.tsx","../src/materials/sxp/template/MultiCommodity/interactionRender.tsx","../src/materials/sxp/template/MultiCommodity/index.tsx","../src/materials/sxp/template/MultiCommodity/material.tsx","../src/materials/sxp/template/MultiCommodityDiroNew/interactionRender.tsx","../src/materials/sxp/template/MultiCommodityDiroNew/index.tsx","../src/materials/sxp/template/MultiCommodityDiroNew/material.tsx","../src/materials/sxp/HashTag/settingRender.tsx","../src/core/components/SxpPageRender/Navbar.tsx","../src/core/components/SxpPageRender/WaterFall/WaterfallList.tsx","../src/core/components/SxpPageRender/WaterFall/left.png","../src/core/components/SxpPageRender/WaterFall/List.tsx","../src/core/components/SxpPageRender/WaterFall/index.tsx","../src/materials/sxp/HashTag/index.tsx","../src/materials/sxp/HashTag/material.tsx","../src/materials/sxp/Consent/settingRender.tsx","../src/materials/sxp/Consent/index.tsx","../src/materials/sxp/Consent/material.tsx","../src/core/components/SxpPageRender/LikeButton/index.tsx","../src/core/components/SxpPageRender/VideoWidget/loading.gif","../src/core/components/SxpPageRender/VideoWidget/index.tsx","../src/core/components/SxpPageRender/ToggleButton/index.tsx","../src/core/components/SxpPageRender/FingerSwipeTip/index.tsx","../src/core/components/SxpPageRender/PictureGroup/Picture.tsx","../src/core/components/SxpPageRender/PictureGroup/index.tsx","../src/core/components/SxpPageRender/Hashtag/index.tsx","../src/core/components/SxpPageRender/left.png","../src/core/hoc/withBindDataSource.tsx","../src/core/components/SxpPageRender/RenderCard.tsx","../src/core/components/SxpPageRender/Nudge/index.tsx","../src/core/components/SxpPageRender/Tagbar.tsx","../src/core/components/SxpPageRender/index.tsx","../src/core/components/DiyPortalPreview/PictureGroup.tsx","../src/core/components/DiyPortalPreview/VideoWidget.tsx","../src/core/components/DiyPortalPreview/index.tsx","../src/core/components/SxpPageRender/Popup/index.tsx","../src/core/components/SxpPageCore/index.tsx","../src/core/context/EditorDataProvider.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","import { ISchema } from '../schema';\r\n\r\nconst pathParamsReg = /:\\w+/g;\r\n\r\nexport default async (apiAddr: string, configs: ISchema['dataSource']) => {\r\n const $store: Record<string, any> = {};\r\n const idMapName: Record<string, string> = {};\r\n for (let i = 0; i < configs?.length; i++) {\r\n const { id, method, url, urlParams, name, queryString, headers, body } = configs[i];\r\n let apiUrl = url;\r\n if (urlParams) {\r\n Object.entries(urlParams).forEach(([k, v]) => {\r\n apiUrl = apiUrl.replace(pathParamsReg, (p) => {\r\n if (p === k) {\r\n return v;\r\n } else {\r\n return p;\r\n }\r\n });\r\n });\r\n }\r\n // let params: any;\r\n if (queryString) {\r\n apiUrl += queryString;\r\n // params = qs.parse(queryString.slice(1));\r\n }\r\n idMapName[id] = name;\r\n try {\r\n const result = await fetch(apiUrl, {\r\n method,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...headers\r\n },\r\n body: JSON.stringify(body)\r\n }).then((res) => res.json());\r\n // const result = await fetch(`${apiAddr}/storefront/v1/proxy`, {\r\n // method: 'POST',\r\n // headers: {\r\n // 'Content-Type': 'application/json'\r\n // },\r\n // body: JSON.stringify({\r\n // url: apiUrl,\r\n // method,\r\n // headers,\r\n // body,\r\n // params\r\n // })\r\n // }).then((res) => res.json());\r\n $store[id] = result;\r\n } catch (error) {\r\n console.error('DataSource request error: ', error);\r\n $store[id] = {};\r\n }\r\n }\r\n return { $store, idMapName };\r\n};\r\n","import PagebuilderClass from '../Pagebuilder/PagebuilderClass';\r\n\r\nconst SXP_TOKEN_INFO_KEY = 'SXP_TOKEN_INFO';\r\n\r\nexport const getSxpTokenInfo = async (builder: PagebuilderClass, dataId: string) => {\r\n const tenantId = builder.getTenantId();\r\n const appId = builder.getAppId();\r\n const apiUrl = builder.getApiUrl();\r\n // 获取缓存token信息\r\n const tokenJson = window.localStorage.getItem(SXP_TOKEN_INFO_KEY);\r\n let tokenData = JSON.parse(tokenJson || '{}');\r\n const currentTime = Date.now();\r\n // token 过期或者不存在则重新请求\r\n if (currentTime > (tokenData?.expireTime ?? 0)) {\r\n const tokenRes = await fetch(`${apiUrl}/storefront/v1/proxy/token/${dataId}`, {\r\n method: 'POST',\r\n headers: {\r\n 'x-tenant-id': tenantId || '',\r\n 'x-app-id': appId || ''\r\n }\r\n }).then((res) => res.json());\r\n if (tokenRes.success) {\r\n // 缓存 tokenRes\r\n const data = tokenRes.data;\r\n tokenData = { ...data, expireTime: Date.now() + data.expire * 1000 };\r\n window.localStorage.setItem(SXP_TOKEN_INFO_KEY, JSON.stringify(tokenData));\r\n }\r\n }\r\n return tokenData;\r\n};\r\n","/*\r\n * @Author : haocanweng@chatlabs.cn\r\n * @Date : 2023-08-21 16:58:40\r\n * @LastEditors : haocanweng@chatlabs.cn\r\n * @LastEditTime : 2023-08-21 17:00:14\r\n * @FilePath : /page-builder-component/src/core/utils/tool.ts\r\n */\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\n// 生成uuid\r\nfunction uuid(len: number, radix: number) {\r\n const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\r\n const uuid = [];\r\n let i;\r\n radix = radix || chars.length;\r\n\r\n if (len) {\r\n for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];\r\n } else {\r\n let r;\r\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\r\n uuid[14] = '4';\r\n\r\n for (i = 0; i < 36; i++) {\r\n if (!uuid[i]) {\r\n r = 0 | (Math.random() * 16);\r\n uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];\r\n }\r\n }\r\n }\r\n\r\n return uuid.join('');\r\n}\r\n\r\nconst getIndexByblockType = (type: string, index: number) => {\r\n if (type === 'CommodityCarouselBlock' || type === 'CopyBlock') {\r\n return 'initial';\r\n } else {\r\n return index;\r\n }\r\n};\r\n\r\nexport const generateRandomString = (length: number) => {\r\n let result = '';\r\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n const charactersLength = characters.length;\r\n let counter = 0;\r\n while (counter < length) {\r\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n counter += 1;\r\n }\r\n return result;\r\n};\r\n\r\nexport const getUid = () => {\r\n const originalUid = uuidv4();\r\n const uid = originalUid?.replaceAll ? originalUid.replaceAll('-', '') : generateRandomString(32);\r\n return uid; // uid为32位长度\r\n};\r\n\r\nexport { uuid, getIndexByblockType };\r\n","import pako from 'pako';\r\n\r\nexport function unzip(b64Data: string) {\r\n const strData = atob(b64Data);\r\n const charData = strData.split('').map(function (x) {\r\n return x.charCodeAt(0);\r\n });\r\n const binData = new Uint8Array(charData);\r\n const data = pako.inflate(binData, { to: 'string' });\r\n return JSON.parse(data);\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-09-05 13:51:23\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-01-02 14:02:57\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\Pagebuilder\\PagebuilderClass.ts\r\n *\r\n */\r\nlet _instance: PagebuilderClass | null = null;\r\n\r\nconst API_URL = {\r\n dev: 'https://clc-pagebuilder-be-dev.chatlabs.net',\r\n staging: 'https://clc-pagebuilder-be-staging.chatlabs.net',\r\n live: 'https://clc-pagebuilder-be.chatlabs.net'\r\n};\r\n\r\nexport default class PagebuilderClass {\r\n private appId: string | undefined;\r\n private tenantId: string | undefined;\r\n private apiUrl: string | undefined;\r\n private env?: 'dev' | 'staging' | 'live' | undefined;\r\n\r\n constructor() {\r\n if (_instance) {\r\n return _instance;\r\n }\r\n _instance = this;\r\n }\r\n\r\n setApiUrl(apiUrl: string) {\r\n this.apiUrl = `https://${apiUrl}`;\r\n }\r\n\r\n getApiUrl() {\r\n if (this.apiUrl) return this.apiUrl;\r\n if (!this.env) return '';\r\n return API_URL[this.env];\r\n }\r\n\r\n getEnv(): 'dev' | 'staging' | 'live' | undefined {\r\n return this.env;\r\n }\r\n\r\n setEnv(value: 'dev' | 'staging' | 'live' | undefined) {\r\n this.env = value;\r\n }\r\n\r\n setAppId = (appId: string) => {\r\n this.appId = appId;\r\n };\r\n\r\n setTenantId = (tenantId: string) => {\r\n this.tenantId = tenantId;\r\n };\r\n\r\n getAppId = () => {\r\n return this.appId;\r\n };\r\n\r\n getTenantId = () => {\r\n return this.tenantId;\r\n };\r\n}\r\n","import { isEmpty } from 'lodash';\r\nimport getDataByDS from '../utils/getDataByDS';\r\nimport { getSxpTokenInfo } from '../utils/getSxpTokenInfo';\r\nimport { uuid } from '../utils/tool';\r\nimport { unzip } from '../utils/unzip';\r\nimport type PagebuilderProps from './type';\r\nimport PagebuilderClass from './PagebuilderClass';\r\nimport { PageData } from './type';\r\n\r\nlet builder: PagebuilderClass | null = null;\r\n\r\nconst Pagebuilder: PagebuilderProps = {\r\n init: ({ appId, tenantId, env = 'live', apiUrl }) => {\r\n if (!builder) {\r\n builder = new PagebuilderClass();\r\n }\r\n if (apiUrl) {\r\n builder.setApiUrl(apiUrl);\r\n }\r\n builder.setAppId(appId);\r\n builder.setTenantId(tenantId);\r\n builder.setEnv(env);\r\n },\r\n getDetail: (path: string) => {\r\n if (!builder) return;\r\n const tenantId = builder.getTenantId();\r\n const appId = builder.getAppId();\r\n const apiUrl = builder.getApiUrl();\r\n return fetch(`${apiUrl}/storefront/v1/page?path=` + path, {\r\n method: 'get',\r\n headers: {\r\n 'x-tenant-id': tenantId || '',\r\n 'x-app-id': appId || ''\r\n }\r\n }).then(async (res) => {\r\n const result = await res.json();\r\n const decodeData = unzip(result?.data?.data);\r\n if (decodeData) {\r\n const { $store: __STORE__ } = await getDataByDS(apiUrl, decodeData?.dataSource ?? []);\r\n result.data.data = decodeData;\r\n Object.assign(result.data.data, { __STORE__ });\r\n }\r\n return result;\r\n });\r\n },\r\n getSxpDetailByPageId: async (id: string) => {\r\n if (!builder) return;\r\n const tenantId = builder.getTenantId();\r\n const appId = builder.getAppId();\r\n const apiUrl = builder.getApiUrl();\r\n return fetch(`${apiUrl}/storefront/v1/page?id=` + id, {\r\n method: 'get',\r\n headers: {\r\n 'x-tenant-id': tenantId || '',\r\n 'x-app-id': appId || ''\r\n }\r\n }).then(async (res) => {\r\n const result = await res.json();\r\n if (!result.success) {\r\n return undefined;\r\n }\r\n const decodeData = unzip(result?.data?.data);\r\n result.data.data = decodeData;\r\n return result.data as PageData;\r\n });\r\n },\r\n getSxpRecommendVideoData: async (dataId: string) => {\r\n if (!builder) return;\r\n // 获取缓存token信息\r\n const tokenData = await getSxpTokenInfo(builder, dataId);\r\n\r\n // 获取 requestId 和 productUserId\r\n const request_id = uuid(0, 0);\r\n let fake_session_id = window.localStorage.getItem('SXP_FAKE_SESSION_ID');\r\n if (isEmpty(fake_session_id)) {\r\n fake_session_id = uuid(36, 62);\r\n window.localStorage.setItem('SXP_FAKE_SESSION_ID', fake_session_id);\r\n }\r\n\r\n // 获取推荐视频数据\r\n const recommendVideoRes = await fetch('https://dev-sxp-be.chatlabs.net/platform/open/rec/v1.2', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n token: tokenData.token,\r\n channel: tokenData.channel,\r\n userId: tokenData.userId\r\n },\r\n body: JSON.stringify({\r\n productUserId: fake_session_id,\r\n channel: tokenData.channel,\r\n maxRecs: 10,\r\n requestId: request_id\r\n })\r\n }).then((res) => res.json());\r\n\r\n return recommendVideoRes?.data || null;\r\n }\r\n};\r\nexport { Pagebuilder };\r\n","import { useContext } from 'react';\r\nimport { EditorContext } from '../context/EditorContext';\r\n\r\nexport function useEditor() {\r\n return useContext(EditorContext);\r\n}\r\n","import { useContext } from 'react';\r\nimport { DataSourceContext } from '../context/DataSourceProvider';\r\n\r\n function useDataSource() {\r\n return useContext(DataSourceContext);\r\n}\r\n\r\nexport { useDataSource };\r\n","import { getUid } from './tool';\r\n\r\nconst feRealSessionIdKey = 'feRealSessionIdKey';\r\n\r\nconst generateFeSessionId = () => {\r\n const uid = getUid(); // 32位长度\r\n const timestamp = Date.now(); // 13位长度\r\n const result = `${timestamp}${uid}`; // 总共45位长度的唯一ID\r\n return result;\r\n};\r\n\r\n// 生成或者获取sessionID\r\nexport const storeAndLoadFeSessionId = () => {\r\n let result = getFeSessionId();\r\n if (!result) {\r\n result = generateFeSessionId();\r\n window.sessionStorage.setItem(feRealSessionIdKey, result);\r\n }\r\n return result;\r\n};\r\n\r\nexport const refreshFeSessionId = () => {\r\n const result = generateFeSessionId();\r\n window.sessionStorage.setItem(feRealSessionIdKey, result);\r\n};\r\n\r\n// 获取 sessionID\r\nconst getFeSessionId = () => {\r\n return window.sessionStorage.getItem(feRealSessionIdKey);\r\n};\r\n\r\n// 删除sessionID\r\nexport const removeFeSessionId = () => {\r\n window.sessionStorage.removeItem(feRealSessionIdKey);\r\n};\r\n","import { isEmpty } from 'lodash';\r\nimport { uuid } from './tool';\r\n\r\nexport const FAKE_USER_KEY = 'SXP_FAKE_USER_ID';\r\nexport const FAKE_USER_STATE = 'FAKE_USER_STATE';\r\nexport const AGREE_POLICY = 'AGREE_POLICY';\r\n\r\nexport const storeAndLoadFeUserId = () => {\r\n let fakeUserId = window.localStorage.getItem(FAKE_USER_KEY) as string;\r\n if (isEmpty(fakeUserId)) {\r\n fakeUserId = uuid(36, 62);\r\n window.localStorage.setItem(FAKE_USER_KEY, fakeUserId);\r\n }\r\n return fakeUserId;\r\n};\r\n\r\nexport const removeFeUserId = () => {\r\n window.localStorage.removeItem(FAKE_USER_KEY);\r\n};\r\n\r\nexport const getFeUserId = () => {\r\n const fakeUserState = window.localStorage.getItem(FAKE_USER_STATE) as string;\r\n if (isEmpty(fakeUserState)) {\r\n window.localStorage.setItem(FAKE_USER_STATE, 'true');\r\n }\r\n return isEmpty(fakeUserState);\r\n};\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-25 18:23:54\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\useIconLink.ts\r\n *\r\n */\r\nimport { useMemo } from 'react';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\n\r\nexport function useIconLink(path: string, domain?: string) {\r\n const { appDomain } = useSxpDataSource();\r\n return useMemo(() => {\r\n if (domain) {\r\n return `https://${domain}${path}`;\r\n } else {\r\n return appDomain ? `https://${appDomain}${path}` : `${window.location.origin}${path}`;\r\n }\r\n }, [appDomain, path, domain]);\r\n}\r\n","import EventEmitter from 'eventemitter3';\r\n\r\nconst SXP_EVENT_BUS = new EventEmitter();\r\n\r\nexport enum SXP_EVENT_TYPE {\r\n PAGE_DID_SHOW = 'pageDidShow',\r\n PAGE_DID_HIDE = 'pageDidHide',\r\n CHANGE_THEME_TAG = 'changeThemeTag'\r\n}\r\n\r\nexport default SXP_EVENT_BUS;\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-06-13 15:16:53\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-19 14:13:50\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\Consent\\index.tsx\r\n *\r\n */\r\nimport React, { FC, memo, useEffect, useMemo } from 'react';\r\nimport qs from 'qs';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { AGREE_POLICY } from '@/core/utils/localStore';\r\n\r\nexport interface IConsentProps {\r\n width?: number;\r\n height?: number;\r\n privacy_title?: string;\r\n privacy_context?: string;\r\n privacy_policy_url?: string;\r\n privacy_policy_title?: string;\r\n privacy_necessity?: boolean;\r\n}\r\n\r\nconst Consent: FC<IConsentProps> = ({\r\n width = window.innerWidth,\r\n height = window.innerHeight,\r\n privacy_title,\r\n privacy_context,\r\n privacy_policy_url,\r\n privacy_policy_title\r\n}) => {\r\n const { setIsAgreePolicy, bffEventReport } = useSxpDataSource();\r\n\r\n const channelObj = useMemo(() => {\r\n const queryString = location.search.slice(1);\r\n const params = qs.parse(queryString.replace(/\\+/g, '%2B')) as any;\r\n for (const key in params) {\r\n params[key] = params[key].replace(/%2B/g, '+');\r\n }\r\n return params;\r\n }, []);\r\n\r\n const getUtmValue = (key: string) => channelObj[key] ?? null;\r\n\r\n useEffect(() => {\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'privacyEnter',\r\n eventDescription: 'User enter privacy page',\r\n utmSource: getUtmValue('utm_source'),\r\n utmMedium: getUtmValue('utm_medium'),\r\n utmCampaign: getUtmValue('utm_campaign'),\r\n utmId: getUtmValue('utm_id'),\r\n utmContent: getUtmValue('utm_content'),\r\n clSource: getUtmValue('cl_source'),\r\n enterTime: `${Date.now()}`,\r\n enterUrl: window.location.href,\r\n rtc: null,\r\n requestId: null,\r\n sessionID: null\r\n }\r\n });\r\n }, []);\r\n\r\n const handleAgree = () => {\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'userConsent',\r\n eventDescription: '用户授权【操作结果】',\r\n consentResult: '0',\r\n consentTags: '[\"系统运营\"]',\r\n rtc: null,\r\n requestId: null,\r\n sessionID: null\r\n }\r\n });\r\n setIsAgreePolicy?.(true);\r\n window.localStorage.setItem(AGREE_POLICY, 'yes');\r\n };\r\n\r\n return (\r\n <div className='consent-bg'>\r\n <div className='consent'>\r\n <div className='consent-col'>\r\n <div className='consent-title'>{privacy_title ?? 'Privacy Policy'}</div>\r\n <div className='consent-content'>\r\n {privacy_context ??\r\n 'This site uses cookies to improve your online experience. By continuing to use the site please agree the policy first.'}\r\n </div>\r\n </div>\r\n <div className='consent-col'>\r\n <button aria-label='agree' className='consent-btn' onClick={handleAgree}>\r\n Agree\r\n </button>\r\n <a\r\n className='consent-policy'\r\n target='_blank'\r\n href={privacy_policy_url ? `https://${privacy_policy_url}` : undefined}\r\n >\r\n {privacy_policy_title ?? 'More information'}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Consent);\r\n","import React, { FC, ReactNode, createContext, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport qs from 'qs';\r\nimport { DataSource, PageData } from '../Pagebuilder/type';\r\nimport {\r\n ProductInfoType,\r\n RecItemType,\r\n RecommendVideoResultType,\r\n VideoInfoType\r\n} from '../components/SxpPageRender/typing';\r\nimport { storeAndLoadFeSessionId } from '../utils/sessionStore';\r\nimport { storeAndLoadFeUserId, AGREE_POLICY } from '../utils/localStore';\r\nimport { useIconLink } from '../components/SxpPageRender/useIconLink';\r\nimport SXP_EVENT_BUS, { SXP_EVENT_TYPE } from '../utils/event';\r\nimport { ISxpPageRenderProps } from '../components/SxpPageRender';\r\nimport Consent from '../components/Consent';\r\n\r\nexport interface IWaterFallDataType {\r\n hashTag: string;\r\n itemId?: string;\r\n itemType?: 'VIDEO' | 'PRODUCT' | null;\r\n rec: RecItemType;\r\n}\r\n\r\nexport interface ISxpDataSourceContext {\r\n rtcList: RecItemType[];\r\n setRtcList?: React.Dispatch<React.SetStateAction<RecItemType[]>>;\r\n submitForm?: (body: { attributes: Array<{ name: string; value: string }> }) => Promise<boolean | undefined>;\r\n mutateUnlike?: (body: { videoItemId: string }) => Promise<boolean>;\r\n mutateLike?: (body: { content: string }) => Promise<boolean>;\r\n popupDetailData?: RecItemType & { index: number };\r\n setPopupDetailData?: React.Dispatch<React.SetStateAction<any | null>>;\r\n loadVideos?: (page: number) => Promise<void>;\r\n getRecommendVideos?: (query?: {\r\n maxSize?: number;\r\n defaultSize?: number;\r\n channel?: string;\r\n hashTag?: string;\r\n 'itemFilter.itemId'?: string;\r\n 'itemFilter.itemType'?: 'VIDEO' | 'PRODUCT' | null | undefined;\r\n traceInfo?: string;\r\n themeTag?: string;\r\n }) => Promise<RecommendVideoResultType | undefined>;\r\n utmVal?: string;\r\n bffEventReport?: (body: { userInfo?: object; eventInfo: object }) => Promise<any> | undefined | boolean;\r\n isPreview?: boolean;\r\n loading?: boolean;\r\n sxpParameter?: PageData['sxp_parameter'];\r\n waterFallData?: IWaterFallDataType;\r\n setWaterFallData?: React.Dispatch<React.SetStateAction<IWaterFallDataType | undefined>>;\r\n ctaEvent?: (\r\n eventInfo: any,\r\n rec?: RecItemType,\r\n product?: ProductInfoType | VideoInfoType | null,\r\n number?: number\r\n ) => void;\r\n swiperRef?: any;\r\n openHashtag?: boolean;\r\n setOpenHashtag?: React.Dispatch<React.SetStateAction<boolean>>;\r\n cacheRtcList?: RecItemType[];\r\n setCacheRtcList?: React.Dispatch<React.SetStateAction<RecItemType[]>>;\r\n cacheActiveIndex?: number;\r\n setCacheActiveIndex?: React.Dispatch<React.SetStateAction<number>>;\r\n isFromHashtag?: boolean;\r\n setIsFromHashtag?: React.Dispatch<React.SetStateAction<boolean>>;\r\n appDomain?: string;\r\n hashTagSize?: number;\r\n loadingImage?: string;\r\n isOpenHashTag?: boolean;\r\n tagList: string[];\r\n isAgreePolicy?: boolean;\r\n setIsAgreePolicy?: React.Dispatch<React.SetStateAction<boolean>>;\r\n setLoading?: React.Dispatch<React.SetStateAction<boolean>>;\r\n videoRef?: any;\r\n setVideoRef?: React.Dispatch<React.SetStateAction<any>>;\r\n bffFbReport?: (body: {\r\n eventName: string;\r\n actionSource?: string;\r\n eventSourceUrl?: string;\r\n externalId?: string;\r\n }) => Promise<any> | undefined | boolean;\r\n curTime?: any;\r\n h5EnterLink?: () => void;\r\n themeTag?: any;\r\n isShowConsent?: boolean;\r\n selectTag?: string;\r\n setSelectTag?: React.Dispatch<React.SetStateAction<string>>;\r\n}\r\n\r\nexport const SxpDataSourceContext = createContext<ISxpDataSourceContext>({\r\n rtcList: [],\r\n tagList: []\r\n});\r\n\r\nexport interface SxpDataSourceProviderProps {\r\n dataSources?: DataSource[];\r\n render: (data: {\r\n rtcList: RecItemType[];\r\n tagList: string[];\r\n submitForm: (body: { attributes: Array<{ name: string; value: string }> }) => Promise<boolean | undefined>;\r\n mutateUnlike: (body: { videoItemId: string }) => Promise<boolean>;\r\n mutateLike: (body: { content: string }) => Promise<boolean>;\r\n }) => ReactNode;\r\n utmVal?: string;\r\n enableReportEvent?: boolean; // 是否开启事件上报,后台不需要上报事件\r\n maxSize?: number;\r\n defaultSize?: number;\r\n hashTagSize?: number;\r\n isPreview?: boolean;\r\n sxpParameter?: PageData['sxp_parameter'];\r\n appDomain?: string;\r\n loadingImage?: string;\r\n isOpenHashTag?: boolean;\r\n enabledMetaConversionApi?: boolean;\r\n isShowTag?: boolean;\r\n consentWidth?: number;\r\n consentHeight?: number;\r\n isOpenConsent?: boolean;\r\n globalConfig?: ISxpPageRenderProps['globalConfig'];\r\n isEditor?: boolean;\r\n}\r\n\r\nenum DataSourceType {\r\n BFF = 5\r\n}\r\nconst UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_id', 'utm_content', 'cl_source'];\r\n\r\nexport const DEFAULT_TAG = 'FOR U';\r\n\r\nconst SxpDataSourceProvider: FC<SxpDataSourceProviderProps> = ({\r\n render,\r\n dataSources,\r\n utmVal,\r\n enableReportEvent = true,\r\n maxSize,\r\n defaultSize,\r\n isPreview = false,\r\n sxpParameter,\r\n appDomain,\r\n hashTagSize,\r\n loadingImage,\r\n isOpenHashTag = false,\r\n enabledMetaConversionApi = false,\r\n consentHeight,\r\n consentWidth,\r\n isShowTag = true,\r\n isOpenConsent = false,\r\n globalConfig,\r\n isEditor = false\r\n}) => {\r\n const [rtcList, setRtcList] = useState<RecItemType[]>([]);\r\n const [tagList, setTagList] = useState<string[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [curReqInfo, setCurReqInfo] = useState<{ rtc: string; requestId: string }>({ rtc: '', requestId: '' });\r\n const swiperRef = useRef<any>(null);\r\n const isInit = useRef(false);\r\n const [isAgreePolicy, setIsAgreePolicy] = useState(() => !!window.localStorage.getItem(AGREE_POLICY));\r\n\r\n // 弹窗数据\r\n const [popupDetailData, setPopupDetailData] = useState();\r\n const [waterFallData, setWaterFallData] = useState<any>();\r\n const [openHashtag, setOpenHashtag] = useState(isOpenHashTag);\r\n const [cacheRtcList, setCacheRtcList] = useState<RecItemType[]>([]);\r\n const [cacheActiveIndex, setCacheActiveIndex] = useState<number>(0);\r\n const [isFromHashtag, setIsFromHashtag] = useState(false);\r\n const [videoRef, setVideoRef] = useState(null);\r\n const themeTag = useRef<string>();\r\n const curTime = useRef<any>();\r\n const [selectTag, setSelectTag] = useState(DEFAULT_TAG);\r\n\r\n const isShowConsent = useMemo(() => {\r\n return (globalConfig?.consent?.[0]?.item?.props?.privacy_necessity && !isAgreePolicy && !isEditor) || isOpenConsent;\r\n }, [isAgreePolicy, globalConfig, isOpenConsent, isEditor]);\r\n\r\n useEffect(() => {\r\n const handleChangeThemeTag = (tag?: string) => {\r\n themeTag.current = tag;\r\n };\r\n SXP_EVENT_BUS.on(SXP_EVENT_TYPE.CHANGE_THEME_TAG, handleChangeThemeTag);\r\n return () => {\r\n SXP_EVENT_BUS.off(SXP_EVENT_TYPE.CHANGE_THEME_TAG, handleChangeThemeTag);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n setOpenHashtag(isOpenHashTag);\r\n }, [isOpenHashTag]);\r\n\r\n // BFF 数据源\r\n const bffDataSource = useMemo(() => {\r\n return dataSources?.find((d) => d.type === DataSourceType.BFF);\r\n }, [dataSources]);\r\n\r\n // bff API 请求方法\r\n const bffFetch = useCallback(\r\n (\r\n path: string,\r\n options: {\r\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\r\n body?: object;\r\n query?: object;\r\n type?: 'beacon' | 'http';\r\n }\r\n ) => {\r\n if (!bffDataSource) return;\r\n const url = bffDataSource.url;\r\n const fakeUserId = storeAndLoadFeUserId();\r\n if (options?.query) {\r\n const queryString = qs.stringify(options.query);\r\n path = `${path}?${queryString}`;\r\n }\r\n\r\n // 事件上报优化\r\n // Beacon API 用于发送异步和非阻塞请求到服务器。这类请求不需要响应。\r\n if (options.type === 'beacon' && navigator.sendBeacon) {\r\n return navigator.sendBeacon(\r\n `${url}/api/v1${path}`,\r\n new Blob(\r\n [\r\n JSON.stringify({\r\n ...bffDataSource.headers,\r\n 'x-user-id': fakeUserId,\r\n ...options.body\r\n })\r\n ],\r\n { type: 'application/json;charset=UTF-8' }\r\n )\r\n );\r\n }\r\n\r\n return window\r\n .fetch(`${url}/api/v1${path}`, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'x-user-id': fakeUserId,\r\n ...bffDataSource.headers\r\n },\r\n method: options.method,\r\n body: JSON.stringify(options.body)\r\n })\r\n .then((res) => res.json())\r\n .catch((err) => Promise.reject(err));\r\n },\r\n [bffDataSource]\r\n );\r\n\r\n // 获取推荐视频数据\r\n const getRecommendVideos = useCallback(\r\n async (query?: {\r\n maxSize?: number;\r\n defaultSize?: number;\r\n channel?: string;\r\n hashTag?: string;\r\n 'itemFilter.itemId'?: string;\r\n 'itemFilter.itemType'?: 'VIDEO' | 'PRODUCT' | null | undefined;\r\n traceInfo?: string;\r\n themeTag?: string;\r\n }) => {\r\n query = {\r\n maxSize: query?.maxSize ?? maxSize,\r\n defaultSize: query?.defaultSize ?? defaultSize,\r\n 'itemFilter.itemId': query?.['itemFilter.itemId'],\r\n 'itemFilter.itemType': query?.['itemFilter.itemType'],\r\n hashTag: query?.hashTag,\r\n traceInfo: query?.traceInfo,\r\n themeTag: query?.themeTag\r\n };\r\n if (utmVal) {\r\n const val =\r\n utmVal\r\n ?.split('&')\r\n ?.filter((val) => {\r\n const key = val.split('=')[0];\r\n return UTM_KEYS.includes(key);\r\n })\r\n ?.join('&') ?? '';\r\n query = { ...query, channel: decodeURIComponent(val) };\r\n }\r\n const result = await bffFetch?.('/recommend/list', { method: 'GET', query });\r\n if (!result?.success) {\r\n return undefined;\r\n }\r\n if (!query?.hashTag) setCurReqInfo({ rtc: result.data.rtc, requestId: result.data.requestId });\r\n return result?.data as RecommendVideoResultType;\r\n },\r\n [bffFetch, utmVal, maxSize, defaultSize]\r\n );\r\n\r\n const loadVideos = useCallback(async () => {\r\n if (rtcList.length <= 0) {\r\n return;\r\n }\r\n const data = await getRecommendVideos({\r\n hashTag: waterFallData?.hashTag,\r\n 'itemFilter.itemId': waterFallData?.itemId,\r\n 'itemFilter.itemType': waterFallData?.itemType,\r\n themeTag: themeTag.current\r\n });\r\n setRtcList(rtcList.concat(data?.recList ?? []));\r\n setCacheRtcList(cacheRtcList.concat(data?.recList ?? []));\r\n }, [getRecommendVideos, rtcList, waterFallData, cacheRtcList]);\r\n\r\n const bffEventReport = useCallback(\r\n ({ userInfo, eventInfo }: { userInfo?: object; eventInfo: object }) => {\r\n // 关闭 BFF 事件上报\r\n if (!enableReportEvent) {\r\n return;\r\n }\r\n type DataType = Array<{ name: string; value: any }>;\r\n\r\n // 用户信息都是公共的\r\n if (!userInfo) {\r\n userInfo = {\r\n // productUserId: fakeUserId, // 后端逻辑会从请求头获取,所以不需要传\r\n // tpChannelId: 'H5' // 后端处理\r\n };\r\n }\r\n const sessionID = storeAndLoadFeSessionId();\r\n const ef: object = {\r\n ...{ sessionID, rtc: curReqInfo.rtc, requestId: curReqInfo.requestId },\r\n ...eventInfo\r\n };\r\n const realUserInfo: DataType = Object.entries(userInfo).map(([k, v]) => ({ name: k, value: v }));\r\n const realEventInfo: DataType = Object.entries(ef)\r\n .map(([k, v]) => v && { name: k, value: v })\r\n .filter(Boolean);\r\n\r\n console.log('======== 事件上报 ========');\r\n console.log('userInfo:', userInfo);\r\n console.log('eventInfo:', ef);\r\n console.log('========= 结束 =========');\r\n\r\n return bffFetch?.('/event/report', {\r\n method: 'POST',\r\n body: { userInfo: realUserInfo, eventInfo: realEventInfo },\r\n type: 'beacon'\r\n });\r\n },\r\n [bffFetch, curReqInfo, enableReportEvent]\r\n );\r\n\r\n const bffFbReport = useCallback(\r\n ({\r\n eventName,\r\n actionSource = 'website',\r\n eventSourceUrl = window?.location?.href,\r\n externalId\r\n }: {\r\n eventName: string;\r\n actionSource?: string;\r\n eventSourceUrl?: string;\r\n externalId?: string;\r\n }) => {\r\n if (!enableReportEvent || !enabledMetaConversionApi) {\r\n return;\r\n }\r\n const fakeUserId = storeAndLoadFeUserId();\r\n return bffFetch?.('/fb/events', {\r\n method: 'POST',\r\n body: {\r\n eventName,\r\n actionSource,\r\n eventSourceUrl,\r\n userData: {\r\n externalId: fakeUserId\r\n }\r\n },\r\n type: 'beacon'\r\n });\r\n },\r\n [bffFetch, enableReportEvent, enabledMetaConversionApi]\r\n );\r\n\r\n const bffMutateLike = useCallback(\r\n async (body: { content: string }) => {\r\n const res = await bffFetch?.('/recommend/like', { method: 'POST', body });\r\n return res?.success;\r\n },\r\n [bffFetch]\r\n );\r\n\r\n const bffMutateUnlike = useCallback(\r\n async (body: { videoItemId: string }) => {\r\n const res = await bffFetch?.('/recommend/unlike', { method: 'POST', body });\r\n return res?.success;\r\n },\r\n [bffFetch]\r\n );\r\n\r\n const bffSubmitForm = useCallback(\r\n async (body: { attributes: Array<{ name: string; value: string }> }) => {\r\n const res = await bffFetch?.('/customform', { method: 'POST', body });\r\n return res?.success;\r\n },\r\n [bffFetch]\r\n );\r\n\r\n // 获取 Tag\r\n const bffGetTagList = useCallback(async () => {\r\n if (!utmVal || !isShowTag) return;\r\n try {\r\n const val =\r\n utmVal\r\n ?.split('&')\r\n ?.filter((val) => {\r\n const key = val.split('=')[0];\r\n return UTM_KEYS.includes(key);\r\n })\r\n ?.join('&') ?? '';\r\n const result = await bffFetch?.('/tag/list', { method: 'GET', query: { channel: decodeURIComponent(val) } });\r\n setTagList(result?.data?.tags ?? []);\r\n } catch (e) {\r\n console.log('e', e);\r\n }\r\n }, [bffFetch, utmVal, isShowTag]);\r\n\r\n const ctaEvent = useCallback(\r\n (eventInfo: any, rec?: RecItemType, product?: ProductInfoType | VideoInfoType | null, position?: number) => {\r\n const cta = product?.bindCta;\r\n const isProd = rec?.video?.bindProduct || (rec?.video?.bindProducts && rec?.video?.bindProducts?.length > 0);\r\n let fromKName = '';\r\n if (isFromHashtag) {\r\n fromKName = 'hashTagPage';\r\n } else if (rec?.video?.url) {\r\n fromKName = 'videoPage';\r\n } else if (rec?.video?.imgUrls?.length) {\r\n fromKName = 'imagePage';\r\n }\r\n bffEventReport?.({\r\n eventInfo: {\r\n ...eventInfo,\r\n ctaId: cta?.itemId ?? '',\r\n ctaName: cta?.title ?? '',\r\n contentTags: JSON.stringify(cta?.tags),\r\n position: position + '',\r\n contentId: rec?.video?.itemId ?? '',\r\n productId: isProd ? product?.itemId : '',\r\n traceInfo: cta?.traceInfo ?? '',\r\n fromKName\r\n }\r\n });\r\n },\r\n [bffEventReport, isFromHashtag]\r\n );\r\n\r\n const h5EnterLink = useCallback(() => {\r\n const queryString = location.search.slice(1);\r\n const params = qs.parse(queryString.replace(/\\+/g, '%2B')) as any;\r\n for (const key in params) {\r\n params[key] = params[key].replace(/%2B/g, '+');\r\n }\r\n const getVal = (key: string) => params[key] ?? '';\r\n const time: any = new Date();\r\n curTime.current = time;\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'h5LinkEnterFeed',\r\n eventDescription: 'User enter h5 link',\r\n utmSource: getVal('utm_source'),\r\n utmMedium: getVal('utm_medium'),\r\n utmCampaign: getVal('utm_campaign'),\r\n utmId: getVal('utm_id'),\r\n utmContent: getVal('utm_content'),\r\n enterTime: Math.floor(time / 1000) + '',\r\n requestId: null,\r\n enterUrl: window?.location?.href ?? '',\r\n clSource: getVal('cl_source')\r\n }\r\n });\r\n }, [bffEventReport]);\r\n\r\n useEffect(() => {\r\n if (!isShowConsent) h5EnterLink();\r\n }, [isShowConsent]);\r\n\r\n useEffect(() => {\r\n if (isShowConsent) return;\r\n setLoading(true);\r\n bffGetTagList();\r\n getRecommendVideos()\r\n .then((data) => {\r\n setRtcList(data?.recList ?? []);\r\n setCacheRtcList(data?.recList ?? []);\r\n })\r\n .finally(() => {\r\n bffEventReport({\r\n eventInfo: {\r\n eventSubject: 'apiRequest',\r\n eventDescription: 'api request succeed'\r\n }\r\n });\r\n setLoading(false);\r\n isInit.current = true;\r\n });\r\n }, [isShowConsent]);\r\n\r\n useEffect(() => {\r\n if (!isInit.current) return;\r\n setLoading(true);\r\n bffGetTagList();\r\n getRecommendVideos()\r\n .then((data) => {\r\n setRtcList(data?.recList ?? []);\r\n setCacheRtcList(data?.recList ?? []);\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n }, [getRecommendVideos, bffGetTagList]);\r\n\r\n const defaultLoadingImage = useIconLink('/pb_static/a65d23c5893c49d7aaaa81681d3179e2.gif', appDomain);\r\n\r\n return (\r\n <SxpDataSourceContext.Provider\r\n value={{\r\n rtcList,\r\n setRtcList,\r\n mutateLike: bffMutateLike,\r\n mutateUnlike: bffMutateUnlike,\r\n submitForm: bffSubmitForm,\r\n popupDetailData,\r\n loadVideos,\r\n setPopupDetailData,\r\n getRecommendVideos,\r\n bffEventReport,\r\n utmVal,\r\n isPreview,\r\n loading,\r\n sxpParameter,\r\n waterFallData,\r\n setWaterFallData,\r\n ctaEvent,\r\n swiperRef,\r\n openHashtag,\r\n setOpenHashtag,\r\n cacheRtcList,\r\n setCacheRtcList,\r\n cacheActiveIndex,\r\n setCacheActiveIndex,\r\n isFromHashtag,\r\n setIsFromHashtag,\r\n appDomain,\r\n hashTagSize,\r\n loadingImage: loadingImage ?? defaultLoadingImage,\r\n isOpenHashTag,\r\n tagList,\r\n setLoading,\r\n videoRef,\r\n setVideoRef,\r\n bffFbReport,\r\n isAgreePolicy,\r\n setIsAgreePolicy,\r\n curTime,\r\n h5EnterLink,\r\n themeTag,\r\n isShowConsent,\r\n selectTag,\r\n setSelectTag\r\n }}\r\n >\r\n {isShowConsent ? (\r\n <Consent {...globalConfig?.consent?.[0]?.item?.props} />\r\n ) : (\r\n render({\r\n rtcList,\r\n mutateLike: bffMutateLike,\r\n mutateUnlike: bffMutateUnlike,\r\n submitForm: bffSubmitForm,\r\n tagList\r\n })\r\n )}\r\n </SxpDataSourceContext.Provider>\r\n );\r\n};\r\n\r\nexport default memo(SxpDataSourceProvider);\r\n","import { useContext } from 'react';\r\nimport { SxpDataSourceContext } from '../context/SxpDataSourceProvider';\r\n\r\nexport function useSxpDataSource() {\r\n return useContext(SxpDataSourceContext);\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 13:56:30\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-20 14:57:12\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\hooks\\useCurrentNode.ts\r\n *\r\n */\r\nexport enum DATA_TYPE {\r\n STRING = 'string',\r\n NUMBER = 'number',\r\n ARRAY = 'array',\r\n OBJECT = 'object',\r\n BOOLEAN = 'boolean',\r\n ARRAY_OBJECT = 'array-object',\r\n ARRAY_STRING = 'array-string',\r\n ARRAY_NUMBER = 'array-number'\r\n}\r\n","import React, { FC, PropsWithChildren, createContext, memo, useCallback, useEffect, useState } from 'react';\r\nimport { isEqual } from 'lodash';\r\nimport { ISchema } from '../schema';\r\nimport { useEditor } from '../hooks';\r\nimport getDataByDS from '../utils/getDataByDS';\r\n\r\nexport interface IDataSourceContext {\r\n $store?: any;\r\n options: Array<{ label: string; value: string }>;\r\n configs: ISchema['dataSource'];\r\n}\r\n\r\nexport interface IDataSourceProviderProps {\r\n isSsr?: boolean;\r\n enable?: boolean;\r\n}\r\n\r\nexport const DataSourceContext = createContext<IDataSourceContext>({ $store: {}, options: [], configs: [] });\r\n\r\nconst DataSourceProvider: FC<PropsWithChildren<IDataSourceProviderProps>> = ({ children, isSsr, enable }) => {\r\n const [options, setOptions] = useState<Array<{ label: string; value: string }>>([]);\r\n const { schema } = useEditor();\r\n const [store, setStore] = useState<Record<string, any>>(schema.__STORE__ || {});\r\n const [configs, setConfigs] = useState<ISchema['dataSource']>([]);\r\n\r\n useEffect(() => {\r\n if (isSsr) return;\r\n if (!isEqual(configs, schema?.dataSource)) {\r\n setConfigs(schema?.dataSource ?? []);\r\n }\r\n }, [schema?.dataSource, isSsr]);\r\n\r\n // 获取数据源数据\r\n const getDataSource = useCallback(async () => {\r\n const { $store, idMapName } = await getDataByDS('', configs);\r\n setStore($store);\r\n getOptions($store, idMapName);\r\n }, [configs]);\r\n\r\n const getOptions = ($store: Record<string, any>, idMapName: Record<string, string>) => {\r\n const _options: Array<{ label: string; value: string }> = [];\r\n Object.entries($store).forEach(([key, value]) => {\r\n Object.keys(value).forEach((childKey) => {\r\n const item = { label: `${idMapName[key]} - ${childKey}`, value: `{{ ${key}.${childKey} }}` };\r\n _options.push(item);\r\n });\r\n });\r\n setOptions(_options);\r\n };\r\n\r\n useEffect(() => {\r\n if (!isSsr) {\r\n getDataSource();\r\n }\r\n }, [getDataSource, isSsr, schema]);\r\n\r\n if (!enable) {\r\n return children;\r\n }\r\n\r\n return (\r\n <DataSourceContext.Provider value={{ $store: schema.__STORE__ || store, options, configs }}>\r\n {children}\r\n </DataSourceContext.Provider>\r\n );\r\n};\r\n\r\nexport default memo(DataSourceProvider);\r\n","import React, {\r\n PropsWithChildren,\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useImperativeHandle,\r\n useState,\r\n useMemo\r\n} from 'react';\r\nimport { cloneDeep } from 'lodash';\r\nimport { MaterialComponet } from '../create';\r\nimport { ISchema } from '../schema';\r\nimport DataSourceProvider from './DataSourceProvider';\r\nimport { uuid } from '@/core/utils/tool';\r\n\r\nexport interface IPageParams {\r\n state: string;\r\n name: string;\r\n type: string;\r\n title?: string;\r\n description?: string;\r\n data: object;\r\n app_id: string;\r\n key_word?: string;\r\n share_title?: string;\r\n share_description?: string;\r\n h5_url?: string;\r\n mp_rul?: string;\r\n}\r\nexport type IPopupAniType = { name?: string; duration?: number };\r\nexport type IPopupType = { id: string } & IPopupAniType;\r\n\r\nexport interface IEditorContext {\r\n resolver: Record<string, MaterialComponet>;\r\n currentNode: any | null;\r\n schema: {\r\n pointData: any[];\r\n dataSource: ISchema['dataSource'];\r\n mobilePiontData: any[];\r\n pcPiontData: any[];\r\n type: 'PC' | 'mobile';\r\n pageInfo: ISchema['pageInfo'];\r\n pcPageConf: any;\r\n mobilePageConf: any;\r\n __STORE__?: Record<string, any>;\r\n sxpPageConf: Record<string, any>;\r\n };\r\n setSchema?: React.Dispatch<\r\n React.SetStateAction<{\r\n pointData: any[];\r\n dataSource: ISchema['dataSource'];\r\n mobilePiontData: any[];\r\n pcPiontData: any[];\r\n type: 'PC' | 'mobile';\r\n pageInfo: ISchema['pageInfo'];\r\n pcPageConf: any;\r\n mobilePageConf: any;\r\n __STORE__?: Record<string, any>;\r\n sxpPageConf: Record<string, any>;\r\n }>\r\n >;\r\n pageInfoData: any;\r\n setPageInfoData?: (pageData: IPageParams) => void;\r\n setCurrentNode?: React.Dispatch<React.SetStateAction<any | null>>;\r\n saveDataSource?: (dataSource: any[]) => void;\r\n prePiontData: any[];\r\n setPrePiontData?: React.Dispatch<React.SetStateAction<any[]>>;\r\n undoStack: any[];\r\n redoStack: any[];\r\n setUndoStack?: React.Dispatch<React.SetStateAction<any[]>>;\r\n setRedoStack?: React.Dispatch<React.SetStateAction<any[]>>;\r\n getCurPageConf?: any;\r\n popup: IPopupType;\r\n setPopup: React.Dispatch<React.SetStateAction<IPopupType>>;\r\n}\r\n\r\nexport interface IEditorCoreProps {\r\n resolver: Record<string, MaterialComponet>;\r\n isSsr?: boolean;\r\n schema?: any;\r\n enableDataSource?: boolean;\r\n utmVal?: string;\r\n}\r\n\r\nexport interface IEditorCoreRef {\r\n loadSchema: (schema: any) => void;\r\n exportSchema: () => any;\r\n getPageInfoData: () => any;\r\n initPageInfoData: (pageData: IPageParams) => void;\r\n}\r\n\r\nconst item = {\r\n id: uuid(6, 10),\r\n item: {\r\n type: 'common',\r\n h: 300,\r\n category: 'block',\r\n displayName: 'block',\r\n isFirstLayout: true,\r\n w: 1000\r\n },\r\n point: {\r\n i: 'x-0',\r\n x: -38.34375,\r\n y: 0,\r\n w: 1000,\r\n h: 300,\r\n isBounded: true,\r\n actualX: 0,\r\n actualY: 0\r\n },\r\n pathArr: [0],\r\n positionY: 0\r\n};\r\n\r\nconst popupInit = {\r\n id: '',\r\n duration: 0,\r\n name: 'none'\r\n};\r\n\r\nexport const EditorContext = React.createContext<IEditorContext>({\r\n resolver: {},\r\n currentNode: null,\r\n schema: {\r\n pointData: [],\r\n dataSource: [],\r\n mobilePiontData: [],\r\n type: 'PC',\r\n pcPiontData: [],\r\n pageInfo: {},\r\n pcPageConf: {},\r\n mobilePageConf: {},\r\n __STORE__: {},\r\n sxpPageConf: {}\r\n },\r\n pageInfoData: {},\r\n prePiontData: [],\r\n undoStack: [item],\r\n redoStack: [],\r\n popup: popupInit,\r\n setPopup: () => {}\r\n});\r\n\r\nconst EditorCore = forwardRef<IEditorCoreRef, PropsWithChildren<IEditorCoreProps>>(\r\n ({ children, resolver, isSsr, schema, enableDataSource = true, utmVal }, ref) => {\r\n const [currentNode, setCurrentNode] = useState<any | null>(null);\r\n const [_schema, setSchema] = useState<{\r\n pointData: any[];\r\n dataSource: ISchema['dataSource'];\r\n mobilePiontData: any[];\r\n pcPiontData: any[];\r\n type: 'PC' | 'mobile';\r\n pageInfo: ISchema['pageInfo'];\r\n pcPageConf: any;\r\n mobilePageConf: any;\r\n __STORE__?: Record<string, any>;\r\n sxpPageConf: Record<string, any>;\r\n }>(\r\n schema || {\r\n pointData: [item],\r\n dataSource: [],\r\n mobilePiontData: [],\r\n type: 'PC',\r\n pcPiontData: [],\r\n pageInfo: {},\r\n pcPageConf: {},\r\n mobilePageConf: {},\r\n sxpPageConf: {}\r\n }\r\n );\r\n // 拖拽前的数据位置和大小\r\n const [prePiontData, setPrePiontData] = useState([item]);\r\n\r\n /**\r\n * undo / redo\r\n * stop 事件、resize 事件、拖进画布、复制、删除 等操作,需要把数据push到队列\r\n */\r\n const [undoStack, setUndoStack] = useState<any[]>([[item]]);\r\n const [redoStack, setRedoStack] = useState<any[]>([]);\r\n const [popup, setPopup] = useState<IPopupType>(popupInit);\r\n typeof window !== 'undefined' &&\r\n (window.sxpPopup = (type: string, aniType?: IPopupAniType) => {\r\n setPopup({\r\n ...popupInit,\r\n id: type,\r\n ...aniType\r\n });\r\n });\r\n\r\n typeof window !== 'undefined' &&\r\n (window.getJointUtmLink = (url: string) => {\r\n if (url?.indexOf('?') !== -1) {\r\n return url + (utmVal ? '&' + utmVal : '');\r\n } else {\r\n return url + (utmVal ? '?' + utmVal : '');\r\n }\r\n });\r\n\r\n // 切换页面类型,清空操作栈\r\n useEffect(() => {\r\n setUndoStack([_schema.pointData]);\r\n setRedoStack([]);\r\n }, [_schema.type]);\r\n\r\n // 保存数据源配置\r\n const saveDataSource = useCallback(\r\n (dataSource: any[]) => {\r\n const schema = cloneDeep(_schema);\r\n if (!schema) return;\r\n schema.dataSource = dataSource;\r\n setSchema?.(schema);\r\n },\r\n [_schema]\r\n );\r\n\r\n const [_pageInfoData, _setPageInfoData] = useState<IPageParams>();\r\n\r\n useImperativeHandle(ref, () => ({\r\n // 加载渲染协议\r\n loadSchema(schema) {\r\n if (schema) {\r\n setUndoStack([schema.pointData]);\r\n setSchema(schema);\r\n }\r\n },\r\n\r\n // 导出渲染协议\r\n exportSchema() {\r\n return cloneDeep(_schema);\r\n },\r\n\r\n // 获取页面信息\r\n getPageInfoData() {\r\n return _pageInfoData;\r\n },\r\n\r\n // 设置页面信息\r\n initPageInfoData(pageData: IPageParams) {\r\n if (pageData) {\r\n _setPageInfoData(pageData);\r\n }\r\n }\r\n }));\r\n\r\n // 获取页面配置\r\n const getCurPageConf = useMemo(() => {\r\n if (!_schema) return;\r\n if (_schema.type === 'PC') {\r\n return _schema.pcPageConf;\r\n } else {\r\n return _schema.mobilePageConf;\r\n }\r\n }, [_schema]);\r\n\r\n return (\r\n <EditorContext.Provider\r\n value={{\r\n resolver,\r\n currentNode,\r\n schema: _schema,\r\n setCurrentNode,\r\n setSchema,\r\n saveDataSource,\r\n prePiontData,\r\n setPrePiontData,\r\n pageInfoData: _pageInfoData,\r\n setPageInfoData: (params: IPageParams) => _setPageInfoData({ ..._pageInfoData, ...params }),\r\n undoStack,\r\n redoStack,\r\n setRedoStack,\r\n setUndoStack,\r\n getCurPageConf,\r\n popup,\r\n setPopup\r\n }}\r\n >\r\n <DataSourceProvider isSsr={isSsr} enable={enableDataSource}>\r\n {children}\r\n </DataSourceProvider>\r\n </EditorContext.Provider>\r\n );\r\n }\r\n);\r\n\r\nexport { EditorCore };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-04-28 14:42:22\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-23 17:01:21\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\defaultSetting.ts\r\n *\r\n */\r\nexport const fontOptions = [{ label: 'defalut', value: 'appFont' }];\r\n\r\nconst sxpFonts = typeof window !== 'undefined' && window?.localStorage.getItem('sxp_font_links');\r\nconst data = sxpFonts && sxpFonts !== '' ? JSON.parse(sxpFonts) : [];\r\nexport default {\r\n fontOptions: [...fontOptions, ...data]\r\n};\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-27 11:48:04\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\AppointForm\\settingRender.tsx\r\n *\r\n */\r\n\r\nimport defaultSetting, { fontOptions } from '../../defaultSetting';\r\n\r\nexport default [\r\n {\r\n type: 'Text',\r\n label: '组件名称',\r\n name: 'name'\r\n },\r\n {\r\n title: '表单信息',\r\n child: [\r\n {\r\n type: 'Text',\r\n label: '标题',\r\n name: ['props', 'title']\r\n },\r\n {\r\n type: 'Group',\r\n label: '标题字体',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['textStyle', 'color']\r\n },\r\n\r\n {\r\n type: 'Select',\r\n name: ['textStyle', 'fontFamily'],\r\n options: fontOptions,\r\n initialValue: fontOptions?.[0]?.value\r\n },\r\n {\r\n type: 'Number',\r\n name: ['textStyle', 'fontSize'],\r\n addonAfter: 'px'\r\n }\r\n ]\r\n },\r\n {\r\n label: '标题样式',\r\n type: 'TextStyle',\r\n name: ['textStyle']\r\n },\r\n {\r\n label: '标题对齐',\r\n type: 'TextAlign',\r\n name: ['textStyle']\r\n },\r\n {\r\n label: '表单布局',\r\n type: 'Radius',\r\n options: [\r\n {\r\n label: '左右',\r\n value: 'horizontal'\r\n },\r\n {\r\n label: '上下',\r\n value: 'vertical'\r\n },\r\n {\r\n label: '提示',\r\n value: undefined\r\n }\r\n ],\r\n name: ['props', 'layoutType']\r\n },\r\n {\r\n label: '提交按钮文本',\r\n type: 'Text',\r\n name: ['props', 'submitText']\r\n },\r\n {\r\n type: 'Group',\r\n label: '提交按钮字体',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'submitButtonStyle', 'color'],\r\n initialValue: '#fff'\r\n },\r\n\r\n {\r\n type: 'Select',\r\n name: ['props', 'submitButtonStyle', 'fontFamily'],\r\n options: defaultSetting?.fontOptions,\r\n initialValue: defaultSetting?.fontOptions?.[0]?.value\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'submitButtonStyle', 'fontSize'],\r\n addonAfter: 'px',\r\n initialValue: 12\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextStyle',\r\n name: ['props', 'submitButtonStyle']\r\n },\r\n {\r\n type: 'TextAlign',\r\n name: ['props', 'submitButtonStyle']\r\n },\r\n {\r\n label: '提交按钮颜色',\r\n type: 'Color',\r\n name: ['props', 'submitBgColor']\r\n }\r\n // {\r\n // label: '接收内容接口地址',\r\n // type: 'TextArea',\r\n // name: ['props', 'submitApiUrl'],\r\n // labelCol: {\r\n // span: 24\r\n // }\r\n // },\r\n // {\r\n // label: '接收表单结果邮箱',\r\n // type: 'TextArea',\r\n // name: ['props', 'submitEmail'],\r\n // labelCol: {\r\n // span: 24\r\n // }\r\n // }\r\n ]\r\n },\r\n {\r\n title: '表单项',\r\n child: [\r\n {\r\n type: 'AddFormItems',\r\n name: ['props', 'columns']\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-12 10:59:06\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-20 13:39:07\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\hooks\\useEventReport.ts\r\n *\r\n */\r\nimport { useCallback } from 'react';\r\nimport { RecItemType } from '../components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from './useSxpDataSource';\r\nimport { DEFAULT_TAG } from '../context/SxpDataSourceProvider';\r\n\r\nexport function useEventReport() {\r\n const { bffEventReport, popupDetailData, waterFallData, isFromHashtag } = useSxpDataSource();\r\n\r\n const jumpToWeb = useCallback(\r\n (data?: RecItemType, product?: RecItemType['product'], cta?: RecItemType['cta'], position?: number) => {\r\n let fromKName = '';\r\n if (popupDetailData && (data?.video?.bindProducts?.length || data?.video?.bindProduct)) {\r\n fromKName = 'pdpPage';\r\n } else if (isFromHashtag) {\r\n fromKName = 'hashTagPage';\r\n } else if (data?.video?.url) {\r\n fromKName = 'videoPage';\r\n } else if (data?.video?.imgUrls && data?.video?.imgUrls?.length) {\r\n fromKName = 'imagePage';\r\n } else if (data?.product) {\r\n fromKName = 'productPage';\r\n }\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'jumpToWeb',\r\n eventDescription: 'User jumped to website',\r\n productId: product?.itemId ?? '',\r\n productName: product?.title ?? '',\r\n price: product?.price ? product?.price + '' : '0',\r\n productCollection: product?.collection ?? '',\r\n fromKName,\r\n fromKPage: location?.href,\r\n contentTags: product?.tags ? JSON.stringify(product?.tags) : '',\r\n position: position + '',\r\n contentId: data?.video?.itemId ?? '',\r\n ctatId: cta?.itemId ?? '',\r\n traceInfo: product?.traceInfo ?? ''\r\n }\r\n });\r\n },\r\n [bffEventReport, popupDetailData, isFromHashtag]\r\n );\r\n\r\n const productView = useCallback(\r\n (\r\n data?: RecItemType,\r\n product?: RecItemType['product'],\r\n cta?: RecItemType['cta'],\r\n viewTime?: any,\r\n position?: number\r\n ) => {\r\n let fromKName = '';\r\n if (popupDetailData && (data?.video?.bindProducts?.length || data?.video?.bindProduct)) {\r\n fromKName = 'pdpPage';\r\n } else if (data?.product) {\r\n fromKName = 'productPage';\r\n }\r\n bffEventReport?.({\r\n eventInfo: {\r\n productId: product?.itemId,\r\n productName: product?.title,\r\n price: product?.price ? product?.price + '' : '0',\r\n productCollection: product?.collection,\r\n fromKName,\r\n fromKPage: location?.href,\r\n contentTags: JSON.stringify(product?.tags),\r\n position: position + '',\r\n contentId: data?.video?.itemId,\r\n ctatId: cta?.itemId,\r\n traceInfo: product?.traceInfo,\r\n timeOnSite: Math.floor(((new Date() as any) - viewTime) / 1000) + '',\r\n eventSubject: 'productView',\r\n eventDescription: 'User browsed the product'\r\n }\r\n });\r\n },\r\n [bffEventReport, popupDetailData]\r\n );\r\n\r\n const backMainFeed = useCallback(\r\n (lastFeed: 'theme' | 'branch' | 'external', selectTag?: string, themeTag?: string, hashTag?: string) => {\r\n if (selectTag && selectTag === DEFAULT_TAG) {\r\n bffEventReport?.({\r\n eventInfo: {\r\n lastFeed,\r\n themeTags: themeTag ? `['${themeTag}']` : '',\r\n hashTags: hashTag ? `['${hashTag}']` : '',\r\n eventSubject: 'backMainFeed',\r\n eventDescription: 'back Main Feed'\r\n }\r\n });\r\n }\r\n },\r\n [bffEventReport]\r\n );\r\n\r\n return {\r\n jumpToWeb,\r\n productView,\r\n backMainFeed\r\n };\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-21 10:48:07\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\AppointForm\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { CSSProperties, FC, memo, useMemo, useRef, useState } from 'react';\r\nimport { cloneDeep, debounce } from 'lodash';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport './index.less';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\n\r\nexport interface IAppointFormProps {\r\n columns?: any[];\r\n title: string;\r\n style?: Record<string, any>;\r\n textStyle?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n submitBgColor?: string;\r\n submitColor?: string;\r\n submitText?: string;\r\n submitApiUrl?: string;\r\n submitEmail?: string;\r\n layoutType?: 'horizontal' | 'vertical' | 'inline';\r\n isExternalLink?: boolean;\r\n isPopup?: boolean;\r\n submitButtonStyle?: CSSProperties;\r\n onClick?: () => void;\r\n onClose?: () => void;\r\n}\r\n\r\ntype DataItem = {\r\n name: string;\r\n state: string;\r\n};\r\n\r\nconst AppointForm: FC<IAppointFormProps> = ({\r\n columns,\r\n style,\r\n title,\r\n textStyle,\r\n submitBgColor,\r\n submitColor,\r\n submitText,\r\n layoutType,\r\n isExternalLink,\r\n isPopup,\r\n onClick,\r\n onClose,\r\n submitButtonStyle,\r\n ...props\r\n}) => {\r\n const { submitForm, popupDetailData } = useSxpDataSource();\r\n const { jumpToWeb } = useEventReport();\r\n const formRef = useRef<any>();\r\n const [loading, setLoading] = useState(false);\r\n const defaultColumns = useMemo(\r\n () => [\r\n {\r\n title: '',\r\n dataIndex: 'field',\r\n valueType: 'text',\r\n key: '1'\r\n },\r\n {\r\n title: '',\r\n dataIndex: 'field',\r\n valueType: 'text',\r\n key: '2'\r\n },\r\n {\r\n title: '',\r\n dataIndex: 'field',\r\n valueType: 'text',\r\n key: '3'\r\n },\r\n {\r\n title: '',\r\n dataIndex: 'field',\r\n valueType: 'text',\r\n key: '4'\r\n }\r\n ],\r\n []\r\n );\r\n\r\n const columnsData = useMemo(() => {\r\n if (layoutType === undefined) {\r\n const list = cloneDeep(columns) || defaultColumns;\r\n return list?.map((obj: any) => ({ ...obj, title: undefined, fieldProps: { placeholder: obj?.title } }));\r\n } else {\r\n return cloneDeep(columns) || defaultColumns;\r\n }\r\n }, [layoutType, columns, defaultColumns]);\r\n\r\n const handleSubmit = debounce(async () => {\r\n const vals = await formRef?.current?.getFieldsValue();\r\n if (!vals) return;\r\n const arr = Object.keys(vals)\r\n ?.map((key) => ({\r\n name: key,\r\n value: vals[key] ?? ''\r\n }))\r\n ?.filter((item: any) => item?.value);\r\n if (!arr || !arr?.length) return;\r\n setLoading(true);\r\n const res = (await submitForm?.({ attributes: arr })) as any;\r\n setLoading(false);\r\n if (res) {\r\n if (isExternalLink) {\r\n const data = popupDetailData as RecItemType;\r\n const product = data?.video?.bindProduct;\r\n const cta = data?.video?.bindProduct?.bindCta;\r\n const position = popupDetailData?.index as number;\r\n jumpToWeb(data, product, cta, position);\r\n }\r\n if (!isPopup) {\r\n onClose?.();\r\n }\r\n onClick?.();\r\n }\r\n }, 1000);\r\n\r\n return (\r\n <div className='pb-appoint-form'>\r\n <div\r\n className={`pb-appoint-form-title ${css({\r\n ...textStyle\r\n })}`}\r\n >\r\n {title}\r\n </div>\r\n <div className={css({ ...style })} {...props}>\r\n <div className='pb-appoint-form-container'>\r\n \r\n </div>\r\n </div>\r\n <div className='pb-appoint-form-btn-wrapper'>\r\n <button\r\n aria-label={submitText}\r\n onClick={handleSubmit}\r\n className='pb-appoint-form-btn'\r\n style={{\r\n color: submitColor,\r\n background: submitBgColor,\r\n ...submitButtonStyle\r\n }}\r\n >\r\n {loading ? <>loading...</> : submitText}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(AppointForm);\r\n","import { DATA_TYPE } from './hooks';\r\nexport interface IMaterialOptions<T> {\r\n displayName: string; // 组件名\r\n icon: React.ReactNode; // 组件显示图标\r\n category: string; // 组件类别\r\n type: string; // 组件类型\r\n related?: {\r\n settingRender?: Record<string, any>; // 属性渲染协议\r\n bindableProps?: Array<{ label: string; value: keyof T; dataType: Array<DATA_TYPE> }>; // 可数据绑定的组件属性\r\n [key: string]: any;\r\n }; // 组件相关属性\r\n h?: number; // 组件高度\r\n w?: number; // 组件宽度\r\n disableDragging?: boolean; // 是否可以拖拽\r\n isFirstLayout?: boolean; // 是否为第一层级布局组件\r\n defaulSetting?: defaulSettingProps<T>; // 默认参数\r\n defaulMobileSetting?: defaulSettingProps<T>; // 手机端默认参数,没有则取defaulSetting\r\n mobileH?: number; // 组件手机端高度,没有则取h\r\n mobileW?: number; // 组件手机端宽度,没有则取w\r\n sort: number; // 排序编号,越小排越前\r\n}\r\n\r\ntype defaulSettingProps<T> = {\r\n style?: React.CSSProperties;\r\n props?: T;\r\n textStyle?: React.CSSProperties;\r\n name?: string;\r\n};\r\n\r\nexport type MaterialComponet<T = any> = React.ComponentType<T> & { extend?: IMaterialOptions<T> };\r\n\r\nexport function createMaterial<T>(component: MaterialComponet<T>, options: IMaterialOptions<T>) {\r\n component.extend = options;\r\n return component;\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-12 17:35:22\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\AppointForm\\material.tsx\r\n *\r\n */\r\nimport interactionRender from './interactionRender';\r\nimport settingRender from './settingRender';\r\nimport AppointFormComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst AppointForm = createMaterial(AppointFormComponent, {\r\n displayName: '预约表单',\r\n icon: '',\r\n category: 'popup',\r\n type: 'AppointForm',\r\n related: {\r\n settingRender,\r\n bindableProps: [],\r\n interactionRender\r\n },\r\n defaulSetting: {\r\n name: '表单',\r\n props: {\r\n title: 'Appointment Booking',\r\n submitColor: '#fff',\r\n submitBgColor: '#000',\r\n submitText: 'Submit',\r\n layoutType: undefined\r\n },\r\n style: {},\r\n textStyle: {\r\n fontSize: 14,\r\n color: '#000',\r\n textAlign: 'center'\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 2\r\n});\r\n\r\nexport { AppointForm };\r\n","import { fontOptions } from '../../defaultSetting';\r\nexport default [\r\n {\r\n title: '商品图片',\r\n child: [\r\n {\r\n type: 'Radius',\r\n label: '轮播指示器',\r\n options: [\r\n {\r\n label: '居左',\r\n value: 'left'\r\n },\r\n {\r\n label: '居中',\r\n value: 'center'\r\n }\r\n ],\r\n name: ['props', 'swiper', 'dotsAlign']\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'swiper', 'delay'],\r\n addonAfter: 's'\r\n },\r\n {\r\n type: 'Group',\r\n child: [\r\n {\r\n label: '居中垂直偏移',\r\n type: 'Number',\r\n name: ['props', 'swiper', 'translateY'],\r\n min: -1000,\r\n addonAfter: '%',\r\n initialValue: 0\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: '商品文本',\r\n child: [\r\n {\r\n name: ['props', 'commodityStyles'],\r\n type: 'SelectLinkage',\r\n child: [\r\n {\r\n label: '字段',\r\n type: 'Select',\r\n options: [\r\n {\r\n label: '商品名称',\r\n value: 'title'\r\n },\r\n {\r\n label: '系列名称',\r\n value: 'collection'\r\n },\r\n {\r\n label: '价格',\r\n value: 'price'\r\n },\r\n {\r\n label: '商品描述',\r\n value: 'info'\r\n }\r\n ],\r\n name: ['props', 'commodityStyles', 'field'],\r\n initialValue: 'title'\r\n },\r\n {\r\n type: 'Group',\r\n child: [\r\n {\r\n label: '上边距',\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['marginTop']\r\n },\r\n {\r\n label: '下边距',\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['marginBottom']\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '标题字体',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['color']\r\n },\r\n {\r\n type: 'Select',\r\n options: fontOptions,\r\n name: ['fontFamily'],\r\n initialValue: fontOptions?.[0]?.value\r\n },\r\n {\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['fontSize']\r\n }\r\n ]\r\n },\r\n {\r\n label: '标题样式',\r\n type: 'TextStyle'\r\n },\r\n {\r\n label: '标题对齐',\r\n type: 'TextAlign'\r\n },\r\n {\r\n label: '默认行数',\r\n type: 'Number',\r\n name: ['lineClamp']\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: '购买按钮样式',\r\n child: [\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['props', 'buttonStyle', 'backgroundColor'],\r\n initialValue: '#000'\r\n },\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextMargin',\r\n name: ['props', 'buttonStyle']\r\n },\r\n {\r\n type: 'Group',\r\n label: '字体',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'buttonStyle', 'color'],\r\n initialValue: '#fff'\r\n },\r\n\r\n {\r\n type: 'Select',\r\n name: ['props', 'buttonStyle', 'fontFamily'],\r\n options: fontOptions,\r\n initialValue: fontOptions?.[0]?.value\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'fontSize'],\r\n addonAfter: 'px'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextStyle',\r\n name: ['props', 'buttonStyle']\r\n },\r\n {\r\n type: 'TextAlign',\r\n name: ['props', 'buttonStyle']\r\n }\r\n ]\r\n }\r\n];\r\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n if (src === void 0) {\n src = {};\n }\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nconst ssrDocument = {\n body: {},\n addEventListener() {},\n removeEventListener() {},\n activeElement: {\n blur() {},\n nodeName: ''\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() {}\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() {},\n getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n pushState() {},\n go() {},\n back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() {},\n removeEventListener() {},\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n };\n },\n Image() {},\n Date() {},\n screen: {},\n setTimeout() {},\n clearTimeout() {},\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n if (selector === void 0) {\n selector = '';\n }\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction showWarning(text) {\n try {\n console.warn(text);\n return;\n } catch (err) {\n // err\n }\n}\nfunction createElement(tag, classes) {\n if (classes === void 0) {\n classes = [];\n }\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, getSlideTransformEl as g, elementIndex as h, classesToTokens as i, getTranslate as j, elementTransitionEnd as k, isObject as l, makeElementsArray as m, nextTick as n, elementStyle as o, elementNextAll as p, elementPrevAll as q, animateCSSModeScroll as r, setCSSProperty as s, showWarning as t, extend as u, deleteProps as v };\n","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { n as nextTick, d as now } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Mousewheel(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n noMousewheelClass: 'swiper-no-mousewheel'\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n\n // Ignore event if the target or its parents have the swiper-no-mousewheel class\n if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n if (swiper.params.loop) {\n swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\n });\n }\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) {\n return true;\n }\n }\n }\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n function events(method) {\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n targetEl[method]('mouseenter', handleMouseEnter);\n targetEl[method]('mouseleave', handleMouseLeave);\n targetEl[method]('wheel', handle);\n }\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('addEventListener');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('removeEventListener');\n swiper.mousewheel.enabled = false;\n return true;\n }\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n}\n\nexport { Mousewheel as default };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n","function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, f as elementOuterSize, h as elementIndex, a as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(...(params.clickableClass || '').split(' '));\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.classList.remove(...(params.clickableClass || '').split(' '));\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const el = makeElementsArray(swiper.pagination.el);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}\n\nexport { Pagination as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { m as makeElementsArray, i as classesToTokens, c as createElement, n as nextTick, b as elementOffset } from '../shared/utils.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { c as classesToSelector } from '../shared/classes-to-selector.mjs';\n\nfunction Scrollbar(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null\n };\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n dragEl.style.width = `${newSize}px`;\n } else {\n dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n dragEl.style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n el.style.opacity = 1;\n timeout = setTimeout(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n dragEl.style.width = '';\n dragEl.style.height = '';\n trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n if (swiper.isHorizontal()) {\n dragEl.style.width = `${dragSize}px`;\n } else {\n dragEl.style.height = `${dragSize}px`;\n }\n if (divider >= 1) {\n el.style.display = 'none';\n } else {\n el.style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n el.style.opacity = 0;\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n }\n }\n function getPointerPosition(e) {\n return swiper.isHorizontal() ? e.clientX : e.clientY;\n }\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n wrapperEl.style.transitionDuration = '100ms';\n dragEl.style.transitionDuration = '100ms';\n setDragPosition(e);\n clearTimeout(dragTimeout);\n el.style.transitionDuration = '0ms';\n if (params.hide) {\n el.style.opacity = 1;\n }\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault && e.cancelable) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n wrapperEl.style.transitionDuration = '0ms';\n el.style.transitionDuration = '0ms';\n dragEl.style.transitionDuration = '0ms';\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = '';\n wrapperEl.style.transitionDuration = '';\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n function events(method) {\n const {\n scrollbar,\n params\n } = swiper;\n const el = scrollbar.el;\n if (!el) return;\n const target = el;\n const activeListener = params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n target[eventMethod]('pointerdown', onDragStart, activeListener);\n document[eventMethod]('pointermove', onDragMove, activeListener);\n document[eventMethod]('pointerup', onDragEnd, passiveListener);\n }\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n function init() {\n const {\n scrollbar,\n el: swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = document.querySelectorAll(params.el);\n if (!el.length) return;\n } else if (!el) {\n el = params.el;\n }\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\n el = swiperEl.querySelector(params.el);\n }\n if (el.length > 0) el = el[0];\n el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let dragEl;\n if (el) {\n dragEl = el.querySelector(classesToSelector(swiper.params.scrollbar.dragClass));\n if (!dragEl) {\n dragEl = createElement('div', swiper.params.scrollbar.dragClass);\n el.append(dragEl);\n }\n }\n Object.assign(scrollbar, {\n el,\n dragEl\n });\n if (params.draggable) {\n enableDraggable();\n }\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n }\n }\n function destroy() {\n const params = swiper.params.scrollbar;\n const el = swiper.scrollbar.el;\n if (el) {\n el.classList.remove(...classesToTokens(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass));\n }\n disableDraggable();\n }\n on('changeDirection', () => {\n if (!swiper.scrollbar || !swiper.scrollbar.el) return;\n const params = swiper.params.scrollbar;\n let {\n el\n } = swiper.scrollbar;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock changeDirection', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n el\n } = swiper.scrollbar;\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n }\n });\n on('destroy', () => {\n destroy();\n });\n const enable = () => {\n swiper.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n }\n init();\n updateSize();\n setTranslate();\n };\n const disable = () => {\n swiper.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}\n\nexport { Scrollbar as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\n\n/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nfunction Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit,\n params\n } = _ref;\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: false,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime();\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let slideChanged;\n let pausedByInteraction;\n let pausedByPointerEnter;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n if (pausedByPointerEnter || e.detail && e.detail.bySwiperTouchMove) {\n return;\n }\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\n autoplayDelayTotal = swiper.params.autoplay.delay;\n autoplayDelayCurrent = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\n delay = currentSlideDelay;\n autoplayDelayTotal = currentSlideDelay;\n autoplayDelayCurrent = currentSlideDelay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n autoplayStartTime = new Date().getTime();\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n if (slideChanged) {\n autoplayTimeLeft = swiper.params.autoplay.delay;\n }\n slideChanged = false;\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n pausedByPointerEnter = true;\n if (swiper.animating || swiper.autoplay.paused) return;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByPointerEnter = false;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n }\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('_freeModeStaticRelease', () => {\n if (pausedByTouch || pausedByInteraction) {\n resume();\n }\n });\n on('_freeModeNoMomentumRelease', () => {\n if (!swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n slideChanged = true;\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}\n\nexport { Autoplay as default };\n","import { d as now, k as elementTransitionEnd } from '../shared/utils.mjs';\n\nfunction freeMode(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n once\n } = _ref;\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n function onTouchStart() {\n if (swiper.params.cssMode) return;\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n function onTouchMove() {\n if (swiper.params.cssMode) return;\n const {\n touchEventsData: data,\n touches\n } = swiper;\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n function onTouchEnd(_ref2) {\n let {\n currentPos\n } = _ref2;\n if (swiper.params.cssMode) return;\n const {\n params,\n wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper;\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n emit('_freeModeStaticRelease');\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n}\n\nexport { freeMode as default };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, o as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, p as elementNextAll, q as elementPrevAll, j as getTranslate, r as animateCSSModeScroll, n as nextTick, t as showWarning, c as createElement, d as now, u as extend, h as elementIndex, v as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n const device = getDevice();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n const isSafariBrowser = isSafari();\n const need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix,\n need3dFix,\n isWebView\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slides);\n } else if (swiper.grid) {\n swiper.grid.unsetSlides();\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[swiper.getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const offsetSize = (params.slidesOffsetBefore || 0) + (params.slidesOffsetAfter || 0);\n if (allSlidesSize + offsetSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize - offsetSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n swiper.emit('slidesUpdated');\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n }\n toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n let activeSlide;\n let prevSlide;\n let nextSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n if (gridEnabled) {\n activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];\n nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];\n prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];\n } else {\n activeSlide = slides[activeIndex];\n }\n }\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n }\n }\n slides.forEach(slideEl => {\n toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n });\n }\n }\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n swiper.animating = false;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n const {\n centeredSlides\n } = swiper.params;\n let slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (centeredSlides) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(() => {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (threshold === void 0) {\n threshold = 0.5;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed) return;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const initSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = amountOfSlides => {\n for (let i = 0; i < amountOfSlides; i += 1) {\n const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else {\n initSlides();\n }\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}\n\nfunction loopFix(_temp) {\n let {\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n } = _temp === void 0 ? {} : _temp;\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n const {\n centeredSlides\n } = params;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n } else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n }\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n slides.forEach((slide, slideIndex) => {\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n } else {\n appendSlidesIndexes.push(index);\n }\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n swiper.slides.forEach((slide, slideIndex) => {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n if (setTranslate) {\n const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nfunction unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n const window = getWindow();\n const {\n params\n } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n return;\n }\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = e.composedPath ? e.composedPath() : e.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n const id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true,\n detail: {\n bySwiperTouchMove: true\n }\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n new Date().getTime();\n if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetTouch;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;\n } else {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n const swiper = this;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n if (!el || typeof el === 'string') return;\n\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('touchcancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasGrabCursor = swiper.params.grabCursor;\n const isGrabCursor = breakpointParams.grabCursor;\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n if (wasGrabCursor && !isGrabCursor) {\n swiper.unsetGrabCursor();\n } else if (!wasGrabCursor && isGrabCursor) {\n swiper.setGrabCursor();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n if (!el || typeof el === 'string') return;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n eventsPrefix: 'swiper',\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor() {\n let el;\n let params;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n pointerId: null,\n touchId: null\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getDirectionLabel(property) {\n if (this.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n if (exact === void 0) {\n exact = false;\n }\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize);\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n if (el && typeof el !== 'string') {\n el.removeAttribute('style');\n }\n if (wrapperEl) {\n wrapperEl.removeAttribute('style');\n }\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.swiper = null;\n }\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n","/* underscore in name -> watch for changes */\nconst paramsList = ['eventsPrefix', 'injectStyles', 'injectStylesUrls', 'modules', 'init', '_direction', 'oneWayMovement', 'swiperElementNodeName', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', 'breakpointsBase', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_loop', 'loopAdditionalSlides', 'loopAddBlankSlides', 'loopPreventsSliding', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideActiveClass', 'slideVisibleClass', 'slideFullyVisibleClass', 'slideNextClass', 'slidePrevClass', 'slideBlankClass', 'wrapperClass', 'lazyPreloaderClass', 'lazyPreloadPrevNext', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren',\n// modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom', 'control'];\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object' && !o.__swiper__;\n}\nfunction extend(target, src) {\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\nfunction needsNavigation(params) {\n if (params === void 0) {\n params = {};\n }\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\nfunction needsPagination(params) {\n if (params === void 0) {\n params = {};\n }\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\nfunction needsScrollbar(params) {\n if (params === void 0) {\n params = {};\n }\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\nfunction uniqueClasses(classNames) {\n if (classNames === void 0) {\n classNames = '';\n }\n const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);\n const unique = [];\n classes.forEach(c => {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\nfunction attrToProp(attrName) {\n if (attrName === void 0) {\n attrName = '';\n }\n return attrName.replace(/-[a-z]/g, l => l.toUpperCase().replace('-', ''));\n}\nfunction wrapperClass(className) {\n if (className === void 0) {\n className = '';\n }\n if (!className) return 'swiper-wrapper';\n if (!className.includes('swiper-wrapper')) return `swiper-wrapper ${className}`;\n return className;\n}\n\nfunction updateSwiper(_ref) {\n let {\n swiper,\n slides,\n passedParams,\n changedParams,\n nextEl,\n prevEl,\n scrollbarEl,\n paginationEl\n } = _ref;\n const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction' && key !== 'wrapperClass');\n const {\n params: currentParams,\n pagination,\n navigation,\n scrollbar,\n virtual,\n thumbs\n } = swiper;\n let needThumbsInit;\n let needControllerInit;\n let needPaginationInit;\n let needScrollbarInit;\n let needNavigationInit;\n let loopNeedDestroy;\n let loopNeedEnable;\n let loopNeedReloop;\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && currentParams.thumbs && !currentParams.thumbs.swiper) {\n needThumbsInit = true;\n }\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n const destroyModule = mod => {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n if (mod === 'navigation') {\n if (swiper.isElement) {\n swiper[mod].prevEl.remove();\n swiper[mod].nextEl.remove();\n }\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n if (swiper.isElement) {\n swiper[mod].el.remove();\n }\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n if (changedParams.includes('loop') && swiper.isElement) {\n if (currentParams.loop && !passedParams.loop) {\n loopNeedDestroy = true;\n } else if (!currentParams.loop && passedParams.loop) {\n loopNeedEnable = true;\n } else {\n loopNeedReloop = true;\n }\n }\n updateParams.forEach(key => {\n if (isObject(currentParams[key]) && isObject(passedParams[key])) {\n Object.assign(currentParams[key], passedParams[key]);\n if ((key === 'navigation' || key === 'pagination' || key === 'scrollbar') && 'enabled' in passedParams[key] && !passedParams[key].enabled) {\n destroyModule(key);\n }\n } else {\n const newValue = passedParams[key];\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n } else if (changedParams.includes('virtual') && virtual && currentParams.virtual.enabled) {\n if (slides) virtual.slides = slides;\n virtual.update(true);\n }\n if (changedParams.includes('children') && slides && currentParams.loop) {\n loopNeedReloop = true;\n }\n if (needThumbsInit) {\n const initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (needPaginationInit) {\n if (swiper.isElement && (!paginationEl || typeof paginationEl === 'string')) {\n paginationEl = document.createElement('div');\n paginationEl.classList.add('swiper-pagination');\n paginationEl.part.add('pagination');\n swiper.el.appendChild(paginationEl);\n }\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n if (needScrollbarInit) {\n if (swiper.isElement && (!scrollbarEl || typeof scrollbarEl === 'string')) {\n scrollbarEl = document.createElement('div');\n scrollbarEl.classList.add('swiper-scrollbar');\n scrollbarEl.part.add('scrollbar');\n swiper.el.appendChild(scrollbarEl);\n }\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n if (needNavigationInit) {\n if (swiper.isElement) {\n if (!nextEl || typeof nextEl === 'string') {\n nextEl = document.createElement('div');\n nextEl.classList.add('swiper-button-next');\n nextEl.innerHTML = swiper.hostEl.constructor.nextButtonSvg;\n nextEl.part.add('button-next');\n swiper.el.appendChild(nextEl);\n }\n if (!prevEl || typeof prevEl === 'string') {\n prevEl = document.createElement('div');\n prevEl.classList.add('swiper-button-prev');\n prevEl.innerHTML = swiper.hostEl.constructor.prevButtonSvg;\n prevEl.part.add('button-prev');\n swiper.el.appendChild(prevEl);\n }\n }\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n if (loopNeedDestroy || loopNeedReloop) {\n swiper.loopDestroy();\n }\n if (loopNeedEnable || loopNeedReloop) {\n swiper.loopCreate();\n }\n swiper.update();\n}\n\nexport { needsPagination as a, needsScrollbar as b, attrToProp as c, uniqueClasses as d, extend as e, isObject as i, needsNavigation as n, paramsList as p, updateSwiper as u, wrapperClass as w };\n","import { e as extend, p as paramsList, i as isObject, n as needsNavigation, a as needsPagination, b as needsScrollbar } from './update-swiper.mjs';\nimport { d as defaults } from './swiper-core.mjs';\n\nfunction getParams(obj, splitEvents) {\n if (obj === void 0) {\n obj = {};\n }\n if (splitEvents === void 0) {\n splitEvents = true;\n }\n const params = {\n on: {}\n };\n const events = {};\n const passedParams = {};\n extend(params, defaults);\n params._emitClasses = true;\n params.init = false;\n const rest = {};\n const allowedParams = paramsList.map(key => key.replace(/_/, ''));\n const plainObj = Object.assign({}, obj);\n Object.keys(plainObj).forEach(key => {\n if (typeof obj[key] === 'undefined') return;\n if (allowedParams.indexOf(key) >= 0) {\n if (isObject(obj[key])) {\n params[key] = {};\n passedParams[key] = {};\n extend(params[key], obj[key]);\n extend(passedParams[key], obj[key]);\n } else {\n params[key] = obj[key];\n passedParams[key] = obj[key];\n }\n } else if (key.search(/on[A-Z]/) === 0 && typeof obj[key] === 'function') {\n if (splitEvents) {\n events[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n } else {\n params.on[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n }\n } else {\n rest[key] = obj[key];\n }\n });\n ['navigation', 'pagination', 'scrollbar'].forEach(key => {\n if (params[key] === true) params[key] = {};\n if (params[key] === false) delete params[key];\n });\n return {\n params,\n passedParams,\n rest,\n events\n };\n}\n\nfunction mountSwiper(_ref, swiperParams) {\n let {\n el,\n nextEl,\n prevEl,\n paginationEl,\n scrollbarEl,\n swiper\n } = _ref;\n if (needsNavigation(swiperParams) && nextEl && prevEl) {\n swiper.params.navigation.nextEl = nextEl;\n swiper.originalParams.navigation.nextEl = nextEl;\n swiper.params.navigation.prevEl = prevEl;\n swiper.originalParams.navigation.prevEl = prevEl;\n }\n if (needsPagination(swiperParams) && paginationEl) {\n swiper.params.pagination.el = paginationEl;\n swiper.originalParams.pagination.el = paginationEl;\n }\n if (needsScrollbar(swiperParams) && scrollbarEl) {\n swiper.params.scrollbar.el = scrollbarEl;\n swiper.originalParams.scrollbar.el = scrollbarEl;\n }\n swiper.init(el);\n}\n\nfunction getChangedParams(swiperParams, oldParams, children, oldChildren, getKey) {\n const keys = [];\n if (!oldParams) return keys;\n const addKey = key => {\n if (keys.indexOf(key) < 0) keys.push(key);\n };\n if (children && oldChildren) {\n const oldChildrenKeys = oldChildren.map(getKey);\n const childrenKeys = children.map(getKey);\n if (oldChildrenKeys.join('') !== childrenKeys.join('')) addKey('children');\n if (oldChildren.length !== children.length) addKey('children');\n }\n const watchParams = paramsList.filter(key => key[0] === '_').map(key => key.replace(/_/, ''));\n watchParams.forEach(key => {\n if (key in swiperParams && key in oldParams) {\n if (isObject(swiperParams[key]) && isObject(oldParams[key])) {\n const newKeys = Object.keys(swiperParams[key]);\n const oldKeys = Object.keys(oldParams[key]);\n if (newKeys.length !== oldKeys.length) {\n addKey(key);\n } else {\n newKeys.forEach(newKey => {\n if (swiperParams[key][newKey] !== oldParams[key][newKey]) {\n addKey(key);\n }\n });\n oldKeys.forEach(oldKey => {\n if (swiperParams[key][oldKey] !== oldParams[key][oldKey]) addKey(key);\n });\n }\n } else if (swiperParams[key] !== oldParams[key]) {\n addKey(key);\n }\n }\n });\n return keys;\n}\n\nconst updateOnVirtualData = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params.virtual || swiper.params.virtual && !swiper.params.virtual.enabled) return;\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {\n swiper.parallax.setTranslate();\n }\n};\n\nexport { getChangedParams as a, getParams as g, mountSwiper as m, updateOnVirtualData as u };\n","/**\n * Swiper React 11.1.4\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2024 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: May 30, 2024\n */\n\nimport React, { useEffect, useLayoutEffect, useContext, createContext, forwardRef, useState, useRef } from 'react';\nimport { S as Swiper$1 } from './shared/swiper-core.mjs';\nimport { g as getParams, m as mountSwiper, a as getChangedParams, u as updateOnVirtualData } from './shared/update-on-virtual-data.mjs';\nimport { d as uniqueClasses, w as wrapperClass, n as needsNavigation, b as needsScrollbar, a as needsPagination, e as extend, u as updateSwiper } from './shared/update-swiper.mjs';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction isChildSwiperSlide(child) {\n return child.type && child.type.displayName && child.type.displayName.includes('SwiperSlide');\n}\nfunction processChildren(c) {\n const slides = [];\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.children) {\n processChildren(child.props.children).forEach(slide => slides.push(slide));\n }\n });\n return slides;\n}\nfunction getChildren(c) {\n const slides = [];\n const slots = {\n 'container-start': [],\n 'container-end': [],\n 'wrapper-start': [],\n 'wrapper-end': []\n };\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.slot && slots[child.props.slot]) {\n slots[child.props.slot].push(child);\n } else if (child.props && child.props.children) {\n const foundSlides = processChildren(child.props.children);\n if (foundSlides.length > 0) {\n foundSlides.forEach(slide => slides.push(slide));\n } else {\n slots['container-end'].push(child);\n }\n } else {\n slots['container-end'].push(child);\n }\n });\n return {\n slides,\n slots\n };\n}\n\nfunction renderVirtual(swiper, slides, virtualData) {\n if (!virtualData) return null;\n const getSlideIndex = index => {\n let slideIndex = index;\n if (index < 0) {\n slideIndex = slides.length + index;\n } else if (slideIndex >= slides.length) {\n // eslint-disable-next-line\n slideIndex = slideIndex - slides.length;\n }\n return slideIndex;\n };\n const style = swiper.isHorizontal() ? {\n [swiper.rtlTranslate ? 'right' : 'left']: `${virtualData.offset}px`\n } : {\n top: `${virtualData.offset}px`\n };\n const {\n from,\n to\n } = virtualData;\n const loopFrom = swiper.params.loop ? -slides.length : 0;\n const loopTo = swiper.params.loop ? slides.length * 2 : slides.length;\n const slidesToRender = [];\n for (let i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n slidesToRender.push(slides[getSlideIndex(i)]);\n }\n }\n return slidesToRender.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n style,\n key: child.props.virtualIndex || child.key || `slide-${index}`\n });\n });\n}\n\nfunction useIsomorphicLayoutEffect(callback, deps) {\n // eslint-disable-next-line\n if (typeof window === 'undefined') return useEffect(callback, deps);\n return useLayoutEffect(callback, deps);\n}\n\nconst SwiperSlideContext = /*#__PURE__*/createContext(null);\nconst useSwiperSlide = () => {\n return useContext(SwiperSlideContext);\n};\nconst SwiperContext = /*#__PURE__*/createContext(null);\nconst useSwiper = () => {\n return useContext(SwiperContext);\n};\n\nconst Swiper = /*#__PURE__*/forwardRef(function (_temp, externalElRef) {\n let {\n className,\n tag: Tag = 'div',\n wrapperTag: WrapperTag = 'div',\n children,\n onSwiper,\n ...rest\n } = _temp === void 0 ? {} : _temp;\n let eventsAssigned = false;\n const [containerClasses, setContainerClasses] = useState('swiper');\n const [virtualData, setVirtualData] = useState(null);\n const [breakpointChanged, setBreakpointChanged] = useState(false);\n const initializedRef = useRef(false);\n const swiperElRef = useRef(null);\n const swiperRef = useRef(null);\n const oldPassedParamsRef = useRef(null);\n const oldSlides = useRef(null);\n const nextElRef = useRef(null);\n const prevElRef = useRef(null);\n const paginationElRef = useRef(null);\n const scrollbarElRef = useRef(null);\n const {\n params: swiperParams,\n passedParams,\n rest: restProps,\n events\n } = getParams(rest);\n const {\n slides,\n slots\n } = getChildren(children);\n const onBeforeBreakpoint = () => {\n setBreakpointChanged(!breakpointChanged);\n };\n Object.assign(swiperParams.on, {\n _containerClasses(swiper, classes) {\n setContainerClasses(classes);\n }\n });\n const initSwiper = () => {\n // init swiper\n Object.assign(swiperParams.on, events);\n eventsAssigned = true;\n const passParams = {\n ...swiperParams\n };\n delete passParams.wrapperClass;\n swiperRef.current = new Swiper$1(passParams);\n if (swiperRef.current.virtual && swiperRef.current.params.virtual.enabled) {\n swiperRef.current.virtual.slides = slides;\n const extendWith = {\n cache: false,\n slides,\n renderExternal: setVirtualData,\n renderExternalUpdate: false\n };\n extend(swiperRef.current.params.virtual, extendWith);\n extend(swiperRef.current.originalParams.virtual, extendWith);\n }\n };\n if (!swiperElRef.current) {\n initSwiper();\n }\n\n // Listen for breakpoints change\n if (swiperRef.current) {\n swiperRef.current.on('_beforeBreakpoint', onBeforeBreakpoint);\n }\n const attachEvents = () => {\n if (eventsAssigned || !events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.on(eventName, events[eventName]);\n });\n };\n const detachEvents = () => {\n if (!events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.off(eventName, events[eventName]);\n });\n };\n useEffect(() => {\n return () => {\n if (swiperRef.current) swiperRef.current.off('_beforeBreakpoint', onBeforeBreakpoint);\n };\n });\n\n // set initialized flag\n useEffect(() => {\n if (!initializedRef.current && swiperRef.current) {\n swiperRef.current.emitSlidesClasses();\n initializedRef.current = true;\n }\n });\n\n // mount swiper\n useIsomorphicLayoutEffect(() => {\n if (externalElRef) {\n externalElRef.current = swiperElRef.current;\n }\n if (!swiperElRef.current) return;\n if (swiperRef.current.destroyed) {\n initSwiper();\n }\n mountSwiper({\n el: swiperElRef.current,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n paginationEl: paginationElRef.current,\n scrollbarEl: scrollbarElRef.current,\n swiper: swiperRef.current\n }, swiperParams);\n if (onSwiper && !swiperRef.current.destroyed) onSwiper(swiperRef.current);\n // eslint-disable-next-line\n return () => {\n if (swiperRef.current && !swiperRef.current.destroyed) {\n swiperRef.current.destroy(true, false);\n }\n };\n }, []);\n\n // watch for params change\n useIsomorphicLayoutEffect(() => {\n attachEvents();\n const changedParams = getChangedParams(passedParams, oldPassedParamsRef.current, slides, oldSlides.current, c => c.key);\n oldPassedParamsRef.current = passedParams;\n oldSlides.current = slides;\n if (changedParams.length && swiperRef.current && !swiperRef.current.destroyed) {\n updateSwiper({\n swiper: swiperRef.current,\n slides,\n passedParams,\n changedParams,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n scrollbarEl: scrollbarElRef.current,\n paginationEl: paginationElRef.current\n });\n }\n return () => {\n detachEvents();\n };\n });\n\n // update on virtual update\n useIsomorphicLayoutEffect(() => {\n updateOnVirtualData(swiperRef.current);\n }, [virtualData]);\n\n // bypass swiper instance to slides\n function renderSlides() {\n if (swiperParams.virtual) {\n return renderVirtual(swiperRef.current, slides, virtualData);\n }\n return slides.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper: swiperRef.current,\n swiperSlideIndex: index\n });\n });\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: swiperElRef,\n className: uniqueClasses(`${containerClasses}${className ? ` ${className}` : ''}`)\n }, restProps), /*#__PURE__*/React.createElement(SwiperContext.Provider, {\n value: swiperRef.current\n }, slots['container-start'], /*#__PURE__*/React.createElement(WrapperTag, {\n className: wrapperClass(swiperParams.wrapperClass)\n }, slots['wrapper-start'], renderSlides(), slots['wrapper-end']), needsNavigation(swiperParams) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n ref: prevElRef,\n className: \"swiper-button-prev\"\n }), /*#__PURE__*/React.createElement(\"div\", {\n ref: nextElRef,\n className: \"swiper-button-next\"\n })), needsScrollbar(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: scrollbarElRef,\n className: \"swiper-scrollbar\"\n }), needsPagination(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: paginationElRef,\n className: \"swiper-pagination\"\n }), slots['container-end']));\n});\nSwiper.displayName = 'Swiper';\n\nconst SwiperSlide = /*#__PURE__*/forwardRef(function (_temp, externalRef) {\n let {\n tag: Tag = 'div',\n children,\n className = '',\n swiper,\n zoom,\n lazy,\n virtualIndex,\n swiperSlideIndex,\n ...rest\n } = _temp === void 0 ? {} : _temp;\n const slideElRef = useRef(null);\n const [slideClasses, setSlideClasses] = useState('swiper-slide');\n const [lazyLoaded, setLazyLoaded] = useState(false);\n function updateClasses(_s, el, classNames) {\n if (el === slideElRef.current) {\n setSlideClasses(classNames);\n }\n }\n useIsomorphicLayoutEffect(() => {\n if (typeof swiperSlideIndex !== 'undefined') {\n slideElRef.current.swiperSlideIndex = swiperSlideIndex;\n }\n if (externalRef) {\n externalRef.current = slideElRef.current;\n }\n if (!slideElRef.current || !swiper) {\n return;\n }\n if (swiper.destroyed) {\n if (slideClasses !== 'swiper-slide') {\n setSlideClasses('swiper-slide');\n }\n return;\n }\n swiper.on('_slideClass', updateClasses);\n // eslint-disable-next-line\n return () => {\n if (!swiper) return;\n swiper.off('_slideClass', updateClasses);\n };\n });\n useIsomorphicLayoutEffect(() => {\n if (swiper && slideElRef.current && !swiper.destroyed) {\n setSlideClasses(swiper.getSlideClasses(slideElRef.current));\n }\n }, [swiper]);\n const slideData = {\n isActive: slideClasses.indexOf('swiper-slide-active') >= 0,\n isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,\n isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0,\n isNext: slideClasses.indexOf('swiper-slide-next') >= 0\n };\n const renderChildren = () => {\n return typeof children === 'function' ? children(slideData) : children;\n };\n const onLoad = () => {\n setLazyLoaded(true);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: slideElRef,\n className: uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`),\n \"data-swiper-slide-index\": virtualIndex,\n onLoad: onLoad\n }, rest), zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-zoom-container\",\n \"data-swiper-zoom\": typeof zoom === 'number' ? zoom : undefined\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\"\n }))), !zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\"\n })));\n});\nSwiperSlide.displayName = 'SwiperSlide';\n\nexport { Swiper, SwiperSlide, useSwiper, useSwiperSlide };\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-11-02 18:34:34\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-12 11:23:00\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Modal\\index.tsx\r\n *\r\n */\r\nimport { debounce } from 'lodash';\r\nimport React, { CSSProperties, FC, PropsWithChildren, memo, useEffect, useMemo, useRef, useState } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { IPopupType } from '@/core/context/EditorContext';\r\n\r\nconst closeIcon =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAjhJREFUWEfFlztOw0AQhmeWiJ4CCmpQ5DiRQsIJyAWg5A0lR0AIChDiCJS8ER0cADgBeRSxt4CCDgkaKiq8i+zYeWx2413HEWmiJJv9v535Z2aN8M8vFPT9z3zETD0aAUChUJjwvPFHAJhBhB3Hqd6OAsK2yyucwykAvP38eJX398Z3AJDLlVYR8ToU9Rhj25TWr9KEsKy5dULIGQCMtfZly45TvwsAstm56UwG6wA4FUFwzrdctxZBDcWSy5XWEPG8I84/GcMipdWPtgcsaz5PCHtKG0IuTiqUvjT9U/WYMG2IOPE+AP+LtCB0xKUAAyA2Xbd2o2OG0NQXvTnvhL17D7EPtH9TRCIWwkRcGYGIQgYBABuqPuHXOQBc6pw80lBGwBQiiXhsBHQhkoprA6iM6acjhDQKu5YJZW6XeOI3XJdpvfsdTu52VfXEekD8owQiXGIubpSCbhDbLu8DwKEAd+A41SOdPpE4BS0viFOtvV2iKWqUgn5x/tmS70xR01GuDSCKc86/OCcLgTyyZ0ScDGNhFAktAJV4NFJ9YyaFiAWIE+9uVkkgBgLoig8DMWAa9ro9ynkUdlW5maZDCmB6clmz0k1HH4Cs1Ezbq2p2yEpUuBOKTSZZex00RUWIrltxuuK6EOGDSbGIOPZicpMx6fny650377qNRgBgWeVFQuA+6UjVgREhGIMlSqsPUQqIbZdOOIdZQmCv2axRnU1N1+TzJYsxOEaEV8ep7frPZ7Gd0FTEdP0ft0/kMNdg0eoAAAAASUVORK5CYII=';\r\n\r\ninterface IModalProps {\r\n visible?: boolean;\r\n popup?: IPopupType;\r\n padding?: number | string;\r\n modalStyle?: CSSProperties;\r\n onClose?: () => void;\r\n}\r\n\r\nconst Modal: FC<PropsWithChildren<IModalProps>> = ({ visible, onClose, children, modalStyle, padding, popup }) => {\r\n const [isShow, setIsShow] = useState(false);\r\n const modalEleRef = useRef<HTMLElement | null>(null);\r\n\r\n useEffect(() => {\r\n const parentNode = document.getElementById('sxp-render');\r\n const node = document.getElementById('pb-modal');\r\n if (node) {\r\n modalEleRef.current = node;\r\n } else {\r\n modalEleRef.current = document.createElement('div');\r\n modalEleRef.current.setAttribute('id', 'pb-modal');\r\n parentNode?.appendChild(modalEleRef.current);\r\n }\r\n }, []);\r\n\r\n const isOpen = useMemo(() => {\r\n return (popup?.id && popup?.id !== '') || visible;\r\n }, [visible, popup]);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setIsShow(true);\r\n } else {\r\n setTimeout(() => {\r\n setIsShow(false);\r\n }, popup?.duration);\r\n }\r\n }, [isOpen, popup]);\r\n\r\n if (!modalEleRef.current) return null;\r\n\r\n const handleClose = debounce(() => {\r\n onClose?.();\r\n }, 300);\r\n\r\n return ReactDOM.createPortal(\r\n <>\r\n {isShow && (\r\n <div\r\n className='modal-bg'\r\n style={{\r\n display: 'flex',\r\n backgroundColor: isOpen ? 'rgba(0, 0, 0, 0.7)' : 'rgba(0, 0, 0, 0)',\r\n ...modalStyle\r\n }}\r\n onClick={handleClose}\r\n >\r\n <div\r\n className={`modal-container ${isOpen ? 'modal-popIn' : 'modal-popOut'}`}\r\n style={{ padding, animationDuration: (popup?.duration ?? 0) / 1000 + 's' }}\r\n onClick={(e: any) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }}\r\n >\r\n <div onClick={onClose} className='modal-icon-wrapper'>\r\n <img src={closeIcon} alt='close' className='modal-icon' />\r\n </div>\r\n {children}\r\n </div>\r\n </div>\r\n )}\r\n </>,\r\n modalEleRef.current\r\n );\r\n};\r\n\r\nexport default memo(Modal);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-26 16:11:34\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-18 14:33:15\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\ExpandableText.tsx\r\n *\r\n */\r\nimport React, { memo, FC, CSSProperties, useMemo, useState, useCallback, useRef, useEffect } from 'react';\r\n\r\ninterface IExpandableTextProps {\r\n maxStr?: number;\r\n text: string;\r\n style?: CSSProperties;\r\n className?: React.HTMLAttributes<HTMLParagraphElement>['className'];\r\n onClick?: () => void;\r\n foldText?: string;\r\n unfoldText?: string;\r\n isPost?: boolean;\r\n onChange?: (bool: boolean) => void;\r\n}\r\n\r\nconst limitTextLastWholeWord = (originalText: string = '', limit: number) => {\r\n // 匹配到中文\r\n const chineseRegex = /[\\u4e00-\\u9fa5]+/;\r\n if (chineseRegex.test(originalText)) {\r\n return originalText.slice(0, 54);\r\n }\r\n\r\n const words = originalText.split(' ');\r\n const newWords: string[] = [];\r\n for (let i = 0; i < words.length; i++) {\r\n newWords.push(words[i]);\r\n const tempText = newWords.join(' ');\r\n if (tempText.length >= limit) break;\r\n }\r\n // const _words = newWords.length === words.length ? newWords : newWords.slice(0, newWords.length - 1);\r\n const _words =\r\n newWords.length > 1 && newWords.length < words.length ? newWords.slice(0, newWords.length - 1) : newWords;\r\n return _words.join(' ') + ' ';\r\n};\r\n\r\nconst ExpandableText: FC<IExpandableTextProps> = ({\r\n text,\r\n maxStr = 108,\r\n style,\r\n className,\r\n onClick,\r\n foldText,\r\n unfoldText,\r\n isPost,\r\n onChange\r\n}) => {\r\n const [isShowMore, setIsShowMore] = useState(false);\r\n const [isShow, setIsShow] = useState(false);\r\n const lineClamp = Number(style?.lineClamp || 2);\r\n const multiRow = useRef<any>(null);\r\n const multiRowCopy = useRef<any>(null);\r\n\r\n const handleClick = useCallback(() => {\r\n setIsShowMore(!isShowMore);\r\n // onChange?.(!isShowMore);\r\n }, [isShowMore, onChange]);\r\n\r\n const renderText = useMemo(() => {\r\n return !isShowMore && text.length > maxStr ? limitTextLastWholeWord(text, maxStr) + '...' : text;\r\n }, [text, maxStr, isShowMore]);\r\n\r\n useEffect(() => {\r\n if (multiRowCopy?.current?.offsetHeight > multiRow?.current?.offsetHeight && isPost) {\r\n setIsShow(true);\r\n } else {\r\n setIsShow(false);\r\n }\r\n multiRowCopy.current.style.display = 'none';\r\n }, [isPost]);\r\n\r\n return (\r\n <div\r\n className={className}\r\n style={{\r\n ...style,\r\n transform: 'translate3d(0px, 0px, 0px)'\r\n }}\r\n hidden={!text || text === ''}\r\n >\r\n <div\r\n ref={multiRow}\r\n style={{\r\n overflow: 'hidden',\r\n WebkitLineClamp: !isPost || isShowMore ? '' : lineClamp,\r\n textOverflow: 'ellipsis',\r\n display: '-webkit-box',\r\n WebkitBoxOrient: 'vertical',\r\n wordBreak: 'break-word'\r\n }}\r\n dangerouslySetInnerHTML={{ __html: text?.replace(/\\n/g, '</br>') }}\r\n ></div>\r\n <div ref={multiRowCopy} dangerouslySetInnerHTML={{ __html: text?.replace(/\\n/g, '</br>') }}></div>\r\n {text && isPost && isShow && (\r\n <span style={{ textDecoration: 'underline', cursor: 'pointer' }} onClick={onClick ?? handleClick}>\r\n {isShowMore ? unfoldText || 'show less' : foldText || 'show more'}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(ExpandableText);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-20 18:56:52\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\FormatImage.tsx\r\n *\r\n */\r\nimport React, {\r\n CSSProperties,\r\n ForwardedRef,\r\n forwardRef,\r\n memo,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n useState\r\n} from 'react';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\n\r\ninterface IFormatImageProps {\r\n src?: string;\r\n onLoad?: (e: any) => void;\r\n style?: CSSProperties;\r\n className?: any;\r\n loading?: 'eager' | 'lazy';\r\n}\r\ninterface IFormatImageRefProps {\r\n setSrc: (v: string) => void;\r\n}\r\nconst FormatImage = forwardRef((props: IFormatImageProps, ref: ForwardedRef<IFormatImageRefProps>) => {\r\n const { src, onLoad, style, className, loading } = props;\r\n const [imgSrc, setImgSrc] = useState<any>();\r\n useImperativeHandle(ref, () => ({\r\n setSrc: (v: string) => {\r\n setImgSrc(v);\r\n }\r\n }));\r\n\r\n useEffect(() => {\r\n setImgSrc(src);\r\n }, [src]);\r\n\r\n const imgRef = useRef(null);\r\n\r\n // useEffect(() => {\r\n // let observer: any = null;\r\n // const { current } = imgRef;\r\n // if (current) {\r\n // observer = new IntersectionObserver(\r\n // (entries) => {\r\n // entries.forEach((entry) => {\r\n // if (entry.isIntersecting) {\r\n // setImgSrc(src);\r\n // observer.unobserve(current);\r\n // }\r\n // });\r\n // },\r\n // { threshold: 0.1 } // 触发阈值,可根据需要调整\r\n // );\r\n // observer.observe(current);\r\n // }\r\n // return () => {\r\n // if (observer && current) {\r\n // observer.unobserve(current);\r\n // }\r\n // };\r\n // }, [src]);\r\n\r\n return (\r\n <>\r\n {imgSrc?.includes('.avif') ? (\r\n <picture>\r\n <source type='image/avif' srcSet={imgSrc} />\r\n <source type='image/webp' srcSet={`${imgSrc}?imageMogr2/format/webp`} />\r\n <source type='image/jpeg' srcSet={`${imgSrc}?imageMogr2/format/jpg`} />\r\n <img\r\n className={className}\r\n src={imgSrc}\r\n style={style}\r\n loading={loading}\r\n onLoad={(e) => {\r\n onLoad?.(e.target);\r\n }}\r\n alt='image'\r\n />\r\n </picture>\r\n ) : (\r\n <img\r\n className={className}\r\n src={imgSrc}\r\n style={style}\r\n loading={loading}\r\n onLoad={(e) => {\r\n onLoad?.(e.target);\r\n }}\r\n alt='image'\r\n />\r\n )}\r\n </>\r\n );\r\n});\r\nexport default memo(FormatImage);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-28 18:01:20\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetail\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { CSSProperties, FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { IEditorContext } from '@/core/context/EditorContext';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport './index.less';\r\nimport { Autoplay, Pagination } from 'swiper/modules';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport Modal from '@/core/components/SxpPageRender/Modal';\r\nimport ExpandableText from '@/core/components/SxpPageRender/ExpandableText';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\n\r\nexport interface ICommodityDetailProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n onClick?: () => void;\r\n schema?: IEditorContext['schema'];\r\n isDefault?: boolean;\r\n bottom_image?: string;\r\n tipText?: {\r\n foldText?: string;\r\n unfoldText?: string;\r\n };\r\n isPost?: boolean;\r\n viewTime?: any;\r\n rec?: RecItemType;\r\n swiper: {\r\n dotsAlign: 'left' | 'center';\r\n delay: number;\r\n translateY?: number;\r\n };\r\n commodityStyles?: {\r\n title: CSSProperties;\r\n collection: CSSProperties;\r\n price: CSSProperties;\r\n info: CSSProperties;\r\n };\r\n buttonStyle?: CSSProperties;\r\n index?: number;\r\n}\r\n\r\nconst CommodityDetail: FC<ICommodityDetailProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n onClick,\r\n schema,\r\n isDefault,\r\n bottom_image,\r\n tipText,\r\n isPost,\r\n viewTime,\r\n rec,\r\n swiper,\r\n commodityStyles,\r\n buttonStyle,\r\n index,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n const { popupDetailData, bffEventReport, isPreview, bffFbReport } = useSxpDataSource();\r\n const { jumpToWeb, productView } = useEventReport();\r\n const curTimeRef = useRef<any>(null);\r\n const [showModal, setShowModal] = useState(false);\r\n\r\n const data = isPost ? rec : (popupDetailData as RecItemType);\r\n const product = isPost ? data?.product : data?.video?.bindProduct;\r\n const cta = isPost ? data?.product?.bindCta : data?.video?.bindProduct?.bindCta;\r\n const position = isPost ? index : (popupDetailData?.index as number);\r\n\r\n const handleLink = () => {\r\n if (product?.link) {\r\n jumpToWeb(data, product, cta, position);\r\n if (!isPost) {\r\n productView(data, product, cta, viewTime || curTimeRef.current, position);\r\n }\r\n window.location.href = window.getJointUtmLink(product.link);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!isPost) {\r\n bffFbReport?.({\r\n eventName: 'ProductView'\r\n });\r\n }\r\n }, [isPost, bffFbReport]);\r\n\r\n useEffect(() => {\r\n const initTime = () => {\r\n curTimeRef.current = new Date();\r\n };\r\n initTime();\r\n window.addEventListener('pageshow', initTime);\r\n return () => {\r\n window.removeEventListener('pageshow', initTime);\r\n };\r\n }, []);\r\n\r\n const priceText = useMemo(() => {\r\n if (product?.currency && product?.price) {\r\n return `${product?.currency?.split('-')[1]?.toUpperCase() ?? ''}${\r\n product?.price?.toLocaleString('zh', {\r\n minimumFractionDigits: 0\r\n }) ?? ''\r\n }`;\r\n } else {\r\n return '$7,000';\r\n }\r\n }, [product?.price, product?.currency]);\r\n\r\n const width = isPreview ? 375 : style?.width ?? window.innerWidth;\r\n\r\n const renderContent = ({ isPost }: any) => {\r\n return (\r\n <div>\r\n <div\r\n className={'pb-commondity-content-collection'}\r\n style={getStyle(commodityStyles?.collection)}\r\n hidden={!!product && (!product?.collection || product?.collection === '')}\r\n >\r\n {product?.collection ?? 'Tiffany Lock'}\r\n </div>\r\n <div\r\n className={'pb-commondity-content-title'}\r\n style={getStyle(commodityStyles?.title)}\r\n hidden={!!product && !product?.title}\r\n >\r\n {product?.title ?? 'Pendant in Yellow Gold with Diamonds, Medium'}\r\n </div>\r\n <div\r\n className={'pb-commondity-content-price'}\r\n style={getStyle(commodityStyles?.price)}\r\n hidden={!!product && !product?.price}\r\n >\r\n {priceText}\r\n </div>\r\n <div hidden={!!product && (!product?.info || product?.info === '')}>\r\n <ExpandableText\r\n foldText={tipText?.foldText}\r\n unfoldText={tipText?.unfoldText}\r\n onClick={() => setShowModal(true)}\r\n isPost={isPost}\r\n text={\r\n product?.info ??\r\n `The design inspiration of Tiffany Lock series comes from the power of connection and inclusiveness, and the\r\n bold and avant-garde visual design interprets the emotional bond connecting my heart. The Tiffany Lock\r\n collection is unisex and is inspired by the padlock pattern found in the Tiffany Antique Collection. This\r\n necklace features a stylish and eye-catching oval clasp chain decorated with a lock pattern. Crafted from\r\n 18-karat gold, this necklace is embellished with hand-set diamonds.`\r\n }\r\n maxStr={79}\r\n className={'pb-commondity-content-info'}\r\n style={commodityStyles?.info}\r\n />\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderBtn = () => {\r\n return (\r\n <>\r\n {(isDefault || product?.link) && (\r\n <button\r\n aria-label={cta?.enTitle ?? 'Purchase on Website'}\r\n onClick={handleLink}\r\n className='pb-commondity-btn'\r\n style={buttonStyle}\r\n >\r\n {cta?.enTitle ?? 'Purchase on Website'}\r\n </button>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const getStyle = useCallback((style?: CSSProperties) => {\r\n if (style?.lineClamp) {\r\n return {\r\n ...style,\r\n overflow: 'hidden',\r\n WebkitLineClamp: style?.lineClamp,\r\n textOverflow: 'ellipsis',\r\n display: '-webkit-box',\r\n webkitBoxOrient: 'vertical'\r\n };\r\n }\r\n return style;\r\n }, []);\r\n\r\n return (\r\n <div className={'pb-commondity'}>\r\n <div\r\n className={css({\r\n ...style\r\n })}\r\n {...props}\r\n >\r\n {product && product?.homePage?.length > 0 && (\r\n <Swiper\r\n height={width}\r\n modules={[Pagination, Autoplay]}\r\n pagination={{\r\n clickable: true,\r\n bulletActiveClass: 'swipe-item-active-bullet',\r\n clickableClass:\r\n swiper?.dotsAlign === 'left'\r\n ? 'commondityDetail-swiper-clickable-left'\r\n : 'commondityDetail-swiper-clickable-center'\r\n }}\r\n loop\r\n autoplay={{\r\n delay: swiper?.delay * 1000\r\n }}\r\n >\r\n {product?.homePage?.map((src) => {\r\n return (\r\n <SwiperSlide key={src}>\r\n <div\r\n style={{\r\n overflow: 'hidden',\r\n width,\r\n height: width\r\n }}\r\n >\r\n <FormatImage\r\n style={{\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n display: 'block',\r\n objectPosition: `50% ${swiper?.translateY ? -swiper?.translateY + 50 : 50}%`\r\n }}\r\n src={src}\r\n />\r\n </div>\r\n </SwiperSlide>\r\n );\r\n })}\r\n </Swiper>\r\n )}\r\n {!product?.homePage?.length && (\r\n <div\r\n className={css({\r\n position: 'relative',\r\n height: 0,\r\n width: '100%',\r\n paddingBottom: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <img\r\n className={css({\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n objectFit: 'cover',\r\n width: '100%'\r\n })}\r\n src={sxpParameter?.bottom_image ?? bottom_image}\r\n alt='pdp image'\r\n />\r\n </div>\r\n )}\r\n <div className={'pb-commondity-content'}>{renderContent({ isPost })}</div>\r\n </div>\r\n {renderBtn()}\r\n <Modal visible={showModal} onClose={() => setShowModal(false)}>\r\n <div style={{ paddingBottom: '80px' }}>{renderContent({ isPost: false })}</div>\r\n {renderBtn()}\r\n </Modal>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(CommodityDetail);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-02 18:13:10\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetail\\material.tsx\r\n *\r\n */\r\nimport settingRender from './settingRender';\r\nimport CommodityDetailComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst CommodityDetail = createMaterial(CommodityDetailComponent, {\r\n displayName: '商品详情',\r\n icon: '',\r\n category: 'popup',\r\n type: 'CommodityDetail',\r\n related: {\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n swiper: {\r\n dotsAlign: 'center',\r\n delay: 3\r\n },\r\n commodityStyles: {\r\n price: {\r\n color: '#000',\r\n fontSize: 18,\r\n marginTop: 24,\r\n marginBottom: 10\r\n },\r\n title: {\r\n color: '#000',\r\n fontSize: 23\r\n },\r\n collection: {\r\n fontSize: 12,\r\n color: '#000',\r\n marginBottom: 14\r\n },\r\n info: {\r\n color: 'gray',\r\n fontSize: 12\r\n }\r\n },\r\n buttonStyle: {\r\n backgroundColor: '#000',\r\n fontSize: 12,\r\n height: 45,\r\n fontWeight: 'bold',\r\n textAlign: 'center',\r\n color: 'rgba(255, 255, 255, 0.9)'\r\n }\r\n },\r\n style: {}\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 1\r\n});\r\n\r\nexport { CommodityDetail };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-10-27 14:06:35\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-17 10:29:41\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\Prompt\\settingRender.tsx\r\n *\r\n */\r\n\r\nimport defaultSetting from '../../defaultSetting';\r\n\r\nexport default [\r\n {\r\n title: '',\r\n child: [\r\n {\r\n type: 'Media',\r\n label: '图标',\r\n name: ['props', 'icon'],\r\n mediaType: 'Image'\r\n },\r\n {\r\n type: 'TextArea',\r\n label: '内容',\r\n name: ['props', 'content']\r\n },\r\n {\r\n type: 'Text',\r\n label: '按钮文案',\r\n name: ['props', 'btnText']\r\n },\r\n {\r\n type: 'Group',\r\n label: '提交按钮字体',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'submitButtonStyle', 'color'],\r\n initialValue: '#fff'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['props', 'submitButtonStyle', 'fontFamily'],\r\n options: defaultSetting?.fontOptions,\r\n initialValue: defaultSetting?.fontOptions?.[0]?.value\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'submitButtonStyle', 'fontSize'],\r\n addonAfter: 'px',\r\n initialValue: 12\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextStyle',\r\n name: ['props', 'submitButtonStyle']\r\n },\r\n {\r\n type: 'TextAlign',\r\n name: ['props', 'submitButtonStyle']\r\n },\r\n {\r\n label: '提交按钮颜色',\r\n type: 'Color',\r\n name: ['props', 'submitButtonStyle', 'backgroundColor']\r\n }\r\n ]\r\n }\r\n];\r\n","var img = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABHBJREFUeF7lmzuoFkcYhp/TihdIl0JBESubSCCCih4NXgJeUphCjyKmEEVtLRSjooWtShILRRJtgpCoeLzgLUZBQbTwAoooqLWoCWIXeZdd3bP++8/st7OX33+ac2Dn8r3Pvzv7zcy7A9RT5gDjgQnx3/T/iuA58Cz+m/7/StXhDVQ0gATOBhYCi4GxxnHeAKeAs8DfMSBjV52bhQTwBbApFj4YNMqPnV0GrgL7gJchxggFQMI3A5NDBOXRx+MYwn6Pul2rlAWwMv7VvykbiLH9TUAQjhnbYwUwA9gKLLIOHLjdGWAPcL1ovxYAG4G9wKiig1Vc/y2wBThQZJyiAA4Ba4sM0EDdw8CPvuMWAXAb+Mq344br3QGm+cTgC+B/n85aWMepz1kBOBknMy3U5wxJSdSSbrVcAPR+V9LRy0X5SW6+0A3AMuDPXlaeiv174K9OWvIAfA1cAMZ9JgBeA98Ct7J68gAMtyjJCfUbKFn6zgeA0tujoUZtWT9D2bS50x1wA2gqt6+al9YO09ODZAF8DrO+C+KIt0IagNbzIlTXktYVaKfr9+PNkSklchMtpXWHR/sJaQA7gJ8sUdXURuJ/AB7E4/0BLDeOvROQ3hEA/gFmGjusullWfDKeFcI1YFYawETgSdUqjP3niS8LYRLwNHkE1gM/GwOssplLfBkIG4BfEgBKE5dWqcTQt694da1td22YFikngGUJgH+B0UVaV1y3iHiFYpnA/wPGCICFXpX66xCfxD8oAKuA3wIpegToHW0tdYpXjKsFQLu7u60Rx+3exSCPG29HdVO3eI25TQB+BdaVAKCMSneRVpBJKfpMNiFesR4UgNOdlomeQF4AWj3quCpbfCE0JV7xDgvAXWCqp+B0tYfACkC7xXnFBaFJ8Yr5ngC8Mu78KHnS4+MqeRCaFq+4X5cB8MnmQoE7oQ3iPwCwPgJWEdZ2rjvNcj16BMpMghYxWsElS1pX0K45xNXedT2aBMu+BotCcAVlfZX69puuF70GQyRCoSFU/csnEKJEKFQqHApCXeIFIUqFQy6GykKoU7wARIuh6HVQwsmVffasEOoWLwfauASADkKU0oYqRSHULV465SsaSgAoqfk9lPq4H18ITYhXiJr7jiYAZGyUUzN0cUFoSrx0yrX6PH0ucEmTQmgCXdb5TYrX/uFcaa3rYCR7JzQpXro1vg5HRgCo+mhMEOT3/RKQYaGpkns0poD6+nA0+UX6+nhcEPreICEIfW2REQCZoc+30A9snTjlI57fyUzdzSYnU3RpP7414sDtNLl3NFG7jJK9YI52sepqnnYBUOe9ZJLOwnCapn0AqNO+NksnVHvJNO00SSeifO+ApH4vZIpdzdHZZ6QoALWXifqI8TTJNWGVua5drTV5pui8ji0A1JfM1Lta5CeWD3h7JzO0i6gVQNJv3342lwXbtx9OpkFoP0ET0LwKDZcyOF5s46ez2TtCxkt9OL0gBmJ1oMnJJcHnYo/wU9czXfR62TnAd7zWfj7/HrAAAKDnDZ8VAAAAAElFTkSuQmCC\";\n export default img;","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 14:56:16\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-20 14:56:22\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\utils\\materials.ts\r\n *\r\n */\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-08-03 16:37:37\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2023-08-04 11:02:50\r\n * @FilePath: \\page-builder-admin\\src\\libs\\core\\utils\\materials.ts\r\n *\r\n */\r\nexport const getMediaValueByMode = (obj?: Record<string, any>) => {\r\n if (!obj || typeof obj !== 'object') {\r\n return null;\r\n }\r\n\r\n const { mode, link, file, src } = obj;\r\n\r\n switch (mode) {\r\n case 2:\r\n return link || null;\r\n case 3:\r\n return src || null;\r\n default:\r\n return file && file.length > 0 ? file[0]?.url : null;\r\n }\r\n};\r\n\r\nexport const getBgStyle = (imgSrc: string) => {\r\n return imgSrc\r\n ? {\r\n backgroundImage: `url(${imgSrc})`,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover'\r\n }\r\n : '';\r\n};\r\n\r\nexport const getBgStyleByImg = (data: any) => {\r\n const curPageProps = data?.props ?? null;\r\n const bgImg = curPageProps?.bgImg;\r\n const imgSrc = typeof bgImg === 'string' ? bgImg : getMediaValueByMode(bgImg);\r\n return getBgStyle(imgSrc);\r\n};\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-14 10:55:27\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\Prompt\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { CSSProperties, FC, memo } from 'react';\r\nimport success from './success.png';\r\nimport { getMediaValueByMode } from '@/core/utils/materials';\r\nimport './index.less';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\n\r\nexport interface IPromptProps {\r\n content?: string;\r\n btnText?: string;\r\n style?: Record<string, any>;\r\n icon?: Record<string, any> | string;\r\n isExternalLink?: boolean;\r\n isPopup?: boolean;\r\n onClose?: () => void;\r\n onClick?: () => void;\r\n submitButtonStyle?: CSSProperties;\r\n}\r\n\r\nconst Prompt: FC<IPromptProps> = ({\r\n content,\r\n btnText,\r\n style,\r\n icon,\r\n isPopup,\r\n isExternalLink,\r\n onClose,\r\n onClick,\r\n submitButtonStyle,\r\n ...props\r\n}) => {\r\n const { popupDetailData } = useSxpDataSource();\r\n const { jumpToWeb } = useEventReport();\r\n const iconSrc = typeof icon === 'string' ? icon : getMediaValueByMode(icon);\r\n\r\n const handleOk = () => {\r\n if (isExternalLink) {\r\n const data = popupDetailData as RecItemType;\r\n const product = data?.video?.bindProduct;\r\n const cta = data?.video?.bindProduct?.bindCta;\r\n const position = popupDetailData?.index as number;\r\n jumpToWeb(data, product, cta, position);\r\n }\r\n if (!isPopup) {\r\n onClose?.();\r\n }\r\n onClick?.();\r\n };\r\n\r\n return (\r\n <div\r\n className={`pb-prompt ${css({\r\n ...style\r\n })}`}\r\n {...props}\r\n >\r\n <div className={'pb-prompt-icon'}>\r\n <img width='100%' src={iconSrc ?? success} alt='success image' />\r\n </div>\r\n <div className={'pb-prompt-content'}>{content}</div>\r\n <button aria-label={btnText} className={'pb-prompt-btn'} style={submitButtonStyle} onClick={handleOk}>\r\n {btnText}\r\n </button>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Prompt);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-20 15:53:10\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\Prompt\\material.tsx\r\n *\r\n */\r\nimport React from 'react';\r\nimport interactionRender from './interactionRender';\r\nimport settingRender from './settingRender';\r\nimport success from './success.png';\r\nimport PromptComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst Prompt = createMaterial(PromptComponent, {\r\n displayName: '提交成功',\r\n icon: '',\r\n category: 'popup',\r\n type: 'Prompt',\r\n related: {\r\n settingRender,\r\n bindableProps: [],\r\n interactionRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n icon: success,\r\n content: 'You have successfully completed the appointment!',\r\n btnText: 'OK'\r\n },\r\n style: {}\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 3\r\n});\r\n\r\nexport { Prompt };\r\n","import { fontOptions } from '../../defaultSetting';\r\n\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-26 16:50:25\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-27 17:31:27\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetailDiroNew\\settingRender.tsx\r\n *\r\n */\r\nexport default [\r\n {\r\n title: '商品图片',\r\n child: [\r\n {\r\n type: 'Radius',\r\n label: '轮播指示器',\r\n options: [\r\n {\r\n label: '居左',\r\n value: 'left'\r\n },\r\n {\r\n label: '居中',\r\n value: 'center'\r\n }\r\n ],\r\n name: ['props', 'swiper', 'dotsAlign']\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'swiper', 'delay'],\r\n addonAfter: 's'\r\n },\r\n {\r\n type: 'Group',\r\n child: [\r\n {\r\n label: '居中垂直偏移',\r\n type: 'Number',\r\n name: ['props', 'swiper', 'translateY'],\r\n min: -1000,\r\n addonAfter: '%',\r\n initialValue: 0\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: '商品文本',\r\n child: [\r\n {\r\n name: ['props', 'commodityStyles'],\r\n type: 'SelectLinkage',\r\n child: [\r\n {\r\n label: '字段',\r\n type: 'Select',\r\n options: [\r\n {\r\n label: '商品名称',\r\n value: 'title'\r\n },\r\n {\r\n label: '系列名称',\r\n value: 'collection'\r\n },\r\n {\r\n label: '价格',\r\n value: 'price'\r\n },\r\n {\r\n label: '税费说明',\r\n value: 'taxInfo'\r\n },\r\n {\r\n label: '商品描述',\r\n value: 'info'\r\n }\r\n ],\r\n name: ['props', 'commodityStyles', 'field'],\r\n initialValue: 'title'\r\n },\r\n {\r\n type: 'Group',\r\n label: '标题字体',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['color']\r\n },\r\n {\r\n type: 'Select',\r\n options: fontOptions,\r\n name: ['fontFamily'],\r\n initialValue: fontOptions?.[0]?.value\r\n },\r\n {\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['fontSize']\r\n }\r\n ]\r\n },\r\n {\r\n label: '标题样式',\r\n type: 'TextStyle'\r\n },\r\n {\r\n label: '标题对齐',\r\n type: 'TextAlign'\r\n },\r\n {\r\n label: '默认行数',\r\n type: 'Number',\r\n name: ['lineClamp']\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: '购买按钮样式',\r\n child: [\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['props', 'buttonStyle', 'backgroundColor'],\r\n initialValue: '#000'\r\n },\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextMargin',\r\n name: ['props', 'buttonStyle']\r\n },\r\n {\r\n type: 'Group',\r\n label: '字体',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'buttonStyle', 'color'],\r\n initialValue: '#fff'\r\n },\r\n\r\n {\r\n type: 'Select',\r\n name: ['props', 'buttonStyle', 'fontFamily'],\r\n options: fontOptions,\r\n initialValue: fontOptions?.[0]?.value\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'fontSize'],\r\n addonAfter: 'px'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextStyle',\r\n name: ['props', 'buttonStyle']\r\n },\r\n {\r\n type: 'TextAlign',\r\n name: ['props', 'buttonStyle']\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-28 17:58:24\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetailDiroNew\\index.tsx\r\n *\r\n */\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-28 15:30:03\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetailDiroNew\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { CSSProperties, FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { IEditorContext } from '@/core/context/EditorContext';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport './index.less';\r\nimport { Autoplay, Pagination } from 'swiper/modules';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport Modal from '@/core/components/SxpPageRender/Modal';\r\nimport ExpandableText from '@/core/components/SxpPageRender/ExpandableText';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\n\r\nexport interface ICommodityDetailDiroNewProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n onClick?: () => void;\r\n schema?: IEditorContext['schema'];\r\n isDefault?: boolean;\r\n rec?: RecItemType;\r\n viewTime?: any;\r\n isPost?: boolean;\r\n bottom_image?: string;\r\n tipText?: {\r\n foldText?: string;\r\n unfoldText?: string;\r\n };\r\n swiper: {\r\n dotsAlign: 'left' | 'center';\r\n delay: number;\r\n translateY?: number;\r\n };\r\n commodityStyles?: {\r\n title: CSSProperties;\r\n collection: CSSProperties;\r\n price: CSSProperties;\r\n taxInfo: CSSProperties;\r\n info: CSSProperties;\r\n };\r\n buttonStyle?: CSSProperties;\r\n index?: number;\r\n}\r\n\r\nconst CommodityDetailDiroNew: FC<ICommodityDetailDiroNewProps> = ({\r\n style,\r\n isDefault,\r\n rec,\r\n viewTime,\r\n isPost,\r\n bottom_image,\r\n tipText,\r\n swiper,\r\n commodityStyles,\r\n buttonStyle,\r\n index,\r\n ...props\r\n}) => {\r\n const [spread, setSpread] = useState(true);\r\n const { sxpParameter } = useSxpDataSource();\r\n const { popupDetailData, bffEventReport, isPreview, swiperRef, bffFbReport } = useSxpDataSource();\r\n const { jumpToWeb, productView } = useEventReport();\r\n const scrollRef = useRef<any>(null);\r\n const touchRef = useRef<any>(null);\r\n const touchMoveRef = useRef<any>(null);\r\n const [stopSlide, setStopSlide] = useState(false);\r\n const [isBottom, setIsBottom] = useState(false);\r\n const [isTop, setIsTop] = useState(true);\r\n const [showModal, setShowModal] = useState(false);\r\n const curTimeRef = useRef<any>(null);\r\n const data = isPost ? rec : (popupDetailData as RecItemType);\r\n const product = isPost ? data?.product : data?.video?.bindProduct;\r\n const cta = isPost ? data?.product?.bindCta : data?.video?.bindProduct?.bindCta;\r\n const position = isPost ? index : (popupDetailData?.index as number);\r\n\r\n const handleLink = () => {\r\n if (product?.link) {\r\n jumpToWeb(data, product, cta, position);\r\n if (!isPost) {\r\n productView(data, product, cta, viewTime || curTimeRef.current, position);\r\n }\r\n window.location.href = window.getJointUtmLink(product.link);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!isPost) {\r\n bffFbReport?.({\r\n eventName: 'ProductView'\r\n });\r\n }\r\n }, [isPost, bffFbReport]);\r\n\r\n useEffect(() => {\r\n const initTime = () => {\r\n curTimeRef.current = new Date();\r\n };\r\n initTime();\r\n window.addEventListener('pageshow', initTime);\r\n return () => {\r\n window.removeEventListener('pageshow', initTime);\r\n };\r\n }, []);\r\n\r\n const priceText = useMemo(() => {\r\n if (product?.currency && product?.price) {\r\n return `${product?.currency?.split('-')[1]?.toUpperCase() ?? ''}${\r\n product?.price?.toLocaleString('zh', {\r\n minimumFractionDigits: 0\r\n }) ?? ''\r\n }`;\r\n } else {\r\n return '£102,300.00';\r\n }\r\n }, [product?.price, product?.currency]);\r\n\r\n const width = isPreview ? 375 : style?.width ?? window.innerWidth;\r\n\r\n const handleClickCollapse = () => {\r\n setSpread(!spread);\r\n };\r\n\r\n // useEffect(() => {\r\n // console.log(scrollRef?.current?.scrollHeight, window.innerHeight);\r\n // if (scrollRef?.current && scrollRef?.current?.scrollHeight > window.innerHeight) {\r\n // setStopSlide(true);\r\n // }\r\n // }, [scrollRef]);\r\n\r\n // useEffect(() => {\r\n // const handleScroll = () => {\r\n // if (scrollRef?.current) {\r\n // const { scrollTop, scrollHeight, clientHeight } = scrollRef.current;\r\n // const isBottom = scrollTop + clientHeight === scrollHeight;\r\n // if (isBottom) {\r\n // setIsBottom(true);\r\n // } else {\r\n // setIsBottom(false);\r\n // }\r\n // if (scrollTop === 0) {\r\n // setIsTop(true);\r\n // } else {\r\n // setIsTop(false);\r\n // }\r\n // }\r\n // };\r\n\r\n // if (scrollRef.current) {\r\n // scrollRef.current.addEventListener('scroll', handleScroll);\r\n // }\r\n\r\n // return () => {\r\n // if (scrollRef.current) {\r\n // scrollRef.current.removeEventListener('scroll', handleScroll);\r\n // }\r\n // };\r\n // }, [scrollRef]);\r\n\r\n const handleTouchStart = (event: any) => {\r\n event.stopPropagation();\r\n touchRef.current = event.touches[0].clientY;\r\n touchMoveRef.current = true;\r\n };\r\n\r\n const handleTouchMove = (event: any) => {\r\n if (touchMoveRef.current) {\r\n touchMoveRef.current = false;\r\n const currentY = event.touches[0].clientY;\r\n const diff = touchRef.current - currentY;\r\n if (diff > 0 && (isBottom || !stopSlide)) {\r\n swiperRef?.current?.swiper?.slideNext();\r\n } else if (diff < 0 && (isTop || !stopSlide)) {\r\n swiperRef?.current?.swiper?.slidePrev();\r\n }\r\n }\r\n };\r\n\r\n const productInfoText = ({ isPost }: any) => {\r\n return (\r\n <div hidden={!!product && (!product?.info || product?.info === '')}>\r\n <ExpandableText\r\n isPost={isPost}\r\n onClick={() => setShowModal(true)}\r\n className='pb-commondityDiroNew-info'\r\n style={commodityStyles?.info}\r\n foldText={tipText?.foldText}\r\n unfoldText={tipText?.unfoldText}\r\n text={\r\n product?.info ||\r\n `Unveiled at the Spring-Summer 2023 fashion show, the Dior Toujours bag is distinguished by a casual and practical design. Crafted in black calfskin with Macrocannage topstitching, it showcases a spacious interior compartment with a matching pouch to organize essentials. Its leather strap closure keeps items secure while the D of the CD Lock closure twists to adjust the sides and enhance the bag's silhouette. The leather handles can be adjusted using the small notches in order to be able to carry the large bag by hand or wear it over the shoulder. CD Lock and strap closures D.I.O.R. charms Removable interior pouch Adjustable leather handles Dust bag included\r\nMade in Italy`\r\n }\r\n />\r\n </div>\r\n );\r\n };\r\n\r\n const getStyle = useCallback((style?: CSSProperties) => {\r\n if (style?.lineClamp) {\r\n return {\r\n ...style,\r\n overflow: 'hidden',\r\n WebkitLineClamp: style?.lineClamp,\r\n textOverflow: 'ellipsis',\r\n display: '-webkit-box',\r\n webkitBoxOrient: 'vertical'\r\n };\r\n }\r\n return style;\r\n }, []);\r\n\r\n return (\r\n <div className={'pb-commondityDiroNew'}>\r\n <div\r\n ref={scrollRef}\r\n className={css({\r\n ...style\r\n })}\r\n {...props}\r\n // onTouchStart={handleTouchStart}\r\n // onTouchMove={(e: any) => {\r\n // e.stopPropagation();\r\n // handleTouchMove(e);\r\n // }}\r\n >\r\n {product && product?.homePage?.length > 0 && (\r\n <Swiper\r\n height={width}\r\n modules={[Pagination, Autoplay]}\r\n pagination={{\r\n clickable: true,\r\n bulletActiveClass: 'commondityDiroNew-swipe-item-active-bullet',\r\n clickableClass:\r\n swiper?.dotsAlign === 'left'\r\n ? 'commondityDiroNew-swiper-clickable-left'\r\n : 'commondityDiroNew-swiper-clickable-center'\r\n }}\r\n loop\r\n autoplay={{\r\n delay: swiper?.delay * 1000\r\n }}\r\n >\r\n {product?.homePage?.map((src) => {\r\n return (\r\n <SwiperSlide key={src}>\r\n <div\r\n style={{\r\n overflow: 'hidden',\r\n width,\r\n height: width\r\n }}\r\n >\r\n <FormatImage\r\n style={{\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n display: 'block',\r\n objectPosition: `50% ${swiper?.translateY ? -swiper?.translateY + 50 : 50}%`\r\n }}\r\n src={src}\r\n />\r\n </div>\r\n </SwiperSlide>\r\n );\r\n })}\r\n </Swiper>\r\n )}\r\n {!product?.homePage?.length && (\r\n <div\r\n className={css({\r\n position: 'relative',\r\n height: 0,\r\n width: '100%',\r\n paddingBottom: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <img\r\n className={css({\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n objectFit: 'cover',\r\n width: '100%'\r\n })}\r\n src={sxpParameter?.bottom_image ?? bottom_image}\r\n alt='pdp image'\r\n />\r\n </div>\r\n )}\r\n\r\n <div className={'pb-commondityDiroNew-content'}>\r\n <div className={'pb-commondityDiroNew-content-top'}>\r\n <div className={'pb-commondityDiroNew-content-top-left'}>\r\n <div className={'pb-commondityDiroNew-content-top-left-title'} style={getStyle(commodityStyles?.title)}>\r\n {product?.title ?? 'Large Dior Toujours BagLarge'}\r\n </div>\r\n <div\r\n className={'pb-commondityDiroNew-content-collection'}\r\n hidden={!!product && (!product?.collection || product?.collection === '')}\r\n style={getStyle(commodityStyles?.collection)}\r\n >\r\n {product?.collection || 'Black Macrocannage CalfskinLarge'}\r\n </div>\r\n </div>\r\n <div className={'pb-commondityDiroNew-content-top-right'}>\r\n <div\r\n className={'pb-commondityDiroNew-content-top-right-price'}\r\n hidden={!!product && !product?.price}\r\n style={getStyle(commodityStyles?.price)}\r\n >\r\n {priceText}\r\n </div>\r\n <div\r\n className={'pb-commondityDiroNew-content-top-right-price'}\r\n hidden={!!product && !product?.taxInfo}\r\n style={getStyle(commodityStyles?.taxInfo)}\r\n >\r\n {product?.taxInfo ?? '税费'}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {(!product || product?.link) && (\r\n <button\r\n aria-label={cta?.enTitle ?? 'Shop now'}\r\n onClick={handleLink}\r\n className='pb-commondityDiroNew-btn'\r\n style={buttonStyle}\r\n >\r\n {cta?.enTitle ?? 'Shop now'}\r\n </button>\r\n )}\r\n {productInfoText({ isPost })}\r\n </div>\r\n </div>\r\n <Modal visible={showModal} onClose={() => setShowModal(false)}>\r\n {productInfoText({ isPost: false })}\r\n </Modal>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(CommodityDetailDiroNew);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-09 16:25:44\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetailDiroNew\\material.tsx\r\n *\r\n */\r\nimport settingRender from './settingRender';\r\nimport CommodityDetailDiroNewComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst CommodityDetailDiroNew = createMaterial(CommodityDetailDiroNewComponent, {\r\n displayName: '商品详情',\r\n icon: '',\r\n category: 'popup',\r\n type: 'CommodityDetailDiroNew',\r\n related: {\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n swiper: {\r\n dotsAlign: 'left',\r\n delay: 3\r\n },\r\n commodityStyles: {\r\n price: {\r\n color: '#000',\r\n fontWeight: 'bold',\r\n fontSize: 13\r\n },\r\n title: {\r\n color: '#000',\r\n fontSize: 13\r\n },\r\n collection: {\r\n color: '#757575',\r\n fontSize: 13\r\n },\r\n info: {\r\n color: '#757575',\r\n fontSize: 13\r\n },\r\n taxInfo: {\r\n color: '#000',\r\n fontWeight: 'bold',\r\n fontSize: 13,\r\n textAlign: 'right'\r\n }\r\n },\r\n buttonStyle: {\r\n backgroundColor: '#000',\r\n fontSize: 12,\r\n height: 52,\r\n fontWeight: 'bold',\r\n textAlign: 'center',\r\n color: '#fff',\r\n borderRadius: 25,\r\n marginTop: 16,\r\n marginBottom: 16\r\n }\r\n },\r\n style: {}\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 1\r\n});\r\n\r\nexport { CommodityDetailDiroNew };\r\n","import { fontOptions } from '../../defaultSetting';\r\n\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-26 16:50:25\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-21 16:39:34\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\components\\settingRender.tsx\r\n *\r\n */\r\nexport default [\r\n {\r\n title: '主题样式',\r\n child: [\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['style', 'width'],\r\n addonAfter: 'W'\r\n },\r\n {\r\n type: 'Number',\r\n name: ['style', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['style', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['style', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['style', 'backgroundColor']\r\n },\r\n {\r\n label: '内边距',\r\n type: 'Number',\r\n name: ['style', 'padding'],\r\n addonAfter: 'px'\r\n },\r\n {\r\n label: '与Post描述边距',\r\n type: 'Number',\r\n name: ['style', 'marginBottom'],\r\n addonAfter: 'px'\r\n }\r\n ]\r\n },\r\n {\r\n title: '商品图片',\r\n child: [\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'img', 'width'],\r\n addonAfter: 'W'\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'img', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['props', 'ctaTempStyles', 'img', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'img', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Number',\r\n label: '与右侧边距',\r\n addonAfter: 'px',\r\n name: ['props', 'ctaTempStyles', 'img', 'marginRight']\r\n },\r\n {\r\n label: '居中垂直偏移',\r\n type: 'Number',\r\n name: ['props', 'translateY'],\r\n min: -1000,\r\n addonAfter: '%',\r\n initialValue: 0\r\n }\r\n ]\r\n },\r\n {\r\n title: '商品标题文本',\r\n type: 'commodityTitle',\r\n child: [\r\n {\r\n type: 'Group',\r\n label: '字体',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'ctaTempStyles', 'title', 'color']\r\n },\r\n {\r\n type: 'Select',\r\n options: fontOptions,\r\n name: ['props', 'ctaTempStyles', 'title', 'fontFamily'],\r\n initialValue: fontOptions?.[0]?.value\r\n },\r\n {\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['props', 'ctaTempStyles', 'title', 'fontSize']\r\n }\r\n ]\r\n },\r\n {\r\n label: '样式',\r\n type: 'TextStyle',\r\n name: ['props', 'ctaTempStyles', 'title']\r\n },\r\n {\r\n label: '对齐',\r\n type: 'TextAlign',\r\n name: ['props', 'ctaTempStyles', 'title']\r\n },\r\n {\r\n label: '间距',\r\n type: 'TextSpace',\r\n name: ['props', 'ctaTempStyles', 'title']\r\n }\r\n ]\r\n },\r\n {\r\n title: 'CTA标题',\r\n child: [\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'width'],\r\n addonAfter: 'W'\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'backgroundColor']\r\n },\r\n {\r\n type: 'Group',\r\n label: '字体',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'color']\r\n },\r\n {\r\n type: 'Select',\r\n options: fontOptions,\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'fontFamily'],\r\n initialValue: fontOptions?.[0]?.value\r\n },\r\n {\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'fontSize']\r\n }\r\n ]\r\n },\r\n {\r\n label: '样式',\r\n type: 'TextStyle',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle']\r\n },\r\n {\r\n label: '对齐',\r\n type: 'TextAlign',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle']\r\n }\r\n ]\r\n }\r\n];\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-02-22 22:21:28\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-21 11:39:56\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\components\\EventProvider.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC, memo, useEffect, useRef } from 'react';\r\nimport { throttle } from 'lodash';\r\nimport useOnScreen from '@/core/hooks/useOnScreen';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nexport interface IImgProps {\r\n rec?: RecItemType;\r\n children: any;\r\n className?: any;\r\n onClick?: any;\r\n style?: CSSProperties;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n}\r\n\r\nconst EventProvider: FC<IImgProps> = ({\r\n rec,\r\n children,\r\n className,\r\n onClick,\r\n style,\r\n isExternalLink = false,\r\n index,\r\n ...props\r\n}) => {\r\n const ref = useRef(null);\r\n const { popup } = useEditor();\r\n const { setPopupDetailData, ctaEvent } = useSxpDataSource();\r\n const { jumpToWeb } = useEventReport();\r\n\r\n const handleClick = throttle(() => {\r\n const item = rec?.video?.bindProduct ?? rec?.video;\r\n ctaEvent?.(\r\n {\r\n eventSubject: 'clickCta',\r\n eventDescription: 'User clicked the CTA'\r\n },\r\n rec,\r\n item,\r\n index\r\n );\r\n setPopupDetailData?.({ ...rec, index });\r\n if (isExternalLink) {\r\n if (rec?.video?.bindProduct?.link) {\r\n const cta = rec?.video?.bindCta;\r\n const product = rec?.video?.bindProduct;\r\n jumpToWeb(rec, product, cta, index);\r\n window.location.href = window.getJointUtmLink(rec?.video?.bindProduct?.link);\r\n }\r\n } else {\r\n onClick?.();\r\n }\r\n }, popup?.duration);\r\n return (\r\n <div ref={ref} className={className} style={style} onClick={handleClick}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(EventProvider);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-04-12 09:58:58\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-01-16 14:01:20\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\hooks\\useOnScreen.ts\r\n *\r\n */\r\nimport { useEffect, useState, useRef, RefObject } from 'react';\r\n\r\nexport default function useOnScreen(ref: RefObject<HTMLElement>) {\r\n const observerRef = useRef<IntersectionObserver | null>(null);\r\n const [isOnScreen, setIsOnScreen] = useState(false);\r\n\r\n useEffect(() => {\r\n observerRef.current = new IntersectionObserver(([entry]) => {\r\n setIsOnScreen(entry.isIntersecting);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n ref?.current && observerRef?.current?.observe(ref?.current);\r\n return () => {\r\n observerRef?.current?.disconnect();\r\n };\r\n }, [ref]);\r\n\r\n return isOnScreen;\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-16 14:50:13\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-24 18:13:14\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\components\\Img.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { CSSProperties, FC, memo, useEffect, useMemo, useRef } from 'react';\r\nimport useOnScreen from '@/core/hooks/useOnScreen';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { ProductInfoType, RecItemType, VideoInfoType } from '@/core/components/SxpPageRender/typing';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nexport interface IImgProps {\r\n src?: string;\r\n rec?: RecItemType;\r\n item?: ProductInfoType | VideoInfoType | null;\r\n index?: number;\r\n style?: CSSProperties;\r\n translateY?: number;\r\n imgStyle?: CSSProperties;\r\n}\r\n\r\nconst Img: FC<IImgProps> = ({ src, rec, item, index, style, translateY, imgStyle }) => {\r\n const ref = useRef(null);\r\n const isOnScreen = useOnScreen(ref);\r\n const { ctaEvent } = useSxpDataSource();\r\n useEffect(() => {\r\n if (isOnScreen && src && ref?.current) {\r\n ctaEvent?.(\r\n {\r\n eventSubject: 'ctaExposure',\r\n eventDescription: 'The cta was shown to the user'\r\n },\r\n rec,\r\n item,\r\n index\r\n );\r\n }\r\n }, [isOnScreen, src, ref, rec, ctaEvent, item, index]);\r\n\r\n const imgSrc = useMemo(() => {\r\n return src?.includes('.avif') ? src : `${src}?imrquality/rquality/20`;\r\n }, [src]);\r\n\r\n return (\r\n <div\r\n className={css({\r\n overflow: 'hidden',\r\n flexShrink: 0,\r\n backgroundColor: '#f2f2f2',\r\n ...imgStyle\r\n })}\r\n >\r\n <div ref={ref} hidden={!src} className={css({ width: '100%', height: '100%' })}>\r\n <FormatImage\r\n className={css({\r\n width: '100%',\r\n objectFit: 'cover',\r\n height: '100%',\r\n display: 'block',\r\n objectPosition: `50% ${translateY ? -translateY + 50 : 50}%`,\r\n ...style\r\n })}\r\n src={src}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Img);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:32\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-21 18:32:29\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Commodity\\index.tsx\r\n *\r\n */\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-21 17:06:55\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Commodity\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo } from 'react';\r\nimport EventProvider from '../components/EventProvider';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nimport Img from '../components/Img';\r\nexport interface ICommodityProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst Commodity: FC<ICommodityProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n translateY = 0,\r\n index,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n const product = recData?.video?.bindProduct;\r\n const src = product?.cover ?? product?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image;\r\n\r\n return (\r\n <EventProvider\r\n isExternalLink={isExternalLink}\r\n rec={recData}\r\n className={css({ ...style })}\r\n style={{ display: 'flex' }}\r\n index={index}\r\n {...props}\r\n >\r\n <Img\r\n src={src}\r\n rec={recData}\r\n item={recData?.video?.bindProduct ?? recData?.video}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n color: '#fff',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div className={styles['tow-line-ellipsis']} style={ctaTempStyles?.title}>\r\n {product?.title ?? 'Product Name'}\r\n </div>\r\n <div\r\n className={css({\r\n padding: '0 7px',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n lineHeight: ctaTempStyles?.ctaTitle?.height + 'px',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n >\r\n {product?.bindCta?.enTitle ?? 'Shop Now'}\r\n </div>\r\n </div>\r\n </EventProvider>\r\n );\r\n};\r\n\r\nexport default memo(Commodity);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 16:39:54\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Commodity\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport CommodityComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst Commodity = createMaterial(CommodityComponent, {\r\n displayName: '推荐单商品-透明底',\r\n icon: '',\r\n category: 'template',\r\n type: 'Commodity',\r\n related: {\r\n interactionRender,\r\n bindableProps: [],\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 60,\r\n height: 60,\r\n marginRight: 8\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#fff',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n fontSize: 10,\r\n color: '#fff',\r\n textAlign: 'center',\r\n width: 130,\r\n height: 20,\r\n backgroundColor: 'rgba(0,0,0,.5)'\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 74,\r\n borderRadius: 3,\r\n backgroundColor: 'rgba(0,0,0,.3)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 1\r\n});\r\n\r\nexport { Commodity };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-21 12:00:04\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Appoint\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo } from 'react';\r\nimport EventProvider from '../components/EventProvider';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport Img from '../components/Img';\r\nexport interface IAppointProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n}\r\n\r\nconst Appoint: FC<IAppointProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n index,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n\r\n const cta = recData?.video?.bindCta;\r\n const src = cta?.icon ?? sxpParameter?.bottom_image ?? bottom_image;\r\n return (\r\n <EventProvider\r\n isExternalLink={isExternalLink}\r\n rec={recData}\r\n className={css({ alignItems: 'center', ...style })}\r\n style={{ display: 'flex' }}\r\n index={index}\r\n {...props}\r\n >\r\n <Img\r\n src={src}\r\n rec={recData}\r\n item={recData?.video?.bindProduct ?? recData?.video}\r\n index={index}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n >\r\n {cta?.enTitle ?? 'Product Name'}\r\n </div>\r\n </EventProvider>\r\n );\r\n};\r\n\r\nexport default memo(Appoint);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-09 21:42:21\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Appoint\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport AppointComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst Appoint = createMaterial(AppointComponent, {\r\n displayName: '预约表单',\r\n icon: '',\r\n category: 'template',\r\n type: 'Appoint',\r\n related: {\r\n interactionRender,\r\n settingRender: settingRender?.filter((i: any) => i.type !== 'commodityTitle'),\r\n bindableProps: []\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 30,\r\n height: 30,\r\n marginRight: 8\r\n },\r\n ctaTitle: {\r\n fontSize: 12,\r\n color: '#fff',\r\n textAlign: 'left',\r\n width: 130,\r\n height: 20\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 44,\r\n borderRadius: 3,\r\n backgroundColor: 'rgba(0,0,0,.3)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 6\r\n});\r\n\r\nexport { Appoint };\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-21 12:01:18\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Link\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo } from 'react';\r\nimport EventProvider from '../components/EventProvider';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nimport Img from '../components/Img';\r\nexport interface ILinkProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n index?: number;\r\n}\r\n\r\nconst Link: FC<ILinkProps> = ({ content, style, bgImg, recData, bottom_image, ctaTempStyles, index, ...props }) => {\r\n const { sxpParameter, bffEventReport } = useSxpDataSource();\r\n const { jumpToWeb } = useEventReport();\r\n const cta = recData?.video?.bindCta;\r\n const product = recData?.video?.bindProduct;\r\n\r\n const handleTo = () => {\r\n if (cta?.link) {\r\n jumpToWeb(recData, product, cta, index);\r\n\r\n window.location.href = window.getJointUtmLink(cta.link);\r\n }\r\n };\r\n const src = cta?.icon ?? sxpParameter?.bottom_image ?? bottom_image;\r\n return (\r\n <EventProvider\r\n index={index}\r\n rec={recData}\r\n className={css({ alignItems: 'center', ...style })}\r\n style={{ display: 'flex' }}\r\n {...props}\r\n onClick={handleTo}\r\n >\r\n \r\n <Img\r\n src={src}\r\n rec={recData}\r\n item={recData?.video?.bindProduct ?? recData?.video}\r\n index={index}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div className={styles['tow-line-ellipsis']} style={ctaTempStyles?.ctaTitle}>\r\n {cta?.enTitle ?? 'Product Name'}\r\n </div>\r\n </div>\r\n </EventProvider>\r\n );\r\n};\r\n\r\nexport default memo(Link);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 17:04:57\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Link\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport LinkComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst Link = createMaterial(LinkComponent, {\r\n displayName: '跳转指引',\r\n icon: '',\r\n category: 'template',\r\n type: 'Link',\r\n related: {\r\n settingRender: settingRender?.filter((i: any) => i.type !== 'commodityTitle'),\r\n bindableProps: []\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 60,\r\n height: 60,\r\n marginRight: 8\r\n },\r\n ctaTitle: {\r\n fontSize: 12,\r\n color: '#fff',\r\n textAlign: 'left',\r\n width: 130,\r\n height: 20\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 74,\r\n borderRadius: 3,\r\n backgroundColor: 'rgba(0,0,0,.3)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 5\r\n});\r\n\r\nexport { Link };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-21 12:00:48\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\CommodityDiro\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo } from 'react';\r\nimport EventProvider from '../components/EventProvider';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nimport Img from '../components/Img';\r\nexport interface ICommodityDiroProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst CommodityDiro: FC<ICommodityDiroProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n translateY = 0,\r\n index,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n const product = recData?.video?.bindProduct;\r\n const src = product?.cover ?? product?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image;\r\n return (\r\n <EventProvider\r\n isExternalLink={isExternalLink}\r\n rec={recData}\r\n className={css({\r\n ...style\r\n })}\r\n style={{ display: 'flex' }}\r\n index={index}\r\n {...props}\r\n >\r\n \r\n <Img\r\n src={src}\r\n rec={recData}\r\n item={recData?.video?.bindProduct ?? recData?.video}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n color: '#fff',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div className={styles['tow-line-ellipsis']} style={ctaTempStyles?.title}>\r\n {product?.title ?? 'Product Name'}\r\n </div>\r\n <div\r\n className={css({\r\n padding: '2px 7px',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n borderRadius: '25px',\r\n whiteSpace: 'nowrap',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n >\r\n {product?.bindCta?.enTitle ?? 'Shop Now'}\r\n </div>\r\n </div>\r\n </EventProvider>\r\n );\r\n};\r\n\r\nexport default memo(CommodityDiro);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 16:07:28\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\CommodityDiro\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport CommodityDiroComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst CommodityDiro = createMaterial(CommodityDiroComponent, {\r\n displayName: '推荐单商品-白底圆角按钮',\r\n icon: '',\r\n category: 'template',\r\n type: 'CommodityDiro',\r\n related: {\r\n interactionRender,\r\n settingRender,\r\n bindableProps: []\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 60,\r\n height: 60,\r\n marginRight: 8\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#000',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n fontSize: 10,\r\n color: '#fff',\r\n textAlign: 'center',\r\n width: 80,\r\n height: 20,\r\n backgroundColor: 'rgba(0,0,0,1)'\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 74,\r\n borderRadius: 3,\r\n backgroundColor: '#fff',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 2\r\n});\r\n\r\nexport { CommodityDiro };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:32\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-21 12:01:01\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\CommodityDiroNew\\index.tsx\r\n *\r\n */\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 10:17:53\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\CommodityDiroNew\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo } from 'react';\r\nimport EventProvider from '../components/EventProvider';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nimport Img from '../components/Img';\r\nexport interface ICommodityDiroNewProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst CommodityDiroNew: FC<ICommodityDiroNewProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n translateY = 0,\r\n index,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n const product = recData?.video?.bindProduct;\r\n const src = product?.cover ?? product?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image;\r\n return (\r\n <EventProvider\r\n isExternalLink={isExternalLink}\r\n rec={recData}\r\n className={css({\r\n ...style\r\n })}\r\n style={{ display: 'flex' }}\r\n index={index}\r\n {...props}\r\n >\r\n \r\n <Img\r\n src={src}\r\n rec={recData}\r\n item={recData?.video?.bindProduct ?? recData?.video}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n \r\n />\r\n <div\r\n className={css({\r\n color: '#fff',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div className={styles['tow-line-ellipsis']} style={ctaTempStyles?.title}>\r\n {product?.title ?? 'Product Name'}\r\n </div>\r\n <div\r\n className={css({\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n >\r\n {product?.bindCta?.enTitle ?? 'Shop now'}\r\n </div>\r\n </div>\r\n </EventProvider>\r\n );\r\n};\r\n\r\nexport default memo(CommodityDiroNew);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-09 11:54:27\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\CommodityDiroNew\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport CommodityDiroNewComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst CommodityDiroNew = createMaterial(CommodityDiroNewComponent, {\r\n displayName: '推荐单商品-白底下划线按钮',\r\n icon: '',\r\n category: 'template',\r\n type: 'CommodityDiroNew',\r\n related: {\r\n interactionRender,\r\n bindableProps: [],\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 8,\r\n width: 78,\r\n height: 78,\r\n marginRight: 16\r\n },\r\n title: {\r\n fontSize: 13,\r\n color: '#000',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n textDecoration: 'underline',\r\n fontSize: 14,\r\n fontWeight: 'bold',\r\n color: '#000',\r\n textAlign: 'left',\r\n width: 150,\r\n height: 20\r\n }\r\n }\r\n },\r\n style: {\r\n borderRadius: 4,\r\n width: 260,\r\n height: 86,\r\n padding: 4,\r\n backgroundColor: 'rgba(255,255,255,0.75)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 2\r\n});\r\n\r\nexport { CommodityDiroNew };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","import React, { memo, FC } from 'react';\r\n// Import Swiper React components\r\nimport { Swiper } from 'swiper/react';\r\n\r\n// Import Swiper styles\r\nimport 'swiper/css';\r\nimport 'swiper/css/free-mode';\r\nimport 'swiper/css/scrollbar';\r\n\r\n// import required modules\r\nimport { FreeMode, Scrollbar, Mousewheel } from 'swiper/modules';\r\n\r\ninterface IScrollProps {\r\n children: any;\r\n isPadding?: boolean;\r\n}\r\n\r\nconst Scroll: FC<IScrollProps> = ({ children, isPadding = true }) => {\r\n return (\r\n <Swiper\r\n direction={'horizontal'}\r\n slidesPerView={'auto'}\r\n freeMode={true}\r\n mousewheel={true}\r\n modules={[FreeMode, Scrollbar, Mousewheel]}\r\n style={{ padding: isPadding ? '0 12px 0 20px' : 0 }}\r\n >\r\n {children}\r\n </Swiper>\r\n );\r\n};\r\n\r\nexport default memo(Scroll);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-23 09:59:50\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodityDiro\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo, useState } from 'react';\r\nimport { SwiperSlide } from 'swiper/react';\r\nimport { throttle } from 'lodash';\r\nimport Scroll from '../components/Scroll';\r\nimport Img from '../components/Img';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nexport interface IMultiCommodityDiroProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n onClick?: () => void;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst MultiCommodityDiro: FC<IMultiCommodityDiroProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n onClick,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n index,\r\n translateY = 0,\r\n ...props\r\n}) => {\r\n const { ctaEvent, setPopupDetailData, sxpParameter } = useSxpDataSource();\r\n const { popup } = useEditor();\r\n const { jumpToWeb } = useEventReport();\r\n\r\n const [products, setProducts] = useState(recData?.video?.bindProducts ?? [1, 2]);\r\n const handleClick = throttle((item: any) => {\r\n ctaEvent?.(\r\n {\r\n eventSubject: 'clickCta',\r\n eventDescription: 'User clicked the CTA'\r\n },\r\n recData,\r\n item,\r\n index\r\n );\r\n setPopupDetailData?.({ ...recData, video: { ...recData?.video, bindProduct: item }, index });\r\n if (isExternalLink) {\r\n if (item?.link) {\r\n jumpToWeb(recData, item, item.bindCta, index);\r\n window.location.href = window.getJointUtmLink(item.link);\r\n }\r\n } else {\r\n onClick?.();\r\n }\r\n }, popup?.duration);\r\n return (\r\n <Scroll isPadding={!!recData}>\r\n {products?.map((item: any) => {\r\n return (\r\n <>\r\n {recData && !item?.bindCta ? null : (\r\n <SwiperSlide\r\n key={item?.itemId}\r\n className={css({\r\n ...style,\r\n display: 'flex',\r\n flexShrink: 0,\r\n marginLeft: 0,\r\n marginRight: '8px'\r\n })}\r\n {...props}\r\n onClick={() => handleClick(item)}\r\n >\r\n <Img\r\n src={item?.cover ?? item?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image}\r\n rec={recData}\r\n item={item}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n color: '#000',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div className={styles['two-line-ellipsis']} style={ctaTempStyles?.title}>\r\n {item?.title ?? 'Product Name'}\r\n </div>\r\n <div\r\n className={css({\r\n padding: '2px 7px',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n borderRadius: '25px',\r\n whiteSpace: 'nowrap',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n >\r\n {item?.bindCta?.enTitle ?? 'Shop Now'}\r\n </div>\r\n </div>\r\n </SwiperSlide>\r\n )}\r\n </>\r\n );\r\n })}\r\n </Scroll>\r\n );\r\n};\r\n\r\nexport default memo(MultiCommodityDiro);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 16:27:22\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodityDiro\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport MultiCommodityDiroComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst MultiCommodityDiro = createMaterial(MultiCommodityDiroComponent, {\r\n displayName: '推荐多商品-白底圆角按钮',\r\n icon: '',\r\n category: 'template',\r\n type: 'MultiCommodityDiro',\r\n related: {\r\n interactionRender,\r\n bindableProps: [],\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 60,\r\n height: 60,\r\n marginRight: 8\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#000',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n fontSize: 10,\r\n color: '#fff',\r\n textAlign: 'center',\r\n width: 80,\r\n height: 20,\r\n backgroundColor: 'rgba(0,0,0,1)'\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 74,\r\n borderRadius: 3,\r\n backgroundColor: '#fff',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 4\r\n});\r\n\r\nexport { MultiCommodityDiro };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-21 12:01:39\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodity\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo, useState } from 'react';\r\nimport { SwiperSlide } from 'swiper/react';\r\nimport { throttle } from 'lodash';\r\nimport Img from '../components/Img';\r\nimport Scroll from '../components/Scroll';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nexport interface IMultiCommodityProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n onClick?: () => void;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst MultiCommodity: FC<IMultiCommodityProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n onClick,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n index,\r\n translateY = 0,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n const { ctaEvent, setPopupDetailData } = useSxpDataSource();\r\n const { popup } = useEditor();\r\n const [products, setProducts] = useState(recData?.video?.bindProducts ?? [1, 2]);\r\n const { jumpToWeb } = useEventReport();\r\n\r\n const handleClick = throttle((item: any) => {\r\n ctaEvent?.(\r\n {\r\n eventSubject: 'clickCta',\r\n eventDescription: 'User clicked the CTA'\r\n },\r\n recData,\r\n item,\r\n index\r\n );\r\n setPopupDetailData?.({ ...recData, video: { ...recData?.video, bindProduct: item }, index });\r\n if (isExternalLink) {\r\n if (item?.link) {\r\n jumpToWeb(recData, item, item.bindCta, index);\r\n window.location.href = window.getJointUtmLink(item.link);\r\n }\r\n } else {\r\n onClick?.();\r\n }\r\n }, popup?.duration);\r\n return (\r\n <Scroll isPadding={!!recData}>\r\n {products?.map((item: any) => {\r\n return (\r\n <>\r\n {recData && !item?.bindCta ? null : (\r\n <SwiperSlide\r\n key={item.itemId}\r\n className={css({\r\n ...style,\r\n display: 'flex',\r\n flexShrink: 0,\r\n marginLeft: 0,\r\n marginRight: '8px'\r\n })}\r\n {...props}\r\n onClick={() => handleClick(item)}\r\n >\r\n <Img\r\n src={item?.cover ?? item?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image}\r\n rec={recData}\r\n item={item}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n color: '#fff',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div className={styles['two-line-ellipsis']} style={ctaTempStyles?.title}>\r\n {item?.title ?? 'Product Name'}\r\n </div>\r\n <div\r\n className={css({\r\n padding: '0 7px',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n lineHeight: ctaTempStyles?.ctaTitle?.height + 'px',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n >\r\n {item?.bindCta?.enTitle ?? 'Shop Now'}\r\n </div>\r\n </div>\r\n </SwiperSlide>\r\n )}\r\n </>\r\n );\r\n })}\r\n </Scroll>\r\n );\r\n};\r\n\r\nexport default memo(MultiCommodity);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 16:43:35\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodity\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport MultiCommodityComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst MultiCommodity = createMaterial(MultiCommodityComponent, {\r\n displayName: '推荐多商品-透明底',\r\n icon: '',\r\n category: 'template',\r\n type: 'MultiCommodity',\r\n related: {\r\n interactionRender,\r\n settingRender,\r\n bindableProps: []\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 60,\r\n height: 60,\r\n marginRight: 8\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#fff',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n fontSize: 10,\r\n color: '#fff',\r\n textAlign: 'center',\r\n width: 130,\r\n height: 20,\r\n backgroundColor: 'rgba(0,0,0,.5)'\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 74,\r\n borderRadius: 3,\r\n backgroundColor: 'rgba(0,0,0,.3)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 3\r\n});\r\n\r\nexport { MultiCommodity };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-20 18:17:51\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodityDiroNew\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo, useState } from 'react';\r\nimport { SwiperSlide } from 'swiper/react';\r\nimport { throttle } from 'lodash';\r\nimport Scroll from '../components/Scroll';\r\nimport Img from '../components/Img';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nexport interface IMultiCommodityDiroNewProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n onClick?: () => void;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst MultiCommodityDiroNew: FC<IMultiCommodityDiroNewProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n onClick,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n index,\r\n translateY = 0,\r\n ...props\r\n}) => {\r\n const { ctaEvent, setPopupDetailData, sxpParameter } = useSxpDataSource();\r\n const { popup } = useEditor();\r\n const { jumpToWeb } = useEventReport();\r\n\r\n const [products, setProducts] = useState(recData?.video?.bindProducts ?? [1, 2]);\r\n\r\n const handleClick = throttle((item: any) => {\r\n ctaEvent?.(\r\n {\r\n eventSubject: 'clickCta',\r\n eventDescription: 'User clicked the CTA'\r\n },\r\n recData,\r\n item,\r\n index\r\n );\r\n setPopupDetailData?.({ ...recData, video: { ...recData?.video, bindProduct: item }, index });\r\n if (isExternalLink) {\r\n if (item?.link) {\r\n jumpToWeb(recData, item, item.bindCta, index);\r\n window.location.href = window.getJointUtmLink(item.link);\r\n }\r\n } else {\r\n onClick?.();\r\n }\r\n }, popup?.duration);\r\n\r\n return (\r\n <Scroll isPadding={!!recData}>\r\n {products?.map((item: any) => {\r\n return (\r\n <>\r\n {recData && !item?.bindCta ? null : (\r\n <SwiperSlide\r\n key={item?.itemId}\r\n className={css({\r\n ...style,\r\n display: 'flex',\r\n flexShrink: 0,\r\n marginLeft: 0,\r\n marginRight: '8px'\r\n })}\r\n {...props}\r\n onClick={() => handleClick(item)}\r\n >\r\n <Img\r\n src={item?.cover ?? item?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image}\r\n rec={recData}\r\n item={item}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n color: '#fff',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n width: '100%',\r\n overflow: 'hidden',\r\n lineHeight: '20px'\r\n })}\r\n >\r\n <div className={styles['tow-line-ellipsis']} style={ctaTempStyles?.title}>\r\n {item?.title ?? 'Product Name'}\r\n </div>\r\n <div\r\n className={css({\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n >\r\n {item?.bindCta?.enTitle ?? 'Shop now'}\r\n </div>\r\n </div>\r\n </SwiperSlide>\r\n )}\r\n </>\r\n );\r\n })}\r\n </Scroll>\r\n );\r\n};\r\n\r\nexport default memo(MultiCommodityDiroNew);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-21 16:44:00\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodityDiroNew\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport MultiCommodityDiroNewComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst MultiCommodityDiroNew = createMaterial(MultiCommodityDiroNewComponent, {\r\n displayName: '推荐多商品-白底下划线按钮',\r\n icon: '',\r\n category: 'template',\r\n type: 'MultiCommodityDiroNew',\r\n related: {\r\n interactionRender,\r\n bindableProps: [],\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 8,\r\n width: 78,\r\n height: 78,\r\n marginRight: 16\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#000',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n textDecoration: 'underline',\r\n fontSize: 12,\r\n fontWeight: 'bold',\r\n color: '#000',\r\n textAlign: 'left',\r\n width: 150,\r\n height: 20\r\n }\r\n }\r\n },\r\n style: {\r\n borderRadius: 4,\r\n width: 260,\r\n height: 86,\r\n padding: 4,\r\n backgroundColor: 'rgba(255,255,255,0.75)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 4\r\n});\r\n\r\nexport { MultiCommodityDiroNew };\r\n","import { fontOptions } from '../defaultSetting';\r\n\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-04-07 14:07:12\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-11 11:04:55\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\HashTag\\settingRender.tsx\r\n *\r\n */\r\nexport default [\r\n {\r\n title: 'Banner',\r\n child: [\r\n {\r\n type: 'Switch',\r\n label: 'Banner图开关',\r\n name: ['props', 'showBanner']\r\n }\r\n ]\r\n },\r\n {\r\n title: '卡片样式',\r\n child: [\r\n {\r\n type: 'Number',\r\n label: '上下边距',\r\n name: ['props', 'space'],\r\n addonAfter: 'px'\r\n },\r\n {\r\n type: 'Switch',\r\n label: '固定宽高',\r\n name: ['props', 'openFixedSize'],\r\n initialValue: true\r\n }\r\n ]\r\n },\r\n {\r\n title: '文本设置',\r\n child: [\r\n {\r\n name: ['props', 'textStyles'],\r\n type: 'SelectLinkage',\r\n child: [\r\n {\r\n label: '字段',\r\n type: 'Select',\r\n options: [\r\n {\r\n label: 'hashtag标题',\r\n value: 'hashTagTitle'\r\n },\r\n {\r\n label: 'hashtag描述',\r\n value: 'hashTagDesc'\r\n },\r\n {\r\n label: 'hashtag描述超链',\r\n value: 'hashTagLink'\r\n },\r\n {\r\n label: '标题',\r\n value: 'title'\r\n },\r\n {\r\n label: '价格',\r\n value: 'price'\r\n }\r\n ],\r\n name: ['props', 'textStyles', 'field'],\r\n initialValue: 'title'\r\n },\r\n {\r\n type: 'Group',\r\n label: '标题字体',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['color']\r\n },\r\n {\r\n type: 'Select',\r\n options: fontOptions,\r\n name: ['fontFamily'],\r\n initialValue: fontOptions?.[0]?.value\r\n },\r\n {\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['fontSize']\r\n }\r\n ]\r\n },\r\n {\r\n label: '标题样式',\r\n type: 'TextStyle'\r\n },\r\n {\r\n label: '标题对齐',\r\n type: 'TextAlign'\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: '按钮样式',\r\n child: [\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['props', 'buttonStyle', 'backgroundColor'],\r\n initialValue: '#000'\r\n },\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextPadding',\r\n name: ['props', 'buttonBgStyle']\r\n },\r\n {\r\n type: 'Group',\r\n label: '字体',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'buttonStyle', 'color'],\r\n initialValue: '#fff'\r\n },\r\n\r\n {\r\n type: 'Select',\r\n name: ['props', 'buttonStyle', 'fontFamily'],\r\n options: fontOptions,\r\n initialValue: fontOptions?.[0]?.value\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'fontSize'],\r\n addonAfter: 'px'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextStyle',\r\n name: ['props', 'buttonStyle']\r\n },\r\n {\r\n type: 'TextAlign',\r\n name: ['props', 'buttonStyle']\r\n }\r\n ]\r\n },\r\n {\r\n title: '按钮背景样式',\r\n child: [\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['props', 'buttonBgStyle', 'backgroundColor'],\r\n initialValue: '#fff'\r\n },\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonBgStyle', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-26 16:11:34\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-08 11:53:47\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Navbar.tsx\r\n *\r\n */\r\nimport React, { memo, FC, CSSProperties } from 'react';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\n\r\ninterface INavbarProps {\r\n icon?: string;\r\n styles?: CSSProperties;\r\n textStyle?: CSSProperties;\r\n onClose?: () => void;\r\n}\r\n\r\nconst Navbar: FC<INavbarProps> = ({ icon, styles, textStyle, onClose }) => {\r\n const { waterFallData, setOpenHashtag } = useSxpDataSource();\r\n\r\n return (\r\n <div className='clc-sxp-nav' style={styles}>\r\n <img className='clc-sxp-nav-left' src={icon} alt='back button' onClick={onClose} />\r\n <div className='clc-sxp-nav-title' style={textStyle}>{`#${waterFallData?.hashTag ?? '标题'}`}</div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Navbar);\r\n","// 瀑布流\r\nimport React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';\r\nimport { RecItemType, RecommendVideoResultType } from '../typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport './WaterfallList.less';\r\nimport previewData from './preview.json';\r\nimport { IHashTagProps } from '@/materials/sxp/HashTag';\r\nimport FormatImage from '../FormatImage';\r\nimport { css } from '@emotion/css';\r\n\r\ninterface WaterfallFlowItemProps {\r\n /** 显示边界 */\r\n showBorder: number;\r\n style: React.CSSProperties;\r\n unitWidth: number;\r\n index: number;\r\n rec: RecItemType;\r\n sizeChange?: (height: number, index: number) => void;\r\n list: RecItemType[];\r\n reportTagsView: () => void;\r\n}\r\nconst WaterfallFlowItem = (props: WaterfallFlowItemProps & IHashTagProps) => {\r\n const {\r\n rec,\r\n style = {},\r\n sizeChange = () => {},\r\n unitWidth,\r\n index,\r\n showBorder,\r\n list,\r\n reportTagsView,\r\n textStyles,\r\n space\r\n } = props;\r\n const { swiperRef, setRtcList, setOpenHashtag, sxpParameter } = useSxpDataSource();\r\n\r\n const [showVideo, setShowVideo] = useState(false);\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [imgInfo, setImgInfo] = useState<{\r\n height: number;\r\n width: number;\r\n }>({\r\n height: 1,\r\n width: 1\r\n });\r\n const imgDom = useRef<any>(null);\r\n const ref = useRef<any>(null);\r\n const videoDom = useRef<any>(null);\r\n const canvasRef = useRef(null);\r\n const [firstFrameSrc, setFirstFrameSrc] = useState('');\r\n\r\n const src = useMemo(() => {\r\n if (rec?.video?.cover) {\r\n return rec?.video?.cover;\r\n } else if (rec?.video?.imgUrls?.length) {\r\n return rec?.video?.imgUrls?.[0];\r\n } else if (rec?.product?.homePage?.length) {\r\n return rec?.product?.homePage?.[0];\r\n } else {\r\n return sxpParameter?.bottom_image || '';\r\n }\r\n }, [rec, sxpParameter?.bottom_image]);\r\n\r\n const title = useMemo(() => {\r\n return rec?.product?.title || rec?.video?.title || null;\r\n }, [rec]);\r\n\r\n /** 离父亲上边框的距离 */\r\n const top = useMemo(() => {\r\n const y = style.transform\r\n ? Number(style.transform?.substring(style.transform.indexOf(',', 0) + 1, style.transform.length - 3))\r\n : undefined;\r\n return y;\r\n }, [style]);\r\n\r\n /** 是否加载图片 */\r\n const isImgShow = useMemo(() => {\r\n if (top === undefined) {\r\n return false;\r\n }\r\n if (top <= showBorder) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }, [top, showBorder]);\r\n\r\n const priceText = useMemo(() => {\r\n if (rec?.product?.currency && rec?.product?.price) {\r\n return `${rec?.product?.currency?.split('-')[1]?.toUpperCase() ?? ''}${\r\n rec?.product?.price?.toLocaleString('zh', {\r\n minimumFractionDigits: 0\r\n }) ?? ''\r\n }`;\r\n } else {\r\n return null;\r\n }\r\n }, [rec]);\r\n\r\n useEffect(() => {\r\n if (imgDom.current === null || src === '') {\r\n return;\r\n }\r\n let imgSrc = null;\r\n if (showVideo && firstFrameSrc) {\r\n imgSrc = firstFrameSrc;\r\n } else {\r\n imgSrc = src;\r\n }\r\n if (imgSrc) imgDom.current.setSrc(imgSrc);\r\n }, [src, showVideo, firstFrameSrc]);\r\n\r\n const pictRef = useRef<any>();\r\n\r\n const imgLoad = useCallback(\r\n (img: any) => {\r\n setTimeout(() => {\r\n const height = pictRef?.current?.offsetHeight;\r\n // 加56是因为下方文字部分高度为56,可以自己设置\r\n sizeChange(height + 56 + space, index);\r\n }, 0);\r\n },\r\n [space, sizeChange, index, unitWidth, pictRef]\r\n );\r\n\r\n const handleClickToDetail = () => {\r\n reportTagsView();\r\n setRtcList?.(list);\r\n setTimeout(() => {\r\n swiperRef?.current?.swiper.slideTo(index, 0, false);\r\n setOpenHashtag?.(false);\r\n }, 0);\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n style={{\r\n ...style\r\n }}\r\n className={'waterFallList-content-listItem'}\r\n key={index}\r\n onClick={handleClickToDetail}\r\n >\r\n <div className={'waterFallList-content-listItem-picture'} ref={pictRef}>\r\n <FormatImage\r\n loading='lazy'\r\n className='waterFallList-content-listItem-picture-img'\r\n onLoad={imgLoad}\r\n ref={imgDom}\r\n />\r\n </div>\r\n <div className={'waterFallList-content-listItem-info'}>\r\n <div\r\n className={`${'waterFallList-content-listItem-info-title'} ${\r\n priceText ? 'waterFallList-content-listItem-info-nowrap' : ''\r\n }`}\r\n style={{\r\n ...textStyles?.title\r\n }}\r\n >\r\n {title && title}\r\n </div>\r\n <div className={'waterFallList-content-listItem-info-price'} hidden={!priceText} style={textStyles.price}>\r\n {priceText}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default function WaterfallList({ reportTagsView, showBanner, ...props }: any & IHashTagProps) {\r\n const { waterFallData, getRecommendVideos, hashTagSize, loadingImage, isOpenHashTag } = useSxpDataSource();\r\n\r\n /** 滚动的父元素 */\r\n const scrollParent = useRef(null);\r\n /** 向上滚动的距离 */\r\n const [scrollTop, setScrollTop] = useState(0);\r\n /** 数据列表 */\r\n const [data, setData] = useState<RecommendVideoResultType>();\r\n const waterfallFlowDom = useRef(null);\r\n /** 样式列表 */\r\n const [styleList, setStyleList] = useState<React.CSSProperties[]>([]);\r\n const styleListRef = useRef<any>();\r\n /** 自定义骨架屏高度 */\r\n const heightList = [170, 230, 300];\r\n /** 到达底部 */\r\n const [isLoadingData, setIsLoadingData] = useState(false);\r\n const [list, setList] = useState<RecItemType[]>([]);\r\n const buttonRef = useRef<any>();\r\n /** 生成随机数 */\r\n const createRandomNum = useCallback((min: number, max: number): number => {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n }, []);\r\n\r\n const waterfallFlowListInfo = useRef<\r\n {\r\n left: number;\r\n top: number;\r\n height: number;\r\n }[]\r\n >([]);\r\n\r\n /** 当前容器信息 */\r\n const [frameInfo, setFrameInfoInfo] = useState<{\r\n width: number;\r\n }>({ width: 0 });\r\n\r\n /** 每行个数 */\r\n const rowsNum = useMemo(() => {\r\n const width = frameInfo.width || 0;\r\n if (width >= 1200) {\r\n return 6;\r\n } else if (width >= 768 && width <= 1199) {\r\n return 4;\r\n } else {\r\n return 2;\r\n }\r\n }, [frameInfo]);\r\n\r\n /** 每一个的宽度 */\r\n const unitWidth = useMemo(() => {\r\n return frameInfo.width / rowsNum - 2;\r\n }, [rowsNum, frameInfo]);\r\n\r\n /** 获取位置 */\r\n const getStyleList = useCallback(() => {\r\n const temporaryStyleList: React.CSSProperties[] = styleListRef.current ?? [];\r\n /** 目前最下一行的index */\r\n const bottomItemIndex = [];\r\n for (let i = 0; i < list?.length; i++) {\r\n // 原本应对应的行数\r\n const currentRow = Math.floor(i / rowsNum);\r\n const remainder = (i % rowsNum) + 1;\r\n\r\n // 最低item下标\r\n let minHeightInd = 0;\r\n // 最低高度\r\n let minHeight = 9999999999;\r\n // 寻找最低高度的下标\r\n if (currentRow === 0) {\r\n bottomItemIndex[i] = i;\r\n } else {\r\n for (let j = 0; j < bottomItemIndex.length; j++) {\r\n if (\r\n waterfallFlowListInfo.current[bottomItemIndex[j]].top +\r\n waterfallFlowListInfo.current[bottomItemIndex[j]].height <\r\n minHeight\r\n ) {\r\n minHeightInd = j;\r\n minHeight =\r\n waterfallFlowListInfo.current[bottomItemIndex[j]].top +\r\n waterfallFlowListInfo.current[bottomItemIndex[j]].height;\r\n }\r\n }\r\n bottomItemIndex[minHeightInd] = i;\r\n }\r\n\r\n if (waterfallFlowListInfo.current[i] === undefined) {\r\n waterfallFlowListInfo.current[i] = {} as any;\r\n }\r\n\r\n // 第一行特殊处理,一定是从左到右铺的\r\n if (currentRow === 0) {\r\n if (remainder === 1) {\r\n waterfallFlowListInfo.current[i].left = 0;\r\n } else {\r\n waterfallFlowListInfo.current[i].left = waterfallFlowListInfo.current[i - 1].left + unitWidth + 4;\r\n }\r\n waterfallFlowListInfo.current[i].top = 0;\r\n }\r\n // 剩下的行数,铺在当前最低高度下面\r\n else {\r\n waterfallFlowListInfo.current[i].left = waterfallFlowListInfo.current[minHeightInd].left;\r\n waterfallFlowListInfo.current[i].top = minHeight;\r\n }\r\n\r\n // 是否已经有高度,有高度使用已有高度,否则随机生成\r\n waterfallFlowListInfo.current[i].height =\r\n waterfallFlowListInfo.current[i].height || heightList[createRandomNum(0, 2)];\r\n temporaryStyleList[i] = {\r\n transform: `translate(${waterfallFlowListInfo.current[i].left}px,${waterfallFlowListInfo.current[i].top}px)`,\r\n width: `${unitWidth}px`,\r\n height: waterfallFlowListInfo.current[i].height\r\n };\r\n }\r\n setStyleList([...temporaryStyleList]);\r\n return [...temporaryStyleList];\r\n }, [unitWidth, rowsNum, heightList, createRandomNum, list]);\r\n\r\n /** 图片加载完更新高度 */\r\n const onSizeChange = useCallback(\r\n (height: number, index: number) => {\r\n if (waterfallFlowListInfo.current[index] === undefined) {\r\n waterfallFlowListInfo.current[index] = {} as any;\r\n }\r\n waterfallFlowListInfo.current[index].height = height;\r\n styleListRef.current = getStyleList();\r\n },\r\n [getStyleList]\r\n );\r\n\r\n /** 大小、数量发生变化时触发 */\r\n useEffect(() => {\r\n styleListRef.current = getStyleList();\r\n }, [unitWidth, rowsNum, list]); /* 增加getStyleList依赖项会导致在admin预览编辑时无限刷新 */\r\n\r\n /** 初始化请求数据 */\r\n useEffect(() => {\r\n setIsLoadingData(true);\r\n waterFallData &&\r\n getRecommendVideos?.({\r\n hashTag: waterFallData?.hashTag,\r\n 'itemFilter.itemId': waterFallData?.itemId,\r\n 'itemFilter.itemType': waterFallData?.itemType,\r\n defaultSize: hashTagSize,\r\n maxSize: hashTagSize\r\n }).then((res) => {\r\n setData(res);\r\n setList(res?.recList?.filter((item) => item?.video !== null || item?.product !== null) ?? []);\r\n setIsLoadingData(false);\r\n });\r\n if (isOpenHashTag) {\r\n const res = previewData as any;\r\n setData(res);\r\n setList(res?.recList?.filter((item: any) => item?.video !== null || item?.product !== null) ?? []);\r\n setIsLoadingData(false);\r\n }\r\n }, [waterFallData, getRecommendVideos, hashTagSize, isOpenHashTag]);\r\n\r\n const onResize = useCallback(() => {\r\n if (waterfallFlowDom.current === null) {\r\n return;\r\n }\r\n setFrameInfoInfo({\r\n width: (waterfallFlowDom.current as HTMLDivElement).getBoundingClientRect().width\r\n });\r\n }, []);\r\n\r\n /** 监听列表容器大小变化 */\r\n useEffect(() => {\r\n if (waterfallFlowDom.current === null) {\r\n return;\r\n }\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n onResize();\r\n });\r\n resizeObserver.observe(waterfallFlowDom.current);\r\n return () => {\r\n resizeObserver.disconnect();\r\n };\r\n }, [onResize]);\r\n\r\n const loadMoreData = useCallback(() => {\r\n setIsLoadingData(true);\r\n\r\n waterFallData &&\r\n getRecommendVideos?.({\r\n hashTag: waterFallData?.hashTag,\r\n 'itemFilter.itemId': waterFallData?.itemId,\r\n 'itemFilter.itemType': waterFallData?.itemType\r\n }).then((res) => {\r\n setList(list?.concat(res?.recList?.filter((item) => !item?.video) ?? []));\r\n setIsLoadingData(false);\r\n });\r\n }, [waterFallData, getRecommendVideos, list]);\r\n\r\n const onScroll = useCallback(() => {\r\n // 记录滚动值\r\n setScrollTop((scrollParent.current as any).scrollTop);\r\n // const top = (scrollParent.current as any).scrollTop;\r\n // const clientHeight = (scrollParent.current as any).clientHeight;\r\n // const scrollHeight = (scrollParent.current as any).scrollHeight;\r\n\r\n // // 做底部加载\r\n // if (scrollHeight <= top + clientHeight && !isLoadingData) {\r\n // loadMoreData();\r\n // }\r\n }, []);\r\n\r\n /** 监听滚动 */\r\n useEffect(() => {\r\n (scrollParent?.current as any)?.addEventListener('scroll', onScroll);\r\n return () => {\r\n (scrollParent?.current as any)?.removeEventListener('scroll', onScroll);\r\n };\r\n }, [onScroll, scrollParent]);\r\n\r\n const handleClickLink = () => {\r\n if (data?.tag?.link) {\r\n reportTagsView();\r\n window.location.href = data?.tag?.link;\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {isLoadingData ? (\r\n <div style={{ height: '100%', width: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\r\n <img width={64} height={64} src={loadingImage} alt='loading...' style={{ objectFit: 'contain' }} />\r\n </div>\r\n ) : (\r\n <div className={'waterFallList'} ref={waterfallFlowDom}>\r\n <div className={'waterFallList-scroll'} ref={scrollParent}>\r\n {showBanner && data?.tag?.picture && (\r\n <div onClick={handleClickLink}>\r\n <FormatImage\r\n className={css({\r\n width: '100%',\r\n objectFit: 'cover',\r\n marginBottom: '20px'\r\n })}\r\n src={data?.tag?.picture}\r\n />\r\n </div>\r\n )}\r\n <div className={'waterFallList-info'} style={props?.textStyles?.hashTagDesc}>\r\n {data?.tag?.info}\r\n </div>\r\n <div\r\n hidden={!data?.tag?.link}\r\n className={'waterFallList-collection'}\r\n style={{ ...props?.textStyles?.hashTagLink }}\r\n onClick={handleClickLink}\r\n >\r\n {data?.tag?.linkTitle || 'Shop the collection'}\r\n </div>\r\n <div className={'waterFallList-content'}>\r\n {list?.map((item, ind) => {\r\n return (\r\n <WaterfallFlowItem\r\n key={ind}\r\n index={ind}\r\n rec={item}\r\n list={list}\r\n showBorder={scrollTop + (scrollParent?.current as any)?.clientHeight}\r\n style={styleList[ind]}\r\n sizeChange={onSizeChange}\r\n unitWidth={unitWidth}\r\n reportTagsView={reportTagsView}\r\n {...props}\r\n />\r\n );\r\n })}\r\n <div\r\n hidden={!data?.tag?.link}\r\n style={{\r\n position: 'absolute',\r\n width: '100%',\r\n transform: `translate(0px,${\r\n waterfallFlowListInfo?.current[waterfallFlowListInfo?.current?.length - 1]?.top +\r\n waterfallFlowListInfo?.current[waterfallFlowListInfo?.current?.length - 1]?.height ?? 0\r\n }px)`,\r\n height: data?.tag?.link\r\n ? buttonRef?.current?.offsetHeight || props?.buttonBgStyle?.height || '100px'\r\n : 0\r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n <div className={'waterFallList-bottom'} hidden={!data?.tag?.link} style={props?.buttonBgStyle}></div>\r\n <div\r\n ref={buttonRef}\r\n hidden={!data?.tag?.link}\r\n className='waterFallList-btn-wrap'\r\n style={{ ...props?.buttonBgStyle, height: 'auto', backgroundColor: 'transparent' }}\r\n >\r\n <button\r\n aria-label={data?.tag?.linkTitle || 'Shop the collection'}\r\n className={'waterFallList-btn'}\r\n style={props?.buttonStyle}\r\n onClick={handleClickLink}\r\n >\r\n {data?.tag?.linkTitle || 'Shop the collection'}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","var img = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAaZJREFUeF7t2jFKBEEQRuG3mSJeQTARURDMTL2EqXfwAnoKD6FHMDEzNVIw2tzQC2gFggyDrExX1V92T7wz9PumFnqbXdH5teq8nwEwJqBzgfEVKDYAW8Ae8NZq3ZUm4Aa4AnaBR+C8BUIVAIu/ngSfAs9LESoAWLgB/LzWwP7SeLtfHWAu3tZ9Adz/dwD3eOUJCIlXBQiLVwQIjVcDCI9XAkiJVwFIi1cASI3PBpjb3jbd5GyyUcraCUrEZ02ATHwGgFR8NIBcfCSAZHwUgGx8BIB0vDeAfLwnQIl4L4Ay8R4ApeJbA2wD78DOZA/e7ABzk739Xz/T8rfAIfA6WYCd3BqA7NUSwCKfgLNKCK0BjoC7rzP74yoIrQGsuxSCB0ApBC+AMgieACUQvAHkESIApBGiAGQRIgEkEaIB5BAyAKQQsgBkEDIBJBCyAdIRFABSEVQA0hCUAFIQ1ADCERQBQhFUAcIQlAFCENQBfkOwg9eXpeftFQDmEOzv8ifARy8A3wiXwAHwANwujbf7q0xAi9bZZwwAN9oiDx4TUORFuS2z+wn4BAiAaEHnKChjAAAAAElFTkSuQmCC\";\n export default img;","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-17 10:24:47\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\WaterFall\\List.tsx\r\n *\r\n */\r\nimport React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\r\nimport { RecItemType, RecommendVideoResultType } from '../typing';\r\nimport './List.less';\r\nimport FormatImage from '../FormatImage';\r\nimport previewData from './preview.json';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { IHashTagProps } from '@/materials/sxp/HashTag';\r\nimport { css } from '@emotion/css';\r\ninterface WaterfallFlowItemProps {\r\n index: number;\r\n rec: RecItemType;\r\n list: RecItemType[];\r\n reportTagsView: () => void;\r\n}\r\nconst WaterfallFlowItem = (props: WaterfallFlowItemProps & IHashTagProps) => {\r\n const { rec, index, list, reportTagsView, textStyles, space } = props;\r\n const { swiperRef, setRtcList, setOpenHashtag, bffEventReport, sxpParameter } = useSxpDataSource();\r\n const [showVideo, setShowVideo] = useState(false);\r\n const imgDom = useRef<any>(null);\r\n const ref = useRef<any>(null);\r\n\r\n const videoDom = useRef<any>(null);\r\n const canvasRef = useRef(null);\r\n const [firstFrameSrc, setFirstFrameSrc] = useState('');\r\n const src = useMemo(() => {\r\n if (rec?.video?.cover) {\r\n return rec?.video?.cover;\r\n } else if (rec?.video?.imgUrls?.length) {\r\n return rec?.video?.imgUrls?.[0];\r\n } else if (rec?.product?.homePage?.length) {\r\n return rec?.product?.homePage?.[0];\r\n } else {\r\n return sxpParameter?.bottom_image || '';\r\n }\r\n }, [rec, sxpParameter?.bottom_image]);\r\n\r\n const title = useMemo(() => {\r\n return rec?.product?.title || rec?.video?.title || null;\r\n }, [rec]);\r\n\r\n const priceText = useMemo(() => {\r\n if (rec?.product?.currency && rec?.product?.price) {\r\n return `${rec?.product?.currency?.split('-')[1]?.toUpperCase() ?? ''}${\r\n rec?.product?.price?.toLocaleString('zh', {\r\n minimumFractionDigits: 0\r\n }) ?? ''\r\n }`;\r\n } else {\r\n return null;\r\n }\r\n }, [rec]);\r\n\r\n // useEffect(() => {\r\n // if (imgDom.current === null || src === '') {\r\n // return;\r\n // }\r\n // const img = new Image();\r\n // if (showVideo && firstFrameSrc) {\r\n // img.src = firstFrameSrc;\r\n // } else {\r\n // img.src = src;\r\n // }\r\n // // img.onload = () => {\r\n // // setIsLoading(true);\r\n // // };\r\n // imgDom.current.src = img.src;\r\n // }, [src, showVideo, firstFrameSrc]);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n if (ref.current === null || src === '') {\r\n return;\r\n }\r\n if (showVideo && firstFrameSrc) {\r\n imgDom.current.setSrc(firstFrameSrc);\r\n } else {\r\n imgDom.current.setSrc(src);\r\n }\r\n observer.unobserve(ref.current);\r\n }\r\n });\r\n });\r\n\r\n observer.observe(ref.current);\r\n\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }, [src, showVideo, firstFrameSrc]);\r\n\r\n const calculateHeightForWidth = (videoWidth: any, videoHeight: any, targetWidth: any) => {\r\n const aspectRatio = videoWidth / videoHeight;\r\n const targetHeight = targetWidth / aspectRatio;\r\n return targetHeight;\r\n };\r\n\r\n useEffect(() => {\r\n const video = videoDom?.current;\r\n if (video === null || src === '' || !showVideo) {\r\n return;\r\n }\r\n video.src = src;\r\n video.currentTime = 1;\r\n video.crossOrigin = 'anonymous';\r\n video.onloadeddata = () => {\r\n const canvas = canvasRef?.current as any;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext('2d');\r\n const targetWidth = window?.innerWidth / 2;\r\n const targetHeight = calculateHeightForWidth(video.videoWidth, video.videoHeight, targetWidth);\r\n canvas.height = targetHeight;\r\n canvas.width = targetWidth;\r\n ctx?.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n setFirstFrameSrc(canvas.toDataURL());\r\n video.remove();\r\n canvas.remove();\r\n };\r\n }, [src, showVideo]);\r\n\r\n const handleClickToDetail = () => {\r\n reportTagsView();\r\n setRtcList?.(list);\r\n setTimeout(() => {\r\n swiperRef?.current?.swiper.slideTo(index, 0, false);\r\n setOpenHashtag?.(false);\r\n }, 0);\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={'list-content-listItem'}\r\n key={index}\r\n onClick={handleClickToDetail}\r\n style={{ marginBottom: space }}\r\n >\r\n <div className={'list-content-listItem-picture'}>\r\n {showVideo && (\r\n <div style={{ display: 'none' }}>\r\n <video ref={videoDom} crossOrigin='anonymous' className='list-content-listItem-picture-img' />\r\n <canvas ref={canvasRef} />\r\n </div>\r\n )}\r\n <FormatImage loading='lazy' className='list-content-listItem-picture-img' ref={imgDom} />\r\n </div>\r\n <div className={'list-content-listItem-info'}>\r\n <div\r\n className={`${'list-content-listItem-info-title'} ${priceText ? 'list-content-listItem-info-nowrap' : ''}`}\r\n style={textStyles?.title}\r\n >\r\n {title && title}\r\n </div>\r\n <div className={'list-content-listItem-info-price'} style={textStyles?.price} hidden={!priceText}>\r\n {priceText}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default function WaterfallList({ reportTagsView, showBanner, ...props }: any & IHashTagProps) {\r\n const { waterFallData, getRecommendVideos, hashTagSize, loadingImage, isOpenHashTag } = useSxpDataSource();\r\n const [list, setList] = useState<RecItemType[]>();\r\n const [data, setData] = useState<RecommendVideoResultType>();\r\n const [isLoadingData, setIsLoadingData] = useState(false);\r\n const containerRef = useRef<any>(null);\r\n const [isLoadMore, setIsLoadMore] = useState(false);\r\n\r\n const loadMoreData = useCallback(() => {\r\n if (isLoadMore) return;\r\n setIsLoadMore(true);\r\n waterFallData &&\r\n getRecommendVideos?.({\r\n hashTag: waterFallData?.hashTag,\r\n 'itemFilter.itemId': waterFallData?.itemId,\r\n 'itemFilter.itemType': waterFallData?.itemType\r\n }).then((res) => {\r\n setList(list?.concat(res?.recList ?? []));\r\n setIsLoadMore(false);\r\n });\r\n }, [waterFallData, getRecommendVideos, list, isLoadMore]);\r\n\r\n useEffect(() => {\r\n setIsLoadingData(true);\r\n waterFallData &&\r\n getRecommendVideos?.({\r\n hashTag: waterFallData?.hashTag,\r\n 'itemFilter.itemId': waterFallData?.itemId,\r\n 'itemFilter.itemType': waterFallData?.itemType,\r\n defaultSize: hashTagSize,\r\n maxSize: hashTagSize\r\n }).then((res) => {\r\n setData(res);\r\n setList(res?.recList?.filter((item) => item?.video !== null || item?.product !== null) ?? []);\r\n setIsLoadingData(false);\r\n });\r\n if (isOpenHashTag) {\r\n const res = previewData as any;\r\n setData(res);\r\n setList(res?.recList?.filter((item: any) => item?.video !== null || item?.product !== null) ?? []);\r\n setIsLoadingData(false);\r\n }\r\n }, [waterFallData, getRecommendVideos, hashTagSize, isOpenHashTag]);\r\n\r\n // useEffect(() => {\r\n // const container = containerRef?.current;\r\n // if (!container) return;\r\n // const handleScroll = () => {\r\n // const top = (container as any)?.scrollTop;\r\n // const clientHeight = (container as any)?.clientHeight;\r\n // const scrollHeight = (container as any)?.scrollHeight;\r\n // if (scrollHeight <= top + clientHeight && !isLoadingData) {\r\n // loadMoreData();\r\n // }\r\n // };\r\n // container?.addEventListener('scroll', handleScroll);\r\n // return () => {\r\n // container?.removeEventListener('scroll', handleScroll); // 在组件卸载时移除事件监听器\r\n // };\r\n // }, [isLoadingData, containerRef, loadMoreData]);\r\n\r\n const handleClickLink = () => {\r\n if (data?.tag?.link) {\r\n reportTagsView();\r\n window.location.href = data?.tag?.link;\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {isLoadingData ? (\r\n <div style={{ height: '100%', width: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\r\n <img width={64} height={64} src={loadingImage} alt='loading...' style={{ objectFit: 'contain' }} />\r\n </div>\r\n ) : (\r\n <div className={'list'}>\r\n <div className={'list-scroll'} ref={containerRef}>\r\n {showBanner && data?.tag?.picture && (\r\n <div onClick={handleClickLink}>\r\n <FormatImage\r\n className={css({\r\n width: '100%',\r\n objectFit: 'cover',\r\n marginBottom: '20px'\r\n })}\r\n src={data?.tag?.picture}\r\n />\r\n </div>\r\n )}\r\n <div className={'list-info'} style={props?.textStyles?.hashTagDesc}>\r\n {data?.tag?.info}\r\n </div>\r\n <div\r\n hidden={!data?.tag?.link}\r\n className={'list-collection'}\r\n onClick={handleClickLink}\r\n style={{ ...props?.textStyles?.hashTagLink, marginBottom: props?.space }}\r\n >\r\n {data?.tag?.linkTitle || 'Shop the collection'}\r\n </div>\r\n <div className={'list-content'}>\r\n {list?.map((item, ind) => {\r\n return (\r\n <WaterfallFlowItem\r\n key={ind}\r\n index={ind}\r\n rec={item}\r\n list={list}\r\n reportTagsView={reportTagsView}\r\n {...props}\r\n />\r\n );\r\n })}\r\n </div>\r\n <div hidden={!isLoadMore} style={{ textAlign: 'center' }}>\r\n loading...\r\n </div>\r\n <div\r\n hidden={!data?.tag?.link}\r\n style={{\r\n height: data?.tag?.link ? props?.buttonBgStyle?.height || props?.buttonStyle?.height || '100px' : 0\r\n }}\r\n ></div>\r\n </div>\r\n <div className={'list-bottom'} hidden={!data?.tag?.link} style={props?.buttonBgStyle}></div>\r\n <div\r\n hidden={!data?.tag?.link}\r\n className='list-btn-wrap'\r\n style={{ ...props?.buttonBgStyle, height: 'auto', backgroundColor: 'transparent' }}\r\n >\r\n <button\r\n aria-label={data?.tag?.linkTitle || 'Shop the collection'}\r\n className={'list-btn'}\r\n style={props?.buttonStyle}\r\n onClick={handleClickLink}\r\n >\r\n {data?.tag?.linkTitle || 'Shop the collection'}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-10 10:58:24\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-20 12:45:26\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\WaterFall\\index.tsx\r\n *\r\n */\r\nimport React, { FC, memo, useCallback, useEffect, useRef, useState } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport './index.less';\r\nimport { isEqual } from 'lodash';\r\nimport Navbar from '../Navbar';\r\nimport WaterfallList from './WaterfallList';\r\nimport left from './left.png';\r\nimport List from './List';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { IWaterFallDataType } from '@/core/context/SxpDataSourceProvider';\r\nimport { IHashTagProps } from '@/materials/sxp/HashTag';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\ninterface IWaterFallProps {}\r\n\r\nconst WaterFall: FC<IWaterFallProps & IHashTagProps> = (props) => {\r\n const {\r\n waterFallData,\r\n setOpenHashtag,\r\n openHashtag,\r\n swiperRef,\r\n setWaterFallData,\r\n cacheRtcList,\r\n setRtcList,\r\n cacheActiveIndex,\r\n rtcList,\r\n setCacheRtcList,\r\n setIsFromHashtag,\r\n isFromHashtag,\r\n bffEventReport,\r\n themeTag,\r\n selectTag\r\n } = useSxpDataSource();\r\n const { backMainFeed } = useEventReport();\r\n const ref = useRef<HTMLElement | null>(null);\r\n const modalEleRef = useRef<HTMLElement | null>(null);\r\n const [viewTime, setViewTime] = useState<any>();\r\n\r\n useEffect(() => {\r\n const parentNode = document.getElementById('sxp-render');\r\n const node = document.getElementById('water-fall');\r\n if (node) {\r\n modalEleRef.current = node;\r\n } else {\r\n modalEleRef.current = document.createElement('div');\r\n modalEleRef.current.setAttribute('id', 'water-fall');\r\n parentNode?.appendChild(modalEleRef.current);\r\n }\r\n }, []);\r\n\r\n const handleClose = () => {\r\n const isEq = isEqual(rtcList, cacheRtcList);\r\n if (!isEq && cacheRtcList && cacheRtcList?.length) {\r\n setRtcList?.(cacheRtcList);\r\n }\r\n backMainFeed('branch', selectTag, undefined, waterFallData?.hashTag);\r\n reportTagsView();\r\n setWaterFallData?.(undefined);\r\n setIsFromHashtag?.(false);\r\n setTimeout(() => {\r\n if (!isEq) {\r\n swiperRef?.current?.swiper?.slideTo(cacheActiveIndex, 0, false);\r\n }\r\n setOpenHashtag?.(false);\r\n }, 0);\r\n };\r\n\r\n const [recData, setRecData] = useState<IWaterFallDataType>();\r\n\r\n useEffect(() => {\r\n if (waterFallData) {\r\n setRecData(waterFallData);\r\n }\r\n }, [waterFallData]);\r\n\r\n const reportTagsView = useCallback(() => {\r\n const rec = recData?.rec;\r\n if (!rec) return;\r\n let fromKName = '';\r\n if (isFromHashtag) {\r\n fromKName = 'hashTagPage';\r\n } else if (rec?.video?.url) {\r\n fromKName = 'videoPage';\r\n } else if (rec?.video?.imgUrls?.length) {\r\n fromKName = 'imagePage';\r\n }\r\n bffEventReport?.({\r\n eventInfo: {\r\n contentId: rec?.video?.itemId,\r\n position: cacheActiveIndex + '',\r\n contentTags: JSON.stringify(rec?.video?.tags),\r\n traceInfo: rec?.video?.traceInfo,\r\n hashTags: JSON.stringify([recData?.hashTag]),\r\n fromKName,\r\n fromKPage: location?.href,\r\n timeOnSite: Math.floor(((new Date() as any) - viewTime) / 1000) + '',\r\n eventSubject: 'clickTagsViewContents',\r\n eventDescription: 'User click tags view contents'\r\n }\r\n });\r\n }, [recData, bffEventReport, viewTime, isFromHashtag, cacheActiveIndex]);\r\n\r\n useEffect(() => {\r\n if (openHashtag) {\r\n setViewTime(new Date());\r\n }\r\n }, [openHashtag]);\r\n\r\n useEffect(() => {\r\n const initTime = () => {\r\n setViewTime(new Date());\r\n };\r\n window.addEventListener('pageshow', initTime);\r\n return () => {\r\n window.removeEventListener('pageshow', initTime);\r\n };\r\n }, []);\r\n\r\n if (!modalEleRef.current) return null;\r\n\r\n return ReactDOM.createPortal(\r\n <div\r\n className='waterfall'\r\n style={{\r\n display: openHashtag ? 'block' : 'none'\r\n }}\r\n >\r\n <Navbar icon={left} styles={{ top: '32px' }} textStyle={props?.textStyles?.hashTagTitle} onClose={handleClose} />\r\n {props?.openFixedSize === true || props?.openFixedSize === undefined ? (\r\n <List reportTagsView={reportTagsView} {...props} />\r\n ) : (\r\n <WaterfallList reportTagsView={reportTagsView} {...props} />\r\n )}\r\n </div>,\r\n modalEleRef.current\r\n );\r\n};\r\nexport default memo(WaterFall);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-15 19:03:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-29 19:08:34\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\HashTag\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC, memo } from 'react';\r\nimport WaterFall from '@/core/components/SxpPageRender/WaterFall';\r\n\r\nexport interface IHashTagProps {\r\n lineClamp: number;\r\n space: number;\r\n buttonStyle: CSSProperties;\r\n textStyles: {\r\n hashTagTitle: CSSProperties;\r\n hashTagDesc: CSSProperties;\r\n hashTagLink: CSSProperties;\r\n title: CSSProperties;\r\n price: CSSProperties;\r\n };\r\n buttonBgStyle: CSSProperties;\r\n showBanner?: boolean;\r\n openFixedSize?: boolean;\r\n}\r\n\r\nconst HashTag: FC<IHashTagProps> = (props) => {\r\n return <WaterFall {...props} />;\r\n};\r\n\r\nexport default memo(HashTag);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-30 10:13:13\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\HashTag\\material.tsx\r\n *\r\n */\r\nimport settingRender from './settingRender';\r\nimport HashTagComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst HashTag = createMaterial(HashTagComponent, {\r\n displayName: '',\r\n icon: '',\r\n category: 'base',\r\n type: 'HashTag',\r\n related: {\r\n settingRender,\r\n bindableProps: []\r\n },\r\n defaulSetting: {\r\n props: {\r\n lineClamp: 1,\r\n space: 40,\r\n textStyles: {\r\n hashTagTitle: {\r\n fontSize: 16,\r\n color: '#000'\r\n },\r\n hashTagDesc: {\r\n fontSize: 12,\r\n textAlign: 'center',\r\n color: '#000'\r\n },\r\n hashTagLink: {\r\n textAlign: 'center',\r\n color: '#757575',\r\n fontSize: 12,\r\n textDecoration: 'underline'\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#000'\r\n },\r\n price: {\r\n fontSize: 12,\r\n fontWeight: 'bold',\r\n color: '#000'\r\n }\r\n },\r\n buttonStyle: {\r\n backgroundColor: '#000',\r\n fontSize: 12,\r\n height: 52,\r\n fontWeight: 'bold',\r\n textAlign: 'center',\r\n color: '#fff',\r\n borderRadius: 25\r\n },\r\n buttonBgStyle: {\r\n backgroundColor: '#fff',\r\n height: 52,\r\n paddingTop: 20,\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n paddingBottom: 20\r\n }\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 2\r\n});\r\n\r\nexport { HashTag };\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-06-13 10:08:32\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-13 17:42:50\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\Consent\\settingRender.tsx\r\n *\r\n */\r\nexport default [\r\n {\r\n title: '协议详情',\r\n child: [\r\n {\r\n type: 'Switch',\r\n label: '必须同意用户协议',\r\n name: ['props', 'privacy_necessity'],\r\n extra: '当新用户进入页面时,会出现用户协议弹窗,用户需要先同意协议后才能访问内容。'\r\n },\r\n {\r\n type: 'Text',\r\n label: '弹窗标题',\r\n name: ['props', 'privacy_title']\r\n },\r\n {\r\n type: 'TextArea',\r\n label: '用户协议弹窗内容',\r\n name: ['props', 'privacy_context']\r\n },\r\n {\r\n type: 'Group',\r\n label: '隐私政策',\r\n child: [\r\n {\r\n type: 'Text',\r\n name: ['props', 'privacy_policy_title']\r\n },\r\n {\r\n type: 'Text',\r\n name: ['props', 'privacy_policy_url'],\r\n addonBefore: 'https://'\r\n }\r\n ],\r\n extra: '当用户点击更多信息按钮时,将会跳转至设置的链接查看政策内容'\r\n }\r\n ]\r\n }\r\n];\r\n","import React, { FC, memo } from 'react';\r\n\r\nexport interface IConsentProps {\r\n width?: number;\r\n height?: number;\r\n privacy_title?: string;\r\n privacy_context?: string;\r\n privacy_policy_url?: string;\r\n privacy_policy_title?: string;\r\n privacy_necessity?: boolean;\r\n}\r\n\r\nconst Consent: FC<IConsentProps> = (props) => {\r\n return <Consent {...props}></Consent>;\r\n};\r\n\r\nexport default memo(Consent);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-13 17:32:17\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\Consent\\material.tsx\r\n *\r\n */\r\nimport settingRender from './settingRender';\r\nimport ConsentComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst Consent = createMaterial(ConsentComponent, {\r\n displayName: 'Consent',\r\n icon: '',\r\n category: 'base',\r\n type: 'Consent',\r\n related: {\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {},\r\n style: {}\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 1\r\n});\r\n\r\nexport { Consent };\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-27 19:02:59\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-23 14:49:42\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\LikeButton\\index.tsx\r\n *\r\n */\r\nimport React, { FC, memo, useState } from 'react';\r\nimport { debounce } from 'lodash';\r\nimport { RecItemType } from '../typing';\r\nimport { useIconLink } from '../useIconLink';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\n\r\nconst defaultUnLikeIconPath = '/pb_static/f71266d2c64446c5ae6a5a7f5489cc0a.png';\r\nconst defaultLikeIconPath = '/pb_static/f07900fe3f0f4ae188ea1611d4801a44.png';\r\n\r\ninterface ILikeProps extends React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement> {\r\n activeIcon?: string;\r\n unActicveIcon?: string;\r\n active?: boolean;\r\n recData: RecItemType;\r\n position: number;\r\n}\r\n\r\nconst LikeButton: FC<ILikeProps> = ({ active, activeIcon, unActicveIcon, recData, position, ...props }) => {\r\n const { mutateLike, mutateUnlike, bffEventReport } = useSxpDataSource();\r\n const [state, setState] = useState(active);\r\n\r\n const likeIcon = useIconLink(defaultLikeIconPath);\r\n const unlikeIcon = useIconLink(defaultUnLikeIconPath);\r\n\r\n const handleClick = debounce(async () => {\r\n if (state) {\r\n // 先设置状态\r\n setState(false);\r\n const result = (await mutateUnlike?.({ videoItemId: recData?.video?.itemId ?? '' })) ?? false;\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'favoriteContentCanceled',\r\n eventDescription: 'This content was unfavorite by the user',\r\n contentId: recData?.video?.itemId ?? '',\r\n contentName: recData?.video?.title ?? '',\r\n contentTags: JSON.stringify(recData?.video?.tags ?? []),\r\n position: position + '',\r\n contentFormat: recData?.video?.url ? 'video' : 'image',\r\n traceInfo: recData?.video?.traceInfo\r\n }\r\n });\r\n // 如果接口调用失败,则回滚状态\r\n if (!result) {\r\n setState(true);\r\n }\r\n } else {\r\n setState(true);\r\n const result = (await mutateLike?.({ content: JSON.stringify(recData) })) ?? false;\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'favoriteContent',\r\n eventDescription: 'This content was favorite by the user',\r\n contentId: recData?.video?.itemId ?? '',\r\n contentName: recData?.video?.title ?? '',\r\n contentTags: JSON.stringify(recData?.video?.tags ?? []),\r\n position: position + '',\r\n contentFormat: recData?.video?.url ? 'video' : 'image',\r\n traceInfo: recData?.video?.traceInfo\r\n }\r\n });\r\n if (!result) {\r\n setState(false);\r\n }\r\n }\r\n }, 200);\r\n\r\n return (\r\n <button {...props} aria-label='like' onClick={handleClick}>\r\n <img\r\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\r\n src={state ? activeIcon || likeIcon : unActicveIcon || unlikeIcon}\r\n alt='icon'\r\n />\r\n </button>\r\n );\r\n};\r\n\r\nexport default memo(LikeButton);\r\n","var img = \"data:image/gif;base64,R0lGODlhlgCWAPf/AAAAAICAgMzMzMzMzNXV1dXV1dXV1dfX19jOztjY2NvOztvb29zc3N/Pz9/V1d/f3+Pj4+bm5ubm5ujR0ejg4Ojo6Onp6erj4+rj4+rl5evr6+vr6+3k5O3t7e3t7e7u7u7u7u/v7/Dw8PDw8PHx8fHx8fHx8fLs7PLu7vLu7vLy8vPu7vPz8/Tp6fTx8fTx8fT09PT09PT09PXw8Pbx8fbz8/b29vb29vb29vb29vb29vf09Pf39/f39/f39/f39/f39/f39/f39/f39/f39/j09Pj09Pj19fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pn29vn39/n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fr09Pr4+Pr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vv39/v39/v4+Pv5+fv5+fv6+vv7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/z4+Pz5+fz5+fz5+fz6+vz6+vz6+vz6+vz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P36+v36+v36+v37+/37+/37+/37+/38/P38/P38/P38/P39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f78/P78/P78/P78/P7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v/V1f/39//4+P/6+v/7+//8/P/8/P/9/f/9/f/9/f/9/f/+/v/+/v/+/v/+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wD/ACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAwBLACxFABcADwAMAIYAAACAgIDMzMzV1dXX19fYzs7Y2Njbzs7b29vc3Nzfz8/f1dXf39/j4+Pm5ubo0dHo4ODo6Ojp6enq4+Pq5eXr6+vt5OTt7e3u7u7v7+/w8PDx8fHy7Ozy7u7y8vLz7u7z8/P06en08fH09PT18PD28fH28/P29vb39PT39/f49PT49fX4+Pj59vb59/f5+fn69PT6+Pj6+vr79/f7+Pj7+fn7+vr7+/v8+Pj8+fn8+vr8/Pz9+vr9+/v9/Pz9/f3+/Pz+/v7/1dX/9/f/+Pj/+vr/+/v//Pz//f3//v7///8A/wD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8IUgCXCNzxI8gOJQV3CFy4RIkMJTccQnQYZCGShAgNZiS45MfDiB8lglzSQyPGk0FCqpwY8iBKlyZFyly5xKRNmAJrzGQJcWFJmDB1MBQ4MwnDgAAAIfkECQQA/wAsRwAXAA8ADAAACFMA/wkslAhcqWKJsLkRyPAfODfgujyM+LAYQ4QGMR4sWGrhRIkQQVJcyFGjyYJrRqoU2aXYxowlS7L8SBNiIZg4XwqcGfIjw5g5G/6zUROcDYYBAQAh+QQJAwD/ACxIABcAEAAMAAAIWwD/CfzXqVSxRNgSlRrIEAm4LuDcPIz4sBNDcAYTYTy4MVEigRMlQhRJsYvAjB1TGuxio6RLkhJDaURJk+PCkDhHTvxXc6bNgzxh5ow40E3Pjm4Y/lszNKnAgAAAIfkECQMA/wAsSgAXABEADQAACGUA/wn856YLtkSlBioceAScG3BdHEJ0uLBLsUTgSl3MuLFUooESIz4UOfHhvzYYNabs2PFflJIwSUZcU0olx5U4SyEJyXNkyH84bwotFepfzJ4TB7IMqrGLwlIyeUZZuNAjR4UBAQAh+QQJBAD/ACxMABcAEgAOAAAIaAD/CRTYpdTAgwgFgusCzs1CcGvAJfwXBVypYoksYtSYqNjBhw4Zhmy4kJvAUhczpuTIEds/kSBjwiy4caXNmhhH6pRJEiVOlT8t/iM5kyhRk0NvAgX6cWfRKBNLLdXYZiLCiEhCHQwIACH5BAkDAP8ALE4AGAATAA4AAAhkAP8JBOcGXBeCxQQqXCiwWCJwpRxClMhwYMGDFwka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\";\n export default img;","import React, { CSSProperties, FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { useSwiperSlide } from 'swiper/react';\r\nimport { RecItemType } from '../typing';\r\nimport { useIconLink } from '../useIconLink';\r\nimport { postConfigType } from '..';\r\nimport FormatImage from '../FormatImage';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport SXP_EVENT_BUS, { SXP_EVENT_TYPE } from '@/core/utils/event';\r\nimport loading_gif from './loading.gif';\r\nimport { transform } from 'lodash';\r\n\r\ninterface IVideoWidgetProps {\r\n rec: RecItemType;\r\n index: number;\r\n height: number;\r\n data: RecItemType[];\r\n muted: boolean;\r\n activeIndex?: number;\r\n videoPostConfig?: postConfigType;\r\n videoRef?: any;\r\n}\r\n\r\nconst VideoWidget: FC<IVideoWidgetProps> = ({\r\n rec,\r\n index,\r\n height,\r\n data,\r\n muted,\r\n activeIndex,\r\n videoPostConfig,\r\n videoRef\r\n}) => {\r\n const [isPauseVideo, setIsPauseVideo] = useState(false);\r\n const { bffEventReport, sxpParameter, waterFallData, openHashtag, bffFbReport } = useSxpDataSource();\r\n const videoStartTime = useRef(0);\r\n const [isLoadFinish, setIsLoadFinish] = useState(false);\r\n const [isFirstPlay, setIsFirstPlay] = useState(true);\r\n const { isActive } = useSwiperSlide();\r\n const canvasRef = useRef(null);\r\n const [firstFrameSrc, setFirstFrameSrc] = useState('');\r\n const [waiting, setWaiting] = useState(false);\r\n\r\n const videoId = `pb-cache-video-${index}`;\r\n const videoEleRef = useRef(null);\r\n\r\n const blur = useMemo(() => {\r\n return videoPostConfig?.mode === '2';\r\n }, [videoPostConfig]);\r\n\r\n const translateY = useMemo(() => {\r\n return videoPostConfig?.mode === '2'\r\n ? `translateY(-${50 + (videoPostConfig?.offsetTop ?? 0)}%) translate3d(0px, 0px, 0px)`\r\n : 'translateY(-50%)';\r\n }, [videoPostConfig]);\r\n\r\n const blurBgSrc = useMemo(() => {\r\n return rec?.video?.cover || firstFrameSrc;\r\n }, [firstFrameSrc, rec]);\r\n\r\n const blurStyle = useMemo(() => {\r\n return blur\r\n ? {\r\n filter: 'blur(10px)',\r\n transform: 'translate3d(0px, 0px, 0px) scale(1.2)'\r\n }\r\n : {};\r\n }, [blur]) as CSSProperties;\r\n\r\n const isBgColor = useMemo(() => {\r\n return videoPostConfig?.bgWay === '1';\r\n }, [videoPostConfig]);\r\n\r\n const bgStyle = useMemo(() => {\r\n return isBgColor && videoPostConfig?.bgColor ? { backgroundColor: videoPostConfig?.bgColor } : {};\r\n }, [videoPostConfig, isBgColor]) as CSSProperties;\r\n\r\n useEffect(() => {\r\n if (!videoRef) return;\r\n videoRef.muted = muted;\r\n }, [muted, videoRef]);\r\n\r\n const handlePlay = useCallback(() => {\r\n if (!videoRef) return;\r\n videoRef?.play();\r\n }, [videoRef]);\r\n\r\n const PAUSE_ICON = useIconLink('/pb_static/06f28a2025c74c1cb49be6767316d827.png');\r\n\r\n const handlePlaying = useCallback(() => {\r\n if (!videoRef) return;\r\n setWaiting(false);\r\n setIsLoadFinish(true);\r\n }, []);\r\n\r\n const handleStartPlay = useCallback(() => {\r\n if (!videoRef) return;\r\n setIsPauseVideo(false);\r\n const item = data[index];\r\n if (item && videoRef?.duration) {\r\n videoStartTime.current = videoRef?.currentTime || 0;\r\n const videoDuration = (videoRef?.duration ?? 0).toFixed(2);\r\n const videoCurrentTime = (videoRef?.currentTime ?? 0).toFixed(2);\r\n const playType = isFirstPlay ? '0' : '1';\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'playVideo',\r\n eventDescription: 'User played the video',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video?.title ?? '',\r\n playType,\r\n startTime: videoCurrentTime,\r\n videoDuration,\r\n contentTags: JSON.stringify(item?.video?.tags ?? []),\r\n position: index + '',\r\n contentFormat: 'video',\r\n traceInfo: item?.video?.traceInfo\r\n }\r\n });\r\n setIsFirstPlay(false);\r\n }\r\n }, [bffEventReport, data, index, isFirstPlay, videoRef]);\r\n\r\n const handLoadeddata = useCallback(() => {\r\n if (!videoRef || firstFrameSrc || !blur) return;\r\n videoRef.style.objectFit = 'contain';\r\n if (rec?.video?.cover || !canvasRef || !canvasRef.current || isBgColor) return;\r\n const setFrameImg = () => {\r\n const canvas = canvasRef?.current as any;\r\n const ctx = canvas.getContext('2d');\r\n const targetWidth = window?.innerWidth;\r\n const targetHeight = window?.innerHeight;\r\n canvas.height = targetHeight;\r\n canvas.width = targetWidth;\r\n ctx?.drawImage(videoRef, 0, 0, canvas.width, canvas.height);\r\n setFirstFrameSrc(canvas.toDataURL());\r\n };\r\n setFrameImg();\r\n setTimeout(() => {\r\n setFrameImg();\r\n }, 500);\r\n }, [videoRef, isBgColor, rec, firstFrameSrc, blur]);\r\n\r\n const handleLoadedmetadata = useCallback(() => {\r\n if (!videoRef) return;\r\n handleStartPlay();\r\n handLoadeddata();\r\n }, [videoRef, handLoadeddata, handleStartPlay]);\r\n\r\n const handleClickVideo = useCallback(\r\n (type?: 'pause' | 'start') => () => {\r\n if (!videoRef) return;\r\n\r\n if (!isLoadFinish) return;\r\n const isPause = videoRef?.paused;\r\n switch (type) {\r\n case 'start':\r\n if (!isPause) return;\r\n videoRef?.play();\r\n setIsPauseVideo(false);\r\n break;\r\n case 'pause':\r\n if (isPause) return;\r\n videoRef?.pause();\r\n setIsPauseVideo(true);\r\n break;\r\n default:\r\n if (isPause) {\r\n videoRef?.play();\r\n } else {\r\n videoRef?.pause();\r\n }\r\n setIsPauseVideo(!isPause);\r\n break;\r\n }\r\n },\r\n [isLoadFinish, videoRef]\r\n );\r\n\r\n const handlePause = useCallback(() => {\r\n if (!videoRef) return;\r\n if (activeIndex !== index) return;\r\n const item = data[index];\r\n const videoDuration = (videoRef?.duration ?? 0).toFixed(2);\r\n const videoCurrentTime = (videoRef?.currentTime ?? 0).toFixed(2);\r\n if (videoRef?.duration) {\r\n const playDuration = (videoRef?.currentTime - videoStartTime.current).toFixed(2);\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'playOverVideo',\r\n eventDescription: 'User finished playing the video',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video?.title ?? '',\r\n endTime: videoCurrentTime,\r\n videoDuration,\r\n playDuration,\r\n contentTags: JSON.stringify(item?.video?.tags ?? []),\r\n position: index + '',\r\n contentFormat: 'video',\r\n traceInfo: item?.video?.traceInfo\r\n }\r\n });\r\n }\r\n }, [data, index, bffEventReport, videoRef, activeIndex]);\r\n\r\n const handleWaiting = useCallback(() => {\r\n setWaiting(true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isActive || !videoRef) return;\r\n const videoSrc = rec?.video!.url;\r\n if (!videoSrc) return;\r\n const Hls = window?.Hls as any;\r\n let hls = null;\r\n if (videoSrc.includes('.m3u8') && Hls && Hls.isSupported()) {\r\n hls = new Hls();\r\n hls.loadSource(videoSrc);\r\n hls.attachMedia(videoRef);\r\n hls.on(Hls.Events.MANIFEST_PARSED, function () {\r\n videoRef?.play();\r\n });\r\n } else {\r\n videoRef.src = videoSrc;\r\n }\r\n const videoPlayerWrapperNode = document.querySelector(`#${videoId}`);\r\n const dom = document.querySelector('#player-container-id') as Element;\r\n const dom2 = document.querySelector('#player-container-id-copy') as Element;\r\n if (!dom && !dom2) return;\r\n videoPlayerWrapperNode?.appendChild(dom || dom2);\r\n videoRef.setAttribute('x5-playsinline', 'true');\r\n videoRef.setAttribute('webkit-playsinline', 'true');\r\n videoRef?.addEventListener('loadedmetadata', handleLoadedmetadata);\r\n videoRef?.addEventListener('loadeddata', handLoadeddata);\r\n videoRef?.addEventListener('play', handleStartPlay);\r\n videoRef?.addEventListener('playing', handlePlaying);\r\n videoRef?.addEventListener('pause', handlePause);\r\n videoRef?.addEventListener('ended', handlePlay);\r\n videoRef?.addEventListener('canplay', handlePlay);\r\n videoRef?.addEventListener('waiting', handleWaiting);\r\n\r\n return () => {\r\n if (hls) hls?.destroy();\r\n setIsLoadFinish(false);\r\n dom2?.appendChild(dom);\r\n videoRef?.removeEventListener('loadedmetadata', handleLoadedmetadata);\r\n videoRef?.removeEventListener('loadeddata', handLoadeddata);\r\n videoRef?.removeEventListener('play', handleStartPlay);\r\n videoRef?.removeEventListener('playing', handlePlaying);\r\n videoRef?.removeEventListener('pause', handlePause);\r\n videoRef?.removeEventListener('ended', handlePlay);\r\n videoRef?.removeEventListener('canplay', handlePlay);\r\n videoRef?.removeEventListener('waiting', handleWaiting);\r\n };\r\n }, [isActive, videoId, rec, videoRef]);\r\n\r\n useEffect(() => {\r\n if (!videoRef || !isLoadFinish) return;\r\n if (isActive) {\r\n bffFbReport?.({\r\n eventName: 'ViewContent'\r\n });\r\n videoRef?.play();\r\n } else {\r\n videoRef?.pause();\r\n }\r\n }, [isActive, isLoadFinish, videoRef]);\r\n\r\n /*\r\n 打开/关闭hashtag暂停/播放视频\r\n */\r\n useEffect(() => {\r\n if (!isActive || !videoRef) return;\r\n const isPause = videoRef?.paused;\r\n if (!isPause && openHashtag) {\r\n videoRef?.pause();\r\n } else if (!openHashtag) {\r\n videoRef?.play();\r\n }\r\n }, [openHashtag, isActive, videoRef]);\r\n\r\n useEffect(() => {\r\n if (!isActive) return;\r\n const onShow = () => {\r\n handleClickVideo('start')();\r\n bffFbReport?.({\r\n eventName: 'ViewContent'\r\n });\r\n };\r\n const onHide = handleClickVideo('pause');\r\n SXP_EVENT_BUS.on(SXP_EVENT_TYPE.PAGE_DID_SHOW, onShow);\r\n SXP_EVENT_BUS.on(SXP_EVENT_TYPE.PAGE_DID_HIDE, onHide);\r\n return () => {\r\n SXP_EVENT_BUS.off(SXP_EVENT_TYPE.PAGE_DID_SHOW, onShow);\r\n SXP_EVENT_BUS.off(SXP_EVENT_TYPE.PAGE_DID_HIDE, onHide);\r\n };\r\n }, [handleClickVideo, isActive]);\r\n\r\n const renderPoster = useMemo(() => {\r\n if (!sxpParameter?.placeholder_image || isLoadFinish) {\r\n return null;\r\n }\r\n\r\n return (\r\n <img\r\n style={{\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover'\r\n }}\r\n src={sxpParameter?.placeholder_image}\r\n alt='placeholder image'\r\n />\r\n );\r\n }, [isLoadFinish, sxpParameter?.placeholder_image]);\r\n\r\n const renderLoading = useMemo(() => {\r\n if (!waiting || !isLoadFinish) return;\r\n return (\r\n <img\r\n style={{\r\n position: 'absolute',\r\n top: '50%',\r\n left: 0,\r\n right: 0,\r\n transform: 'translateY(-100%)',\r\n margin: 'auto',\r\n width: '50px',\r\n height: '50px',\r\n objectFit: 'contain'\r\n }}\r\n src={loading_gif}\r\n alt='placeholder image'\r\n />\r\n );\r\n }, [waiting, isLoadFinish]);\r\n\r\n useEffect(() => {\r\n if (!videoRef) return;\r\n\r\n const handleBeforeUnload = () => {\r\n if (activeIndex === index && rec?.video?.url && videoRef && !isPauseVideo) {\r\n handleClickVideo('pause')();\r\n }\r\n };\r\n\r\n window.addEventListener('beforeunload', handleBeforeUnload);\r\n\r\n return () => {\r\n window.removeEventListener('beforeunload', handleBeforeUnload);\r\n };\r\n }, [activeIndex, index, rec, videoRef, handleClickVideo, isPauseVideo]);\r\n\r\n if (!rec?.video) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n {blur ? (\r\n <div\r\n className='video-container'\r\n key={rec?.video.itemId}\r\n onClick={handleClickVideo()}\r\n style={{\r\n position: 'relative',\r\n width: '100%',\r\n height,\r\n overflow: 'hidden',\r\n ...bgStyle\r\n }}\r\n >\r\n {!isBgColor && isLoadFinish && blurBgSrc && (\r\n <FormatImage\r\n src={blurBgSrc}\r\n style={{\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n ...blurStyle\r\n }}\r\n />\r\n )}\r\n\r\n <canvas ref={canvasRef} style={{ display: 'none' }} />\r\n <div\r\n style={{\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n top: '50%',\r\n transform: translateY,\r\n left: 0,\r\n right: 0\r\n }}\r\n >\r\n <div style={{ position: 'relative', width: '100%', height: '100%' }}>\r\n <div\r\n className='n-full-screen'\r\n ref={videoEleRef}\r\n id={videoId}\r\n style={{ width: '100%', height: '100%' }}\r\n ></div>\r\n\r\n <img hidden={!isPauseVideo} className='clc-pb-video-pause' alt='pause' src={PAUSE_ICON} />\r\n </div>\r\n </div>\r\n {renderPoster}\r\n {renderLoading}\r\n </div>\r\n ) : (\r\n <div\r\n className='video-container'\r\n key={rec?.video.itemId}\r\n style={{\r\n position: 'relative',\r\n width: '100%',\r\n height,\r\n overflow: 'hidden'\r\n }}\r\n onClick={handleClickVideo()}\r\n >\r\n <div className='n-full-screen' ref={videoEleRef} id={videoId} style={{ width: '100%', height: '100%' }}></div>\r\n {renderPoster}\r\n {renderLoading}\r\n <img hidden={!isPauseVideo} className='clc-pb-video-pause' src={PAUSE_ICON} alt='pause' />\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default memo(VideoWidget);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-27 19:02:59\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-01-24 10:30:13\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\ToggleButton\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC, MouseEventHandler, memo, useState } from 'react';\r\n\r\ninterface IToggleButtonProps {\r\n activeIcon?: string;\r\n unactiveIcon?: string;\r\n onChange?: (result: boolean) => void;\r\n defaultValue?: boolean;\r\n style?: CSSProperties;\r\n}\r\n\r\nconst ToggleButton: FC<IToggleButtonProps> = ({ defaultValue, activeIcon, unactiveIcon, onChange, style }) => {\r\n const [isTrue, setIsTure] = useState(defaultValue);\r\n\r\n const handleClick: MouseEventHandler<HTMLButtonElement> = (e) => {\r\n e.stopPropagation();\r\n const result = !isTrue;\r\n setIsTure(result);\r\n onChange?.(result);\r\n };\r\n\r\n return (\r\n <button style={style} aria-label='toggle button' className={'pb-toggle-button'} onClick={handleClick}>\r\n <img className={'pb-toggle-button-icon'} alt='toggle image' src={isTrue ? activeIcon : unactiveIcon} />\r\n </button>\r\n );\r\n};\r\n\r\nexport default memo(ToggleButton);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-15 19:03:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-13 10:53:56\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\FingerSwipeTip\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC, useEffect, useMemo, useState } from 'react';\r\nimport { useIconLink } from '../useIconLink';\r\nimport { useEditor } from '@/core/hooks';\r\n\r\ninterface IProps {\r\n imageUrl?: string;\r\n style?: CSSProperties;\r\n}\r\n\r\nconst FingerSwipeTip: FC<IProps> = ({ imageUrl, style }) => {\r\n const [show, setShow] = useState(true);\r\n const {\r\n schema: { sxpPageConf }\r\n } = useEditor();\r\n useEffect(() => {\r\n setTimeout(() => {\r\n setShow(false);\r\n }, 2000);\r\n }, []);\r\n\r\n const FINGER_SWIPE_ICON = useIconLink('/pb_static/finger-swipe-tip.29dc3a48a3c746c906ea..png');\r\n\r\n const animationCls = useMemo(() => {\r\n return show ? 'pb-fadeIn' : 'pb-fadeOut';\r\n }, [show]);\r\n\r\n return (\r\n <div hidden={!show} className={`pb-finger-wrap ${animationCls}`} style={style}>\r\n <img src={imageUrl || FINGER_SWIPE_ICON} alt='finger swiper' />\r\n </div>\r\n );\r\n};\r\n\r\nexport default FingerSwipeTip;\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-24 10:37:19\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\PictureGroup\\Picture.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, useMemo } from 'react';\r\nimport FormatImage from '../FormatImage';\r\nimport { postConfigType } from '..';\r\n\r\ninterface IPictureProps {\r\n src: string;\r\n height?: number;\r\n imgUrlsPostConfig?: postConfigType;\r\n onShowFirstImage?: () => void;\r\n}\r\nconst Picture = (props: IPictureProps) => {\r\n const { src, height, imgUrlsPostConfig, onShowFirstImage } = props;\r\n\r\n const blur = useMemo(() => {\r\n return imgUrlsPostConfig?.mode === '2';\r\n }, [imgUrlsPostConfig]);\r\n\r\n const translateY = useMemo(() => {\r\n return imgUrlsPostConfig?.mode === '2'\r\n ? `translateY(-${50 + (imgUrlsPostConfig?.offsetTop ?? 0)}%) translate3d(0px, 0px, 0px)`\r\n : 'translateY(-50%)';\r\n }, [imgUrlsPostConfig]);\r\n\r\n const blurStyle = useMemo(() => {\r\n return blur\r\n ? {\r\n filter: 'blur(10px)',\r\n transform: 'translate3d(0px, 0px, 0px) scale(1.2)'\r\n }\r\n : {};\r\n }, [blur]) as CSSProperties;\r\n\r\n const isBgColor = useMemo(() => {\r\n return imgUrlsPostConfig?.bgWay === '1';\r\n }, [imgUrlsPostConfig]);\r\n\r\n const bgStyle = useMemo(() => {\r\n return isBgColor && imgUrlsPostConfig?.bgColor ? { backgroundColor: imgUrlsPostConfig?.bgColor } : {};\r\n }, [imgUrlsPostConfig, isBgColor]) as CSSProperties;\r\n\r\n return (\r\n <div\r\n style={{\r\n overflow: 'hidden',\r\n height,\r\n width: '100%',\r\n position: 'relative',\r\n ...bgStyle\r\n }}\r\n >\r\n {(!blur || !isBgColor) && (\r\n <FormatImage\r\n src={src}\r\n style={{\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n ...blurStyle\r\n }}\r\n onLoad={onShowFirstImage}\r\n />\r\n )}\r\n\r\n {blur && (\r\n <FormatImage\r\n src={src}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'contain',\r\n position: 'absolute',\r\n top: '50%',\r\n transform: translateY,\r\n left: 0,\r\n right: 0\r\n }}\r\n onLoad={onShowFirstImage}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\nexport default Picture;\r\n","/*\r\n * @Author: lewinlu@chatlabs.com\r\n * @Date: 2024-01-03 14:39:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-07 14:05:08\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\PictureGroup\\index.tsx\r\n */\r\nimport React, { FC, memo, useCallback, useEffect, useRef, useState } from 'react';\r\nimport { Autoplay, Pagination } from 'swiper/modules';\r\nimport { Swiper, SwiperSlide, useSwiperSlide } from 'swiper/react';\r\nimport { RecItemType } from '../typing';\r\nimport { postConfigType } from '..';\r\nimport Picture from './Picture';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\ninterface IPictureGroupProps {\r\n imgUrls?: string[];\r\n width: number;\r\n height: number;\r\n rec: RecItemType;\r\n index: number;\r\n onReportViewImageEnd: (rec: RecItemType) => void;\r\n onViewImageStartEvent: (index: number) => void;\r\n imgUrlsPostConfig?: postConfigType;\r\n}\r\n\r\nconst PictureGroup: FC<IPictureGroupProps> = ({\r\n imgUrls,\r\n width,\r\n height,\r\n rec,\r\n index,\r\n onReportViewImageEnd,\r\n onViewImageStartEvent,\r\n imgUrlsPostConfig\r\n}) => {\r\n const ref = useRef<any>();\r\n const { isActive } = useSwiperSlide();\r\n const { sxpParameter, openHashtag } = useSxpDataSource();\r\n const [isLoad, setIsLoad] = useState(false);\r\n useEffect(() => {\r\n if (isLoad && isActive) {\r\n ref?.current && ref.current.swiper.autoplay.start();\r\n if (openHashtag) {\r\n onReportViewImageEnd(rec);\r\n } else {\r\n onViewImageStartEvent(index);\r\n }\r\n } else {\r\n ref?.current && ref.current.swiper.autoplay.stop();\r\n }\r\n }, [rec, isActive, onReportViewImageEnd, openHashtag, index, onViewImageStartEvent, isLoad]);\r\n\r\n const showFirstImageFn = useCallback(() => {\r\n if (!isLoad) {\r\n setIsLoad(true);\r\n }\r\n }, [isLoad]);\r\n\r\n // if (!isActive) {\r\n // return <img src={sxpParameter?.placeholder_image} style={{ width, height, objectFit: 'cover' }} />;\r\n // }\r\n\r\n return (\r\n <Swiper\r\n ref={ref}\r\n defaultValue={0}\r\n direction={'horizontal'}\r\n modules={[Pagination, Autoplay]}\r\n pagination={{ clickable: true, bulletActiveClass: 'swipe-item-active-bullet' }}\r\n height={height}\r\n loop\r\n autoplay={{ delay: (imgUrlsPostConfig?.delay ?? 3) * 1000 }}\r\n >\r\n {imgUrls?.map((url, index) => {\r\n return (\r\n <SwiperSlide key={index}>\r\n <Picture\r\n src={!isLoad && index > 0 ? '' : url}\r\n height={height}\r\n imgUrlsPostConfig={imgUrlsPostConfig}\r\n onShowFirstImage={showFirstImageFn}\r\n />\r\n </SwiperSlide>\r\n );\r\n })}\r\n </Swiper>\r\n );\r\n};\r\n\r\nexport default memo(PictureGroup);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-15 19:03:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-03 14:51:17\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Hashtag\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC, memo, useMemo, useState } from 'react';\r\nimport { SwiperSlide } from 'swiper/react';\r\nimport { RecItemType } from '../typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport Scroll from '@/materials/sxp/template/components/Scroll';\r\n\r\ninterface IHashtagProps {\r\n tags: string[];\r\n itemId: string;\r\n itemType: 'VIDEO' | 'PRODUCT' | null;\r\n index: number;\r\n rec: RecItemType;\r\n hashTagStyle?: CSSProperties;\r\n}\r\n\r\nconst Hashtag: FC<IHashtagProps> = ({ tags, itemId, itemType, index, rec, hashTagStyle }) => {\r\n const [isShowMore, setIsShowMore] = useState(false);\r\n const { setWaterFallData, setOpenHashtag, setCacheActiveIndex, waterFallData, setIsFromHashtag } = useSxpDataSource();\r\n const handleClickTag = (data: string) => {\r\n if (!waterFallData) {\r\n setCacheActiveIndex?.(index);\r\n } else {\r\n setIsFromHashtag?.(true);\r\n }\r\n if (itemType) {\r\n setWaterFallData?.({\r\n hashTag: data,\r\n itemId,\r\n itemType,\r\n rec\r\n });\r\n } else {\r\n setWaterFallData?.({\r\n hashTag: data,\r\n rec\r\n });\r\n }\r\n\r\n setOpenHashtag?.(true);\r\n };\r\n\r\n const renderExpandButton = useMemo(() => {\r\n if (tags.length <= 6) {\r\n return null;\r\n }\r\n return (\r\n <span\r\n style={{ textDecoration: 'underline', cursor: 'pointer', color: '#fff' }}\r\n onClick={() => setIsShowMore(!isShowMore)}\r\n >\r\n {isShowMore ? 'show less' : 'show more'}\r\n </span>\r\n );\r\n }, [isShowMore, tags]);\r\n\r\n return (\r\n <div className='clc-sxp-bottom-hashtag'>\r\n <Scroll>\r\n {tags?.map((item: any, index: any) => (\r\n <SwiperSlide\r\n key={index}\r\n hidden={!isShowMore ? index >= 6 : false}\r\n className='clc-sxp-bottom-hashtag-item'\r\n style={hashTagStyle}\r\n onClick={() => handleClickTag(item)}\r\n >\r\n {`#${item}`}\r\n </SwiperSlide>\r\n ))}\r\n </Scroll>\r\n </div>\r\n );\r\n};\r\nexport default memo(Hashtag);\r\n","var img = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAbtJREFUeF7t2DFKxFAQxvHv6xTxCoKNiAuCna2X2NY7eAE9hYdwj2BjZ2ulYLW9pQcYDWyxBIK7ZN7MNyapk/D+v8zC20dM/OLE+zEDzBMwcYH5J1BpAMzsAMAJyU+vdZeZADN7AHAH4BjAC8kbD4QSAJv4+17wFcm3sQjyAGbWhXdff/takzwdG989Lw0wEN+te0ly9a8BIuJlJyAqXhIgMl4OIDpeCiAjXgYgK14CIDM+HSA7PhVgYHvrusnZZaOUshNUiU+ZAKX4cAC1+FAAxfgwANX4EADl+OYA6vFNASrENwOoEt8EoFK8O0C1eFcAMzsE8AXgqLcHdzvA3GVvv+89bv8FzOwcwEdvASuSy30XFXm/G0C3aDN7BXBdCcEb4ALAE4BFFQRXgM0UlEJwB6iG0ASgEkIzgCoITQEqIDQHUEcIAVBGCANQRQgFUEQIB1BDSAFQQkgDUEFIBVBASAfIRpAAyESQAchCkALIQJADiEaQBIhEkAWIQpAG+ANh8Xvk/j72CF0eYABhDeCS5PckALYQbgGcAXgm+Tg2vnu+xAR4hA69YwZoqVvh3fMEVPhKLdc4+Qn4AXwYBFBN2dYpAAAAAElFTkSuQmCC\";\n export default img;","import { get, cloneDeep } from 'lodash';\r\nimport React, { memo, useMemo } from 'react';\r\nimport { useDataSource } from '../hooks';\r\nimport { IMaterialOptions } from '../create';\r\n\r\nfunction withBindDataSource(Component: any): React.NamedExoticComponent<any> & { extend?: IMaterialOptions<any> } {\r\n // 处理函数事件中的数据源\r\n\r\n return memo(function (props: any) {\r\n const { $store } = useDataSource();\r\n const handleDataSourceByEvent = (value: string) => {\r\n let res = value;\r\n const dataArr = value.match(/{{.*?}}/g);\r\n\r\n if (dataArr?.length) {\r\n dataArr.forEach((item) => {\r\n item.replace(/{{\\s*([\\w.]+)\\s*}}/g, (match, p) => {\r\n if (p) {\r\n const v = get($store, p);\r\n res = res.replace(item, v);\r\n return v;\r\n }\r\n });\r\n });\r\n }\r\n return res;\r\n };\r\n const clonedProps = useMemo(() => {\r\n const { bindDatas, ...cloneProps } = props;\r\n bindDatas?.forEach?.((d: { propKey?: string; dataPath?: string }) => {\r\n if (d?.propKey && d?.dataPath) {\r\n const { propKey, dataPath } = d;\r\n dataPath.replace(/{{\\s*([\\w.]+)\\s*}}/g, (match, p) => {\r\n if (p) {\r\n const v = get($store, p) ?? props[propKey] ?? '';\r\n cloneProps[propKey] = v;\r\n return v;\r\n }\r\n });\r\n }\r\n });\r\n if (cloneProps) {\r\n cloneProps.eventMap = {};\r\n const eventObj = cloneDeep(cloneProps.event) || {};\r\n for (const key in eventObj) {\r\n if (Object.prototype.hasOwnProperty.call(eventObj, key)) {\r\n try {\r\n eventObj[key].value = handleDataSourceByEvent(eventObj[key].value);\r\n cloneProps.eventMap[key] = new Function(eventObj[key].value);\r\n } catch (error) {}\r\n }\r\n }\r\n }\r\n if (cloneProps?.event?.onClick?.linkType) {\r\n cloneProps.style.cursor = 'pointer';\r\n }\r\n return cloneProps;\r\n }, [$store, props]);\r\n\r\n return <Component {...clonedProps} {...clonedProps.eventMap} />;\r\n });\r\n}\r\n\r\nexport default withBindDataSource;\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-26 16:11:34\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-18 14:36:53\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\RenderCard.tsx\r\n *\r\n */\r\nimport React, { memo, FC, useMemo } from 'react';\r\nimport './index.less';\r\nimport { RecItemType } from './typing';\r\nimport withBindDataSource from '@/core/hoc/withBindDataSource';\r\nimport { useEditor } from '@/core/hooks';\r\n\r\ninterface IRenderCardProps {\r\n index: number;\r\n rec: RecItemType;\r\n tempMap?: Record<string, any>;\r\n resolver: any;\r\n}\r\n\r\nconst RenderCard: FC<IRenderCardProps> = ({ rec, index, tempMap, resolver }) => {\r\n const { schema } = useEditor();\r\n const renderComp = useMemo(() => {\r\n if (!rec?.video) return null;\r\n let cta = null;\r\n if (rec?.video?.bindProducts?.length) {\r\n cta = '多商品CTA';\r\n } else if (rec?.video?.bindProduct) {\r\n cta = '商品CTA';\r\n } else {\r\n cta = rec?.video?.bindCta?.itemId;\r\n }\r\n const value = tempMap?.[cta];\r\n if (\r\n (value?.item?.type === 'CommodityDiro' && !rec?.video?.bindProduct) ||\r\n (value?.item?.type === 'Commodity' && !rec?.video?.bindProduct) ||\r\n (value?.item?.type === 'CommodityDiroNew' && !rec?.video?.bindProduct) ||\r\n (value?.item?.type === 'MultiCommodity' && !rec?.video?.bindProducts?.length) ||\r\n (value?.item?.type === 'MultiCommodityDiro' && !rec?.video?.bindProducts?.length) ||\r\n (value?.item?.type === 'MultiCommodityDiroNew' && !rec?.video?.bindProducts?.length)\r\n ) {\r\n return null;\r\n }\r\n if (value && resolver) {\r\n const t = resolver[value?.item?.type];\r\n const Component = withBindDataSource(t);\r\n const defaulSetting = t?.extend?.defaulSetting;\r\n const isExternalLink = value?.item?.event?.onClick?.linkType === 'externalLink';\r\n return (\r\n <Component\r\n style={{\r\n ...defaulSetting?.style,\r\n ...value?.item?.style,\r\n zIndex: 50,\r\n marginLeft: '20px',\r\n boxSizing: 'border-box',\r\n transform: 'translate3d(0px, 0px, 0px)'\r\n }}\r\n textStyle={{ ...defaulSetting?.textStyle, ...value?.item?.textStyle }}\r\n bindDatas={value?.item?.bindDatas ?? []}\r\n {...defaulSetting?.props}\r\n {...value?.item?.props}\r\n event={value?.item?.event || {}}\r\n schema={schema}\r\n id={value?.id}\r\n key={value?.id}\r\n recData={rec}\r\n isExternalLink={isExternalLink}\r\n index={index}\r\n />\r\n );\r\n } else {\r\n return null;\r\n }\r\n }, [rec, resolver, tempMap, schema]);\r\n return <>{renderComp}</>;\r\n};\r\n\r\nexport default memo(RenderCard);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-26 10:07:41\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-23 14:31:12\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Nudge\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC } from 'react';\r\n\r\ninterface IProps {\r\n nudge?: {\r\n isOpen: boolean;\r\n icon?: string;\r\n backgroundColor: string;\r\n content?: string;\r\n marginBottom: number;\r\n borderRadius: number;\r\n size: {\r\n height: number;\r\n width: number;\r\n };\r\n textStyle: {\r\n color: string;\r\n fontFamily: string;\r\n fontSize: number;\r\n fontStyle: string;\r\n textAlign: string;\r\n };\r\n };\r\n}\r\n\r\nconst Nudge: FC<IProps> = ({ nudge }) => {\r\n return (\r\n <>\r\n {nudge?.isOpen && (\r\n <div\r\n className='clc-sxp-bottom-nudge'\r\n style={{\r\n marginBottom: nudge?.marginBottom ?? 5,\r\n width: nudge?.size?.width ?? 212,\r\n height: nudge?.size?.height ?? 38,\r\n backgroundColor: nudge?.backgroundColor,\r\n borderRadius: nudge?.borderRadius ?? 4\r\n }}\r\n >\r\n {nudge?.icon ? (\r\n <img src={nudge.icon} alt='nudge icon' style={{ height: '100%', objectFit: 'cover', flexShrink: 0 }} />\r\n ) : null}\r\n <p\r\n style={{\r\n ...(nudge?.textStyle as CSSProperties),\r\n textWrap: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n flex: 1,\r\n marginBottom: 0\r\n }}\r\n >\r\n {nudge?.content ?? ''}\r\n </p>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Nudge;\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-04-29 16:32:21\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-20 10:53:08\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Tagbar.tsx\r\n *\r\n */\r\nimport React, { FC, memo, useMemo, useState } from 'react';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport SXP_EVENT_BUS, { SXP_EVENT_TYPE } from '@/core/utils/event';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport { DEFAULT_TAG } from '@/core/context/SxpDataSourceProvider';\r\n\r\ninterface IProps {\r\n tagList?: string[];\r\n setActiveIndex?: React.Dispatch<React.SetStateAction<number>>;\r\n}\r\n\r\nconst Tagbar: FC<IProps> = ({ tagList = [], setActiveIndex }) => {\r\n const {\r\n getRecommendVideos,\r\n setRtcList,\r\n setCacheRtcList,\r\n setCacheActiveIndex,\r\n setLoading,\r\n swiperRef,\r\n waterFallData,\r\n bffEventReport,\r\n selectTag,\r\n setSelectTag\r\n } = useSxpDataSource();\r\n const { backMainFeed } = useEventReport();\r\n const realTagList = useMemo(() => {\r\n return [DEFAULT_TAG, ...tagList];\r\n }, [tagList]);\r\n\r\n const handleSelectTag = (tag: string) => () => {\r\n if (tag === selectTag) return;\r\n if (tag !== 'FOR U') {\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'clickThemeTagsViewContents',\r\n eventDescription: 'click Theme Tags View Contents',\r\n themeTags: `['${tag}']`\r\n }\r\n });\r\n } else {\r\n backMainFeed('theme', tag, selectTag);\r\n }\r\n let themeTag: string | undefined;\r\n if (tag !== DEFAULT_TAG) {\r\n themeTag = tag;\r\n }\r\n setLoading?.(true);\r\n getRecommendVideos?.({ themeTag })\r\n .then((res) => {\r\n SXP_EVENT_BUS.emit(SXP_EVENT_TYPE.CHANGE_THEME_TAG, themeTag);\r\n setRtcList?.(res?.recList ?? []);\r\n setCacheRtcList?.(res?.recList ?? []);\r\n setActiveIndex?.(0);\r\n setCacheActiveIndex?.(0);\r\n swiperRef?.current?.swiper?.slideTo(0);\r\n })\r\n .finally(() => {\r\n setLoading?.(false);\r\n });\r\n\r\n setSelectTag?.(tag);\r\n };\r\n\r\n if (waterFallData || tagList.length <= 0) return null;\r\n\r\n return (\r\n <div className='clc-sxp-tagbar'>\r\n <ul className='clc-sxp-tagbar-list' style={{ margin: 'auto', gap: 24 }}>\r\n {realTagList.map((tag) => {\r\n return (\r\n <li\r\n className={`clc-sxp-tagbar-list-item ${tag === selectTag ? 'clc-sxp-tagbar-list-item-active' : ''}`}\r\n key={tag}\r\n onClick={handleSelectTag(tag)}\r\n >\r\n {tag}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Tagbar);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-15 19:03:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-21 17:28:41\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, useMemo, useEffect, useState, FC, useRef, useCallback } from 'react';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport ExpandableText from './ExpandableText';\r\nimport LikeButton from './LikeButton';\r\nimport { RecItemType } from './typing';\r\nimport VideoWidget from './VideoWidget';\r\nimport ToggleButton from './ToggleButton';\r\nimport FingerSwipeTip from './FingerSwipeTip';\r\nimport PictureGroup from './PictureGroup';\r\nimport Hashtag from './Hashtag';\r\nimport Navbar from './Navbar';\r\nimport left from './left.png';\r\nimport RenderCard from './RenderCard';\r\nimport { useIconLink } from './useIconLink';\r\nimport WaterFall from './WaterFall';\r\nimport Nudge from './Nudge';\r\nimport SXP_EVENT_BUS, { SXP_EVENT_TYPE } from '@/core/utils/event';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport { refreshFeSessionId } from '@/core/utils/sessionStore';\r\nimport './index.less';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport withBindDataSource from '@/core/hoc/withBindDataSource';\r\nimport Tagbar from './Tagbar';\r\nimport { getFeUserId } from '@/core/utils/localStore';\r\nimport Consent from '../Consent';\r\n\r\nexport type postConfigType = {\r\n mode?: '1' | '2';\r\n offsetTop?: number;\r\n delay?: number;\r\n bgWay?: '1' | '2';\r\n bgColor?: string;\r\n};\r\n\r\nexport interface ISxpPageRenderProps {\r\n globalConfig?: {\r\n isShowLogo?: boolean;\r\n isShowCTA?: boolean;\r\n logoUrl?: string;\r\n muteIcon?: string;\r\n unMuteIcon?: string;\r\n likeIcon?: string;\r\n unlikeIcon?: string;\r\n color?: string;\r\n productPost?: any[];\r\n muteIconX?: number;\r\n muteIconY?: number;\r\n likeIconX?: number;\r\n likeIconY?: number;\r\n isShowLike?: boolean;\r\n swipeTipIcon?: string;\r\n hashTag?: any[];\r\n isOpenTextShadow?: boolean;\r\n videoPost?: postConfigType;\r\n imgUrlsPost?: postConfigType;\r\n muteIconXPosit?: string;\r\n muteIconYPosit?: string;\r\n likeIconYPosit?: string;\r\n likeIconXPosit?: string;\r\n swipeTipOffset?: number;\r\n consent?: any[];\r\n };\r\n descStyle?: CSSProperties;\r\n tipText?: {\r\n foldText: string;\r\n unfoldText: string;\r\n };\r\n nudge?: {\r\n isOpen: boolean;\r\n icon?: string;\r\n backgroundColor: string;\r\n content?: string;\r\n marginBottom: number;\r\n borderRadius: number;\r\n size: {\r\n height: number;\r\n width: number;\r\n };\r\n textStyle: {\r\n color: string;\r\n fontFamily: string;\r\n fontSize: number;\r\n fontStyle: string;\r\n textAlign: string;\r\n };\r\n };\r\n containerHeight?: number;\r\n containerWidth?: number;\r\n tempMap?: Record<string, any>;\r\n data?: RecItemType[];\r\n tagList?: string[];\r\n resolver: any;\r\n ctaType?: string;\r\n _schema?: any;\r\n hashTagStyle?: CSSProperties;\r\n licenseUrl?: string;\r\n}\r\n\r\nconst SxpPageRender: FC<ISxpPageRenderProps> = ({\r\n globalConfig,\r\n descStyle,\r\n containerHeight = window.innerHeight,\r\n containerWidth = window.innerWidth,\r\n tempMap,\r\n resolver,\r\n data = [],\r\n ctaType,\r\n tipText,\r\n nudge,\r\n _schema,\r\n hashTagStyle,\r\n tagList = [],\r\n licenseUrl\r\n}) => {\r\n const { schema } = useEditor();\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n const viewImageStartTime = useRef(0);\r\n const [isInit, setIsInit] = useState(false);\r\n const [isMuted, setIsMuted] = useState(true);\r\n const viewTime = useRef<any>();\r\n const [isLoadMore, setIsLoadMore] = useState(false);\r\n const [isShowMore, setIsShowMore] = useState(false);\r\n const {\r\n loadVideos,\r\n bffEventReport,\r\n loading,\r\n setPopupDetailData,\r\n ctaEvent,\r\n swiperRef,\r\n waterFallData,\r\n setOpenHashtag,\r\n appDomain,\r\n openHashtag,\r\n loadingImage,\r\n isFromHashtag,\r\n popupDetailData,\r\n bffFbReport,\r\n curTime,\r\n h5EnterLink,\r\n isShowConsent,\r\n selectTag\r\n } = useSxpDataSource();\r\n const { backMainFeed } = useEventReport();\r\n const videoRef = useRef<any>();\r\n const { productView } = useEventReport();\r\n const isShowFingerTip = useMemo(() => {\r\n return data.length > 0 && !loading && getFeUserId();\r\n }, [data, loading]);\r\n\r\n useEffect(() => {\r\n refreshFeSessionId();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (data?.length > 0) {\r\n const now = new Date();\r\n viewTime.current = now;\r\n bffFbReport?.({\r\n eventName: 'PageView'\r\n });\r\n }\r\n }, [data?.length]);\r\n\r\n const handleH5EnterLink = useCallback(() => {\r\n refreshFeSessionId();\r\n h5EnterLink?.();\r\n if (data.length > 0) {\r\n const now = new Date();\r\n viewTime.current = now;\r\n bffFbReport?.({\r\n eventName: 'PageView'\r\n });\r\n }\r\n }, [data.length, bffFbReport, h5EnterLink]);\r\n\r\n const firstRef = useRef<any>();\r\n\r\n useEffect(() => {\r\n if (!firstRef.current && videoRef?.current && data?.length > 0) {\r\n firstRef.current = true;\r\n if (data?.[0]?.video?.url) {\r\n videoRef.current.src = data?.[0]?.video?.url;\r\n }\r\n }\r\n }, [videoRef, data]);\r\n\r\n useEffect(() => {\r\n const index =\r\n data?.findIndex((item: RecItemType) => {\r\n if (ctaType === '多商品CTA') {\r\n return item?.video?.bindProducts && item?.video?.bindProducts?.length > 0;\r\n } else if (ctaType === '商品CTA') {\r\n return item?.video?.bindProduct;\r\n } else {\r\n return item?.video?.bindCta?.itemId === ctaType && (item?.video?.url || item?.video?.imgUrls?.length);\r\n }\r\n }) || 0;\r\n swiperRef?.current?.swiper.slideTo(index);\r\n }, [ctaType, swiperRef]);\r\n\r\n useEffect(() => {\r\n const item = data?.[activeIndex];\r\n const visibleChange = () => {\r\n const repCond = !openHashtag && !isShowConsent;\r\n if (document.visibilityState === 'hidden') {\r\n // 当用户导航到新页面、切换标签页、关闭标签页、最小化或关闭浏览器、刷新原页面(即离开原页面时),或者在移动设备上从浏览器切换到不同的应用程序时\r\n // 移动端h5直接杀掉浏览器或宿主app时不会触发,pc端直接杀掉标签页时能触发\r\n if (repCond) {\r\n SXP_EVENT_BUS.emit(SXP_EVENT_TYPE.PAGE_DID_HIDE, item);\r\n handleReportViewImageEnd(item);\r\n handleReportProductView(item);\r\n }\r\n let fromKName = '';\r\n if (popupDetailData && (item?.video?.bindProducts?.length || item?.video?.bindProduct)) {\r\n fromKName = 'pdpPage';\r\n } else if (popupDetailData && tempMap?.[item?.video?.bindCta?.itemId ?? ''].item?.type === 'Appoint') {\r\n fromKName = 'formPage';\r\n } else if (isFromHashtag) {\r\n fromKName = 'hashTagPage';\r\n } else if (item?.video?.url) {\r\n fromKName = 'videoPage';\r\n } else if (item?.video?.imgUrls && item?.video?.imgUrls?.length) {\r\n fromKName = 'imagePage';\r\n } else if (item?.product) {\r\n fromKName = 'productPage';\r\n }\r\n bffEventReport?.({\r\n eventInfo: {\r\n sessionDuration: Math.floor(((new Date() as any) - curTime.current) / 1000) + '',\r\n eventSubject: 'sessionCompleted',\r\n eventDescription: 'Session completed',\r\n contentId: item?.video?.itemId,\r\n productId: item?.product?.itemId,\r\n position: activeIndex + '',\r\n fromKName,\r\n fromKPage: location?.href,\r\n ctatId: item?.video?.bindCta?.itemId ?? ''\r\n }\r\n });\r\n } else if (document.visibilityState === 'visible') {\r\n // 页面可见时触发,注意页面初始化时不会触发\r\n handleH5EnterLink();\r\n if (repCond) {\r\n handleViewImageStartEvent(activeIndex);\r\n SXP_EVENT_BUS.emit(SXP_EVENT_TYPE.PAGE_DID_SHOW, item);\r\n backMainFeed('external', selectTag);\r\n }\r\n }\r\n };\r\n\r\n document.addEventListener('visibilitychange', visibleChange);\r\n return () => {\r\n document.removeEventListener('visibilitychange', visibleChange);\r\n };\r\n }, [\r\n activeIndex,\r\n bffEventReport,\r\n data,\r\n handleH5EnterLink,\r\n popupDetailData,\r\n isFromHashtag,\r\n tempMap,\r\n curTime,\r\n backMainFeed,\r\n openHashtag,\r\n isShowConsent,\r\n selectTag\r\n ]);\r\n\r\n const tagHeight = useMemo(() => {\r\n let h = 0;\r\n if (tagList.length > 0) {\r\n h += 45;\r\n if (waterFallData) {\r\n h -= 45;\r\n }\r\n }\r\n return h;\r\n }, [tagList, waterFallData]);\r\n\r\n const height = useMemo(() => {\r\n let minusHeight = 0;\r\n if (globalConfig?.logoUrl && globalConfig?.isShowLogo) {\r\n minusHeight += 45;\r\n }\r\n return containerHeight - minusHeight - tagHeight;\r\n }, [globalConfig, containerHeight, tagHeight]);\r\n\r\n const renderLogo = useMemo(() => {\r\n if (globalConfig?.logoUrl && globalConfig?.isShowLogo) {\r\n return (\r\n <div className='clc-sxp-logo-banner' style={{ backgroundColor: globalConfig?.color }}>\r\n <img src={globalConfig?.logoUrl} alt='logo' />\r\n </div>\r\n );\r\n }\r\n return null;\r\n }, [globalConfig]);\r\n\r\n const renderContent = useCallback(\r\n (rec: RecItemType, index: number) => {\r\n if (rec?.video?.url) {\r\n return (\r\n <VideoWidget\r\n rec={rec}\r\n index={index}\r\n muted={isMuted}\r\n data={data}\r\n height={height}\r\n activeIndex={activeIndex}\r\n videoPostConfig={globalConfig?.videoPost}\r\n videoRef={videoRef.current}\r\n />\r\n );\r\n }\r\n if (rec?.video?.imgUrls) {\r\n return (\r\n <PictureGroup\r\n key={rec?.video.itemId}\r\n imgUrls={rec?.video.imgUrls}\r\n width={containerWidth}\r\n height={height}\r\n rec={rec}\r\n index={index}\r\n onReportViewImageEnd={handleReportViewImageEnd}\r\n onViewImageStartEvent={handleViewImageStartEvent}\r\n imgUrlsPostConfig={globalConfig?.imgUrlsPost}\r\n />\r\n );\r\n }\r\n\r\n if (rec.product && Array.isArray(globalConfig?.productPost) && globalConfig?.productPost?.length > 0) {\r\n return globalConfig?.productPost?.map((value: any, idx: any) => {\r\n const t = resolver[value?.item?.type];\r\n const Component = withBindDataSource(t);\r\n const defaulSetting = t?.extend?.defaulSetting;\r\n return (\r\n <Component\r\n key={`${index}${idx}`}\r\n textStyle={{ ...defaulSetting?.textStyle, ...value?.item?.textStyle }}\r\n bindDatas={value?.item?.bindDatas ?? []}\r\n {...defaulSetting?.props}\r\n {...value?.item?.props}\r\n event={value?.item?.event || {}}\r\n schema={schema}\r\n id={value?.id}\r\n viewTime={viewTime.current}\r\n rec={rec}\r\n isPost={true}\r\n tipText={tipText}\r\n style={{ ...defaulSetting?.style, ...value?.item?.style, height: '100%', overflow: 'auto' }}\r\n index={index}\r\n />\r\n );\r\n });\r\n }\r\n\r\n return null;\r\n },\r\n [\r\n containerWidth,\r\n data,\r\n height,\r\n isMuted,\r\n activeIndex,\r\n globalConfig?.productPost,\r\n viewTime,\r\n tipText,\r\n resolver,\r\n schema,\r\n videoRef.current\r\n ]\r\n );\r\n\r\n const onExpandableChange = useCallback((v: boolean) => {\r\n setIsShowMore(v);\r\n }, []);\r\n\r\n const lineGradStyle = useMemo(() => {\r\n return !isShowMore\r\n ? {\r\n padding: '20px 0'\r\n }\r\n : {\r\n background: 'linear-gradient( 180deg, rgba(129,129,129,0) 0%, rgba(121,121,121,0.5) 5%, #616161 100%)',\r\n paddingTop: 20,\r\n paddingBottom: 20\r\n };\r\n }, [isShowMore]);\r\n\r\n const renderBottom = useCallback(\r\n (rec: RecItemType, index: number) => {\r\n if (rec?.video) {\r\n return (\r\n <>\r\n {rec?.video?.title && !isShowMore && <div className='clc-sxp-bottom-shadow' />}\r\n <div className='clc-sxp-bottom'>\r\n <Nudge nudge={nudge} />\r\n {globalConfig?.isShowCTA === undefined || globalConfig?.isShowCTA ? (\r\n <div className='clc-sxp-bottom-card'>\r\n <RenderCard rec={rec} index={index} tempMap={tempMap} resolver={resolver} />\r\n </div>\r\n ) : null}\r\n <div>\r\n <ExpandableText\r\n className='clc-sxp-bottom-text'\r\n isPost={true}\r\n foldText={tipText?.foldText}\r\n unfoldText={tipText?.unfoldText}\r\n text={rec?.video?.title ?? ''}\r\n style={{\r\n ...descStyle,\r\n textShadow: globalConfig?.isOpenTextShadow ? '2px 2px 4px rgba(0, 0, 0, 0.5)' : 'none'\r\n }}\r\n onChange={onExpandableChange}\r\n />\r\n <Hashtag\r\n index={activeIndex}\r\n tags={rec?.video?.hashTags ?? []}\r\n itemId={rec?.video?.itemId}\r\n itemType={rec?.video?.itemId ? 'VIDEO' : null}\r\n rec={rec}\r\n hashTagStyle={hashTagStyle}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n return null;\r\n },\r\n [\r\n descStyle,\r\n activeIndex,\r\n tempMap,\r\n resolver,\r\n tipText,\r\n nudge,\r\n hashTagStyle,\r\n globalConfig,\r\n onExpandableChange,\r\n isShowMore,\r\n lineGradStyle\r\n ]\r\n );\r\n\r\n const renderLikeButton = useCallback(\r\n (rec: RecItemType, index: number) => {\r\n if (!globalConfig?.isShowLike) return;\r\n let top = globalConfig?.likeIconY ?? 400;\r\n if (waterFallData && top < 40) {\r\n top += 40;\r\n }\r\n if (rec?.video) {\r\n return (\r\n <LikeButton\r\n key={rec.position}\r\n activeIcon={globalConfig?.likeIcon}\r\n unActicveIcon={globalConfig?.unlikeIcon}\r\n active={rec.isCollected}\r\n recData={rec}\r\n className='clc-sxp-like-button'\r\n style={{\r\n [globalConfig.likeIconXPosit ?? 'right']: globalConfig.likeIconX ?? 0,\r\n [globalConfig.likeIconYPosit ?? 'bottom']: top\r\n }}\r\n position={index}\r\n />\r\n );\r\n }\r\n return null;\r\n },\r\n [globalConfig, waterFallData]\r\n );\r\n\r\n const handleReportViewImageEnd = (item: RecItemType) => {\r\n if (!item?.video?.url && item?.video?.imgUrls) {\r\n const endTime = Date.now();\r\n const duration = (endTime - viewImageStartTime.current) / 1000;\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'viewImageCarouselEnd',\r\n eventDescription: 'User end view the image carousel',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video.title ?? '',\r\n imageEndTime: `${endTime}`,\r\n playDuration: `${duration}`,\r\n contentTags: JSON.stringify(item?.video.tags ?? []),\r\n position: activeIndex + '',\r\n contentFormat: 'image',\r\n traceInfo: item?.video.traceInfo\r\n }\r\n });\r\n }\r\n };\r\n\r\n const handleScrollEvent = (swiper: any) => {\r\n viewTime.current = new Date();\r\n const item = data[swiper.previousIndex];\r\n if (!item) return;\r\n if (swiper.previousIndex - swiper.activeIndex < 0) {\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'scrollDown',\r\n eventDescription: 'User scroll down',\r\n contentId: item?.video?.itemId ?? '',\r\n productId: item?.product?.itemId ?? '',\r\n requestId: null\r\n }\r\n });\r\n // 如果上一个商品是图片集,需上报 浏览图片集结结束 事件\r\n handleReportViewImageEnd(item);\r\n } else {\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'scrollUp',\r\n eventDescription: 'User scroll up',\r\n contentId: item?.video?.itemId ?? '',\r\n productId: item.product?.itemId ?? '',\r\n requestId: null\r\n }\r\n });\r\n // 如果上一个商品是图片集,需上报 浏览图片集结结束 事件\r\n handleReportViewImageEnd(item);\r\n }\r\n // 商品浏览事件\r\n handleReportProductView(item);\r\n const curItem = data[swiper.activeIndex];\r\n if (!curItem?.video?.url && !curItem?.video?.imgUrls && curItem?.product) {\r\n bffFbReport?.({\r\n eventName: 'ProductView'\r\n });\r\n }\r\n };\r\n\r\n const handleReportProductView = (item: RecItemType) => {\r\n if (!item?.video?.url && !item?.video?.imgUrls && item?.product) {\r\n productView(item, item.product, item?.product?.bindCta, viewTime.current, activeIndex);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const item = data[activeIndex];\r\n if (openHashtag) handleReportProductView(item);\r\n }, [openHashtag, data, activeIndex]);\r\n\r\n const handleViewImageStartEvent = (activeIndex: number) => {\r\n const item = data[activeIndex];\r\n // 如果是图片集则上报事件\r\n if (!item?.video?.url && item?.video?.imgUrls) {\r\n const startTime = Date.now();\r\n viewImageStartTime.current = startTime;\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'viewImageCarouselStart',\r\n eventDescription: 'User start view the image carousel',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video.title ?? '',\r\n imageStartTime: `${startTime}`,\r\n contentTags: JSON.stringify(item?.video.tags ?? []),\r\n position: activeIndex + '',\r\n contentFormat: 'image',\r\n traceInfo: item?.video.traceInfo\r\n }\r\n });\r\n bffFbReport?.({\r\n eventName: 'ViewContent'\r\n });\r\n }\r\n };\r\n\r\n const visList = useMemo(() => {\r\n const list =\r\n activeIndex === 0 && !waterFallData\r\n ? [data?.[0] ?? null]\r\n : (data?.map((item, index) => {\r\n if (activeIndex === index || index - 1 === activeIndex || index + 1 === activeIndex) {\r\n return item;\r\n } else {\r\n return null;\r\n }\r\n }) as any);\r\n\r\n return !waterFallData ? list.concat([{ loading: true }]) : list;\r\n }, [data, activeIndex, waterFallData]);\r\n\r\n const renderView = useMemo(() => {\r\n if (loading) {\r\n return (\r\n <div style={{ height, width: containerWidth, display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\r\n <img width={64} height={64} src={loadingImage} alt='loading...' style={{ objectFit: 'contain' }} />\r\n </div>\r\n );\r\n }\r\n return visList?.map((rec: any, index: any) => {\r\n return (\r\n <SwiperSlide key={index} virtualIndex={index}>\r\n {rec && (\r\n <>\r\n {rec?.loading ? (\r\n <div\r\n style={{\r\n height,\r\n width: containerWidth,\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n }}\r\n >\r\n <img width={64} height={64} src={loadingImage} alt='loading...' style={{ objectFit: 'contain' }} />\r\n </div>\r\n ) : (\r\n <>\r\n {renderContent(rec, index)}\r\n {renderBottom(rec, index)}\r\n {renderLikeButton(rec, index)}\r\n </>\r\n )}\r\n </>\r\n )}\r\n </SwiperSlide>\r\n );\r\n });\r\n }, [containerWidth, data, height, loading, renderBottom, renderContent, visList, loadingImage]);\r\n\r\n const mutedIcon = useIconLink('/pb_static/5beaaa5ce7f3477b99db3838619cc471.png');\r\n const unmutedIcon = useIconLink('/pb_static/fea8668a8a894e4aa3a86bcc775e895e.png');\r\n return (\r\n <div id='sxp-render' className='clc-sxp-container'>\r\n {waterFallData && (\r\n <Navbar\r\n icon={left}\r\n styles={{ background: 'rgba(0,0,0,.3)', color: '#fff' }}\r\n onClose={() => {\r\n setOpenHashtag?.(true);\r\n }}\r\n />\r\n )}\r\n {renderLogo}\r\n <Tagbar tagList={tagList} setActiveIndex={setActiveIndex} />\r\n {isShowFingerTip ? (\r\n <FingerSwipeTip\r\n imageUrl={globalConfig?.swipeTipIcon}\r\n style={{ top: `${50 + (globalConfig?.swipeTipOffset ?? 0)}%` }}\r\n />\r\n ) : null}\r\n <Swiper\r\n style={{\r\n marginTop: tagHeight\r\n }}\r\n ref={swiperRef}\r\n onSlideChange={() => {\r\n swiperRef.current.swiper.allowTouchMove = false;\r\n setTimeout(() => {\r\n swiperRef.current.swiper.allowTouchMove = true;\r\n }, 500);\r\n }}\r\n onActiveIndexChange={(swiper) => {\r\n setActiveIndex(swiper.activeIndex);\r\n if (openHashtag) return;\r\n // 处理上滑下滑事件\r\n handleScrollEvent(swiper);\r\n if (waterFallData) return;\r\n if (swiper?.activeIndex + 2 >= data?.length) {\r\n if (!isLoadMore) {\r\n setIsLoadMore(true);\r\n loadVideos?.(Math.ceil(activeIndex / 10) + 1).then(() => {\r\n setIsLoadMore(false);\r\n });\r\n }\r\n }\r\n }}\r\n direction={'vertical'}\r\n height={height}\r\n >\r\n <ToggleButton\r\n style={{\r\n position: 'fixed',\r\n visibility: data?.[activeIndex]?.video?.url ? 'visible' : 'hidden',\r\n zIndex: 999,\r\n [globalConfig?.muteIconXPosit ?? 'right']: globalConfig?.muteIconX ?? 0,\r\n [globalConfig?.muteIconYPosit ?? 'bottom']: globalConfig?.muteIconY ?? 23\r\n }}\r\n defaultValue={isMuted}\r\n activeIcon={globalConfig?.unMuteIcon ? globalConfig?.unMuteIcon : mutedIcon}\r\n unactiveIcon={globalConfig?.muteIcon ? globalConfig?.muteIcon : unmutedIcon}\r\n onChange={setIsMuted}\r\n />\r\n {renderView}\r\n </Swiper>\r\n <WaterFall {...globalConfig?.hashTag?.[0]?.item?.props} />\r\n <div style={{ position: 'absolute', zIndex: -100 }}>\r\n <video\r\n ref={videoRef}\r\n id='player-container-id'\r\n playsInline\r\n crossOrigin='anonymous'\r\n preload='auto'\r\n controls={false}\r\n muted\r\n style={{\r\n backgroundColor: 'transparent',\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n pointerEvents: 'none'\r\n }}\r\n />\r\n <div id='player-container-id-copy'></div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SxpPageRender;\r\n","import React, { FC, memo } from 'react';\r\nimport { Autoplay, Pagination } from 'swiper/modules';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport { RecItemType } from '../SxpPageRender/typing';\r\nimport Picture from '../SxpPageRender/PictureGroup/Picture';\r\nimport { postConfigType } from '../SxpPageRender';\r\n\r\ninterface IPictureGroupProps {\r\n imgUrls?: string[];\r\n width: number;\r\n height: number;\r\n rec: RecItemType;\r\n index: number;\r\n imgUrlsPostConfig?: postConfigType;\r\n}\r\n\r\nconst PictureGroup: FC<IPictureGroupProps> = ({ imgUrls, width, height, imgUrlsPostConfig, rec, index }) => {\r\n return (\r\n <Swiper\r\n defaultValue={0}\r\n direction={'horizontal'}\r\n modules={[Pagination, Autoplay]}\r\n pagination={{ clickable: true, bulletActiveClass: 'swipe-item-active-bullet' }}\r\n height={height}\r\n style={{ width }}\r\n loop={true}\r\n autoplay={false}\r\n >\r\n {imgUrls?.map((url) => {\r\n return (\r\n <SwiperSlide key={url}>\r\n <Picture src={url} height={height} imgUrlsPostConfig={imgUrlsPostConfig} />\r\n </SwiperSlide>\r\n );\r\n })}\r\n </Swiper>\r\n );\r\n};\r\n\r\nexport default memo(PictureGroup);\r\n","import React, { CSSProperties, FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { RecItemType } from '../SxpPageRender/typing';\r\nimport { useIconLink } from '../SxpPageRender/useIconLink';\r\nimport { postConfigType } from '../SxpPageRender';\r\nimport FormatImage from '../SxpPageRender/FormatImage';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\n\r\ninterface IVideoWidgetProps {\r\n rec: RecItemType;\r\n index: number;\r\n height: number;\r\n width: number;\r\n data: RecItemType[];\r\n muted: boolean;\r\n activeIndex?: number;\r\n videoPostConfig?: postConfigType;\r\n}\r\n\r\nconst VideoWidget: FC<IVideoWidgetProps> = ({\r\n rec,\r\n index,\r\n height,\r\n data,\r\n muted,\r\n activeIndex,\r\n videoPostConfig,\r\n width\r\n}) => {\r\n const [isPauseVideo, setIsPauseVideo] = useState(false);\r\n const videoRef = useRef<HTMLVideoElement>(null);\r\n const { bffEventReport, sxpParameter, waterFallData, openHashtag } = useSxpDataSource();\r\n const videoStartTime = useRef(0);\r\n const [isLoadFinish, setIsLoadFinish] = useState(false);\r\n const [isFirstPlay, setIsFirstPlay] = useState(true);\r\n const canvasRef = useRef(null);\r\n const [firstFrameSrc, setFirstFrameSrc] = useState('');\r\n\r\n useEffect(() => {\r\n if (!videoRef.current) return;\r\n videoRef.current.muted = muted;\r\n }, [muted]);\r\n\r\n const handleVideoStart = useCallback(() => {\r\n videoRef.current?.play();\r\n }, []);\r\n\r\n const PAUSE_ICON = useIconLink('/pb_static/06f28a2025c74c1cb49be6767316d827.png');\r\n\r\n const handlePlaying = useCallback(() => {\r\n setIsPauseVideo(false);\r\n const item = data[index];\r\n if (item && videoRef?.current?.duration) {\r\n videoStartTime.current = videoRef?.current?.currentTime || 0;\r\n const videoDuration = (videoRef.current?.duration ?? 0).toFixed(2);\r\n const videoCurrentTime = (videoRef.current?.currentTime ?? 0).toFixed(2);\r\n const playType = isFirstPlay ? '0' : '1';\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'playVideo',\r\n eventDescription: 'User played the video',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video?.title ?? '',\r\n playType,\r\n startTime: videoCurrentTime,\r\n videoDuration,\r\n contentTags: JSON.stringify(item?.video?.tags ?? []),\r\n position: index + '',\r\n contentFormat: 'video',\r\n traceInfo: item?.video?.traceInfo\r\n }\r\n });\r\n setIsFirstPlay(false);\r\n }\r\n }, [bffEventReport, data, index, isFirstPlay]);\r\n\r\n const handleLoadedMetadata = useCallback(() => {\r\n setIsLoadFinish(true);\r\n }, []);\r\n\r\n const handleClickVideo = useCallback(\r\n (type?: 'pause' | 'start') => () => {\r\n if (!isLoadFinish) return;\r\n const isPause = videoRef.current?.paused;\r\n switch (type) {\r\n case 'start':\r\n if (!isPause) return;\r\n videoRef.current?.play();\r\n setIsPauseVideo(false);\r\n break;\r\n case 'pause':\r\n if (isPause) return;\r\n videoRef.current?.pause();\r\n setIsPauseVideo(true);\r\n break;\r\n default:\r\n if (isPause) {\r\n videoRef.current?.play();\r\n } else {\r\n videoRef.current?.pause();\r\n }\r\n setIsPauseVideo(!isPause);\r\n break;\r\n }\r\n },\r\n [isLoadFinish]\r\n );\r\n\r\n const onPause = useCallback(() => {\r\n const item = data[index];\r\n const videoDuration = (videoRef.current?.duration ?? 0).toFixed(2);\r\n const videoCurrentTime = (videoRef.current?.currentTime ?? 0).toFixed(2);\r\n if (videoRef?.current?.duration) {\r\n const playDuration = (videoRef?.current?.currentTime - videoStartTime.current).toFixed(2);\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'playOverVideo',\r\n eventDescription: 'User finished playing the video',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video?.title ?? '',\r\n endTime: videoCurrentTime,\r\n videoDuration,\r\n playDuration,\r\n contentTags: JSON.stringify(item?.video?.tags ?? []),\r\n position: index + '',\r\n contentFormat: 'video',\r\n traceInfo: item?.video?.traceInfo\r\n }\r\n });\r\n }\r\n }, [data, index, bffEventReport]);\r\n\r\n const blur = useMemo(() => {\r\n return videoPostConfig?.mode === '2';\r\n }, [videoPostConfig]);\r\n\r\n const translateY = useMemo(() => {\r\n return videoPostConfig?.mode === '2'\r\n ? `translateY(-${50 + (videoPostConfig?.offsetTop ?? 0)}%) translate3d(0px, 0px, 0px)`\r\n : 'translateY(-50%)';\r\n }, [videoPostConfig]);\r\n\r\n const blurBgSrc = useMemo(() => {\r\n return rec?.video?.cover || firstFrameSrc;\r\n }, [firstFrameSrc, rec]);\r\n\r\n const handLoadeddata = useCallback(() => {\r\n if (!canvasRef || !videoRef || !videoRef.current || !canvasRef.current) return;\r\n const video = videoRef?.current;\r\n const canvas = canvasRef?.current as any;\r\n const ctx = canvas.getContext('2d');\r\n const targetWidth = window?.innerWidth;\r\n const targetHeight = window?.innerHeight;\r\n canvas.height = targetHeight;\r\n canvas.width = targetWidth;\r\n ctx?.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n setFirstFrameSrc(canvas.toDataURL());\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!videoRef.current) return;\r\n setIsPauseVideo(false);\r\n if (!videoRef.current.src) {\r\n const videoSrc = rec?.video!.url;\r\n if (videoSrc.includes('.m3u8')) {\r\n if (typeof window !== 'undefined' && window?.Hls.isSupported()) {\r\n const hls = new window.Hls();\r\n hls.loadSource(videoSrc);\r\n hls.attachMedia(videoRef.current);\r\n } else if (videoRef.current.canPlayType('application/vnd.apple.mpegurl')) {\r\n videoRef.current.src = videoSrc;\r\n } else {\r\n videoRef.current.src = videoSrc;\r\n }\r\n } else {\r\n videoRef.current.src = videoSrc;\r\n }\r\n videoRef.current.setAttribute('x5-playsinline', 'true');\r\n videoRef.current.setAttribute('webkit-playsinline', 'true');\r\n }\r\n videoRef.current?.addEventListener('loadedmetadata', handleLoadedMetadata);\r\n videoRef.current?.addEventListener('canplay', handleLoadedMetadata);\r\n videoRef.current?.addEventListener('playing', handlePlaying);\r\n videoRef.current?.addEventListener('loadeddata', handLoadeddata);\r\n\r\n return () => {\r\n videoRef.current?.removeEventListener('loadedmetadata', handleLoadedMetadata);\r\n videoRef.current?.removeEventListener('canplay', handleLoadedMetadata);\r\n videoRef.current?.removeEventListener('playing', handlePlaying);\r\n videoRef.current?.removeEventListener('loadeddata', handLoadeddata);\r\n };\r\n }, [handleLoadedMetadata, handlePlaying, rec?.video, handLoadeddata]);\r\n\r\n const renderPoster = useMemo(() => {\r\n if (!sxpParameter?.placeholder_image || isLoadFinish) {\r\n return null;\r\n }\r\n\r\n return (\r\n <img\r\n style={{ position: 'absolute', left: 0, top: 0, width: '100%', height: '100%', objectFit: 'cover' }}\r\n src={sxpParameter?.placeholder_image}\r\n alt='video poster'\r\n />\r\n );\r\n }, [isLoadFinish, sxpParameter?.placeholder_image]);\r\n\r\n useEffect(() => {\r\n const handleBeforeUnload = () => {\r\n if (activeIndex === index && rec?.video?.url && videoRef?.current?.src && !isPauseVideo) {\r\n handleClickVideo('pause')();\r\n }\r\n };\r\n\r\n window.addEventListener('beforeunload', handleBeforeUnload);\r\n\r\n return () => {\r\n window.removeEventListener('beforeunload', handleBeforeUnload);\r\n };\r\n }, [activeIndex, index, rec, videoRef, handleClickVideo, isPauseVideo]);\r\n\r\n const blurStyle = useMemo(() => {\r\n return blur\r\n ? {\r\n filter: 'blur(10px)',\r\n transform: 'translate3d(0px, 0px, 0px) scale(1.2)'\r\n }\r\n : {};\r\n }, [blur]) as CSSProperties;\r\n\r\n if (!rec?.video) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n {blur ? (\r\n <div\r\n className='video-container'\r\n key={rec?.video.itemId}\r\n onClick={handleClickVideo()}\r\n style={{\r\n position: 'relative',\r\n width,\r\n height,\r\n overflow: 'hidden'\r\n }}\r\n >\r\n <FormatImage\r\n src={blurBgSrc}\r\n style={{\r\n height,\r\n width,\r\n objectFit: 'cover',\r\n ...blurStyle\r\n }}\r\n />\r\n <canvas ref={canvasRef} style={{ display: 'none' }} />\r\n <div\r\n style={{\r\n position: 'absolute',\r\n width,\r\n height,\r\n top: '50%',\r\n transform: translateY,\r\n left: 0,\r\n right: 0\r\n }}\r\n >\r\n <div style={{ position: 'relative', width, height: '100%' }}>\r\n <video\r\n id={`pb-video-${index}`}\r\n className='clc-pb-video'\r\n ref={videoRef}\r\n autoPlay\r\n crossOrigin='anonymous'\r\n muted\r\n controls={false}\r\n playsInline\r\n preload='auto'\r\n onPause={onPause}\r\n onEnded={handleVideoStart}\r\n style={{\r\n width: '100%',\r\n height,\r\n objectFit: 'contain'\r\n }}\r\n />\r\n <img hidden={!isPauseVideo} className='clc-pb-video-pause' src={PAUSE_ICON} alt='video pause image' />\r\n </div>\r\n </div>\r\n {renderPoster}\r\n </div>\r\n ) : (\r\n <div\r\n className='video-container'\r\n key={rec?.video.itemId}\r\n onClick={handleClickVideo()}\r\n style={{\r\n position: 'relative',\r\n width,\r\n height,\r\n overflow: 'hidden'\r\n }}\r\n >\r\n <video\r\n id={`pb-video-${index}`}\r\n className='clc-pb-video'\r\n style={{ width: '100%' }}\r\n ref={videoRef}\r\n crossOrigin='anonymous'\r\n muted\r\n autoPlay\r\n controls={false}\r\n playsInline\r\n preload='auto'\r\n onPause={onPause}\r\n onEnded={handleVideoStart}\r\n />\r\n {renderPoster}\r\n <img hidden={!isPauseVideo} className='clc-pb-video-pause' src={PAUSE_ICON} alt='video pause image' />\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default memo(VideoWidget);\r\n","import React, { FC, memo, useMemo } from 'react';\r\nimport { css } from '@emotion/css';\r\nimport { RecItemType } from '../SxpPageRender/typing';\r\nimport Nudge from '../SxpPageRender/Nudge';\r\nimport RenderCard from '../SxpPageRender/RenderCard';\r\nimport ExpandableText from '../SxpPageRender/ExpandableText';\r\nimport Hashtag from '../SxpPageRender/Hashtag';\r\nimport LikeButton from '../SxpPageRender/LikeButton';\r\nimport ToggleButton from '../SxpPageRender/ToggleButton';\r\nimport { useIconLink } from '../SxpPageRender/useIconLink';\r\nimport { ISxpPageRenderProps } from '../SxpPageRender';\r\nimport Tagbar from '../SxpPageRender/Tagbar';\r\nimport PictureGroup from './PictureGroup';\r\nimport VideoWidget from './VideoWidget';\r\nimport * as _materials_ from '@/materials';\r\nimport { MaterialComponet } from '@/core';\r\nimport withBindDataSource from '@/core/hoc/withBindDataSource';\r\n\r\nconst RESOLVER: Record<string, MaterialComponet> = {};\r\nObject.values(_materials_).forEach((v: any) => {\r\n RESOLVER[v.extend!.type] = v;\r\n});\r\n\r\nconst defaultUnLikeIconPath = '/pb_static/f71266d2c64446c5ae6a5a7f5489cc0a.png';\r\nconst defaultLikeIconPath = '/pb_static/f07900fe3f0f4ae188ea1611d4801a44.png';\r\n\r\nconst DiyPortalPreview: FC<ISxpPageRenderProps & { appDomain?: string }> = ({\r\n data = [],\r\n globalConfig,\r\n tipText,\r\n nudge,\r\n tempMap,\r\n descStyle,\r\n hashTagStyle,\r\n containerHeight = 664,\r\n containerWidth = 375,\r\n appDomain,\r\n tagList = []\r\n}) => {\r\n const height = useMemo(() => {\r\n let minusHeight = 0;\r\n if (globalConfig?.logoUrl && globalConfig?.isShowLogo) {\r\n minusHeight += 45;\r\n }\r\n if (tagList.length > 0) {\r\n minusHeight += 45;\r\n }\r\n return containerHeight - minusHeight;\r\n }, [globalConfig, containerHeight, tagList]);\r\n\r\n const renderContent = (rec: RecItemType, index: number) => {\r\n if (rec?.video?.url) {\r\n return (\r\n <VideoWidget\r\n rec={rec}\r\n index={index}\r\n muted={true}\r\n width={containerWidth}\r\n data={data ?? []}\r\n height={height}\r\n activeIndex={index}\r\n videoPostConfig={globalConfig?.videoPost}\r\n />\r\n );\r\n }\r\n if (rec?.video?.imgUrls) {\r\n return (\r\n <PictureGroup\r\n key={rec?.video.itemId}\r\n imgUrls={rec?.video.imgUrls}\r\n width={containerWidth}\r\n height={height}\r\n rec={rec}\r\n index={index}\r\n imgUrlsPostConfig={globalConfig?.imgUrlsPost}\r\n />\r\n );\r\n }\r\n\r\n if (rec.product) {\r\n if (rec.product && Array.isArray(globalConfig?.productPost) && globalConfig?.productPost?.length > 0) {\r\n return globalConfig?.productPost?.map((value: any, idx: any) => {\r\n const t = RESOLVER[value?.item?.type];\r\n const Component = withBindDataSource(t);\r\n const defaulSetting = t?.extend?.defaulSetting;\r\n return (\r\n <Component\r\n key={`${index}${idx}`}\r\n textStyle={{ ...defaulSetting?.textStyle, ...value?.item?.textStyle }}\r\n bindDatas={value?.item?.bindDatas ?? []}\r\n {...defaulSetting?.props}\r\n {...value?.item?.props}\r\n event={value?.item?.event || {}}\r\n // schema={schema}\r\n id={value?.id}\r\n // viewTime={viewTime.current}\r\n rec={rec}\r\n isPost={true}\r\n tipText={tipText}\r\n style={{\r\n ...defaulSetting?.style,\r\n ...value?.item?.style,\r\n width: containerWidth,\r\n height,\r\n overflow: 'auto'\r\n }}\r\n index={index}\r\n />\r\n );\r\n });\r\n }\r\n }\r\n };\r\n\r\n const renderLogo = useMemo(() => {\r\n if (globalConfig?.logoUrl && globalConfig?.isShowLogo) {\r\n return (\r\n <div className='clc-sxp-logo-banner' style={{ backgroundColor: globalConfig?.color }}>\r\n <img src={globalConfig?.logoUrl} alt='logo' />\r\n </div>\r\n );\r\n }\r\n return null;\r\n }, [globalConfig]);\r\n\r\n const CTA = (rec: RecItemType, index: number) => {\r\n if (globalConfig?.isShowCTA === undefined || globalConfig?.isShowCTA) {\r\n return (\r\n <div className='clc-sxp-bottom-card'>\r\n <RenderCard rec={rec} index={index} tempMap={tempMap} resolver={RESOLVER} />\r\n </div>\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n const renderBottom = (rec: RecItemType, index: number) => {\r\n if (rec?.video) {\r\n return (\r\n <>\r\n {rec?.video?.title && <div className='clc-sxp-bottom-shadow' />}\r\n <div className='clc-sxp-bottom'>\r\n <Nudge nudge={nudge} />\r\n {CTA(rec, index)}\r\n <div>\r\n <ExpandableText\r\n className='clc-sxp-bottom-text'\r\n isPost={true}\r\n foldText={tipText?.foldText}\r\n unfoldText={tipText?.unfoldText}\r\n text={rec?.video?.title ?? ''}\r\n style={{\r\n ...descStyle,\r\n textShadow: globalConfig?.isOpenTextShadow ? '2px 2px 4px rgba(0, 0, 0, 0.5)' : 'none'\r\n }}\r\n />\r\n </div>\r\n <Hashtag\r\n index={index}\r\n tags={rec?.video?.hashTags ?? []}\r\n itemId={rec?.video?.itemId}\r\n itemType={rec?.video?.itemId ? 'VIDEO' : null}\r\n rec={rec}\r\n hashTagStyle={hashTagStyle}\r\n />\r\n </div>\r\n </>\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n const likeIcon = useIconLink(defaultLikeIconPath, appDomain);\r\n const unlikeIcon = useIconLink(defaultUnLikeIconPath, appDomain);\r\n const renderLikeButton = (rec: RecItemType, index: number) => {\r\n if (!globalConfig?.isShowLike) return;\r\n let top = globalConfig?.likeIconY ?? 400;\r\n if (top < 40) {\r\n top += 40;\r\n }\r\n if (rec?.video) {\r\n return (\r\n <LikeButton\r\n key={rec.position}\r\n activeIcon={globalConfig?.likeIcon ?? likeIcon}\r\n unActicveIcon={globalConfig?.unlikeIcon ?? unlikeIcon}\r\n position={index}\r\n active={rec.isCollected}\r\n recData={rec}\r\n className='clc-sxp-like-button'\r\n style={{\r\n top,\r\n right: globalConfig?.likeIconX ?? 0\r\n }}\r\n />\r\n );\r\n }\r\n return null;\r\n };\r\n const mutedIcon = useIconLink('/pb_static/5beaaa5ce7f3477b99db3838619cc471.png', appDomain);\r\n const unmutedIcon = useIconLink('/pb_static/fea8668a8a894e4aa3a86bcc775e895e.png', appDomain);\r\n const renderView = (rec: RecItemType, index: number) => {\r\n return (\r\n <div style={{ position: 'relative', border: '1px solid #e1e1e1' }}>\r\n {renderLogo}\r\n <Tagbar tagList={tagList} />\r\n <ToggleButton\r\n style={{\r\n position: 'absolute',\r\n right: globalConfig?.muteIconX ?? 0,\r\n visibility: data?.[index]?.video?.url ? 'visible' : 'hidden',\r\n bottom: globalConfig?.muteIconY ?? 23,\r\n zIndex: 999\r\n }}\r\n defaultValue={true}\r\n activeIcon={globalConfig?.unMuteIcon ? globalConfig?.unMuteIcon : mutedIcon}\r\n unactiveIcon={globalConfig?.muteIcon ? globalConfig?.muteIcon : unmutedIcon}\r\n // onChange={setIsMuted}\r\n />\r\n {renderContent(rec, index)}\r\n {renderBottom(rec, index)}\r\n {renderLikeButton(rec, index)}\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <div\r\n className={css({\r\n width: '100%',\r\n height: containerHeight,\r\n display: 'flex',\r\n boxSizing: 'border-box',\r\n gap: 16,\r\n pointerEvents: 'none',\r\n userSelect: 'none',\r\n transform: 'scale(0.7) translateX(-22%) translateY(-140px)'\r\n })}\r\n >\r\n {data?.map((rec, index) => {\r\n return renderView(rec, index);\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(DiyPortalPreview);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-10-31 10:56:01\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-27 18:19:31\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Popup\\index.tsx\r\n *\r\n */\r\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport Modal from '../Modal';\r\nimport { RecItemType } from '../typing';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport withBindDataSource from '@/core/hoc/withBindDataSource';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport { IPopupType } from '@/core/context/EditorContext';\r\n\r\nconst Popup = () => {\r\n const { schema, resolver, popup } = useEditor();\r\n const { setPopupDetailData, popupDetailData, bffEventReport } = useSxpDataSource();\r\n const { productView } = useEventReport();\r\n const [visible, setVisible] = useState<IPopupType>();\r\n const curTimeRef = useRef<any>(null);\r\n\r\n useEffect(() => {\r\n const initTime = () => {\r\n curTimeRef.current = new Date();\r\n };\r\n initTime();\r\n window.addEventListener('pageshow', initTime);\r\n return () => {\r\n window.removeEventListener('pageshow', initTime);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (popup && popup?.id && popup?.id !== '') {\r\n curTimeRef.current = new Date();\r\n setVisible(popup);\r\n }\r\n }, [popup]);\r\n\r\n const handleClose = () => {\r\n if (!popup || popup?.id === '' || !visible || (new Date() as any) - curTimeRef.current < (popup?.duration ?? 0)) {\r\n return;\r\n }\r\n setVisible({\r\n ...popup,\r\n id: ''\r\n });\r\n const data = popupDetailData as RecItemType;\r\n const product = data?.video?.bindProduct;\r\n const cta = data?.video?.bindProduct?.bindCta;\r\n if (product && cta) {\r\n productView(data, product, cta, curTimeRef.current, popupDetailData?.index);\r\n }\r\n\r\n setTimeout(() => {\r\n window?.sxpPopup('');\r\n setPopupDetailData?.(null);\r\n }, popup?.duration);\r\n };\r\n\r\n const renderPopupDetail = useMemo(() => {\r\n return schema?.sxpPageConf?.globalConfig?.popupList?.map((value: any, index: any) => {\r\n if (value?.id === popup?.id) {\r\n const t = resolver[value?.item?.type];\r\n const Component = withBindDataSource(t);\r\n const isExternalLink = value?.item?.event?.onClick?.linkType === 'externalLink';\r\n const isPopup = value?.item?.event?.onClick?.linkType === 'popup';\r\n const defaulSetting = t?.extend?.defaulSetting;\r\n return (\r\n <Component\r\n key={index}\r\n style={{\r\n ...defaulSetting?.style,\r\n ...value?.item?.style,\r\n width: window.innerWidth ?? '100vw',\r\n height: '80vh',\r\n overflow: 'auto'\r\n }}\r\n textStyle={{ ...defaulSetting?.textStyle, ...value?.item?.textStyle }}\r\n bindDatas={value?.item?.bindDatas ?? []}\r\n {...defaulSetting?.props}\r\n {...value?.item?.props}\r\n event={value?.item?.event || {}}\r\n schema={schema}\r\n id={value?.id}\r\n isExternalLink={isExternalLink}\r\n isPopup={isPopup}\r\n onClose={handleClose}\r\n />\r\n );\r\n } else {\r\n return <></>;\r\n }\r\n });\r\n }, [schema, popup, resolver, handleClose]);\r\n\r\n return (\r\n <Modal popup={visible} onClose={handleClose} padding={0} modalStyle={{ position: 'fixed' }}>\r\n {renderPopupDetail}\r\n </Modal>\r\n );\r\n};\r\nexport default Popup;\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-15 19:03:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-13 14:54:12\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageCore\\index.tsx\r\n *\r\n */\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-11-24 15:58:00\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2023-12-26 10:24:42\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageCore\\index.tsx\r\n *\r\n */\r\nimport React, { FC, memo, useMemo } from 'react';\r\nimport SxpPageRender from '../SxpPageRender';\r\nimport Popup from '../SxpPageRender/Popup';\r\nimport { PageData } from '@/core/Pagebuilder/type';\r\nimport * as _materials_ from '@/materials';\r\nimport { EditorCore, MaterialComponet } from '@/core';\r\nimport SxpDataSourceProvider from '@/core/context/SxpDataSourceProvider';\r\n\r\nconst RESOLVER: Record<string, MaterialComponet> = {};\r\nObject.values(_materials_).forEach((v: any) => {\r\n RESOLVER[v.extend!.type] = v;\r\n});\r\n\r\nexport interface ISxpPageCoreProps {\r\n data?: PageData;\r\n maxSize?: number;\r\n defaultSize?: number;\r\n hashTagSize?: number;\r\n loadingImage?: string;\r\n appDomain?: string;\r\n licenseUrl?: String;\r\n enabledMetaConversionApi?: boolean;\r\n}\r\n\r\nconst SxpPageCore: FC<ISxpPageCoreProps> = ({\r\n data,\r\n maxSize = 10,\r\n defaultSize = 10,\r\n hashTagSize = 20,\r\n loadingImage,\r\n appDomain,\r\n licenseUrl,\r\n enabledMetaConversionApi\r\n}) => {\r\n const utmVal = useMemo(() => {\r\n const searchParams = location?.search ? location?.search?.replace('?', '') : '';\r\n return searchParams;\r\n }, []);\r\n return (\r\n <EditorCore resolver={RESOLVER} enableDataSource={false} schema={data?.data} utmVal={utmVal}>\r\n <SxpDataSourceProvider\r\n utmVal={utmVal}\r\n dataSources={data?.data_sources}\r\n sxpParameter={data?.sxp_parameter}\r\n maxSize={data?.sxp_parameter?.personalized_recommend ?? maxSize}\r\n defaultSize={data?.sxp_parameter?.default_recommend ?? defaultSize}\r\n hashTagSize={data?.sxp_parameter?.hash_tag_size ?? hashTagSize}\r\n loadingImage={loadingImage}\r\n appDomain={appDomain}\r\n enabledMetaConversionApi={enabledMetaConversionApi}\r\n isShowTag={data?.data?.sxpPageConf?.globalConfig?.isShowTag}\r\n globalConfig={data?.data?.sxpPageConf?.globalConfig}\r\n render={({ rtcList, tagList }) => (\r\n <>\r\n <SxpPageRender\r\n {...data?.data?.sxpPageConf}\r\n tagList={tagList}\r\n data={rtcList}\r\n resolver={RESOLVER}\r\n licenseUrl={licenseUrl}\r\n />\r\n <Popup />\r\n </>\r\n )}\r\n />\r\n </EditorCore>\r\n );\r\n};\r\n\r\nexport default memo(SxpPageCore);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-26 10:38:53\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-08 10:53:29\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\context\\EditorDataProvider.tsx\r\n *\r\n */\r\nimport React, { FC, PropsWithChildren, createContext, useContext, useState } from 'react';\r\n\r\ninterface IEditorDataContext {\r\n sxpPrameter?: {\r\n bottomImage: string;\r\n defaultRecommend: number;\r\n personalizedRecommend: number;\r\n placeholderImage: string;\r\n hashTagSize: number;\r\n loadingImage: string;\r\n industry?: string;\r\n privacyContent?: string;\r\n privacyNecessity?: boolean;\r\n privacyPolicyTitle?: string;\r\n privacyPolicyUrl?: string;\r\n privacyTitle?: string;\r\n template?: any | null;\r\n };\r\n appDomain?: string;\r\n openHashtag?: boolean;\r\n setOpenHashtag?: React.Dispatch<React.SetStateAction<boolean>>;\r\n openConsent?: boolean;\r\n setOpenConsent?: React.Dispatch<React.SetStateAction<boolean>>;\r\n}\r\n\r\ninterface IEditorProviderProps {\r\n data?: any;\r\n}\r\n\r\nconst EditorDataContext = createContext<IEditorDataContext>({});\r\n\r\nconst EditorDataProvider: FC<PropsWithChildren<IEditorProviderProps>> = ({ children, data }) => {\r\n const [openHashtag, setOpenHashtag] = useState(false);\r\n const [openConsent, setOpenConsent] = useState(false);\r\n\r\n return (\r\n <EditorDataContext.Provider\r\n value={{\r\n sxpPrameter: {\r\n bottomImage: data?.sxp_parameter?.bottom_image,\r\n defaultRecommend: data?.sxp_parameter?.default_recommend,\r\n personalizedRecommend: data?.sxp_parameter?.personalized_recommend,\r\n placeholderImage: data?.sxp_parameter?.placeholder_image,\r\n hashTagSize: data?.sxp_parameter?.hash_tag_size,\r\n loadingImage: data?.sxp_parameter?.loading_image,\r\n privacyContent: data?.sxp_parameter?.privacy_context,\r\n privacyNecessity: data?.sxp_parameter?.privacy_necessity,\r\n privacyPolicyTitle: data?.sxp_parameter?.privacy_policy_title,\r\n privacyPolicyUrl: data?.sxp_parameter?.privacy_policy_url,\r\n privacyTitle: data?.sxp_parameter?.privacy_title,\r\n template: data?.sxp_parameter?.template,\r\n industry: data?.sxp_parameter?.industry\r\n },\r\n appDomain: data?.appDomain,\r\n openHashtag,\r\n setOpenHashtag,\r\n openConsent,\r\n setOpenConsent\r\n }}\r\n >\r\n {children}\r\n </EditorDataContext.Provider>\r\n );\r\n};\r\n\r\nexport function useEditorDataProvider() {\r\n return useContext(EditorDataContext);\r\n}\r\n\r\nexport default EditorDataProvider;\r\n"],"names":["__rest","s","t","p","i","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","pathParamsReg","getDataByDS","apiAddr","configs","$store","idMapName","id","method","url","urlParams","name","queryString","headers","body","apiUrl","k","v","res","error","SXP_TOKEN_INFO_KEY","getSxpTokenInfo","builder","dataId","tenantId","appId","tokenJson","tokenData","_a","tokenRes","data","uuid","len","radix","chars","r","generateRandomString","length","characters","charactersLength","counter","getUid","originalUid","uuidv4","unzip","b64Data","charData","x","binData","pako","_instance","API_URL","PagebuilderClass","Pagebuilder","env","path","decodeData","__STORE__","_b","request_id","fake_session_id","isEmpty","recommendVideoRes","useEditor","useContext","EditorContext","useDataSource","DataSourceContext","feRealSessionIdKey","generateFeSessionId","uid","storeAndLoadFeSessionId","getFeSessionId","refreshFeSessionId","FAKE_USER_KEY","FAKE_USER_STATE","AGREE_POLICY","storeAndLoadFeUserId","fakeUserId","getFeUserId","fakeUserState","useIconLink","domain","appDomain","useSxpDataSource","useMemo","SXP_EVENT_BUS","EventEmitter","SXP_EVENT_TYPE","Consent","width","height","privacy_title","privacy_context","privacy_policy_url","privacy_policy_title","setIsAgreePolicy","bffEventReport","channelObj","params","qs","key","getUtmValue","useEffect","handleAgree","React","memo","SxpDataSourceContext","createContext","DataSourceType","UTM_KEYS","DEFAULT_TAG","SxpDataSourceProvider","render","dataSources","utmVal","enableReportEvent","maxSize","defaultSize","isPreview","sxpParameter","hashTagSize","loadingImage","isOpenHashTag","enabledMetaConversionApi","consentHeight","consentWidth","isShowTag","isOpenConsent","globalConfig","isEditor","rtcList","setRtcList","useState","tagList","setTagList","loading","setLoading","curReqInfo","setCurReqInfo","swiperRef","useRef","isInit","isAgreePolicy","popupDetailData","setPopupDetailData","waterFallData","setWaterFallData","openHashtag","setOpenHashtag","cacheRtcList","setCacheRtcList","cacheActiveIndex","setCacheActiveIndex","isFromHashtag","setIsFromHashtag","videoRef","setVideoRef","themeTag","curTime","selectTag","setSelectTag","isShowConsent","_d","_c","handleChangeThemeTag","tag","bffDataSource","d","bffFetch","useCallback","options","err","getRecommendVideos","query","_e","val","_h","_g","_f","loadVideos","userInfo","eventInfo","sessionID","ef","realUserInfo","realEventInfo","bffFbReport","eventName","actionSource","eventSourceUrl","externalId","bffMutateLike","bffMutateUnlike","bffSubmitForm","bffGetTagList","_o","_m","_l","_q","_p","ctaEvent","rec","product","position","cta","isProd","fromKName","_j","_k","h5EnterLink","getVal","time","defaultLoadingImage","DATA_TYPE","DataSourceProvider","children","isSsr","enable","setOptions","schema","store","setStore","setConfigs","isEqual","getDataSource","getOptions","_options","childKey","item","popupInit","EditorCore","forwardRef","resolver","enableDataSource","ref","currentNode","setCurrentNode","_schema","setSchema","prePiontData","setPrePiontData","undoStack","setUndoStack","redoStack","setRedoStack","popup","setPopup","type","aniType","saveDataSource","dataSource","cloneDeep","_pageInfoData","_setPageInfoData","useImperativeHandle","pageData","getCurPageConf","interactionRender$8","fontOptions","sxpFonts","defaultSetting","settingRender$6","useEventReport","jumpToWeb","productView","viewTime","backMainFeed","lastFeed","hashTag","AppointForm","columns","style","title","textStyle","submitBgColor","submitColor","submitText","layoutType","isExternalLink","isPopup","onClick","onClose","submitButtonStyle","props","submitForm","formRef","defaultColumns","list","obj","handleSubmit","debounce","vals","arr","css","createMaterial","component","AppointFormComponent","settingRender","interactionRender","settingRender$5","isObject","extend","target","src","ssrDocument","getDocument","doc","ssrWindow","callback","getWindow","win","classesToTokens","classes","c","deleteProps","object","nextTick","delay","now","getComputedStyle","el","window","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","a","o","isNode","node","to","noExtend","nextSource","keysArray","nextIndex","nextKey","desc","setCSSProperty","varName","varValue","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","startTime","duration","dir","isOutOfBound","current","animate","progress","easeProgress","currentPosition","elementChildren","element","selector","showWarning","text","createElement","elementOffset","document","box","clientTop","clientLeft","scrollTop","scrollLeft","elementPrevAll","prevEls","prev","elementNextAll","nextEls","next","elementStyle","prop","elementIndex","child","elementParents","parents","parent","elementTransitionEnd","fireCallBack","elementOuterSize","size","includeMargins","makeElementsArray","Mousewheel","extendParams","on","emit","timeout","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","normalize","sX","sY","pX","pY","handleMouseEnter","handleMouseLeave","animateSlider","newEvent","releaseScroll","handle","event","disableParentSwiper","targetEl","targetElContainsTarget","delta","rtlFactor","positions","prevEvent","ignoreWheelEvents","wasBeginning","wasEnd","firstEvent","snapToThreshold","events","disable","createElementIfNotDefined","originalParams","checkProps","classesToSelector","Pagination","pfx","number","bulletSize","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","bulletActiveClass","onBulletClick","index","update","rtl","previousIndex","slidesLength","total","bullets","firstIndex","lastIndex","midIndex","subEl","classesToRemove","suffix","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","paginationHTML","numberOfBullets","init","destroy","_s","isHidden","Scrollbar","isTouched","dragTimeout","dragStartPos","dragSize","trackSize","divider","setTranslate","scrollbar","dragEl","newSize","newPos","setTransition","updateSize","getPointerPosition","setDragPosition","positionRatio","onDragStart","wrapperEl","onDragMove","onDragEnd","activeListener","passiveListener","eventMethod","enableDraggable","disableDraggable","swiperEl","Autoplay","raf","autoplayDelayTotal","autoplayDelayCurrent","autoplayTimeLeft","autoplayStartTime","wasPaused","pausedByTouch","touchStartTimeout","slideChanged","pausedByInteraction","pausedByPointerEnter","onTransitionEnd","resume","calcTimeLeft","timeLeft","getSlideDelay","activeSlideEl","slideEl","run","delayForce","currentSlideDelay","speed","proceed","start","stop","pause","internal","reset","onVisibilityChange","onPointerEnter","onPointerLeave","attachMouseEvents","detachMouseEvents","attachDocumentEvents","detachDocumentEvents","freeMode","once","onTouchStart","translate","onTouchMove","touches","onTouchEnd","_ref2","currentPos","snapGrid","timeDiff","lastMoveEvent","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","doBounce","afterBouncePosition","bounceAmount","needsLoopFix","nextSlide","j","moveDistance","currentSlideSize","support","calcSupport","getSupport","deviceCached","calcDevice","_temp","userAgent","platform","ua","device","screenWidth","screenHeight","android","ipad","ipod","iphone","windows","macos","iPadScreens","getDevice","overrides","browser","calcBrowser","needPerspectiveFix","isSafari","major","minor","num","isWebView","isSafariBrowser","need3dFix","getBrowser","Resize","observer","animationFrame","resizeHandler","createObserver","entries","newWidth","newHeight","contentBoxSize","contentRect","removeObserver","orientationChangeHandler","Observer","observers","attach","ObserverFunc","mutations","observerUpdate","containerParents","eventsEmitter","handler","priority","self","onceHandler","_len","args","_key","eventHandler","context","_len2","_key2","updateSlides","getDirectionPropertyValue","label","slidesEl","swiperSize","wrongRTL","isVirtual","previousSlidesLength","slides","slidesGrid","slidesSizesGrid","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","gridEnabled","slideSize","shouldResetSlideSize","slide","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","marginLeft","marginRight","boxSizing","clientWidth","offsetWidth","newSlidesGrid","slidesGridItem","groups","groupSize","_","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","offsetSize","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","getSlideByIndex","updateSlidesOffset","minusOffset","toggleSlideClasses$1","condition","className","updateSlidesProgress","offsetCenter","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","isVisible","updateProgress","multiplier","translatesDiff","isBeginning","isEnd","progressLoop","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","toggleSlideClasses","updateSlidesClasses","activeIndex","getFilteredSlide","activeSlide","prevSlide","processLazyPreloader","imageEl","slideSelector","lazyEl","unlazy","preload","amount","slidesPerView","activeColumn","preloadColumns","slideIndexLastInView","realIndex","getActiveIndexByTranslate","updateActiveIndex","newActiveIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","skip","firstSlideInColumn","activeSlideIndex","updateClickedSlide","pathEl","slideFound","getSwiperTranslate","currentTranslate","byController","y","z","newProgress","minTranslate","maxTranslate","translateTo","runCallbacks","translateBounds","newTranslate","isH","transitionEmit","direction","transitionStart","transitionEnd","transition","slideTo","initial","enabled","normalizedTranslate","normalizedGrid","normalizedGridNext","slideToLoop","newIndex","targetSlideIndex","cols","centeredSlides","needLoopFix","slideNext","animating","perGroup","increment","slidePrev","rtlTranslate","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","threshold","currentSnap","nextSnap","slideToClickedSlide","slideToIndex","loopCreate","slideRealIndex","initSlides","slidesPerGroup","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","slidesToAdd","loopFix","byMousewheel","allowSlidePrev","allowSlideNext","loopedSlides","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","currentSlideTranslate","diff","shift","loopParams","loopDestroy","newSlidesOrder","loop","setGrabCursor","moving","unsetGrabCursor","grabCursor","closestElement","base","__closestFrom","found","preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","swipingClassHasValue","eventPath","noSwipingSelector","isTargetShadow","startY","preventDefault","shouldPreventDefault","targetTouch","pageX","pageY","diffX","diffY","touchAngle","touchesDiff","prevTouchesDirection","isLoop","allowLoopFix","evt","loopFixed","resistanceRatio","touchEndTime","pathTree","swipeToLast","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","onResize","isVirtualLoop","onScroll","onLoad","onDocumentTouchStart","capture","domMethod","swiperMethod","attachEvents","detachEvents","events$1","isGridEnabled","setBreakpoint","initialized","breakpoints","breakpoint","breakpointParams","wasMultiRow","isMultiRow","wasGrabCursor","isGrabCursor","wasEnabled","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","wasLoop","isEnabled","hasLoop","getBreakpoint","containerEl","currentHeight","points","point","minRatio","b","prepareClasses","prefix","resultClasses","classNames","addClasses","suffixes","removeClasses","checkOverflow","wasLocked","slidesOffsetBefore","lastSlideRightEdge","checkOverflow$1","defaults","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","prototypes","extendedDefaults","Swiper$1","Swiper","swipers","newParams","mod","swiperParams","property","min","cls","updates","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","getWrapperSelector","lazyElements","deleteInstance","cleanStyles","newDefaults","modules","module","m","prototypeGroup","protoMethod","paramsList","needsNavigation","needsPagination","needsScrollbar","uniqueClasses","unique","wrapperClass","updateSwiper","passedParams","changedParams","nextEl","prevEl","scrollbarEl","paginationEl","updateParams","currentParams","pagination","navigation","virtual","thumbs","needThumbsInit","needControllerInit","needPaginationInit","needScrollbarInit","needNavigationInit","loopNeedDestroy","loopNeedEnable","loopNeedReloop","destroyModule","newValue","getParams","splitEvents","rest","allowedParams","plainObj","mountSwiper","getChangedParams","oldParams","oldChildren","getKey","keys","addKey","oldChildrenKeys","childrenKeys","newKeys","oldKeys","newKey","oldKey","updateOnVirtualData","_extends","source","isChildSwiperSlide","processChildren","getChildren","slots","foundSlides","renderVirtual","virtualData","getSlideIndex","from","loopFrom","loopTo","slidesToRender","useIsomorphicLayoutEffect","deps","useLayoutEffect","SwiperSlideContext","useSwiperSlide","SwiperContext","externalElRef","Tag","WrapperTag","onSwiper","eventsAssigned","containerClasses","setContainerClasses","setVirtualData","breakpointChanged","setBreakpointChanged","initializedRef","swiperElRef","oldPassedParamsRef","oldSlides","nextElRef","prevElRef","paginationElRef","scrollbarElRef","restProps","onBeforeBreakpoint","initSwiper","passParams","extendWith","renderSlides","SwiperSlide","externalRef","zoom","lazy","virtualIndex","swiperSlideIndex","slideElRef","slideClasses","setSlideClasses","lazyLoaded","setLazyLoaded","updateClasses","slideData","renderChildren","closeIcon","Modal","visible","modalStyle","padding","isShow","setIsShow","modalEleRef","parentNode","isOpen","handleClose","ReactDOM","limitTextLastWholeWord","originalText","limit","words","newWords","ExpandableText","maxStr","foldText","unfoldText","isPost","onChange","isShowMore","setIsShowMore","lineClamp","multiRow","multiRowCopy","handleClick","FormatImage","imgSrc","setImgSrc","CommodityDetail","content","bgImg","isDefault","bottom_image","tipText","commodityStyles","buttonStyle","curTimeRef","showModal","setShowModal","handleLink","initTime","priceText","renderContent","getStyle","renderBtn","CommodityDetailComponent","interactionRender$7","settingRender$4","img","getMediaValueByMode","mode","link","file","Prompt","btnText","icon","iconSrc","handleOk","success","PromptComponent","settingRender$3","CommodityDetailDiroNew","scrollRef","productInfoText","CommodityDetailDiroNewComponent","settingRender$2","interactionRender$6","EventProvider","throttle","useOnScreen","observerRef","isOnScreen","setIsOnScreen","entry","Img","translateY","imgStyle","Commodity","recData","ctaTempStyles","styles","CommodityComponent","interactionRender$5","Appoint","AppointComponent","Link","handleTo","LinkComponent","interactionRender$4","CommodityDiro","CommodityDiroComponent","interactionRender$3","CommodityDiroNew","CommodityDiroNewComponent","interactionRender$2","Scroll","isPadding","FreeMode","MultiCommodityDiro","products","setProducts","MultiCommodityDiroComponent","interactionRender$1","MultiCommodity","MultiCommodityComponent","MultiCommodityDiroNew","MultiCommodityDiroNewComponent","settingRender$1","Navbar","WaterfallFlowItem","sizeChange","unitWidth","showBorder","reportTagsView","textStyles","space","showVideo","setShowVideo","imgDom","firstFrameSrc","setFirstFrameSrc","top","pictRef","imgLoad","handleClickToDetail","WaterfallList","showBanner","scrollParent","setScrollTop","setData","waterfallFlowDom","styleList","setStyleList","styleListRef","heightList","isLoadingData","setIsLoadingData","setList","buttonRef","createRandomNum","max","waterfallFlowListInfo","frameInfo","setFrameInfoInfo","rowsNum","getStyleList","temporaryStyleList","bottomItemIndex","currentRow","remainder","minHeightInd","minHeight","onSizeChange","previewData","resizeObserver","handleClickLink","ind","_r","_t","_u","_v","_w","videoDom","canvasRef","calculateHeightForWidth","videoWidth","videoHeight","targetWidth","aspectRatio","video","canvas","ctx","targetHeight","containerRef","isLoadMore","setIsLoadMore","WaterFall","setViewTime","isEq","setRecData","left","List","HashTag","HashTagComponent","ConsentComponent","defaultUnLikeIconPath","defaultLikeIconPath","LikeButton","active","activeIcon","unActicveIcon","mutateLike","mutateUnlike","state","setState","likeIcon","unlikeIcon","VideoWidget","muted","videoPostConfig","isPauseVideo","setIsPauseVideo","videoStartTime","isLoadFinish","setIsLoadFinish","isFirstPlay","setIsFirstPlay","isActive","waiting","setWaiting","videoId","videoEleRef","blur","blurBgSrc","blurStyle","isBgColor","bgStyle","handlePlay","PAUSE_ICON","handlePlaying","handleStartPlay","videoDuration","videoCurrentTime","playType","handLoadeddata","setFrameImg","handleLoadedmetadata","handleClickVideo","isPause","handlePause","playDuration","handleWaiting","videoSrc","Hls","hls","videoPlayerWrapperNode","dom","dom2","onShow","onHide","renderPoster","renderLoading","loading_gif","handleBeforeUnload","ToggleButton","defaultValue","unactiveIcon","isTrue","setIsTure","FingerSwipeTip","imageUrl","show","setShow","FINGER_SWIPE_ICON","animationCls","Picture","imgUrlsPostConfig","onShowFirstImage","PictureGroup","imgUrls","onReportViewImageEnd","onViewImageStartEvent","isLoad","setIsLoad","showFirstImageFn","Hashtag","tags","itemId","itemType","hashTagStyle","handleClickTag","withBindDataSource","Component","handleDataSourceByEvent","dataArr","match","get","clonedProps","bindDatas","cloneProps","propKey","dataPath","eventObj","RenderCard","tempMap","renderComp","defaulSetting","_x","_0","_y","_z","_1","_2","_4","_3","_5","_6","Nudge","nudge","Tagbar","setActiveIndex","realTagList","handleSelectTag","SxpPageRender","descStyle","containerHeight","containerWidth","ctaType","licenseUrl","viewImageStartTime","isMuted","setIsMuted","isShowFingerTip","handleH5EnterLink","firstRef","visibleChange","repCond","handleReportViewImageEnd","handleReportProductView","handleViewImageStartEvent","tagHeight","h","minusHeight","renderLogo","idx","onExpandableChange","lineGradStyle","renderBottom","renderLikeButton","endTime","handleScrollEvent","curItem","visList","renderView","mutedIcon","unmutedIcon","handleVideoStart","handleLoadedMetadata","onPause","RESOLVER","_materials_","DiyPortalPreview","CTA","Popup","setVisible","renderPopupDetail","SxpPageCore","EditorDataContext","EditorDataProvider","openConsent","setOpenConsent","useEditorDataProvider"],"mappings":"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,IACH,EAAG,GACH,KAAM,CACP,CAAA,YC1BcE,GAAA,CACb,CACE,MAAO,2BACP,MAAO,CACL,CACE,KAAM,SACN,MAAO,iCACP,QAAS,CACP,CACE,MAAO,eACP,MAAO,MACR,EACD,CACE,MAAO,eACP,MAAO,QACR,CACF,EACD,KAAM,CAAC,QAAS,SAAU,WAAW,CACtC,EACD,CACE,KAAM,SACN,KAAM,CAAC,QAAS,SAAU,OAAO,EACjC,WAAY,GACb,EACD,CACE,KAAM,QACN,MAAO,CACL,CACE,MAAO,uCACP,KAAM,SACN,KAAM,CAAC,QAAS,SAAU,YAAY,EACtC,IAAK,KACL,WAAY,IACZ,aAAc,CACf,CACF,CACF,CACF,CACF,EACD,CACE,MAAO,2BACP,MAAO,CACL,CACE,KAAM,CAAC,QAAS,iBAAiB,EACjC,KAAM,gBACN,MAAO,CACL,CACE,MAAO,eACP,KAAM,SACN,QAAS,CACP,CACE,MAAO,2BACP,MAAO,OACR,EACD,CACE,MAAO,2BACP,MAAO,YACR,EACD,CACE,MAAO,eACP,MAAO,OACR,EACD,CACE,MAAO,2BACP,MAAO,SACR,EACD,CACE,MAAO,2BACP,MAAO,MACR,CACF,EACD,KAAM,CAAC,QAAS,kBAAmB,OAAO,EAC1C,aAAc,OACf,EACD,CACE,KAAM,QACN,MAAO,2BACP,MAAO,CACL,CACE,KAAM,QACN,KAAM,CAAC,OAAO,CACf,EACD,CACE,KAAM,SACN,QAAS70B,GACT,KAAM,CAAC,YAAY,EACnB,cAAcvO,GAAAuO,KAAc,CAAC,KAAC,MAAAvO,KAAA,OAAA,OAAAA,GAAE,KACjC,EACD,CACE,KAAM,SACN,WAAY,KACZ,KAAM,CAAC,UAAU,CAClB,CACF,CACF,EACD,CACE,MAAO,2BACP,KAAM,WACP,EACD,CACE,MAAO,2BACP,KAAM,WACP,EACD,CACE,MAAO,2BACP,KAAM,SACN,KAAM,CAAC,WAAW,CACnB,CACF,CACF,CACF,CACF,EACD,CACE,MAAO,uCACP,MAAO,CACL,CACE,KAAM,QACN,MAAO,qBACP,KAAM,CAAC,QAAS,cAAe,iBAAiB,EA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AC,CAGR,EAEexE,IAAAA,GAAAA,EAAAA,KAAKmhC,EAAqB,ECvHzC,MAAMA,GAAwBt1B,GAAeu1B,GAAgC,CAC3E,YAAa,4EACb,KAAM,GACN,SAAU,WACV,KAAM,wBACN,QAAS,CACP,kBAAAn1B,GACA,cAAe,CAAE,gBACjBD,EACD,EACD,cAAe,CACb,MAAO,CACL,cAAe,CACb,IAAK,CACH,aAAc,EACd,MAAO,GACP,OAAQ,GACR,YAAa,EACd,EACD,MAAO,CACL,SAAU,GACV,MAAO,OACP,UAAW,MACZ,EACD,SAAU,CACR,eAAgB,YAChB,SAAU,GACV,WAAY,OACZ,MAAO,OACP,UAAW,OACX,MAAO,IACP,OAAQ,EACT,CACF,CACF,EACD,MAAO,CACL,aAAc,EACd,MAAO,IACP,OAAQ,GACR,QAAS,EACT,gBAAiB,yBACjB,aAAc,CACf,CACF,EACD,EAAG,IACH,EAAG,GACH,KAAM,CACP,CAAA,YClDcq1B,GAAA,CACb,CACE,MAAO,SACP,MAAO,CACL,CACE,KAAM,SACN,MAAO,2BACP,KAAM,CAAC,QAAS,YAAY,CAC7B,CACF,CACF,EACD,CACE,MAAO,2BACP,MAAO,CACL,CACE,KAAM,SACN,MAAO,2BACP,KAAM,CAAC,QAAS,OAAO,EACvB,WAAY,IACb,EACD,CACE,KAAM,SACN,MAAO,2BACP,KAAM,CAAC,QAAS,eAAe,EAC/B,aAAc,EACf,CACF,CACF,EACD,CACE,MAAO,2BACP,MAAO,CACL,CACE,KAAM,CAAC,QAAS,YAAY,EAC5B,KAAM,gBACN,MAAO,CACL,CACE,MAAO,eACP,KAAM,SACN,QAAS,CACP,CACE,MAAO,sBACP,MAAO,cACR,EACD,CACE,MAAO,sBACP,MAAO,aACR,EACD,CACE,MAAO,kCACP,MAAO,aACR,EACD,CACE,MAAO,eACP,MAAO,OACR,EACD,CACE,MAAO,eACP,MAAO,OACR,CACF,EACD,KAAM,CAAC,QAAS,aAAc,OAAO,EACrC,aAAc,OACf,EACD,CACE,KAAM,QACN,MAAO,2BACP,MAAO,CACL,CACE,KAAM,QACN,KAAM,CAAC,OAAO,CACf,EA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","x_google_ignoreList":[0,27,28,29,30,31,32,33,34,35,36,37,38,39]}
|
1
|
+
{"version":3,"file":"pb-ui.min.js","sources":["../node_modules/tslib/tslib.es6.js","../src/core/utils/getDataByDS.ts","../src/core/utils/getSxpTokenInfo.ts","../src/core/utils/tool.ts","../src/core/utils/unzip.ts","../src/core/Pagebuilder/PagebuilderClass.ts","../src/core/Pagebuilder/index.tsx","../src/core/hooks/useEditor.ts","../src/core/hooks/useDataSource.ts","../src/core/utils/sessionStore.ts","../src/core/utils/localStore.ts","../src/core/components/SxpPageRender/useIconLink.ts","../src/core/utils/event.ts","../src/core/components/Consent/index.tsx","../src/core/context/SxpDataSourceProvider.tsx","../src/core/hooks/useSxpDataSource.ts","../src/core/hooks/useCurrentNode.ts","../src/core/context/DataSourceProvider.tsx","../src/core/context/EditorContext.tsx","../src/materials/sxp/popup/AppointForm/interactionRender.tsx","../src/materials/sxp/popup/AppointForm/settingRender.tsx","../src/core/hooks/useEventReport.ts","../src/materials/sxp/popup/AppointForm/Form.tsx","../src/materials/sxp/popup/AppointForm/index.tsx","../src/core/create.ts","../src/materials/sxp/popup/AppointForm/material.tsx","../src/materials/sxp/popup/CommodityDetail/settingRender.tsx","../node_modules/swiper/shared/ssr-window.esm.mjs","../node_modules/swiper/shared/utils.mjs","../node_modules/swiper/modules/mousewheel.mjs","../node_modules/swiper/shared/create-element-if-not-defined.mjs","../node_modules/swiper/shared/classes-to-selector.mjs","../node_modules/swiper/modules/pagination.mjs","../node_modules/swiper/modules/scrollbar.mjs","../node_modules/swiper/modules/autoplay.mjs","../node_modules/swiper/modules/free-mode.mjs","../node_modules/swiper/shared/swiper-core.mjs","../node_modules/swiper/shared/update-swiper.mjs","../node_modules/swiper/shared/update-on-virtual-data.mjs","../node_modules/swiper/swiper-react.mjs","../src/core/components/SxpPageRender/Modal/index.tsx","../src/core/components/SxpPageRender/ExpandableText.tsx","../src/core/components/SxpPageRender/FormatImage.tsx","../src/materials/sxp/popup/CommodityDetail/index.tsx","../src/materials/sxp/popup/CommodityDetail/material.tsx","../src/materials/sxp/popup/Prompt/interactionRender.tsx","../src/materials/sxp/popup/Prompt/settingRender.tsx","../src/materials/sxp/popup/Prompt/success.png","../src/core/utils/materials.ts","../src/materials/sxp/popup/Prompt/index.tsx","../src/materials/sxp/popup/Prompt/material.tsx","../src/materials/sxp/popup/CommodityDetailDiroNew/settingRender.tsx","../src/materials/sxp/popup/CommodityDetailDiroNew/index.tsx","../src/materials/sxp/popup/CommodityDetailDiroNew/material.tsx","../src/materials/sxp/template/components/settingRender.tsx","../src/materials/sxp/template/Commodity/interactionRender.tsx","../src/materials/sxp/template/components/EventProvider.tsx","../src/core/hooks/useOnScreen.ts","../src/materials/sxp/template/components/Img.tsx","../src/materials/sxp/template/Commodity/index.tsx","../src/materials/sxp/template/Commodity/material.tsx","../src/materials/sxp/template/Appoint/interactionRender.tsx","../src/materials/sxp/template/Appoint/index.tsx","../src/materials/sxp/template/Appoint/material.tsx","../src/materials/sxp/template/Link/index.tsx","../src/materials/sxp/template/Link/material.tsx","../src/materials/sxp/template/CommodityDiro/interactionRender.tsx","../src/materials/sxp/template/CommodityDiro/index.tsx","../src/materials/sxp/template/CommodityDiro/material.tsx","../src/materials/sxp/template/CommodityDiroNew/interactionRender.tsx","../src/materials/sxp/template/CommodityDiroNew/index.tsx","../src/materials/sxp/template/CommodityDiroNew/material.tsx","../src/materials/sxp/template/MultiCommodityDiro/interactionRender.tsx","../src/materials/sxp/template/components/Scroll.tsx","../src/materials/sxp/template/MultiCommodityDiro/index.tsx","../src/materials/sxp/template/MultiCommodityDiro/material.tsx","../src/materials/sxp/template/MultiCommodity/interactionRender.tsx","../src/materials/sxp/template/MultiCommodity/index.tsx","../src/materials/sxp/template/MultiCommodity/material.tsx","../src/materials/sxp/template/MultiCommodityDiroNew/interactionRender.tsx","../src/materials/sxp/template/MultiCommodityDiroNew/index.tsx","../src/materials/sxp/template/MultiCommodityDiroNew/material.tsx","../src/materials/sxp/HashTag/settingRender.tsx","../src/core/components/SxpPageRender/Navbar.tsx","../src/core/components/SxpPageRender/WaterFall/WaterfallList.tsx","../src/core/components/SxpPageRender/WaterFall/left.png","../src/core/components/SxpPageRender/WaterFall/List.tsx","../src/core/components/SxpPageRender/WaterFall/index.tsx","../src/materials/sxp/HashTag/index.tsx","../src/materials/sxp/HashTag/material.tsx","../src/materials/sxp/Consent/settingRender.tsx","../src/materials/sxp/Consent/index.tsx","../src/materials/sxp/Consent/material.tsx","../src/core/components/SxpPageRender/LikeButton/index.tsx","../src/core/components/SxpPageRender/VideoWidget/loading.gif","../src/core/components/SxpPageRender/VideoWidget/index.tsx","../src/core/components/SxpPageRender/ToggleButton/index.tsx","../src/core/components/SxpPageRender/FingerSwipeTip/index.tsx","../src/core/components/SxpPageRender/PictureGroup/Picture.tsx","../src/core/components/SxpPageRender/PictureGroup/index.tsx","../src/core/components/SxpPageRender/Hashtag/index.tsx","../src/core/components/SxpPageRender/left.png","../src/core/hoc/withBindDataSource.tsx","../src/core/components/SxpPageRender/RenderCard.tsx","../src/core/components/SxpPageRender/Nudge/index.tsx","../src/core/components/SxpPageRender/Tagbar.tsx","../src/core/components/SxpPageRender/index.tsx","../src/core/components/DiyPortalPreview/PictureGroup.tsx","../src/core/components/DiyPortalPreview/VideoWidget.tsx","../src/core/components/DiyPortalPreview/index.tsx","../src/core/components/SxpPageRender/Popup/index.tsx","../src/core/components/SxpPageCore/index.tsx","../src/core/context/EditorDataProvider.tsx"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","import { ISchema } from '../schema';\r\n\r\nconst pathParamsReg = /:\\w+/g;\r\n\r\nexport default async (apiAddr: string, configs: ISchema['dataSource']) => {\r\n const $store: Record<string, any> = {};\r\n const idMapName: Record<string, string> = {};\r\n for (let i = 0; i < configs?.length; i++) {\r\n const { id, method, url, urlParams, name, queryString, headers, body } = configs[i];\r\n let apiUrl = url;\r\n if (urlParams) {\r\n Object.entries(urlParams).forEach(([k, v]) => {\r\n apiUrl = apiUrl.replace(pathParamsReg, (p) => {\r\n if (p === k) {\r\n return v;\r\n } else {\r\n return p;\r\n }\r\n });\r\n });\r\n }\r\n // let params: any;\r\n if (queryString) {\r\n apiUrl += queryString;\r\n // params = qs.parse(queryString.slice(1));\r\n }\r\n idMapName[id] = name;\r\n try {\r\n const result = await fetch(apiUrl, {\r\n method,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n ...headers\r\n },\r\n body: JSON.stringify(body)\r\n }).then((res) => res.json());\r\n // const result = await fetch(`${apiAddr}/storefront/v1/proxy`, {\r\n // method: 'POST',\r\n // headers: {\r\n // 'Content-Type': 'application/json'\r\n // },\r\n // body: JSON.stringify({\r\n // url: apiUrl,\r\n // method,\r\n // headers,\r\n // body,\r\n // params\r\n // })\r\n // }).then((res) => res.json());\r\n $store[id] = result;\r\n } catch (error) {\r\n console.error('DataSource request error: ', error);\r\n $store[id] = {};\r\n }\r\n }\r\n return { $store, idMapName };\r\n};\r\n","import PagebuilderClass from '../Pagebuilder/PagebuilderClass';\r\n\r\nconst SXP_TOKEN_INFO_KEY = 'SXP_TOKEN_INFO';\r\n\r\nexport const getSxpTokenInfo = async (builder: PagebuilderClass, dataId: string) => {\r\n const tenantId = builder.getTenantId();\r\n const appId = builder.getAppId();\r\n const apiUrl = builder.getApiUrl();\r\n // 获取缓存token信息\r\n const tokenJson = window.localStorage.getItem(SXP_TOKEN_INFO_KEY);\r\n let tokenData = JSON.parse(tokenJson || '{}');\r\n const currentTime = Date.now();\r\n // token 过期或者不存在则重新请求\r\n if (currentTime > (tokenData?.expireTime ?? 0)) {\r\n const tokenRes = await fetch(`${apiUrl}/storefront/v1/proxy/token/${dataId}`, {\r\n method: 'POST',\r\n headers: {\r\n 'x-tenant-id': tenantId || '',\r\n 'x-app-id': appId || ''\r\n }\r\n }).then((res) => res.json());\r\n if (tokenRes.success) {\r\n // 缓存 tokenRes\r\n const data = tokenRes.data;\r\n tokenData = { ...data, expireTime: Date.now() + data.expire * 1000 };\r\n window.localStorage.setItem(SXP_TOKEN_INFO_KEY, JSON.stringify(tokenData));\r\n }\r\n }\r\n return tokenData;\r\n};\r\n","/*\r\n * @Author : haocanweng@chatlabs.cn\r\n * @Date : 2023-08-21 16:58:40\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 10:15:05\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\utils\\tool.ts\r\n */\r\nimport { CSSProperties } from 'react';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\n// 生成uuid\r\nfunction uuid(len: number, radix: number) {\r\n const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');\r\n const uuid = [];\r\n let i;\r\n radix = radix || chars.length;\r\n\r\n if (len) {\r\n for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];\r\n } else {\r\n let r;\r\n uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';\r\n uuid[14] = '4';\r\n\r\n for (i = 0; i < 36; i++) {\r\n if (!uuid[i]) {\r\n r = 0 | (Math.random() * 16);\r\n uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];\r\n }\r\n }\r\n }\r\n\r\n return uuid.join('');\r\n}\r\n\r\nconst getIndexByblockType = (type: string, index: number) => {\r\n if (type === 'CommodityCarouselBlock' || type === 'CopyBlock') {\r\n return 'initial';\r\n } else {\r\n return index;\r\n }\r\n};\r\n\r\nexport const generateRandomString = (length: number) => {\r\n let result = '';\r\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n const charactersLength = characters.length;\r\n let counter = 0;\r\n while (counter < length) {\r\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\r\n counter += 1;\r\n }\r\n return result;\r\n};\r\n\r\nexport const getUid = () => {\r\n const originalUid = uuidv4();\r\n const uid = originalUid?.replaceAll ? originalUid.replaceAll('-', '') : generateRandomString(32);\r\n return uid; // uid为32位长度\r\n};\r\n\r\ninterface IfontType {\r\n 'fontFamily-cn': string;\r\n 'fontFamily-en': string;\r\n}\r\n\r\nexport const setFontForText = (textContent?: string | null, style?: IfontType | any) => {\r\n if (!textContent) return '';\r\n\r\n let content = '';\r\n\r\n const cn = style?.['fontFamily-cn'];\r\n const en = style?.['fontFamily-en'];\r\n\r\n if (!cn && !en) {\r\n return textContent;\r\n }\r\n\r\n let text = textContent;\r\n const chineseRegex = /[\\u4e00-\\u9fa5]/g;\r\n const englishRegex = /[^\\u4e00-\\u9fa5]/g;\r\n\r\n const cnStyle = `font-family:${cn ?? 'inherit'}`;\r\n const enStyle = `font-family:${en ?? 'inherit'}`;\r\n\r\n const fn = (str: string) => {\r\n let chineseStartIndex = str.search(chineseRegex);\r\n let englishStartIndex = str.search(englishRegex);\r\n\r\n if (chineseStartIndex !== -1 && englishStartIndex !== -1 && chineseStartIndex < englishStartIndex) {\r\n content += `<span style=\"${cnStyle}\">${str.substring(chineseStartIndex, englishStartIndex)}</span>`;\r\n text = str.substring(englishStartIndex, str?.length);\r\n }\r\n\r\n if (chineseStartIndex !== -1 && englishStartIndex !== -1 && chineseStartIndex > englishStartIndex) {\r\n content += `<span style=\"${enStyle}\">${str.substring(englishStartIndex, chineseStartIndex)}</span>`;\r\n text = str.substring(chineseStartIndex, str?.length);\r\n }\r\n\r\n if (chineseStartIndex === -1) {\r\n content += `<span style=\"${enStyle}\">${str.substring(englishStartIndex, str?.length)}</span>`;\r\n text = '';\r\n return false;\r\n }\r\n\r\n if (englishStartIndex === -1) {\r\n content += `<span style=\"${cnStyle}\">${str.substring(chineseStartIndex, str?.length)}</span>`;\r\n text = '';\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n let w = true;\r\n\r\n while (w) {\r\n w = fn(text);\r\n }\r\n\r\n return content;\r\n};\r\n\r\nexport { uuid, getIndexByblockType };\r\n","import pako from 'pako';\r\n\r\nexport function unzip(b64Data: string) {\r\n const strData = atob(b64Data);\r\n const charData = strData.split('').map(function (x) {\r\n return x.charCodeAt(0);\r\n });\r\n const binData = new Uint8Array(charData);\r\n const data = pako.inflate(binData, { to: 'string' });\r\n return JSON.parse(data);\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-09-05 13:51:23\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-01-02 14:02:57\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\Pagebuilder\\PagebuilderClass.ts\r\n *\r\n */\r\nlet _instance: PagebuilderClass | null = null;\r\n\r\nconst API_URL = {\r\n dev: 'https://clc-pagebuilder-be-dev.chatlabs.net',\r\n staging: 'https://clc-pagebuilder-be-staging.chatlabs.net',\r\n live: 'https://clc-pagebuilder-be.chatlabs.net'\r\n};\r\n\r\nexport default class PagebuilderClass {\r\n private appId: string | undefined;\r\n private tenantId: string | undefined;\r\n private apiUrl: string | undefined;\r\n private env?: 'dev' | 'staging' | 'live' | undefined;\r\n\r\n constructor() {\r\n if (_instance) {\r\n return _instance;\r\n }\r\n _instance = this;\r\n }\r\n\r\n setApiUrl(apiUrl: string) {\r\n this.apiUrl = `https://${apiUrl}`;\r\n }\r\n\r\n getApiUrl() {\r\n if (this.apiUrl) return this.apiUrl;\r\n if (!this.env) return '';\r\n return API_URL[this.env];\r\n }\r\n\r\n getEnv(): 'dev' | 'staging' | 'live' | undefined {\r\n return this.env;\r\n }\r\n\r\n setEnv(value: 'dev' | 'staging' | 'live' | undefined) {\r\n this.env = value;\r\n }\r\n\r\n setAppId = (appId: string) => {\r\n this.appId = appId;\r\n };\r\n\r\n setTenantId = (tenantId: string) => {\r\n this.tenantId = tenantId;\r\n };\r\n\r\n getAppId = () => {\r\n return this.appId;\r\n };\r\n\r\n getTenantId = () => {\r\n return this.tenantId;\r\n };\r\n}\r\n","import { isEmpty } from 'lodash';\r\nimport getDataByDS from '../utils/getDataByDS';\r\nimport { getSxpTokenInfo } from '../utils/getSxpTokenInfo';\r\nimport { uuid } from '../utils/tool';\r\nimport { unzip } from '../utils/unzip';\r\nimport type PagebuilderProps from './type';\r\nimport PagebuilderClass from './PagebuilderClass';\r\nimport { PageData } from './type';\r\n\r\nlet builder: PagebuilderClass | null = null;\r\n\r\nconst Pagebuilder: PagebuilderProps = {\r\n init: ({ appId, tenantId, env = 'live', apiUrl }) => {\r\n if (!builder) {\r\n builder = new PagebuilderClass();\r\n }\r\n if (apiUrl) {\r\n builder.setApiUrl(apiUrl);\r\n }\r\n builder.setAppId(appId);\r\n builder.setTenantId(tenantId);\r\n builder.setEnv(env);\r\n },\r\n getDetail: (path: string) => {\r\n if (!builder) return;\r\n const tenantId = builder.getTenantId();\r\n const appId = builder.getAppId();\r\n const apiUrl = builder.getApiUrl();\r\n return fetch(`${apiUrl}/storefront/v1/page?path=` + path, {\r\n method: 'get',\r\n headers: {\r\n 'x-tenant-id': tenantId || '',\r\n 'x-app-id': appId || ''\r\n }\r\n }).then(async (res) => {\r\n const result = await res.json();\r\n const decodeData = unzip(result?.data?.data);\r\n if (decodeData) {\r\n const { $store: __STORE__ } = await getDataByDS(apiUrl, decodeData?.dataSource ?? []);\r\n result.data.data = decodeData;\r\n Object.assign(result.data.data, { __STORE__ });\r\n }\r\n return result;\r\n });\r\n },\r\n getSxpDetailByPageId: async (id: string) => {\r\n if (!builder) return;\r\n const tenantId = builder.getTenantId();\r\n const appId = builder.getAppId();\r\n const apiUrl = builder.getApiUrl();\r\n return fetch(`${apiUrl}/storefront/v1/page?id=` + id, {\r\n method: 'get',\r\n headers: {\r\n 'x-tenant-id': tenantId || '',\r\n 'x-app-id': appId || ''\r\n }\r\n }).then(async (res) => {\r\n const result = await res.json();\r\n if (!result.success) {\r\n return undefined;\r\n }\r\n const decodeData = unzip(result?.data?.data);\r\n result.data.data = decodeData;\r\n return result.data as PageData;\r\n });\r\n },\r\n getSxpRecommendVideoData: async (dataId: string) => {\r\n if (!builder) return;\r\n // 获取缓存token信息\r\n const tokenData = await getSxpTokenInfo(builder, dataId);\r\n\r\n // 获取 requestId 和 productUserId\r\n const request_id = uuid(0, 0);\r\n let fake_session_id = window.localStorage.getItem('SXP_FAKE_SESSION_ID');\r\n if (isEmpty(fake_session_id)) {\r\n fake_session_id = uuid(36, 62);\r\n window.localStorage.setItem('SXP_FAKE_SESSION_ID', fake_session_id);\r\n }\r\n\r\n // 获取推荐视频数据\r\n const recommendVideoRes = await fetch('https://dev-sxp-be.chatlabs.net/platform/open/rec/v1.2', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n token: tokenData.token,\r\n channel: tokenData.channel,\r\n userId: tokenData.userId\r\n },\r\n body: JSON.stringify({\r\n productUserId: fake_session_id,\r\n channel: tokenData.channel,\r\n maxRecs: 10,\r\n requestId: request_id\r\n })\r\n }).then((res) => res.json());\r\n\r\n return recommendVideoRes?.data || null;\r\n }\r\n};\r\nexport { Pagebuilder };\r\n","import { useContext } from 'react';\r\nimport { EditorContext } from '../context/EditorContext';\r\n\r\nexport function useEditor() {\r\n return useContext(EditorContext);\r\n}\r\n","import { useContext } from 'react';\r\nimport { DataSourceContext } from '../context/DataSourceProvider';\r\n\r\n function useDataSource() {\r\n return useContext(DataSourceContext);\r\n}\r\n\r\nexport { useDataSource };\r\n","import { getUid } from './tool';\r\n\r\nconst feRealSessionIdKey = 'feRealSessionIdKey';\r\n\r\nconst generateFeSessionId = () => {\r\n const uid = getUid(); // 32位长度\r\n const timestamp = Date.now(); // 13位长度\r\n const result = `${timestamp}${uid}`; // 总共45位长度的唯一ID\r\n return result;\r\n};\r\n\r\n// 生成或者获取sessionID\r\nexport const storeAndLoadFeSessionId = () => {\r\n let result = getFeSessionId();\r\n if (!result) {\r\n result = generateFeSessionId();\r\n window.sessionStorage.setItem(feRealSessionIdKey, result);\r\n }\r\n return result;\r\n};\r\n\r\nexport const refreshFeSessionId = () => {\r\n const result = generateFeSessionId();\r\n window.sessionStorage.setItem(feRealSessionIdKey, result);\r\n};\r\n\r\n// 获取 sessionID\r\nconst getFeSessionId = () => {\r\n return window.sessionStorage.getItem(feRealSessionIdKey);\r\n};\r\n\r\n// 删除sessionID\r\nexport const removeFeSessionId = () => {\r\n window.sessionStorage.removeItem(feRealSessionIdKey);\r\n};\r\n","import { isEmpty } from 'lodash';\r\nimport { uuid } from './tool';\r\n\r\nexport const FAKE_USER_KEY = 'SXP_FAKE_USER_ID';\r\nexport const FAKE_USER_STATE = 'FAKE_USER_STATE';\r\nexport const AGREE_POLICY = 'AGREE_POLICY';\r\n\r\nexport const storeAndLoadFeUserId = () => {\r\n let fakeUserId = window.localStorage.getItem(FAKE_USER_KEY) as string;\r\n if (isEmpty(fakeUserId)) {\r\n fakeUserId = uuid(36, 62);\r\n window.localStorage.setItem(FAKE_USER_KEY, fakeUserId);\r\n }\r\n return fakeUserId;\r\n};\r\n\r\nexport const removeFeUserId = () => {\r\n window.localStorage.removeItem(FAKE_USER_KEY);\r\n};\r\n\r\nexport const getFeUserId = () => {\r\n const fakeUserState = window.localStorage.getItem(FAKE_USER_STATE) as string;\r\n if (isEmpty(fakeUserState)) {\r\n window.localStorage.setItem(FAKE_USER_STATE, 'true');\r\n }\r\n return isEmpty(fakeUserState);\r\n};\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-25 18:23:54\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\useIconLink.ts\r\n *\r\n */\r\nimport { useMemo } from 'react';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\n\r\nexport function useIconLink(path: string, domain?: string) {\r\n const { appDomain } = useSxpDataSource();\r\n return useMemo(() => {\r\n if (domain) {\r\n return `https://${domain}${path}`;\r\n } else {\r\n return appDomain ? `https://${appDomain}${path}` : `${window.location.origin}${path}`;\r\n }\r\n }, [appDomain, path, domain]);\r\n}\r\n","import EventEmitter from 'eventemitter3';\r\n\r\nconst SXP_EVENT_BUS = new EventEmitter();\r\n\r\nexport enum SXP_EVENT_TYPE {\r\n PAGE_DID_SHOW = 'pageDidShow',\r\n PAGE_DID_HIDE = 'pageDidHide',\r\n CHANGE_THEME_TAG = 'changeThemeTag'\r\n}\r\n\r\nexport default SXP_EVENT_BUS;\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-06-13 15:16:53\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-19 14:13:50\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\Consent\\index.tsx\r\n *\r\n */\r\nimport React, { FC, memo, useEffect, useMemo } from 'react';\r\nimport qs from 'qs';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { AGREE_POLICY } from '@/core/utils/localStore';\r\n\r\nexport interface IConsentProps {\r\n width?: number;\r\n height?: number;\r\n privacy_title?: string;\r\n privacy_context?: string;\r\n privacy_policy_url?: string;\r\n privacy_policy_title?: string;\r\n privacy_necessity?: boolean;\r\n}\r\n\r\nconst Consent: FC<IConsentProps> = ({\r\n width = window.innerWidth,\r\n height = window.innerHeight,\r\n privacy_title,\r\n privacy_context,\r\n privacy_policy_url,\r\n privacy_policy_title\r\n}) => {\r\n const { setIsAgreePolicy, bffEventReport } = useSxpDataSource();\r\n\r\n const channelObj = useMemo(() => {\r\n const queryString = location.search.slice(1);\r\n const params = qs.parse(queryString.replace(/\\+/g, '%2B')) as any;\r\n for (const key in params) {\r\n params[key] = params[key].replace(/%2B/g, '+');\r\n }\r\n return params;\r\n }, []);\r\n\r\n const getUtmValue = (key: string) => channelObj[key] ?? null;\r\n\r\n useEffect(() => {\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'privacyEnter',\r\n eventDescription: 'User enter privacy page',\r\n utmSource: getUtmValue('utm_source'),\r\n utmMedium: getUtmValue('utm_medium'),\r\n utmCampaign: getUtmValue('utm_campaign'),\r\n utmId: getUtmValue('utm_id'),\r\n utmContent: getUtmValue('utm_content'),\r\n clSource: getUtmValue('cl_source'),\r\n enterTime: `${Date.now()}`,\r\n enterUrl: window.location.href,\r\n rtc: null,\r\n requestId: null,\r\n sessionID: null\r\n }\r\n });\r\n }, []);\r\n\r\n const handleAgree = () => {\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'userConsent',\r\n eventDescription: '用户授权【操作结果】',\r\n consentResult: '0',\r\n consentTags: '[\"系统运营\"]',\r\n rtc: null,\r\n requestId: null,\r\n sessionID: null\r\n }\r\n });\r\n setIsAgreePolicy?.(true);\r\n window.localStorage.setItem(AGREE_POLICY, 'yes');\r\n };\r\n\r\n return (\r\n <div className='consent-bg'>\r\n <div className='consent'>\r\n <div className='consent-col'>\r\n <div className='consent-title'>{privacy_title ?? 'Privacy Policy'}</div>\r\n <div className='consent-content'>\r\n {privacy_context ??\r\n 'This site uses cookies to improve your online experience. By continuing to use the site please agree the policy first.'}\r\n </div>\r\n </div>\r\n <div className='consent-col'>\r\n <button aria-label='agree' className='consent-btn' onClick={handleAgree}>\r\n Agree\r\n </button>\r\n <a\r\n className='consent-policy'\r\n target='_blank'\r\n href={privacy_policy_url ? `https://${privacy_policy_url}` : undefined}\r\n >\r\n {privacy_policy_title ?? 'More information'}\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Consent);\r\n","import React, { FC, ReactNode, createContext, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport qs from 'qs';\r\nimport { DataSource, PageData } from '../Pagebuilder/type';\r\nimport {\r\n ProductInfoType,\r\n RecItemType,\r\n RecommendVideoResultType,\r\n VideoInfoType\r\n} from '../components/SxpPageRender/typing';\r\nimport { storeAndLoadFeSessionId } from '../utils/sessionStore';\r\nimport { storeAndLoadFeUserId, AGREE_POLICY } from '../utils/localStore';\r\nimport { useIconLink } from '../components/SxpPageRender/useIconLink';\r\nimport SXP_EVENT_BUS, { SXP_EVENT_TYPE } from '../utils/event';\r\nimport { ISxpPageRenderProps } from '../components/SxpPageRender';\r\nimport Consent from '../components/Consent';\r\n\r\nexport interface IWaterFallDataType {\r\n hashTag: string;\r\n itemId?: string;\r\n itemType?: 'VIDEO' | 'PRODUCT' | null;\r\n rec: RecItemType;\r\n}\r\n\r\nexport interface ISxpDataSourceContext {\r\n rtcList: RecItemType[];\r\n setRtcList?: React.Dispatch<React.SetStateAction<RecItemType[]>>;\r\n submitForm?: (body: { attributes: Array<{ name: string; value: string }> }) => Promise<boolean | undefined>;\r\n mutateUnlike?: (body: { videoItemId: string }) => Promise<boolean>;\r\n mutateLike?: (body: { content: string }) => Promise<boolean>;\r\n popupDetailData?: RecItemType & { index: number };\r\n setPopupDetailData?: React.Dispatch<React.SetStateAction<any | null>>;\r\n loadVideos?: (page: number) => Promise<void>;\r\n getRecommendVideos?: (query?: {\r\n maxSize?: number;\r\n defaultSize?: number;\r\n channel?: string;\r\n hashTag?: string;\r\n 'itemFilter.itemId'?: string;\r\n 'itemFilter.itemType'?: 'VIDEO' | 'PRODUCT' | null | undefined;\r\n traceInfo?: string;\r\n themeTag?: string;\r\n }) => Promise<RecommendVideoResultType | undefined>;\r\n utmVal?: string;\r\n bffEventReport?: (body: { userInfo?: object; eventInfo: object }) => Promise<any> | undefined | boolean;\r\n isPreview?: boolean;\r\n loading?: boolean;\r\n sxpParameter?: PageData['sxp_parameter'];\r\n waterFallData?: IWaterFallDataType;\r\n setWaterFallData?: React.Dispatch<React.SetStateAction<IWaterFallDataType | undefined>>;\r\n ctaEvent?: (\r\n eventInfo: any,\r\n rec?: RecItemType,\r\n product?: ProductInfoType | VideoInfoType | null,\r\n number?: number\r\n ) => void;\r\n swiperRef?: any;\r\n openHashtag?: boolean;\r\n setOpenHashtag?: React.Dispatch<React.SetStateAction<boolean>>;\r\n cacheRtcList?: RecItemType[];\r\n setCacheRtcList?: React.Dispatch<React.SetStateAction<RecItemType[]>>;\r\n cacheActiveIndex?: number;\r\n setCacheActiveIndex?: React.Dispatch<React.SetStateAction<number>>;\r\n isFromHashtag?: boolean;\r\n setIsFromHashtag?: React.Dispatch<React.SetStateAction<boolean>>;\r\n appDomain?: string;\r\n hashTagSize?: number;\r\n loadingImage?: string;\r\n isOpenHashTag?: boolean;\r\n tagList: string[];\r\n isAgreePolicy?: boolean;\r\n setIsAgreePolicy?: React.Dispatch<React.SetStateAction<boolean>>;\r\n setLoading?: React.Dispatch<React.SetStateAction<boolean>>;\r\n videoRef?: any;\r\n setVideoRef?: React.Dispatch<React.SetStateAction<any>>;\r\n bffFbReport?: (body: {\r\n eventName: string;\r\n actionSource?: string;\r\n eventSourceUrl?: string;\r\n externalId?: string;\r\n }) => Promise<any> | undefined | boolean;\r\n curTime?: any;\r\n h5EnterLink?: () => void;\r\n themeTag?: any;\r\n isShowConsent?: boolean;\r\n selectTag?: string;\r\n setSelectTag?: React.Dispatch<React.SetStateAction<string>>;\r\n}\r\n\r\nexport const SxpDataSourceContext = createContext<ISxpDataSourceContext>({\r\n rtcList: [],\r\n tagList: []\r\n});\r\n\r\nexport interface SxpDataSourceProviderProps {\r\n dataSources?: DataSource[];\r\n render: (data: {\r\n rtcList: RecItemType[];\r\n tagList: string[];\r\n submitForm: (body: { attributes: Array<{ name: string; value: string }> }) => Promise<boolean | undefined>;\r\n mutateUnlike: (body: { videoItemId: string }) => Promise<boolean>;\r\n mutateLike: (body: { content: string }) => Promise<boolean>;\r\n }) => ReactNode;\r\n utmVal?: string;\r\n enableReportEvent?: boolean; // 是否开启事件上报,后台不需要上报事件\r\n maxSize?: number;\r\n defaultSize?: number;\r\n hashTagSize?: number;\r\n isPreview?: boolean;\r\n sxpParameter?: PageData['sxp_parameter'];\r\n appDomain?: string;\r\n loadingImage?: string;\r\n isOpenHashTag?: boolean;\r\n enabledMetaConversionApi?: boolean;\r\n isShowTag?: boolean;\r\n consentWidth?: number;\r\n consentHeight?: number;\r\n isOpenConsent?: boolean;\r\n globalConfig?: ISxpPageRenderProps['globalConfig'];\r\n isEditor?: boolean;\r\n}\r\n\r\nenum DataSourceType {\r\n BFF = 5\r\n}\r\nconst UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_id', 'utm_content', 'cl_source'];\r\n\r\nexport const DEFAULT_TAG = 'FOR U';\r\n\r\nconst SxpDataSourceProvider: FC<SxpDataSourceProviderProps> = ({\r\n render,\r\n dataSources,\r\n utmVal,\r\n enableReportEvent = true,\r\n maxSize,\r\n defaultSize,\r\n isPreview = false,\r\n sxpParameter,\r\n appDomain,\r\n hashTagSize,\r\n loadingImage,\r\n isOpenHashTag = false,\r\n enabledMetaConversionApi = false,\r\n consentHeight,\r\n consentWidth,\r\n isShowTag = true,\r\n isOpenConsent = false,\r\n globalConfig,\r\n isEditor = false\r\n}) => {\r\n const [rtcList, setRtcList] = useState<RecItemType[]>([]);\r\n const [tagList, setTagList] = useState<string[]>([]);\r\n const [loading, setLoading] = useState(false);\r\n const [curReqInfo, setCurReqInfo] = useState<{ rtc: string; requestId: string }>({ rtc: '', requestId: '' });\r\n const swiperRef = useRef<any>(null);\r\n const isInit = useRef(false);\r\n const [isAgreePolicy, setIsAgreePolicy] = useState(() => !!window.localStorage.getItem(AGREE_POLICY));\r\n\r\n // 弹窗数据\r\n const [popupDetailData, setPopupDetailData] = useState();\r\n const [waterFallData, setWaterFallData] = useState<any>();\r\n const [openHashtag, setOpenHashtag] = useState(isOpenHashTag);\r\n const [cacheRtcList, setCacheRtcList] = useState<RecItemType[]>([]);\r\n const [cacheActiveIndex, setCacheActiveIndex] = useState<number>(0);\r\n const [isFromHashtag, setIsFromHashtag] = useState(false);\r\n const [videoRef, setVideoRef] = useState(null);\r\n const themeTag = useRef<string>();\r\n const curTime = useRef<any>();\r\n const [selectTag, setSelectTag] = useState(DEFAULT_TAG);\r\n\r\n const isShowConsent = useMemo(() => {\r\n return (globalConfig?.consent?.[0]?.item?.props?.privacy_necessity && !isAgreePolicy && !isEditor) || isOpenConsent;\r\n }, [isAgreePolicy, globalConfig, isOpenConsent, isEditor]);\r\n\r\n useEffect(() => {\r\n const handleChangeThemeTag = (tag?: string) => {\r\n themeTag.current = tag;\r\n };\r\n SXP_EVENT_BUS.on(SXP_EVENT_TYPE.CHANGE_THEME_TAG, handleChangeThemeTag);\r\n return () => {\r\n SXP_EVENT_BUS.off(SXP_EVENT_TYPE.CHANGE_THEME_TAG, handleChangeThemeTag);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n setOpenHashtag(isOpenHashTag);\r\n }, [isOpenHashTag]);\r\n\r\n // BFF 数据源\r\n const bffDataSource = useMemo(() => {\r\n return dataSources?.find((d) => d.type === DataSourceType.BFF);\r\n }, [dataSources]);\r\n\r\n // bff API 请求方法\r\n const bffFetch = useCallback(\r\n (\r\n path: string,\r\n options: {\r\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\r\n body?: object;\r\n query?: object;\r\n type?: 'beacon' | 'http';\r\n }\r\n ) => {\r\n if (!bffDataSource) return;\r\n const url = bffDataSource.url;\r\n const fakeUserId = storeAndLoadFeUserId();\r\n if (options?.query) {\r\n const queryString = qs.stringify(options.query);\r\n path = `${path}?${queryString}`;\r\n }\r\n\r\n // 事件上报优化\r\n // Beacon API 用于发送异步和非阻塞请求到服务器。这类请求不需要响应。\r\n if (options.type === 'beacon' && navigator.sendBeacon) {\r\n return navigator.sendBeacon(\r\n `${url}/api/v1${path}`,\r\n new Blob(\r\n [\r\n JSON.stringify({\r\n ...bffDataSource.headers,\r\n 'x-user-id': fakeUserId,\r\n ...options.body\r\n })\r\n ],\r\n { type: 'application/json;charset=UTF-8' }\r\n )\r\n );\r\n }\r\n\r\n return window\r\n .fetch(`${url}/api/v1${path}`, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'x-user-id': fakeUserId,\r\n ...bffDataSource.headers\r\n },\r\n method: options.method,\r\n body: JSON.stringify(options.body)\r\n })\r\n .then((res) => res.json())\r\n .catch((err) => Promise.reject(err));\r\n },\r\n [bffDataSource]\r\n );\r\n\r\n // 获取推荐视频数据\r\n const getRecommendVideos = useCallback(\r\n async (query?: {\r\n maxSize?: number;\r\n defaultSize?: number;\r\n channel?: string;\r\n hashTag?: string;\r\n 'itemFilter.itemId'?: string;\r\n 'itemFilter.itemType'?: 'VIDEO' | 'PRODUCT' | null | undefined;\r\n traceInfo?: string;\r\n themeTag?: string;\r\n }) => {\r\n query = {\r\n maxSize: query?.maxSize ?? maxSize,\r\n defaultSize: query?.defaultSize ?? defaultSize,\r\n 'itemFilter.itemId': query?.['itemFilter.itemId'],\r\n 'itemFilter.itemType': query?.['itemFilter.itemType'],\r\n hashTag: query?.hashTag,\r\n traceInfo: query?.traceInfo,\r\n themeTag: query?.themeTag\r\n };\r\n if (utmVal) {\r\n const val =\r\n utmVal\r\n ?.split('&')\r\n ?.filter((val) => {\r\n const key = val.split('=')[0];\r\n return UTM_KEYS.includes(key);\r\n })\r\n ?.join('&') ?? '';\r\n query = { ...query, channel: decodeURIComponent(val) };\r\n }\r\n const result = await bffFetch?.('/recommend/list', { method: 'GET', query });\r\n if (!result?.success) {\r\n return undefined;\r\n }\r\n if (!query?.hashTag) setCurReqInfo({ rtc: result.data.rtc, requestId: result.data.requestId });\r\n return result?.data as RecommendVideoResultType;\r\n },\r\n [bffFetch, utmVal, maxSize, defaultSize]\r\n );\r\n\r\n const loadVideos = useCallback(async () => {\r\n if (rtcList.length <= 0) {\r\n return;\r\n }\r\n const data = await getRecommendVideos({\r\n hashTag: waterFallData?.hashTag,\r\n 'itemFilter.itemId': waterFallData?.itemId,\r\n 'itemFilter.itemType': waterFallData?.itemType,\r\n themeTag: themeTag.current\r\n });\r\n setRtcList(rtcList.concat(data?.recList ?? []));\r\n setCacheRtcList(cacheRtcList.concat(data?.recList ?? []));\r\n }, [getRecommendVideos, rtcList, waterFallData, cacheRtcList]);\r\n\r\n const bffEventReport = useCallback(\r\n ({ userInfo, eventInfo }: { userInfo?: object; eventInfo: object }) => {\r\n // 关闭 BFF 事件上报\r\n if (!enableReportEvent) {\r\n return;\r\n }\r\n type DataType = Array<{ name: string; value: any }>;\r\n\r\n // 用户信息都是公共的\r\n if (!userInfo) {\r\n userInfo = {\r\n // productUserId: fakeUserId, // 后端逻辑会从请求头获取,所以不需要传\r\n // tpChannelId: 'H5' // 后端处理\r\n };\r\n }\r\n const sessionID = storeAndLoadFeSessionId();\r\n const ef: object = {\r\n ...{ sessionID, rtc: curReqInfo.rtc, requestId: curReqInfo.requestId },\r\n ...eventInfo\r\n };\r\n const realUserInfo: DataType = Object.entries(userInfo).map(([k, v]) => ({ name: k, value: v }));\r\n const realEventInfo: DataType = Object.entries(ef)\r\n .map(([k, v]) => v && { name: k, value: v })\r\n .filter(Boolean);\r\n\r\n console.log('======== 事件上报 ========');\r\n console.log('userInfo:', userInfo);\r\n console.log('eventInfo:', ef);\r\n console.log('========= 结束 =========');\r\n\r\n return bffFetch?.('/event/report', {\r\n method: 'POST',\r\n body: { userInfo: realUserInfo, eventInfo: realEventInfo },\r\n type: 'beacon'\r\n });\r\n },\r\n [bffFetch, curReqInfo, enableReportEvent]\r\n );\r\n\r\n const bffFbReport = useCallback(\r\n ({\r\n eventName,\r\n actionSource = 'website',\r\n eventSourceUrl = window?.location?.href,\r\n externalId\r\n }: {\r\n eventName: string;\r\n actionSource?: string;\r\n eventSourceUrl?: string;\r\n externalId?: string;\r\n }) => {\r\n if (!enableReportEvent || !enabledMetaConversionApi) {\r\n return;\r\n }\r\n const fakeUserId = storeAndLoadFeUserId();\r\n return bffFetch?.('/fb/events', {\r\n method: 'POST',\r\n body: {\r\n eventName,\r\n actionSource,\r\n eventSourceUrl,\r\n userData: {\r\n externalId: fakeUserId\r\n }\r\n },\r\n type: 'beacon'\r\n });\r\n },\r\n [bffFetch, enableReportEvent, enabledMetaConversionApi]\r\n );\r\n\r\n const bffMutateLike = useCallback(\r\n async (body: { content: string }) => {\r\n const res = await bffFetch?.('/recommend/like', { method: 'POST', body });\r\n return res?.success;\r\n },\r\n [bffFetch]\r\n );\r\n\r\n const bffMutateUnlike = useCallback(\r\n async (body: { videoItemId: string }) => {\r\n const res = await bffFetch?.('/recommend/unlike', { method: 'POST', body });\r\n return res?.success;\r\n },\r\n [bffFetch]\r\n );\r\n\r\n const bffSubmitForm = useCallback(\r\n async (body: { attributes: Array<{ name: string; value: string }> }) => {\r\n const res = await bffFetch?.('/customform', { method: 'POST', body });\r\n return res?.success;\r\n },\r\n [bffFetch]\r\n );\r\n\r\n // 获取 Tag\r\n const bffGetTagList = useCallback(async () => {\r\n if (!utmVal || !isShowTag) return;\r\n try {\r\n const val =\r\n utmVal\r\n ?.split('&')\r\n ?.filter((val) => {\r\n const key = val.split('=')[0];\r\n return UTM_KEYS.includes(key);\r\n })\r\n ?.join('&') ?? '';\r\n const result = await bffFetch?.('/tag/list', { method: 'GET', query: { channel: decodeURIComponent(val) } });\r\n setTagList(result?.data?.tags ?? []);\r\n } catch (e) {\r\n console.log('e', e);\r\n }\r\n }, [bffFetch, utmVal, isShowTag]);\r\n\r\n const ctaEvent = useCallback(\r\n (eventInfo: any, rec?: RecItemType, product?: ProductInfoType | VideoInfoType | null, position?: number) => {\r\n const cta = product?.bindCta;\r\n const isProd = rec?.video?.bindProduct || (rec?.video?.bindProducts && rec?.video?.bindProducts?.length > 0);\r\n let fromKName = '';\r\n if (isFromHashtag) {\r\n fromKName = 'hashTagPage';\r\n } else if (rec?.video?.url) {\r\n fromKName = 'videoPage';\r\n } else if (rec?.video?.imgUrls?.length) {\r\n fromKName = 'imagePage';\r\n }\r\n bffEventReport?.({\r\n eventInfo: {\r\n ...eventInfo,\r\n ctaId: cta?.itemId ?? '',\r\n ctaName: cta?.title ?? '',\r\n contentTags: JSON.stringify(cta?.tags),\r\n position: position + '',\r\n contentId: rec?.video?.itemId ?? '',\r\n productId: isProd ? product?.itemId : '',\r\n traceInfo: cta?.traceInfo ?? '',\r\n fromKName\r\n }\r\n });\r\n },\r\n [bffEventReport, isFromHashtag]\r\n );\r\n\r\n const h5EnterLink = useCallback(() => {\r\n const queryString = location.search.slice(1);\r\n const params = qs.parse(queryString.replace(/\\+/g, '%2B')) as any;\r\n for (const key in params) {\r\n params[key] = params[key].replace(/%2B/g, '+');\r\n }\r\n const getVal = (key: string) => params[key] ?? '';\r\n const time: any = new Date();\r\n curTime.current = time;\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'h5LinkEnterFeed',\r\n eventDescription: 'User enter h5 link',\r\n utmSource: getVal('utm_source'),\r\n utmMedium: getVal('utm_medium'),\r\n utmCampaign: getVal('utm_campaign'),\r\n utmId: getVal('utm_id'),\r\n utmContent: getVal('utm_content'),\r\n enterTime: Math.floor(time / 1000) + '',\r\n requestId: null,\r\n enterUrl: window?.location?.href ?? '',\r\n clSource: getVal('cl_source')\r\n }\r\n });\r\n }, [bffEventReport]);\r\n\r\n useEffect(() => {\r\n if (!isShowConsent) h5EnterLink();\r\n }, [isShowConsent]);\r\n\r\n useEffect(() => {\r\n if (isShowConsent) return;\r\n setLoading(true);\r\n bffGetTagList();\r\n getRecommendVideos()\r\n .then((data) => {\r\n setRtcList(data?.recList ?? []);\r\n setCacheRtcList(data?.recList ?? []);\r\n })\r\n .finally(() => {\r\n bffEventReport({\r\n eventInfo: {\r\n eventSubject: 'apiRequest',\r\n eventDescription: 'api request succeed'\r\n }\r\n });\r\n setLoading(false);\r\n isInit.current = true;\r\n });\r\n }, [isShowConsent]);\r\n\r\n useEffect(() => {\r\n if (!isInit.current) return;\r\n setLoading(true);\r\n bffGetTagList();\r\n getRecommendVideos()\r\n .then((data) => {\r\n setRtcList(data?.recList ?? []);\r\n setCacheRtcList(data?.recList ?? []);\r\n })\r\n .finally(() => {\r\n setLoading(false);\r\n });\r\n }, [getRecommendVideos, bffGetTagList]);\r\n\r\n const defaultLoadingImage = useIconLink('/pb_static/a65d23c5893c49d7aaaa81681d3179e2.gif', appDomain);\r\n\r\n return (\r\n <SxpDataSourceContext.Provider\r\n value={{\r\n rtcList,\r\n setRtcList,\r\n mutateLike: bffMutateLike,\r\n mutateUnlike: bffMutateUnlike,\r\n submitForm: bffSubmitForm,\r\n popupDetailData,\r\n loadVideos,\r\n setPopupDetailData,\r\n getRecommendVideos,\r\n bffEventReport,\r\n utmVal,\r\n isPreview,\r\n loading,\r\n sxpParameter,\r\n waterFallData,\r\n setWaterFallData,\r\n ctaEvent,\r\n swiperRef,\r\n openHashtag,\r\n setOpenHashtag,\r\n cacheRtcList,\r\n setCacheRtcList,\r\n cacheActiveIndex,\r\n setCacheActiveIndex,\r\n isFromHashtag,\r\n setIsFromHashtag,\r\n appDomain,\r\n hashTagSize,\r\n loadingImage: loadingImage ?? defaultLoadingImage,\r\n isOpenHashTag,\r\n tagList,\r\n setLoading,\r\n videoRef,\r\n setVideoRef,\r\n bffFbReport,\r\n isAgreePolicy,\r\n setIsAgreePolicy,\r\n curTime,\r\n h5EnterLink,\r\n themeTag,\r\n isShowConsent,\r\n selectTag,\r\n setSelectTag\r\n }}\r\n >\r\n {isShowConsent ? (\r\n <Consent {...globalConfig?.consent?.[0]?.item?.props} />\r\n ) : (\r\n render({\r\n rtcList,\r\n mutateLike: bffMutateLike,\r\n mutateUnlike: bffMutateUnlike,\r\n submitForm: bffSubmitForm,\r\n tagList\r\n })\r\n )}\r\n </SxpDataSourceContext.Provider>\r\n );\r\n};\r\n\r\nexport default memo(SxpDataSourceProvider);\r\n","import { useContext } from 'react';\r\nimport { SxpDataSourceContext } from '../context/SxpDataSourceProvider';\r\n\r\nexport function useSxpDataSource() {\r\n return useContext(SxpDataSourceContext);\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 13:56:30\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-20 14:57:12\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\hooks\\useCurrentNode.ts\r\n *\r\n */\r\nexport enum DATA_TYPE {\r\n STRING = 'string',\r\n NUMBER = 'number',\r\n ARRAY = 'array',\r\n OBJECT = 'object',\r\n BOOLEAN = 'boolean',\r\n ARRAY_OBJECT = 'array-object',\r\n ARRAY_STRING = 'array-string',\r\n ARRAY_NUMBER = 'array-number'\r\n}\r\n","import React, { FC, PropsWithChildren, createContext, memo, useCallback, useEffect, useState } from 'react';\r\nimport { isEqual } from 'lodash';\r\nimport { ISchema } from '../schema';\r\nimport { useEditor } from '../hooks';\r\nimport getDataByDS from '../utils/getDataByDS';\r\n\r\nexport interface IDataSourceContext {\r\n $store?: any;\r\n options: Array<{ label: string; value: string }>;\r\n configs: ISchema['dataSource'];\r\n}\r\n\r\nexport interface IDataSourceProviderProps {\r\n isSsr?: boolean;\r\n enable?: boolean;\r\n}\r\n\r\nexport const DataSourceContext = createContext<IDataSourceContext>({ $store: {}, options: [], configs: [] });\r\n\r\nconst DataSourceProvider: FC<PropsWithChildren<IDataSourceProviderProps>> = ({ children, isSsr, enable }) => {\r\n const [options, setOptions] = useState<Array<{ label: string; value: string }>>([]);\r\n const { schema } = useEditor();\r\n const [store, setStore] = useState<Record<string, any>>(schema.__STORE__ || {});\r\n const [configs, setConfigs] = useState<ISchema['dataSource']>([]);\r\n\r\n useEffect(() => {\r\n if (isSsr) return;\r\n if (!isEqual(configs, schema?.dataSource)) {\r\n setConfigs(schema?.dataSource ?? []);\r\n }\r\n }, [schema?.dataSource, isSsr]);\r\n\r\n // 获取数据源数据\r\n const getDataSource = useCallback(async () => {\r\n const { $store, idMapName } = await getDataByDS('', configs);\r\n setStore($store);\r\n getOptions($store, idMapName);\r\n }, [configs]);\r\n\r\n const getOptions = ($store: Record<string, any>, idMapName: Record<string, string>) => {\r\n const _options: Array<{ label: string; value: string }> = [];\r\n Object.entries($store).forEach(([key, value]) => {\r\n Object.keys(value).forEach((childKey) => {\r\n const item = { label: `${idMapName[key]} - ${childKey}`, value: `{{ ${key}.${childKey} }}` };\r\n _options.push(item);\r\n });\r\n });\r\n setOptions(_options);\r\n };\r\n\r\n useEffect(() => {\r\n if (!isSsr) {\r\n getDataSource();\r\n }\r\n }, [getDataSource, isSsr, schema]);\r\n\r\n if (!enable) {\r\n return children;\r\n }\r\n\r\n return (\r\n <DataSourceContext.Provider value={{ $store: schema.__STORE__ || store, options, configs }}>\r\n {children}\r\n </DataSourceContext.Provider>\r\n );\r\n};\r\n\r\nexport default memo(DataSourceProvider);\r\n","import React, {\r\n PropsWithChildren,\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useImperativeHandle,\r\n useState,\r\n useMemo\r\n} from 'react';\r\nimport { cloneDeep } from 'lodash';\r\nimport { MaterialComponet } from '../create';\r\nimport { ISchema } from '../schema';\r\nimport DataSourceProvider from './DataSourceProvider';\r\nimport { uuid } from '@/core/utils/tool';\r\n\r\nexport interface IPageParams {\r\n state: string;\r\n name: string;\r\n type: string;\r\n title?: string;\r\n description?: string;\r\n data: object;\r\n app_id: string;\r\n key_word?: string;\r\n share_title?: string;\r\n share_description?: string;\r\n h5_url?: string;\r\n mp_rul?: string;\r\n}\r\nexport type IPopupAniType = { name?: string; duration?: number };\r\nexport type IPopupType = { id: string } & IPopupAniType;\r\n\r\nexport interface IEditorContext {\r\n resolver: Record<string, MaterialComponet>;\r\n currentNode: any | null;\r\n schema: {\r\n pointData: any[];\r\n dataSource: ISchema['dataSource'];\r\n mobilePiontData: any[];\r\n pcPiontData: any[];\r\n type: 'PC' | 'mobile';\r\n pageInfo: ISchema['pageInfo'];\r\n pcPageConf: any;\r\n mobilePageConf: any;\r\n __STORE__?: Record<string, any>;\r\n sxpPageConf: Record<string, any>;\r\n };\r\n setSchema?: React.Dispatch<\r\n React.SetStateAction<{\r\n pointData: any[];\r\n dataSource: ISchema['dataSource'];\r\n mobilePiontData: any[];\r\n pcPiontData: any[];\r\n type: 'PC' | 'mobile';\r\n pageInfo: ISchema['pageInfo'];\r\n pcPageConf: any;\r\n mobilePageConf: any;\r\n __STORE__?: Record<string, any>;\r\n sxpPageConf: Record<string, any>;\r\n }>\r\n >;\r\n pageInfoData: any;\r\n setPageInfoData?: (pageData: IPageParams) => void;\r\n setCurrentNode?: React.Dispatch<React.SetStateAction<any | null>>;\r\n saveDataSource?: (dataSource: any[]) => void;\r\n prePiontData: any[];\r\n setPrePiontData?: React.Dispatch<React.SetStateAction<any[]>>;\r\n undoStack: any[];\r\n redoStack: any[];\r\n setUndoStack?: React.Dispatch<React.SetStateAction<any[]>>;\r\n setRedoStack?: React.Dispatch<React.SetStateAction<any[]>>;\r\n getCurPageConf?: any;\r\n popup: IPopupType;\r\n setPopup: React.Dispatch<React.SetStateAction<IPopupType>>;\r\n}\r\n\r\nexport interface IEditorCoreProps {\r\n resolver: Record<string, MaterialComponet>;\r\n isSsr?: boolean;\r\n schema?: any;\r\n enableDataSource?: boolean;\r\n utmVal?: string;\r\n}\r\n\r\nexport interface IEditorCoreRef {\r\n loadSchema: (schema: any) => void;\r\n exportSchema: () => any;\r\n getPageInfoData: () => any;\r\n initPageInfoData: (pageData: IPageParams) => void;\r\n}\r\n\r\nconst item = {\r\n id: uuid(6, 10),\r\n item: {\r\n type: 'common',\r\n h: 300,\r\n category: 'block',\r\n displayName: 'block',\r\n isFirstLayout: true,\r\n w: 1000\r\n },\r\n point: {\r\n i: 'x-0',\r\n x: -38.34375,\r\n y: 0,\r\n w: 1000,\r\n h: 300,\r\n isBounded: true,\r\n actualX: 0,\r\n actualY: 0\r\n },\r\n pathArr: [0],\r\n positionY: 0\r\n};\r\n\r\nconst popupInit = {\r\n id: '',\r\n duration: 0,\r\n name: 'none'\r\n};\r\n\r\nexport const EditorContext = React.createContext<IEditorContext>({\r\n resolver: {},\r\n currentNode: null,\r\n schema: {\r\n pointData: [],\r\n dataSource: [],\r\n mobilePiontData: [],\r\n type: 'PC',\r\n pcPiontData: [],\r\n pageInfo: {},\r\n pcPageConf: {},\r\n mobilePageConf: {},\r\n __STORE__: {},\r\n sxpPageConf: {}\r\n },\r\n pageInfoData: {},\r\n prePiontData: [],\r\n undoStack: [item],\r\n redoStack: [],\r\n popup: popupInit,\r\n setPopup: () => {}\r\n});\r\n\r\nconst EditorCore = forwardRef<IEditorCoreRef, PropsWithChildren<IEditorCoreProps>>(\r\n ({ children, resolver, isSsr, schema, enableDataSource = true, utmVal }, ref) => {\r\n const [currentNode, setCurrentNode] = useState<any | null>(null);\r\n const [_schema, setSchema] = useState<{\r\n pointData: any[];\r\n dataSource: ISchema['dataSource'];\r\n mobilePiontData: any[];\r\n pcPiontData: any[];\r\n type: 'PC' | 'mobile';\r\n pageInfo: ISchema['pageInfo'];\r\n pcPageConf: any;\r\n mobilePageConf: any;\r\n __STORE__?: Record<string, any>;\r\n sxpPageConf: Record<string, any>;\r\n }>(\r\n schema || {\r\n pointData: [item],\r\n dataSource: [],\r\n mobilePiontData: [],\r\n type: 'PC',\r\n pcPiontData: [],\r\n pageInfo: {},\r\n pcPageConf: {},\r\n mobilePageConf: {},\r\n sxpPageConf: {}\r\n }\r\n );\r\n // 拖拽前的数据位置和大小\r\n const [prePiontData, setPrePiontData] = useState([item]);\r\n\r\n /**\r\n * undo / redo\r\n * stop 事件、resize 事件、拖进画布、复制、删除 等操作,需要把数据push到队列\r\n */\r\n const [undoStack, setUndoStack] = useState<any[]>([[item]]);\r\n const [redoStack, setRedoStack] = useState<any[]>([]);\r\n const [popup, setPopup] = useState<IPopupType>(popupInit);\r\n typeof window !== 'undefined' &&\r\n (window.sxpPopup = (type: string, aniType?: IPopupAniType) => {\r\n setPopup({\r\n ...popupInit,\r\n id: type,\r\n ...aniType\r\n });\r\n });\r\n\r\n typeof window !== 'undefined' &&\r\n (window.getJointUtmLink = (url: string) => {\r\n if (url?.indexOf('?') !== -1) {\r\n return url + (utmVal ? '&' + utmVal : '');\r\n } else {\r\n return url + (utmVal ? '?' + utmVal : '');\r\n }\r\n });\r\n\r\n // 切换页面类型,清空操作栈\r\n useEffect(() => {\r\n setUndoStack([_schema.pointData]);\r\n setRedoStack([]);\r\n }, [_schema.type]);\r\n\r\n // 保存数据源配置\r\n const saveDataSource = useCallback(\r\n (dataSource: any[]) => {\r\n const schema = cloneDeep(_schema);\r\n if (!schema) return;\r\n schema.dataSource = dataSource;\r\n setSchema?.(schema);\r\n },\r\n [_schema]\r\n );\r\n\r\n const [_pageInfoData, _setPageInfoData] = useState<IPageParams>();\r\n\r\n useImperativeHandle(ref, () => ({\r\n // 加载渲染协议\r\n loadSchema(schema) {\r\n if (schema) {\r\n setUndoStack([schema.pointData]);\r\n setSchema(schema);\r\n }\r\n },\r\n\r\n // 导出渲染协议\r\n exportSchema() {\r\n return cloneDeep(_schema);\r\n },\r\n\r\n // 获取页面信息\r\n getPageInfoData() {\r\n return _pageInfoData;\r\n },\r\n\r\n // 设置页面信息\r\n initPageInfoData(pageData: IPageParams) {\r\n if (pageData) {\r\n _setPageInfoData(pageData);\r\n }\r\n }\r\n }));\r\n\r\n // 获取页面配置\r\n const getCurPageConf = useMemo(() => {\r\n if (!_schema) return;\r\n if (_schema.type === 'PC') {\r\n return _schema.pcPageConf;\r\n } else {\r\n return _schema.mobilePageConf;\r\n }\r\n }, [_schema]);\r\n\r\n return (\r\n <EditorContext.Provider\r\n value={{\r\n resolver,\r\n currentNode,\r\n schema: _schema,\r\n setCurrentNode,\r\n setSchema,\r\n saveDataSource,\r\n prePiontData,\r\n setPrePiontData,\r\n pageInfoData: _pageInfoData,\r\n setPageInfoData: (params: IPageParams) => _setPageInfoData({ ..._pageInfoData, ...params }),\r\n undoStack,\r\n redoStack,\r\n setRedoStack,\r\n setUndoStack,\r\n getCurPageConf,\r\n popup,\r\n setPopup\r\n }}\r\n >\r\n <DataSourceProvider isSsr={isSsr} enable={enableDataSource}>\r\n {children}\r\n </DataSourceProvider>\r\n </EditorContext.Provider>\r\n );\r\n }\r\n);\r\n\r\nexport { EditorCore };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 09:50:07\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\AppointForm\\settingRender.tsx\r\n *\r\n */\r\n\r\nexport default [\r\n {\r\n type: 'Text',\r\n label: '组件名称',\r\n name: 'name'\r\n },\r\n {\r\n title: '表单信息',\r\n child: [\r\n {\r\n type: 'Text',\r\n label: '标题',\r\n name: ['props', 'title']\r\n },\r\n {\r\n type: 'Group',\r\n label: '标题字体',\r\n child: [\r\n {\r\n type: 'Select',\r\n name: ['testStyle', 'fontFamily-cn'],\r\n bottomText: '中文字体'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['testStyle', 'fontFamily-en'],\r\n bottomText: '英文/其他字体'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['textStyle', 'color']\r\n },\r\n\r\n {\r\n type: 'Number',\r\n name: ['textStyle', 'fontSize'],\r\n addonAfter: 'px'\r\n }\r\n ]\r\n },\r\n {\r\n label: '标题样式',\r\n type: 'TextStyle',\r\n name: ['textStyle']\r\n },\r\n {\r\n label: '标题对齐',\r\n type: 'TextAlign',\r\n name: ['textStyle']\r\n },\r\n {\r\n label: '表单布局',\r\n type: 'Radius',\r\n options: [\r\n {\r\n label: '左右',\r\n value: 'horizontal'\r\n },\r\n {\r\n label: '上下',\r\n value: 'vertical'\r\n },\r\n {\r\n label: '提示',\r\n value: undefined\r\n }\r\n ],\r\n name: ['props', 'layoutType']\r\n },\r\n {\r\n label: '提交按钮文本',\r\n type: 'Text',\r\n name: ['props', 'submitText']\r\n },\r\n {\r\n type: 'Group',\r\n label: '提交按钮字体',\r\n child: [\r\n {\r\n type: 'Select',\r\n name: ['props', 'submitButtonStyle', 'fontFamily-cn'],\r\n bottomText: '中文字体'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['props', 'submitButtonStyle', 'fontFamily-en'],\r\n bottomText: '英文/其他字体'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'submitButtonStyle', 'color'],\r\n initialValue: '#fff'\r\n },\r\n\r\n {\r\n type: 'Number',\r\n name: ['props', 'submitButtonStyle', 'fontSize'],\r\n addonAfter: 'px',\r\n initialValue: 12\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextStyle',\r\n name: ['props', 'submitButtonStyle']\r\n },\r\n {\r\n type: 'TextAlign',\r\n name: ['props', 'submitButtonStyle']\r\n },\r\n {\r\n label: '提交按钮颜色',\r\n type: 'Color',\r\n name: ['props', 'submitBgColor']\r\n }\r\n // {\r\n // label: '接收内容接口地址',\r\n // type: 'TextArea',\r\n // name: ['props', 'submitApiUrl'],\r\n // labelCol: {\r\n // span: 24\r\n // }\r\n // },\r\n // {\r\n // label: '接收表单结果邮箱',\r\n // type: 'TextArea',\r\n // name: ['props', 'submitEmail'],\r\n // labelCol: {\r\n // span: 24\r\n // }\r\n // }\r\n ]\r\n },\r\n {\r\n title: '表单项',\r\n child: [\r\n {\r\n type: 'AddFormItems',\r\n name: ['props', 'columns']\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-12 10:59:06\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-20 13:39:07\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\hooks\\useEventReport.ts\r\n *\r\n */\r\nimport { useCallback } from 'react';\r\nimport { RecItemType } from '../components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from './useSxpDataSource';\r\nimport { DEFAULT_TAG } from '../context/SxpDataSourceProvider';\r\n\r\nexport function useEventReport() {\r\n const { bffEventReport, popupDetailData, waterFallData, isFromHashtag } = useSxpDataSource();\r\n\r\n const jumpToWeb = useCallback(\r\n (data?: RecItemType, product?: RecItemType['product'], cta?: RecItemType['cta'], position?: number) => {\r\n let fromKName = '';\r\n if (popupDetailData && (data?.video?.bindProducts?.length || data?.video?.bindProduct)) {\r\n fromKName = 'pdpPage';\r\n } else if (isFromHashtag) {\r\n fromKName = 'hashTagPage';\r\n } else if (data?.video?.url) {\r\n fromKName = 'videoPage';\r\n } else if (data?.video?.imgUrls && data?.video?.imgUrls?.length) {\r\n fromKName = 'imagePage';\r\n } else if (data?.product) {\r\n fromKName = 'productPage';\r\n }\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'jumpToWeb',\r\n eventDescription: 'User jumped to website',\r\n productId: product?.itemId ?? '',\r\n productName: product?.title ?? '',\r\n price: product?.price ? product?.price + '' : '0',\r\n productCollection: product?.collection ?? '',\r\n fromKName,\r\n fromKPage: location?.href,\r\n contentTags: product?.tags ? JSON.stringify(product?.tags) : '',\r\n position: position + '',\r\n contentId: data?.video?.itemId ?? '',\r\n ctatId: cta?.itemId ?? '',\r\n traceInfo: product?.traceInfo ?? ''\r\n }\r\n });\r\n },\r\n [bffEventReport, popupDetailData, isFromHashtag]\r\n );\r\n\r\n const productView = useCallback(\r\n (\r\n data?: RecItemType,\r\n product?: RecItemType['product'],\r\n cta?: RecItemType['cta'],\r\n viewTime?: any,\r\n position?: number\r\n ) => {\r\n let fromKName = '';\r\n if (popupDetailData && (data?.video?.bindProducts?.length || data?.video?.bindProduct)) {\r\n fromKName = 'pdpPage';\r\n } else if (data?.product) {\r\n fromKName = 'productPage';\r\n }\r\n bffEventReport?.({\r\n eventInfo: {\r\n productId: product?.itemId,\r\n productName: product?.title,\r\n price: product?.price ? product?.price + '' : '0',\r\n productCollection: product?.collection,\r\n fromKName,\r\n fromKPage: location?.href,\r\n contentTags: JSON.stringify(product?.tags),\r\n position: position + '',\r\n contentId: data?.video?.itemId,\r\n ctatId: cta?.itemId,\r\n traceInfo: product?.traceInfo,\r\n timeOnSite: Math.floor(((new Date() as any) - viewTime) / 1000) + '',\r\n eventSubject: 'productView',\r\n eventDescription: 'User browsed the product'\r\n }\r\n });\r\n },\r\n [bffEventReport, popupDetailData]\r\n );\r\n\r\n const backMainFeed = useCallback(\r\n (lastFeed: 'theme' | 'branch' | 'external', selectTag?: string, themeTag?: string, hashTag?: string) => {\r\n if (selectTag && selectTag === DEFAULT_TAG) {\r\n bffEventReport?.({\r\n eventInfo: {\r\n lastFeed,\r\n themeTags: themeTag ? `['${themeTag}']` : '',\r\n hashTags: hashTag ? `['${hashTag}']` : '',\r\n eventSubject: 'backMainFeed',\r\n eventDescription: 'back Main Feed'\r\n }\r\n });\r\n }\r\n },\r\n [bffEventReport]\r\n );\r\n\r\n return {\r\n jumpToWeb,\r\n productView,\r\n backMainFeed\r\n };\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-06-27 16:22:34\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 18:27:11\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\AppointForm\\Form.tsx\r\n *\r\n */\r\nimport { FC, memo, useCallback } from 'react';\r\nimport { IAppointFormProps } from '.';\r\nimport React from 'react';\r\n\r\ninterface IFormProps {\r\n columns?: {\r\n title?: string;\r\n dataIndex?: string;\r\n valueType?: string;\r\n key?: string;\r\n }[];\r\n layout?: IAppointFormProps['layoutType'];\r\n onChange?: (data: Record<string, any>) => void;\r\n}\r\n\r\nconst Form: FC<IFormProps> = ({ layout, columns, onChange }) => {\r\n return (\r\n <>\r\n {columns?.map((item, index) => (\r\n <div\r\n key={index}\r\n className='pb-appoint-form-container-item'\r\n style={{ flexDirection: layout === 'horizontal' ? 'row' : 'column' }}\r\n >\r\n {layout !== 'inline' && <label className='pb-appoint-form-container-label'>{item?.title}</label>}\r\n {item?.valueType === 'text' && (\r\n <input\r\n className='pb-appoint-form-container-input'\r\n type='text'\r\n placeholder={layout === 'inline' ? item?.title : '请输入'}\r\n name={item?.dataIndex}\r\n onChange={onChange}\r\n />\r\n )}\r\n </div>\r\n ))}\r\n </>\r\n );\r\n};\r\nexport default memo(Form);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 18:33:11\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\AppointForm\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { CSSProperties, FC, memo, useCallback, useMemo, useRef, useState } from 'react';\r\nimport { cloneDeep, debounce } from 'lodash';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport './index.less';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { setFontForText } from '@/core/utils/tool';\r\nimport Form from './Form';\r\n\r\nexport interface IAppointFormProps {\r\n columns?: any[];\r\n title: string;\r\n style?: Record<string, any>;\r\n textStyle?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n submitBgColor?: string;\r\n submitColor?: string;\r\n submitText?: string;\r\n submitApiUrl?: string;\r\n submitEmail?: string;\r\n layoutType?: 'horizontal' | 'vertical' | 'inline';\r\n isExternalLink?: boolean;\r\n isPopup?: boolean;\r\n submitButtonStyle?: CSSProperties;\r\n onClick?: () => void;\r\n onClose?: () => void;\r\n}\r\n\r\ntype DataItem = {\r\n name: string;\r\n state: string;\r\n};\r\n\r\nconst AppointForm: FC<IAppointFormProps> = ({\r\n columns,\r\n style,\r\n title,\r\n textStyle,\r\n submitBgColor,\r\n submitColor,\r\n submitText,\r\n layoutType = 'inline',\r\n isExternalLink,\r\n isPopup,\r\n onClick,\r\n onClose,\r\n submitButtonStyle,\r\n ...props\r\n}) => {\r\n const { submitForm, popupDetailData } = useSxpDataSource();\r\n const { jumpToWeb } = useEventReport();\r\n const [loading, setLoading] = useState(false);\r\n const defaultColumns = useMemo(\r\n () => [\r\n {\r\n title: '',\r\n dataIndex: 'field',\r\n valueType: 'text',\r\n key: '1'\r\n },\r\n {\r\n title: '',\r\n dataIndex: 'field',\r\n valueType: 'text',\r\n key: '2'\r\n },\r\n {\r\n title: '',\r\n dataIndex: 'field',\r\n valueType: 'text',\r\n key: '3'\r\n },\r\n {\r\n title: '',\r\n dataIndex: 'field',\r\n valueType: 'text',\r\n key: '4'\r\n }\r\n ],\r\n []\r\n );\r\n\r\n const [formData, setFormData] = useState<Record<string, any>>({});\r\n\r\n const columnsData = useMemo(() => {\r\n return cloneDeep(columns) || defaultColumns;\r\n }, [columns, defaultColumns]);\r\n\r\n const handleChange = useCallback(\r\n (e: any) => {\r\n const { name, value } = e.target;\r\n setFormData({\r\n ...formData,\r\n [name]: value\r\n });\r\n },\r\n [formData]\r\n );\r\n\r\n const handleSubmit = debounce(async () => {\r\n const vals = formData;\r\n if (!vals) return;\r\n const arr = Object.keys(vals)\r\n ?.map((key) => ({\r\n name: key,\r\n value: vals[key] ?? ''\r\n }))\r\n ?.filter((item: any) => item?.value);\r\n if (!arr || !arr?.length) return;\r\n setLoading(true);\r\n const res = (await submitForm?.({ attributes: arr })) as any;\r\n setLoading(false);\r\n if (res) {\r\n if (isExternalLink) {\r\n const data = popupDetailData as RecItemType;\r\n const product = data?.video?.bindProduct;\r\n const cta = data?.video?.bindProduct?.bindCta;\r\n const position = popupDetailData?.index as number;\r\n jumpToWeb(data, product, cta, position);\r\n }\r\n if (!isPopup) {\r\n onClose?.();\r\n }\r\n onClick?.();\r\n }\r\n }, 1000);\r\n\r\n return (\r\n <div className='pb-appoint-form'>\r\n <div\r\n className={`pb-appoint-form-title ${css({\r\n ...textStyle\r\n })}`}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(title, textStyle)\r\n }}\r\n ></div>\r\n <div className={css({ ...style })} {...props}>\r\n <div className='pb-appoint-form-container'>\r\n <Form columns={columnsData} layout={layoutType} onChange={handleChange}></Form>\r\n </div>\r\n </div>\r\n <div className='pb-appoint-form-btn-wrapper'>\r\n <button\r\n aria-label={submitText}\r\n onClick={handleSubmit}\r\n className='pb-appoint-form-btn'\r\n style={{\r\n color: submitColor,\r\n background: submitBgColor,\r\n ...submitButtonStyle\r\n }}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(loading ? 'loading...' : submitText, submitButtonStyle)\r\n }}\r\n ></button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(AppointForm);\r\n","import { DATA_TYPE } from './hooks';\r\nexport interface IMaterialOptions<T> {\r\n displayName: string; // 组件名\r\n icon: React.ReactNode; // 组件显示图标\r\n category: string; // 组件类别\r\n type: string; // 组件类型\r\n related?: {\r\n settingRender?: Record<string, any>; // 属性渲染协议\r\n bindableProps?: Array<{ label: string; value: keyof T; dataType: Array<DATA_TYPE> }>; // 可数据绑定的组件属性\r\n [key: string]: any;\r\n }; // 组件相关属性\r\n h?: number; // 组件高度\r\n w?: number; // 组件宽度\r\n disableDragging?: boolean; // 是否可以拖拽\r\n isFirstLayout?: boolean; // 是否为第一层级布局组件\r\n defaulSetting?: defaulSettingProps<T>; // 默认参数\r\n defaulMobileSetting?: defaulSettingProps<T>; // 手机端默认参数,没有则取defaulSetting\r\n mobileH?: number; // 组件手机端高度,没有则取h\r\n mobileW?: number; // 组件手机端宽度,没有则取w\r\n sort: number; // 排序编号,越小排越前\r\n}\r\n\r\ntype defaulSettingProps<T> = {\r\n style?: React.CSSProperties;\r\n props?: T;\r\n textStyle?: React.CSSProperties;\r\n name?: string;\r\n};\r\n\r\nexport type MaterialComponet<T = any> = React.ComponentType<T> & { extend?: IMaterialOptions<T> };\r\n\r\nexport function createMaterial<T>(component: MaterialComponet<T>, options: IMaterialOptions<T>) {\r\n component.extend = options;\r\n return component;\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-12 17:35:22\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\AppointForm\\material.tsx\r\n *\r\n */\r\nimport interactionRender from './interactionRender';\r\nimport settingRender from './settingRender';\r\nimport AppointFormComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst AppointForm = createMaterial(AppointFormComponent, {\r\n displayName: '预约表单',\r\n icon: '',\r\n category: 'popup',\r\n type: 'AppointForm',\r\n related: {\r\n settingRender,\r\n bindableProps: [],\r\n interactionRender\r\n },\r\n defaulSetting: {\r\n name: '表单',\r\n props: {\r\n title: 'Appointment Booking',\r\n submitColor: '#fff',\r\n submitBgColor: '#000',\r\n submitText: 'Submit',\r\n layoutType: undefined\r\n },\r\n style: {},\r\n textStyle: {\r\n fontSize: 14,\r\n color: '#000',\r\n textAlign: 'center'\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 2\r\n});\r\n\r\nexport { AppointForm };\r\n","export default [\r\n {\r\n title: '商品图片',\r\n child: [\r\n {\r\n type: 'Radius',\r\n label: '轮播指示器',\r\n options: [\r\n {\r\n label: '居左',\r\n value: 'left'\r\n },\r\n {\r\n label: '居中',\r\n value: 'center'\r\n }\r\n ],\r\n name: ['props', 'swiper', 'dotsAlign']\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'swiper', 'delay'],\r\n addonAfter: 's'\r\n },\r\n {\r\n type: 'Group',\r\n child: [\r\n {\r\n label: '居中垂直偏移',\r\n type: 'Number',\r\n name: ['props', 'swiper', 'translateY'],\r\n min: -1000,\r\n addonAfter: '%',\r\n initialValue: 0\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: '商品文本',\r\n child: [\r\n {\r\n name: ['props', 'commodityStyles'],\r\n type: 'SelectLinkage',\r\n child: [\r\n {\r\n label: '字段',\r\n type: 'Select',\r\n options: [\r\n {\r\n label: '商品名称',\r\n value: 'title'\r\n },\r\n {\r\n label: '系列名称',\r\n value: 'collection'\r\n },\r\n {\r\n label: '价格',\r\n value: 'price'\r\n },\r\n {\r\n label: '商品描述',\r\n value: 'info'\r\n }\r\n ],\r\n name: ['props', 'commodityStyles', 'field'],\r\n initialValue: 'title'\r\n },\r\n {\r\n type: 'Group',\r\n child: [\r\n {\r\n label: '上边距',\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['marginTop']\r\n },\r\n {\r\n label: '下边距',\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['marginBottom']\r\n }\r\n ]\r\n },\r\n\r\n {\r\n type: 'Group',\r\n label: '标题字体',\r\n child: [\r\n {\r\n type: 'Select',\r\n name: ['fontFamily-cn'],\r\n bottomText: '中文字体'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['fontFamily-en'],\r\n bottomText: '英文/其他字体'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['color']\r\n },\r\n {\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['fontSize']\r\n }\r\n ]\r\n },\r\n {\r\n label: '标题样式',\r\n type: 'TextStyle'\r\n },\r\n {\r\n label: '标题对齐',\r\n type: 'TextAlign'\r\n },\r\n {\r\n label: '默认行数',\r\n type: 'Number',\r\n name: ['lineClamp']\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: '购买按钮样式',\r\n child: [\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['props', 'buttonStyle', 'backgroundColor'],\r\n initialValue: '#000'\r\n },\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextMargin',\r\n name: ['props', 'buttonStyle']\r\n },\r\n {\r\n type: 'Group',\r\n label: '字体',\r\n child: [\r\n {\r\n type: 'Select',\r\n name: ['props', 'buttonStyle', 'fontFamily-cn'],\r\n bottomText: '中文字体'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['props', 'buttonStyle', 'fontFamily-en'],\r\n bottomText: '英文/其他字体'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'buttonStyle', 'color'],\r\n initialValue: '#fff'\r\n },\r\n\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'fontSize'],\r\n addonAfter: 'px'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextStyle',\r\n name: ['props', 'buttonStyle']\r\n },\r\n {\r\n type: 'TextAlign',\r\n name: ['props', 'buttonStyle']\r\n }\r\n ]\r\n }\r\n];\r\n","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;\n}\nfunction extend(target, src) {\n if (target === void 0) {\n target = {};\n }\n if (src === void 0) {\n src = {};\n }\n Object.keys(src).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\nconst ssrDocument = {\n body: {},\n addEventListener() {},\n removeEventListener() {},\n activeElement: {\n blur() {},\n nodeName: ''\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() {}\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() {},\n getElementsByTagName() {\n return [];\n }\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n }\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: ''\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: ''\n },\n history: {\n replaceState() {},\n pushState() {},\n go() {},\n back() {}\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() {},\n removeEventListener() {},\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n }\n };\n },\n Image() {},\n Date() {},\n screen: {},\n setTimeout() {},\n clearTimeout() {},\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n }\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { getWindow as a, getDocument as g };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\n\nfunction classesToTokens(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return classes.trim().split(' ').filter(c => !!c.trim());\n}\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend() {\n const to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < arguments.length; i += 1) {\n const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll(_ref) {\n let {\n swiper,\n targetPosition,\n side\n } = _ref;\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowRoot && slideEl.shadowRoot.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction elementChildren(element, selector) {\n if (selector === void 0) {\n selector = '';\n }\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction showWarning(text) {\n try {\n console.warn(text);\n return;\n } catch (err) {\n // err\n }\n}\nfunction createElement(tag, classes) {\n if (classes === void 0) {\n classes = [];\n }\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nfunction makeElementsArray(el) {\n return (Array.isArray(el) ? el : [el]).filter(e => !!e);\n}\n\nexport { elementParents as a, elementOffset as b, createElement as c, now as d, elementChildren as e, elementOuterSize as f, getSlideTransformEl as g, elementIndex as h, classesToTokens as i, getTranslate as j, elementTransitionEnd as k, isObject as l, makeElementsArray as m, nextTick as n, elementStyle as o, elementNextAll as p, elementPrevAll as q, animateCSSModeScroll as r, setCSSProperty as s, showWarning as t, extend as u, deleteProps as v };\n","import { a as getWindow } from '../shared/ssr-window.esm.mjs';\nimport { n as nextTick, d as now } from '../shared/utils.mjs';\n\n/* eslint-disable consistent-return */\nfunction Mousewheel(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n noMousewheelClass: 'swiper-no-mousewheel'\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n\n // Ignore event if the target or its parents have the swiper-no-mousewheel class\n if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n if (swiper.params.loop) {\n swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\n });\n }\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (params.releaseOnEdges && (position === swiper.minTranslate() || position === swiper.maxTranslate())) {\n return true;\n }\n }\n }\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n function events(method) {\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n targetEl[method]('mouseenter', handleMouseEnter);\n targetEl[method]('mouseleave', handleMouseLeave);\n targetEl[method]('wheel', handle);\n }\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('addEventListener');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('removeEventListener');\n swiper.mousewheel.enabled = false;\n return true;\n }\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n}\n\nexport { Mousewheel as default };\n","import { e as elementChildren, c as createElement } from './utils.mjs';\n\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n\nexport { createElementIfNotDefined as c };\n","function classesToSelector(classes) {\n if (classes === void 0) {\n classes = '';\n }\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n\nexport { classesToSelector as c };\n","import { c as classesToSelector } from '../shared/classes-to-selector.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { m as makeElementsArray, f as elementOuterSize, h as elementIndex, a as elementParents } from '../shared/utils.mjs';\n\nfunction Pagination(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n } else if (swiper.isElement) {\n bullet.setAttribute('part', 'bullet');\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (swiper.isElement) {\n bullets.forEach((bulletEl, bulletIndex) => {\n bulletEl.setAttribute('part', bulletIndex === current ? 'bullet-active' : 'bullet');\n });\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.grid && swiper.params.grid.rows > 1 ? swiper.slides.length / Math.ceil(swiper.params.grid.rows) : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n // prettier-ignore\n paginationHTML += `<${params.bulletElement} ${swiper.isElement ? 'part=\"bullet\"' : ''} class=\"${params.bulletClass}\"></${params.bulletElement}>`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(...(params.clickableClass || '').split(' '));\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.classList.remove(...(params.clickableClass || '').split(' '));\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const el = makeElementsArray(swiper.pagination.el);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}\n\nexport { Pagination as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\nimport { m as makeElementsArray, i as classesToTokens, c as createElement, n as nextTick, b as elementOffset } from '../shared/utils.mjs';\nimport { c as createElementIfNotDefined } from '../shared/create-element-if-not-defined.mjs';\nimport { c as classesToSelector } from '../shared/classes-to-selector.mjs';\n\nfunction Scrollbar(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null\n };\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n dragEl.style.width = `${newSize}px`;\n } else {\n dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n dragEl.style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n el.style.opacity = 1;\n timeout = setTimeout(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n dragEl.style.width = '';\n dragEl.style.height = '';\n trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n if (swiper.isHorizontal()) {\n dragEl.style.width = `${dragSize}px`;\n } else {\n dragEl.style.height = `${dragSize}px`;\n }\n if (divider >= 1) {\n el.style.display = 'none';\n } else {\n el.style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n el.style.opacity = 0;\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n }\n }\n function getPointerPosition(e) {\n return swiper.isHorizontal() ? e.clientX : e.clientY;\n }\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n wrapperEl.style.transitionDuration = '100ms';\n dragEl.style.transitionDuration = '100ms';\n setDragPosition(e);\n clearTimeout(dragTimeout);\n el.style.transitionDuration = '0ms';\n if (params.hide) {\n el.style.opacity = 1;\n }\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault && e.cancelable) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n wrapperEl.style.transitionDuration = '0ms';\n el.style.transitionDuration = '0ms';\n dragEl.style.transitionDuration = '0ms';\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = '';\n wrapperEl.style.transitionDuration = '';\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n function events(method) {\n const {\n scrollbar,\n params\n } = swiper;\n const el = scrollbar.el;\n if (!el) return;\n const target = el;\n const activeListener = params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n target[eventMethod]('pointerdown', onDragStart, activeListener);\n document[eventMethod]('pointermove', onDragMove, activeListener);\n document[eventMethod]('pointerup', onDragEnd, passiveListener);\n }\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n function init() {\n const {\n scrollbar,\n el: swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = document.querySelectorAll(params.el);\n if (!el.length) return;\n } else if (!el) {\n el = params.el;\n }\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\n el = swiperEl.querySelector(params.el);\n }\n if (el.length > 0) el = el[0];\n el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let dragEl;\n if (el) {\n dragEl = el.querySelector(classesToSelector(swiper.params.scrollbar.dragClass));\n if (!dragEl) {\n dragEl = createElement('div', swiper.params.scrollbar.dragClass);\n el.append(dragEl);\n }\n }\n Object.assign(scrollbar, {\n el,\n dragEl\n });\n if (params.draggable) {\n enableDraggable();\n }\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n }\n }\n function destroy() {\n const params = swiper.params.scrollbar;\n const el = swiper.scrollbar.el;\n if (el) {\n el.classList.remove(...classesToTokens(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass));\n }\n disableDraggable();\n }\n on('changeDirection', () => {\n if (!swiper.scrollbar || !swiper.scrollbar.el) return;\n const params = swiper.params.scrollbar;\n let {\n el\n } = swiper.scrollbar;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock changeDirection', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n el\n } = swiper.scrollbar;\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](...classesToTokens(swiper.params.scrollbar.lockClass));\n }\n });\n on('destroy', () => {\n destroy();\n });\n const enable = () => {\n swiper.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.remove(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n }\n init();\n updateSize();\n setTranslate();\n };\n const disable = () => {\n swiper.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.add(...classesToTokens(swiper.params.scrollbar.scrollbarDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}\n\nexport { Scrollbar as default };\n","import { g as getDocument } from '../shared/ssr-window.esm.mjs';\n\n/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nfunction Autoplay(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit,\n params\n } = _ref;\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: false,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime();\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let slideChanged;\n let pausedByInteraction;\n let pausedByPointerEnter;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n if (pausedByPointerEnter || e.detail && e.detail.bySwiperTouchMove) {\n return;\n }\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\n autoplayDelayTotal = swiper.params.autoplay.delay;\n autoplayDelayCurrent = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\n delay = currentSlideDelay;\n autoplayDelayTotal = currentSlideDelay;\n autoplayDelayCurrent = currentSlideDelay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n autoplayStartTime = new Date().getTime();\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n if (slideChanged) {\n autoplayTimeLeft = swiper.params.autoplay.delay;\n }\n slideChanged = false;\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n pausedByPointerEnter = true;\n if (swiper.animating || swiper.autoplay.paused) return;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByPointerEnter = false;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n }\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('_freeModeStaticRelease', () => {\n if (pausedByTouch || pausedByInteraction) {\n resume();\n }\n });\n on('_freeModeNoMomentumRelease', () => {\n if (!swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n slideChanged = true;\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}\n\nexport { Autoplay as default };\n","import { d as now, k as elementTransitionEnd } from '../shared/utils.mjs';\n\nfunction freeMode(_ref) {\n let {\n swiper,\n extendParams,\n emit,\n once\n } = _ref;\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n function onTouchStart() {\n if (swiper.params.cssMode) return;\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n function onTouchMove() {\n if (swiper.params.cssMode) return;\n const {\n touchEventsData: data,\n touches\n } = swiper;\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n function onTouchEnd(_ref2) {\n let {\n currentPos\n } = _ref2;\n if (swiper.params.cssMode) return;\n const {\n params,\n wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper;\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n emit('_freeModeStaticRelease');\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n}\n\nexport { freeMode as default };\n","import { a as getWindow, g as getDocument } from './ssr-window.esm.mjs';\nimport { a as elementParents, o as elementStyle, e as elementChildren, s as setCSSProperty, f as elementOuterSize, p as elementNextAll, q as elementPrevAll, j as getTranslate, r as animateCSSModeScroll, n as nextTick, t as showWarning, c as createElement, d as now, u as extend, h as elementIndex, v as deleteProps } from './utils.mjs';\n\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nlet deviceCached;\nfunction calcDevice(_temp) {\n let {\n userAgent\n } = _temp === void 0 ? {} : _temp;\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n const device = getDevice();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);\n const isSafariBrowser = isSafari();\n const need3dFix = isSafariBrowser || isWebView && device.ios;\n return {\n isSafari: needPerspectiveFix || isSafariBrowser,\n needPerspectiveFix,\n need3dFix,\n isWebView\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nfunction Resize(_ref) {\n let {\n swiper,\n on,\n emit\n } = _ref;\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(_ref2 => {\n let {\n contentBoxSize,\n contentRect,\n target\n } = _ref2;\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n\nfunction Observer(_ref) {\n let {\n swiper,\n extendParams,\n on,\n emit\n } = _ref;\n const observers = [];\n const window = getWindow();\n const attach = function (target, options) {\n if (options === void 0) {\n options = {};\n }\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.hostEl);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.hostEl, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}\n\n/* eslint-disable no-underscore-dangle */\n\nvar eventsEmitter = {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler() {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit() {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};\n\nfunction updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}\n\nfunction updateSlides() {\n const swiper = this;\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slides);\n } else if (swiper.grid) {\n swiper.grid.unsetSlides();\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slides);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[swiper.getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap <= 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const offsetSize = (params.slidesOffsetBefore || 0) + (params.slidesOffsetAfter || 0);\n if (allSlidesSize + offsetSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize - offsetSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n swiper.emit('slidesUpdated');\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}\n\nfunction updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}\n\nfunction updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}\n\nconst toggleSlideClasses$1 = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n }\n toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);\n toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}\n\nfunction updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}\n\nconst toggleSlideClasses = (slideEl, condition, className) => {\n if (condition && !slideEl.classList.contains(className)) {\n slideEl.classList.add(className);\n } else if (!condition && slideEl.classList.contains(className)) {\n slideEl.classList.remove(className);\n }\n};\nfunction updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n let activeSlide;\n let prevSlide;\n let nextSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n if (gridEnabled) {\n activeSlide = slides.filter(slideEl => slideEl.column === activeIndex)[0];\n nextSlide = slides.filter(slideEl => slideEl.column === activeIndex + 1)[0];\n prevSlide = slides.filter(slideEl => slideEl.column === activeIndex - 1)[0];\n } else {\n activeSlide = slides[activeIndex];\n }\n }\n if (activeSlide) {\n if (!gridEnabled) {\n // Next Slide\n nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n\n // Prev Slide\n prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n }\n }\n slides.forEach(slideEl => {\n toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);\n toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);\n toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);\n });\n swiper.emitSlidesClasses();\n}\n\nconst processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (!lazyEl && swiper.isElement) {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n } else {\n // init later\n requestAnimationFrame(() => {\n if (slideEl.shadowRoot) {\n lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n });\n }\n }\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nconst preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n if (swiper.params.grid && swiper.params.grid.rows > 1) {\n const activeColumn = activeIndex;\n const preloadColumns = [activeColumn - amount];\n preloadColumns.push(...Array.from({\n length: amount\n }).map((_, i) => {\n return activeColumn + slidesPerView + i;\n }));\n swiper.slides.forEach((slideEl, i) => {\n if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);\n });\n return;\n }\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind || swiper.params.loop) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {\n unlazy(swiper, i);\n }\n }\n }\n};\n\nfunction getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nfunction updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex && !swiper.params.loop) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n return;\n }\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (gridEnabled) {\n const firstSlideInColumn = swiper.slides.filter(slideEl => slideEl.column === activeIndex)[0];\n let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);\n if (Number.isNaN(activeSlideIndex)) {\n activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);\n }\n realIndex = Math.floor(activeSlideIndex / params.grid.rows);\n } else if (swiper.slides[activeIndex]) {\n const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');\n if (slideIndex) {\n realIndex = parseInt(slideIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n swiper.emit('slideChange');\n }\n}\n\nfunction updateClickedSlide(el, path) {\n const swiper = this;\n const params = swiper.params;\n let slide = el.closest(`.${params.slideClass}, swiper-slide`);\n if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {\n [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {\n if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {\n slide = pathEl;\n }\n });\n }\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}\n\nvar update = {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};\n\nfunction getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}\n\nfunction setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n\nfunction minTranslate() {\n return -this.snapGrid[0];\n}\n\nfunction maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n\nfunction translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n if (speed === void 0) {\n speed = this.params.speed;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n swiper.animating = false;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}\n\nvar translate = {\n getTranslate: getSwiperTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};\n\nfunction setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';\n }\n swiper.emit('setTransition', duration, byController);\n}\n\nfunction transitionEmit(_ref) {\n let {\n swiper,\n runCallbacks,\n direction,\n step\n } = _ref;\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n\nfunction transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}\n\nfunction transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}\n\nvar transition = {\n setTransition,\n transitionStart,\n transitionEnd\n};\n\nfunction slideTo(index, speed, runCallbacks, internal, initial) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}\n\nfunction slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n let targetSlideIndex;\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n targetSlideIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n targetSlideIndex = swiper.getSlideIndexByData(newIndex);\n }\n const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;\n const {\n centeredSlides\n } = swiper.params;\n let slidesPerView = swiper.params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n let needLoopFix = cols - targetSlideIndex < slidesPerView;\n if (centeredSlides) {\n needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);\n }\n if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {\n needLoopFix = false;\n }\n if (needLoopFix) {\n const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';\n swiper.loopFix({\n direction,\n slideTo: true,\n activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,\n slideRealIndex: direction === 'next' ? swiper.realIndex : undefined\n });\n }\n if (gridEnabled) {\n const slideIndex = newIndex * swiper.params.grid.rows;\n newIndex = swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex)[0].column;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n }\n requestAnimationFrame(() => {\n swiper.slideTo(newIndex, speed, runCallbacks, internal);\n });\n return swiper;\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideNext(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n });\n return true;\n }\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slidePrev(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled || swiper.destroyed) return swiper;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {\n requestAnimationFrame(() => {\n swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n });\n return true;\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideReset(speed, runCallbacks, internal) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n\n/* eslint no-unused-vars: \"off\" */\nfunction slideToClosest(speed, runCallbacks, internal, threshold) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n if (threshold === void 0) {\n threshold = 0.5;\n }\n const swiper = this;\n if (swiper.destroyed) return;\n if (typeof speed === 'undefined') {\n speed = swiper.params.speed;\n }\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n\nfunction slideToClickedSlide() {\n const swiper = this;\n if (swiper.destroyed) return;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n\nvar slide = {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};\n\nfunction loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const initSlides = () => {\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n };\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);\n const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;\n const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;\n const addBlankSlides = amountOfSlides => {\n for (let i = 0; i < amountOfSlides; i += 1) {\n const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);\n swiper.slidesEl.append(slideEl);\n }\n };\n if (shouldFillGroup) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else if (shouldFillGrid) {\n if (params.loopAddBlankSlides) {\n const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;\n addBlankSlides(slidesToAdd);\n swiper.recalcSlides();\n swiper.updateSlides();\n } else {\n showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');\n }\n initSlides();\n } else {\n initSlides();\n }\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}\n\nfunction loopFix(_temp) {\n let {\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n } = _temp === void 0 ? {} : _temp;\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n const {\n centeredSlides\n } = params;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n let slidesPerView = params.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = swiper.slidesPerViewDynamic();\n } else {\n slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));\n if (centeredSlides && slidesPerView % 2 === 0) {\n slidesPerView = slidesPerView + 1;\n }\n }\n const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;\n let loopedSlides = slidesPerGroup;\n if (loopedSlides % slidesPerGroup !== 0) {\n loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;\n }\n loopedSlides += params.loopAdditionalSlides;\n swiper.loopedSlides = loopedSlides;\n const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;\n if (slides.length < slidesPerView + loopedSlides) {\n showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled and not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');\n } else if (gridEnabled && params.grid.fill === 'row') {\n showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');\n }\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;\n const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;\n const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);\n // prepend last slides before start\n if (activeColIndexWithShift < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n const colIndexToPrepend = cols - index - 1;\n for (let i = slides.length - 1; i >= 0; i -= 1) {\n if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);\n }\n // slides.forEach((slide, slideIndex) => {\n // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);\n // });\n } else {\n prependSlidesIndexes.push(cols - index - 1);\n }\n }\n } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {\n slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / cols) * cols;\n if (gridEnabled) {\n slides.forEach((slide, slideIndex) => {\n if (slide.column === index) appendSlidesIndexes.push(slideIndex);\n });\n } else {\n appendSlidesIndexes.push(index);\n }\n }\n }\n swiper.__preventObserver__ = true;\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(slides[index]);\n slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {\n swiper.slides.forEach((slide, slideIndex) => {\n swiper.grid.updateSlide(slideIndex, slide, swiper.slides);\n });\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n if (setTranslate) {\n const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex + shift, 0, false, true);\n swiper.touchEventsData.currentTranslate = swiper.translate;\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;\n swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;\n }\n }\n } else {\n const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;\n swiper.slideTo(swiper.activeIndex - shift, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix({\n ...loopParams,\n slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix({\n ...loopParams,\n slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false\n });\n }\n }\n swiper.emit('loopFix');\n}\n\nfunction loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}\n\nvar loop = {\n loopCreate,\n loopFix,\n loopDestroy\n};\n\nfunction setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nfunction unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}\n\nvar grabCursor = {\n setGrabCursor,\n unsetGrabCursor\n};\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base) {\n if (base === void 0) {\n base = this;\n }\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nfunction preventEdgeSwipe(swiper, event, startX) {\n const window = getWindow();\n const {\n params\n } = swiper;\n const edgeSwipeDetection = params.edgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n return true;\n }\n return false;\n }\n return true;\n}\nfunction onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n const data = swiper.touchEventsData;\n if (e.type === 'pointerdown') {\n if (data.pointerId !== null && data.pointerId !== e.pointerId) {\n return;\n }\n data.pointerId = e.pointerId;\n } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {\n data.touchId = e.targetTouches[0].identifier;\n }\n if (e.type === 'touchstart') {\n // don't proceed touch event\n preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);\n return;\n }\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = e.composedPath ? e.composedPath() : e.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n if (!preventEdgeSwipe(swiper, e, startX)) {\n return;\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n\nfunction onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (e.type === 'pointermove') {\n if (data.touchId !== null) return; // return from pointer if we use touch\n const id = e.pointerId;\n if (id !== data.pointerId) return;\n }\n let targetTouch;\n if (e.type === 'touchmove') {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n } else {\n targetTouch = e;\n }\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n touches.previousX = touches.currentX;\n touches.previousY = touches.currentY;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;\n if (!data.isMoved) {\n if (isLoop && allowLoopFix) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true,\n detail: {\n bySwiperTouchMove: true\n }\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n new Date().getTime();\n if (data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n startTranslate: data.currentTranslate\n });\n data.loopSwapReset = true;\n data.startTranslate = data.currentTranslate;\n return;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n\nfunction onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetTouch;\n const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';\n if (!isTouchEvent) {\n if (data.touchId !== null) return; // return from pointer if we use touch\n if (e.pointerId !== data.pointerId) return;\n targetTouch = e;\n } else {\n targetTouch = [...e.changedTouches].filter(t => t.identifier === data.touchId)[0];\n if (!targetTouch || targetTouch.identifier !== data.touchId) return;\n }\n if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {\n const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n data.pointerId = null;\n data.touchId = null;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && e.pointerType === 'mouse') return;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (swipeToLast || currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n\nfunction onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n\nfunction onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n\nfunction onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}\n\nfunction onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}\n\nfunction onDocumentTouchStart() {\n const swiper = this;\n if (swiper.documentTouchHandlerProceeded) return;\n swiper.documentTouchHandlerProceeded = true;\n if (swiper.params.touchReleaseOnEdges) {\n swiper.el.style.touchAction = 'auto';\n }\n}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n if (!el || typeof el === 'string') return;\n\n // Touch Events\n document[domMethod]('touchstart', swiper.onDocumentTouchStart, {\n passive: false,\n capture\n });\n el[domMethod]('touchstart', swiper.onTouchStart, {\n passive: false\n });\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('touchmove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('touchend', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('touchcancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('contextmenu', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nvar events$1 = {\n attachEvents,\n detachEvents\n};\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nfunction setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasGrabCursor = swiper.params.grabCursor;\n const isGrabCursor = breakpointParams.grabCursor;\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n if (wasGrabCursor && !isGrabCursor) {\n swiper.unsetGrabCursor();\n } else if (!wasGrabCursor && isGrabCursor) {\n swiper.setGrabCursor();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n if (typeof breakpointParams[prop] === 'undefined') return;\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n const wasLoop = params.loop;\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n const hasLoop = swiper.params.loop;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (initialized) {\n if (needsReLoop) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (!wasLoop && hasLoop) {\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n } else if (wasLoop && !hasLoop) {\n swiper.loopDestroy();\n }\n }\n swiper.emit('breakpoint', breakpointParams);\n}\n\nfunction getBreakpoint(breakpoints, base, containerEl) {\n if (base === void 0) {\n base = 'window';\n }\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n\nvar breakpoints = {\n setBreakpoint,\n getBreakpoint\n};\n\nfunction prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nfunction addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}\n\nfunction removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n if (!el || typeof el === 'string') return;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}\n\nvar classes = {\n addClasses,\n removeClasses\n};\n\nfunction checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nvar checkOverflow$1 = {\n checkOverflow\n};\n\nvar defaults = {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n swiperElementNodeName: 'SWIPER-CONTAINER',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n eventsPrefix: 'swiper',\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopAddBlankSlides: true,\n loopAdditionalSlides: 0,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-blank',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideFullyVisibleClass: 'swiper-slide-fully-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};\n\nfunction moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj) {\n if (obj === void 0) {\n obj = {};\n }\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {\n params[moduleParamName].auto = true;\n }\n if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {\n params[moduleParamName].auto = true;\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}\n\n/* eslint no-param-reassign: \"off\" */\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events: events$1,\n breakpoints,\n checkOverflow: checkOverflow$1,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor() {\n let el;\n let params;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n pointerId: null,\n touchId: null\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getDirectionLabel(property) {\n if (this.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view, exact) {\n if (view === void 0) {\n view = 'current';\n }\n if (exact === void 0) {\n exact = false;\n }\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (typeof params.slidesPerView === 'number') return params.slidesPerView;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += Math.ceil(slides[i].swiperSlideSize);\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (params.freeMode && params.freeMode.enabled && !params.cssMode) {\n setTranslate();\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {\n const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,\n hostEl: swiper.isElement ? el.parentNode.host : el,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n const lazyElements = [...swiper.el.querySelectorAll('[loading=\"lazy\"]')];\n if (swiper.isElement) {\n lazyElements.push(...swiper.hostEl.querySelectorAll('[loading=\"lazy\"]'));\n }\n lazyElements.forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n if (el && typeof el !== 'string') {\n el.removeAttribute('style');\n }\n if (wrapperEl) {\n wrapperEl.removeAttribute('style');\n }\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n if (swiper.el && typeof swiper.el !== 'string') {\n swiper.el.swiper = null;\n }\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\n\nexport { Swiper as S, defaults as d };\n","/* underscore in name -> watch for changes */\nconst paramsList = ['eventsPrefix', 'injectStyles', 'injectStylesUrls', 'modules', 'init', '_direction', 'oneWayMovement', 'swiperElementNodeName', 'touchEventsTarget', 'initialSlide', '_speed', 'cssMode', 'updateOnWindowResize', 'resizeObserver', 'nested', 'focusableElements', '_enabled', '_width', '_height', 'preventInteractionOnTransition', 'userAgent', 'url', '_edgeSwipeDetection', '_edgeSwipeThreshold', '_freeMode', '_autoHeight', 'setWrapperSize', 'virtualTranslate', '_effect', 'breakpoints', 'breakpointsBase', '_spaceBetween', '_slidesPerView', 'maxBackfaceHiddenSlides', '_grid', '_slidesPerGroup', '_slidesPerGroupSkip', '_slidesPerGroupAuto', '_centeredSlides', '_centeredSlidesBounds', '_slidesOffsetBefore', '_slidesOffsetAfter', 'normalizeSlideIndex', '_centerInsufficientSlides', '_watchOverflow', 'roundLengths', 'touchRatio', 'touchAngle', 'simulateTouch', '_shortSwipes', '_longSwipes', 'longSwipesRatio', 'longSwipesMs', '_followFinger', 'allowTouchMove', '_threshold', 'touchMoveStopPropagation', 'touchStartPreventDefault', 'touchStartForcePreventDefault', 'touchReleaseOnEdges', 'uniqueNavElements', '_resistance', '_resistanceRatio', '_watchSlidesProgress', '_grabCursor', 'preventClicks', 'preventClicksPropagation', '_slideToClickedSlide', '_loop', 'loopAdditionalSlides', 'loopAddBlankSlides', 'loopPreventsSliding', '_rewind', '_allowSlidePrev', '_allowSlideNext', '_swipeHandler', '_noSwiping', 'noSwipingClass', 'noSwipingSelector', 'passiveListeners', 'containerModifierClass', 'slideClass', 'slideActiveClass', 'slideVisibleClass', 'slideFullyVisibleClass', 'slideNextClass', 'slidePrevClass', 'slideBlankClass', 'wrapperClass', 'lazyPreloaderClass', 'lazyPreloadPrevNext', 'runCallbacksOnInit', 'observer', 'observeParents', 'observeSlideChildren',\n// modules\n'a11y', '_autoplay', '_controller', 'coverflowEffect', 'cubeEffect', 'fadeEffect', 'flipEffect', 'creativeEffect', 'cardsEffect', 'hashNavigation', 'history', 'keyboard', 'mousewheel', '_navigation', '_pagination', 'parallax', '_scrollbar', '_thumbs', 'virtual', 'zoom', 'control'];\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object' && !o.__swiper__;\n}\nfunction extend(target, src) {\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {\n if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject(src[key]) && isObject(target[key]) && Object.keys(src[key]).length > 0) {\n if (src[key].__swiper__) target[key] = src[key];else extend(target[key], src[key]);\n } else {\n target[key] = src[key];\n }\n });\n}\nfunction needsNavigation(params) {\n if (params === void 0) {\n params = {};\n }\n return params.navigation && typeof params.navigation.nextEl === 'undefined' && typeof params.navigation.prevEl === 'undefined';\n}\nfunction needsPagination(params) {\n if (params === void 0) {\n params = {};\n }\n return params.pagination && typeof params.pagination.el === 'undefined';\n}\nfunction needsScrollbar(params) {\n if (params === void 0) {\n params = {};\n }\n return params.scrollbar && typeof params.scrollbar.el === 'undefined';\n}\nfunction uniqueClasses(classNames) {\n if (classNames === void 0) {\n classNames = '';\n }\n const classes = classNames.split(' ').map(c => c.trim()).filter(c => !!c);\n const unique = [];\n classes.forEach(c => {\n if (unique.indexOf(c) < 0) unique.push(c);\n });\n return unique.join(' ');\n}\nfunction attrToProp(attrName) {\n if (attrName === void 0) {\n attrName = '';\n }\n return attrName.replace(/-[a-z]/g, l => l.toUpperCase().replace('-', ''));\n}\nfunction wrapperClass(className) {\n if (className === void 0) {\n className = '';\n }\n if (!className) return 'swiper-wrapper';\n if (!className.includes('swiper-wrapper')) return `swiper-wrapper ${className}`;\n return className;\n}\n\nfunction updateSwiper(_ref) {\n let {\n swiper,\n slides,\n passedParams,\n changedParams,\n nextEl,\n prevEl,\n scrollbarEl,\n paginationEl\n } = _ref;\n const updateParams = changedParams.filter(key => key !== 'children' && key !== 'direction' && key !== 'wrapperClass');\n const {\n params: currentParams,\n pagination,\n navigation,\n scrollbar,\n virtual,\n thumbs\n } = swiper;\n let needThumbsInit;\n let needControllerInit;\n let needPaginationInit;\n let needScrollbarInit;\n let needNavigationInit;\n let loopNeedDestroy;\n let loopNeedEnable;\n let loopNeedReloop;\n if (changedParams.includes('thumbs') && passedParams.thumbs && passedParams.thumbs.swiper && currentParams.thumbs && !currentParams.thumbs.swiper) {\n needThumbsInit = true;\n }\n if (changedParams.includes('controller') && passedParams.controller && passedParams.controller.control && currentParams.controller && !currentParams.controller.control) {\n needControllerInit = true;\n }\n if (changedParams.includes('pagination') && passedParams.pagination && (passedParams.pagination.el || paginationEl) && (currentParams.pagination || currentParams.pagination === false) && pagination && !pagination.el) {\n needPaginationInit = true;\n }\n if (changedParams.includes('scrollbar') && passedParams.scrollbar && (passedParams.scrollbar.el || scrollbarEl) && (currentParams.scrollbar || currentParams.scrollbar === false) && scrollbar && !scrollbar.el) {\n needScrollbarInit = true;\n }\n if (changedParams.includes('navigation') && passedParams.navigation && (passedParams.navigation.prevEl || prevEl) && (passedParams.navigation.nextEl || nextEl) && (currentParams.navigation || currentParams.navigation === false) && navigation && !navigation.prevEl && !navigation.nextEl) {\n needNavigationInit = true;\n }\n const destroyModule = mod => {\n if (!swiper[mod]) return;\n swiper[mod].destroy();\n if (mod === 'navigation') {\n if (swiper.isElement) {\n swiper[mod].prevEl.remove();\n swiper[mod].nextEl.remove();\n }\n currentParams[mod].prevEl = undefined;\n currentParams[mod].nextEl = undefined;\n swiper[mod].prevEl = undefined;\n swiper[mod].nextEl = undefined;\n } else {\n if (swiper.isElement) {\n swiper[mod].el.remove();\n }\n currentParams[mod].el = undefined;\n swiper[mod].el = undefined;\n }\n };\n if (changedParams.includes('loop') && swiper.isElement) {\n if (currentParams.loop && !passedParams.loop) {\n loopNeedDestroy = true;\n } else if (!currentParams.loop && passedParams.loop) {\n loopNeedEnable = true;\n } else {\n loopNeedReloop = true;\n }\n }\n updateParams.forEach(key => {\n if (isObject(currentParams[key]) && isObject(passedParams[key])) {\n Object.assign(currentParams[key], passedParams[key]);\n if ((key === 'navigation' || key === 'pagination' || key === 'scrollbar') && 'enabled' in passedParams[key] && !passedParams[key].enabled) {\n destroyModule(key);\n }\n } else {\n const newValue = passedParams[key];\n if ((newValue === true || newValue === false) && (key === 'navigation' || key === 'pagination' || key === 'scrollbar')) {\n if (newValue === false) {\n destroyModule(key);\n }\n } else {\n currentParams[key] = passedParams[key];\n }\n }\n });\n if (updateParams.includes('controller') && !needControllerInit && swiper.controller && swiper.controller.control && currentParams.controller && currentParams.controller.control) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (changedParams.includes('children') && slides && virtual && currentParams.virtual.enabled) {\n virtual.slides = slides;\n virtual.update(true);\n } else if (changedParams.includes('virtual') && virtual && currentParams.virtual.enabled) {\n if (slides) virtual.slides = slides;\n virtual.update(true);\n }\n if (changedParams.includes('children') && slides && currentParams.loop) {\n loopNeedReloop = true;\n }\n if (needThumbsInit) {\n const initialized = thumbs.init();\n if (initialized) thumbs.update(true);\n }\n if (needControllerInit) {\n swiper.controller.control = currentParams.controller.control;\n }\n if (needPaginationInit) {\n if (swiper.isElement && (!paginationEl || typeof paginationEl === 'string')) {\n paginationEl = document.createElement('div');\n paginationEl.classList.add('swiper-pagination');\n paginationEl.part.add('pagination');\n swiper.el.appendChild(paginationEl);\n }\n if (paginationEl) currentParams.pagination.el = paginationEl;\n pagination.init();\n pagination.render();\n pagination.update();\n }\n if (needScrollbarInit) {\n if (swiper.isElement && (!scrollbarEl || typeof scrollbarEl === 'string')) {\n scrollbarEl = document.createElement('div');\n scrollbarEl.classList.add('swiper-scrollbar');\n scrollbarEl.part.add('scrollbar');\n swiper.el.appendChild(scrollbarEl);\n }\n if (scrollbarEl) currentParams.scrollbar.el = scrollbarEl;\n scrollbar.init();\n scrollbar.updateSize();\n scrollbar.setTranslate();\n }\n if (needNavigationInit) {\n if (swiper.isElement) {\n if (!nextEl || typeof nextEl === 'string') {\n nextEl = document.createElement('div');\n nextEl.classList.add('swiper-button-next');\n nextEl.innerHTML = swiper.hostEl.constructor.nextButtonSvg;\n nextEl.part.add('button-next');\n swiper.el.appendChild(nextEl);\n }\n if (!prevEl || typeof prevEl === 'string') {\n prevEl = document.createElement('div');\n prevEl.classList.add('swiper-button-prev');\n prevEl.innerHTML = swiper.hostEl.constructor.prevButtonSvg;\n prevEl.part.add('button-prev');\n swiper.el.appendChild(prevEl);\n }\n }\n if (nextEl) currentParams.navigation.nextEl = nextEl;\n if (prevEl) currentParams.navigation.prevEl = prevEl;\n navigation.init();\n navigation.update();\n }\n if (changedParams.includes('allowSlideNext')) {\n swiper.allowSlideNext = passedParams.allowSlideNext;\n }\n if (changedParams.includes('allowSlidePrev')) {\n swiper.allowSlidePrev = passedParams.allowSlidePrev;\n }\n if (changedParams.includes('direction')) {\n swiper.changeDirection(passedParams.direction, false);\n }\n if (loopNeedDestroy || loopNeedReloop) {\n swiper.loopDestroy();\n }\n if (loopNeedEnable || loopNeedReloop) {\n swiper.loopCreate();\n }\n swiper.update();\n}\n\nexport { needsPagination as a, needsScrollbar as b, attrToProp as c, uniqueClasses as d, extend as e, isObject as i, needsNavigation as n, paramsList as p, updateSwiper as u, wrapperClass as w };\n","import { e as extend, p as paramsList, i as isObject, n as needsNavigation, a as needsPagination, b as needsScrollbar } from './update-swiper.mjs';\nimport { d as defaults } from './swiper-core.mjs';\n\nfunction getParams(obj, splitEvents) {\n if (obj === void 0) {\n obj = {};\n }\n if (splitEvents === void 0) {\n splitEvents = true;\n }\n const params = {\n on: {}\n };\n const events = {};\n const passedParams = {};\n extend(params, defaults);\n params._emitClasses = true;\n params.init = false;\n const rest = {};\n const allowedParams = paramsList.map(key => key.replace(/_/, ''));\n const plainObj = Object.assign({}, obj);\n Object.keys(plainObj).forEach(key => {\n if (typeof obj[key] === 'undefined') return;\n if (allowedParams.indexOf(key) >= 0) {\n if (isObject(obj[key])) {\n params[key] = {};\n passedParams[key] = {};\n extend(params[key], obj[key]);\n extend(passedParams[key], obj[key]);\n } else {\n params[key] = obj[key];\n passedParams[key] = obj[key];\n }\n } else if (key.search(/on[A-Z]/) === 0 && typeof obj[key] === 'function') {\n if (splitEvents) {\n events[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n } else {\n params.on[`${key[2].toLowerCase()}${key.substr(3)}`] = obj[key];\n }\n } else {\n rest[key] = obj[key];\n }\n });\n ['navigation', 'pagination', 'scrollbar'].forEach(key => {\n if (params[key] === true) params[key] = {};\n if (params[key] === false) delete params[key];\n });\n return {\n params,\n passedParams,\n rest,\n events\n };\n}\n\nfunction mountSwiper(_ref, swiperParams) {\n let {\n el,\n nextEl,\n prevEl,\n paginationEl,\n scrollbarEl,\n swiper\n } = _ref;\n if (needsNavigation(swiperParams) && nextEl && prevEl) {\n swiper.params.navigation.nextEl = nextEl;\n swiper.originalParams.navigation.nextEl = nextEl;\n swiper.params.navigation.prevEl = prevEl;\n swiper.originalParams.navigation.prevEl = prevEl;\n }\n if (needsPagination(swiperParams) && paginationEl) {\n swiper.params.pagination.el = paginationEl;\n swiper.originalParams.pagination.el = paginationEl;\n }\n if (needsScrollbar(swiperParams) && scrollbarEl) {\n swiper.params.scrollbar.el = scrollbarEl;\n swiper.originalParams.scrollbar.el = scrollbarEl;\n }\n swiper.init(el);\n}\n\nfunction getChangedParams(swiperParams, oldParams, children, oldChildren, getKey) {\n const keys = [];\n if (!oldParams) return keys;\n const addKey = key => {\n if (keys.indexOf(key) < 0) keys.push(key);\n };\n if (children && oldChildren) {\n const oldChildrenKeys = oldChildren.map(getKey);\n const childrenKeys = children.map(getKey);\n if (oldChildrenKeys.join('') !== childrenKeys.join('')) addKey('children');\n if (oldChildren.length !== children.length) addKey('children');\n }\n const watchParams = paramsList.filter(key => key[0] === '_').map(key => key.replace(/_/, ''));\n watchParams.forEach(key => {\n if (key in swiperParams && key in oldParams) {\n if (isObject(swiperParams[key]) && isObject(oldParams[key])) {\n const newKeys = Object.keys(swiperParams[key]);\n const oldKeys = Object.keys(oldParams[key]);\n if (newKeys.length !== oldKeys.length) {\n addKey(key);\n } else {\n newKeys.forEach(newKey => {\n if (swiperParams[key][newKey] !== oldParams[key][newKey]) {\n addKey(key);\n }\n });\n oldKeys.forEach(oldKey => {\n if (swiperParams[key][oldKey] !== oldParams[key][oldKey]) addKey(key);\n });\n }\n } else if (swiperParams[key] !== oldParams[key]) {\n addKey(key);\n }\n }\n });\n return keys;\n}\n\nconst updateOnVirtualData = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params.virtual || swiper.params.virtual && !swiper.params.virtual.enabled) return;\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n if (swiper.parallax && swiper.params.parallax && swiper.params.parallax.enabled) {\n swiper.parallax.setTranslate();\n }\n};\n\nexport { getChangedParams as a, getParams as g, mountSwiper as m, updateOnVirtualData as u };\n","/**\n * Swiper React 11.1.4\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2024 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: May 30, 2024\n */\n\nimport React, { useEffect, useLayoutEffect, useContext, createContext, forwardRef, useState, useRef } from 'react';\nimport { S as Swiper$1 } from './shared/swiper-core.mjs';\nimport { g as getParams, m as mountSwiper, a as getChangedParams, u as updateOnVirtualData } from './shared/update-on-virtual-data.mjs';\nimport { d as uniqueClasses, w as wrapperClass, n as needsNavigation, b as needsScrollbar, a as needsPagination, e as extend, u as updateSwiper } from './shared/update-swiper.mjs';\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nfunction isChildSwiperSlide(child) {\n return child.type && child.type.displayName && child.type.displayName.includes('SwiperSlide');\n}\nfunction processChildren(c) {\n const slides = [];\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.children) {\n processChildren(child.props.children).forEach(slide => slides.push(slide));\n }\n });\n return slides;\n}\nfunction getChildren(c) {\n const slides = [];\n const slots = {\n 'container-start': [],\n 'container-end': [],\n 'wrapper-start': [],\n 'wrapper-end': []\n };\n React.Children.toArray(c).forEach(child => {\n if (isChildSwiperSlide(child)) {\n slides.push(child);\n } else if (child.props && child.props.slot && slots[child.props.slot]) {\n slots[child.props.slot].push(child);\n } else if (child.props && child.props.children) {\n const foundSlides = processChildren(child.props.children);\n if (foundSlides.length > 0) {\n foundSlides.forEach(slide => slides.push(slide));\n } else {\n slots['container-end'].push(child);\n }\n } else {\n slots['container-end'].push(child);\n }\n });\n return {\n slides,\n slots\n };\n}\n\nfunction renderVirtual(swiper, slides, virtualData) {\n if (!virtualData) return null;\n const getSlideIndex = index => {\n let slideIndex = index;\n if (index < 0) {\n slideIndex = slides.length + index;\n } else if (slideIndex >= slides.length) {\n // eslint-disable-next-line\n slideIndex = slideIndex - slides.length;\n }\n return slideIndex;\n };\n const style = swiper.isHorizontal() ? {\n [swiper.rtlTranslate ? 'right' : 'left']: `${virtualData.offset}px`\n } : {\n top: `${virtualData.offset}px`\n };\n const {\n from,\n to\n } = virtualData;\n const loopFrom = swiper.params.loop ? -slides.length : 0;\n const loopTo = swiper.params.loop ? slides.length * 2 : slides.length;\n const slidesToRender = [];\n for (let i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n slidesToRender.push(slides[getSlideIndex(i)]);\n }\n }\n return slidesToRender.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper,\n style,\n key: child.props.virtualIndex || child.key || `slide-${index}`\n });\n });\n}\n\nfunction useIsomorphicLayoutEffect(callback, deps) {\n // eslint-disable-next-line\n if (typeof window === 'undefined') return useEffect(callback, deps);\n return useLayoutEffect(callback, deps);\n}\n\nconst SwiperSlideContext = /*#__PURE__*/createContext(null);\nconst useSwiperSlide = () => {\n return useContext(SwiperSlideContext);\n};\nconst SwiperContext = /*#__PURE__*/createContext(null);\nconst useSwiper = () => {\n return useContext(SwiperContext);\n};\n\nconst Swiper = /*#__PURE__*/forwardRef(function (_temp, externalElRef) {\n let {\n className,\n tag: Tag = 'div',\n wrapperTag: WrapperTag = 'div',\n children,\n onSwiper,\n ...rest\n } = _temp === void 0 ? {} : _temp;\n let eventsAssigned = false;\n const [containerClasses, setContainerClasses] = useState('swiper');\n const [virtualData, setVirtualData] = useState(null);\n const [breakpointChanged, setBreakpointChanged] = useState(false);\n const initializedRef = useRef(false);\n const swiperElRef = useRef(null);\n const swiperRef = useRef(null);\n const oldPassedParamsRef = useRef(null);\n const oldSlides = useRef(null);\n const nextElRef = useRef(null);\n const prevElRef = useRef(null);\n const paginationElRef = useRef(null);\n const scrollbarElRef = useRef(null);\n const {\n params: swiperParams,\n passedParams,\n rest: restProps,\n events\n } = getParams(rest);\n const {\n slides,\n slots\n } = getChildren(children);\n const onBeforeBreakpoint = () => {\n setBreakpointChanged(!breakpointChanged);\n };\n Object.assign(swiperParams.on, {\n _containerClasses(swiper, classes) {\n setContainerClasses(classes);\n }\n });\n const initSwiper = () => {\n // init swiper\n Object.assign(swiperParams.on, events);\n eventsAssigned = true;\n const passParams = {\n ...swiperParams\n };\n delete passParams.wrapperClass;\n swiperRef.current = new Swiper$1(passParams);\n if (swiperRef.current.virtual && swiperRef.current.params.virtual.enabled) {\n swiperRef.current.virtual.slides = slides;\n const extendWith = {\n cache: false,\n slides,\n renderExternal: setVirtualData,\n renderExternalUpdate: false\n };\n extend(swiperRef.current.params.virtual, extendWith);\n extend(swiperRef.current.originalParams.virtual, extendWith);\n }\n };\n if (!swiperElRef.current) {\n initSwiper();\n }\n\n // Listen for breakpoints change\n if (swiperRef.current) {\n swiperRef.current.on('_beforeBreakpoint', onBeforeBreakpoint);\n }\n const attachEvents = () => {\n if (eventsAssigned || !events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.on(eventName, events[eventName]);\n });\n };\n const detachEvents = () => {\n if (!events || !swiperRef.current) return;\n Object.keys(events).forEach(eventName => {\n swiperRef.current.off(eventName, events[eventName]);\n });\n };\n useEffect(() => {\n return () => {\n if (swiperRef.current) swiperRef.current.off('_beforeBreakpoint', onBeforeBreakpoint);\n };\n });\n\n // set initialized flag\n useEffect(() => {\n if (!initializedRef.current && swiperRef.current) {\n swiperRef.current.emitSlidesClasses();\n initializedRef.current = true;\n }\n });\n\n // mount swiper\n useIsomorphicLayoutEffect(() => {\n if (externalElRef) {\n externalElRef.current = swiperElRef.current;\n }\n if (!swiperElRef.current) return;\n if (swiperRef.current.destroyed) {\n initSwiper();\n }\n mountSwiper({\n el: swiperElRef.current,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n paginationEl: paginationElRef.current,\n scrollbarEl: scrollbarElRef.current,\n swiper: swiperRef.current\n }, swiperParams);\n if (onSwiper && !swiperRef.current.destroyed) onSwiper(swiperRef.current);\n // eslint-disable-next-line\n return () => {\n if (swiperRef.current && !swiperRef.current.destroyed) {\n swiperRef.current.destroy(true, false);\n }\n };\n }, []);\n\n // watch for params change\n useIsomorphicLayoutEffect(() => {\n attachEvents();\n const changedParams = getChangedParams(passedParams, oldPassedParamsRef.current, slides, oldSlides.current, c => c.key);\n oldPassedParamsRef.current = passedParams;\n oldSlides.current = slides;\n if (changedParams.length && swiperRef.current && !swiperRef.current.destroyed) {\n updateSwiper({\n swiper: swiperRef.current,\n slides,\n passedParams,\n changedParams,\n nextEl: nextElRef.current,\n prevEl: prevElRef.current,\n scrollbarEl: scrollbarElRef.current,\n paginationEl: paginationElRef.current\n });\n }\n return () => {\n detachEvents();\n };\n });\n\n // update on virtual update\n useIsomorphicLayoutEffect(() => {\n updateOnVirtualData(swiperRef.current);\n }, [virtualData]);\n\n // bypass swiper instance to slides\n function renderSlides() {\n if (swiperParams.virtual) {\n return renderVirtual(swiperRef.current, slides, virtualData);\n }\n return slides.map((child, index) => {\n return /*#__PURE__*/React.cloneElement(child, {\n swiper: swiperRef.current,\n swiperSlideIndex: index\n });\n });\n }\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: swiperElRef,\n className: uniqueClasses(`${containerClasses}${className ? ` ${className}` : ''}`)\n }, restProps), /*#__PURE__*/React.createElement(SwiperContext.Provider, {\n value: swiperRef.current\n }, slots['container-start'], /*#__PURE__*/React.createElement(WrapperTag, {\n className: wrapperClass(swiperParams.wrapperClass)\n }, slots['wrapper-start'], renderSlides(), slots['wrapper-end']), needsNavigation(swiperParams) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", {\n ref: prevElRef,\n className: \"swiper-button-prev\"\n }), /*#__PURE__*/React.createElement(\"div\", {\n ref: nextElRef,\n className: \"swiper-button-next\"\n })), needsScrollbar(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: scrollbarElRef,\n className: \"swiper-scrollbar\"\n }), needsPagination(swiperParams) && /*#__PURE__*/React.createElement(\"div\", {\n ref: paginationElRef,\n className: \"swiper-pagination\"\n }), slots['container-end']));\n});\nSwiper.displayName = 'Swiper';\n\nconst SwiperSlide = /*#__PURE__*/forwardRef(function (_temp, externalRef) {\n let {\n tag: Tag = 'div',\n children,\n className = '',\n swiper,\n zoom,\n lazy,\n virtualIndex,\n swiperSlideIndex,\n ...rest\n } = _temp === void 0 ? {} : _temp;\n const slideElRef = useRef(null);\n const [slideClasses, setSlideClasses] = useState('swiper-slide');\n const [lazyLoaded, setLazyLoaded] = useState(false);\n function updateClasses(_s, el, classNames) {\n if (el === slideElRef.current) {\n setSlideClasses(classNames);\n }\n }\n useIsomorphicLayoutEffect(() => {\n if (typeof swiperSlideIndex !== 'undefined') {\n slideElRef.current.swiperSlideIndex = swiperSlideIndex;\n }\n if (externalRef) {\n externalRef.current = slideElRef.current;\n }\n if (!slideElRef.current || !swiper) {\n return;\n }\n if (swiper.destroyed) {\n if (slideClasses !== 'swiper-slide') {\n setSlideClasses('swiper-slide');\n }\n return;\n }\n swiper.on('_slideClass', updateClasses);\n // eslint-disable-next-line\n return () => {\n if (!swiper) return;\n swiper.off('_slideClass', updateClasses);\n };\n });\n useIsomorphicLayoutEffect(() => {\n if (swiper && slideElRef.current && !swiper.destroyed) {\n setSlideClasses(swiper.getSlideClasses(slideElRef.current));\n }\n }, [swiper]);\n const slideData = {\n isActive: slideClasses.indexOf('swiper-slide-active') >= 0,\n isVisible: slideClasses.indexOf('swiper-slide-visible') >= 0,\n isPrev: slideClasses.indexOf('swiper-slide-prev') >= 0,\n isNext: slideClasses.indexOf('swiper-slide-next') >= 0\n };\n const renderChildren = () => {\n return typeof children === 'function' ? children(slideData) : children;\n };\n const onLoad = () => {\n setLazyLoaded(true);\n };\n return /*#__PURE__*/React.createElement(Tag, _extends({\n ref: slideElRef,\n className: uniqueClasses(`${slideClasses}${className ? ` ${className}` : ''}`),\n \"data-swiper-slide-index\": virtualIndex,\n onLoad: onLoad\n }, rest), zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-zoom-container\",\n \"data-swiper-zoom\": typeof zoom === 'number' ? zoom : undefined\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\"\n }))), !zoom && /*#__PURE__*/React.createElement(SwiperSlideContext.Provider, {\n value: slideData\n }, renderChildren(), lazy && !lazyLoaded && /*#__PURE__*/React.createElement(\"div\", {\n className: \"swiper-lazy-preloader\"\n })));\n});\nSwiperSlide.displayName = 'SwiperSlide';\n\nexport { Swiper, SwiperSlide, useSwiper, useSwiperSlide };\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-11-02 18:34:34\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-12 11:23:00\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Modal\\index.tsx\r\n *\r\n */\r\nimport { debounce } from 'lodash';\r\nimport React, { CSSProperties, FC, PropsWithChildren, memo, useEffect, useMemo, useRef, useState } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport { IPopupType } from '@/core/context/EditorContext';\r\n\r\nconst closeIcon =\r\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAjhJREFUWEfFlztOw0AQhmeWiJ4CCmpQ5DiRQsIJyAWg5A0lR0AIChDiCJS8ER0cADgBeRSxt4CCDgkaKiq8i+zYeWx2413HEWmiJJv9v535Z2aN8M8vFPT9z3zETD0aAUChUJjwvPFHAJhBhB3Hqd6OAsK2yyucwykAvP38eJX398Z3AJDLlVYR8ToU9Rhj25TWr9KEsKy5dULIGQCMtfZly45TvwsAstm56UwG6wA4FUFwzrdctxZBDcWSy5XWEPG8I84/GcMipdWPtgcsaz5PCHtKG0IuTiqUvjT9U/WYMG2IOPE+AP+LtCB0xKUAAyA2Xbd2o2OG0NQXvTnvhL17D7EPtH9TRCIWwkRcGYGIQgYBABuqPuHXOQBc6pw80lBGwBQiiXhsBHQhkoprA6iM6acjhDQKu5YJZW6XeOI3XJdpvfsdTu52VfXEekD8owQiXGIubpSCbhDbLu8DwKEAd+A41SOdPpE4BS0viFOtvV2iKWqUgn5x/tmS70xR01GuDSCKc86/OCcLgTyyZ0ScDGNhFAktAJV4NFJ9YyaFiAWIE+9uVkkgBgLoig8DMWAa9ro9ynkUdlW5maZDCmB6clmz0k1HH4Cs1Ezbq2p2yEpUuBOKTSZZex00RUWIrltxuuK6EOGDSbGIOPZicpMx6fny650377qNRgBgWeVFQuA+6UjVgREhGIMlSqsPUQqIbZdOOIdZQmCv2axRnU1N1+TzJYsxOEaEV8ep7frPZ7Gd0FTEdP0ft0/kMNdg0eoAAAAASUVORK5CYII=';\r\n\r\ninterface IModalProps {\r\n visible?: boolean;\r\n popup?: IPopupType;\r\n padding?: number | string;\r\n modalStyle?: CSSProperties;\r\n onClose?: () => void;\r\n}\r\n\r\nconst Modal: FC<PropsWithChildren<IModalProps>> = ({ visible, onClose, children, modalStyle, padding, popup }) => {\r\n const [isShow, setIsShow] = useState(false);\r\n const modalEleRef = useRef<HTMLElement | null>(null);\r\n\r\n useEffect(() => {\r\n const parentNode = document.getElementById('sxp-render');\r\n const node = document.getElementById('pb-modal');\r\n if (node) {\r\n modalEleRef.current = node;\r\n } else {\r\n modalEleRef.current = document.createElement('div');\r\n modalEleRef.current.setAttribute('id', 'pb-modal');\r\n parentNode?.appendChild(modalEleRef.current);\r\n }\r\n }, []);\r\n\r\n const isOpen = useMemo(() => {\r\n return (popup?.id && popup?.id !== '') || visible;\r\n }, [visible, popup]);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setIsShow(true);\r\n } else {\r\n setTimeout(() => {\r\n setIsShow(false);\r\n }, popup?.duration);\r\n }\r\n }, [isOpen, popup]);\r\n\r\n if (!modalEleRef.current) return null;\r\n\r\n const handleClose = debounce(() => {\r\n onClose?.();\r\n }, 300);\r\n\r\n return ReactDOM.createPortal(\r\n <>\r\n {isShow && (\r\n <div\r\n className='modal-bg'\r\n style={{\r\n display: 'flex',\r\n backgroundColor: isOpen ? 'rgba(0, 0, 0, 0.7)' : 'rgba(0, 0, 0, 0)',\r\n ...modalStyle\r\n }}\r\n onClick={handleClose}\r\n >\r\n <div\r\n className={`modal-container ${isOpen ? 'modal-popIn' : 'modal-popOut'}`}\r\n style={{ padding, animationDuration: (popup?.duration ?? 0) / 1000 + 's' }}\r\n onClick={(e: any) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }}\r\n >\r\n <div onClick={onClose} className='modal-icon-wrapper'>\r\n <img src={closeIcon} alt='close' className='modal-icon' />\r\n </div>\r\n {children}\r\n </div>\r\n </div>\r\n )}\r\n </>,\r\n modalEleRef.current\r\n );\r\n};\r\n\r\nexport default memo(Modal);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-26 16:11:34\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-26 18:22:30\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\ExpandableText.tsx\r\n *\r\n */\r\nimport { setFontForText } from '@/core/utils/tool';\r\nimport React, { memo, FC, CSSProperties, useMemo, useState, useCallback, useRef, useEffect } from 'react';\r\n\r\ninterface IExpandableTextProps {\r\n maxStr?: number;\r\n text: string;\r\n style?: CSSProperties;\r\n className?: React.HTMLAttributes<HTMLParagraphElement>['className'];\r\n onClick?: () => void;\r\n foldText?: string;\r\n unfoldText?: string;\r\n isPost?: boolean;\r\n onChange?: (bool: boolean) => void;\r\n}\r\n\r\nconst limitTextLastWholeWord = (originalText: string = '', limit: number) => {\r\n // 匹配到中文\r\n const chineseRegex = /[\\u4e00-\\u9fa5]+/;\r\n if (chineseRegex.test(originalText)) {\r\n return originalText.slice(0, 54);\r\n }\r\n\r\n const words = originalText.split(' ');\r\n const newWords: string[] = [];\r\n for (let i = 0; i < words.length; i++) {\r\n newWords.push(words[i]);\r\n const tempText = newWords.join(' ');\r\n if (tempText.length >= limit) break;\r\n }\r\n // const _words = newWords.length === words.length ? newWords : newWords.slice(0, newWords.length - 1);\r\n const _words =\r\n newWords.length > 1 && newWords.length < words.length ? newWords.slice(0, newWords.length - 1) : newWords;\r\n return _words.join(' ') + ' ';\r\n};\r\n\r\nconst ExpandableText: FC<IExpandableTextProps> = ({\r\n text,\r\n maxStr = 108,\r\n style,\r\n className,\r\n onClick,\r\n foldText,\r\n unfoldText,\r\n isPost,\r\n onChange\r\n}) => {\r\n const [isShowMore, setIsShowMore] = useState(false);\r\n const [isShow, setIsShow] = useState(false);\r\n const lineClamp = Number(style?.lineClamp || 2);\r\n const multiRow = useRef<any>(null);\r\n const multiRowCopy = useRef<any>(null);\r\n\r\n const handleClick = useCallback(() => {\r\n setIsShowMore(!isShowMore);\r\n // onChange?.(!isShowMore);\r\n }, [isShowMore, onChange]);\r\n\r\n const renderText = useMemo(() => {\r\n return !isShowMore && text.length > maxStr ? limitTextLastWholeWord(text, maxStr) + '...' : text;\r\n }, [text, maxStr, isShowMore]);\r\n\r\n useEffect(() => {\r\n if (multiRowCopy?.current?.offsetHeight > multiRow?.current?.offsetHeight && isPost) {\r\n setIsShow(true);\r\n } else {\r\n setIsShow(false);\r\n }\r\n multiRowCopy.current.style.display = 'none';\r\n }, [isPost]);\r\n\r\n return (\r\n <div\r\n className={className}\r\n style={{\r\n ...style,\r\n transform: 'translate3d(0px, 0px, 0px)'\r\n }}\r\n hidden={!text || text === ''}\r\n >\r\n <div\r\n ref={multiRow}\r\n style={{\r\n overflow: 'hidden',\r\n WebkitLineClamp: !isPost || isShowMore ? '' : lineClamp,\r\n textOverflow: 'ellipsis',\r\n display: '-webkit-box',\r\n WebkitBoxOrient: 'vertical',\r\n wordBreak: 'break-word'\r\n }}\r\n dangerouslySetInnerHTML={{ __html: setFontForText(text?.replace(/\\n/g, '</br>'), style) }}\r\n ></div>\r\n <div\r\n ref={multiRowCopy}\r\n dangerouslySetInnerHTML={{ __html: setFontForText(text?.replace(/\\n/g, '</br>'), style) }}\r\n ></div>\r\n {text && isPost && isShow && (\r\n <span style={{ textDecoration: 'underline', cursor: 'pointer' }} onClick={onClick ?? handleClick}>\r\n {isShowMore ? unfoldText || 'show less' : foldText || 'show more'}\r\n </span>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(ExpandableText);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-20 18:56:52\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\FormatImage.tsx\r\n *\r\n */\r\nimport React, {\r\n CSSProperties,\r\n ForwardedRef,\r\n forwardRef,\r\n memo,\r\n useEffect,\r\n useImperativeHandle,\r\n useRef,\r\n useState\r\n} from 'react';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\n\r\ninterface IFormatImageProps {\r\n src?: string;\r\n onLoad?: (e: any) => void;\r\n style?: CSSProperties;\r\n className?: any;\r\n loading?: 'eager' | 'lazy';\r\n}\r\ninterface IFormatImageRefProps {\r\n setSrc: (v: string) => void;\r\n}\r\nconst FormatImage = forwardRef((props: IFormatImageProps, ref: ForwardedRef<IFormatImageRefProps>) => {\r\n const { src, onLoad, style, className, loading } = props;\r\n const [imgSrc, setImgSrc] = useState<any>();\r\n useImperativeHandle(ref, () => ({\r\n setSrc: (v: string) => {\r\n setImgSrc(v);\r\n }\r\n }));\r\n\r\n useEffect(() => {\r\n setImgSrc(src);\r\n }, [src]);\r\n\r\n const imgRef = useRef(null);\r\n\r\n // useEffect(() => {\r\n // let observer: any = null;\r\n // const { current } = imgRef;\r\n // if (current) {\r\n // observer = new IntersectionObserver(\r\n // (entries) => {\r\n // entries.forEach((entry) => {\r\n // if (entry.isIntersecting) {\r\n // setImgSrc(src);\r\n // observer.unobserve(current);\r\n // }\r\n // });\r\n // },\r\n // { threshold: 0.1 } // 触发阈值,可根据需要调整\r\n // );\r\n // observer.observe(current);\r\n // }\r\n // return () => {\r\n // if (observer && current) {\r\n // observer.unobserve(current);\r\n // }\r\n // };\r\n // }, [src]);\r\n\r\n return (\r\n <>\r\n {imgSrc?.includes('.avif') ? (\r\n <picture>\r\n <source type='image/avif' srcSet={imgSrc} />\r\n <source type='image/webp' srcSet={`${imgSrc}?imageMogr2/format/webp`} />\r\n <source type='image/jpeg' srcSet={`${imgSrc}?imageMogr2/format/jpg`} />\r\n <img\r\n className={className}\r\n src={imgSrc}\r\n style={style}\r\n loading={loading}\r\n onLoad={(e) => {\r\n onLoad?.(e.target);\r\n }}\r\n alt='image'\r\n />\r\n </picture>\r\n ) : (\r\n <img\r\n className={className}\r\n src={imgSrc}\r\n style={style}\r\n loading={loading}\r\n onLoad={(e) => {\r\n onLoad?.(e.target);\r\n }}\r\n alt='image'\r\n />\r\n )}\r\n </>\r\n );\r\n});\r\nexport default memo(FormatImage);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 10:35:18\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetail\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { CSSProperties, FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { IEditorContext } from '@/core/context/EditorContext';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport './index.less';\r\nimport { Autoplay, Pagination } from 'swiper/modules';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport Modal from '@/core/components/SxpPageRender/Modal';\r\nimport ExpandableText from '@/core/components/SxpPageRender/ExpandableText';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nimport { setFontForText } from '@/core/utils/tool';\r\n\r\nexport interface ICommodityDetailProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n onClick?: () => void;\r\n schema?: IEditorContext['schema'];\r\n isDefault?: boolean;\r\n bottom_image?: string;\r\n tipText?: {\r\n foldText?: string;\r\n unfoldText?: string;\r\n };\r\n isPost?: boolean;\r\n viewTime?: any;\r\n rec?: RecItemType;\r\n swiper: {\r\n dotsAlign: 'left' | 'center';\r\n delay: number;\r\n translateY?: number;\r\n };\r\n commodityStyles?: {\r\n title: CSSProperties;\r\n collection: CSSProperties;\r\n price: CSSProperties;\r\n info: CSSProperties;\r\n };\r\n buttonStyle?: CSSProperties;\r\n index?: number;\r\n}\r\n\r\nconst CommodityDetail: FC<ICommodityDetailProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n onClick,\r\n schema,\r\n isDefault,\r\n bottom_image,\r\n tipText,\r\n isPost,\r\n viewTime,\r\n rec,\r\n swiper,\r\n commodityStyles,\r\n buttonStyle,\r\n index,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n const { popupDetailData, bffEventReport, isPreview, bffFbReport } = useSxpDataSource();\r\n const { jumpToWeb, productView } = useEventReport();\r\n const curTimeRef = useRef<any>(null);\r\n const [showModal, setShowModal] = useState(false);\r\n\r\n const data = isPost ? rec : (popupDetailData as RecItemType);\r\n const product = isPost ? data?.product : data?.video?.bindProduct;\r\n const cta = isPost ? data?.product?.bindCta : data?.video?.bindProduct?.bindCta;\r\n const position = isPost ? index : (popupDetailData?.index as number);\r\n\r\n const handleLink = () => {\r\n if (product?.link) {\r\n jumpToWeb(data, product, cta, position);\r\n if (!isPost) {\r\n productView(data, product, cta, viewTime || curTimeRef.current, position);\r\n }\r\n window.location.href = window.getJointUtmLink(product.link);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!isPost) {\r\n bffFbReport?.({\r\n eventName: 'ProductView'\r\n });\r\n }\r\n }, [isPost, bffFbReport]);\r\n\r\n useEffect(() => {\r\n const initTime = () => {\r\n curTimeRef.current = new Date();\r\n };\r\n initTime();\r\n window.addEventListener('pageshow', initTime);\r\n return () => {\r\n window.removeEventListener('pageshow', initTime);\r\n };\r\n }, []);\r\n\r\n const priceText = useMemo(() => {\r\n if (product?.currency && product?.price) {\r\n return `${product?.currency?.split('-')[1]?.toUpperCase() ?? ''}${\r\n product?.price?.toLocaleString('zh', {\r\n minimumFractionDigits: 0\r\n }) ?? ''\r\n }`;\r\n } else {\r\n return '$7,000';\r\n }\r\n }, [product?.price, product?.currency]);\r\n\r\n const width = isPreview ? 375 : style?.width ?? window.innerWidth;\r\n\r\n const renderContent = ({ isPost }: any) => {\r\n return (\r\n <div>\r\n <div\r\n className={'pb-commondity-content-collection'}\r\n style={getStyle(commodityStyles?.collection)}\r\n hidden={!!product && (!product?.collection || product?.collection === '')}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(product?.collection ?? 'Tiffany Lock', commodityStyles?.collection)\r\n }}\r\n ></div>\r\n <div\r\n className={'pb-commondity-content-title'}\r\n style={getStyle(commodityStyles?.title)}\r\n hidden={!!product && !product?.title}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(\r\n product?.title ?? 'Pendant in Yellow Gold with Diamonds, Medium',\r\n commodityStyles?.title\r\n )\r\n }}\r\n ></div>\r\n <div\r\n className={'pb-commondity-content-price'}\r\n style={getStyle(commodityStyles?.price)}\r\n hidden={!!product && !product?.price}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(priceText, commodityStyles?.price)\r\n }}\r\n ></div>\r\n <div hidden={!!product && (!product?.info || product?.info === '')}>\r\n <ExpandableText\r\n foldText={tipText?.foldText}\r\n unfoldText={tipText?.unfoldText}\r\n onClick={() => setShowModal(true)}\r\n isPost={isPost}\r\n text={\r\n product?.info ??\r\n `The design inspiration of Tiffany Lock series comes from the power of connection and inclusiveness, and the\r\n bold and avant-garde visual design interprets the emotional bond connecting my heart. The Tiffany Lock\r\n collection is unisex and is inspired by the padlock pattern found in the Tiffany Antique Collection. This\r\n necklace features a stylish and eye-catching oval clasp chain decorated with a lock pattern. Crafted from\r\n 18-karat gold, this necklace is embellished with hand-set diamonds.`\r\n }\r\n maxStr={79}\r\n className={'pb-commondity-content-info'}\r\n style={commodityStyles?.info}\r\n />\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderBtn = () => {\r\n return (\r\n <>\r\n {(isDefault || product?.link) && (\r\n <button\r\n aria-label={cta?.enTitle ?? 'Purchase on Website'}\r\n onClick={handleLink}\r\n className='pb-commondity-btn'\r\n style={buttonStyle}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(cta?.enTitle ?? 'Purchase on Website', buttonStyle)\r\n }}\r\n ></button>\r\n )}\r\n </>\r\n );\r\n };\r\n\r\n const getStyle = useCallback((style?: CSSProperties) => {\r\n if (style?.lineClamp) {\r\n return {\r\n ...style,\r\n overflow: 'hidden',\r\n WebkitLineClamp: style?.lineClamp,\r\n textOverflow: 'ellipsis',\r\n display: '-webkit-box',\r\n webkitBoxOrient: 'vertical'\r\n };\r\n }\r\n return style;\r\n }, []);\r\n\r\n return (\r\n <div className={'pb-commondity'}>\r\n <div\r\n className={css({\r\n ...style\r\n })}\r\n {...props}\r\n >\r\n {product && product?.homePage?.length > 0 && (\r\n <Swiper\r\n height={width}\r\n modules={[Pagination, Autoplay]}\r\n pagination={{\r\n clickable: true,\r\n bulletActiveClass: 'swipe-item-active-bullet',\r\n clickableClass:\r\n swiper?.dotsAlign === 'left'\r\n ? 'commondityDetail-swiper-clickable-left'\r\n : 'commondityDetail-swiper-clickable-center'\r\n }}\r\n loop\r\n autoplay={{\r\n delay: swiper?.delay * 1000\r\n }}\r\n >\r\n {product?.homePage?.map((src) => {\r\n return (\r\n <SwiperSlide key={src}>\r\n <div\r\n style={{\r\n overflow: 'hidden',\r\n width,\r\n height: width\r\n }}\r\n >\r\n <FormatImage\r\n style={{\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n display: 'block',\r\n objectPosition: `50% ${swiper?.translateY ? -swiper?.translateY + 50 : 50}%`\r\n }}\r\n src={src}\r\n />\r\n </div>\r\n </SwiperSlide>\r\n );\r\n })}\r\n </Swiper>\r\n )}\r\n {!product?.homePage?.length && (\r\n <div\r\n className={css({\r\n position: 'relative',\r\n height: 0,\r\n width: '100%',\r\n paddingBottom: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <img\r\n className={css({\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n objectFit: 'cover',\r\n width: '100%'\r\n })}\r\n src={sxpParameter?.bottom_image ?? bottom_image}\r\n alt='pdp image'\r\n />\r\n </div>\r\n )}\r\n <div className={'pb-commondity-content'}>{renderContent({ isPost })}</div>\r\n </div>\r\n {renderBtn()}\r\n <Modal visible={showModal} onClose={() => setShowModal(false)}>\r\n <div style={{ paddingBottom: '80px' }}>{renderContent({ isPost: false })}</div>\r\n {renderBtn()}\r\n </Modal>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(CommodityDetail);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-02 18:13:10\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetail\\material.tsx\r\n *\r\n */\r\nimport settingRender from './settingRender';\r\nimport CommodityDetailComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst CommodityDetail = createMaterial(CommodityDetailComponent, {\r\n displayName: '商品详情',\r\n icon: '',\r\n category: 'popup',\r\n type: 'CommodityDetail',\r\n related: {\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n swiper: {\r\n dotsAlign: 'center',\r\n delay: 3\r\n },\r\n commodityStyles: {\r\n price: {\r\n color: '#000',\r\n fontSize: 18,\r\n marginTop: 24,\r\n marginBottom: 10\r\n },\r\n title: {\r\n color: '#000',\r\n fontSize: 23\r\n },\r\n collection: {\r\n fontSize: 12,\r\n color: '#000',\r\n marginBottom: 14\r\n },\r\n info: {\r\n color: 'gray',\r\n fontSize: 12\r\n }\r\n },\r\n buttonStyle: {\r\n backgroundColor: '#000',\r\n fontSize: 12,\r\n height: 45,\r\n fontWeight: 'bold',\r\n textAlign: 'center',\r\n color: 'rgba(255, 255, 255, 0.9)'\r\n }\r\n },\r\n style: {}\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 1\r\n});\r\n\r\nexport { CommodityDetail };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-10-27 14:06:35\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 09:57:31\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\Prompt\\settingRender.tsx\r\n *\r\n */\r\n\r\nexport default [\r\n {\r\n title: '',\r\n child: [\r\n {\r\n type: 'Media',\r\n label: '图标',\r\n name: ['props', 'icon'],\r\n mediaType: 'Image'\r\n },\r\n {\r\n type: 'TextArea',\r\n label: '内容',\r\n name: ['props', 'content']\r\n },\r\n {\r\n type: 'Text',\r\n label: '按钮文案',\r\n name: ['props', 'btnText']\r\n },\r\n {\r\n type: 'Group',\r\n label: '提交按钮字体',\r\n child: [\r\n {\r\n type: 'Select',\r\n name: ['props', 'submitButtonStyle', 'fontFamily-cn'],\r\n bottomText: '中文字体'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['props', 'submitButtonStyle', 'fontFamily-en'],\r\n bottomText: '英文/其他字体'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'submitButtonStyle', 'color'],\r\n initialValue: '#fff'\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'submitButtonStyle', 'fontSize'],\r\n addonAfter: 'px',\r\n initialValue: 12\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextStyle',\r\n name: ['props', 'submitButtonStyle']\r\n },\r\n {\r\n type: 'TextAlign',\r\n name: ['props', 'submitButtonStyle']\r\n },\r\n {\r\n label: '提交按钮颜色',\r\n type: 'Color',\r\n name: ['props', 'submitButtonStyle', 'backgroundColor']\r\n }\r\n ]\r\n }\r\n];\r\n","var img = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAABHBJREFUeF7lmzuoFkcYhp/TihdIl0JBESubSCCCih4NXgJeUphCjyKmEEVtLRSjooWtShILRRJtgpCoeLzgLUZBQbTwAoooqLWoCWIXeZdd3bP++8/st7OX33+ac2Dn8r3Pvzv7zcy7A9RT5gDjgQnx3/T/iuA58Cz+m/7/StXhDVQ0gATOBhYCi4GxxnHeAKeAs8DfMSBjV52bhQTwBbApFj4YNMqPnV0GrgL7gJchxggFQMI3A5NDBOXRx+MYwn6Pul2rlAWwMv7VvykbiLH9TUAQjhnbYwUwA9gKLLIOHLjdGWAPcL1ovxYAG4G9wKiig1Vc/y2wBThQZJyiAA4Ba4sM0EDdw8CPvuMWAXAb+Mq344br3QGm+cTgC+B/n85aWMepz1kBOBknMy3U5wxJSdSSbrVcAPR+V9LRy0X5SW6+0A3AMuDPXlaeiv174K9OWvIAfA1cAMZ9JgBeA98Ct7J68gAMtyjJCfUbKFn6zgeA0tujoUZtWT9D2bS50x1wA2gqt6+al9YO09ODZAF8DrO+C+KIt0IagNbzIlTXktYVaKfr9+PNkSklchMtpXWHR/sJaQA7gJ8sUdXURuJ/AB7E4/0BLDeOvROQ3hEA/gFmGjusullWfDKeFcI1YFYawETgSdUqjP3niS8LYRLwNHkE1gM/GwOssplLfBkIG4BfEgBKE5dWqcTQt694da1td22YFikngGUJgH+B0UVaV1y3iHiFYpnA/wPGCICFXpX66xCfxD8oAKuA3wIpegToHW0tdYpXjKsFQLu7u60Rx+3exSCPG29HdVO3eI25TQB+BdaVAKCMSneRVpBJKfpMNiFesR4UgNOdlomeQF4AWj3quCpbfCE0JV7xDgvAXWCqp+B0tYfACkC7xXnFBaFJ8Yr5ngC8Mu78KHnS4+MqeRCaFq+4X5cB8MnmQoE7oQ3iPwCwPgJWEdZ2rjvNcj16BMpMghYxWsElS1pX0K45xNXedT2aBMu+BotCcAVlfZX69puuF70GQyRCoSFU/csnEKJEKFQqHApCXeIFIUqFQy6GykKoU7wARIuh6HVQwsmVffasEOoWLwfauASADkKU0oYqRSHULV465SsaSgAoqfk9lPq4H18ITYhXiJr7jiYAZGyUUzN0cUFoSrx0yrX6PH0ucEmTQmgCXdb5TYrX/uFcaa3rYCR7JzQpXro1vg5HRgCo+mhMEOT3/RKQYaGpkns0poD6+nA0+UX6+nhcEPreICEIfW2REQCZoc+30A9snTjlI57fyUzdzSYnU3RpP7414sDtNLl3NFG7jJK9YI52sepqnnYBUOe9ZJLOwnCapn0AqNO+NksnVHvJNO00SSeifO+ApH4vZIpdzdHZZ6QoALWXifqI8TTJNWGVua5drTV5pui8ji0A1JfM1Lta5CeWD3h7JzO0i6gVQNJv3342lwXbtx9OpkFoP0ET0LwKDZcyOF5s46ez2TtCxkt9OL0gBmJ1oMnJJcHnYo/wU9czXfR62TnAd7zWfj7/HrAAAKDnDZ8VAAAAAElFTkSuQmCC\";\n export default img;","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 14:56:16\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-20 14:56:22\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\utils\\materials.ts\r\n *\r\n */\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-08-03 16:37:37\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2023-08-04 11:02:50\r\n * @FilePath: \\page-builder-admin\\src\\libs\\core\\utils\\materials.ts\r\n *\r\n */\r\nexport const getMediaValueByMode = (obj?: Record<string, any>) => {\r\n if (!obj || typeof obj !== 'object') {\r\n return null;\r\n }\r\n\r\n const { mode, link, file, src } = obj;\r\n\r\n switch (mode) {\r\n case 2:\r\n return link || null;\r\n case 3:\r\n return src || null;\r\n default:\r\n return file && file.length > 0 ? file[0]?.url : null;\r\n }\r\n};\r\n\r\nexport const getBgStyle = (imgSrc: string) => {\r\n return imgSrc\r\n ? {\r\n backgroundImage: `url(${imgSrc})`,\r\n backgroundRepeat: 'no-repeat',\r\n backgroundSize: 'cover'\r\n }\r\n : '';\r\n};\r\n\r\nexport const getBgStyleByImg = (data: any) => {\r\n const curPageProps = data?.props ?? null;\r\n const bgImg = curPageProps?.bgImg;\r\n const imgSrc = typeof bgImg === 'string' ? bgImg : getMediaValueByMode(bgImg);\r\n return getBgStyle(imgSrc);\r\n};\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 10:38:13\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\Prompt\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { CSSProperties, FC, memo } from 'react';\r\nimport success from './success.png';\r\nimport { getMediaValueByMode } from '@/core/utils/materials';\r\nimport './index.less';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { setFontForText } from '@/core/utils/tool';\r\n\r\nexport interface IPromptProps {\r\n content?: string;\r\n btnText?: string;\r\n style?: Record<string, any>;\r\n icon?: Record<string, any> | string;\r\n isExternalLink?: boolean;\r\n isPopup?: boolean;\r\n onClose?: () => void;\r\n onClick?: () => void;\r\n submitButtonStyle?: CSSProperties;\r\n}\r\n\r\nconst Prompt: FC<IPromptProps> = ({\r\n content,\r\n btnText,\r\n style,\r\n icon,\r\n isPopup,\r\n isExternalLink,\r\n onClose,\r\n onClick,\r\n submitButtonStyle,\r\n ...props\r\n}) => {\r\n const { popupDetailData } = useSxpDataSource();\r\n const { jumpToWeb } = useEventReport();\r\n const iconSrc = typeof icon === 'string' ? icon : getMediaValueByMode(icon);\r\n\r\n const handleOk = () => {\r\n if (isExternalLink) {\r\n const data = popupDetailData as RecItemType;\r\n const product = data?.video?.bindProduct;\r\n const cta = data?.video?.bindProduct?.bindCta;\r\n const position = popupDetailData?.index as number;\r\n jumpToWeb(data, product, cta, position);\r\n }\r\n if (!isPopup) {\r\n onClose?.();\r\n }\r\n onClick?.();\r\n };\r\n\r\n return (\r\n <div\r\n className={`pb-prompt ${css({\r\n ...style\r\n })}`}\r\n {...props}\r\n >\r\n <div className={'pb-prompt-icon'}>\r\n <img width='100%' src={iconSrc ?? success} alt='success image' />\r\n </div>\r\n <div className={'pb-prompt-content'}>{content}</div>\r\n <button\r\n aria-label={btnText}\r\n className={'pb-prompt-btn'}\r\n style={submitButtonStyle}\r\n onClick={handleOk}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(btnText, submitButtonStyle)\r\n }}\r\n ></button>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Prompt);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-20 15:53:10\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\Prompt\\material.tsx\r\n *\r\n */\r\nimport React from 'react';\r\nimport interactionRender from './interactionRender';\r\nimport settingRender from './settingRender';\r\nimport success from './success.png';\r\nimport PromptComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst Prompt = createMaterial(PromptComponent, {\r\n displayName: '提交成功',\r\n icon: '',\r\n category: 'popup',\r\n type: 'Prompt',\r\n related: {\r\n settingRender,\r\n bindableProps: [],\r\n interactionRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n icon: success,\r\n content: 'You have successfully completed the appointment!',\r\n btnText: 'OK'\r\n },\r\n style: {}\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 3\r\n});\r\n\r\nexport { Prompt };\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-26 16:50:25\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 09:54:23\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetailDiroNew\\settingRender.tsx\r\n *\r\n */\r\nexport default [\r\n {\r\n title: '商品图片',\r\n child: [\r\n {\r\n type: 'Radius',\r\n label: '轮播指示器',\r\n options: [\r\n {\r\n label: '居左',\r\n value: 'left'\r\n },\r\n {\r\n label: '居中',\r\n value: 'center'\r\n }\r\n ],\r\n name: ['props', 'swiper', 'dotsAlign']\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'swiper', 'delay'],\r\n addonAfter: 's'\r\n },\r\n {\r\n type: 'Group',\r\n child: [\r\n {\r\n label: '居中垂直偏移',\r\n type: 'Number',\r\n name: ['props', 'swiper', 'translateY'],\r\n min: -1000,\r\n addonAfter: '%',\r\n initialValue: 0\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: '商品文本',\r\n child: [\r\n {\r\n name: ['props', 'commodityStyles'],\r\n type: 'SelectLinkage',\r\n child: [\r\n {\r\n label: '字段',\r\n type: 'Select',\r\n options: [\r\n {\r\n label: '商品名称',\r\n value: 'title'\r\n },\r\n {\r\n label: '系列名称',\r\n value: 'collection'\r\n },\r\n {\r\n label: '价格',\r\n value: 'price'\r\n },\r\n {\r\n label: '税费说明',\r\n value: 'taxInfo'\r\n },\r\n {\r\n label: '商品描述',\r\n value: 'info'\r\n }\r\n ],\r\n name: ['props', 'commodityStyles', 'field'],\r\n initialValue: 'title'\r\n },\r\n {\r\n type: 'Group',\r\n label: '标题字体',\r\n child: [\r\n {\r\n type: 'Select',\r\n name: ['fontFamily-cn'],\r\n bottomText: '中文字体'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['fontFamily-en'],\r\n bottomText: '英文/其他字体'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['color']\r\n },\r\n\r\n {\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['fontSize']\r\n }\r\n ]\r\n },\r\n {\r\n label: '标题样式',\r\n type: 'TextStyle'\r\n },\r\n {\r\n label: '标题对齐',\r\n type: 'TextAlign'\r\n },\r\n {\r\n label: '默认行数',\r\n type: 'Number',\r\n name: ['lineClamp']\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: '购买按钮样式',\r\n child: [\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['props', 'buttonStyle', 'backgroundColor'],\r\n initialValue: '#000'\r\n },\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextMargin',\r\n name: ['props', 'buttonStyle']\r\n },\r\n {\r\n type: 'Group',\r\n label: '字体',\r\n child: [\r\n {\r\n type: 'Select',\r\n name: ['props', 'buttonStyle', 'fontFamily-cn'],\r\n bottomText: '中文字体'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['props', 'buttonStyle', 'fontFamily-en'],\r\n bottomText: '英文/其他字体'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'buttonStyle', 'color'],\r\n initialValue: '#fff'\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'fontSize'],\r\n addonAfter: 'px'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextStyle',\r\n name: ['props', 'buttonStyle']\r\n },\r\n {\r\n type: 'TextAlign',\r\n name: ['props', 'buttonStyle']\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-28 17:58:24\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetailDiroNew\\index.tsx\r\n *\r\n */\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-28 15:30:03\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetailDiroNew\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { CSSProperties, FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { IEditorContext } from '@/core/context/EditorContext';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport './index.less';\r\nimport { Autoplay, Pagination } from 'swiper/modules';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport Modal from '@/core/components/SxpPageRender/Modal';\r\nimport ExpandableText from '@/core/components/SxpPageRender/ExpandableText';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nimport { setFontForText } from '@/core/utils/tool';\r\n\r\nexport interface ICommodityDetailDiroNewProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n onClick?: () => void;\r\n schema?: IEditorContext['schema'];\r\n isDefault?: boolean;\r\n rec?: RecItemType;\r\n viewTime?: any;\r\n isPost?: boolean;\r\n bottom_image?: string;\r\n tipText?: {\r\n foldText?: string;\r\n unfoldText?: string;\r\n };\r\n swiper: {\r\n dotsAlign: 'left' | 'center';\r\n delay: number;\r\n translateY?: number;\r\n };\r\n commodityStyles?: {\r\n title: CSSProperties;\r\n collection: CSSProperties;\r\n price: CSSProperties;\r\n taxInfo: CSSProperties;\r\n info: CSSProperties;\r\n };\r\n buttonStyle?: CSSProperties;\r\n index?: number;\r\n}\r\n\r\nconst CommodityDetailDiroNew: FC<ICommodityDetailDiroNewProps> = ({\r\n style,\r\n isDefault,\r\n rec,\r\n viewTime,\r\n isPost,\r\n bottom_image,\r\n tipText,\r\n swiper,\r\n commodityStyles,\r\n buttonStyle,\r\n index,\r\n ...props\r\n}) => {\r\n const [spread, setSpread] = useState(true);\r\n const { sxpParameter } = useSxpDataSource();\r\n const { popupDetailData, bffEventReport, isPreview, swiperRef, bffFbReport } = useSxpDataSource();\r\n const { jumpToWeb, productView } = useEventReport();\r\n const scrollRef = useRef<any>(null);\r\n const touchRef = useRef<any>(null);\r\n const touchMoveRef = useRef<any>(null);\r\n const [stopSlide, setStopSlide] = useState(false);\r\n const [isBottom, setIsBottom] = useState(false);\r\n const [isTop, setIsTop] = useState(true);\r\n const [showModal, setShowModal] = useState(false);\r\n const curTimeRef = useRef<any>(null);\r\n const data = isPost ? rec : (popupDetailData as RecItemType);\r\n const product = isPost ? data?.product : data?.video?.bindProduct;\r\n const cta = isPost ? data?.product?.bindCta : data?.video?.bindProduct?.bindCta;\r\n const position = isPost ? index : (popupDetailData?.index as number);\r\n\r\n const handleLink = () => {\r\n if (product?.link) {\r\n jumpToWeb(data, product, cta, position);\r\n if (!isPost) {\r\n productView(data, product, cta, viewTime || curTimeRef.current, position);\r\n }\r\n window.location.href = window.getJointUtmLink(product.link);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!isPost) {\r\n bffFbReport?.({\r\n eventName: 'ProductView'\r\n });\r\n }\r\n }, [isPost, bffFbReport]);\r\n\r\n useEffect(() => {\r\n const initTime = () => {\r\n curTimeRef.current = new Date();\r\n };\r\n initTime();\r\n window.addEventListener('pageshow', initTime);\r\n return () => {\r\n window.removeEventListener('pageshow', initTime);\r\n };\r\n }, []);\r\n\r\n const priceText = useMemo(() => {\r\n if (product?.currency && product?.price) {\r\n return `${product?.currency?.split('-')[1]?.toUpperCase() ?? ''}${\r\n product?.price?.toLocaleString('zh', {\r\n minimumFractionDigits: 0\r\n }) ?? ''\r\n }`;\r\n } else {\r\n return '£102,300.00';\r\n }\r\n }, [product?.price, product?.currency]);\r\n\r\n const width = isPreview ? 375 : style?.width ?? window.innerWidth;\r\n\r\n const handleClickCollapse = () => {\r\n setSpread(!spread);\r\n };\r\n\r\n // useEffect(() => {\r\n // console.log(scrollRef?.current?.scrollHeight, window.innerHeight);\r\n // if (scrollRef?.current && scrollRef?.current?.scrollHeight > window.innerHeight) {\r\n // setStopSlide(true);\r\n // }\r\n // }, [scrollRef]);\r\n\r\n // useEffect(() => {\r\n // const handleScroll = () => {\r\n // if (scrollRef?.current) {\r\n // const { scrollTop, scrollHeight, clientHeight } = scrollRef.current;\r\n // const isBottom = scrollTop + clientHeight === scrollHeight;\r\n // if (isBottom) {\r\n // setIsBottom(true);\r\n // } else {\r\n // setIsBottom(false);\r\n // }\r\n // if (scrollTop === 0) {\r\n // setIsTop(true);\r\n // } else {\r\n // setIsTop(false);\r\n // }\r\n // }\r\n // };\r\n\r\n // if (scrollRef.current) {\r\n // scrollRef.current.addEventListener('scroll', handleScroll);\r\n // }\r\n\r\n // return () => {\r\n // if (scrollRef.current) {\r\n // scrollRef.current.removeEventListener('scroll', handleScroll);\r\n // }\r\n // };\r\n // }, [scrollRef]);\r\n\r\n const handleTouchStart = (event: any) => {\r\n event.stopPropagation();\r\n touchRef.current = event.touches[0].clientY;\r\n touchMoveRef.current = true;\r\n };\r\n\r\n const handleTouchMove = (event: any) => {\r\n if (touchMoveRef.current) {\r\n touchMoveRef.current = false;\r\n const currentY = event.touches[0].clientY;\r\n const diff = touchRef.current - currentY;\r\n if (diff > 0 && (isBottom || !stopSlide)) {\r\n swiperRef?.current?.swiper?.slideNext();\r\n } else if (diff < 0 && (isTop || !stopSlide)) {\r\n swiperRef?.current?.swiper?.slidePrev();\r\n }\r\n }\r\n };\r\n\r\n const productInfoText = ({ isPost }: any) => {\r\n return (\r\n <div hidden={!!product && (!product?.info || product?.info === '')}>\r\n <ExpandableText\r\n isPost={isPost}\r\n onClick={() => setShowModal(true)}\r\n className='pb-commondityDiroNew-info'\r\n style={commodityStyles?.info}\r\n foldText={tipText?.foldText}\r\n unfoldText={tipText?.unfoldText}\r\n text={\r\n product?.info ||\r\n `Unveiled at the Spring-Summer 2023 fashion show, the Dior Toujours bag is distinguished by a casual and practical design. Crafted in black calfskin with Macrocannage topstitching, it showcases a spacious interior compartment with a matching pouch to organize essentials. Its leather strap closure keeps items secure while the D of the CD Lock closure twists to adjust the sides and enhance the bag's silhouette. The leather handles can be adjusted using the small notches in order to be able to carry the large bag by hand or wear it over the shoulder. CD Lock and strap closures D.I.O.R. charms Removable interior pouch Adjustable leather handles Dust bag included\r\nMade in Italy`\r\n }\r\n />\r\n </div>\r\n );\r\n };\r\n\r\n const getStyle = useCallback((style?: CSSProperties) => {\r\n if (style?.lineClamp) {\r\n return {\r\n ...style,\r\n overflow: 'hidden',\r\n WebkitLineClamp: style?.lineClamp,\r\n textOverflow: 'ellipsis',\r\n display: '-webkit-box',\r\n webkitBoxOrient: 'vertical'\r\n };\r\n }\r\n return style;\r\n }, []);\r\n\r\n return (\r\n <div className={'pb-commondityDiroNew'}>\r\n <div\r\n ref={scrollRef}\r\n className={css({\r\n ...style\r\n })}\r\n {...props}\r\n // onTouchStart={handleTouchStart}\r\n // onTouchMove={(e: any) => {\r\n // e.stopPropagation();\r\n // handleTouchMove(e);\r\n // }}\r\n >\r\n {product && product?.homePage?.length > 0 && (\r\n <Swiper\r\n height={width}\r\n modules={[Pagination, Autoplay]}\r\n pagination={{\r\n clickable: true,\r\n bulletActiveClass: 'commondityDiroNew-swipe-item-active-bullet',\r\n clickableClass:\r\n swiper?.dotsAlign === 'left'\r\n ? 'commondityDiroNew-swiper-clickable-left'\r\n : 'commondityDiroNew-swiper-clickable-center'\r\n }}\r\n loop\r\n autoplay={{\r\n delay: swiper?.delay * 1000\r\n }}\r\n >\r\n {product?.homePage?.map((src) => {\r\n return (\r\n <SwiperSlide key={src}>\r\n <div\r\n style={{\r\n overflow: 'hidden',\r\n width,\r\n height: width\r\n }}\r\n >\r\n <FormatImage\r\n style={{\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n display: 'block',\r\n objectPosition: `50% ${swiper?.translateY ? -swiper?.translateY + 50 : 50}%`\r\n }}\r\n src={src}\r\n />\r\n </div>\r\n </SwiperSlide>\r\n );\r\n })}\r\n </Swiper>\r\n )}\r\n {!product?.homePage?.length && (\r\n <div\r\n className={css({\r\n position: 'relative',\r\n height: 0,\r\n width: '100%',\r\n paddingBottom: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <img\r\n className={css({\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n objectFit: 'cover',\r\n width: '100%'\r\n })}\r\n src={sxpParameter?.bottom_image ?? bottom_image}\r\n alt='pdp image'\r\n />\r\n </div>\r\n )}\r\n\r\n <div className={'pb-commondityDiroNew-content'}>\r\n <div className={'pb-commondityDiroNew-content-top'}>\r\n <div className={'pb-commondityDiroNew-content-top-left'}>\r\n <div\r\n className={'pb-commondityDiroNew-content-top-left-title'}\r\n style={getStyle(commodityStyles?.title)}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(product?.title ?? 'Large Dior Toujours BagLarge', commodityStyles?.title)\r\n }}\r\n ></div>\r\n <div\r\n className={'pb-commondityDiroNew-content-collection'}\r\n hidden={!!product && (!product?.collection || product?.collection === '')}\r\n style={getStyle(commodityStyles?.collection)}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(\r\n product?.collection || 'Black Macrocannage CalfskinLarge',\r\n commodityStyles?.collection\r\n )\r\n }}\r\n ></div>\r\n </div>\r\n <div className={'pb-commondityDiroNew-content-top-right'}>\r\n <div\r\n className={'pb-commondityDiroNew-content-top-right-price'}\r\n hidden={!!product && !product?.price}\r\n style={getStyle(commodityStyles?.price)}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(priceText, commodityStyles?.price)\r\n }}\r\n ></div>\r\n <div\r\n className={'pb-commondityDiroNew-content-top-right-price'}\r\n hidden={!!product && !product?.taxInfo}\r\n style={getStyle(commodityStyles?.taxInfo)}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(product?.taxInfo ?? '税费', commodityStyles?.taxInfo)\r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n\r\n {(!product || product?.link) && (\r\n <button\r\n aria-label={cta?.enTitle ?? 'Shop now'}\r\n onClick={handleLink}\r\n className='pb-commondityDiroNew-btn'\r\n style={buttonStyle}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(cta?.enTitle ?? 'Shop now', buttonStyle)\r\n }}\r\n ></button>\r\n )}\r\n {productInfoText({ isPost })}\r\n </div>\r\n </div>\r\n <Modal visible={showModal} onClose={() => setShowModal(false)}>\r\n {productInfoText({ isPost: false })}\r\n </Modal>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(CommodityDetailDiroNew);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-09 16:25:44\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\popup\\CommodityDetailDiroNew\\material.tsx\r\n *\r\n */\r\nimport settingRender from './settingRender';\r\nimport CommodityDetailDiroNewComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst CommodityDetailDiroNew = createMaterial(CommodityDetailDiroNewComponent, {\r\n displayName: '商品详情',\r\n icon: '',\r\n category: 'popup',\r\n type: 'CommodityDetailDiroNew',\r\n related: {\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n swiper: {\r\n dotsAlign: 'left',\r\n delay: 3\r\n },\r\n commodityStyles: {\r\n price: {\r\n color: '#000',\r\n fontWeight: 'bold',\r\n fontSize: 13\r\n },\r\n title: {\r\n color: '#000',\r\n fontSize: 13\r\n },\r\n collection: {\r\n color: '#757575',\r\n fontSize: 13\r\n },\r\n info: {\r\n color: '#757575',\r\n fontSize: 13\r\n },\r\n taxInfo: {\r\n color: '#000',\r\n fontWeight: 'bold',\r\n fontSize: 13,\r\n textAlign: 'right'\r\n }\r\n },\r\n buttonStyle: {\r\n backgroundColor: '#000',\r\n fontSize: 12,\r\n height: 52,\r\n fontWeight: 'bold',\r\n textAlign: 'center',\r\n color: '#fff',\r\n borderRadius: 25,\r\n marginTop: 16,\r\n marginBottom: 16\r\n }\r\n },\r\n style: {}\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 1\r\n});\r\n\r\nexport { CommodityDetailDiroNew };\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-26 16:50:25\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 09:55:59\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\components\\settingRender.tsx\r\n *\r\n */\r\nexport default [\r\n {\r\n title: '主题样式',\r\n child: [\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['style', 'width'],\r\n addonAfter: 'W'\r\n },\r\n {\r\n type: 'Number',\r\n name: ['style', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['style', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['style', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['style', 'backgroundColor']\r\n },\r\n {\r\n label: '内边距',\r\n type: 'Number',\r\n name: ['style', 'padding'],\r\n addonAfter: 'px'\r\n },\r\n {\r\n label: '与Post描述边距',\r\n type: 'Number',\r\n name: ['style', 'marginBottom'],\r\n addonAfter: 'px'\r\n }\r\n ]\r\n },\r\n {\r\n title: '商品图片',\r\n child: [\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'img', 'width'],\r\n addonAfter: 'W'\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'img', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['props', 'ctaTempStyles', 'img', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'img', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Number',\r\n label: '与右侧边距',\r\n addonAfter: 'px',\r\n name: ['props', 'ctaTempStyles', 'img', 'marginRight']\r\n },\r\n {\r\n label: '居中垂直偏移',\r\n type: 'Number',\r\n name: ['props', 'translateY'],\r\n min: -1000,\r\n addonAfter: '%',\r\n initialValue: 0\r\n }\r\n ]\r\n },\r\n {\r\n title: '商品标题文本',\r\n type: 'commodityTitle',\r\n child: [\r\n {\r\n type: 'Group',\r\n label: '字体',\r\n child: [\r\n {\r\n type: 'Select',\r\n name: ['props', 'ctaTempStyles', 'title', 'fontFamily-cn'],\r\n bottomText: '中文字体'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['props', 'ctaTempStyles', 'title', 'fontFamily-en'],\r\n bottomText: '英文/其他字体'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'ctaTempStyles', 'title', 'color']\r\n },\r\n {\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['props', 'ctaTempStyles', 'title', 'fontSize']\r\n }\r\n ]\r\n },\r\n {\r\n label: '样式',\r\n type: 'TextStyle',\r\n name: ['props', 'ctaTempStyles', 'title']\r\n },\r\n {\r\n label: '对齐',\r\n type: 'TextAlign',\r\n name: ['props', 'ctaTempStyles', 'title']\r\n },\r\n {\r\n label: '间距',\r\n type: 'TextSpace',\r\n name: ['props', 'ctaTempStyles', 'title']\r\n }\r\n ]\r\n },\r\n {\r\n title: 'CTA标题',\r\n child: [\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'width'],\r\n addonAfter: 'W'\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'backgroundColor']\r\n },\r\n {\r\n type: 'Group',\r\n label: '字体',\r\n child: [\r\n {\r\n type: 'Select',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'fontFamily-cn'],\r\n bottomText: '中文字体'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'fontFamily-en'],\r\n bottomText: '英文/其他字体'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'color']\r\n },\r\n {\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle', 'fontSize']\r\n }\r\n ]\r\n },\r\n {\r\n label: '样式',\r\n type: 'TextStyle',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle']\r\n },\r\n {\r\n label: '对齐',\r\n type: 'TextAlign',\r\n name: ['props', 'ctaTempStyles', 'ctaTitle']\r\n }\r\n ]\r\n }\r\n];\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-02-22 22:21:28\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-21 11:39:56\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\components\\EventProvider.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC, memo, useEffect, useRef } from 'react';\r\nimport { throttle } from 'lodash';\r\nimport useOnScreen from '@/core/hooks/useOnScreen';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nexport interface IImgProps {\r\n rec?: RecItemType;\r\n children: any;\r\n className?: any;\r\n onClick?: any;\r\n style?: CSSProperties;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n}\r\n\r\nconst EventProvider: FC<IImgProps> = ({\r\n rec,\r\n children,\r\n className,\r\n onClick,\r\n style,\r\n isExternalLink = false,\r\n index,\r\n ...props\r\n}) => {\r\n const ref = useRef(null);\r\n const { popup } = useEditor();\r\n const { setPopupDetailData, ctaEvent } = useSxpDataSource();\r\n const { jumpToWeb } = useEventReport();\r\n\r\n const handleClick = throttle(() => {\r\n const item = rec?.video?.bindProduct ?? rec?.video;\r\n ctaEvent?.(\r\n {\r\n eventSubject: 'clickCta',\r\n eventDescription: 'User clicked the CTA'\r\n },\r\n rec,\r\n item,\r\n index\r\n );\r\n setPopupDetailData?.({ ...rec, index });\r\n if (isExternalLink) {\r\n if (rec?.video?.bindProduct?.link) {\r\n const cta = rec?.video?.bindCta;\r\n const product = rec?.video?.bindProduct;\r\n jumpToWeb(rec, product, cta, index);\r\n window.location.href = window.getJointUtmLink(rec?.video?.bindProduct?.link);\r\n }\r\n } else {\r\n onClick?.();\r\n }\r\n }, popup?.duration);\r\n return (\r\n <div ref={ref} className={className} style={style} onClick={handleClick}>\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(EventProvider);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-04-12 09:58:58\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-01-16 14:01:20\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\hooks\\useOnScreen.ts\r\n *\r\n */\r\nimport { useEffect, useState, useRef, RefObject } from 'react';\r\n\r\nexport default function useOnScreen(ref: RefObject<HTMLElement>) {\r\n const observerRef = useRef<IntersectionObserver | null>(null);\r\n const [isOnScreen, setIsOnScreen] = useState(false);\r\n\r\n useEffect(() => {\r\n observerRef.current = new IntersectionObserver(([entry]) => {\r\n setIsOnScreen(entry.isIntersecting);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n ref?.current && observerRef?.current?.observe(ref?.current);\r\n return () => {\r\n observerRef?.current?.disconnect();\r\n };\r\n }, [ref]);\r\n\r\n return isOnScreen;\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-16 14:50:13\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-24 18:13:14\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\components\\Img.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { CSSProperties, FC, memo, useEffect, useMemo, useRef } from 'react';\r\nimport useOnScreen from '@/core/hooks/useOnScreen';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { ProductInfoType, RecItemType, VideoInfoType } from '@/core/components/SxpPageRender/typing';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nexport interface IImgProps {\r\n src?: string;\r\n rec?: RecItemType;\r\n item?: ProductInfoType | VideoInfoType | null;\r\n index?: number;\r\n style?: CSSProperties;\r\n translateY?: number;\r\n imgStyle?: CSSProperties;\r\n}\r\n\r\nconst Img: FC<IImgProps> = ({ src, rec, item, index, style, translateY, imgStyle }) => {\r\n const ref = useRef(null);\r\n const isOnScreen = useOnScreen(ref);\r\n const { ctaEvent } = useSxpDataSource();\r\n useEffect(() => {\r\n if (isOnScreen && src && ref?.current) {\r\n ctaEvent?.(\r\n {\r\n eventSubject: 'ctaExposure',\r\n eventDescription: 'The cta was shown to the user'\r\n },\r\n rec,\r\n item,\r\n index\r\n );\r\n }\r\n }, [isOnScreen, src, ref, rec, ctaEvent, item, index]);\r\n\r\n const imgSrc = useMemo(() => {\r\n return src?.includes('.avif') ? src : `${src}?imrquality/rquality/20`;\r\n }, [src]);\r\n\r\n return (\r\n <div\r\n className={css({\r\n overflow: 'hidden',\r\n flexShrink: 0,\r\n backgroundColor: '#f2f2f2',\r\n ...imgStyle\r\n })}\r\n >\r\n <div ref={ref} hidden={!src} className={css({ width: '100%', height: '100%' })}>\r\n <FormatImage\r\n className={css({\r\n width: '100%',\r\n objectFit: 'cover',\r\n height: '100%',\r\n display: 'block',\r\n objectPosition: `50% ${translateY ? -translateY + 50 : 50}%`,\r\n ...style\r\n })}\r\n src={src}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Img);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:32\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 11:07:38\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Commodity\\index.tsx\r\n *\r\n */\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-21 17:06:55\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Commodity\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo } from 'react';\r\nimport EventProvider from '../components/EventProvider';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nimport Img from '../components/Img';\r\nimport { setFontForText } from '@/core/utils/tool';\r\nexport interface ICommodityProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst Commodity: FC<ICommodityProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n translateY = 0,\r\n index,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n const product = recData?.video?.bindProduct;\r\n const src = product?.cover ?? product?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image;\r\n\r\n return (\r\n <EventProvider\r\n isExternalLink={isExternalLink}\r\n rec={recData}\r\n className={css({ ...style })}\r\n style={{ display: 'flex' }}\r\n index={index}\r\n {...props}\r\n >\r\n <Img\r\n src={src}\r\n rec={recData}\r\n item={recData?.video?.bindProduct ?? recData?.video}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n color: '#fff',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div\r\n className={styles['tow-line-ellipsis']}\r\n style={ctaTempStyles?.title}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(product?.title ?? 'Product Name', ctaTempStyles?.title)\r\n }}\r\n ></div>\r\n <div\r\n className={css({\r\n padding: '0 7px',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n lineHeight: ctaTempStyles?.ctaTitle?.height + 'px',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(product?.bindCta?.enTitle ?? 'Shop Now', ctaTempStyles?.ctaTitle)\r\n }}\r\n ></div>\r\n </div>\r\n </EventProvider>\r\n );\r\n};\r\n\r\nexport default memo(Commodity);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 16:39:54\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Commodity\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport CommodityComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst Commodity = createMaterial(CommodityComponent, {\r\n displayName: '推荐单商品-透明底',\r\n icon: '',\r\n category: 'template',\r\n type: 'Commodity',\r\n related: {\r\n interactionRender,\r\n bindableProps: [],\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 60,\r\n height: 60,\r\n marginRight: 8\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#fff',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n fontSize: 10,\r\n color: '#fff',\r\n textAlign: 'center',\r\n width: 130,\r\n height: 20,\r\n backgroundColor: 'rgba(0,0,0,.5)'\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 74,\r\n borderRadius: 3,\r\n backgroundColor: 'rgba(0,0,0,.3)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 1\r\n});\r\n\r\nexport { Commodity };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 11:06:24\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Appoint\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo } from 'react';\r\nimport EventProvider from '../components/EventProvider';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport Img from '../components/Img';\r\nimport { setFontForText } from '@/core/utils/tool';\r\nexport interface IAppointProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n}\r\n\r\nconst Appoint: FC<IAppointProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n index,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n\r\n const cta = recData?.video?.bindCta;\r\n const src = cta?.icon ?? sxpParameter?.bottom_image ?? bottom_image;\r\n return (\r\n <EventProvider\r\n isExternalLink={isExternalLink}\r\n rec={recData}\r\n className={css({ alignItems: 'center', ...style })}\r\n style={{ display: 'flex' }}\r\n index={index}\r\n {...props}\r\n >\r\n <Img\r\n src={src}\r\n rec={recData}\r\n item={recData?.video?.bindProduct ?? recData?.video}\r\n index={index}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(cta?.enTitle ?? 'Product Name', ctaTempStyles?.ctaTitle)\r\n }}\r\n ></div>\r\n </EventProvider>\r\n );\r\n};\r\n\r\nexport default memo(Appoint);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-09 21:42:21\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Appoint\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport AppointComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst Appoint = createMaterial(AppointComponent, {\r\n displayName: '预约表单',\r\n icon: '',\r\n category: 'template',\r\n type: 'Appoint',\r\n related: {\r\n interactionRender,\r\n settingRender: settingRender?.filter((i: any) => i.type !== 'commodityTitle'),\r\n bindableProps: []\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 30,\r\n height: 30,\r\n marginRight: 8\r\n },\r\n ctaTitle: {\r\n fontSize: 12,\r\n color: '#fff',\r\n textAlign: 'left',\r\n width: 130,\r\n height: 20\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 44,\r\n borderRadius: 3,\r\n backgroundColor: 'rgba(0,0,0,.3)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 6\r\n});\r\n\r\nexport { Appoint };\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 11:16:08\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Link\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo } from 'react';\r\nimport EventProvider from '../components/EventProvider';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nimport Img from '../components/Img';\r\nimport { setFontForText } from '@/core/utils/tool';\r\nexport interface ILinkProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n index?: number;\r\n}\r\n\r\nconst Link: FC<ILinkProps> = ({ content, style, bgImg, recData, bottom_image, ctaTempStyles, index, ...props }) => {\r\n const { sxpParameter, bffEventReport } = useSxpDataSource();\r\n const { jumpToWeb } = useEventReport();\r\n const cta = recData?.video?.bindCta;\r\n const product = recData?.video?.bindProduct;\r\n\r\n const handleTo = () => {\r\n if (cta?.link) {\r\n jumpToWeb(recData, product, cta, index);\r\n\r\n window.location.href = window.getJointUtmLink(cta.link);\r\n }\r\n };\r\n const src = cta?.icon ?? sxpParameter?.bottom_image ?? bottom_image;\r\n return (\r\n <EventProvider\r\n index={index}\r\n rec={recData}\r\n className={css({ alignItems: 'center', ...style })}\r\n style={{ display: 'flex' }}\r\n {...props}\r\n onClick={handleTo}\r\n >\r\n <Img\r\n src={src}\r\n rec={recData}\r\n item={recData?.video?.bindProduct ?? recData?.video}\r\n index={index}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div\r\n className={styles['tow-line-ellipsis']}\r\n style={ctaTempStyles?.ctaTitle}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(cta?.enTitle ?? 'Product Name', ctaTempStyles?.ctaTitle)\r\n }}\r\n ></div>\r\n </div>\r\n </EventProvider>\r\n );\r\n};\r\n\r\nexport default memo(Link);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 17:04:57\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\Link\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport LinkComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst Link = createMaterial(LinkComponent, {\r\n displayName: '跳转指引',\r\n icon: '',\r\n category: 'template',\r\n type: 'Link',\r\n related: {\r\n settingRender: settingRender?.filter((i: any) => i.type !== 'commodityTitle'),\r\n bindableProps: []\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 60,\r\n height: 60,\r\n marginRight: 8\r\n },\r\n ctaTitle: {\r\n fontSize: 12,\r\n color: '#fff',\r\n textAlign: 'left',\r\n width: 130,\r\n height: 20\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 74,\r\n borderRadius: 3,\r\n backgroundColor: 'rgba(0,0,0,.3)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 5\r\n});\r\n\r\nexport { Link };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 14:31:22\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\CommodityDiro\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo } from 'react';\r\nimport EventProvider from '../components/EventProvider';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nimport Img from '../components/Img';\r\nimport { setFontForText } from '@/core/utils/tool';\r\nexport interface ICommodityDiroProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst CommodityDiro: FC<ICommodityDiroProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n translateY = 0,\r\n index,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n const product = recData?.video?.bindProduct;\r\n const src = product?.cover ?? product?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image;\r\n return (\r\n <EventProvider\r\n isExternalLink={isExternalLink}\r\n rec={recData}\r\n className={css({\r\n ...style\r\n })}\r\n style={{ display: 'flex' }}\r\n index={index}\r\n {...props}\r\n >\r\n <Img\r\n src={src}\r\n rec={recData}\r\n item={recData?.video?.bindProduct ?? recData?.video}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n color: '#fff',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div\r\n className={styles['tow-line-ellipsis']}\r\n style={ctaTempStyles?.title}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(product?.title ?? 'Product Name', ctaTempStyles?.title)\r\n }}\r\n ></div>\r\n <div\r\n className={css({\r\n padding: '0 7px',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n borderRadius: '25px',\r\n whiteSpace: 'nowrap',\r\n lineHeight: ctaTempStyles?.ctaTitle?.height + 'px',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(product?.bindCta?.enTitle ?? 'Shop Now', ctaTempStyles?.ctaTitle)\r\n }}\r\n ></div>\r\n </div>\r\n </EventProvider>\r\n );\r\n};\r\n\r\nexport default memo(CommodityDiro);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 16:07:28\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\CommodityDiro\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport CommodityDiroComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst CommodityDiro = createMaterial(CommodityDiroComponent, {\r\n displayName: '推荐单商品-白底圆角按钮',\r\n icon: '',\r\n category: 'template',\r\n type: 'CommodityDiro',\r\n related: {\r\n interactionRender,\r\n settingRender,\r\n bindableProps: []\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 60,\r\n height: 60,\r\n marginRight: 8\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#000',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n fontSize: 10,\r\n color: '#fff',\r\n textAlign: 'center',\r\n width: 80,\r\n height: 20,\r\n backgroundColor: 'rgba(0,0,0,1)'\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 74,\r\n borderRadius: 3,\r\n backgroundColor: '#fff',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 2\r\n});\r\n\r\nexport { CommodityDiro };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:32\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 11:10:39\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\CommodityDiroNew\\index.tsx\r\n *\r\n */\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 10:17:53\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\CommodityDiroNew\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo } from 'react';\r\nimport EventProvider from '../components/EventProvider';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport FormatImage from '@/core/components/SxpPageRender/FormatImage';\r\nimport Img from '../components/Img';\r\nimport { setFontForText } from '@/core/utils/tool';\r\nexport interface ICommodityDiroNewProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst CommodityDiroNew: FC<ICommodityDiroNewProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n translateY = 0,\r\n index,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n const product = recData?.video?.bindProduct;\r\n const src = product?.cover ?? product?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image;\r\n return (\r\n <EventProvider\r\n isExternalLink={isExternalLink}\r\n rec={recData}\r\n className={css({\r\n ...style\r\n })}\r\n style={{ display: 'flex' }}\r\n index={index}\r\n {...props}\r\n >\r\n <Img\r\n src={src}\r\n rec={recData}\r\n item={recData?.video?.bindProduct ?? recData?.video}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n color: '#fff',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div\r\n className={styles['tow-line-ellipsis']}\r\n style={ctaTempStyles?.title}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(product?.title ?? 'Product Name', ctaTempStyles?.title)\r\n }}\r\n ></div>\r\n <div\r\n className={css({\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(product?.bindCta?.enTitle ?? 'Shop Now', ctaTempStyles?.ctaTitle)\r\n }}\r\n ></div>\r\n </div>\r\n </EventProvider>\r\n );\r\n};\r\n\r\nexport default memo(CommodityDiroNew);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-09 11:54:27\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\CommodityDiroNew\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport CommodityDiroNewComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst CommodityDiroNew = createMaterial(CommodityDiroNewComponent, {\r\n displayName: '推荐单商品-白底下划线按钮',\r\n icon: '',\r\n category: 'template',\r\n type: 'CommodityDiroNew',\r\n related: {\r\n interactionRender,\r\n bindableProps: [],\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 8,\r\n width: 78,\r\n height: 78,\r\n marginRight: 16\r\n },\r\n title: {\r\n fontSize: 13,\r\n color: '#000',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n textDecoration: 'underline',\r\n fontSize: 14,\r\n fontWeight: 'bold',\r\n color: '#000',\r\n textAlign: 'left',\r\n width: 150,\r\n height: 20\r\n }\r\n }\r\n },\r\n style: {\r\n borderRadius: 4,\r\n width: 260,\r\n height: 86,\r\n padding: 4,\r\n backgroundColor: 'rgba(255,255,255,0.75)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 2\r\n});\r\n\r\nexport { CommodityDiroNew };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","import React, { memo, FC } from 'react';\r\n// Import Swiper React components\r\nimport { Swiper } from 'swiper/react';\r\n\r\n// Import Swiper styles\r\nimport 'swiper/css';\r\nimport 'swiper/css/free-mode';\r\nimport 'swiper/css/scrollbar';\r\n\r\n// import required modules\r\nimport { FreeMode, Scrollbar, Mousewheel } from 'swiper/modules';\r\n\r\ninterface IScrollProps {\r\n children: any;\r\n isPadding?: boolean;\r\n}\r\n\r\nconst Scroll: FC<IScrollProps> = ({ children, isPadding = true }) => {\r\n return (\r\n <Swiper\r\n direction={'horizontal'}\r\n slidesPerView={'auto'}\r\n freeMode={true}\r\n mousewheel={true}\r\n modules={[FreeMode, Scrollbar, Mousewheel]}\r\n style={{ padding: isPadding ? '0 12px 0 20px' : 0 }}\r\n >\r\n {children}\r\n </Swiper>\r\n );\r\n};\r\n\r\nexport default memo(Scroll);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-23 09:59:50\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodityDiro\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo, useState } from 'react';\r\nimport { SwiperSlide } from 'swiper/react';\r\nimport { throttle } from 'lodash';\r\nimport Scroll from '../components/Scroll';\r\nimport Img from '../components/Img';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport { setFontForText } from '@/core/utils/tool';\r\nexport interface IMultiCommodityDiroProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n onClick?: () => void;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst MultiCommodityDiro: FC<IMultiCommodityDiroProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n onClick,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n index,\r\n translateY = 0,\r\n ...props\r\n}) => {\r\n const { ctaEvent, setPopupDetailData, sxpParameter } = useSxpDataSource();\r\n const { popup } = useEditor();\r\n const { jumpToWeb } = useEventReport();\r\n\r\n const [products, setProducts] = useState(recData?.video?.bindProducts ?? [1, 2]);\r\n const handleClick = throttle((item: any) => {\r\n ctaEvent?.(\r\n {\r\n eventSubject: 'clickCta',\r\n eventDescription: 'User clicked the CTA'\r\n },\r\n recData,\r\n item,\r\n index\r\n );\r\n setPopupDetailData?.({ ...recData, video: { ...recData?.video, bindProduct: item }, index });\r\n if (isExternalLink) {\r\n if (item?.link) {\r\n jumpToWeb(recData, item, item.bindCta, index);\r\n window.location.href = window.getJointUtmLink(item.link);\r\n }\r\n } else {\r\n onClick?.();\r\n }\r\n }, popup?.duration);\r\n return (\r\n <Scroll isPadding={!!recData}>\r\n {products?.map((item: any) => {\r\n return (\r\n <>\r\n {recData && !item?.bindCta ? null : (\r\n <SwiperSlide\r\n key={item?.itemId}\r\n className={css({\r\n ...style,\r\n display: 'flex',\r\n flexShrink: 0,\r\n marginLeft: 0,\r\n marginRight: '8px'\r\n })}\r\n {...props}\r\n onClick={() => handleClick(item)}\r\n >\r\n <Img\r\n src={item?.cover ?? item?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image}\r\n rec={recData}\r\n item={item}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n color: '#000',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div\r\n className={styles['two-line-ellipsis']}\r\n style={ctaTempStyles?.title}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(item?.title ?? 'Product Name', ctaTempStyles?.title)\r\n }}\r\n ></div>\r\n <div\r\n className={css({\r\n padding: '0 7px',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n borderRadius: '25px',\r\n whiteSpace: 'nowrap',\r\n lineHeight: ctaTempStyles?.ctaTitle?.height + 'px',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(item?.bindCta?.enTitle ?? 'Shop Now', ctaTempStyles?.ctaTitle)\r\n }}\r\n ></div>\r\n </div>\r\n </SwiperSlide>\r\n )}\r\n </>\r\n );\r\n })}\r\n </Scroll>\r\n );\r\n};\r\n\r\nexport default memo(MultiCommodityDiro);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 16:27:22\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodityDiro\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport MultiCommodityDiroComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst MultiCommodityDiro = createMaterial(MultiCommodityDiroComponent, {\r\n displayName: '推荐多商品-白底圆角按钮',\r\n icon: '',\r\n category: 'template',\r\n type: 'MultiCommodityDiro',\r\n related: {\r\n interactionRender,\r\n bindableProps: [],\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 60,\r\n height: 60,\r\n marginRight: 8\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#000',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n fontSize: 10,\r\n color: '#fff',\r\n textAlign: 'center',\r\n width: 80,\r\n height: 20,\r\n backgroundColor: 'rgba(0,0,0,1)'\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 74,\r\n borderRadius: 3,\r\n backgroundColor: '#fff',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 4\r\n});\r\n\r\nexport { MultiCommodityDiro };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 11:17:59\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodity\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo, useState } from 'react';\r\nimport { SwiperSlide } from 'swiper/react';\r\nimport { throttle } from 'lodash';\r\nimport Img from '../components/Img';\r\nimport Scroll from '../components/Scroll';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport { setFontForText } from '@/core/utils/tool';\r\nexport interface IMultiCommodityProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n onClick?: () => void;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst MultiCommodity: FC<IMultiCommodityProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n onClick,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n index,\r\n translateY = 0,\r\n ...props\r\n}) => {\r\n const { sxpParameter } = useSxpDataSource();\r\n const { ctaEvent, setPopupDetailData } = useSxpDataSource();\r\n const { popup } = useEditor();\r\n const [products, setProducts] = useState(recData?.video?.bindProducts ?? [1, 2]);\r\n const { jumpToWeb } = useEventReport();\r\n\r\n const handleClick = throttle((item: any) => {\r\n ctaEvent?.(\r\n {\r\n eventSubject: 'clickCta',\r\n eventDescription: 'User clicked the CTA'\r\n },\r\n recData,\r\n item,\r\n index\r\n );\r\n setPopupDetailData?.({ ...recData, video: { ...recData?.video, bindProduct: item }, index });\r\n if (isExternalLink) {\r\n if (item?.link) {\r\n jumpToWeb(recData, item, item.bindCta, index);\r\n window.location.href = window.getJointUtmLink(item.link);\r\n }\r\n } else {\r\n onClick?.();\r\n }\r\n }, popup?.duration);\r\n return (\r\n <Scroll isPadding={!!recData}>\r\n {products?.map((item: any) => {\r\n return (\r\n <>\r\n {recData && !item?.bindCta ? null : (\r\n <SwiperSlide\r\n key={item.itemId}\r\n className={css({\r\n ...style,\r\n display: 'flex',\r\n flexShrink: 0,\r\n marginLeft: 0,\r\n marginRight: '8px'\r\n })}\r\n {...props}\r\n onClick={() => handleClick(item)}\r\n >\r\n <Img\r\n src={item?.cover ?? item?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image}\r\n rec={recData}\r\n item={item}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n color: '#fff',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n width: '100%',\r\n overflow: 'hidden'\r\n })}\r\n >\r\n <div\r\n className={styles['two-line-ellipsis']}\r\n style={ctaTempStyles?.title}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(item?.title ?? 'Product Name', ctaTempStyles?.title)\r\n }}\r\n ></div>\r\n <div\r\n className={css({\r\n padding: '0 7px',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n lineHeight: ctaTempStyles?.ctaTitle?.height + 'px',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(item?.bindCta?.enTitle ?? 'Shop Now', ctaTempStyles?.ctaTitle)\r\n }}\r\n ></div>\r\n </div>\r\n </SwiperSlide>\r\n )}\r\n </>\r\n );\r\n })}\r\n </Scroll>\r\n );\r\n};\r\n\r\nexport default memo(MultiCommodity);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-29 16:43:35\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodity\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport MultiCommodityComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst MultiCommodity = createMaterial(MultiCommodityComponent, {\r\n displayName: '推荐多商品-透明底',\r\n icon: '',\r\n category: 'template',\r\n type: 'MultiCommodity',\r\n related: {\r\n interactionRender,\r\n settingRender,\r\n bindableProps: []\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 3,\r\n width: 60,\r\n height: 60,\r\n marginRight: 8\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#fff',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n fontSize: 10,\r\n color: '#fff',\r\n textAlign: 'center',\r\n width: 130,\r\n height: 20,\r\n backgroundColor: 'rgba(0,0,0,.5)'\r\n }\r\n }\r\n },\r\n style: {\r\n padding: 7,\r\n width: 236,\r\n height: 74,\r\n borderRadius: 3,\r\n backgroundColor: 'rgba(0,0,0,.3)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 3\r\n});\r\n\r\nexport { MultiCommodity };\r\n","export default [\r\n {\r\n title: '点击事件',\r\n child: [\r\n {\r\n type: 'link',\r\n name: 'onClick'\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 11:18:31\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodityDiroNew\\index.tsx\r\n *\r\n */\r\nimport { css } from '@emotion/css';\r\nimport React, { FC, memo, useState } from 'react';\r\nimport { SwiperSlide } from 'swiper/react';\r\nimport { throttle } from 'lodash';\r\nimport Scroll from '../components/Scroll';\r\nimport Img from '../components/Img';\r\nimport { ICtaTempStylesType } from '../components/typing';\r\nimport styles from './index.module.less';\r\nimport { RecItemType } from '@/core/components/SxpPageRender/typing';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport { setFontForText } from '@/core/utils/tool';\r\nexport interface IMultiCommodityDiroNewProps {\r\n content?: string;\r\n style?: Record<string, any>;\r\n bgImg?: Record<string, any> | string;\r\n recData?: RecItemType;\r\n onClick?: () => void;\r\n bottom_image?: string;\r\n ctaTempStyles?: ICtaTempStylesType;\r\n isExternalLink?: boolean;\r\n index?: number;\r\n translateY?: number;\r\n}\r\n\r\nconst MultiCommodityDiroNew: FC<IMultiCommodityDiroNewProps> = ({\r\n content,\r\n style,\r\n bgImg,\r\n recData,\r\n onClick,\r\n bottom_image,\r\n ctaTempStyles,\r\n isExternalLink,\r\n index,\r\n translateY = 0,\r\n ...props\r\n}) => {\r\n const { ctaEvent, setPopupDetailData, sxpParameter } = useSxpDataSource();\r\n const { popup } = useEditor();\r\n const { jumpToWeb } = useEventReport();\r\n\r\n const [products, setProducts] = useState(recData?.video?.bindProducts ?? [1, 2]);\r\n\r\n const handleClick = throttle((item: any) => {\r\n ctaEvent?.(\r\n {\r\n eventSubject: 'clickCta',\r\n eventDescription: 'User clicked the CTA'\r\n },\r\n recData,\r\n item,\r\n index\r\n );\r\n setPopupDetailData?.({ ...recData, video: { ...recData?.video, bindProduct: item }, index });\r\n if (isExternalLink) {\r\n if (item?.link) {\r\n jumpToWeb(recData, item, item.bindCta, index);\r\n window.location.href = window.getJointUtmLink(item.link);\r\n }\r\n } else {\r\n onClick?.();\r\n }\r\n }, popup?.duration);\r\n\r\n return (\r\n <Scroll isPadding={!!recData}>\r\n {products?.map((item: any) => {\r\n return (\r\n <>\r\n {recData && !item?.bindCta ? null : (\r\n <SwiperSlide\r\n key={item?.itemId}\r\n className={css({\r\n ...style,\r\n display: 'flex',\r\n flexShrink: 0,\r\n marginLeft: 0,\r\n marginRight: '8px'\r\n })}\r\n {...props}\r\n onClick={() => handleClick(item)}\r\n >\r\n <Img\r\n src={item?.cover ?? item?.homePage?.[0] ?? sxpParameter?.bottom_image ?? bottom_image}\r\n rec={recData}\r\n item={item}\r\n index={index}\r\n translateY={translateY}\r\n imgStyle={ctaTempStyles?.img}\r\n />\r\n <div\r\n className={css({\r\n color: '#fff',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n width: '100%',\r\n overflow: 'hidden',\r\n lineHeight: '20px'\r\n })}\r\n >\r\n <div\r\n className={styles['tow-line-ellipsis']}\r\n style={ctaTempStyles?.title}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(item?.title ?? 'Product Name', ctaTempStyles?.title)\r\n }}\r\n ></div>\r\n <div\r\n className={css({\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n ...ctaTempStyles?.ctaTitle\r\n })}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(item?.bindCta?.enTitle ?? 'Shop Now', ctaTempStyles?.ctaTitle)\r\n }}\r\n ></div>\r\n </div>\r\n </SwiperSlide>\r\n )}\r\n </>\r\n );\r\n })}\r\n </Scroll>\r\n );\r\n};\r\n\r\nexport default memo(MultiCommodityDiroNew);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-21 16:44:00\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\template\\MultiCommodityDiroNew\\material.tsx\r\n *\r\n */\r\nimport settingRender from '../components/settingRender';\r\nimport interactionRender from './interactionRender';\r\nimport MultiCommodityDiroNewComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst MultiCommodityDiroNew = createMaterial(MultiCommodityDiroNewComponent, {\r\n displayName: '推荐多商品-白底下划线按钮',\r\n icon: '',\r\n category: 'template',\r\n type: 'MultiCommodityDiroNew',\r\n related: {\r\n interactionRender,\r\n bindableProps: [],\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {\r\n ctaTempStyles: {\r\n img: {\r\n borderRadius: 8,\r\n width: 78,\r\n height: 78,\r\n marginRight: 16\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#000',\r\n textAlign: 'left'\r\n },\r\n ctaTitle: {\r\n textDecoration: 'underline',\r\n fontSize: 12,\r\n fontWeight: 'bold',\r\n color: '#000',\r\n textAlign: 'left',\r\n width: 150,\r\n height: 20\r\n }\r\n }\r\n },\r\n style: {\r\n borderRadius: 4,\r\n width: 260,\r\n height: 86,\r\n padding: 4,\r\n backgroundColor: 'rgba(255,255,255,0.75)',\r\n marginBottom: 8\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 4\r\n});\r\n\r\nexport { MultiCommodityDiroNew };\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-04-07 14:07:12\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 09:49:19\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\HashTag\\settingRender.tsx\r\n *\r\n */\r\nexport default [\r\n {\r\n title: 'Banner',\r\n child: [\r\n {\r\n type: 'Switch',\r\n label: 'Banner图开关',\r\n name: ['props', 'showBanner']\r\n }\r\n ]\r\n },\r\n {\r\n title: '卡片样式',\r\n child: [\r\n {\r\n type: 'Number',\r\n label: '上下边距',\r\n name: ['props', 'space'],\r\n addonAfter: 'px'\r\n },\r\n {\r\n type: 'Switch',\r\n label: '固定宽高',\r\n name: ['props', 'openFixedSize'],\r\n initialValue: true\r\n }\r\n ]\r\n },\r\n {\r\n title: '文本设置',\r\n child: [\r\n {\r\n name: ['props', 'textStyles'],\r\n type: 'SelectLinkage',\r\n child: [\r\n {\r\n label: '字段',\r\n type: 'Select',\r\n options: [\r\n {\r\n label: 'hashtag标题',\r\n value: 'hashTagTitle'\r\n },\r\n {\r\n label: 'hashtag描述',\r\n value: 'hashTagDesc'\r\n },\r\n {\r\n label: 'hashtag描述超链',\r\n value: 'hashTagLink'\r\n },\r\n {\r\n label: '标题',\r\n value: 'title'\r\n },\r\n {\r\n label: '价格',\r\n value: 'price'\r\n }\r\n ],\r\n name: ['props', 'textStyles', 'field'],\r\n initialValue: 'title'\r\n },\r\n {\r\n type: 'Group',\r\n label: '标题字体',\r\n child: [\r\n {\r\n type: 'Select',\r\n name: ['fontFamily-cn'],\r\n bottomText: '中文字体'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['fontFamily-en'],\r\n bottomText: '英文/其他字体'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['color']\r\n },\r\n {\r\n type: 'Number',\r\n addonAfter: 'px',\r\n name: ['fontSize']\r\n }\r\n ]\r\n },\r\n {\r\n label: '标题样式',\r\n type: 'TextStyle'\r\n },\r\n {\r\n label: '标题对齐',\r\n type: 'TextAlign'\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n title: '按钮样式',\r\n child: [\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['props', 'buttonStyle', 'backgroundColor'],\r\n initialValue: '#000'\r\n },\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '圆角',\r\n child: [\r\n {\r\n type: 'Slider',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n max: 100\r\n },\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'borderRadius'],\r\n addonAfter: 'px',\r\n max: 100\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextPadding',\r\n name: ['props', 'buttonBgStyle']\r\n },\r\n {\r\n type: 'Group',\r\n label: '字体',\r\n child: [\r\n {\r\n type: 'Select',\r\n name: ['props', 'buttonStyle', 'fontFamily-cn'],\r\n bottomText: '中文字体'\r\n },\r\n {\r\n type: 'Select',\r\n name: ['props', 'buttonStyle', 'fontFamily-en'],\r\n bottomText: '英文/其他字体'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'Group',\r\n label: '',\r\n child: [\r\n {\r\n type: 'Color',\r\n name: ['props', 'buttonStyle', 'color'],\r\n initialValue: '#fff'\r\n },\r\n\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonStyle', 'fontSize'],\r\n addonAfter: 'px'\r\n }\r\n ]\r\n },\r\n {\r\n type: 'TextStyle',\r\n name: ['props', 'buttonStyle']\r\n },\r\n {\r\n type: 'TextAlign',\r\n name: ['props', 'buttonStyle']\r\n }\r\n ]\r\n },\r\n {\r\n title: '按钮背景样式',\r\n child: [\r\n {\r\n type: 'Color',\r\n label: '背景色',\r\n name: ['props', 'buttonBgStyle', 'backgroundColor'],\r\n initialValue: '#fff'\r\n },\r\n {\r\n type: 'Group',\r\n label: '尺寸',\r\n child: [\r\n {\r\n type: 'Number',\r\n name: ['props', 'buttonBgStyle', 'height'],\r\n addonAfter: 'H'\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n];\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-26 16:11:34\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 10:19:28\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Navbar.tsx\r\n *\r\n */\r\nimport React, { memo, FC, CSSProperties } from 'react';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { setFontForText } from '@/core/utils/tool';\r\n\r\ninterface INavbarProps {\r\n icon?: string;\r\n styles?: CSSProperties;\r\n textStyle?: CSSProperties;\r\n onClose?: () => void;\r\n}\r\n\r\nconst Navbar: FC<INavbarProps> = ({ icon, styles, textStyle, onClose }) => {\r\n const { waterFallData, setOpenHashtag } = useSxpDataSource();\r\n\r\n return (\r\n <div className='clc-sxp-nav' style={styles}>\r\n <img className='clc-sxp-nav-left' src={icon} alt='back button' onClick={onClose} />\r\n <div\r\n className='clc-sxp-nav-title'\r\n style={textStyle}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(`#${waterFallData?.hashTag ?? '标题'}`, textStyle)\r\n }}\r\n ></div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Navbar);\r\n","// 瀑布流\r\nimport React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';\r\nimport { RecItemType, RecommendVideoResultType } from '../typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport './WaterfallList.less';\r\nimport previewData from './preview.json';\r\nimport { IHashTagProps } from '@/materials/sxp/HashTag';\r\nimport FormatImage from '../FormatImage';\r\nimport { css } from '@emotion/css';\r\nimport { setFontForText } from '@/core/utils/tool';\r\n\r\ninterface WaterfallFlowItemProps {\r\n /** 显示边界 */\r\n showBorder: number;\r\n style: React.CSSProperties;\r\n unitWidth: number;\r\n index: number;\r\n rec: RecItemType;\r\n sizeChange?: (height: number, index: number) => void;\r\n list: RecItemType[];\r\n reportTagsView: () => void;\r\n}\r\nconst WaterfallFlowItem = (props: WaterfallFlowItemProps & IHashTagProps) => {\r\n const {\r\n rec,\r\n style = {},\r\n sizeChange = () => {},\r\n unitWidth,\r\n index,\r\n showBorder,\r\n list,\r\n reportTagsView,\r\n textStyles,\r\n space\r\n } = props;\r\n const { swiperRef, setRtcList, setOpenHashtag, sxpParameter } = useSxpDataSource();\r\n\r\n const [showVideo, setShowVideo] = useState(false);\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [imgInfo, setImgInfo] = useState<{\r\n height: number;\r\n width: number;\r\n }>({\r\n height: 1,\r\n width: 1\r\n });\r\n const imgDom = useRef<any>(null);\r\n const ref = useRef<any>(null);\r\n const videoDom = useRef<any>(null);\r\n const canvasRef = useRef(null);\r\n const [firstFrameSrc, setFirstFrameSrc] = useState('');\r\n\r\n const src = useMemo(() => {\r\n if (rec?.video?.cover) {\r\n return rec?.video?.cover;\r\n } else if (rec?.video?.imgUrls?.length) {\r\n return rec?.video?.imgUrls?.[0];\r\n } else if (rec?.product?.homePage?.length) {\r\n return rec?.product?.homePage?.[0];\r\n } else {\r\n return sxpParameter?.bottom_image || '';\r\n }\r\n }, [rec, sxpParameter?.bottom_image]);\r\n\r\n const title = useMemo(() => {\r\n return rec?.product?.title || rec?.video?.title || null;\r\n }, [rec]);\r\n\r\n /** 离父亲上边框的距离 */\r\n const top = useMemo(() => {\r\n const y = style.transform\r\n ? Number(style.transform?.substring(style.transform.indexOf(',', 0) + 1, style.transform.length - 3))\r\n : undefined;\r\n return y;\r\n }, [style]);\r\n\r\n /** 是否加载图片 */\r\n const isImgShow = useMemo(() => {\r\n if (top === undefined) {\r\n return false;\r\n }\r\n if (top <= showBorder) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }, [top, showBorder]);\r\n\r\n const priceText = useMemo(() => {\r\n if (rec?.product?.currency && rec?.product?.price) {\r\n return `${rec?.product?.currency?.split('-')[1]?.toUpperCase() ?? ''}${\r\n rec?.product?.price?.toLocaleString('zh', {\r\n minimumFractionDigits: 0\r\n }) ?? ''\r\n }`;\r\n } else {\r\n return null;\r\n }\r\n }, [rec]);\r\n\r\n useEffect(() => {\r\n if (imgDom.current === null || src === '') {\r\n return;\r\n }\r\n let imgSrc = null;\r\n if (showVideo && firstFrameSrc) {\r\n imgSrc = firstFrameSrc;\r\n } else {\r\n imgSrc = src;\r\n }\r\n if (imgSrc) imgDom.current.setSrc(imgSrc);\r\n }, [src, showVideo, firstFrameSrc]);\r\n\r\n const pictRef = useRef<any>();\r\n\r\n const imgLoad = useCallback(\r\n (img: any) => {\r\n setTimeout(() => {\r\n const height = pictRef?.current?.offsetHeight;\r\n // 加56是因为下方文字部分高度为56,可以自己设置\r\n sizeChange(height + 56 + space, index);\r\n }, 0);\r\n },\r\n [space, sizeChange, index, unitWidth, pictRef]\r\n );\r\n\r\n const handleClickToDetail = () => {\r\n reportTagsView();\r\n setRtcList?.(list);\r\n setTimeout(() => {\r\n swiperRef?.current?.swiper.slideTo(index, 0, false);\r\n setOpenHashtag?.(false);\r\n }, 0);\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n style={{\r\n ...style\r\n }}\r\n className={'waterFallList-content-listItem'}\r\n key={index}\r\n onClick={handleClickToDetail}\r\n >\r\n <div className={'waterFallList-content-listItem-picture'} ref={pictRef}>\r\n <FormatImage\r\n loading='lazy'\r\n className='waterFallList-content-listItem-picture-img'\r\n onLoad={imgLoad}\r\n ref={imgDom}\r\n />\r\n </div>\r\n <div className={'waterFallList-content-listItem-info'}>\r\n <div\r\n className={`${'waterFallList-content-listItem-info-title'} ${\r\n priceText ? 'waterFallList-content-listItem-info-nowrap' : ''\r\n }`}\r\n style={{\r\n ...textStyles?.title\r\n }}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(title, textStyles?.title)\r\n }}\r\n ></div>\r\n <div\r\n className={'waterFallList-content-listItem-info-price'}\r\n hidden={!priceText}\r\n style={textStyles.price}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(priceText, textStyles?.price)\r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default function WaterfallList({ reportTagsView, showBanner, ...props }: any & IHashTagProps) {\r\n const { waterFallData, getRecommendVideos, hashTagSize, loadingImage, isOpenHashTag } = useSxpDataSource();\r\n\r\n /** 滚动的父元素 */\r\n const scrollParent = useRef(null);\r\n /** 向上滚动的距离 */\r\n const [scrollTop, setScrollTop] = useState(0);\r\n /** 数据列表 */\r\n const [data, setData] = useState<RecommendVideoResultType>();\r\n const waterfallFlowDom = useRef(null);\r\n /** 样式列表 */\r\n const [styleList, setStyleList] = useState<React.CSSProperties[]>([]);\r\n const styleListRef = useRef<any>();\r\n /** 自定义骨架屏高度 */\r\n const heightList = [170, 230, 300];\r\n /** 到达底部 */\r\n const [isLoadingData, setIsLoadingData] = useState(false);\r\n const [list, setList] = useState<RecItemType[]>([]);\r\n const buttonRef = useRef<any>();\r\n /** 生成随机数 */\r\n const createRandomNum = useCallback((min: number, max: number): number => {\r\n return Math.floor(Math.random() * (max - min + 1)) + min;\r\n }, []);\r\n\r\n const waterfallFlowListInfo = useRef<\r\n {\r\n left: number;\r\n top: number;\r\n height: number;\r\n }[]\r\n >([]);\r\n\r\n /** 当前容器信息 */\r\n const [frameInfo, setFrameInfoInfo] = useState<{\r\n width: number;\r\n }>({ width: 0 });\r\n\r\n /** 每行个数 */\r\n const rowsNum = useMemo(() => {\r\n const width = frameInfo.width || 0;\r\n if (width >= 1200) {\r\n return 6;\r\n } else if (width >= 768 && width <= 1199) {\r\n return 4;\r\n } else {\r\n return 2;\r\n }\r\n }, [frameInfo]);\r\n\r\n /** 每一个的宽度 */\r\n const unitWidth = useMemo(() => {\r\n return frameInfo.width / rowsNum - 2;\r\n }, [rowsNum, frameInfo]);\r\n\r\n /** 获取位置 */\r\n const getStyleList = useCallback(() => {\r\n const temporaryStyleList: React.CSSProperties[] = styleListRef.current ?? [];\r\n /** 目前最下一行的index */\r\n const bottomItemIndex = [];\r\n for (let i = 0; i < list?.length; i++) {\r\n // 原本应对应的行数\r\n const currentRow = Math.floor(i / rowsNum);\r\n const remainder = (i % rowsNum) + 1;\r\n\r\n // 最低item下标\r\n let minHeightInd = 0;\r\n // 最低高度\r\n let minHeight = 9999999999;\r\n // 寻找最低高度的下标\r\n if (currentRow === 0) {\r\n bottomItemIndex[i] = i;\r\n } else {\r\n for (let j = 0; j < bottomItemIndex.length; j++) {\r\n if (\r\n waterfallFlowListInfo.current[bottomItemIndex[j]].top +\r\n waterfallFlowListInfo.current[bottomItemIndex[j]].height <\r\n minHeight\r\n ) {\r\n minHeightInd = j;\r\n minHeight =\r\n waterfallFlowListInfo.current[bottomItemIndex[j]].top +\r\n waterfallFlowListInfo.current[bottomItemIndex[j]].height;\r\n }\r\n }\r\n bottomItemIndex[minHeightInd] = i;\r\n }\r\n\r\n if (waterfallFlowListInfo.current[i] === undefined) {\r\n waterfallFlowListInfo.current[i] = {} as any;\r\n }\r\n\r\n // 第一行特殊处理,一定是从左到右铺的\r\n if (currentRow === 0) {\r\n if (remainder === 1) {\r\n waterfallFlowListInfo.current[i].left = 0;\r\n } else {\r\n waterfallFlowListInfo.current[i].left = waterfallFlowListInfo.current[i - 1].left + unitWidth + 4;\r\n }\r\n waterfallFlowListInfo.current[i].top = 0;\r\n }\r\n // 剩下的行数,铺在当前最低高度下面\r\n else {\r\n waterfallFlowListInfo.current[i].left = waterfallFlowListInfo.current[minHeightInd].left;\r\n waterfallFlowListInfo.current[i].top = minHeight;\r\n }\r\n\r\n // 是否已经有高度,有高度使用已有高度,否则随机生成\r\n waterfallFlowListInfo.current[i].height =\r\n waterfallFlowListInfo.current[i].height || heightList[createRandomNum(0, 2)];\r\n temporaryStyleList[i] = {\r\n transform: `translate(${waterfallFlowListInfo.current[i].left}px,${waterfallFlowListInfo.current[i].top}px)`,\r\n width: `${unitWidth}px`,\r\n height: waterfallFlowListInfo.current[i].height\r\n };\r\n }\r\n setStyleList([...temporaryStyleList]);\r\n return [...temporaryStyleList];\r\n }, [unitWidth, rowsNum, heightList, createRandomNum, list]);\r\n\r\n /** 图片加载完更新高度 */\r\n const onSizeChange = useCallback(\r\n (height: number, index: number) => {\r\n if (waterfallFlowListInfo.current[index] === undefined) {\r\n waterfallFlowListInfo.current[index] = {} as any;\r\n }\r\n waterfallFlowListInfo.current[index].height = height;\r\n styleListRef.current = getStyleList();\r\n },\r\n [getStyleList]\r\n );\r\n\r\n /** 大小、数量发生变化时触发 */\r\n useEffect(() => {\r\n styleListRef.current = getStyleList();\r\n }, [unitWidth, rowsNum, list]); /* 增加getStyleList依赖项会导致在admin预览编辑时无限刷新 */\r\n\r\n /** 初始化请求数据 */\r\n useEffect(() => {\r\n setIsLoadingData(true);\r\n waterFallData &&\r\n getRecommendVideos?.({\r\n hashTag: waterFallData?.hashTag,\r\n 'itemFilter.itemId': waterFallData?.itemId,\r\n 'itemFilter.itemType': waterFallData?.itemType,\r\n defaultSize: hashTagSize,\r\n maxSize: hashTagSize\r\n }).then((res) => {\r\n setData(res);\r\n setList(res?.recList?.filter((item) => item?.video !== null || item?.product !== null) ?? []);\r\n setIsLoadingData(false);\r\n });\r\n if (isOpenHashTag) {\r\n const res = previewData as any;\r\n setData(res);\r\n setList(res?.recList?.filter((item: any) => item?.video !== null || item?.product !== null) ?? []);\r\n setIsLoadingData(false);\r\n }\r\n }, [waterFallData, getRecommendVideos, hashTagSize, isOpenHashTag]);\r\n\r\n const onResize = useCallback(() => {\r\n if (waterfallFlowDom.current === null) {\r\n return;\r\n }\r\n setFrameInfoInfo({\r\n width: (waterfallFlowDom.current as HTMLDivElement).getBoundingClientRect().width\r\n });\r\n }, []);\r\n\r\n /** 监听列表容器大小变化 */\r\n useEffect(() => {\r\n if (waterfallFlowDom.current === null) {\r\n return;\r\n }\r\n const resizeObserver = new ResizeObserver((entries) => {\r\n onResize();\r\n });\r\n resizeObserver.observe(waterfallFlowDom.current);\r\n return () => {\r\n resizeObserver.disconnect();\r\n };\r\n }, [onResize]);\r\n\r\n const loadMoreData = useCallback(() => {\r\n setIsLoadingData(true);\r\n\r\n waterFallData &&\r\n getRecommendVideos?.({\r\n hashTag: waterFallData?.hashTag,\r\n 'itemFilter.itemId': waterFallData?.itemId,\r\n 'itemFilter.itemType': waterFallData?.itemType\r\n }).then((res) => {\r\n setList(list?.concat(res?.recList?.filter((item) => !item?.video) ?? []));\r\n setIsLoadingData(false);\r\n });\r\n }, [waterFallData, getRecommendVideos, list]);\r\n\r\n const onScroll = useCallback(() => {\r\n // 记录滚动值\r\n setScrollTop((scrollParent.current as any).scrollTop);\r\n // const top = (scrollParent.current as any).scrollTop;\r\n // const clientHeight = (scrollParent.current as any).clientHeight;\r\n // const scrollHeight = (scrollParent.current as any).scrollHeight;\r\n\r\n // // 做底部加载\r\n // if (scrollHeight <= top + clientHeight && !isLoadingData) {\r\n // loadMoreData();\r\n // }\r\n }, []);\r\n\r\n /** 监听滚动 */\r\n useEffect(() => {\r\n (scrollParent?.current as any)?.addEventListener('scroll', onScroll);\r\n return () => {\r\n (scrollParent?.current as any)?.removeEventListener('scroll', onScroll);\r\n };\r\n }, [onScroll, scrollParent]);\r\n\r\n const handleClickLink = () => {\r\n if (data?.tag?.link) {\r\n reportTagsView();\r\n window.location.href = data?.tag?.link;\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {isLoadingData ? (\r\n <div style={{ height: '100%', width: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\r\n <img width={64} height={64} src={loadingImage} alt='loading...' style={{ objectFit: 'contain' }} />\r\n </div>\r\n ) : (\r\n <div className={'waterFallList'} ref={waterfallFlowDom}>\r\n <div className={'waterFallList-scroll'} ref={scrollParent}>\r\n {showBanner && data?.tag?.picture && (\r\n <div onClick={handleClickLink}>\r\n <FormatImage\r\n className={css({\r\n width: '100%',\r\n objectFit: 'cover',\r\n marginBottom: '20px'\r\n })}\r\n src={data?.tag?.picture}\r\n />\r\n </div>\r\n )}\r\n <div\r\n className={'waterFallList-info'}\r\n style={props?.textStyles?.hashTagDesc}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(data?.tag?.info, props?.textStyles?.hashTagDesc)\r\n }}\r\n ></div>\r\n <div\r\n hidden={!data?.tag?.link}\r\n className={'waterFallList-collection'}\r\n style={{ ...props?.textStyles?.hashTagLink }}\r\n onClick={handleClickLink}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(data?.tag?.linkTitle || 'Shop the collection', props?.textStyles?.hashTagLink)\r\n }}\r\n ></div>\r\n <div className={'waterFallList-content'}>\r\n {list?.map((item, ind) => {\r\n return (\r\n <WaterfallFlowItem\r\n key={ind}\r\n index={ind}\r\n rec={item}\r\n list={list}\r\n showBorder={scrollTop + (scrollParent?.current as any)?.clientHeight}\r\n style={styleList[ind]}\r\n sizeChange={onSizeChange}\r\n unitWidth={unitWidth}\r\n reportTagsView={reportTagsView}\r\n {...props}\r\n />\r\n );\r\n })}\r\n <div\r\n hidden={!data?.tag?.link}\r\n style={{\r\n position: 'absolute',\r\n width: '100%',\r\n transform: `translate(0px,${\r\n waterfallFlowListInfo?.current[waterfallFlowListInfo?.current?.length - 1]?.top +\r\n waterfallFlowListInfo?.current[waterfallFlowListInfo?.current?.length - 1]?.height ?? 0\r\n }px)`,\r\n height: data?.tag?.link\r\n ? buttonRef?.current?.offsetHeight || props?.buttonBgStyle?.height || '100px'\r\n : 0\r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n <div className={'waterFallList-bottom'} hidden={!data?.tag?.link} style={props?.buttonBgStyle}></div>\r\n <div\r\n ref={buttonRef}\r\n hidden={!data?.tag?.link}\r\n className='waterFallList-btn-wrap'\r\n style={{ ...props?.buttonBgStyle, height: 'auto', backgroundColor: 'transparent' }}\r\n >\r\n <button\r\n aria-label={data?.tag?.linkTitle || 'Shop the collection'}\r\n className={'waterFallList-btn'}\r\n style={props?.buttonStyle}\r\n onClick={handleClickLink}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(data?.tag?.linkTitle || 'Shop the collection', props?.buttonStyle)\r\n }}\r\n ></button>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","var img = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAaZJREFUeF7t2jFKBEEQRuG3mSJeQTARURDMTL2EqXfwAnoKD6FHMDEzNVIw2tzQC2gFggyDrExX1V92T7wz9PumFnqbXdH5teq8nwEwJqBzgfEVKDYAW8Ae8NZq3ZUm4Aa4AnaBR+C8BUIVAIu/ngSfAs9LESoAWLgB/LzWwP7SeLtfHWAu3tZ9Adz/dwD3eOUJCIlXBQiLVwQIjVcDCI9XAkiJVwFIi1cASI3PBpjb3jbd5GyyUcraCUrEZ02ATHwGgFR8NIBcfCSAZHwUgGx8BIB0vDeAfLwnQIl4L4Ay8R4ApeJbA2wD78DOZA/e7ABzk739Xz/T8rfAIfA6WYCd3BqA7NUSwCKfgLNKCK0BjoC7rzP74yoIrQGsuxSCB0ApBC+AMgieACUQvAHkESIApBGiAGQRIgEkEaIB5BAyAKQQsgBkEDIBJBCyAdIRFABSEVQA0hCUAFIQ1ADCERQBQhFUAcIQlAFCENQBfkOwg9eXpeftFQDmEOzv8ifARy8A3wiXwAHwANwujbf7q0xAi9bZZwwAN9oiDx4TUORFuS2z+wn4BAiAaEHnKChjAAAAAElFTkSuQmCC\";\n export default img;","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 10:18:13\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\WaterFall\\List.tsx\r\n *\r\n */\r\nimport React, { useState, useEffect, useMemo, useRef, useCallback } from 'react';\r\nimport { RecItemType, RecommendVideoResultType } from '../typing';\r\nimport './List.less';\r\nimport FormatImage from '../FormatImage';\r\nimport previewData from './preview.json';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { IHashTagProps } from '@/materials/sxp/HashTag';\r\nimport { css } from '@emotion/css';\r\nimport { setFontForText } from '@/core/utils/tool';\r\ninterface WaterfallFlowItemProps {\r\n index: number;\r\n rec: RecItemType;\r\n list: RecItemType[];\r\n reportTagsView: () => void;\r\n}\r\nconst WaterfallFlowItem = (props: WaterfallFlowItemProps & IHashTagProps) => {\r\n const { rec, index, list, reportTagsView, textStyles, space } = props;\r\n const { swiperRef, setRtcList, setOpenHashtag, bffEventReport, sxpParameter } = useSxpDataSource();\r\n const [showVideo, setShowVideo] = useState(false);\r\n const imgDom = useRef<any>(null);\r\n const ref = useRef<any>(null);\r\n\r\n const videoDom = useRef<any>(null);\r\n const canvasRef = useRef(null);\r\n const [firstFrameSrc, setFirstFrameSrc] = useState('');\r\n const src = useMemo(() => {\r\n if (rec?.video?.cover) {\r\n return rec?.video?.cover;\r\n } else if (rec?.video?.imgUrls?.length) {\r\n return rec?.video?.imgUrls?.[0];\r\n } else if (rec?.product?.homePage?.length) {\r\n return rec?.product?.homePage?.[0];\r\n } else {\r\n return sxpParameter?.bottom_image || '';\r\n }\r\n }, [rec, sxpParameter?.bottom_image]);\r\n\r\n const title = useMemo(() => {\r\n return rec?.product?.title || rec?.video?.title || null;\r\n }, [rec]);\r\n\r\n const priceText = useMemo(() => {\r\n if (rec?.product?.currency && rec?.product?.price) {\r\n return `${rec?.product?.currency?.split('-')[1]?.toUpperCase() ?? ''}${\r\n rec?.product?.price?.toLocaleString('zh', {\r\n minimumFractionDigits: 0\r\n }) ?? ''\r\n }`;\r\n } else {\r\n return null;\r\n }\r\n }, [rec]);\r\n\r\n // useEffect(() => {\r\n // if (imgDom.current === null || src === '') {\r\n // return;\r\n // }\r\n // const img = new Image();\r\n // if (showVideo && firstFrameSrc) {\r\n // img.src = firstFrameSrc;\r\n // } else {\r\n // img.src = src;\r\n // }\r\n // // img.onload = () => {\r\n // // setIsLoading(true);\r\n // // };\r\n // imgDom.current.src = img.src;\r\n // }, [src, showVideo, firstFrameSrc]);\r\n\r\n useEffect(() => {\r\n const observer = new IntersectionObserver((entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.isIntersecting) {\r\n if (ref.current === null || src === '') {\r\n return;\r\n }\r\n if (showVideo && firstFrameSrc) {\r\n imgDom.current.setSrc(firstFrameSrc);\r\n } else {\r\n imgDom.current.setSrc(src);\r\n }\r\n observer.unobserve(ref.current);\r\n }\r\n });\r\n });\r\n\r\n observer.observe(ref.current);\r\n\r\n return () => {\r\n observer.disconnect();\r\n };\r\n }, [src, showVideo, firstFrameSrc]);\r\n\r\n const calculateHeightForWidth = (videoWidth: any, videoHeight: any, targetWidth: any) => {\r\n const aspectRatio = videoWidth / videoHeight;\r\n const targetHeight = targetWidth / aspectRatio;\r\n return targetHeight;\r\n };\r\n\r\n useEffect(() => {\r\n const video = videoDom?.current;\r\n if (video === null || src === '' || !showVideo) {\r\n return;\r\n }\r\n video.src = src;\r\n video.currentTime = 1;\r\n video.crossOrigin = 'anonymous';\r\n video.onloadeddata = () => {\r\n const canvas = canvasRef?.current as any;\r\n if (!canvas) return;\r\n const ctx = canvas.getContext('2d');\r\n const targetWidth = window?.innerWidth / 2;\r\n const targetHeight = calculateHeightForWidth(video.videoWidth, video.videoHeight, targetWidth);\r\n canvas.height = targetHeight;\r\n canvas.width = targetWidth;\r\n ctx?.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n setFirstFrameSrc(canvas.toDataURL());\r\n video.remove();\r\n canvas.remove();\r\n };\r\n }, [src, showVideo]);\r\n\r\n const handleClickToDetail = () => {\r\n reportTagsView();\r\n setRtcList?.(list);\r\n setTimeout(() => {\r\n swiperRef?.current?.swiper.slideTo(index, 0, false);\r\n setOpenHashtag?.(false);\r\n }, 0);\r\n };\r\n\r\n return (\r\n <div\r\n ref={ref}\r\n className={'list-content-listItem'}\r\n key={index}\r\n onClick={handleClickToDetail}\r\n style={{ marginBottom: space }}\r\n >\r\n <div className={'list-content-listItem-picture'}>\r\n {showVideo && (\r\n <div style={{ display: 'none' }}>\r\n <video ref={videoDom} crossOrigin='anonymous' className='list-content-listItem-picture-img' />\r\n <canvas ref={canvasRef} />\r\n </div>\r\n )}\r\n <FormatImage loading='lazy' className='list-content-listItem-picture-img' ref={imgDom} />\r\n </div>\r\n <div className={'list-content-listItem-info'}>\r\n <div\r\n className={`${'list-content-listItem-info-title'} ${priceText ? 'list-content-listItem-info-nowrap' : ''}`}\r\n style={textStyles?.title}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(title, textStyles?.title)\r\n }}\r\n ></div>\r\n <div\r\n className={'list-content-listItem-info-price'}\r\n style={textStyles?.price}\r\n hidden={!priceText}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(priceText, textStyles?.price)\r\n }}\r\n ></div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default function WaterfallList({ reportTagsView, showBanner, ...props }: any & IHashTagProps) {\r\n const { waterFallData, getRecommendVideos, hashTagSize, loadingImage, isOpenHashTag } = useSxpDataSource();\r\n const [list, setList] = useState<RecItemType[]>();\r\n const [data, setData] = useState<RecommendVideoResultType>();\r\n const [isLoadingData, setIsLoadingData] = useState(false);\r\n const containerRef = useRef<any>(null);\r\n const [isLoadMore, setIsLoadMore] = useState(false);\r\n\r\n const loadMoreData = useCallback(() => {\r\n if (isLoadMore) return;\r\n setIsLoadMore(true);\r\n waterFallData &&\r\n getRecommendVideos?.({\r\n hashTag: waterFallData?.hashTag,\r\n 'itemFilter.itemId': waterFallData?.itemId,\r\n 'itemFilter.itemType': waterFallData?.itemType\r\n }).then((res) => {\r\n setList(list?.concat(res?.recList ?? []));\r\n setIsLoadMore(false);\r\n });\r\n }, [waterFallData, getRecommendVideos, list, isLoadMore]);\r\n\r\n useEffect(() => {\r\n setIsLoadingData(true);\r\n waterFallData &&\r\n getRecommendVideos?.({\r\n hashTag: waterFallData?.hashTag,\r\n 'itemFilter.itemId': waterFallData?.itemId,\r\n 'itemFilter.itemType': waterFallData?.itemType,\r\n defaultSize: hashTagSize,\r\n maxSize: hashTagSize\r\n }).then((res) => {\r\n setData(res);\r\n setList(res?.recList?.filter((item) => item?.video !== null || item?.product !== null) ?? []);\r\n setIsLoadingData(false);\r\n });\r\n if (isOpenHashTag) {\r\n const res = previewData as any;\r\n setData(res);\r\n setList(res?.recList?.filter((item: any) => item?.video !== null || item?.product !== null) ?? []);\r\n setIsLoadingData(false);\r\n }\r\n }, [waterFallData, getRecommendVideos, hashTagSize, isOpenHashTag]);\r\n\r\n // useEffect(() => {\r\n // const container = containerRef?.current;\r\n // if (!container) return;\r\n // const handleScroll = () => {\r\n // const top = (container as any)?.scrollTop;\r\n // const clientHeight = (container as any)?.clientHeight;\r\n // const scrollHeight = (container as any)?.scrollHeight;\r\n // if (scrollHeight <= top + clientHeight && !isLoadingData) {\r\n // loadMoreData();\r\n // }\r\n // };\r\n // container?.addEventListener('scroll', handleScroll);\r\n // return () => {\r\n // container?.removeEventListener('scroll', handleScroll); // 在组件卸载时移除事件监听器\r\n // };\r\n // }, [isLoadingData, containerRef, loadMoreData]);\r\n\r\n const handleClickLink = () => {\r\n if (data?.tag?.link) {\r\n reportTagsView();\r\n window.location.href = data?.tag?.link;\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {isLoadingData ? (\r\n <div style={{ height: '100%', width: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\r\n <img width={64} height={64} src={loadingImage} alt='loading...' style={{ objectFit: 'contain' }} />\r\n </div>\r\n ) : (\r\n <div className={'list'}>\r\n <div className={'list-scroll'} ref={containerRef}>\r\n {showBanner && data?.tag?.picture && (\r\n <div onClick={handleClickLink}>\r\n <FormatImage\r\n className={css({\r\n width: '100%',\r\n objectFit: 'cover',\r\n marginBottom: '20px'\r\n })}\r\n src={data?.tag?.picture}\r\n />\r\n </div>\r\n )}\r\n <div\r\n className={'list-info'}\r\n style={props?.textStyles?.hashTagDesc}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(data?.tag?.info, props?.textStyles?.hashTagDesc)\r\n }}\r\n ></div>\r\n <div\r\n hidden={!data?.tag?.link}\r\n className={'list-collection'}\r\n onClick={handleClickLink}\r\n style={{ ...props?.textStyles?.hashTagLink, marginBottom: props?.space }}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(data?.tag?.linkTitle || 'Shop the collection', props?.textStyles?.hashTagLink)\r\n }}\r\n ></div>\r\n <div className={'list-content'}>\r\n {list?.map((item, ind) => {\r\n return (\r\n <WaterfallFlowItem\r\n key={ind}\r\n index={ind}\r\n rec={item}\r\n list={list}\r\n reportTagsView={reportTagsView}\r\n {...props}\r\n />\r\n );\r\n })}\r\n </div>\r\n <div hidden={!isLoadMore} style={{ textAlign: 'center' }}>\r\n loading...\r\n </div>\r\n <div\r\n hidden={!data?.tag?.link}\r\n style={{\r\n height: data?.tag?.link ? props?.buttonBgStyle?.height || props?.buttonStyle?.height || '100px' : 0\r\n }}\r\n ></div>\r\n </div>\r\n <div className={'list-bottom'} hidden={!data?.tag?.link} style={props?.buttonBgStyle}></div>\r\n <div\r\n hidden={!data?.tag?.link}\r\n className='list-btn-wrap'\r\n style={{ ...props?.buttonBgStyle, height: 'auto', backgroundColor: 'transparent' }}\r\n >\r\n <button\r\n aria-label={data?.tag?.linkTitle || 'Shop the collection'}\r\n className={'list-btn'}\r\n style={props?.buttonStyle}\r\n onClick={handleClickLink}\r\n dangerouslySetInnerHTML={{\r\n __html: setFontForText(data?.tag?.linkTitle || 'Shop the collection', props?.buttonStyle)\r\n }}\r\n ></button>\r\n </div>\r\n </div>\r\n )}\r\n </>\r\n );\r\n}\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-10 10:58:24\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-20 12:45:26\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\WaterFall\\index.tsx\r\n *\r\n */\r\nimport React, { FC, memo, useCallback, useEffect, useRef, useState } from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport './index.less';\r\nimport { isEqual } from 'lodash';\r\nimport Navbar from '../Navbar';\r\nimport WaterfallList from './WaterfallList';\r\nimport left from './left.png';\r\nimport List from './List';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport { IWaterFallDataType } from '@/core/context/SxpDataSourceProvider';\r\nimport { IHashTagProps } from '@/materials/sxp/HashTag';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\ninterface IWaterFallProps {}\r\n\r\nconst WaterFall: FC<IWaterFallProps & IHashTagProps> = (props) => {\r\n const {\r\n waterFallData,\r\n setOpenHashtag,\r\n openHashtag,\r\n swiperRef,\r\n setWaterFallData,\r\n cacheRtcList,\r\n setRtcList,\r\n cacheActiveIndex,\r\n rtcList,\r\n setCacheRtcList,\r\n setIsFromHashtag,\r\n isFromHashtag,\r\n bffEventReport,\r\n themeTag,\r\n selectTag\r\n } = useSxpDataSource();\r\n const { backMainFeed } = useEventReport();\r\n const ref = useRef<HTMLElement | null>(null);\r\n const modalEleRef = useRef<HTMLElement | null>(null);\r\n const [viewTime, setViewTime] = useState<any>();\r\n\r\n useEffect(() => {\r\n const parentNode = document.getElementById('sxp-render');\r\n const node = document.getElementById('water-fall');\r\n if (node) {\r\n modalEleRef.current = node;\r\n } else {\r\n modalEleRef.current = document.createElement('div');\r\n modalEleRef.current.setAttribute('id', 'water-fall');\r\n parentNode?.appendChild(modalEleRef.current);\r\n }\r\n }, []);\r\n\r\n const handleClose = () => {\r\n const isEq = isEqual(rtcList, cacheRtcList);\r\n if (!isEq && cacheRtcList && cacheRtcList?.length) {\r\n setRtcList?.(cacheRtcList);\r\n }\r\n backMainFeed('branch', selectTag, undefined, waterFallData?.hashTag);\r\n reportTagsView();\r\n setWaterFallData?.(undefined);\r\n setIsFromHashtag?.(false);\r\n setTimeout(() => {\r\n if (!isEq) {\r\n swiperRef?.current?.swiper?.slideTo(cacheActiveIndex, 0, false);\r\n }\r\n setOpenHashtag?.(false);\r\n }, 0);\r\n };\r\n\r\n const [recData, setRecData] = useState<IWaterFallDataType>();\r\n\r\n useEffect(() => {\r\n if (waterFallData) {\r\n setRecData(waterFallData);\r\n }\r\n }, [waterFallData]);\r\n\r\n const reportTagsView = useCallback(() => {\r\n const rec = recData?.rec;\r\n if (!rec) return;\r\n let fromKName = '';\r\n if (isFromHashtag) {\r\n fromKName = 'hashTagPage';\r\n } else if (rec?.video?.url) {\r\n fromKName = 'videoPage';\r\n } else if (rec?.video?.imgUrls?.length) {\r\n fromKName = 'imagePage';\r\n }\r\n bffEventReport?.({\r\n eventInfo: {\r\n contentId: rec?.video?.itemId,\r\n position: cacheActiveIndex + '',\r\n contentTags: JSON.stringify(rec?.video?.tags),\r\n traceInfo: rec?.video?.traceInfo,\r\n hashTags: JSON.stringify([recData?.hashTag]),\r\n fromKName,\r\n fromKPage: location?.href,\r\n timeOnSite: Math.floor(((new Date() as any) - viewTime) / 1000) + '',\r\n eventSubject: 'clickTagsViewContents',\r\n eventDescription: 'User click tags view contents'\r\n }\r\n });\r\n }, [recData, bffEventReport, viewTime, isFromHashtag, cacheActiveIndex]);\r\n\r\n useEffect(() => {\r\n if (openHashtag) {\r\n setViewTime(new Date());\r\n }\r\n }, [openHashtag]);\r\n\r\n useEffect(() => {\r\n const initTime = () => {\r\n setViewTime(new Date());\r\n };\r\n window.addEventListener('pageshow', initTime);\r\n return () => {\r\n window.removeEventListener('pageshow', initTime);\r\n };\r\n }, []);\r\n\r\n if (!modalEleRef.current) return null;\r\n\r\n return ReactDOM.createPortal(\r\n <div\r\n className='waterfall'\r\n style={{\r\n display: openHashtag ? 'block' : 'none'\r\n }}\r\n >\r\n <Navbar icon={left} styles={{ top: '32px' }} textStyle={props?.textStyles?.hashTagTitle} onClose={handleClose} />\r\n {props?.openFixedSize === true || props?.openFixedSize === undefined ? (\r\n <List reportTagsView={reportTagsView} {...props} />\r\n ) : (\r\n <WaterfallList reportTagsView={reportTagsView} {...props} />\r\n )}\r\n </div>,\r\n modalEleRef.current\r\n );\r\n};\r\nexport default memo(WaterFall);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-15 19:03:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-29 19:08:34\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\HashTag\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC, memo } from 'react';\r\nimport WaterFall from '@/core/components/SxpPageRender/WaterFall';\r\n\r\nexport interface IHashTagProps {\r\n lineClamp: number;\r\n space: number;\r\n buttonStyle: CSSProperties;\r\n textStyles: {\r\n hashTagTitle: CSSProperties;\r\n hashTagDesc: CSSProperties;\r\n hashTagLink: CSSProperties;\r\n title: CSSProperties;\r\n price: CSSProperties;\r\n };\r\n buttonBgStyle: CSSProperties;\r\n showBanner?: boolean;\r\n openFixedSize?: boolean;\r\n}\r\n\r\nconst HashTag: FC<IHashTagProps> = (props) => {\r\n return <WaterFall {...props} />;\r\n};\r\n\r\nexport default memo(HashTag);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-30 10:13:13\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\HashTag\\material.tsx\r\n *\r\n */\r\nimport settingRender from './settingRender';\r\nimport HashTagComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst HashTag = createMaterial(HashTagComponent, {\r\n displayName: '',\r\n icon: '',\r\n category: 'base',\r\n type: 'HashTag',\r\n related: {\r\n settingRender,\r\n bindableProps: []\r\n },\r\n defaulSetting: {\r\n props: {\r\n lineClamp: 1,\r\n space: 40,\r\n textStyles: {\r\n hashTagTitle: {\r\n fontSize: 16,\r\n color: '#000'\r\n },\r\n hashTagDesc: {\r\n fontSize: 12,\r\n textAlign: 'center',\r\n color: '#000'\r\n },\r\n hashTagLink: {\r\n textAlign: 'center',\r\n color: '#757575',\r\n fontSize: 12,\r\n textDecoration: 'underline'\r\n },\r\n title: {\r\n fontSize: 12,\r\n color: '#000'\r\n },\r\n price: {\r\n fontSize: 12,\r\n fontWeight: 'bold',\r\n color: '#000'\r\n }\r\n },\r\n buttonStyle: {\r\n backgroundColor: '#000',\r\n fontSize: 12,\r\n height: 52,\r\n fontWeight: 'bold',\r\n textAlign: 'center',\r\n color: '#fff',\r\n borderRadius: 25\r\n },\r\n buttonBgStyle: {\r\n backgroundColor: '#fff',\r\n height: 52,\r\n paddingTop: 20,\r\n paddingLeft: 20,\r\n paddingRight: 20,\r\n paddingBottom: 20\r\n }\r\n }\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 2\r\n});\r\n\r\nexport { HashTag };\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-06-13 10:08:32\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-13 17:42:50\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\Consent\\settingRender.tsx\r\n *\r\n */\r\nexport default [\r\n {\r\n title: '协议详情',\r\n child: [\r\n {\r\n type: 'Switch',\r\n label: '必须同意用户协议',\r\n name: ['props', 'privacy_necessity'],\r\n extra: '当新用户进入页面时,会出现用户协议弹窗,用户需要先同意协议后才能访问内容。'\r\n },\r\n {\r\n type: 'Text',\r\n label: '弹窗标题',\r\n name: ['props', 'privacy_title']\r\n },\r\n {\r\n type: 'TextArea',\r\n label: '用户协议弹窗内容',\r\n name: ['props', 'privacy_context']\r\n },\r\n {\r\n type: 'Group',\r\n label: '隐私政策',\r\n child: [\r\n {\r\n type: 'Text',\r\n name: ['props', 'privacy_policy_title']\r\n },\r\n {\r\n type: 'Text',\r\n name: ['props', 'privacy_policy_url'],\r\n addonBefore: 'https://'\r\n }\r\n ],\r\n extra: '当用户点击更多信息按钮时,将会跳转至设置的链接查看政策内容'\r\n }\r\n ]\r\n }\r\n];\r\n","import React, { FC, memo } from 'react';\r\n\r\nexport interface IConsentProps {\r\n width?: number;\r\n height?: number;\r\n privacy_title?: string;\r\n privacy_context?: string;\r\n privacy_policy_url?: string;\r\n privacy_policy_title?: string;\r\n privacy_necessity?: boolean;\r\n}\r\n\r\nconst Consent: FC<IConsentProps> = (props) => {\r\n return <Consent {...props}></Consent>;\r\n};\r\n\r\nexport default memo(Consent);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-07-28 18:29:57\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-13 17:32:17\r\n * @FilePath: \\pb-sxp-ui\\src\\materials\\sxp\\Consent\\material.tsx\r\n *\r\n */\r\nimport settingRender from './settingRender';\r\nimport ConsentComponent from '.';\r\nimport { createMaterial } from '@/core/create';\r\n\r\nconst Consent = createMaterial(ConsentComponent, {\r\n displayName: 'Consent',\r\n icon: '',\r\n category: 'base',\r\n type: 'Consent',\r\n related: {\r\n settingRender\r\n },\r\n defaulSetting: {\r\n props: {},\r\n style: {}\r\n },\r\n w: 100,\r\n h: 40,\r\n sort: 1\r\n});\r\n\r\nexport { Consent };\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-27 19:02:59\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-23 14:49:42\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\LikeButton\\index.tsx\r\n *\r\n */\r\nimport React, { FC, memo, useState } from 'react';\r\nimport { debounce } from 'lodash';\r\nimport { RecItemType } from '../typing';\r\nimport { useIconLink } from '../useIconLink';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\n\r\nconst defaultUnLikeIconPath = '/pb_static/f71266d2c64446c5ae6a5a7f5489cc0a.png';\r\nconst defaultLikeIconPath = '/pb_static/f07900fe3f0f4ae188ea1611d4801a44.png';\r\n\r\ninterface ILikeProps extends React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement> {\r\n activeIcon?: string;\r\n unActicveIcon?: string;\r\n active?: boolean;\r\n recData: RecItemType;\r\n position: number;\r\n}\r\n\r\nconst LikeButton: FC<ILikeProps> = ({ active, activeIcon, unActicveIcon, recData, position, ...props }) => {\r\n const { mutateLike, mutateUnlike, bffEventReport } = useSxpDataSource();\r\n const [state, setState] = useState(active);\r\n\r\n const likeIcon = useIconLink(defaultLikeIconPath);\r\n const unlikeIcon = useIconLink(defaultUnLikeIconPath);\r\n\r\n const handleClick = debounce(async () => {\r\n if (state) {\r\n // 先设置状态\r\n setState(false);\r\n const result = (await mutateUnlike?.({ videoItemId: recData?.video?.itemId ?? '' })) ?? false;\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'favoriteContentCanceled',\r\n eventDescription: 'This content was unfavorite by the user',\r\n contentId: recData?.video?.itemId ?? '',\r\n contentName: recData?.video?.title ?? '',\r\n contentTags: JSON.stringify(recData?.video?.tags ?? []),\r\n position: position + '',\r\n contentFormat: recData?.video?.url ? 'video' : 'image',\r\n traceInfo: recData?.video?.traceInfo\r\n }\r\n });\r\n // 如果接口调用失败,则回滚状态\r\n if (!result) {\r\n setState(true);\r\n }\r\n } else {\r\n setState(true);\r\n const result = (await mutateLike?.({ content: JSON.stringify(recData) })) ?? false;\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'favoriteContent',\r\n eventDescription: 'This content was favorite by the user',\r\n contentId: recData?.video?.itemId ?? '',\r\n contentName: recData?.video?.title ?? '',\r\n contentTags: JSON.stringify(recData?.video?.tags ?? []),\r\n position: position + '',\r\n contentFormat: recData?.video?.url ? 'video' : 'image',\r\n traceInfo: recData?.video?.traceInfo\r\n }\r\n });\r\n if (!result) {\r\n setState(false);\r\n }\r\n }\r\n }, 200);\r\n\r\n return (\r\n <button {...props} aria-label='like' onClick={handleClick}>\r\n <img\r\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\r\n src={state ? activeIcon || likeIcon : unActicveIcon || unlikeIcon}\r\n alt='icon'\r\n />\r\n </button>\r\n );\r\n};\r\n\r\nexport default memo(LikeButton);\r\n","var img = \"data:image/gif;base64,R0lGODlhlgCWAPf/AAAAAICAgMzMzMzMzNXV1dXV1dXV1dfX19jOztjY2NvOztvb29zc3N/Pz9/V1d/f3+Pj4+bm5ubm5ujR0ejg4Ojo6Onp6erj4+rj4+rl5evr6+vr6+3k5O3t7e3t7e7u7u7u7u/v7/Dw8PDw8PHx8fHx8fHx8fLs7PLu7vLu7vLy8vPu7vPz8/Tp6fTx8fTx8fT09PT09PT09PXw8Pbx8fbz8/b29vb29vb29vb29vb29vf09Pf39/f39/f39/f39/f39/f39/f39/f39/f39/j09Pj09Pj19fj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pn29vn39/n5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fr09Pr4+Pr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vv39/v39/v4+Pv5+fv5+fv6+vv7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/z4+Pz5+fz5+fz5+fz6+vz6+vz6+vz6+vz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/P36+v36+v36+v37+/37+/37+/37+/38/P38/P38/P38/P39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f78/P78/P78/P78/P7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v/V1f/39//4+P/6+v/7+//8/P/8/P/9/f/9/f/9/f/9/f/+/v/+/v/+/v/+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wD/ACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAwBLACxFABcADwAMAIYAAACAgIDMzMzV1dXX19fYzs7Y2Njbzs7b29vc3Nzfz8/f1dXf39/j4+Pm5ubo0dHo4ODo6Ojp6enq4+Pq5eXr6+vt5OTt7e3u7u7v7+/w8PDx8fHy7Ozy7u7y8vLz7u7z8/P06en08fH09PT18PD28fH28/P29vb39PT39/f49PT49fX4+Pj59vb59/f5+fn69PT6+Pj6+vr79/f7+Pj7+fn7+vr7+/v8+Pj8+fn8+vr8/Pz9+vr9+/v9/Pz9/f3+/Pz+/v7/1dX/9/f/+Pj/+vr/+/v//Pz//f3//v7///8A/wD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8IUgCXCNzxI8gOJQV3CFy4RIkMJTccQnQYZCGShAgNZiS45MfDiB8lglzSQyPGk0FCqpwY8iBKlyZFyly5xKRNmAJrzGQJcWFJmDB1MBQ4MwnDgAAAIfkECQQA/wAsRwAXAA8ADAAACFMA/wkslAhcqWKJsLkRyPAfODfgujyM+LAYQ4QGMR4sWGrhRIkQQVJcyFGjyYJrRqoU2aXYxowlS7L8SBNiIZg4XwqcGfIjw5g5G/6zUROcDYYBAQAh+QQJAwD/ACxIABcAEAAMAAAIWwD/CfzXqVSxRNgSlRrIEAm4LuDcPIz4sBNDcAYTYTy4MVEigRMlQhRJsYvAjB1TGuxio6RLkhJDaURJk+PCkDhHTvxXc6bNgzxh5ow40E3Pjm4Y/lszNKnAgAAAIfkECQMA/wAsSgAXABEADQAACGUA/wn856YLtkSlBioceAScG3BdHEJ0uLBLsUTgSl3MuLFUooESIz4UOfHhvzYYNabs2PFflJIwSUZcU0olx5U4SyEJyXNkyH84bwotFepfzJ4TB7IMqrGLwlIyeUZZuNAjR4UBAQAh+QQJBAD/ACxMABcAEgAOAAAIaAD/CRTYpdTAgwgFgusCzs1CcGvAJfwXBVypYoksYtSYqNjBhw4Zhmy4kJvAUhczpuTIEds/kSBjwiy4caXNmhhH6pRJEiVOlT8t/iM5kyhRk0NvAgX6cWfRKBNLLdXYZiLCiEhCHQwIACH5BAkDAP8ALE4AGAATAA4AAAhkAP8JBOcGXBeCxQQqXCiwWCJwpRxClMhwYMGDFwka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\";\n export default img;","import React, { CSSProperties, FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { useSwiperSlide } from 'swiper/react';\r\nimport { RecItemType } from '../typing';\r\nimport { useIconLink } from '../useIconLink';\r\nimport { postConfigType } from '..';\r\nimport FormatImage from '../FormatImage';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport SXP_EVENT_BUS, { SXP_EVENT_TYPE } from '@/core/utils/event';\r\nimport loading_gif from './loading.gif';\r\nimport { transform } from 'lodash';\r\n\r\ninterface IVideoWidgetProps {\r\n rec: RecItemType;\r\n index: number;\r\n height: number;\r\n data: RecItemType[];\r\n muted: boolean;\r\n activeIndex?: number;\r\n videoPostConfig?: postConfigType;\r\n videoRef?: any;\r\n videoPlayIcon?: string;\r\n}\r\n\r\nconst VideoWidget: FC<IVideoWidgetProps> = ({\r\n rec,\r\n index,\r\n height,\r\n data,\r\n muted,\r\n activeIndex,\r\n videoPostConfig,\r\n videoRef,\r\n videoPlayIcon\r\n}) => {\r\n const [isPauseVideo, setIsPauseVideo] = useState(false);\r\n const { bffEventReport, sxpParameter, waterFallData, openHashtag, bffFbReport } = useSxpDataSource();\r\n const videoStartTime = useRef(0);\r\n const [isLoadFinish, setIsLoadFinish] = useState(false);\r\n const [isFirstPlay, setIsFirstPlay] = useState(true);\r\n const { isActive } = useSwiperSlide();\r\n const canvasRef = useRef(null);\r\n const [firstFrameSrc, setFirstFrameSrc] = useState('');\r\n const [waiting, setWaiting] = useState(false);\r\n\r\n const videoId = `pb-cache-video-${index}`;\r\n const videoEleRef = useRef(null);\r\n\r\n const blur = useMemo(() => {\r\n return videoPostConfig?.mode === '2';\r\n }, [videoPostConfig]);\r\n\r\n const translateY = useMemo(() => {\r\n return videoPostConfig?.mode === '2'\r\n ? `translateY(-${50 + (videoPostConfig?.offsetTop ?? 0)}%) translate3d(0px, 0px, 0px)`\r\n : 'translateY(-50%)';\r\n }, [videoPostConfig]);\r\n\r\n const blurBgSrc = useMemo(() => {\r\n return rec?.video?.cover || firstFrameSrc;\r\n }, [firstFrameSrc, rec]);\r\n\r\n const blurStyle = useMemo(() => {\r\n return blur\r\n ? {\r\n filter: 'blur(10px)',\r\n transform: 'translate3d(0px, 0px, 0px) scale(1.2)'\r\n }\r\n : {};\r\n }, [blur]) as CSSProperties;\r\n\r\n const isBgColor = useMemo(() => {\r\n return videoPostConfig?.bgWay === '1';\r\n }, [videoPostConfig]);\r\n\r\n const bgStyle = useMemo(() => {\r\n return isBgColor && videoPostConfig?.bgColor ? { backgroundColor: videoPostConfig?.bgColor } : {};\r\n }, [videoPostConfig, isBgColor]) as CSSProperties;\r\n\r\n useEffect(() => {\r\n if (!videoRef) return;\r\n videoRef.muted = muted;\r\n }, [muted, videoRef]);\r\n\r\n const handlePlay = useCallback(() => {\r\n if (!videoRef) return;\r\n videoRef?.play();\r\n }, [videoRef]);\r\n\r\n const PAUSE_ICON = useIconLink('/pb_static/06f28a2025c74c1cb49be6767316d827.png');\r\n\r\n const handlePlaying = useCallback(() => {\r\n if (!videoRef) return;\r\n setWaiting(false);\r\n setIsLoadFinish(true);\r\n }, []);\r\n\r\n const handleStartPlay = useCallback(() => {\r\n if (!videoRef) return;\r\n setIsPauseVideo(false);\r\n const item = data[index];\r\n if (item && videoRef?.duration) {\r\n videoStartTime.current = videoRef?.currentTime || 0;\r\n const videoDuration = (videoRef?.duration ?? 0).toFixed(2);\r\n const videoCurrentTime = (videoRef?.currentTime ?? 0).toFixed(2);\r\n const playType = isFirstPlay ? '0' : '1';\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'playVideo',\r\n eventDescription: 'User played the video',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video?.title ?? '',\r\n playType,\r\n startTime: videoCurrentTime,\r\n videoDuration,\r\n contentTags: JSON.stringify(item?.video?.tags ?? []),\r\n position: index + '',\r\n contentFormat: 'video',\r\n traceInfo: item?.video?.traceInfo\r\n }\r\n });\r\n setIsFirstPlay(false);\r\n }\r\n }, [bffEventReport, data, index, isFirstPlay, videoRef]);\r\n\r\n const handLoadeddata = useCallback(() => {\r\n if (!videoRef || firstFrameSrc || !blur) return;\r\n videoRef.style.objectFit = 'contain';\r\n if (rec?.video?.cover || !canvasRef || !canvasRef.current || isBgColor) return;\r\n const setFrameImg = () => {\r\n const canvas = canvasRef?.current as any;\r\n const ctx = canvas.getContext('2d');\r\n const targetWidth = window?.innerWidth;\r\n const targetHeight = window?.innerHeight;\r\n canvas.height = targetHeight;\r\n canvas.width = targetWidth;\r\n ctx?.drawImage(videoRef, 0, 0, canvas.width, canvas.height);\r\n setFirstFrameSrc(canvas.toDataURL());\r\n };\r\n setFrameImg();\r\n setTimeout(() => {\r\n setFrameImg();\r\n }, 500);\r\n }, [videoRef, isBgColor, rec, firstFrameSrc, blur]);\r\n\r\n const handleLoadedmetadata = useCallback(() => {\r\n if (!videoRef) return;\r\n handleStartPlay();\r\n handLoadeddata();\r\n }, [videoRef, handLoadeddata, handleStartPlay]);\r\n\r\n const handleClickVideo = useCallback(\r\n (type?: 'pause' | 'start') => () => {\r\n if (!videoRef) return;\r\n\r\n if (!isLoadFinish) return;\r\n const isPause = videoRef?.paused;\r\n switch (type) {\r\n case 'start':\r\n if (!isPause) return;\r\n videoRef?.play();\r\n setIsPauseVideo(false);\r\n break;\r\n case 'pause':\r\n if (isPause) return;\r\n videoRef?.pause();\r\n setIsPauseVideo(true);\r\n break;\r\n default:\r\n if (isPause) {\r\n videoRef?.play();\r\n } else {\r\n videoRef?.pause();\r\n }\r\n setIsPauseVideo(!isPause);\r\n break;\r\n }\r\n },\r\n [isLoadFinish, videoRef]\r\n );\r\n\r\n const handlePause = useCallback(() => {\r\n if (!videoRef) return;\r\n if (activeIndex !== index) return;\r\n const item = data[index];\r\n const videoDuration = (videoRef?.duration ?? 0).toFixed(2);\r\n const videoCurrentTime = (videoRef?.currentTime ?? 0).toFixed(2);\r\n if (videoRef?.duration) {\r\n const playDuration = (videoRef?.currentTime - videoStartTime.current).toFixed(2);\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'playOverVideo',\r\n eventDescription: 'User finished playing the video',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video?.title ?? '',\r\n endTime: videoCurrentTime,\r\n videoDuration,\r\n playDuration,\r\n contentTags: JSON.stringify(item?.video?.tags ?? []),\r\n position: index + '',\r\n contentFormat: 'video',\r\n traceInfo: item?.video?.traceInfo\r\n }\r\n });\r\n }\r\n }, [data, index, bffEventReport, videoRef, activeIndex]);\r\n\r\n const handleWaiting = useCallback(() => {\r\n setWaiting(true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!isActive || !videoRef) return;\r\n const videoSrc = rec?.video!.url;\r\n if (!videoSrc) return;\r\n const Hls = window?.Hls as any;\r\n let hls = null;\r\n if (videoSrc.includes('.m3u8') && Hls && Hls.isSupported()) {\r\n hls = new Hls();\r\n hls.loadSource(videoSrc);\r\n hls.attachMedia(videoRef);\r\n hls.on(Hls.Events.MANIFEST_PARSED, function () {\r\n videoRef?.play();\r\n });\r\n } else {\r\n videoRef.src = videoSrc;\r\n }\r\n const videoPlayerWrapperNode = document.querySelector(`#${videoId}`);\r\n const dom = document.querySelector('#player-container-id') as Element;\r\n const dom2 = document.querySelector('#player-container-id-copy') as Element;\r\n if (!dom && !dom2) return;\r\n videoPlayerWrapperNode?.appendChild(dom || dom2);\r\n videoRef.setAttribute('x5-playsinline', 'true');\r\n videoRef.setAttribute('webkit-playsinline', 'true');\r\n videoRef?.addEventListener('loadedmetadata', handleLoadedmetadata);\r\n videoRef?.addEventListener('loadeddata', handLoadeddata);\r\n videoRef?.addEventListener('play', handleStartPlay);\r\n videoRef?.addEventListener('playing', handlePlaying);\r\n videoRef?.addEventListener('pause', handlePause);\r\n videoRef?.addEventListener('ended', handlePlay);\r\n videoRef?.addEventListener('canplay', handlePlay);\r\n videoRef?.addEventListener('waiting', handleWaiting);\r\n\r\n return () => {\r\n if (hls) hls?.destroy();\r\n setIsLoadFinish(false);\r\n dom2?.appendChild(dom);\r\n videoRef?.removeEventListener('loadedmetadata', handleLoadedmetadata);\r\n videoRef?.removeEventListener('loadeddata', handLoadeddata);\r\n videoRef?.removeEventListener('play', handleStartPlay);\r\n videoRef?.removeEventListener('playing', handlePlaying);\r\n videoRef?.removeEventListener('pause', handlePause);\r\n videoRef?.removeEventListener('ended', handlePlay);\r\n videoRef?.removeEventListener('canplay', handlePlay);\r\n videoRef?.removeEventListener('waiting', handleWaiting);\r\n };\r\n }, [isActive, videoId, rec, videoRef]);\r\n\r\n useEffect(() => {\r\n if (!videoRef || !isLoadFinish) return;\r\n if (isActive) {\r\n bffFbReport?.({\r\n eventName: 'ViewContent'\r\n });\r\n videoRef?.play();\r\n } else {\r\n videoRef?.pause();\r\n }\r\n }, [isActive, isLoadFinish, videoRef]);\r\n\r\n /*\r\n 打开/关闭hashtag暂停/播放视频\r\n */\r\n useEffect(() => {\r\n if (!isActive || !videoRef) return;\r\n const isPause = videoRef?.paused;\r\n if (!isPause && openHashtag) {\r\n videoRef?.pause();\r\n } else if (!openHashtag) {\r\n videoRef?.play();\r\n }\r\n }, [openHashtag, isActive, videoRef]);\r\n\r\n useEffect(() => {\r\n if (!isActive) return;\r\n const onShow = () => {\r\n handleClickVideo('start')();\r\n bffFbReport?.({\r\n eventName: 'ViewContent'\r\n });\r\n };\r\n const onHide = handleClickVideo('pause');\r\n SXP_EVENT_BUS.on(SXP_EVENT_TYPE.PAGE_DID_SHOW, onShow);\r\n SXP_EVENT_BUS.on(SXP_EVENT_TYPE.PAGE_DID_HIDE, onHide);\r\n return () => {\r\n SXP_EVENT_BUS.off(SXP_EVENT_TYPE.PAGE_DID_SHOW, onShow);\r\n SXP_EVENT_BUS.off(SXP_EVENT_TYPE.PAGE_DID_HIDE, onHide);\r\n };\r\n }, [handleClickVideo, isActive]);\r\n\r\n const renderPoster = useMemo(() => {\r\n if (!sxpParameter?.placeholder_image || isLoadFinish) {\r\n return null;\r\n }\r\n\r\n return (\r\n <img\r\n style={{\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover'\r\n }}\r\n src={sxpParameter?.placeholder_image}\r\n alt='placeholder image'\r\n />\r\n );\r\n }, [isLoadFinish, sxpParameter?.placeholder_image]);\r\n\r\n const renderLoading = useMemo(() => {\r\n if (!waiting || !isLoadFinish) return;\r\n return (\r\n <img\r\n style={{\r\n position: 'absolute',\r\n top: '50%',\r\n left: 0,\r\n right: 0,\r\n transform: 'translateY(-100%)',\r\n margin: 'auto',\r\n width: '50px',\r\n height: '50px',\r\n objectFit: 'contain'\r\n }}\r\n src={loading_gif}\r\n alt='placeholder image'\r\n />\r\n );\r\n }, [waiting, isLoadFinish]);\r\n\r\n useEffect(() => {\r\n if (!videoRef) return;\r\n\r\n const handleBeforeUnload = () => {\r\n if (activeIndex === index && rec?.video?.url && videoRef && !isPauseVideo) {\r\n handleClickVideo('pause')();\r\n }\r\n };\r\n\r\n window.addEventListener('beforeunload', handleBeforeUnload);\r\n\r\n return () => {\r\n window.removeEventListener('beforeunload', handleBeforeUnload);\r\n };\r\n }, [activeIndex, index, rec, videoRef, handleClickVideo, isPauseVideo]);\r\n\r\n if (!rec?.video) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n {blur ? (\r\n <div\r\n className='video-container'\r\n key={rec?.video.itemId}\r\n onClick={handleClickVideo()}\r\n style={{\r\n position: 'relative',\r\n width: '100%',\r\n height,\r\n overflow: 'hidden',\r\n ...bgStyle\r\n }}\r\n >\r\n {!isBgColor && isLoadFinish && blurBgSrc && (\r\n <FormatImage\r\n src={blurBgSrc}\r\n style={{\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n ...blurStyle\r\n }}\r\n />\r\n )}\r\n\r\n <canvas ref={canvasRef} style={{ display: 'none' }} />\r\n <div\r\n style={{\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n top: '50%',\r\n transform: translateY,\r\n left: 0,\r\n right: 0\r\n }}\r\n >\r\n <div style={{ position: 'relative', width: '100%', height: '100%' }}>\r\n <div\r\n className='n-full-screen'\r\n ref={videoEleRef}\r\n id={videoId}\r\n style={{ width: '100%', height: '100%' }}\r\n ></div>\r\n\r\n <img\r\n hidden={!isPauseVideo}\r\n className='clc-pb-video-pause'\r\n alt='pause'\r\n src={videoPlayIcon ?? PAUSE_ICON}\r\n />\r\n </div>\r\n </div>\r\n {renderPoster}\r\n {renderLoading}\r\n </div>\r\n ) : (\r\n <div\r\n className='video-container'\r\n key={rec?.video.itemId}\r\n style={{\r\n position: 'relative',\r\n width: '100%',\r\n height,\r\n overflow: 'hidden'\r\n }}\r\n onClick={handleClickVideo()}\r\n >\r\n <div className='n-full-screen' ref={videoEleRef} id={videoId} style={{ width: '100%', height: '100%' }}></div>\r\n {renderPoster}\r\n {renderLoading}\r\n <img hidden={!isPauseVideo} className='clc-pb-video-pause' src={videoPlayIcon ?? PAUSE_ICON} alt='pause' />\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default memo(VideoWidget);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-27 19:02:59\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-01-24 10:30:13\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\ToggleButton\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC, MouseEventHandler, memo, useState } from 'react';\r\n\r\ninterface IToggleButtonProps {\r\n activeIcon?: string;\r\n unactiveIcon?: string;\r\n onChange?: (result: boolean) => void;\r\n defaultValue?: boolean;\r\n style?: CSSProperties;\r\n}\r\n\r\nconst ToggleButton: FC<IToggleButtonProps> = ({ defaultValue, activeIcon, unactiveIcon, onChange, style }) => {\r\n const [isTrue, setIsTure] = useState(defaultValue);\r\n\r\n const handleClick: MouseEventHandler<HTMLButtonElement> = (e) => {\r\n e.stopPropagation();\r\n const result = !isTrue;\r\n setIsTure(result);\r\n onChange?.(result);\r\n };\r\n\r\n return (\r\n <button style={style} aria-label='toggle button' className={'pb-toggle-button'} onClick={handleClick}>\r\n <img className={'pb-toggle-button-icon'} alt='toggle image' src={isTrue ? activeIcon : unactiveIcon} />\r\n </button>\r\n );\r\n};\r\n\r\nexport default memo(ToggleButton);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-15 19:03:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-03-13 10:53:56\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\FingerSwipeTip\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC, useEffect, useMemo, useState } from 'react';\r\nimport { useIconLink } from '../useIconLink';\r\nimport { useEditor } from '@/core/hooks';\r\n\r\ninterface IProps {\r\n imageUrl?: string;\r\n style?: CSSProperties;\r\n}\r\n\r\nconst FingerSwipeTip: FC<IProps> = ({ imageUrl, style }) => {\r\n const [show, setShow] = useState(true);\r\n const {\r\n schema: { sxpPageConf }\r\n } = useEditor();\r\n useEffect(() => {\r\n setTimeout(() => {\r\n setShow(false);\r\n }, 2000);\r\n }, []);\r\n\r\n const FINGER_SWIPE_ICON = useIconLink('/pb_static/finger-swipe-tip.29dc3a48a3c746c906ea..png');\r\n\r\n const animationCls = useMemo(() => {\r\n return show ? 'pb-fadeIn' : 'pb-fadeOut';\r\n }, [show]);\r\n\r\n return (\r\n <div hidden={!show} className={`pb-finger-wrap ${animationCls}`} style={style}>\r\n <img src={imageUrl || FINGER_SWIPE_ICON} alt='finger swiper' />\r\n </div>\r\n );\r\n};\r\n\r\nexport default FingerSwipeTip;\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-20 10:27:31\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-24 10:37:19\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\PictureGroup\\Picture.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, useMemo } from 'react';\r\nimport FormatImage from '../FormatImage';\r\nimport { postConfigType } from '..';\r\n\r\ninterface IPictureProps {\r\n src: string;\r\n height?: number;\r\n imgUrlsPostConfig?: postConfigType;\r\n onShowFirstImage?: () => void;\r\n}\r\nconst Picture = (props: IPictureProps) => {\r\n const { src, height, imgUrlsPostConfig, onShowFirstImage } = props;\r\n\r\n const blur = useMemo(() => {\r\n return imgUrlsPostConfig?.mode === '2';\r\n }, [imgUrlsPostConfig]);\r\n\r\n const translateY = useMemo(() => {\r\n return imgUrlsPostConfig?.mode === '2'\r\n ? `translateY(-${50 + (imgUrlsPostConfig?.offsetTop ?? 0)}%) translate3d(0px, 0px, 0px)`\r\n : 'translateY(-50%)';\r\n }, [imgUrlsPostConfig]);\r\n\r\n const blurStyle = useMemo(() => {\r\n return blur\r\n ? {\r\n filter: 'blur(10px)',\r\n transform: 'translate3d(0px, 0px, 0px) scale(1.2)'\r\n }\r\n : {};\r\n }, [blur]) as CSSProperties;\r\n\r\n const isBgColor = useMemo(() => {\r\n return imgUrlsPostConfig?.bgWay === '1';\r\n }, [imgUrlsPostConfig]);\r\n\r\n const bgStyle = useMemo(() => {\r\n return isBgColor && imgUrlsPostConfig?.bgColor ? { backgroundColor: imgUrlsPostConfig?.bgColor } : {};\r\n }, [imgUrlsPostConfig, isBgColor]) as CSSProperties;\r\n\r\n return (\r\n <div\r\n style={{\r\n overflow: 'hidden',\r\n height,\r\n width: '100%',\r\n position: 'relative',\r\n ...bgStyle\r\n }}\r\n >\r\n {(!blur || !isBgColor) && (\r\n <FormatImage\r\n src={src}\r\n style={{\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n ...blurStyle\r\n }}\r\n onLoad={onShowFirstImage}\r\n />\r\n )}\r\n\r\n {blur && (\r\n <FormatImage\r\n src={src}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'contain',\r\n position: 'absolute',\r\n top: '50%',\r\n transform: translateY,\r\n left: 0,\r\n right: 0\r\n }}\r\n onLoad={onShowFirstImage}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\nexport default Picture;\r\n","/*\r\n * @Author: lewinlu@chatlabs.com\r\n * @Date: 2024-01-03 14:39:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-07 14:05:08\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\PictureGroup\\index.tsx\r\n */\r\nimport React, { FC, memo, useCallback, useEffect, useRef, useState } from 'react';\r\nimport { Autoplay, Pagination } from 'swiper/modules';\r\nimport { Swiper, SwiperSlide, useSwiperSlide } from 'swiper/react';\r\nimport { RecItemType } from '../typing';\r\nimport { postConfigType } from '..';\r\nimport Picture from './Picture';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\ninterface IPictureGroupProps {\r\n imgUrls?: string[];\r\n width: number;\r\n height: number;\r\n rec: RecItemType;\r\n index: number;\r\n onReportViewImageEnd: (rec: RecItemType) => void;\r\n onViewImageStartEvent: (index: number) => void;\r\n imgUrlsPostConfig?: postConfigType;\r\n}\r\n\r\nconst PictureGroup: FC<IPictureGroupProps> = ({\r\n imgUrls,\r\n width,\r\n height,\r\n rec,\r\n index,\r\n onReportViewImageEnd,\r\n onViewImageStartEvent,\r\n imgUrlsPostConfig\r\n}) => {\r\n const ref = useRef<any>();\r\n const { isActive } = useSwiperSlide();\r\n const { sxpParameter, openHashtag } = useSxpDataSource();\r\n const [isLoad, setIsLoad] = useState(false);\r\n useEffect(() => {\r\n if (isLoad && isActive) {\r\n ref?.current && ref.current.swiper.autoplay.start();\r\n if (openHashtag) {\r\n onReportViewImageEnd(rec);\r\n } else {\r\n onViewImageStartEvent(index);\r\n }\r\n } else {\r\n ref?.current && ref.current.swiper.autoplay.stop();\r\n }\r\n }, [rec, isActive, onReportViewImageEnd, openHashtag, index, onViewImageStartEvent, isLoad]);\r\n\r\n const showFirstImageFn = useCallback(() => {\r\n if (!isLoad) {\r\n setIsLoad(true);\r\n }\r\n }, [isLoad]);\r\n\r\n // if (!isActive) {\r\n // return <img src={sxpParameter?.placeholder_image} style={{ width, height, objectFit: 'cover' }} />;\r\n // }\r\n\r\n return (\r\n <Swiper\r\n ref={ref}\r\n defaultValue={0}\r\n direction={'horizontal'}\r\n modules={[Pagination, Autoplay]}\r\n pagination={{ clickable: true, bulletActiveClass: 'swipe-item-active-bullet' }}\r\n height={height}\r\n loop\r\n autoplay={{ delay: (imgUrlsPostConfig?.delay ?? 3) * 1000 }}\r\n >\r\n {imgUrls?.map((url, index) => {\r\n return (\r\n <SwiperSlide key={index}>\r\n <Picture\r\n src={!isLoad && index > 0 ? '' : url}\r\n height={height}\r\n imgUrlsPostConfig={imgUrlsPostConfig}\r\n onShowFirstImage={showFirstImageFn}\r\n />\r\n </SwiperSlide>\r\n );\r\n })}\r\n </Swiper>\r\n );\r\n};\r\n\r\nexport default memo(PictureGroup);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-15 19:03:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-26 18:52:46\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Hashtag\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC, memo, useMemo, useState } from 'react';\r\nimport { SwiperSlide } from 'swiper/react';\r\nimport { RecItemType } from '../typing';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport Scroll from '@/materials/sxp/template/components/Scroll';\r\nimport { setFontForText } from '@/core/utils/tool';\r\n\r\ninterface IHashtagProps {\r\n tags: string[];\r\n itemId: string;\r\n itemType: 'VIDEO' | 'PRODUCT' | null;\r\n index: number;\r\n rec: RecItemType;\r\n hashTagStyle?: CSSProperties;\r\n}\r\n\r\nconst Hashtag: FC<IHashtagProps> = ({ tags, itemId, itemType, index, rec, hashTagStyle }) => {\r\n const [isShowMore, setIsShowMore] = useState(false);\r\n const { setWaterFallData, setOpenHashtag, setCacheActiveIndex, waterFallData, setIsFromHashtag } = useSxpDataSource();\r\n const handleClickTag = (data: string) => {\r\n if (!waterFallData) {\r\n setCacheActiveIndex?.(index);\r\n } else {\r\n setIsFromHashtag?.(true);\r\n }\r\n if (itemType) {\r\n setWaterFallData?.({\r\n hashTag: data,\r\n itemId,\r\n itemType,\r\n rec\r\n });\r\n } else {\r\n setWaterFallData?.({\r\n hashTag: data,\r\n rec\r\n });\r\n }\r\n\r\n setOpenHashtag?.(true);\r\n };\r\n\r\n const renderExpandButton = useMemo(() => {\r\n if (tags.length <= 6) {\r\n return null;\r\n }\r\n return (\r\n <span\r\n style={{ textDecoration: 'underline', cursor: 'pointer', color: '#fff' }}\r\n onClick={() => setIsShowMore(!isShowMore)}\r\n >\r\n {isShowMore ? 'show less' : 'show more'}\r\n </span>\r\n );\r\n }, [isShowMore, tags]);\r\n\r\n return (\r\n <div className='clc-sxp-bottom-hashtag'>\r\n <Scroll>\r\n {tags?.map((item: any, index: any) => (\r\n <SwiperSlide\r\n key={index}\r\n hidden={!isShowMore ? index >= 6 : false}\r\n className='clc-sxp-bottom-hashtag-item'\r\n style={hashTagStyle}\r\n onClick={() => handleClickTag(item)}\r\n >\r\n <div dangerouslySetInnerHTML={{ __html: setFontForText(`#${item}`, hashTagStyle) }}></div>\r\n </SwiperSlide>\r\n ))}\r\n </Scroll>\r\n </div>\r\n );\r\n};\r\nexport default memo(Hashtag);\r\n","var img = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAbtJREFUeF7t2DFKxFAQxvHv6xTxCoKNiAuCna2X2NY7eAE9hYdwj2BjZ2ulYLW9pQcYDWyxBIK7ZN7MNyapk/D+v8zC20dM/OLE+zEDzBMwcYH5J1BpAMzsAMAJyU+vdZeZADN7AHAH4BjAC8kbD4QSAJv4+17wFcm3sQjyAGbWhXdff/takzwdG989Lw0wEN+te0ly9a8BIuJlJyAqXhIgMl4OIDpeCiAjXgYgK14CIDM+HSA7PhVgYHvrusnZZaOUshNUiU+ZAKX4cAC1+FAAxfgwANX4EADl+OYA6vFNASrENwOoEt8EoFK8O0C1eFcAMzsE8AXgqLcHdzvA3GVvv+89bv8FzOwcwEdvASuSy30XFXm/G0C3aDN7BXBdCcEb4ALAE4BFFQRXgM0UlEJwB6iG0ASgEkIzgCoITQEqIDQHUEcIAVBGCANQRQgFUEQIB1BDSAFQQkgDUEFIBVBASAfIRpAAyESQAchCkALIQJADiEaQBIhEkAWIQpAG+ANh8Xvk/j72CF0eYABhDeCS5PckALYQbgGcAXgm+Tg2vnu+xAR4hA69YwZoqVvh3fMEVPhKLdc4+Qn4AXwYBFBN2dYpAAAAAElFTkSuQmCC\";\n export default img;","import { get, cloneDeep } from 'lodash';\r\nimport React, { memo, useMemo } from 'react';\r\nimport { useDataSource } from '../hooks';\r\nimport { IMaterialOptions } from '../create';\r\n\r\nfunction withBindDataSource(Component: any): React.NamedExoticComponent<any> & { extend?: IMaterialOptions<any> } {\r\n // 处理函数事件中的数据源\r\n\r\n return memo(function (props: any) {\r\n const { $store } = useDataSource();\r\n const handleDataSourceByEvent = (value: string) => {\r\n let res = value;\r\n const dataArr = value.match(/{{.*?}}/g);\r\n\r\n if (dataArr?.length) {\r\n dataArr.forEach((item) => {\r\n item.replace(/{{\\s*([\\w.]+)\\s*}}/g, (match, p) => {\r\n if (p) {\r\n const v = get($store, p);\r\n res = res.replace(item, v);\r\n return v;\r\n }\r\n });\r\n });\r\n }\r\n return res;\r\n };\r\n const clonedProps = useMemo(() => {\r\n const { bindDatas, ...cloneProps } = props;\r\n bindDatas?.forEach?.((d: { propKey?: string; dataPath?: string }) => {\r\n if (d?.propKey && d?.dataPath) {\r\n const { propKey, dataPath } = d;\r\n dataPath.replace(/{{\\s*([\\w.]+)\\s*}}/g, (match, p) => {\r\n if (p) {\r\n const v = get($store, p) ?? props[propKey] ?? '';\r\n cloneProps[propKey] = v;\r\n return v;\r\n }\r\n });\r\n }\r\n });\r\n if (cloneProps) {\r\n cloneProps.eventMap = {};\r\n const eventObj = cloneDeep(cloneProps.event) || {};\r\n for (const key in eventObj) {\r\n if (Object.prototype.hasOwnProperty.call(eventObj, key)) {\r\n try {\r\n eventObj[key].value = handleDataSourceByEvent(eventObj[key].value);\r\n cloneProps.eventMap[key] = new Function(eventObj[key].value);\r\n } catch (error) {}\r\n }\r\n }\r\n }\r\n if (cloneProps?.event?.onClick?.linkType) {\r\n cloneProps.style.cursor = 'pointer';\r\n }\r\n return cloneProps;\r\n }, [$store, props]);\r\n\r\n return <Component {...clonedProps} {...clonedProps.eventMap} />;\r\n });\r\n}\r\n\r\nexport default withBindDataSource;\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-26 16:11:34\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-04-18 14:36:53\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\RenderCard.tsx\r\n *\r\n */\r\nimport React, { memo, FC, useMemo } from 'react';\r\nimport './index.less';\r\nimport { RecItemType } from './typing';\r\nimport withBindDataSource from '@/core/hoc/withBindDataSource';\r\nimport { useEditor } from '@/core/hooks';\r\n\r\ninterface IRenderCardProps {\r\n index: number;\r\n rec: RecItemType;\r\n tempMap?: Record<string, any>;\r\n resolver: any;\r\n}\r\n\r\nconst RenderCard: FC<IRenderCardProps> = ({ rec, index, tempMap, resolver }) => {\r\n const { schema } = useEditor();\r\n const renderComp = useMemo(() => {\r\n if (!rec?.video) return null;\r\n let cta = null;\r\n if (rec?.video?.bindProducts?.length) {\r\n cta = '多商品CTA';\r\n } else if (rec?.video?.bindProduct) {\r\n cta = '商品CTA';\r\n } else {\r\n cta = rec?.video?.bindCta?.itemId;\r\n }\r\n const value = tempMap?.[cta];\r\n if (\r\n (value?.item?.type === 'CommodityDiro' && !rec?.video?.bindProduct) ||\r\n (value?.item?.type === 'Commodity' && !rec?.video?.bindProduct) ||\r\n (value?.item?.type === 'CommodityDiroNew' && !rec?.video?.bindProduct) ||\r\n (value?.item?.type === 'MultiCommodity' && !rec?.video?.bindProducts?.length) ||\r\n (value?.item?.type === 'MultiCommodityDiro' && !rec?.video?.bindProducts?.length) ||\r\n (value?.item?.type === 'MultiCommodityDiroNew' && !rec?.video?.bindProducts?.length)\r\n ) {\r\n return null;\r\n }\r\n if (value && resolver) {\r\n const t = resolver[value?.item?.type];\r\n const Component = withBindDataSource(t);\r\n const defaulSetting = t?.extend?.defaulSetting;\r\n const isExternalLink = value?.item?.event?.onClick?.linkType === 'externalLink';\r\n return (\r\n <Component\r\n style={{\r\n ...defaulSetting?.style,\r\n ...value?.item?.style,\r\n zIndex: 50,\r\n marginLeft: '20px',\r\n boxSizing: 'border-box',\r\n transform: 'translate3d(0px, 0px, 0px)'\r\n }}\r\n textStyle={{ ...defaulSetting?.textStyle, ...value?.item?.textStyle }}\r\n bindDatas={value?.item?.bindDatas ?? []}\r\n {...defaulSetting?.props}\r\n {...value?.item?.props}\r\n event={value?.item?.event || {}}\r\n schema={schema}\r\n id={value?.id}\r\n key={value?.id}\r\n recData={rec}\r\n isExternalLink={isExternalLink}\r\n index={index}\r\n />\r\n );\r\n } else {\r\n return null;\r\n }\r\n }, [rec, resolver, tempMap, schema]);\r\n return <>{renderComp}</>;\r\n};\r\n\r\nexport default memo(RenderCard);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-03-26 10:07:41\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-23 14:31:12\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Nudge\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, FC } from 'react';\r\n\r\ninterface IProps {\r\n nudge?: {\r\n isOpen: boolean;\r\n icon?: string;\r\n backgroundColor: string;\r\n content?: string;\r\n marginBottom: number;\r\n borderRadius: number;\r\n size: {\r\n height: number;\r\n width: number;\r\n };\r\n textStyle: {\r\n color: string;\r\n fontFamily: string;\r\n fontSize: number;\r\n fontStyle: string;\r\n textAlign: string;\r\n };\r\n };\r\n}\r\n\r\nconst Nudge: FC<IProps> = ({ nudge }) => {\r\n return (\r\n <>\r\n {nudge?.isOpen && (\r\n <div\r\n className='clc-sxp-bottom-nudge'\r\n style={{\r\n marginBottom: nudge?.marginBottom ?? 5,\r\n width: nudge?.size?.width ?? 212,\r\n height: nudge?.size?.height ?? 38,\r\n backgroundColor: nudge?.backgroundColor,\r\n borderRadius: nudge?.borderRadius ?? 4\r\n }}\r\n >\r\n {nudge?.icon ? (\r\n <img src={nudge.icon} alt='nudge icon' style={{ height: '100%', objectFit: 'cover', flexShrink: 0 }} />\r\n ) : null}\r\n <p\r\n style={{\r\n ...(nudge?.textStyle as CSSProperties),\r\n textWrap: 'nowrap',\r\n textOverflow: 'ellipsis',\r\n overflow: 'hidden',\r\n whiteSpace: 'nowrap',\r\n flex: 1,\r\n marginBottom: 0\r\n }}\r\n >\r\n {nudge?.content ?? ''}\r\n </p>\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default Nudge;\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-04-29 16:32:21\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-20 10:53:08\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Tagbar.tsx\r\n *\r\n */\r\nimport React, { FC, memo, useMemo, useState } from 'react';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\nimport SXP_EVENT_BUS, { SXP_EVENT_TYPE } from '@/core/utils/event';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport { DEFAULT_TAG } from '@/core/context/SxpDataSourceProvider';\r\n\r\ninterface IProps {\r\n tagList?: string[];\r\n setActiveIndex?: React.Dispatch<React.SetStateAction<number>>;\r\n}\r\n\r\nconst Tagbar: FC<IProps> = ({ tagList = [], setActiveIndex }) => {\r\n const {\r\n getRecommendVideos,\r\n setRtcList,\r\n setCacheRtcList,\r\n setCacheActiveIndex,\r\n setLoading,\r\n swiperRef,\r\n waterFallData,\r\n bffEventReport,\r\n selectTag,\r\n setSelectTag\r\n } = useSxpDataSource();\r\n const { backMainFeed } = useEventReport();\r\n const realTagList = useMemo(() => {\r\n return [DEFAULT_TAG, ...tagList];\r\n }, [tagList]);\r\n\r\n const handleSelectTag = (tag: string) => () => {\r\n if (tag === selectTag) return;\r\n if (tag !== 'FOR U') {\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'clickThemeTagsViewContents',\r\n eventDescription: 'click Theme Tags View Contents',\r\n themeTags: `['${tag}']`\r\n }\r\n });\r\n } else {\r\n backMainFeed('theme', tag, selectTag);\r\n }\r\n let themeTag: string | undefined;\r\n if (tag !== DEFAULT_TAG) {\r\n themeTag = tag;\r\n }\r\n setLoading?.(true);\r\n getRecommendVideos?.({ themeTag })\r\n .then((res) => {\r\n SXP_EVENT_BUS.emit(SXP_EVENT_TYPE.CHANGE_THEME_TAG, themeTag);\r\n setRtcList?.(res?.recList ?? []);\r\n setCacheRtcList?.(res?.recList ?? []);\r\n setActiveIndex?.(0);\r\n setCacheActiveIndex?.(0);\r\n swiperRef?.current?.swiper?.slideTo(0);\r\n })\r\n .finally(() => {\r\n setLoading?.(false);\r\n });\r\n\r\n setSelectTag?.(tag);\r\n };\r\n\r\n if (waterFallData || tagList.length <= 0) return null;\r\n\r\n return (\r\n <div className='clc-sxp-tagbar'>\r\n <ul className='clc-sxp-tagbar-list' style={{ margin: 'auto', gap: 24 }}>\r\n {realTagList.map((tag) => {\r\n return (\r\n <li\r\n className={`clc-sxp-tagbar-list-item ${tag === selectTag ? 'clc-sxp-tagbar-list-item-active' : ''}`}\r\n key={tag}\r\n onClick={handleSelectTag(tag)}\r\n >\r\n {tag}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(Tagbar);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-15 19:03:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-27 15:47:52\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\index.tsx\r\n *\r\n */\r\nimport React, { CSSProperties, useMemo, useEffect, useState, FC, useRef, useCallback } from 'react';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport ExpandableText from './ExpandableText';\r\nimport LikeButton from './LikeButton';\r\nimport { RecItemType } from './typing';\r\nimport VideoWidget from './VideoWidget';\r\nimport ToggleButton from './ToggleButton';\r\nimport FingerSwipeTip from './FingerSwipeTip';\r\nimport PictureGroup from './PictureGroup';\r\nimport Hashtag from './Hashtag';\r\nimport Navbar from './Navbar';\r\nimport left from './left.png';\r\nimport RenderCard from './RenderCard';\r\nimport { useIconLink } from './useIconLink';\r\nimport WaterFall from './WaterFall';\r\nimport Nudge from './Nudge';\r\nimport SXP_EVENT_BUS, { SXP_EVENT_TYPE } from '@/core/utils/event';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport { refreshFeSessionId } from '@/core/utils/sessionStore';\r\nimport './index.less';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport withBindDataSource from '@/core/hoc/withBindDataSource';\r\nimport Tagbar from './Tagbar';\r\nimport { getFeUserId } from '@/core/utils/localStore';\r\nimport Consent from '../Consent';\r\n\r\nexport type postConfigType = {\r\n mode?: '1' | '2';\r\n offsetTop?: number;\r\n delay?: number;\r\n bgWay?: '1' | '2';\r\n bgColor?: string;\r\n};\r\n\r\nexport interface ISxpPageRenderProps {\r\n globalConfig?: {\r\n isShowLogo?: boolean;\r\n isShowCTA?: boolean;\r\n logoUrl?: string;\r\n muteIcon?: string;\r\n unMuteIcon?: string;\r\n likeIcon?: string;\r\n unlikeIcon?: string;\r\n color?: string;\r\n productPost?: any[];\r\n muteIconX?: number;\r\n muteIconY?: number;\r\n likeIconX?: number;\r\n likeIconY?: number;\r\n isShowLike?: boolean;\r\n swipeTipIcon?: string;\r\n hashTag?: any[];\r\n isOpenTextShadow?: boolean;\r\n videoPost?: postConfigType;\r\n imgUrlsPost?: postConfigType;\r\n muteIconXPosit?: string;\r\n muteIconYPosit?: string;\r\n likeIconYPosit?: string;\r\n likeIconXPosit?: string;\r\n swipeTipOffset?: number;\r\n consent?: any[];\r\n videoPlayIcon?: string;\r\n };\r\n descStyle?: CSSProperties;\r\n tipText?: {\r\n foldText: string;\r\n unfoldText: string;\r\n };\r\n nudge?: {\r\n isOpen: boolean;\r\n icon?: string;\r\n backgroundColor: string;\r\n content?: string;\r\n marginBottom: number;\r\n borderRadius: number;\r\n size: {\r\n height: number;\r\n width: number;\r\n };\r\n textStyle: {\r\n color: string;\r\n fontFamily: string;\r\n fontSize: number;\r\n fontStyle: string;\r\n textAlign: string;\r\n };\r\n };\r\n containerHeight?: number;\r\n containerWidth?: number;\r\n tempMap?: Record<string, any>;\r\n data?: RecItemType[];\r\n tagList?: string[];\r\n resolver: any;\r\n ctaType?: string;\r\n _schema?: any;\r\n hashTagStyle?: CSSProperties;\r\n licenseUrl?: string;\r\n}\r\n\r\nconst SxpPageRender: FC<ISxpPageRenderProps> = ({\r\n globalConfig,\r\n descStyle,\r\n containerHeight = window.innerHeight,\r\n containerWidth = window.innerWidth,\r\n tempMap,\r\n resolver,\r\n data = [],\r\n ctaType,\r\n tipText,\r\n nudge,\r\n _schema,\r\n hashTagStyle,\r\n tagList = [],\r\n licenseUrl\r\n}) => {\r\n const { schema } = useEditor();\r\n const [activeIndex, setActiveIndex] = useState(0);\r\n const viewImageStartTime = useRef(0);\r\n const [isInit, setIsInit] = useState(false);\r\n const [isMuted, setIsMuted] = useState(true);\r\n const viewTime = useRef<any>();\r\n const [isLoadMore, setIsLoadMore] = useState(false);\r\n const [isShowMore, setIsShowMore] = useState(false);\r\n const {\r\n loadVideos,\r\n bffEventReport,\r\n loading,\r\n setPopupDetailData,\r\n ctaEvent,\r\n swiperRef,\r\n waterFallData,\r\n setOpenHashtag,\r\n appDomain,\r\n openHashtag,\r\n loadingImage,\r\n isFromHashtag,\r\n popupDetailData,\r\n bffFbReport,\r\n curTime,\r\n h5EnterLink,\r\n isShowConsent,\r\n selectTag\r\n } = useSxpDataSource();\r\n const { backMainFeed } = useEventReport();\r\n const videoRef = useRef<any>();\r\n const { productView } = useEventReport();\r\n const isShowFingerTip = useMemo(() => {\r\n return data.length > 0 && !loading && getFeUserId();\r\n }, [data, loading]);\r\n\r\n useEffect(() => {\r\n refreshFeSessionId();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (data?.length > 0) {\r\n const now = new Date();\r\n viewTime.current = now;\r\n bffFbReport?.({\r\n eventName: 'PageView'\r\n });\r\n }\r\n }, [data?.length]);\r\n\r\n const handleH5EnterLink = useCallback(() => {\r\n refreshFeSessionId();\r\n h5EnterLink?.();\r\n if (data.length > 0) {\r\n const now = new Date();\r\n viewTime.current = now;\r\n bffFbReport?.({\r\n eventName: 'PageView'\r\n });\r\n }\r\n }, [data.length, bffFbReport, h5EnterLink]);\r\n\r\n const firstRef = useRef<any>();\r\n\r\n useEffect(() => {\r\n if (!firstRef.current && videoRef?.current && data?.length > 0) {\r\n firstRef.current = true;\r\n if (data?.[0]?.video?.url) {\r\n videoRef.current.src = data?.[0]?.video?.url;\r\n }\r\n }\r\n }, [videoRef, data]);\r\n\r\n useEffect(() => {\r\n const index =\r\n data?.findIndex((item: RecItemType) => {\r\n if (ctaType === '多商品CTA') {\r\n return item?.video?.bindProducts && item?.video?.bindProducts?.length > 0;\r\n } else if (ctaType === '商品CTA') {\r\n return item?.video?.bindProduct;\r\n } else {\r\n return item?.video?.bindCta?.itemId === ctaType && (item?.video?.url || item?.video?.imgUrls?.length);\r\n }\r\n }) || 0;\r\n swiperRef?.current?.swiper.slideTo(index);\r\n }, [ctaType, swiperRef]);\r\n\r\n useEffect(() => {\r\n const item = data?.[activeIndex];\r\n const visibleChange = () => {\r\n const repCond = !openHashtag && !isShowConsent;\r\n if (document.visibilityState === 'hidden') {\r\n // 当用户导航到新页面、切换标签页、关闭标签页、最小化或关闭浏览器、刷新原页面(即离开原页面时),或者在移动设备上从浏览器切换到不同的应用程序时\r\n // 移动端h5直接杀掉浏览器或宿主app时不会触发,pc端直接杀掉标签页时能触发\r\n if (repCond) {\r\n SXP_EVENT_BUS.emit(SXP_EVENT_TYPE.PAGE_DID_HIDE, item);\r\n handleReportViewImageEnd(item);\r\n handleReportProductView(item);\r\n }\r\n let fromKName = '';\r\n if (popupDetailData && (item?.video?.bindProducts?.length || item?.video?.bindProduct)) {\r\n fromKName = 'pdpPage';\r\n } else if (popupDetailData && tempMap?.[item?.video?.bindCta?.itemId ?? ''].item?.type === 'Appoint') {\r\n fromKName = 'formPage';\r\n } else if (isFromHashtag) {\r\n fromKName = 'hashTagPage';\r\n } else if (item?.video?.url) {\r\n fromKName = 'videoPage';\r\n } else if (item?.video?.imgUrls && item?.video?.imgUrls?.length) {\r\n fromKName = 'imagePage';\r\n } else if (item?.product) {\r\n fromKName = 'productPage';\r\n }\r\n bffEventReport?.({\r\n eventInfo: {\r\n sessionDuration: Math.floor(((new Date() as any) - curTime.current) / 1000) + '',\r\n eventSubject: 'sessionCompleted',\r\n eventDescription: 'Session completed',\r\n contentId: item?.video?.itemId,\r\n productId: item?.product?.itemId,\r\n position: activeIndex + '',\r\n fromKName,\r\n fromKPage: location?.href,\r\n ctatId: item?.video?.bindCta?.itemId ?? ''\r\n }\r\n });\r\n } else if (document.visibilityState === 'visible') {\r\n // 页面可见时触发,注意页面初始化时不会触发\r\n handleH5EnterLink();\r\n if (repCond) {\r\n handleViewImageStartEvent(activeIndex);\r\n SXP_EVENT_BUS.emit(SXP_EVENT_TYPE.PAGE_DID_SHOW, item);\r\n backMainFeed('external', selectTag);\r\n }\r\n }\r\n };\r\n\r\n document.addEventListener('visibilitychange', visibleChange);\r\n return () => {\r\n document.removeEventListener('visibilitychange', visibleChange);\r\n };\r\n }, [\r\n activeIndex,\r\n bffEventReport,\r\n data,\r\n handleH5EnterLink,\r\n popupDetailData,\r\n isFromHashtag,\r\n tempMap,\r\n curTime,\r\n backMainFeed,\r\n openHashtag,\r\n isShowConsent,\r\n selectTag\r\n ]);\r\n\r\n const tagHeight = useMemo(() => {\r\n let h = 0;\r\n if (tagList.length > 0) {\r\n h += 45;\r\n if (waterFallData) {\r\n h -= 45;\r\n }\r\n }\r\n return h;\r\n }, [tagList, waterFallData]);\r\n\r\n const height = useMemo(() => {\r\n let minusHeight = 0;\r\n if (globalConfig?.logoUrl && globalConfig?.isShowLogo) {\r\n minusHeight += 45;\r\n }\r\n return containerHeight - minusHeight - tagHeight;\r\n }, [globalConfig, containerHeight, tagHeight]);\r\n\r\n const renderLogo = useMemo(() => {\r\n if (globalConfig?.logoUrl && globalConfig?.isShowLogo) {\r\n return (\r\n <div className='clc-sxp-logo-banner' style={{ backgroundColor: globalConfig?.color }}>\r\n <img src={globalConfig?.logoUrl} alt='logo' />\r\n </div>\r\n );\r\n }\r\n return null;\r\n }, [globalConfig]);\r\n\r\n const renderContent = useCallback(\r\n (rec: RecItemType, index: number) => {\r\n if (rec?.video?.url) {\r\n return (\r\n <VideoWidget\r\n rec={rec}\r\n index={index}\r\n muted={isMuted}\r\n data={data}\r\n height={height}\r\n activeIndex={activeIndex}\r\n videoPostConfig={globalConfig?.videoPost}\r\n videoRef={videoRef.current}\r\n videoPlayIcon={globalConfig?.videoPlayIcon}\r\n />\r\n );\r\n }\r\n if (rec?.video?.imgUrls) {\r\n return (\r\n <PictureGroup\r\n key={rec?.video.itemId}\r\n imgUrls={rec?.video.imgUrls}\r\n width={containerWidth}\r\n height={height}\r\n rec={rec}\r\n index={index}\r\n onReportViewImageEnd={handleReportViewImageEnd}\r\n onViewImageStartEvent={handleViewImageStartEvent}\r\n imgUrlsPostConfig={globalConfig?.imgUrlsPost}\r\n />\r\n );\r\n }\r\n\r\n if (rec.product && Array.isArray(globalConfig?.productPost) && globalConfig?.productPost?.length > 0) {\r\n return globalConfig?.productPost?.map((value: any, idx: any) => {\r\n const t = resolver[value?.item?.type];\r\n const Component = withBindDataSource(t);\r\n const defaulSetting = t?.extend?.defaulSetting;\r\n return (\r\n <Component\r\n key={`${index}${idx}`}\r\n textStyle={{ ...defaulSetting?.textStyle, ...value?.item?.textStyle }}\r\n bindDatas={value?.item?.bindDatas ?? []}\r\n {...defaulSetting?.props}\r\n {...value?.item?.props}\r\n event={value?.item?.event || {}}\r\n schema={schema}\r\n id={value?.id}\r\n viewTime={viewTime.current}\r\n rec={rec}\r\n isPost={true}\r\n tipText={tipText}\r\n style={{ ...defaulSetting?.style, ...value?.item?.style, height: '100%', overflow: 'auto' }}\r\n index={index}\r\n />\r\n );\r\n });\r\n }\r\n\r\n return null;\r\n },\r\n [\r\n containerWidth,\r\n data,\r\n height,\r\n isMuted,\r\n activeIndex,\r\n globalConfig?.productPost,\r\n globalConfig?.videoPlayIcon,\r\n viewTime,\r\n tipText,\r\n resolver,\r\n schema,\r\n videoRef.current\r\n ]\r\n );\r\n\r\n const onExpandableChange = useCallback((v: boolean) => {\r\n setIsShowMore(v);\r\n }, []);\r\n\r\n const lineGradStyle = useMemo(() => {\r\n return !isShowMore\r\n ? {\r\n padding: '20px 0'\r\n }\r\n : {\r\n background: 'linear-gradient( 180deg, rgba(129,129,129,0) 0%, rgba(121,121,121,0.5) 5%, #616161 100%)',\r\n paddingTop: 20,\r\n paddingBottom: 20\r\n };\r\n }, [isShowMore]);\r\n\r\n const renderBottom = useCallback(\r\n (rec: RecItemType, index: number) => {\r\n if (rec?.video) {\r\n return (\r\n <>\r\n {rec?.video?.title && !isShowMore && <div className='clc-sxp-bottom-shadow' />}\r\n <div className='clc-sxp-bottom'>\r\n <Nudge nudge={nudge} />\r\n {globalConfig?.isShowCTA === undefined || globalConfig?.isShowCTA ? (\r\n <div className='clc-sxp-bottom-card'>\r\n <RenderCard rec={rec} index={index} tempMap={tempMap} resolver={resolver} />\r\n </div>\r\n ) : null}\r\n <div>\r\n <ExpandableText\r\n className='clc-sxp-bottom-text'\r\n isPost={true}\r\n foldText={tipText?.foldText}\r\n unfoldText={tipText?.unfoldText}\r\n text={rec?.video?.title ?? ''}\r\n style={{\r\n ...descStyle,\r\n textShadow: globalConfig?.isOpenTextShadow ? '2px 2px 4px rgba(0, 0, 0, 0.5)' : 'none'\r\n }}\r\n onChange={onExpandableChange}\r\n />\r\n <Hashtag\r\n index={activeIndex}\r\n tags={rec?.video?.hashTags ?? []}\r\n itemId={rec?.video?.itemId}\r\n itemType={rec?.video?.itemId ? 'VIDEO' : null}\r\n rec={rec}\r\n hashTagStyle={hashTagStyle}\r\n />\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n return null;\r\n },\r\n [\r\n descStyle,\r\n activeIndex,\r\n tempMap,\r\n resolver,\r\n tipText,\r\n nudge,\r\n hashTagStyle,\r\n globalConfig,\r\n onExpandableChange,\r\n isShowMore,\r\n lineGradStyle\r\n ]\r\n );\r\n\r\n const renderLikeButton = useCallback(\r\n (rec: RecItemType, index: number) => {\r\n if (!globalConfig?.isShowLike) return;\r\n let top = globalConfig?.likeIconY ?? 400;\r\n if (waterFallData && top < 40) {\r\n top += 40;\r\n }\r\n if (rec?.video) {\r\n return (\r\n <LikeButton\r\n key={rec.position}\r\n activeIcon={globalConfig?.likeIcon}\r\n unActicveIcon={globalConfig?.unlikeIcon}\r\n active={rec.isCollected}\r\n recData={rec}\r\n className='clc-sxp-like-button'\r\n style={{\r\n [globalConfig.likeIconXPosit ?? 'right']: globalConfig.likeIconX ?? 0,\r\n [globalConfig.likeIconYPosit ?? 'bottom']: top\r\n }}\r\n position={index}\r\n />\r\n );\r\n }\r\n return null;\r\n },\r\n [globalConfig, waterFallData]\r\n );\r\n\r\n const handleReportViewImageEnd = (item: RecItemType) => {\r\n if (!item?.video?.url && item?.video?.imgUrls) {\r\n const endTime = Date.now();\r\n const duration = (endTime - viewImageStartTime.current) / 1000;\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'viewImageCarouselEnd',\r\n eventDescription: 'User end view the image carousel',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video.title ?? '',\r\n imageEndTime: `${endTime}`,\r\n playDuration: `${duration}`,\r\n contentTags: JSON.stringify(item?.video.tags ?? []),\r\n position: activeIndex + '',\r\n contentFormat: 'image',\r\n traceInfo: item?.video.traceInfo\r\n }\r\n });\r\n }\r\n };\r\n\r\n const handleScrollEvent = (swiper: any) => {\r\n viewTime.current = new Date();\r\n const item = data[swiper.previousIndex];\r\n if (!item) return;\r\n if (swiper.previousIndex - swiper.activeIndex < 0) {\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'scrollDown',\r\n eventDescription: 'User scroll down',\r\n contentId: item?.video?.itemId ?? '',\r\n productId: item?.product?.itemId ?? '',\r\n requestId: null\r\n }\r\n });\r\n // 如果上一个商品是图片集,需上报 浏览图片集结结束 事件\r\n handleReportViewImageEnd(item);\r\n } else {\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'scrollUp',\r\n eventDescription: 'User scroll up',\r\n contentId: item?.video?.itemId ?? '',\r\n productId: item.product?.itemId ?? '',\r\n requestId: null\r\n }\r\n });\r\n // 如果上一个商品是图片集,需上报 浏览图片集结结束 事件\r\n handleReportViewImageEnd(item);\r\n }\r\n // 商品浏览事件\r\n handleReportProductView(item);\r\n const curItem = data[swiper.activeIndex];\r\n if (!curItem?.video?.url && !curItem?.video?.imgUrls && curItem?.product) {\r\n bffFbReport?.({\r\n eventName: 'ProductView'\r\n });\r\n }\r\n };\r\n\r\n const handleReportProductView = (item: RecItemType) => {\r\n if (!item?.video?.url && !item?.video?.imgUrls && item?.product) {\r\n productView(item, item.product, item?.product?.bindCta, viewTime.current, activeIndex);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const item = data[activeIndex];\r\n if (openHashtag) handleReportProductView(item);\r\n }, [openHashtag, data, activeIndex]);\r\n\r\n const handleViewImageStartEvent = (activeIndex: number) => {\r\n const item = data[activeIndex];\r\n // 如果是图片集则上报事件\r\n if (!item?.video?.url && item?.video?.imgUrls) {\r\n const startTime = Date.now();\r\n viewImageStartTime.current = startTime;\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'viewImageCarouselStart',\r\n eventDescription: 'User start view the image carousel',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video.title ?? '',\r\n imageStartTime: `${startTime}`,\r\n contentTags: JSON.stringify(item?.video.tags ?? []),\r\n position: activeIndex + '',\r\n contentFormat: 'image',\r\n traceInfo: item?.video.traceInfo\r\n }\r\n });\r\n bffFbReport?.({\r\n eventName: 'ViewContent'\r\n });\r\n }\r\n };\r\n\r\n const visList = useMemo(() => {\r\n const list =\r\n activeIndex === 0 && !waterFallData\r\n ? [data?.[0] ?? null]\r\n : (data?.map((item, index) => {\r\n if (activeIndex === index || index - 1 === activeIndex || index + 1 === activeIndex) {\r\n return item;\r\n } else {\r\n return null;\r\n }\r\n }) as any);\r\n\r\n return !waterFallData ? list.concat([{ loading: true }]) : list;\r\n }, [data, activeIndex, waterFallData]);\r\n\r\n const renderView = useMemo(() => {\r\n if (loading) {\r\n return (\r\n <div style={{ height, width: containerWidth, display: 'flex', justifyContent: 'center', alignItems: 'center' }}>\r\n <img width={64} height={64} src={loadingImage} alt='loading...' style={{ objectFit: 'contain' }} />\r\n </div>\r\n );\r\n }\r\n return visList?.map((rec: any, index: any) => {\r\n return (\r\n <SwiperSlide key={index} virtualIndex={index}>\r\n {rec && (\r\n <>\r\n {rec?.loading ? (\r\n <div\r\n style={{\r\n height,\r\n width: containerWidth,\r\n display: 'flex',\r\n justifyContent: 'center',\r\n alignItems: 'center'\r\n }}\r\n >\r\n <img width={64} height={64} src={loadingImage} alt='loading...' style={{ objectFit: 'contain' }} />\r\n </div>\r\n ) : (\r\n <>\r\n {renderContent(rec, index)}\r\n {renderBottom(rec, index)}\r\n {renderLikeButton(rec, index)}\r\n </>\r\n )}\r\n </>\r\n )}\r\n </SwiperSlide>\r\n );\r\n });\r\n }, [containerWidth, data, height, loading, renderBottom, renderContent, visList, loadingImage]);\r\n\r\n const mutedIcon = useIconLink('/pb_static/5beaaa5ce7f3477b99db3838619cc471.png');\r\n const unmutedIcon = useIconLink('/pb_static/fea8668a8a894e4aa3a86bcc775e895e.png');\r\n return (\r\n <div id='sxp-render' className='clc-sxp-container'>\r\n {waterFallData && (\r\n <Navbar\r\n icon={left}\r\n styles={{ background: 'rgba(0,0,0,.3)', color: '#fff' }}\r\n onClose={() => {\r\n setOpenHashtag?.(true);\r\n }}\r\n />\r\n )}\r\n {renderLogo}\r\n <Tagbar tagList={tagList} setActiveIndex={setActiveIndex} />\r\n {isShowFingerTip ? (\r\n <FingerSwipeTip\r\n imageUrl={globalConfig?.swipeTipIcon}\r\n style={{ top: `${50 + (globalConfig?.swipeTipOffset ?? 0)}%` }}\r\n />\r\n ) : null}\r\n <Swiper\r\n style={{\r\n marginTop: tagHeight\r\n }}\r\n ref={swiperRef}\r\n onSlideChange={() => {\r\n swiperRef.current.swiper.allowTouchMove = false;\r\n setTimeout(() => {\r\n swiperRef.current.swiper.allowTouchMove = true;\r\n }, 500);\r\n }}\r\n onActiveIndexChange={(swiper) => {\r\n setActiveIndex(swiper.activeIndex);\r\n if (openHashtag) return;\r\n // 处理上滑下滑事件\r\n handleScrollEvent(swiper);\r\n if (waterFallData) return;\r\n if (swiper?.activeIndex + 2 >= data?.length) {\r\n if (!isLoadMore) {\r\n setIsLoadMore(true);\r\n loadVideos?.(Math.ceil(activeIndex / 10) + 1).then(() => {\r\n setIsLoadMore(false);\r\n });\r\n }\r\n }\r\n }}\r\n direction={'vertical'}\r\n height={height}\r\n >\r\n <ToggleButton\r\n style={{\r\n position: 'fixed',\r\n visibility: data?.[activeIndex]?.video?.url ? 'visible' : 'hidden',\r\n zIndex: 999,\r\n [globalConfig?.muteIconXPosit ?? 'right']: globalConfig?.muteIconX ?? 0,\r\n [globalConfig?.muteIconYPosit ?? 'bottom']: globalConfig?.muteIconY ?? 23\r\n }}\r\n defaultValue={isMuted}\r\n activeIcon={globalConfig?.unMuteIcon ? globalConfig?.unMuteIcon : mutedIcon}\r\n unactiveIcon={globalConfig?.muteIcon ? globalConfig?.muteIcon : unmutedIcon}\r\n onChange={setIsMuted}\r\n />\r\n {renderView}\r\n </Swiper>\r\n <WaterFall {...globalConfig?.hashTag?.[0]?.item?.props} />\r\n <div style={{ position: 'absolute', zIndex: -100 }}>\r\n <video\r\n ref={videoRef}\r\n id='player-container-id'\r\n playsInline\r\n crossOrigin='anonymous'\r\n preload='auto'\r\n controls={false}\r\n muted\r\n style={{\r\n backgroundColor: 'transparent',\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n pointerEvents: 'none'\r\n }}\r\n />\r\n <div id='player-container-id-copy'></div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default SxpPageRender;\r\n","import React, { FC, memo } from 'react';\r\nimport { Autoplay, Pagination } from 'swiper/modules';\r\nimport { Swiper, SwiperSlide } from 'swiper/react';\r\nimport { RecItemType } from '../SxpPageRender/typing';\r\nimport Picture from '../SxpPageRender/PictureGroup/Picture';\r\nimport { postConfigType } from '../SxpPageRender';\r\n\r\ninterface IPictureGroupProps {\r\n imgUrls?: string[];\r\n width: number;\r\n height: number;\r\n rec: RecItemType;\r\n index: number;\r\n imgUrlsPostConfig?: postConfigType;\r\n}\r\n\r\nconst PictureGroup: FC<IPictureGroupProps> = ({ imgUrls, width, height, imgUrlsPostConfig, rec, index }) => {\r\n return (\r\n <Swiper\r\n defaultValue={0}\r\n direction={'horizontal'}\r\n modules={[Pagination, Autoplay]}\r\n pagination={{ clickable: true, bulletActiveClass: 'swipe-item-active-bullet' }}\r\n height={height}\r\n style={{ width }}\r\n loop={true}\r\n autoplay={false}\r\n >\r\n {imgUrls?.map((url) => {\r\n return (\r\n <SwiperSlide key={url}>\r\n <Picture src={url} height={height} imgUrlsPostConfig={imgUrlsPostConfig} />\r\n </SwiperSlide>\r\n );\r\n })}\r\n </Swiper>\r\n );\r\n};\r\n\r\nexport default memo(PictureGroup);\r\n","import React, { CSSProperties, FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\r\nimport { RecItemType } from '../SxpPageRender/typing';\r\nimport { useIconLink } from '../SxpPageRender/useIconLink';\r\nimport { postConfigType } from '../SxpPageRender';\r\nimport FormatImage from '../SxpPageRender/FormatImage';\r\nimport { useSxpDataSource } from '@/core/hooks';\r\n\r\ninterface IVideoWidgetProps {\r\n rec: RecItemType;\r\n index: number;\r\n height: number;\r\n width: number;\r\n data: RecItemType[];\r\n muted: boolean;\r\n activeIndex?: number;\r\n videoPostConfig?: postConfigType;\r\n}\r\n\r\nconst VideoWidget: FC<IVideoWidgetProps> = ({\r\n rec,\r\n index,\r\n height,\r\n data,\r\n muted,\r\n activeIndex,\r\n videoPostConfig,\r\n width\r\n}) => {\r\n const [isPauseVideo, setIsPauseVideo] = useState(false);\r\n const videoRef = useRef<HTMLVideoElement>(null);\r\n const { bffEventReport, sxpParameter, waterFallData, openHashtag } = useSxpDataSource();\r\n const videoStartTime = useRef(0);\r\n const [isLoadFinish, setIsLoadFinish] = useState(false);\r\n const [isFirstPlay, setIsFirstPlay] = useState(true);\r\n const canvasRef = useRef(null);\r\n const [firstFrameSrc, setFirstFrameSrc] = useState('');\r\n\r\n useEffect(() => {\r\n if (!videoRef.current) return;\r\n videoRef.current.muted = muted;\r\n }, [muted]);\r\n\r\n const handleVideoStart = useCallback(() => {\r\n videoRef.current?.play();\r\n }, []);\r\n\r\n const PAUSE_ICON = useIconLink('/pb_static/06f28a2025c74c1cb49be6767316d827.png');\r\n\r\n const handlePlaying = useCallback(() => {\r\n setIsPauseVideo(false);\r\n const item = data[index];\r\n if (item && videoRef?.current?.duration) {\r\n videoStartTime.current = videoRef?.current?.currentTime || 0;\r\n const videoDuration = (videoRef.current?.duration ?? 0).toFixed(2);\r\n const videoCurrentTime = (videoRef.current?.currentTime ?? 0).toFixed(2);\r\n const playType = isFirstPlay ? '0' : '1';\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'playVideo',\r\n eventDescription: 'User played the video',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video?.title ?? '',\r\n playType,\r\n startTime: videoCurrentTime,\r\n videoDuration,\r\n contentTags: JSON.stringify(item?.video?.tags ?? []),\r\n position: index + '',\r\n contentFormat: 'video',\r\n traceInfo: item?.video?.traceInfo\r\n }\r\n });\r\n setIsFirstPlay(false);\r\n }\r\n }, [bffEventReport, data, index, isFirstPlay]);\r\n\r\n const handleLoadedMetadata = useCallback(() => {\r\n setIsLoadFinish(true);\r\n }, []);\r\n\r\n const handleClickVideo = useCallback(\r\n (type?: 'pause' | 'start') => () => {\r\n if (!isLoadFinish) return;\r\n const isPause = videoRef.current?.paused;\r\n switch (type) {\r\n case 'start':\r\n if (!isPause) return;\r\n videoRef.current?.play();\r\n setIsPauseVideo(false);\r\n break;\r\n case 'pause':\r\n if (isPause) return;\r\n videoRef.current?.pause();\r\n setIsPauseVideo(true);\r\n break;\r\n default:\r\n if (isPause) {\r\n videoRef.current?.play();\r\n } else {\r\n videoRef.current?.pause();\r\n }\r\n setIsPauseVideo(!isPause);\r\n break;\r\n }\r\n },\r\n [isLoadFinish]\r\n );\r\n\r\n const onPause = useCallback(() => {\r\n const item = data[index];\r\n const videoDuration = (videoRef.current?.duration ?? 0).toFixed(2);\r\n const videoCurrentTime = (videoRef.current?.currentTime ?? 0).toFixed(2);\r\n if (videoRef?.current?.duration) {\r\n const playDuration = (videoRef?.current?.currentTime - videoStartTime.current).toFixed(2);\r\n bffEventReport?.({\r\n eventInfo: {\r\n eventSubject: 'playOverVideo',\r\n eventDescription: 'User finished playing the video',\r\n contentId: item?.video?.itemId ?? '',\r\n contentName: item?.video?.title ?? '',\r\n endTime: videoCurrentTime,\r\n videoDuration,\r\n playDuration,\r\n contentTags: JSON.stringify(item?.video?.tags ?? []),\r\n position: index + '',\r\n contentFormat: 'video',\r\n traceInfo: item?.video?.traceInfo\r\n }\r\n });\r\n }\r\n }, [data, index, bffEventReport]);\r\n\r\n const blur = useMemo(() => {\r\n return videoPostConfig?.mode === '2';\r\n }, [videoPostConfig]);\r\n\r\n const translateY = useMemo(() => {\r\n return videoPostConfig?.mode === '2'\r\n ? `translateY(-${50 + (videoPostConfig?.offsetTop ?? 0)}%) translate3d(0px, 0px, 0px)`\r\n : 'translateY(-50%)';\r\n }, [videoPostConfig]);\r\n\r\n const blurBgSrc = useMemo(() => {\r\n return rec?.video?.cover || firstFrameSrc;\r\n }, [firstFrameSrc, rec]);\r\n\r\n const handLoadeddata = useCallback(() => {\r\n if (!canvasRef || !videoRef || !videoRef.current || !canvasRef.current) return;\r\n const video = videoRef?.current;\r\n const canvas = canvasRef?.current as any;\r\n const ctx = canvas.getContext('2d');\r\n const targetWidth = window?.innerWidth;\r\n const targetHeight = window?.innerHeight;\r\n canvas.height = targetHeight;\r\n canvas.width = targetWidth;\r\n ctx?.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n setFirstFrameSrc(canvas.toDataURL());\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!videoRef.current) return;\r\n setIsPauseVideo(false);\r\n if (!videoRef.current.src) {\r\n const videoSrc = rec?.video!.url;\r\n if (videoSrc.includes('.m3u8')) {\r\n if (typeof window !== 'undefined' && window?.Hls.isSupported()) {\r\n const hls = new window.Hls();\r\n hls.loadSource(videoSrc);\r\n hls.attachMedia(videoRef.current);\r\n } else if (videoRef.current.canPlayType('application/vnd.apple.mpegurl')) {\r\n videoRef.current.src = videoSrc;\r\n } else {\r\n videoRef.current.src = videoSrc;\r\n }\r\n } else {\r\n videoRef.current.src = videoSrc;\r\n }\r\n videoRef.current.setAttribute('x5-playsinline', 'true');\r\n videoRef.current.setAttribute('webkit-playsinline', 'true');\r\n }\r\n videoRef.current?.addEventListener('loadedmetadata', handleLoadedMetadata);\r\n videoRef.current?.addEventListener('canplay', handleLoadedMetadata);\r\n videoRef.current?.addEventListener('playing', handlePlaying);\r\n videoRef.current?.addEventListener('loadeddata', handLoadeddata);\r\n\r\n return () => {\r\n videoRef.current?.removeEventListener('loadedmetadata', handleLoadedMetadata);\r\n videoRef.current?.removeEventListener('canplay', handleLoadedMetadata);\r\n videoRef.current?.removeEventListener('playing', handlePlaying);\r\n videoRef.current?.removeEventListener('loadeddata', handLoadeddata);\r\n };\r\n }, [handleLoadedMetadata, handlePlaying, rec?.video, handLoadeddata]);\r\n\r\n const renderPoster = useMemo(() => {\r\n if (!sxpParameter?.placeholder_image || isLoadFinish) {\r\n return null;\r\n }\r\n\r\n return (\r\n <img\r\n style={{ position: 'absolute', left: 0, top: 0, width: '100%', height: '100%', objectFit: 'cover' }}\r\n src={sxpParameter?.placeholder_image}\r\n alt='video poster'\r\n />\r\n );\r\n }, [isLoadFinish, sxpParameter?.placeholder_image]);\r\n\r\n useEffect(() => {\r\n const handleBeforeUnload = () => {\r\n if (activeIndex === index && rec?.video?.url && videoRef?.current?.src && !isPauseVideo) {\r\n handleClickVideo('pause')();\r\n }\r\n };\r\n\r\n window.addEventListener('beforeunload', handleBeforeUnload);\r\n\r\n return () => {\r\n window.removeEventListener('beforeunload', handleBeforeUnload);\r\n };\r\n }, [activeIndex, index, rec, videoRef, handleClickVideo, isPauseVideo]);\r\n\r\n const blurStyle = useMemo(() => {\r\n return blur\r\n ? {\r\n filter: 'blur(10px)',\r\n transform: 'translate3d(0px, 0px, 0px) scale(1.2)'\r\n }\r\n : {};\r\n }, [blur]) as CSSProperties;\r\n\r\n if (!rec?.video) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n {blur ? (\r\n <div\r\n className='video-container'\r\n key={rec?.video.itemId}\r\n onClick={handleClickVideo()}\r\n style={{\r\n position: 'relative',\r\n width,\r\n height,\r\n overflow: 'hidden'\r\n }}\r\n >\r\n <FormatImage\r\n src={blurBgSrc}\r\n style={{\r\n height,\r\n width,\r\n objectFit: 'cover',\r\n ...blurStyle\r\n }}\r\n />\r\n <canvas ref={canvasRef} style={{ display: 'none' }} />\r\n <div\r\n style={{\r\n position: 'absolute',\r\n width,\r\n height,\r\n top: '50%',\r\n transform: translateY,\r\n left: 0,\r\n right: 0\r\n }}\r\n >\r\n <div style={{ position: 'relative', width, height: '100%' }}>\r\n <video\r\n id={`pb-video-${index}`}\r\n className='clc-pb-video'\r\n ref={videoRef}\r\n autoPlay\r\n crossOrigin='anonymous'\r\n muted\r\n controls={false}\r\n playsInline\r\n preload='auto'\r\n onPause={onPause}\r\n onEnded={handleVideoStart}\r\n style={{\r\n width: '100%',\r\n height,\r\n objectFit: 'contain'\r\n }}\r\n />\r\n <img hidden={!isPauseVideo} className='clc-pb-video-pause' src={PAUSE_ICON} alt='video pause image' />\r\n </div>\r\n </div>\r\n {renderPoster}\r\n </div>\r\n ) : (\r\n <div\r\n className='video-container'\r\n key={rec?.video.itemId}\r\n onClick={handleClickVideo()}\r\n style={{\r\n position: 'relative',\r\n width,\r\n height,\r\n overflow: 'hidden'\r\n }}\r\n >\r\n <video\r\n id={`pb-video-${index}`}\r\n className='clc-pb-video'\r\n style={{ width: '100%' }}\r\n ref={videoRef}\r\n crossOrigin='anonymous'\r\n muted\r\n autoPlay\r\n controls={false}\r\n playsInline\r\n preload='auto'\r\n onPause={onPause}\r\n onEnded={handleVideoStart}\r\n />\r\n {renderPoster}\r\n <img hidden={!isPauseVideo} className='clc-pb-video-pause' src={PAUSE_ICON} alt='video pause image' />\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n\r\nexport default memo(VideoWidget);\r\n","import React, { FC, memo, useMemo } from 'react';\r\nimport { css } from '@emotion/css';\r\nimport { RecItemType } from '../SxpPageRender/typing';\r\nimport Nudge from '../SxpPageRender/Nudge';\r\nimport RenderCard from '../SxpPageRender/RenderCard';\r\nimport ExpandableText from '../SxpPageRender/ExpandableText';\r\nimport Hashtag from '../SxpPageRender/Hashtag';\r\nimport LikeButton from '../SxpPageRender/LikeButton';\r\nimport ToggleButton from '../SxpPageRender/ToggleButton';\r\nimport { useIconLink } from '../SxpPageRender/useIconLink';\r\nimport { ISxpPageRenderProps } from '../SxpPageRender';\r\nimport Tagbar from '../SxpPageRender/Tagbar';\r\nimport PictureGroup from './PictureGroup';\r\nimport VideoWidget from './VideoWidget';\r\nimport * as _materials_ from '@/materials';\r\nimport { MaterialComponet } from '@/core';\r\nimport withBindDataSource from '@/core/hoc/withBindDataSource';\r\n\r\nconst RESOLVER: Record<string, MaterialComponet> = {};\r\nObject.values(_materials_).forEach((v: any) => {\r\n RESOLVER[v.extend!.type] = v;\r\n});\r\n\r\nconst defaultUnLikeIconPath = '/pb_static/f71266d2c64446c5ae6a5a7f5489cc0a.png';\r\nconst defaultLikeIconPath = '/pb_static/f07900fe3f0f4ae188ea1611d4801a44.png';\r\n\r\nconst DiyPortalPreview: FC<ISxpPageRenderProps & { appDomain?: string }> = ({\r\n data = [],\r\n globalConfig,\r\n tipText,\r\n nudge,\r\n tempMap,\r\n descStyle,\r\n hashTagStyle,\r\n containerHeight = 664,\r\n containerWidth = 375,\r\n appDomain,\r\n tagList = []\r\n}) => {\r\n const height = useMemo(() => {\r\n let minusHeight = 0;\r\n if (globalConfig?.logoUrl && globalConfig?.isShowLogo) {\r\n minusHeight += 45;\r\n }\r\n if (tagList.length > 0) {\r\n minusHeight += 45;\r\n }\r\n return containerHeight - minusHeight;\r\n }, [globalConfig, containerHeight, tagList]);\r\n\r\n const renderContent = (rec: RecItemType, index: number) => {\r\n if (rec?.video?.url) {\r\n return (\r\n <VideoWidget\r\n rec={rec}\r\n index={index}\r\n muted={true}\r\n width={containerWidth}\r\n data={data ?? []}\r\n height={height}\r\n activeIndex={index}\r\n videoPostConfig={globalConfig?.videoPost}\r\n />\r\n );\r\n }\r\n if (rec?.video?.imgUrls) {\r\n return (\r\n <PictureGroup\r\n key={rec?.video.itemId}\r\n imgUrls={rec?.video.imgUrls}\r\n width={containerWidth}\r\n height={height}\r\n rec={rec}\r\n index={index}\r\n imgUrlsPostConfig={globalConfig?.imgUrlsPost}\r\n />\r\n );\r\n }\r\n\r\n if (rec.product) {\r\n if (rec.product && Array.isArray(globalConfig?.productPost) && globalConfig?.productPost?.length > 0) {\r\n return globalConfig?.productPost?.map((value: any, idx: any) => {\r\n const t = RESOLVER[value?.item?.type];\r\n const Component = withBindDataSource(t);\r\n const defaulSetting = t?.extend?.defaulSetting;\r\n return (\r\n <Component\r\n key={`${index}${idx}`}\r\n textStyle={{ ...defaulSetting?.textStyle, ...value?.item?.textStyle }}\r\n bindDatas={value?.item?.bindDatas ?? []}\r\n {...defaulSetting?.props}\r\n {...value?.item?.props}\r\n event={value?.item?.event || {}}\r\n // schema={schema}\r\n id={value?.id}\r\n // viewTime={viewTime.current}\r\n rec={rec}\r\n isPost={true}\r\n tipText={tipText}\r\n style={{\r\n ...defaulSetting?.style,\r\n ...value?.item?.style,\r\n width: containerWidth,\r\n height,\r\n overflow: 'auto'\r\n }}\r\n index={index}\r\n />\r\n );\r\n });\r\n }\r\n }\r\n };\r\n\r\n const renderLogo = useMemo(() => {\r\n if (globalConfig?.logoUrl && globalConfig?.isShowLogo) {\r\n return (\r\n <div className='clc-sxp-logo-banner' style={{ backgroundColor: globalConfig?.color }}>\r\n <img src={globalConfig?.logoUrl} alt='logo' />\r\n </div>\r\n );\r\n }\r\n return null;\r\n }, [globalConfig]);\r\n\r\n const CTA = (rec: RecItemType, index: number) => {\r\n if (globalConfig?.isShowCTA === undefined || globalConfig?.isShowCTA) {\r\n return (\r\n <div className='clc-sxp-bottom-card'>\r\n <RenderCard rec={rec} index={index} tempMap={tempMap} resolver={RESOLVER} />\r\n </div>\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n const renderBottom = (rec: RecItemType, index: number) => {\r\n if (rec?.video) {\r\n return (\r\n <>\r\n {rec?.video?.title && <div className='clc-sxp-bottom-shadow' />}\r\n <div className='clc-sxp-bottom'>\r\n <Nudge nudge={nudge} />\r\n {CTA(rec, index)}\r\n <div>\r\n <ExpandableText\r\n className='clc-sxp-bottom-text'\r\n isPost={true}\r\n foldText={tipText?.foldText}\r\n unfoldText={tipText?.unfoldText}\r\n text={rec?.video?.title ?? ''}\r\n style={{\r\n ...descStyle,\r\n textShadow: globalConfig?.isOpenTextShadow ? '2px 2px 4px rgba(0, 0, 0, 0.5)' : 'none'\r\n }}\r\n />\r\n </div>\r\n <Hashtag\r\n index={index}\r\n tags={rec?.video?.hashTags ?? []}\r\n itemId={rec?.video?.itemId}\r\n itemType={rec?.video?.itemId ? 'VIDEO' : null}\r\n rec={rec}\r\n hashTagStyle={hashTagStyle}\r\n />\r\n </div>\r\n </>\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n const likeIcon = useIconLink(defaultLikeIconPath, appDomain);\r\n const unlikeIcon = useIconLink(defaultUnLikeIconPath, appDomain);\r\n const renderLikeButton = (rec: RecItemType, index: number) => {\r\n if (!globalConfig?.isShowLike) return;\r\n let top = globalConfig?.likeIconY ?? 400;\r\n if (top < 40) {\r\n top += 40;\r\n }\r\n if (rec?.video) {\r\n return (\r\n <LikeButton\r\n key={rec.position}\r\n activeIcon={globalConfig?.likeIcon ?? likeIcon}\r\n unActicveIcon={globalConfig?.unlikeIcon ?? unlikeIcon}\r\n position={index}\r\n active={rec.isCollected}\r\n recData={rec}\r\n className='clc-sxp-like-button'\r\n style={{\r\n top,\r\n right: globalConfig?.likeIconX ?? 0\r\n }}\r\n />\r\n );\r\n }\r\n return null;\r\n };\r\n const mutedIcon = useIconLink('/pb_static/5beaaa5ce7f3477b99db3838619cc471.png', appDomain);\r\n const unmutedIcon = useIconLink('/pb_static/fea8668a8a894e4aa3a86bcc775e895e.png', appDomain);\r\n const renderView = (rec: RecItemType, index: number) => {\r\n return (\r\n <div style={{ position: 'relative', border: '1px solid #e1e1e1' }}>\r\n {renderLogo}\r\n <Tagbar tagList={tagList} />\r\n <ToggleButton\r\n style={{\r\n position: 'absolute',\r\n right: globalConfig?.muteIconX ?? 0,\r\n visibility: data?.[index]?.video?.url ? 'visible' : 'hidden',\r\n bottom: globalConfig?.muteIconY ?? 23,\r\n zIndex: 999\r\n }}\r\n defaultValue={true}\r\n activeIcon={globalConfig?.unMuteIcon ? globalConfig?.unMuteIcon : mutedIcon}\r\n unactiveIcon={globalConfig?.muteIcon ? globalConfig?.muteIcon : unmutedIcon}\r\n // onChange={setIsMuted}\r\n />\r\n {renderContent(rec, index)}\r\n {renderBottom(rec, index)}\r\n {renderLikeButton(rec, index)}\r\n </div>\r\n );\r\n };\r\n\r\n return (\r\n <div\r\n className={css({\r\n width: '100%',\r\n height: containerHeight,\r\n display: 'flex',\r\n boxSizing: 'border-box',\r\n gap: 16,\r\n pointerEvents: 'none',\r\n userSelect: 'none',\r\n transform: 'scale(0.7) translateX(-22%) translateY(-140px)'\r\n })}\r\n >\r\n {data?.map((rec, index) => {\r\n return renderView(rec, index);\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nexport default memo(DiyPortalPreview);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-10-31 10:56:01\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-05-27 18:19:31\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageRender\\Popup\\index.tsx\r\n *\r\n */\r\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\r\nimport Modal from '../Modal';\r\nimport { RecItemType } from '../typing';\r\nimport { useEditor, useSxpDataSource } from '@/core/hooks';\r\nimport withBindDataSource from '@/core/hoc/withBindDataSource';\r\nimport { useEventReport } from '@/core/hooks/useEventReport';\r\nimport { IPopupType } from '@/core/context/EditorContext';\r\n\r\nconst Popup = () => {\r\n const { schema, resolver, popup } = useEditor();\r\n const { setPopupDetailData, popupDetailData, bffEventReport } = useSxpDataSource();\r\n const { productView } = useEventReport();\r\n const [visible, setVisible] = useState<IPopupType>();\r\n const curTimeRef = useRef<any>(null);\r\n\r\n useEffect(() => {\r\n const initTime = () => {\r\n curTimeRef.current = new Date();\r\n };\r\n initTime();\r\n window.addEventListener('pageshow', initTime);\r\n return () => {\r\n window.removeEventListener('pageshow', initTime);\r\n };\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (popup && popup?.id && popup?.id !== '') {\r\n curTimeRef.current = new Date();\r\n setVisible(popup);\r\n }\r\n }, [popup]);\r\n\r\n const handleClose = () => {\r\n if (!popup || popup?.id === '' || !visible || (new Date() as any) - curTimeRef.current < (popup?.duration ?? 0)) {\r\n return;\r\n }\r\n setVisible({\r\n ...popup,\r\n id: ''\r\n });\r\n const data = popupDetailData as RecItemType;\r\n const product = data?.video?.bindProduct;\r\n const cta = data?.video?.bindProduct?.bindCta;\r\n if (product && cta) {\r\n productView(data, product, cta, curTimeRef.current, popupDetailData?.index);\r\n }\r\n\r\n setTimeout(() => {\r\n window?.sxpPopup('');\r\n setPopupDetailData?.(null);\r\n }, popup?.duration);\r\n };\r\n\r\n const renderPopupDetail = useMemo(() => {\r\n return schema?.sxpPageConf?.globalConfig?.popupList?.map((value: any, index: any) => {\r\n if (value?.id === popup?.id) {\r\n const t = resolver[value?.item?.type];\r\n const Component = withBindDataSource(t);\r\n const isExternalLink = value?.item?.event?.onClick?.linkType === 'externalLink';\r\n const isPopup = value?.item?.event?.onClick?.linkType === 'popup';\r\n const defaulSetting = t?.extend?.defaulSetting;\r\n return (\r\n <Component\r\n key={index}\r\n style={{\r\n ...defaulSetting?.style,\r\n ...value?.item?.style,\r\n width: window.innerWidth ?? '100vw',\r\n height: '80vh',\r\n overflow: 'auto'\r\n }}\r\n textStyle={{ ...defaulSetting?.textStyle, ...value?.item?.textStyle }}\r\n bindDatas={value?.item?.bindDatas ?? []}\r\n {...defaulSetting?.props}\r\n {...value?.item?.props}\r\n event={value?.item?.event || {}}\r\n schema={schema}\r\n id={value?.id}\r\n isExternalLink={isExternalLink}\r\n isPopup={isPopup}\r\n onClose={handleClose}\r\n />\r\n );\r\n } else {\r\n return <></>;\r\n }\r\n });\r\n }, [schema, popup, resolver, handleClose]);\r\n\r\n return (\r\n <Modal popup={visible} onClose={handleClose} padding={0} modalStyle={{ position: 'fixed' }}>\r\n {renderPopupDetail}\r\n </Modal>\r\n );\r\n};\r\nexport default Popup;\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2024-01-15 19:03:09\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-13 14:54:12\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageCore\\index.tsx\r\n *\r\n */\r\n/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-11-24 15:58:00\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2023-12-26 10:24:42\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\components\\SxpPageCore\\index.tsx\r\n *\r\n */\r\nimport React, { FC, memo, useMemo } from 'react';\r\nimport SxpPageRender from '../SxpPageRender';\r\nimport Popup from '../SxpPageRender/Popup';\r\nimport { PageData } from '@/core/Pagebuilder/type';\r\nimport * as _materials_ from '@/materials';\r\nimport { EditorCore, MaterialComponet } from '@/core';\r\nimport SxpDataSourceProvider from '@/core/context/SxpDataSourceProvider';\r\n\r\nconst RESOLVER: Record<string, MaterialComponet> = {};\r\nObject.values(_materials_).forEach((v: any) => {\r\n RESOLVER[v.extend!.type] = v;\r\n});\r\n\r\nexport interface ISxpPageCoreProps {\r\n data?: PageData;\r\n maxSize?: number;\r\n defaultSize?: number;\r\n hashTagSize?: number;\r\n loadingImage?: string;\r\n appDomain?: string;\r\n licenseUrl?: String;\r\n enabledMetaConversionApi?: boolean;\r\n}\r\n\r\nconst SxpPageCore: FC<ISxpPageCoreProps> = ({\r\n data,\r\n maxSize = 10,\r\n defaultSize = 10,\r\n hashTagSize = 20,\r\n loadingImage,\r\n appDomain,\r\n licenseUrl,\r\n enabledMetaConversionApi\r\n}) => {\r\n const utmVal = useMemo(() => {\r\n const searchParams = location?.search ? location?.search?.replace('?', '') : '';\r\n return searchParams;\r\n }, []);\r\n return (\r\n <EditorCore resolver={RESOLVER} enableDataSource={false} schema={data?.data} utmVal={utmVal}>\r\n <SxpDataSourceProvider\r\n utmVal={utmVal}\r\n dataSources={data?.data_sources}\r\n sxpParameter={data?.sxp_parameter}\r\n maxSize={data?.sxp_parameter?.personalized_recommend ?? maxSize}\r\n defaultSize={data?.sxp_parameter?.default_recommend ?? defaultSize}\r\n hashTagSize={data?.sxp_parameter?.hash_tag_size ?? hashTagSize}\r\n loadingImage={loadingImage}\r\n appDomain={appDomain}\r\n enabledMetaConversionApi={enabledMetaConversionApi}\r\n isShowTag={data?.data?.sxpPageConf?.globalConfig?.isShowTag}\r\n globalConfig={data?.data?.sxpPageConf?.globalConfig}\r\n render={({ rtcList, tagList }) => (\r\n <>\r\n <SxpPageRender\r\n {...data?.data?.sxpPageConf}\r\n tagList={tagList}\r\n data={rtcList}\r\n resolver={RESOLVER}\r\n licenseUrl={licenseUrl}\r\n />\r\n <Popup />\r\n </>\r\n )}\r\n />\r\n </EditorCore>\r\n );\r\n};\r\n\r\nexport default memo(SxpPageCore);\r\n","/*\r\n * @Author: binruan@chatlabs.com\r\n * @Date: 2023-12-26 10:38:53\r\n * @LastEditors: binruan@chatlabs.com\r\n * @LastEditTime: 2024-06-25 11:20:15\r\n * @FilePath: \\pb-sxp-ui\\src\\core\\context\\EditorDataProvider.tsx\r\n *\r\n */\r\nimport React, { FC, PropsWithChildren, createContext, useContext, useState } from 'react';\r\n\r\ninterface IEditorDataContext {\r\n sxpPrameter?: {\r\n bottomImage: string;\r\n defaultRecommend: number;\r\n personalizedRecommend: number;\r\n placeholderImage: string;\r\n hashTagSize: number;\r\n loadingImage: string;\r\n industry?: string;\r\n privacyContent?: string;\r\n privacyNecessity?: boolean;\r\n privacyPolicyTitle?: string;\r\n privacyPolicyUrl?: string;\r\n privacyTitle?: string;\r\n template?: any | null;\r\n };\r\n appDomain?: string;\r\n openHashtag?: boolean;\r\n setOpenHashtag?: React.Dispatch<React.SetStateAction<boolean>>;\r\n openConsent?: boolean;\r\n setOpenConsent?: React.Dispatch<React.SetStateAction<boolean>>;\r\n sxpFontLinks?: any[];\r\n}\r\n\r\ninterface IEditorProviderProps {\r\n data?: any;\r\n}\r\n\r\nconst EditorDataContext = createContext<IEditorDataContext>({});\r\n\r\nconst EditorDataProvider: FC<PropsWithChildren<IEditorProviderProps>> = ({ children, data }) => {\r\n const [openHashtag, setOpenHashtag] = useState(false);\r\n const [openConsent, setOpenConsent] = useState(false);\r\n\r\n return (\r\n <EditorDataContext.Provider\r\n value={{\r\n sxpPrameter: {\r\n bottomImage: data?.sxp_parameter?.bottom_image,\r\n defaultRecommend: data?.sxp_parameter?.default_recommend,\r\n personalizedRecommend: data?.sxp_parameter?.personalized_recommend,\r\n placeholderImage: data?.sxp_parameter?.placeholder_image,\r\n hashTagSize: data?.sxp_parameter?.hash_tag_size,\r\n loadingImage: data?.sxp_parameter?.loading_image,\r\n privacyContent: data?.sxp_parameter?.privacy_context,\r\n privacyNecessity: data?.sxp_parameter?.privacy_necessity,\r\n privacyPolicyTitle: data?.sxp_parameter?.privacy_policy_title,\r\n privacyPolicyUrl: data?.sxp_parameter?.privacy_policy_url,\r\n privacyTitle: data?.sxp_parameter?.privacy_title,\r\n template: data?.sxp_parameter?.template,\r\n industry: data?.sxp_parameter?.industry\r\n },\r\n appDomain: data?.appDomain,\r\n openHashtag,\r\n setOpenHashtag,\r\n openConsent,\r\n setOpenConsent,\r\n sxpFontLinks: data?.sxpFontLinks\r\n }}\r\n >\r\n {children}\r\n </EditorDataContext.Provider>\r\n );\r\n};\r\n\r\nexport function useEditorDataProvider() {\r\n return useContext(EditorDataContext);\r\n}\r\n\r\nexport default EditorDataProvider;\r\n"],"names":["__rest","s","t","p","i","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","pathParamsReg","getDataByDS","apiAddr","configs","$store","idMapName","id","method","url","urlParams","name","queryString","headers","body","apiUrl","k","v","res","error","SXP_TOKEN_INFO_KEY","getSxpTokenInfo","builder","dataId","tenantId","appId","tokenJson","tokenData","_a","tokenRes","data","uuid","len","radix","chars","r","generateRandomString","length","characters","charactersLength","counter","getUid","originalUid","uuidv4","setFontForText","textContent","style","content","cn","en","text","chineseRegex","englishRegex","cnStyle","enStyle","fn","str","chineseStartIndex","englishStartIndex","w","unzip","b64Data","charData","x","binData","pako","_instance","API_URL","PagebuilderClass","Pagebuilder","env","path","decodeData","__STORE__","_b","request_id","fake_session_id","isEmpty","recommendVideoRes","useEditor","useContext","EditorContext","useDataSource","DataSourceContext","feRealSessionIdKey","generateFeSessionId","uid","storeAndLoadFeSessionId","getFeSessionId","refreshFeSessionId","FAKE_USER_KEY","FAKE_USER_STATE","AGREE_POLICY","storeAndLoadFeUserId","fakeUserId","getFeUserId","fakeUserState","useIconLink","domain","appDomain","useSxpDataSource","useMemo","SXP_EVENT_BUS","EventEmitter","SXP_EVENT_TYPE","Consent","width","height","privacy_title","privacy_context","privacy_policy_url","privacy_policy_title","setIsAgreePolicy","bffEventReport","channelObj","params","qs","key","getUtmValue","useEffect","handleAgree","React","memo","SxpDataSourceContext","createContext","DataSourceType","UTM_KEYS","DEFAULT_TAG","SxpDataSourceProvider","render","dataSources","utmVal","enableReportEvent","maxSize","defaultSize","isPreview","sxpParameter","hashTagSize","loadingImage","isOpenHashTag","enabledMetaConversionApi","consentHeight","consentWidth","isShowTag","isOpenConsent","globalConfig","isEditor","rtcList","setRtcList","useState","tagList","setTagList","loading","setLoading","curReqInfo","setCurReqInfo","swiperRef","useRef","isInit","isAgreePolicy","popupDetailData","setPopupDetailData","waterFallData","setWaterFallData","openHashtag","setOpenHashtag","cacheRtcList","setCacheRtcList","cacheActiveIndex","setCacheActiveIndex","isFromHashtag","setIsFromHashtag","videoRef","setVideoRef","themeTag","curTime","selectTag","setSelectTag","isShowConsent","_d","_c","handleChangeThemeTag","tag","bffDataSource","d","bffFetch","useCallback","options","err","getRecommendVideos","query","_e","val","_h","_g","_f","loadVideos","userInfo","eventInfo","sessionID","ef","realUserInfo","realEventInfo","bffFbReport","eventName","actionSource","eventSourceUrl","externalId","bffMutateLike","bffMutateUnlike","bffSubmitForm","bffGetTagList","_o","_m","_l","_q","_p","ctaEvent","rec","product","position","cta","isProd","fromKName","_j","_k","h5EnterLink","getVal","time","defaultLoadingImage","DATA_TYPE","DataSourceProvider","children","isSsr","enable","setOptions","schema","store","setStore","setConfigs","isEqual","getDataSource","getOptions","_options","childKey","item","popupInit","EditorCore","forwardRef","resolver","enableDataSource","ref","currentNode","setCurrentNode","_schema","setSchema","prePiontData","setPrePiontData","undoStack","setUndoStack","redoStack","setRedoStack","popup","setPopup","type","aniType","saveDataSource","dataSource","cloneDeep","_pageInfoData","_setPageInfoData","useImperativeHandle","pageData","getCurPageConf","interactionRender$8","settingRender$6","useEventReport","jumpToWeb","productView","viewTime","backMainFeed","lastFeed","hashTag","Form","layout","columns","onChange","index","AppointForm","title","textStyle","submitBgColor","submitColor","submitText","layoutType","isExternalLink","isPopup","onClick","onClose","submitButtonStyle","props","submitForm","defaultColumns","formData","setFormData","columnsData","handleChange","handleSubmit","debounce","vals","arr","css","createMaterial","component","AppointFormComponent","settingRender","interactionRender","settingRender$5","isObject","obj","extend","target","src","ssrDocument","getDocument","doc","ssrWindow","callback","getWindow","win","classesToTokens","classes","c","deleteProps","object","nextTick","delay","now","getComputedStyle","el","window","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","a","o","isNode","node","to","noExtend","nextSource","keysArray","nextIndex","nextKey","desc","setCSSProperty","varName","varValue","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","startTime","duration","dir","isOutOfBound","current","animate","progress","easeProgress","currentPosition","elementChildren","element","selector","showWarning","createElement","elementOffset","document","box","clientTop","clientLeft","scrollTop","scrollLeft","elementPrevAll","prevEls","prev","elementNextAll","nextEls","next","elementStyle","prop","elementIndex","child","elementParents","parents","parent","elementTransitionEnd","fireCallBack","elementOuterSize","size","includeMargins","makeElementsArray","Mousewheel","extendParams","on","emit","timeout","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","normalize","sX","sY","pX","pY","handleMouseEnter","handleMouseLeave","animateSlider","newEvent","releaseScroll","handle","event","disableParentSwiper","targetEl","targetElContainsTarget","delta","rtlFactor","positions","prevEvent","ignoreWheelEvents","wasBeginning","wasEnd","firstEvent","snapToThreshold","events","disable","createElementIfNotDefined","originalParams","checkProps","classesToSelector","Pagination","pfx","number","bulletSize","dynamicBulletIndex","isPaginationDisabled","setSideBullets","bulletEl","bulletActiveClass","onBulletClick","update","rtl","previousIndex","slidesLength","total","bullets","firstIndex","lastIndex","midIndex","subEl","classesToRemove","suffix","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","totalEl","progressbarDirection","scale","scaleX","scaleY","progressEl","paginationHTML","numberOfBullets","init","destroy","_s","isHidden","Scrollbar","isTouched","dragTimeout","dragStartPos","dragSize","trackSize","divider","setTranslate","scrollbar","dragEl","newSize","newPos","setTransition","updateSize","getPointerPosition","setDragPosition","positionRatio","onDragStart","wrapperEl","onDragMove","onDragEnd","activeListener","passiveListener","eventMethod","enableDraggable","disableDraggable","swiperEl","Autoplay","raf","autoplayDelayTotal","autoplayDelayCurrent","autoplayTimeLeft","autoplayStartTime","wasPaused","pausedByTouch","touchStartTimeout","slideChanged","pausedByInteraction","pausedByPointerEnter","onTransitionEnd","resume","calcTimeLeft","timeLeft","getSlideDelay","activeSlideEl","slideEl","run","delayForce","currentSlideDelay","speed","proceed","start","stop","pause","internal","reset","onVisibilityChange","onPointerEnter","onPointerLeave","attachMouseEvents","detachMouseEvents","attachDocumentEvents","detachDocumentEvents","freeMode","once","onTouchStart","translate","onTouchMove","touches","onTouchEnd","_ref2","currentPos","snapGrid","timeDiff","lastMoveEvent","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","doBounce","afterBouncePosition","bounceAmount","needsLoopFix","nextSlide","j","moveDistance","currentSlideSize","support","calcSupport","getSupport","deviceCached","calcDevice","_temp","userAgent","platform","ua","device","screenWidth","screenHeight","android","ipad","ipod","iphone","windows","macos","iPadScreens","getDevice","overrides","browser","calcBrowser","needPerspectiveFix","isSafari","major","minor","num","isWebView","isSafariBrowser","need3dFix","getBrowser","Resize","observer","animationFrame","resizeHandler","createObserver","entries","newWidth","newHeight","contentBoxSize","contentRect","removeObserver","orientationChangeHandler","Observer","observers","attach","ObserverFunc","mutations","observerUpdate","containerParents","eventsEmitter","handler","priority","self","onceHandler","_len","args","_key","eventHandler","context","_len2","_key2","updateSlides","getDirectionPropertyValue","label","slidesEl","swiperSize","wrongRTL","isVirtual","previousSlidesLength","slides","slidesGrid","slidesSizesGrid","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","gridEnabled","slideSize","shouldResetSlideSize","slide","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","marginLeft","marginRight","boxSizing","clientWidth","offsetWidth","newSlidesGrid","slidesGridItem","groups","groupSize","_","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","offsetSize","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","getSlideByIndex","updateSlidesOffset","minusOffset","toggleSlideClasses$1","condition","className","updateSlidesProgress","offsetCenter","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","isFullyVisible","isVisible","updateProgress","multiplier","translatesDiff","isBeginning","isEnd","progressLoop","isBeginningRounded","isEndRounded","firstSlideIndex","lastSlideIndex","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","toggleSlideClasses","updateSlidesClasses","activeIndex","getFilteredSlide","activeSlide","prevSlide","processLazyPreloader","imageEl","slideSelector","lazyEl","unlazy","preload","amount","slidesPerView","activeColumn","preloadColumns","slideIndexLastInView","realIndex","getActiveIndexByTranslate","updateActiveIndex","newActiveIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","skip","firstSlideInColumn","activeSlideIndex","updateClickedSlide","pathEl","slideFound","getSwiperTranslate","currentTranslate","byController","y","z","newProgress","minTranslate","maxTranslate","translateTo","runCallbacks","translateBounds","newTranslate","isH","transitionEmit","direction","transitionStart","transitionEnd","transition","slideTo","initial","enabled","normalizedTranslate","normalizedGrid","normalizedGridNext","slideToLoop","newIndex","targetSlideIndex","cols","centeredSlides","needLoopFix","slideNext","animating","perGroup","increment","slidePrev","rtlTranslate","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","slideReset","slideToClosest","threshold","currentSnap","nextSnap","slideToClickedSlide","slideToIndex","loopCreate","slideRealIndex","initSlides","slidesPerGroup","shouldFillGroup","shouldFillGrid","addBlankSlides","amountOfSlides","slidesToAdd","loopFix","byMousewheel","allowSlidePrev","allowSlideNext","loopedSlides","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","activeColIndexWithShift","colIndexToPrepend","currentSlideTranslate","diff","shift","loopParams","loopDestroy","newSlidesOrder","loop","setGrabCursor","moving","unsetGrabCursor","grabCursor","closestElement","base","__closestFrom","found","preventEdgeSwipe","startX","edgeSwipeDetection","edgeSwipeThreshold","swipingClassHasValue","eventPath","noSwipingSelector","isTargetShadow","startY","preventDefault","shouldPreventDefault","targetTouch","pageX","pageY","diffX","diffY","touchAngle","touchesDiff","prevTouchesDirection","isLoop","allowLoopFix","evt","loopFixed","resistanceRatio","touchEndTime","pathTree","swipeToLast","stopIndex","rewindFirstIndex","rewindLastIndex","ratio","onResize","isVirtualLoop","onScroll","onLoad","onDocumentTouchStart","capture","domMethod","swiperMethod","attachEvents","detachEvents","events$1","isGridEnabled","setBreakpoint","initialized","breakpoints","breakpoint","breakpointParams","wasMultiRow","isMultiRow","wasGrabCursor","isGrabCursor","wasEnabled","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","wasLoop","isEnabled","hasLoop","getBreakpoint","containerEl","currentHeight","points","point","minRatio","b","prepareClasses","prefix","resultClasses","classNames","addClasses","suffixes","removeClasses","checkOverflow","wasLocked","slidesOffsetBefore","lastSlideRightEdge","checkOverflow$1","defaults","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","prototypes","extendedDefaults","Swiper$1","Swiper","swipers","newParams","mod","swiperParams","property","min","cls","updates","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","getWrapperSelector","lazyElements","deleteInstance","cleanStyles","newDefaults","modules","module","m","prototypeGroup","protoMethod","paramsList","needsNavigation","needsPagination","needsScrollbar","uniqueClasses","unique","wrapperClass","updateSwiper","passedParams","changedParams","nextEl","prevEl","scrollbarEl","paginationEl","updateParams","currentParams","pagination","navigation","virtual","thumbs","needThumbsInit","needControllerInit","needPaginationInit","needScrollbarInit","needNavigationInit","loopNeedDestroy","loopNeedEnable","loopNeedReloop","destroyModule","newValue","getParams","splitEvents","rest","allowedParams","plainObj","mountSwiper","getChangedParams","oldParams","oldChildren","getKey","keys","addKey","oldChildrenKeys","childrenKeys","newKeys","oldKeys","newKey","oldKey","updateOnVirtualData","_extends","source","isChildSwiperSlide","processChildren","getChildren","slots","foundSlides","renderVirtual","virtualData","getSlideIndex","from","loopFrom","loopTo","slidesToRender","useIsomorphicLayoutEffect","deps","useLayoutEffect","SwiperSlideContext","useSwiperSlide","SwiperContext","externalElRef","Tag","WrapperTag","onSwiper","eventsAssigned","containerClasses","setContainerClasses","setVirtualData","breakpointChanged","setBreakpointChanged","initializedRef","swiperElRef","oldPassedParamsRef","oldSlides","nextElRef","prevElRef","paginationElRef","scrollbarElRef","restProps","onBeforeBreakpoint","initSwiper","passParams","extendWith","renderSlides","SwiperSlide","externalRef","zoom","lazy","virtualIndex","swiperSlideIndex","slideElRef","slideClasses","setSlideClasses","lazyLoaded","setLazyLoaded","updateClasses","slideData","renderChildren","closeIcon","Modal","visible","modalStyle","padding","isShow","setIsShow","modalEleRef","parentNode","isOpen","handleClose","ReactDOM","limitTextLastWholeWord","originalText","limit","words","newWords","ExpandableText","maxStr","foldText","unfoldText","isPost","isShowMore","setIsShowMore","lineClamp","multiRow","multiRowCopy","handleClick","FormatImage","imgSrc","setImgSrc","CommodityDetail","bgImg","isDefault","bottom_image","tipText","commodityStyles","buttonStyle","curTimeRef","showModal","setShowModal","handleLink","initTime","priceText","renderContent","getStyle","renderBtn","CommodityDetailComponent","interactionRender$7","settingRender$4","img","getMediaValueByMode","mode","link","file","Prompt","btnText","icon","iconSrc","handleOk","success","PromptComponent","settingRender$3","CommodityDetailDiroNew","scrollRef","productInfoText","CommodityDetailDiroNewComponent","settingRender$2","interactionRender$6","EventProvider","throttle","useOnScreen","observerRef","isOnScreen","setIsOnScreen","entry","Img","translateY","imgStyle","Commodity","recData","ctaTempStyles","styles","CommodityComponent","interactionRender$5","Appoint","AppointComponent","Link","handleTo","LinkComponent","interactionRender$4","CommodityDiro","CommodityDiroComponent","interactionRender$3","CommodityDiroNew","CommodityDiroNewComponent","interactionRender$2","Scroll","isPadding","FreeMode","MultiCommodityDiro","products","setProducts","MultiCommodityDiroComponent","interactionRender$1","MultiCommodity","MultiCommodityComponent","MultiCommodityDiroNew","MultiCommodityDiroNewComponent","settingRender$1","Navbar","WaterfallFlowItem","sizeChange","unitWidth","showBorder","list","reportTagsView","textStyles","space","showVideo","setShowVideo","imgDom","firstFrameSrc","setFirstFrameSrc","top","pictRef","imgLoad","handleClickToDetail","WaterfallList","showBanner","scrollParent","setScrollTop","setData","waterfallFlowDom","styleList","setStyleList","styleListRef","heightList","isLoadingData","setIsLoadingData","setList","buttonRef","createRandomNum","max","waterfallFlowListInfo","frameInfo","setFrameInfoInfo","rowsNum","getStyleList","temporaryStyleList","bottomItemIndex","currentRow","remainder","minHeightInd","minHeight","onSizeChange","previewData","resizeObserver","handleClickLink","ind","_r","_t","_u","_v","_w","_x","_y","videoDom","canvasRef","calculateHeightForWidth","videoWidth","videoHeight","targetWidth","aspectRatio","video","canvas","ctx","targetHeight","containerRef","isLoadMore","setIsLoadMore","WaterFall","setViewTime","isEq","setRecData","left","List","HashTag","HashTagComponent","ConsentComponent","defaultUnLikeIconPath","defaultLikeIconPath","LikeButton","active","activeIcon","unActicveIcon","mutateLike","mutateUnlike","state","setState","likeIcon","unlikeIcon","VideoWidget","muted","videoPostConfig","videoPlayIcon","isPauseVideo","setIsPauseVideo","videoStartTime","isLoadFinish","setIsLoadFinish","isFirstPlay","setIsFirstPlay","isActive","waiting","setWaiting","videoId","videoEleRef","blur","blurBgSrc","blurStyle","isBgColor","bgStyle","handlePlay","PAUSE_ICON","handlePlaying","handleStartPlay","videoDuration","videoCurrentTime","playType","handLoadeddata","setFrameImg","handleLoadedmetadata","handleClickVideo","isPause","handlePause","playDuration","handleWaiting","videoSrc","Hls","hls","videoPlayerWrapperNode","dom","dom2","onShow","onHide","renderPoster","renderLoading","loading_gif","handleBeforeUnload","ToggleButton","defaultValue","unactiveIcon","isTrue","setIsTure","FingerSwipeTip","imageUrl","show","setShow","FINGER_SWIPE_ICON","animationCls","Picture","imgUrlsPostConfig","onShowFirstImage","PictureGroup","imgUrls","onReportViewImageEnd","onViewImageStartEvent","isLoad","setIsLoad","showFirstImageFn","Hashtag","tags","itemId","itemType","hashTagStyle","handleClickTag","withBindDataSource","Component","handleDataSourceByEvent","dataArr","match","get","clonedProps","bindDatas","cloneProps","propKey","dataPath","eventObj","RenderCard","tempMap","renderComp","defaulSetting","_0","_z","_1","_2","_4","_3","_5","_6","Nudge","nudge","Tagbar","setActiveIndex","realTagList","handleSelectTag","SxpPageRender","descStyle","containerHeight","containerWidth","ctaType","licenseUrl","viewImageStartTime","isMuted","setIsMuted","isShowFingerTip","handleH5EnterLink","firstRef","visibleChange","repCond","handleReportViewImageEnd","handleReportProductView","handleViewImageStartEvent","tagHeight","h","minusHeight","renderLogo","idx","onExpandableChange","lineGradStyle","renderBottom","renderLikeButton","endTime","handleScrollEvent","curItem","visList","renderView","mutedIcon","unmutedIcon","handleVideoStart","handleLoadedMetadata","onPause","RESOLVER","_materials_","DiyPortalPreview","CTA","Popup","setVisible","renderPopupDetail","SxpPageCore","EditorDataContext","EditorDataProvider","openConsent","setOpenConsent","useEditorDataProvider"],"mappings":"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ACD,CACE,MAAO,qBACP,KAAM,SACN,WAAY,KACZ,KAAM,CAAC,cAAc,CACtB,CACF,CACF,EAED,CACE,KAAM,QACN,MAAO,2BACP,MAAO,CACL,CACE,KAAM,SACN,KAAM,CAAC,eAAe,EACtB,WAAY,0BACb,EACD,CACE,KAAM,SACN,KAAM,CAAC,eAAe,EACtB,WAAY,uCACb,CACF,CACF,EACD,CACE,KAAM,QACN,MAAO,GACP,MAAO,CACL,CACE,KAAM,QACN,KAAM,CAAC,OAAO,CACf,EACD,CACE,KAAM,SACN,WAAY,KACZ,KAAM,CAAC,UAAU,CAClB,CACF,CACF,EACD,CACE,MAAO,2BACP,KAAM,WACP,EACD,CACE,MAAO,2BACP,KAAM,WACP,EACD,CACE,MAAO,2BACP,KAAM,SACN,KAAM,CAAC,WAAW,CACnB,CACF,CACF,CACF,CACF,EACD,CACE,MAAO,uCACP,MAAO,CACL,CACE,KAAM,QACN,MAAO,qBACP,KAAM,CAAC,QAAS,cAAe,iBAAiB,EAChD,aAAc,MACf,EACD,CACE,KAAM,QACN,MAAO,eACP,MAAO,CACL,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,QAAQ,EACvC,WAAY,GACb,CACF,CACF,EACD,CACE,KAAM,QACN,MAAO,eACP,MAAO,CACL,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,cAAc,EAC7C,IAAK,GACN,EACD,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,cAAc,EAC7C,WAAY,KACZ,IAAK,GACN,CACF,CACF,EACD,CACE,KAAM,aACN,KAAM,CAAC,QAAS,aAAa,CAC9B,EACD,CACE,KAAM,QACN,MAAO,eACP,MAAO,CACL,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,eAAe,EAC9C,WAAY,0BACb,EACD,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,eAAe,EAC9C,WAAY,uCACb,CACF,CACF,EACD,CACE,KAAM,QACN,MAAO,GACP,MAAO,CACL,CACE,KAAM,QACN,KAAM,CAAC,QAAS,cAAe,OAAO,EACtC,aAAc,MACf,EAED,CACE,KAAM,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CACE,KAAM,SACN,KAAM,CAAC,eAAe,EACtB,WAAY,uCACb,CACF,CACF,EACD,CACE,KAAM,QACN,MAAO,GACP,MAAO,CACL,CACE,KAAM,QACN,KAAM,CAAC,OAAO,CACf,EAED,CACE,KAAM,SACN,WAAY,KACZ,KAAM,CAAC,UAAU,CAClB,CACF,CACF,EACD,CACE,MAAO,2BACP,KAAM,WACP,EACD,CACE,MAAO,2BACP,KAAM,WACP,EACD,CACE,MAAO,2BACP,KAAM,SACN,KAAM,CAAC,WAAW,CACnB,CACF,CACF,CACF,CACF,EACD,CACE,MAAO,uCACP,MAAO,CACL,CACE,KAAM,QACN,MAAO,qBACP,KAAM,CAAC,QAAS,cAAe,iBAAiB,EAChD,aAAc,MACf,EACD,CACE,KAAM,QACN,MAAO,eACP,MAAO,CACL,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,QAAQ,EACvC,WAAY,GACb,CACF,CACF,EACD,CACE,KAAM,QACN,MAAO,eACP,MAAO,CACL,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,cAAc,EAC7C,IAAK,GACN,EACD,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,cAAc,EAC7C,WAAY,KACZ,IAAK,GACN,CACF,CACF,EACD,CACE,KAAM,aACN,KAAM,CAAC,QAAS,aAAa,CAC9B,EACD,CACE,KAAM,QACN,MAAO,eACP,MAAO,CACL,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,eAAe,EAC9C,WAAY,0BACb,EACD,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,eAAe,EAC9C,WAAY,uCACb,CACF,CACF,EACD,CACE,KAAM,QACN,MAAO,GACP,MAAO,CACL,CACE,KAAM,QACN,KAAM,CAAC,QAAS,cAAe,OAAO,EACtC,aAAc,MACf,EACD,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,UAAU,EACzC,WAAY,IACb,CACF,CACF,EACD,CACE,KAAM,YACN,KAAM,CAAC,QAAS,aAAa,CAC9B,EACD,CACE,KAAM,YACN,KAAM,CAAC,QAAS,aAAa,CAC9B,CACF,CACF,GCxJH,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ACR,EACD,CACE,MAAO,eACP,MAAO,OACR,EACD,CACE,MAAO,eACP,MAAO,OACR,CACF,EACD,KAAM,CAAC,QAAS,aAAc,OAAO,EACrC,aAAc,OACf,EACD,CACE,KAAM,QACN,MAAO,2BACP,MAAO,CACL,CACE,KAAM,SACN,KAAM,CAAC,eAAe,EACtB,WAAY,0BACb,EACD,CACE,KAAM,SACN,KAAM,CAAC,eAAe,EACtB,WAAY,uCACb,CACF,CACF,EACD,CACE,KAAM,QACN,MAAO,GACP,MAAO,CACL,CACE,KAAM,QACN,KAAM,CAAC,OAAO,CACf,EACD,CACE,KAAM,SACN,WAAY,KACZ,KAAM,CAAC,UAAU,CAClB,CACF,CACF,EACD,CACE,MAAO,2BACP,KAAM,WACP,EACD,CACE,MAAO,2BACP,KAAM,WACP,CACF,CACF,CACF,CACF,EACD,CACE,MAAO,2BACP,MAAO,CACL,CACE,KAAM,QACN,MAAO,qBACP,KAAM,CAAC,QAAS,cAAe,iBAAiB,EAChD,aAAc,MACf,EACD,CACE,KAAM,QACN,MAAO,eACP,MAAO,CACL,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,QAAQ,EACvC,WAAY,GACb,CACF,CACF,EACD,CACE,KAAM,QACN,MAAO,eACP,MAAO,CACL,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,cAAc,EAC7C,IAAK,GACN,EACD,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,cAAc,EAC7C,WAAY,KACZ,IAAK,GACN,CACF,CACF,EACD,CACE,KAAM,cACN,KAAM,CAAC,QAAS,eAAe,CAChC,EACD,CACE,KAAM,QACN,MAAO,eACP,MAAO,CACL,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,eAAe,EAC9C,WAAY,0BACb,EACD,CACE,KAAM,SACN,KAAM,CAAC,QAAS,cAAe,eAAe,EAC9C,WAAY,uCACb,CACF,CACF,EACD,CACE,KAAM,QACN,MAAO,GACP,MAAO,CACL,CACE,KAAM,QACN,KAAM,CAAC,QAAS,cAAe,OAAO,EACtC,aAAc,MACf,EAED,CACE,KAAM,SACN,KAA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","x_google_ignoreList":[0,27,28,29,30,31,32,33,34,35,36,37,38,39]}
|