@pisell/materials 6.12.53 → 6.12.54

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.
Files changed (84) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/meta.js +3 -3
  5. package/build/lowcode/preview.js +1 -1
  6. package/build/lowcode/render/default/view.css +1 -1
  7. package/build/lowcode/render/default/view.js +48 -48
  8. package/build/lowcode/view.css +1 -1
  9. package/build/lowcode/view.js +48 -48
  10. package/es/components/PisellCards/index.d.ts +0 -1
  11. package/es/components/PisellFields/index.d.ts +0 -1
  12. package/es/components/PisellLayouts/index.d.ts +0 -1
  13. package/es/components/PisellMetrics/index.d.ts +0 -1
  14. package/es/components/appVersionControl/types.d.ts +0 -1
  15. package/es/components/calendar/index.d.ts +0 -1
  16. package/es/components/checkbox/index.d.ts +0 -1
  17. package/es/components/dataSourceComponents/dataSourceShow/dataSourceQRCode/index.d.ts +0 -1
  18. package/es/components/dataSourceComponents/dataSourceTable/type.d.ts +0 -1
  19. package/es/components/dataSourceComponents/fields/Checkbox/WithMode.d.ts +0 -1
  20. package/es/components/dataSourceComponents/fields/Radio/WithMode.d.ts +0 -1
  21. package/es/components/dataSourceComponents/fields/Tabs/index.d.ts +0 -1
  22. package/es/components/dataSourceComponents/fields/Translation/type.d.ts +0 -1
  23. package/es/components/dataSourceComponents/provider/dataSource/DataSourceContext.d.ts +0 -1
  24. package/es/components/date-picker/index.d.ts +0 -1
  25. package/es/components/drag-sort-tree/types.d.ts +0 -1
  26. package/es/components/filter/components/FilterButton/types.d.ts +0 -1
  27. package/es/components/input/index.d.ts +0 -1
  28. package/es/components/pisell-config-provider/context.d.ts +0 -1
  29. package/es/components/pisellDatePicker/index.d.ts +0 -1
  30. package/es/components/pisellGridPro/ToolBar/type.d.ts +0 -1
  31. package/es/components/pisellMenu/types.d.ts +0 -1
  32. package/es/components/pisellQuickFilter/type.d.ts +0 -1
  33. package/es/components/productCard/cartSkuCard/index.js +33 -3
  34. package/es/components/productCard/cartSkuCard/index.less +18 -0
  35. package/es/components/productCard/cartSkuCard/types.d.ts +56 -0
  36. package/es/components/productCard/cartSkuCard/variants/A12/index.js +126 -0
  37. package/es/components/productCard/cartSkuCard/variants/A12/index.less +279 -0
  38. package/es/components/productCard/lineItem/index.js +42 -11
  39. package/es/components/productCard/types.d.ts +4 -1
  40. package/es/components/radio/index.d.ts +0 -1
  41. package/es/components/section-footers/index.d.ts +0 -1
  42. package/es/components/skeleton/index.d.ts +0 -1
  43. package/es/components/time-picker/index.d.ts +0 -1
  44. package/es/components/upload/index.d.ts +0 -1
  45. package/es/components/virtual-keyboard/Amount/types.d.ts +0 -1
  46. package/es/index.d.ts +2 -1
  47. package/lib/components/PisellCards/index.d.ts +0 -1
  48. package/lib/components/PisellFields/index.d.ts +0 -1
  49. package/lib/components/PisellLayouts/index.d.ts +0 -1
  50. package/lib/components/PisellMetrics/index.d.ts +0 -1
  51. package/lib/components/appVersionControl/types.d.ts +0 -1
  52. package/lib/components/calendar/index.d.ts +0 -1
  53. package/lib/components/checkbox/index.d.ts +0 -1
  54. package/lib/components/dataSourceComponents/dataSourceShow/dataSourceQRCode/index.d.ts +0 -1
  55. package/lib/components/dataSourceComponents/dataSourceTable/type.d.ts +0 -1
  56. package/lib/components/dataSourceComponents/fields/Checkbox/WithMode.d.ts +0 -1
  57. package/lib/components/dataSourceComponents/fields/Radio/WithMode.d.ts +0 -1
  58. package/lib/components/dataSourceComponents/fields/Tabs/index.d.ts +0 -1
  59. package/lib/components/dataSourceComponents/fields/Translation/type.d.ts +0 -1
  60. package/lib/components/dataSourceComponents/provider/dataSource/DataSourceContext.d.ts +0 -1
  61. package/lib/components/date-picker/index.d.ts +0 -1
  62. package/lib/components/drag-sort-tree/types.d.ts +0 -1
  63. package/lib/components/filter/components/FilterButton/types.d.ts +0 -1
  64. package/lib/components/input/index.d.ts +0 -1
  65. package/lib/components/pisell-config-provider/context.d.ts +0 -1
  66. package/lib/components/pisellDatePicker/index.d.ts +0 -1
  67. package/lib/components/pisellGridPro/ToolBar/type.d.ts +0 -1
  68. package/lib/components/pisellMenu/types.d.ts +0 -1
  69. package/lib/components/pisellQuickFilter/type.d.ts +0 -1
  70. package/lib/components/productCard/cartSkuCard/index.js +33 -3
  71. package/lib/components/productCard/cartSkuCard/index.less +18 -0
  72. package/lib/components/productCard/cartSkuCard/types.d.ts +56 -0
  73. package/lib/components/productCard/cartSkuCard/variants/A12/index.js +129 -0
  74. package/lib/components/productCard/cartSkuCard/variants/A12/index.less +279 -0
  75. package/lib/components/productCard/lineItem/index.js +42 -11
  76. package/lib/components/productCard/types.d.ts +4 -1
  77. package/lib/components/radio/index.d.ts +0 -1
  78. package/lib/components/section-footers/index.d.ts +0 -1
  79. package/lib/components/skeleton/index.d.ts +0 -1
  80. package/lib/components/time-picker/index.d.ts +0 -1
  81. package/lib/components/upload/index.d.ts +0 -1
  82. package/lib/components/virtual-keyboard/Amount/types.d.ts +0 -1
  83. package/lib/index.d.ts +2 -1
  84. package/package.json +2 -2
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import * as _$react from "react";
3
2
 
