acdr-ui/dist/dev/mp-weixin/sheep/components/s-select-groupon-sku/s-select-groupon-sku.js.map

1 line
18 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"s-select-groupon-sku.js","sources":["../../../../../../src/sheep/components/s-select-groupon-sku/s-select-groupon-sku.vue","../../../../../../uniComponent:/RDovQXBwL1dvcmsvYWRkci9hY2RyLXVpL3NyYy9zaGVlcC9jb21wb25lbnRzL3Mtc2VsZWN0LWdyb3Vwb24tc2t1L3Mtc2VsZWN0LWdyb3Vwb24tc2t1LnZ1ZQ"],"sourcesContent":["<template>\r\n <!-- 拼团商品规格弹窗 -->\r\n <su-popup :show=\"show\" round=\"10\" @close=\"emits('close')\">\r\n <!-- SKU 信息 -->\r\n <view class=\"ss-modal-box bg-white ss-flex-col\">\r\n <view class=\"modal-header ss-flex ss-col-center\">\r\n <view class=\"header-left ss-m-r-30\">\r\n <image\r\n class=\"sku-image\"\r\n :src=\"sheep.$url.cdn(state.selectedSku.picUrl || goodsInfo.picUrl)\"\r\n mode=\"aspectFill\"\r\n />\r\n </view>\r\n <view class=\"header-right ss-flex-col ss-row-between ss-flex-1\">\r\n <view class=\"goods-title ss-line-2\">\r\n <view class=\"tig ss-flex ss-col-center\">\r\n <view class=\"tig-icon ss-flex ss-col-center ss-row-center\">\r\n <view class=\"groupon-tag\">\r\n <image :src=\"sheep.$url.static('/static/img/shop/goods/groupon-tag-white.png')\" />\r\n </view>\r\n </view>\r\n <view class=\"tig-title\">拼团价</view>\r\n </view>\r\n <view class=\"info-title\">\r\n {{ goodsInfo.name }}\r\n </view>\r\n </view>\r\n <view class=\"header-right-bottom ss-flex ss-col-center ss-row-between\">\r\n <view class=\"price-text\">\r\n {{\r\n fen2yuan(\r\n state.selectedSku.price || goodsInfo.price || state.selectedSku.marketPrice,\r\n )\r\n }}\r\n </view>\r\n\r\n <view class=\"stock-text ss-m-l-20\">\r\n 库存{{ state.selectedSku.stock || goodsInfo.stock }}件\r\n </view>\r\n </view>\r\n </view>\r\n </view>\r\n <view class=\"modal-content ss-flex-1\">\r\n <scroll-view scroll-y=\"true\" class=\"modal-content-scroll\">\r\n <view class=\"sku-item ss-m-b-20\" v-for=\"property in propertyList\" :key=\"property.id\">\r\n <view class=\"label-text ss-m-b-20\">{{ property.name }}</view>\r\n <view class=\"ss-flex ss-col-center ss-flex-wrap\">\r\n <button\r\n class=\"ss-reset-button spec-btn\"\r\n v-for=\"value in property.values\"\r\n :class=\"[\r\n {\r\n 'checked-btn': state.currentPropertyArray[property.id] === value.id,\r\n },\r\n {\r\n 'disabled-btn': value.disabled === true,\r\n },\r\n ]\"\r\n :key=\"value.id\"\r\n :disabled=\"value.disabled === true\"\r\n @tap=\"onSelectSku(property.id, value.id)\"\r\n >\r\n {{ value.name }}\r\n </button>\r\n </view>\r\n </view>\r\n <view class=\"buy-num-box ss-flex ss-col-center ss-row-between\">\r\n <view class=\"label-text\">购买数量</view>\r\n <su-number-box\r\n :min=\"1\"\r\n :max=\"state.selectedSku.stock\"\r\n :step=\"1\"\r\n v-model=\"state.selectedSku.count\"\r\n @change=\"onNumberChange($event)\"\r\n activity=\"groupon\"\r\n />\r\n </view>\r\n </scroll-view>\r\n </view>\r\n\r\n <!-- 操作区 -->\r\n <view class=\"modal-footer ss-p-y-20\">\r\n <view class=\"buy-box ss-flex ss-col-center ss-flex ss-col-center ss-row-center\">\r\n <view class=\"ss-flex\">\r\n <button class=\"ss-reset-button origin-price-btn ss-flex-col\">\r\n <view class=\"btn-title\">{{ grouponNum + '人团' }}</view>\r\n </button>\r\n <button class=\"ss-reset-button btn-tox ss-flex-col\" @tap=\"onBuy\">\r\n <view class=\"btn-price\">\r\n {{\r\n fen2yuan(\r\n state.selectedSku.price * state.selectedSku.count ||\r\n goodsInfo.price * state.selectedSku.count ||\r\n state.selectedSku.marketPrice * state.selectedSku.count ||\r\n goodsInfo.price,\r\n )\r\n }}\r\n </view>\r\n <view v-if=\"grouponAction === 'create'\">立即开团</view>\r\n <view v-else-if=\"grouponAction === 'join'\">参与拼团</view>\r\n </button>\r\n </view>\r\n </view>\r\n </view>\r\n </view>\r\n </su-popup>\r\n</template>\r\n\r\n<script setup>\r\nimport { computed, reactive, watch } from 'vue'\r\nimport sheep from '@/sheep'\r\nimport { convertProductPropertyList, fen2yuan } from '@/sheep/hooks/useGoods'\r\n\r\nconst headerBg = sheep.$url.css('/static/img/shop/goods/groupon-btn-long.png')\r\nconst emits = defineEmits(['change', 'addCart', 'buy', 'close', 'ladder'])\r\nconst props = defineProps({\r\n show: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n goodsInfo: {\r\n type: Object,\r\n default() {},\r\n },\r\n grouponAction: {\r\n type: String,\r\n default: 'create',\r\n },\r\n grouponNum: {\r\n type: [Number, String],\r\n default: 0,\r\n },\r\n})\r\nconst state = reactive({\r\n selectedSku: {}, // 选中的 SKU\r\n currentPropertyArray: [], // 当前选中的属性,实际是个 Map。key 是 property 编号value 是 value 编号\r\n grouponNum: props.grouponNum,\r\n})\r\n\r\nconst propertyList = convertProductPropertyList(props.goodsInfo.skus)\r\n\r\n// SKU 列表\r\nconst skuList = computed(() => {\r\n const skuPrices = props.goodsInfo.skus\r\n for (const price of skuPrices) {\r\n price.value_id_array = price.properties.map((item) => item.valueId)\r\n }\r\n return skuPrices\r\n})\r\n\r\nwatch(\r\n () => state.selectedSku,\r\n (newVal) => {\r\n emits('change', newVal)\r\n },\r\n {\r\n immediate: true, // 立即执行\r\n deep: true, // 深度监听\r\n },\r\n)\r\n\r\n// 输入框改变数量\r\nfunction onNumberChange(e) {\r\n if (e === 0) return\r\n if (state.selectedSku.count === e) return\r\n state.selectedSku.count = e\r\n}\r\n\r\n// 点击购买\r\nfunction onBuy() {\r\n if (!state.selectedSku.id || state.selectedSku.id <= 0) {\r\n sheep.$helper.toast('请选择规格')\r\n return\r\n }\r\n if (state.selectedSku.stock <= 0) {\r\n sheep.$helper.toast('库存不足')\r\n return\r\n }\r\n emits('buy', state.selectedSku)\r\n}\r\n\r\n// 改变禁用状态:计算每个 property 属性值的按钮,是否禁用\r\nfunction changeDisabled(isChecked = false, propertyId = 0, valueId = 0) {\r\n let newSkus = [] // 所有可以选择的 sku 数组\r\n if (isChecked) {\r\n // 情况一:选中 property\r\n // 获得当前点击选中 property 的、所有可用 SKU\r\n for (const price of skuList.value) {\r\n if (price.stock <= 0) {\r\n continue\r\n }\r\n if (price.value_id_array.indexOf(valueId) >= 0) {\r\n newSkus.push(price)\r\n }\r\n }\r\n } else {\r\n // 情况二:取消选中 property\r\n // 当前所选 property 下,所有可以选择的 SKU\r\n newSkus = getCanUseSkuList()\r\n }\r\n\r\n // 所有存在并且有库存未选择的 SKU 的 value 属性值 id\r\n let noChooseValueIds = []\r\n for (const price of newSkus) {\r\n noChooseValueIds = noChooseValueIds.concat(price.value_id_array)\r\n }\r\n noChooseValueIds = Array.from(new Set(noChooseValueIds)) // 去重\r\n\r\n if (isChecked) {\r\n // 去除当前选中的 value 属性值 id\r\n const index = noChooseValueIds.indexOf(valueId)\r\n noChooseValueIds.splice(index, 1)\r\n } else {\r\n // 循环去除当前已选择的 value 属性值 id\r\n state.currentPropertyArray.forEach((currentPropertyId) => {\r\n if (currentPropertyId.toString() !== '') {\r\n return\r\n }\r\n // currentPropertyId 为空是反选 填充的\r\n const index = noChooseValueIds.indexOf(currentPropertyId)\r\n if (index >= 0) {\r\n // currentPropertyId 存在于 noChooseValueIds\r\n noChooseValueIds.splice(index, 1)\r\n }\r\n })\r\n }\r\n\r\n // 当前已选择的 property 数组\r\n let choosePropertyIds = []\r\n if (!isChecked) {\r\n // 当前已选择的 property\r\n state.currentPropertyArray.forEach((currentPropertyId, currentValueId) => {\r\n if (currentPropertyId !== '') {\r\n // currentPropertyId 为空是反选 填充的\r\n choosePropertyIds.push(currentValueId)\r\n }\r\n })\r\n } else {\r\n // 当前点击选择的 property\r\n choosePropertyIds = [propertyId]\r\n }\r\n\r\n for (const propertyIndex in propertyList) {\r\n // 当前点击的 property、或者取消选择时候已选中的 property 不进行处理\r\n if (choosePropertyIds.indexOf(propertyList[propertyIndex].id) >= 0) {\r\n continue\r\n }\r\n // 如果当前 property id 不存在于有库存的 SKU 中,则禁用\r\n for (const valueIndex in propertyList[propertyIndex].values) {\r\n propertyList[propertyIndex].values[valueIndex].disabled =\r\n noChooseValueIds.indexOf(propertyList[propertyIndex].values[valueIndex].id) < 0 // true 禁用 or false 不禁用\r\n }\r\n }\r\n}\r\n\r\n// 当前所选属性下,获取所有有库存的 SKU 们\r\nfunction getCanUseSkuList() {\r\n const newSkus = []\r\n for (const sku of skuList.value) {\r\n if (sku.stock <= 0) {\r\n continue\r\n }\r\n let isOk = true\r\n state.currentPropertyArray.forEach((propertyId) => {\r\n // propertyId 不为空,并且,这个 条 sku 没有被选中,则排除\r\n if (propertyId.toString() !== '' && sku.value_id_array.indexOf(propertyId) < 0) {\r\n isOk = false\r\n }\r\n })\r\n if (isOk) {\r\n newSkus.push(sku)\r\n }\r\n }\r\n return newSkus\r\n}\r\n\r\n// 选择规格\r\nfunction onSelectSku(propertyId, valueId) {\r\n // 清空已选择\r\n let isChecked = true // 选中 or 取消选中\r\n if (\r\n state.currentPropertyArray[propertyId] !== undefined &&\r\n state.currentPropertyArray[propertyId] === valueId\r\n ) {\r\n // 点击已被选中的,删除并填充 ''\r\n isChecked = false\r\n state.currentPropertyArray.splice(propertyId, 1, '')\r\n } else {\r\n // 选中\r\n state.currentPropertyArray[propertyId] = valueId\r\n }\r\n\r\n // 选中的 property 大类\r\n const choosePropertyId = []\r\n state.currentPropertyArray.forEach((currentPropertyId) => {\r\n if (currentPropertyId !== '') {\r\n // currentPropertyId 为空是反选 填充的\r\n choosePropertyId.push(currentPropertyId)\r\n }\r\n })\r\n\r\n // 当前所选 property 下,所有可以选择的 SKU 们\r\n const newSkuList = getCanUseSkuList()\r\n\r\n // 判断所有 property 大类是否选择完成\r\n if (choosePropertyId.length === propertyList.length && newSkuList.length) {\r\n newSkuList[0].count = state.selectedSku.count || 1\r\n state.selectedSku = newSkuList[0]\r\n } else {\r\n state.selectedSku = {}\r\n }\r\n\r\n // 改变 property 禁用状态\r\n changeDisabled(isChecked, propertyId, valueId)\r\n}\r\n\r\nchangeDisabled(false)\r\n// TODO 芋艿待讨论的优化点1单规格要不要默认选中2默认要不要选中第一个规格\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n \r\n// 购买\r\n.buy-btn {\r\n width: 100%;\r\n height: 80rpx;\r\n margin: 0 20rpx;\r\n color: #fff;\r\n background: linear-gradient(90deg, #ff6000, #fe832a);\r\n border-radius: 40rpx;\r\n}\r\n.btn-tox {\r\n width: 382rpx;\r\n height: 80rpx;\r\n margin-left: -50rpx;\r\n font-size: 24rpx;\r\n font-weight: 600;\r\n line-height: normal;\r\n color: #ffffff;\r\n background-image: v-bind(headerBg);\r\n background-repeat: no-repeat;\r\n background-size: 100% 100%;\r\n border-radius: 0px 40rpx 40rpx 0px;\r\n\r\n .btn-price {\r\n font-family: OPPOSANS;\r\n\r\n &::before {\r\n content: '¥';\r\n }\r\n }\r\n}\r\n.origin-price-btn {\r\n width: 370rpx;\r\n height: 80rpx;\r\n font-size: 24rpx;\r\n font-weight: 500;\r\n line-height: normal;\r\n color: #ff6000;\r\n background: rgba(#ff5651, 0.1);\r\n border-radius: 40rpx 0px 0px 40rpx;\r\n\r\n .btn-price {\r\n font-family: OPPOSANS;\r\n\r\n &::before {\r\n content: '¥';\r\n }\r\n }\r\n\r\n .btn-title {\r\n font-size: 28rpx;\r\n }\r\n}\r\n\r\n.ss-modal-box {\r\n max-height: 1000rpx;\r\n border-radius: 30rpx 30rpx 0 0;\r\n\r\n .modal-header {\r\n position: relative;\r\n padding: 80rpx 20rpx 40rpx;\r\n\r\n .sku-image {\r\n width: 160rpx;\r\n height: 160rpx;\r\n border-radius: 10rpx;\r\n }\r\n\r\n .header-right {\r\n height: 160rpx;\r\n }\r\n\r\n .close-icon {\r\n position: absolute;\r\n top: 10rpx;\r\n right: 20rpx;\r\n font-size: 46rpx;\r\n opacity: 0.2;\r\n }\r\n\r\n .goods-title {\r\n position: relative;\r\n font-size: 28rpx;\r\n font-weight: 500;\r\n line-height: 42rpx;\r\n .tig {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 126rpx;\r\n height: 38rpx;\r\n border: 2rpx solid #ff6000;\r\n border-radius: 4rpx;\r\n\r\n .tig-icon {\r\n width: 40rpx;\r\n height: 40rpx;\r\n margin-left: -2rpx;\r\n background: #ff6000;\r\n border-radius: 4rpx 0 0 4rpx;\r\n\r\n .groupon-tag {\r\n width: 32rpx;\r\n height: 32rpx;\r\n }\r\n }\r\n\r\n .tig-title {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 86rpx;\r\n font-size: 24rpx;\r\n font-weight: 500;\r\n line-height: normal;\r\n color: #ff6000;\r\n }\r\n }\r\n .info-title {\r\n text-indent: 132rpx;\r\n }\r\n }\r\n\r\n .price-text {\r\n font-family: OPPOSANS;\r\n font-size: 30rpx;\r\n font-weight: 500;\r\n color: $red;\r\n\r\n &::before {\r\n font-size: 24rpx;\r\n content: '¥';\r\n }\r\n }\r\n\r\n .stock-text {\r\n font-size: 26rpx;\r\n color: #999999;\r\n }\r\n }\r\n\r\n .modal-content {\r\n padding: 0 20rpx;\r\n\r\n .modal-content-scroll {\r\n max-height: 600rpx;\r\n\r\n .label-text {\r\n font-size: 26rpx;\r\n font-weight: 500;\r\n }\r\n\r\n .buy-num-box {\r\n height: 100rpx;\r\n }\r\n\r\n .spec-btn {\r\n min-width: 100rpx;\r\n height: 60rpx;\r\n padding: 0 30rpx;\r\n margin-right: 10rpx;\r\n margin-bottom: 10rpx;\r\n font-size: 26rpx;\r\n color: #434343;\r\n background: #f4f4f4;\r\n border-radius: 30rpx;\r\n }\r\n\r\n .checked-btn {\r\n font-weight: 500;\r\n color: #ffffff;\r\n background: linear-gradient(90deg, #ff6000, #fe832a);\r\n }\r\n\r\n .disabled-btn {\r\n font-weight: 400;\r\n color: #c6c6c6;\r\n background: #f8f8f8;\r\n }\r\n }\r\n }\r\n}\r\n\r\nimage {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n</style>\r\n","import Component from 'D:/App/Work/addr/acdr-ui/src/sheep/components/s-select-groupon-sku/s-select-groupon-sku.vue'\nwx.createComponent(Component)"],"names":["sheep","reactive","convertProductPropertyList","computed","watch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiHA,UAAM,WAAWA,YAAK,MAAC,KAAK,IAAI,6CAA6C;AAC7E,UAAM,QAAQ;AACd,UAAM,QAAQ;AAkBd,UAAM,QAAQC,cAAAA,SAAS;AAAA,MACrB,aAAa,CAAE;AAAA;AAAA,MACf,sBAAsB,CAAE;AAAA;AAAA,MACxB,YAAY,MAAM;AAAA,IACpB,CAAC;AAED,UAAM,eAAeC,qBAA0B,2BAAC,MAAM,UAAU,IAAI;AAGpE,UAAM,UAAUC,cAAQ,SAAC,MAAM;AAC7B,YAAM,YAAY,MAAM,UAAU;AAClC,iBAAW,SAAS,WAAW;AAC7B,cAAM,iBAAiB,MAAM,WAAW,IAAI,CAAC,SAAS,KAAK,OAAO;AAAA,MACnE;AACD,aAAO;AAAA,IACT,CAAC;AAEDC,kBAAK;AAAA,MACH,MAAM,MAAM;AAAA,MACZ,CAAC,WAAW;AACV,cAAM,UAAU,MAAM;AAAA,MACvB;AAAA,MACD;AAAA,QACE,WAAW;AAAA;AAAA,QACX,MAAM;AAAA;AAAA,MACP;AAAA,IACH;AAGA,aAAS,eAAe,GAAG;AACzB,UAAI,MAAM;AAAG;AACb,UAAI,MAAM,YAAY,UAAU;AAAG;AACnC,YAAM,YAAY,QAAQ;AAAA,IAC5B;AAGA,aAAS,QAAQ;AACf,UAAI,CAAC,MAAM,YAAY,MAAM,MAAM,YAAY,MAAM,GAAG;AACtDJ,0BAAM,QAAQ,MAAM,OAAO;AAC3B;AAAA,MACD;AACD,UAAI,MAAM,YAAY,SAAS,GAAG;AAChCA,0BAAM,QAAQ,MAAM,MAAM;AAC1B;AAAA,MACD;AACD,YAAM,OAAO,MAAM,WAAW;AAAA,IAChC;AAGA,aAAS,eAAe,YAAY,OAAO,aAAa,GAAG,UAAU,GAAG;AACtE,UAAI,UAAU,CAAE;AAChB,UAAI,WAAW;AAGb,mBAAW,SAAS,QAAQ,OAAO;AACjC,cAAI,MAAM,SAAS,GAAG;AACpB;AAAA,UACD;AACD,cAAI,MAAM,eAAe,QAAQ,OAAO,KAAK,GAAG;AAC9C,oBAAQ,KAAK,KAAK;AAAA,UACnB;AAAA,QACF;AAAA,MACL,OAAS;AAGL,kBAAU,iBAAkB;AAAA,MAC7B;AAGD,UAAI,mBAAmB,CAAE;AACzB,iBAAW,SAAS,SAAS;AAC3B,2BAAmB,iBAAiB,OAAO,MAAM,cAAc;AAAA,MAChE;AACD,yBAAmB,MAAM,KAAK,IAAI,IAAI,gBAAgB,CAAC;AAEvD,UAAI,WAAW;AAEb,cAAM,QAAQ,iBAAiB,QAAQ,OAAO;AAC9C,yBAAiB,OAAO,OAAO,CAAC;AAAA,MACpC,OAAS;AAEL,cAAM,qBAAqB,QAAQ,CAAC,sBAAsB;AACxD,cAAI,kBAAkB,SAAU,MAAK,IAAI;AACvC;AAAA,UACD;AAED,gBAAM,QAAQ,iBAAiB,QAAQ,iBAAiB;AACxD,cAAI,SAAS,GAAG;AAEd,6BAAiB,OAAO,OAAO,CAAC;AAAA,UACjC;AAAA,QACP,CAAK;AAAA,MACF;AAGD,UAAI,oBAAoB,CAAE;AAC1B,UAAI,CAAC,WAAW;AAEd,cAAM,qBAAqB,QAAQ,CAAC,mBAAmB,mBAAmB;AACxE,cAAI,sBAAsB,IAAI;AAE5B,8BAAkB,KAAK,cAAc;AAAA,UACtC;AAAA,QACP,CAAK;AAAA,MACL,OAAS;AAEL,4BAAoB,CAAC,UAAU;AAAA,MAChC;AAED,iBAAW,iBAAiB,cAAc;AAExC,YAAI,kBAAkB,QAAQ,aAAa,aAAa,EAAE,EAAE,KAAK,GAAG;AAClE;AAAA,QACD;AAED,mBAAW,cAAc,aAAa,aAAa,EAAE,QAAQ;AAC3D,uBAAa,aAAa,EAAE,OAAO,UAAU,EAAE,WAC7C,iBAAiB,QAAQ,aAAa,aAAa,EAAE,OAAO,UAAU,EAAE,EAAE,IAAI;AAAA,QACjF;AAAA,MACF;AAAA,IACH;AAGA,aAAS,mBAAmB;AAC1B,YAAM,UAAU,CAAE;AAClB,iBAAW,OAAO,QAAQ,OAAO;AAC/B,YAAI,IAAI,SAAS,GAAG;AAClB;AAAA,QACD;AACD,YAAI,OAAO;AACX,cAAM,qBAAqB,QAAQ,CAAC,eAAe;AAEjD,cAAI,WAAW,SAAU,MAAK,MAAM,IAAI,eAAe,QAAQ,UAAU,IAAI,GAAG;AAC9E,mBAAO;AAAA,UACR;AAAA,QACP,CAAK;AACD,YAAI,MAAM;AACR,kBAAQ,KAAK,GAAG;AAAA,QACjB;AAAA,MACF;AACD,aAAO;AAAA,IACT;AAGA,aAAS,YAAY,YAAY,SAAS;AAExC,UAAI,YAAY;AAChB,UACE,MAAM,qBAAqB,UAAU,MAAM,UAC3C,MAAM,qBAAqB,UAAU,MAAM,SAC3C;AAEA,oBAAY;AACZ,cAAM,qBAAqB,OAAO,YAAY,GAAG,EAAE;AAAA,MACvD,OAAS;AAEL,cAAM,qBAAqB,UAAU,IAAI;AAAA,MAC1C;AAGD,YAAM,mBAAmB,CAAE;AAC3B,YAAM,qBAAqB,QAAQ,CAAC,sBAAsB;AACxD,YAAI,sBAAsB,IAAI;AAE5B,2BAAiB,KAAK,iBAAiB;AAAA,QACxC;AAAA,MACL,CAAG;AAGD,YAAM,aAAa,iBAAkB;AAGrC,UAAI,iBAAiB,WAAW,aAAa,UAAU,WAAW,QAAQ;AACxE,mBAAW,CAAC,EAAE,QAAQ,MAAM,YAAY,SAAS;AACjD,cAAM,cAAc,WAAW,CAAC;AAAA,MACpC,OAAS;AACL,cAAM,cAAc,CAAE;AAAA,MACvB;AAGD,qBAAe,WAAW,YAAY,OAAO;AAAA,IAC/C;AAEA,mBAAe,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3TpB,GAAG,gBAAgB,SAAS;"}