4
3
  //#region src/components/pisellDatePicker/index.d.ts
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  //#region src/components/pisellGridPro/ToolBar/type.d.ts
3
2
  interface ToolBarProps {
4
3
  className?: string;
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { MenuProps } from "antd";
3
2
 
4
3
  //#region src/components/pisellMenu/types.d.ts
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { FilterItemProps } from "../filter/types.js";
3
2
  import { FormInstance } from "antd";
4
3
 
@@ -20,6 +20,7 @@ const require_index$12 = require("./components/Promotion/index.js");
20
20
  const require_index$13 = require("./components/Gift/index.js");
21
21
  const require_index$14 = require("./components/BookingItem/index.js");
22
22
  const require_index$15 = require("./components/inlineActions/index.js");
23
+ const require_index$16 = require("./variants/A12/index.js");
23
24
  let react = require("react");
24
25
  react = require_runtime.__toESM(react);
25
26
  let _pisell_utils = require("@pisell/utils");
@@ -59,12 +60,14 @@ const _excluded = [
59
60
  "rightActionsDisplay",
60
61
  "escapeDom",
61
62
  "maxSpecsCount",
62
- "isShowRelatedProduct"
63
+ "isShowRelatedProduct",
64
+ "a12Slots",
65
+ "a12Presentation"
63
66
  ];
64
67
  const PREFIX = "pisell-cart-sku-card";
65
68
  const CartSkuCard = (props) => {
66
69
  var _context$appHelper$ut;
67
- const { dataSource = require_status.defaultValue.dataSource, isShowImage = require_status.defaultValue.isShowImage, isShowQuantityBadge = true, isShowOriginalPrice = require_status.defaultValue.isShowOriginalPrice, isShowHolder = require_status.defaultValue.isShowHolder, isShowNote = require_status.defaultValue.isShowNote, isShowDelete = require_status.defaultValue.isShowDelete, isShowInlineDelete = isShowDelete, isShowAmountFooter = require_status.defaultValue.isShowAmountFooter, isShowPackageNote = require_status.defaultValue.isShowPackageNote, isShowEditProduct = require_status.defaultValue.isShowEditProduct, disabledClick = require_status.defaultValue.disabledClick, disabledEditClick = require_status.defaultValue.disabledEditClick, disabledNoteEdit, externalNoteEditor = false, onEditProduct, onAction, onDelete, onNote, onLike, onCard, onChangeResource, onPromotion, onGift, onChangeHolder, itemType = "product", type, rightActions = [], rightActionsDisplay = "swipe", escapeDom, maxSpecsCount = 1, isShowRelatedProduct = true } = props, other = require_objectWithoutProperties._objectWithoutProperties(props, _excluded);
70
+ const { dataSource = require_status.defaultValue.dataSource, isShowImage = require_status.defaultValue.isShowImage, isShowQuantityBadge = true, isShowOriginalPrice = require_status.defaultValue.isShowOriginalPrice, isShowHolder = require_status.defaultValue.isShowHolder, isShowNote = require_status.defaultValue.isShowNote, isShowDelete = require_status.defaultValue.isShowDelete, isShowInlineDelete = isShowDelete, isShowAmountFooter = require_status.defaultValue.isShowAmountFooter, isShowPackageNote = require_status.defaultValue.isShowPackageNote, isShowEditProduct = require_status.defaultValue.isShowEditProduct, disabledClick = require_status.defaultValue.disabledClick, disabledEditClick = require_status.defaultValue.disabledEditClick, disabledNoteEdit, externalNoteEditor = false, onEditProduct, onAction, onDelete, onNote, onLike, onCard, onChangeResource, onPromotion, onGift, onChangeHolder, itemType = "product", type, rightActions = [], rightActionsDisplay = "swipe", escapeDom, maxSpecsCount = 1, isShowRelatedProduct = true, a12Slots, a12Presentation } = props, other = require_objectWithoutProperties._objectWithoutProperties(props, _excluded);
68
71
  const useOpenNoteRef = (0, react.useRef)();
69
72
  const context = require_useEngineContext.default();
70
73
  _pisell_utils.locales.init(require_locales.default, ((_context$appHelper$ut = context.appHelper.utils) === null || _context$appHelper$ut === void 0 || (_context$appHelper$ut = _context$appHelper$ut.storage) === null || _context$appHelper$ut === void 0 ? void 0 : _context$appHelper$ut.get("umi_locale")) || "en");
@@ -222,13 +225,37 @@ const CartSkuCard = (props) => {
222
225
  openNote: openNoteEditor
223
226
  })) : null);
224
227
  };
228
+ const renderA12 = () => {
229
+ var _a12Slots$contentFoot;
230
+ const note = isShowNote ? /* @__PURE__ */ react.default.createElement(require_index$9.default, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, other), {}, {
231
+ item: dataSource,
232
+ disabledEdit: disabledNoteEdit !== null && disabledNoteEdit !== void 0 ? disabledNoteEdit : other.disabledEdit,
233
+ openNote: openNoteEditor
234
+ })) : null;
235
+ const slots = note ? require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, a12Slots), {}, { contentFooter: (_a12Slots$contentFoot = a12Slots === null || a12Slots === void 0 ? void 0 : a12Slots.contentFooter) !== null && _a12Slots$contentFoot !== void 0 ? _a12Slots$contentFoot : (() => note) }) : a12Slots;
236
+ return /* @__PURE__ */ react.default.createElement(require_index$16.default, {
237
+ dataSource,
238
+ isShowImage,
239
+ isShowDelete,
240
+ isShowOriginalPrice,
241
+ isShowEditProduct,
242
+ disabled: Boolean(disabledClick),
243
+ disabledEditClick,
244
+ slots,
245
+ presentation: a12Presentation,
246
+ onDelete,
247
+ onEditProduct
248
+ });
249
+ };
225
250
  const renderContent = () => {
251
+ if (type === "a12") return renderA12();
226
252
  if (type === "a9") return renderA9();
227
253
  if (type === "a5") return renderA5();
228
254
  return renderA2();
229
255
  };
230
256
  if (dataSource === null || dataSource === void 0 ? void 0 : dataSource.isGift) return null;
231
257
  const content = renderContent();
258
+ const useIntegratedWrapper = type === "a12" || rightActionsDisplay === "inline";
232
259
  const cardContent = /* @__PURE__ */ react.default.createElement("div", {
233
260
  className: (0, classnames.default)(PREFIX, `${PREFIX}--${type}`),
234
261
  onClick: (e) => {
@@ -242,7 +269,10 @@ const CartSkuCard = (props) => {
242
269
  isShowRelatedProduct,
243
270
  isShowDelete
244
271
  }, content) : content);
245
- return /* @__PURE__ */ react.default.createElement("div", { className: (0, classnames.default)(`${PREFIX}-wrapper-container`, { [`${PREFIX}-wrapper-container--inline`]: rightActionsDisplay === "inline" }) }, rightActionsDisplay === "inline" ? /* @__PURE__ */ react.default.createElement("div", { className: (0, classnames.default)(`${PREFIX}-wrapper`, `${PREFIX}-wrapper--inline`) }, cardContent) : /* @__PURE__ */ react.default.createElement(require_index$8.SwipeAction, {
272
+ return /* @__PURE__ */ react.default.createElement("div", { className: (0, classnames.default)(`${PREFIX}-wrapper-container`, {
273
+ [`${PREFIX}-wrapper-container--inline`]: useIntegratedWrapper,
274
+ [`${PREFIX}-wrapper-container--a12`]: type === "a12"
275
+ }) }, useIntegratedWrapper ? /* @__PURE__ */ react.default.createElement("div", { className: (0, classnames.default)(`${PREFIX}-wrapper`, `${PREFIX}-wrapper--inline`, type === "a12" && `pisell-cart-sku-card-wrapper--a12`) }, cardContent) : /* @__PURE__ */ react.default.createElement(require_index$8.SwipeAction, {
246
276
  closeOnAction: false,
247
277
  className: (0, classnames.default)(`${PREFIX}-wrapper`),
248
278
  rightActions: _rightActions,
@@ -3,6 +3,10 @@
3
3
  width: 100%;
4
4
  min-width: 0;
5
5
  }
6
+
7
+ &--a12 {
8
+ container-type: inline-size;
9
+ }
6
10
  }
7
11
 
8
12
  .pisell-cart-sku-card-wrapper {
@@ -15,6 +19,14 @@
15
19
  width: 100%;
16
20
  overflow: hidden;
17
21
  }
22
+
23
+
24
+ &--a12 {
25
+ border: 0;
26
+ border-radius: 18px;
27
+ background: transparent;
28
+ overflow: visible;
29
+ }
18
30
  }
19
31
 
20
32
  .pisell-cart-sku-card__main-row {
@@ -51,6 +63,12 @@
51
63
  cursor: pointer;
52
64
  }
53
65
 
66
+ &--a12 {
67
+ display: block;
68
+ padding: 0;
69
+ gap: 0;
70
+ }
71
+
54
72
  &__delete-btn {
55
73
  cursor: pointer;
56
74
  position: absolute;
@@ -0,0 +1,56 @@
1
+ import { CSSProperties, ReactNode } from "react";
2
+
3
+ //#region src/components/productCard/cartSkuCard/types.d.ts
4
+ type CartSkuCardVariant = 'a2' | 'a5' | 'a9' | 'a12';
5
+ interface CartSkuCardA12Display {
6
+ eyebrow?: ReactNode;
7
+ quantityText?: ReactNode;
8
+ }
9
+ interface CartSkuCardSlotContext {
10
+ item: any;
11
+ disabled: boolean;
12
+ }
13
+ interface CartSkuCardA12Slots {
14
+ contentFooter?: (context: CartSkuCardSlotContext) => ReactNode;
15
+ quantityControl?: (context: CartSkuCardSlotContext) => ReactNode;
16
+ actionRail?: (context: CartSkuCardSlotContext & {
17
+ defaultPrice: ReactNode;
18
+ defaultEdit: ReactNode;
19
+ defaultQuantityControl: ReactNode;
20
+ }) => ReactNode;
21
+ specifications?: (context: CartSkuCardSlotContext & {
22
+ defaultSpecifications: ReactNode;
23
+ }) => ReactNode;
24
+ }
25
+ interface CartSkuCardA12Tokens {
26
+ background: string;
27
+ borderColor: string;
28
+ borderRadius: string;
29
+ minHeight: string;
30
+ mediaWidth: string;
31
+ actionRailWidth: string;
32
+ contentPadding: string;
33
+ actionRailPadding: string;
34
+ accentColor: string;
35
+ titleColor: string;
36
+ titleFontSize: string;
37
+ titleFontWeight: number;
38
+ priceColor: string;
39
+ priceFontSize: string;
40
+ optionBackground: string;
41
+ optionLabelColor: string;
42
+ optionValueColor: string;
43
+ optionGap: string;
44
+ shadow: string;
45
+ }
46
+ interface CartSkuCardA12Presentation {
47
+ density?: 'compact' | 'comfortable';
48
+ optionColumns?: 1 | 2 | 3;
49
+ mediaFit?: 'cover' | 'contain';
50
+ contentAlign?: 'start' | 'center';
51
+ className?: string;
52
+ style?: CSSProperties;
53
+ tokens?: Partial<CartSkuCardA12Tokens>;
54
+ }
55
+ //#endregion
56
+ export { CartSkuCardA12Display, CartSkuCardA12Presentation, CartSkuCardA12Slots, CartSkuCardVariant };
@@ -0,0 +1,129 @@
1
+ const require_runtime = require("../../../../../_virtual/_rolldown/runtime.js");
2
+ const require_objectSpread2 = require("../../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js");
3
+ const require_index = require("../../../../iconfont/index.js");
4
+ const require_index$1 = require("../../components/weighing/index.js");
5
+ const require_index$2 = require("../../index.js");
6
+ let react = require("react");
7
+ react = require_runtime.__toESM(react);
8
+ let _pisell_utils = require("@pisell/utils");
9
+ let classnames = require("classnames");
10
+ classnames = require_runtime.__toESM(classnames);
11
+ require("./index.less");
12
+ //#region src/components/productCard/cartSkuCard/variants/A12/index.tsx
13
+ const TOKEN_VARIABLES = {
14
+ background: "--pc-a12-bg",
15
+ borderColor: "--pc-a12-border-color",
16
+ borderRadius: "--pc-a12-radius",
17
+ minHeight: "--pc-a12-min-height",
18
+ mediaWidth: "--pc-a12-media-width",
19
+ actionRailWidth: "--pc-a12-rail-width",
20
+ contentPadding: "--pc-a12-content-padding",
21
+ actionRailPadding: "--pc-a12-rail-padding",
22
+ accentColor: "--pc-a12-accent",
23
+ titleColor: "--pc-a12-title-color",
24
+ titleFontSize: "--pc-a12-title-size",
25
+ titleFontWeight: "--pc-a12-title-weight",
26
+ priceColor: "--pc-a12-price-color",
27
+ priceFontSize: "--pc-a12-price-size",
28
+ optionBackground: "--pc-a12-option-bg",
29
+ optionLabelColor: "--pc-a12-option-label-color",
30
+ optionValueColor: "--pc-a12-option-value-color",
31
+ optionGap: "--pc-a12-option-gap",
32
+ shadow: "--pc-a12-shadow"
33
+ };
34
+ /** 复用其它变体使用的 options,只在展示阶段合并同组已选项。 */
35
+ function resolveSpecifications(dataSource) {
36
+ if (!Array.isArray(dataSource === null || dataSource === void 0 ? void 0 : dataSource.options)) return [];
37
+ const groups = /* @__PURE__ */ new Map();
38
+ dataSource.options.forEach((option, index) => {
39
+ var _ref, _option$name, _ref2, _option$quantity, _ref3, _ref4, _option$option_group_, _ref5, _ref6, _ref7, _option$option_group_2;
40
+ const name = (_ref = (_option$name = option === null || option === void 0 ? void 0 : option.name) !== null && _option$name !== void 0 ? _option$name : option === null || option === void 0 ? void 0 : option.title) !== null && _ref !== void 0 ? _ref : option === null || option === void 0 ? void 0 : option.variant_item_name;
41
+ if (name === void 0 || name === null || name === "") return;
42
+ const quantity = Math.max(1, Number((_ref2 = (_option$quantity = option.quantity) !== null && _option$quantity !== void 0 ? _option$quantity : option.num) !== null && _ref2 !== void 0 ? _ref2 : 1));
43
+ const value = quantity > 1 ? `${String(name)} × ${quantity}` : name;
44
+ const groupKey = String((_ref3 = (_ref4 = (_option$option_group_ = option.option_group_id) !== null && _option$option_group_ !== void 0 ? _option$option_group_ : option.group_id) !== null && _ref4 !== void 0 ? _ref4 : option.variant_group_id) !== null && _ref3 !== void 0 ? _ref3 : `option-${index}`);
45
+ const label = (_ref5 = (_ref6 = (_ref7 = (_option$option_group_2 = option.option_group_name) !== null && _option$option_group_2 !== void 0 ? _option$option_group_2 : option.group_name) !== null && _ref7 !== void 0 ? _ref7 : option.option_group_title) !== null && _ref6 !== void 0 ? _ref6 : option.group_title) !== null && _ref5 !== void 0 ? _ref5 : option.variant_group_name;
46
+ const current = groups.get(groupKey);
47
+ if (current) {
48
+ current.values.push(value);
49
+ if (!current.label && label) current.label = label;
50
+ return;
51
+ }
52
+ groups.set(groupKey, require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({ key: groupKey }, label ? { label } : {}), {}, { values: [value] }));
53
+ });
54
+ return Array.from(groups.values()).map((group) => ({
55
+ key: group.key,
56
+ label: group.label,
57
+ value: group.values.map(String).join(", ")
58
+ }));
59
+ }
60
+ function getPresentationStyle(presentation) {
61
+ const style = require_objectSpread2._objectSpread2({}, (presentation === null || presentation === void 0 ? void 0 : presentation.style) || {});
62
+ Object.entries((presentation === null || presentation === void 0 ? void 0 : presentation.tokens) || {}).forEach(([key, value]) => {
63
+ if (value !== void 0) style[TOKEN_VARIABLES[key]] = value;
64
+ });
65
+ style["--pc-a12-option-columns"] = (presentation === null || presentation === void 0 ? void 0 : presentation.optionColumns) || 2;
66
+ return style;
67
+ }
68
+ const A12 = ({ dataSource, isShowImage = true, isShowDelete = false, isShowOriginalPrice = false, isShowEditProduct = false, disabled = false, disabledEditClick = false, slots, presentation, onDelete, onEditProduct }) => {
69
+ var _ref8, _dataSource$num, _dataSource$total, _dataSource$origin_to, _slots$contentFooter;
70
+ const display = (dataSource === null || dataSource === void 0 ? void 0 : dataSource.a12) || {};
71
+ const specificationsData = (0, react.useMemo)(() => resolveSpecifications(dataSource), [dataSource]);
72
+ const weighingInfo = (0, react.useMemo)(() => (0, _pisell_utils.resolveWeighingSnapshot)(dataSource), [dataSource]);
73
+ const quantity = Number((_ref8 = (_dataSource$num = dataSource === null || dataSource === void 0 ? void 0 : dataSource.num) !== null && _dataSource$num !== void 0 ? _dataSource$num : dataSource === null || dataSource === void 0 ? void 0 : dataSource.quantity) !== null && _ref8 !== void 0 ? _ref8 : 1) || 1;
74
+ const lineTotal = Number((_dataSource$total = dataSource === null || dataSource === void 0 ? void 0 : dataSource.total) !== null && _dataSource$total !== void 0 ? _dataSource$total : 0) * quantity - Number((dataSource === null || dataSource === void 0 ? void 0 : dataSource.totalDifference) || 0);
75
+ const originalTotal = Number((_dataSource$origin_to = dataSource === null || dataSource === void 0 ? void 0 : dataSource.origin_total) !== null && _dataSource$origin_to !== void 0 ? _dataSource$origin_to : 0) * quantity;
76
+ const symbol = dataSource === null || dataSource === void 0 ? void 0 : dataSource.symbol;
77
+ const slotContext = (0, react.useMemo)(() => ({
78
+ item: dataSource,
79
+ disabled
80
+ }), [dataSource, disabled]);
81
+ const style = (0, react.useMemo)(() => getPresentationStyle(presentation), [presentation]);
82
+ const defaultSpecifications = specificationsData.length ? /* @__PURE__ */ react.default.createElement("div", { className: `${require_index$2.PREFIX}-a12__specifications` }, specificationsData.map((specification) => /* @__PURE__ */ react.default.createElement("div", {
83
+ className: `${require_index$2.PREFIX}-a12__specification`,
84
+ key: specification.key
85
+ }, specification.label ? /* @__PURE__ */ react.default.createElement("span", { className: `${require_index$2.PREFIX}-a12__specification-label` }, specification.label) : null, /* @__PURE__ */ react.default.createElement("strong", { className: `${require_index$2.PREFIX}-a12__specification-value` }, specification.value)))) : (dataSource === null || dataSource === void 0 ? void 0 : dataSource.product_option_string) ? /* @__PURE__ */ react.default.createElement("div", { className: `${require_index$2.PREFIX}-a12__specification-summary` }, dataSource.product_option_string) : null;
86
+ const specifications = (slots === null || slots === void 0 ? void 0 : slots.specifications) ? slots.specifications(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, slotContext), {}, { defaultSpecifications })) : defaultSpecifications;
87
+ const contentFooter = slots === null || slots === void 0 || (_slots$contentFooter = slots.contentFooter) === null || _slots$contentFooter === void 0 ? void 0 : _slots$contentFooter.call(slots, slotContext);
88
+ const defaultPrice = /* @__PURE__ */ react.default.createElement("div", { className: `${require_index$2.PREFIX}-a12__price` }, /* @__PURE__ */ react.default.createElement("strong", null, (0, _pisell_utils.formatAmount)(lineTotal, 2, symbol)), isShowOriginalPrice && originalTotal > 0 && originalTotal !== lineTotal ? /* @__PURE__ */ react.default.createElement("del", null, (0, _pisell_utils.formatAmount)(originalTotal, 2, symbol)) : null);
89
+ const defaultEdit = Boolean(isShowEditProduct && onEditProduct) ? /* @__PURE__ */ react.default.createElement("button", {
90
+ type: "button",
91
+ className: `${require_index$2.PREFIX}-a12__edit`,
92
+ disabled: disabled || disabledEditClick,
93
+ onClick: (event) => {
94
+ event.preventDefault();
95
+ event.stopPropagation();
96
+ onEditProduct === null || onEditProduct === void 0 || onEditProduct(dataSource);
97
+ }
98
+ }, _pisell_utils.locales.getText("pisell2.product.card.edit")) : null;
99
+ const defaultQuantityControl = (slots === null || slots === void 0 ? void 0 : slots.quantityControl) ? slots.quantityControl(slotContext) : /* @__PURE__ */ react.default.createElement("div", { className: `${require_index$2.PREFIX}-a12__quantity-fallback` }, /* @__PURE__ */ react.default.createElement("span", null, display.quantityText || `× ${quantity}`));
100
+ const defaultActionRail = /* @__PURE__ */ react.default.createElement("aside", { className: `${require_index$2.PREFIX}-a12__rail` }, isShowDelete && onDelete ? /* @__PURE__ */ react.default.createElement("button", {
101
+ type: "button",
102
+ className: `${require_index$2.PREFIX}-a12__delete`,
103
+ "aria-label": _pisell_utils.locales.getText("pisell2.cart.sku-card.actions.delete"),
104
+ disabled,
105
+ onClick: (event) => {
106
+ event.preventDefault();
107
+ event.stopPropagation();
108
+ onDelete(dataSource);
109
+ }
110
+ }, /* @__PURE__ */ react.default.createElement(require_index.default, { type: "pisell2-trash-01" })) : null, defaultPrice, defaultEdit, /* @__PURE__ */ react.default.createElement("div", { className: `${require_index$2.PREFIX}-a12__quantity-control` }, defaultQuantityControl));
111
+ const actionRail = (slots === null || slots === void 0 ? void 0 : slots.actionRail) ? slots.actionRail(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, slotContext), {}, {
112
+ defaultPrice,
113
+ defaultEdit,
114
+ defaultQuantityControl
115
+ })) : defaultActionRail;
116
+ return /* @__PURE__ */ react.default.createElement("div", {
117
+ className: (0, classnames.default)(`${require_index$2.PREFIX}-a12`, `${require_index$2.PREFIX}-a12--${(presentation === null || presentation === void 0 ? void 0 : presentation.density) || "comfortable"}`, `${require_index$2.PREFIX}-a12--align-${(presentation === null || presentation === void 0 ? void 0 : presentation.contentAlign) || "start"}`, !isShowImage && `pisell-cart-sku-card-a12--without-media`, presentation === null || presentation === void 0 ? void 0 : presentation.className),
118
+ style
119
+ }, isShowImage ? /* @__PURE__ */ react.default.createElement("div", { className: `${require_index$2.PREFIX}-a12__media` }, (dataSource === null || dataSource === void 0 ? void 0 : dataSource.image) ? /* @__PURE__ */ react.default.createElement("img", {
120
+ alt: "",
121
+ src: _pisell_utils.image.ali(dataSource.image, 320),
122
+ style: { objectFit: (presentation === null || presentation === void 0 ? void 0 : presentation.mediaFit) || "cover" }
123
+ }) : /* @__PURE__ */ react.default.createElement("span", { "aria-hidden": "true" }, String((dataSource === null || dataSource === void 0 ? void 0 : dataSource.name) || "").slice(0, 2))) : null, /* @__PURE__ */ react.default.createElement("div", { className: `${require_index$2.PREFIX}-a12__content` }, display.eyebrow ? /* @__PURE__ */ react.default.createElement("div", { className: `${require_index$2.PREFIX}-a12__eyebrow` }, display.eyebrow) : null, /* @__PURE__ */ react.default.createElement("div", { className: `${require_index$2.PREFIX}-a12__name` }, dataSource === null || dataSource === void 0 ? void 0 : dataSource.name), weighingInfo ? /* @__PURE__ */ react.default.createElement("div", { className: `${require_index$2.PREFIX}-a12__weighing` }, /* @__PURE__ */ react.default.createElement(require_index$1.default, {
124
+ dataSource: weighingInfo,
125
+ symbol
126
+ })) : null, specifications, contentFooter ? /* @__PURE__ */ react.default.createElement("div", { className: `${require_index$2.PREFIX}-a12__content-footer` }, contentFooter) : null), actionRail);
127
+ };
128
+ //#endregion
129
+ exports.default = A12;
@@ -0,0 +1,279 @@
1
+ .pisell-cart-sku-card-a12 {
2
+ --pc-a12-bg: #fff;
3
+ --pc-a12-border-color: #e4e7ec;
4
+ --pc-a12-radius: 18px;
5
+ --pc-a12-min-height: 164px;
6
+ --pc-a12-media-width: 228px;
7
+ --pc-a12-rail-width: 190px;
8
+ --pc-a12-content-padding: 20px 22px;
9
+ --pc-a12-rail-padding: 18px 20px;
10
+ --pc-a12-accent: #b20d12;
11
+ --pc-a12-title-color: #101828;
12
+ --pc-a12-title-size: 32px;
13
+ --pc-a12-title-weight: 800;
14
+ --pc-a12-price-color: var(--pc-a12-accent);
15
+ --pc-a12-price-size: 30px;
16
+ --pc-a12-option-bg: #f5f6f8;
17
+ --pc-a12-option-label-color: #667085;
18
+ --pc-a12-option-value-color: #101828;
19
+ --pc-a12-option-gap: 6px;
20
+ --pc-a12-shadow: 0 12px 28px rgba(16, 24, 40, 0.08);
21
+
22
+ display: grid;
23
+ grid-template-columns:
24
+ var(--pc-a12-media-width)
25
+ minmax(0, 1fr)
26
+ var(--pc-a12-rail-width);
27
+ min-height: var(--pc-a12-min-height);
28
+ overflow: hidden;
29
+ border: 1px solid var(--pc-a12-border-color);
30
+ border-radius: var(--pc-a12-radius);
31
+ background: var(--pc-a12-bg);
32
+ box-shadow: var(--pc-a12-shadow);
33
+ hyphens: none;
34
+ overflow-wrap: normal;
35
+ word-break: normal;
36
+
37
+ &--without-media {
38
+ grid-template-columns: minmax(0, 1fr) var(--pc-a12-rail-width);
39
+ }
40
+
41
+ &__media {
42
+ position: relative;
43
+ display: grid;
44
+ min-height: var(--pc-a12-min-height);
45
+ place-items: center;
46
+ overflow: hidden;
47
+ background: #f2f4f7;
48
+ color: var(--pc-a12-accent);
49
+ font-size: 32px;
50
+ font-weight: 800;
51
+
52
+ img {
53
+ position: absolute;
54
+ inset: 0;
55
+ display: block;
56
+ width: 100%;
57
+ height: 100%;
58
+ min-height: 0;
59
+ }
60
+ }
61
+
62
+ &__content {
63
+ display: flex;
64
+ min-width: 0;
65
+ flex-direction: column;
66
+ justify-content: flex-start;
67
+ padding: var(--pc-a12-content-padding);
68
+ }
69
+
70
+ &__content-footer {
71
+ display: flex;
72
+ flex-direction: column;
73
+ gap: 8px;
74
+ margin-top: auto;
75
+ padding-top: 12px;
76
+
77
+ .ant-divider {
78
+ margin: 0 !important;
79
+ }
80
+ }
81
+
82
+ &--align-center &__content {
83
+ justify-content: center;
84
+ }
85
+
86
+ &__eyebrow {
87
+ overflow: hidden;
88
+ margin-bottom: 4px;
89
+ color: var(--pc-a12-accent);
90
+ font-size: 14px;
91
+ font-weight: 800;
92
+ line-height: 20px;
93
+ text-overflow: ellipsis;
94
+ text-transform: uppercase;
95
+ white-space: nowrap;
96
+ }
97
+
98
+ &__name {
99
+ min-width: 0;
100
+ overflow: hidden;
101
+ color: var(--pc-a12-title-color);
102
+ font-size: var(--pc-a12-title-size);
103
+ font-weight: var(--pc-a12-title-weight);
104
+ line-height: 1.15;
105
+ text-overflow: ellipsis;
106
+ white-space: nowrap;
107
+ }
108
+
109
+ &__weighing {
110
+ min-width: 0;
111
+ margin-top: 8px;
112
+ }
113
+
114
+ &__specifications {
115
+ display: grid;
116
+ grid-template-columns: repeat(
117
+ var(--pc-a12-option-columns, 2),
118
+ minmax(0, 1fr)
119
+ );
120
+ gap: var(--pc-a12-option-gap);
121
+ margin-top: 10px;
122
+ }
123
+
124
+ &__specification,
125
+ &__specification-summary {
126
+ min-width: 0;
127
+ padding: 7px 9px;
128
+ border-radius: 7px;
129
+ background: var(--pc-a12-option-bg);
130
+ }
131
+
132
+ &__specification {
133
+ display: flex;
134
+ flex-direction: column;
135
+ gap: 2px;
136
+ }
137
+
138
+ &__specification-label {
139
+ overflow: hidden;
140
+ color: var(--pc-a12-option-label-color);
141
+ font-size: 11px;
142
+ font-weight: 700;
143
+ line-height: 16px;
144
+ text-overflow: ellipsis;
145
+ white-space: nowrap;
146
+ }
147
+
148
+ &__specification-value,
149
+ &__specification-summary {
150
+ overflow: hidden;
151
+ color: var(--pc-a12-option-value-color);
152
+ font-size: 16px;
153
+ font-weight: 700;
154
+ line-height: 20px;
155
+ text-overflow: ellipsis;
156
+ white-space: nowrap;
157
+ }
158
+
159
+ &__rail {
160
+ position: relative;
161
+ display: flex;
162
+ min-width: 0;
163
+ flex-direction: column;
164
+ align-items: center;
165
+ justify-content: center;
166
+ padding: var(--pc-a12-rail-padding);
167
+ border-left: 1px solid var(--pc-a12-border-color);
168
+ }
169
+
170
+ &__delete {
171
+ position: absolute;
172
+ top: 6px;
173
+ right: 6px;
174
+ display: grid;
175
+ width: 42px;
176
+ height: 42px;
177
+ padding: 0;
178
+ place-items: center;
179
+ border: 0;
180
+ border-radius: 50%;
181
+ background: transparent;
182
+ color: var(--pc-a12-accent);
183
+ font-size: 26px;
184
+ cursor: pointer;
185
+
186
+ .anticon,
187
+ svg {
188
+ width: 30px;
189
+ height: 30px;
190
+ font-size: 30px;
191
+ }
192
+
193
+ &:active {
194
+ background: #fef3f2;
195
+ }
196
+
197
+ &:disabled {
198
+ cursor: not-allowed;
199
+ opacity: 0.5;
200
+ }
201
+ }
202
+
203
+ &__price {
204
+ display: flex;
205
+ flex-direction: column;
206
+ align-items: center;
207
+ color: var(--pc-a12-price-color);
208
+
209
+ strong {
210
+ font-size: var(--pc-a12-price-size);
211
+ font-weight: 800;
212
+ line-height: 1.15;
213
+ white-space: nowrap;
214
+ }
215
+
216
+ del {
217
+ color: #667085;
218
+ font-size: 13px;
219
+ }
220
+ }
221
+
222
+ &__edit {
223
+ min-width: 62px;
224
+ min-height: 38px;
225
+ margin-top: 10px;
226
+ padding: 7px 14px;
227
+ border: 1px solid #f5b7ba;
228
+ border-radius: 999px;
229
+ background: #fff;
230
+ color: var(--pc-a12-accent);
231
+ font: inherit;
232
+ font-size: 14px;
233
+ font-weight: 700;
234
+ white-space: nowrap;
235
+ cursor: pointer;
236
+
237
+ &:disabled {
238
+ cursor: not-allowed;
239
+ opacity: 0.5;
240
+ }
241
+ }
242
+
243
+ &__quantity-control {
244
+ display: flex;
245
+ width: 100%;
246
+ min-height: 44px;
247
+ align-items: center;
248
+ justify-content: center;
249
+ margin-top: 10px;
250
+ padding-top: 10px;
251
+ }
252
+
253
+ &__quantity-fallback {
254
+ display: flex;
255
+ align-items: center;
256
+ justify-content: center;
257
+ gap: 16px;
258
+ font-weight: 700;
259
+ }
260
+
261
+ &--compact {
262
+ --pc-a12-min-height: 132px;
263
+ --pc-a12-media-width: 124px;
264
+ --pc-a12-rail-width: 156px;
265
+ --pc-a12-content-padding: 15px 18px;
266
+ --pc-a12-rail-padding: 14px 16px;
267
+ --pc-a12-price-size: 25px;
268
+ }
269
+ }
270
+
271
+ @container (max-width: 620px) {
272
+ .pisell-cart-sku-card-a12 {
273
+ --pc-a12-media-width: 112px;
274
+ --pc-a12-rail-width: 150px;
275
+ --pc-a12-content-padding: 14px;
276
+ --pc-a12-price-size: 24px;
277
+ --pc-a12-option-columns: 1;
278
+ }
279
+ }