@pisell/materials 6.12.52 → 6.12.53

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 (94) 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 +1 -0
  11. package/es/components/PisellFields/index.d.ts +1 -0
  12. package/es/components/PisellLayouts/index.d.ts +1 -0
  13. package/es/components/PisellMetrics/index.d.ts +1 -0
  14. package/es/components/PisellSelectionFlow/PisellSelectionFlow.js +7 -1
  15. package/es/components/PisellSelectionFlow/hooks/useFlowNavigation.js +104 -3
  16. package/es/components/PisellSelectionFlow/index.d.ts +1 -1
  17. package/es/components/PisellSelectionFlow/types.d.ts +20 -1
  18. package/es/components/appVersionControl/types.d.ts +1 -0
  19. package/es/components/calendar/index.d.ts +1 -0
  20. package/es/components/checkbox/index.d.ts +1 -0
  21. package/es/components/dataSourceComponents/dataSourceShow/dataSourceQRCode/index.d.ts +1 -0
  22. package/es/components/dataSourceComponents/dataSourceTable/type.d.ts +1 -0
  23. package/es/components/dataSourceComponents/fields/Checkbox/WithMode.d.ts +1 -0
  24. package/es/components/dataSourceComponents/fields/Radio/WithMode.d.ts +1 -0
  25. package/es/components/dataSourceComponents/fields/Tabs/index.d.ts +1 -0
  26. package/es/components/dataSourceComponents/fields/Translation/type.d.ts +1 -0
  27. package/es/components/dataSourceComponents/provider/dataSource/DataSourceContext.d.ts +1 -0
  28. package/es/components/date-picker/index.d.ts +1 -0
  29. package/es/components/drag-sort-tree/types.d.ts +1 -0
  30. package/es/components/filter/components/FilterButton/types.d.ts +1 -0
  31. package/es/components/input/index.d.ts +1 -0
  32. package/es/components/pisell-config-provider/context.d.ts +1 -0
  33. package/es/components/pisellDatePicker/index.d.ts +1 -0
  34. package/es/components/pisellGridPro/ToolBar/type.d.ts +1 -0
  35. package/es/components/pisellMenu/types.d.ts +1 -0
  36. package/es/components/pisellQuickFilter/type.d.ts +1 -0
  37. package/es/components/productCard/cartSkuCard/components/AmountFooter/index.less +1 -1
  38. package/es/components/productCard/cartSkuCard/index.js +3 -33
  39. package/es/components/productCard/cartSkuCard/index.less +0 -19
  40. package/es/components/productCard/lineItem/index.js +11 -42
  41. package/es/components/productCard/types.d.ts +1 -4
  42. package/es/components/radio/index.d.ts +1 -0
  43. package/es/components/section-footers/index.d.ts +1 -0
  44. package/es/components/skeleton/index.d.ts +1 -0
  45. package/es/components/time-picker/index.d.ts +1 -0
  46. package/es/components/upload/index.d.ts +1 -0
  47. package/es/components/virtual-keyboard/Amount/types.d.ts +1 -0
  48. package/es/index.d.ts +2 -3
  49. package/lib/components/PisellCards/index.d.ts +1 -0
  50. package/lib/components/PisellFields/index.d.ts +1 -0
  51. package/lib/components/PisellLayouts/index.d.ts +1 -0
  52. package/lib/components/PisellMetrics/index.d.ts +1 -0
  53. package/lib/components/PisellSelectionFlow/PisellSelectionFlow.js +7 -1
  54. package/lib/components/PisellSelectionFlow/hooks/useFlowNavigation.js +104 -3
  55. package/lib/components/PisellSelectionFlow/index.d.ts +1 -1
  56. package/lib/components/PisellSelectionFlow/types.d.ts +20 -1
  57. package/lib/components/appVersionControl/types.d.ts +1 -0
  58. package/lib/components/calendar/index.d.ts +1 -0
  59. package/lib/components/checkbox/index.d.ts +1 -0
  60. package/lib/components/dataSourceComponents/dataSourceShow/dataSourceQRCode/index.d.ts +1 -0
  61. package/lib/components/dataSourceComponents/dataSourceTable/type.d.ts +1 -0
  62. package/lib/components/dataSourceComponents/fields/Checkbox/WithMode.d.ts +1 -0
  63. package/lib/components/dataSourceComponents/fields/Radio/WithMode.d.ts +1 -0
  64. package/lib/components/dataSourceComponents/fields/Tabs/index.d.ts +1 -0
  65. package/lib/components/dataSourceComponents/fields/Translation/type.d.ts +1 -0
  66. package/lib/components/dataSourceComponents/provider/dataSource/DataSourceContext.d.ts +1 -0
  67. package/lib/components/date-picker/index.d.ts +1 -0
  68. package/lib/components/drag-sort-tree/types.d.ts +1 -0
  69. package/lib/components/filter/components/FilterButton/types.d.ts +1 -0
  70. package/lib/components/input/index.d.ts +1 -0
  71. package/lib/components/pisell-config-provider/context.d.ts +1 -0
  72. package/lib/components/pisellDatePicker/index.d.ts +1 -0
  73. package/lib/components/pisellGridPro/ToolBar/type.d.ts +1 -0
  74. package/lib/components/pisellMenu/types.d.ts +1 -0
  75. package/lib/components/pisellQuickFilter/type.d.ts +1 -0
  76. package/lib/components/productCard/cartSkuCard/components/AmountFooter/index.less +1 -1
  77. package/lib/components/productCard/cartSkuCard/index.js +3 -33
  78. package/lib/components/productCard/cartSkuCard/index.less +0 -19
  79. package/lib/components/productCard/lineItem/index.js +11 -42
  80. package/lib/components/productCard/types.d.ts +1 -4
  81. package/lib/components/radio/index.d.ts +1 -0
  82. package/lib/components/section-footers/index.d.ts +1 -0
  83. package/lib/components/skeleton/index.d.ts +1 -0
  84. package/lib/components/time-picker/index.d.ts +1 -0
  85. package/lib/components/upload/index.d.ts +1 -0
  86. package/lib/components/virtual-keyboard/Amount/types.d.ts +1 -0
  87. package/lib/index.d.ts +2 -3
  88. package/package.json +3 -3
  89. package/es/components/productCard/cartSkuCard/types.d.ts +0 -56
  90. package/es/components/productCard/cartSkuCard/variants/A12/index.js +0 -126
  91. package/es/components/productCard/cartSkuCard/variants/A12/index.less +0 -279
  92. package/lib/components/productCard/cartSkuCard/types.d.ts +0 -56
  93. package/lib/components/productCard/cartSkuCard/variants/A12/index.js +0 -129
  94. package/lib/components/productCard/cartSkuCard/variants/A12/index.less +0 -279
@@ -1,126 +0,0 @@
1
- import { _objectSpread2 } from "../../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js";
2
- import IconFont from "../../../../iconfont/index.js";
3
- import Weighing from "../../components/weighing/index.js";
4
- import { PREFIX } from "../../index.js";
5
- import React, { useMemo } from "react";
6
- import { formatAmount, image, locales, resolveWeighingSnapshot } from "@pisell/utils";
7
- import classNames from "classnames";
8
- import "./index.less";
9
- //#region src/components/productCard/cartSkuCard/variants/A12/index.tsx
10
- const TOKEN_VARIABLES = {
11
- background: "--pc-a12-bg",
12
- borderColor: "--pc-a12-border-color",
13
- borderRadius: "--pc-a12-radius",
14
- minHeight: "--pc-a12-min-height",
15
- mediaWidth: "--pc-a12-media-width",
16
- actionRailWidth: "--pc-a12-rail-width",
17
- contentPadding: "--pc-a12-content-padding",
18
- actionRailPadding: "--pc-a12-rail-padding",
19
- accentColor: "--pc-a12-accent",
20
- titleColor: "--pc-a12-title-color",
21
- titleFontSize: "--pc-a12-title-size",
22
- titleFontWeight: "--pc-a12-title-weight",
23
- priceColor: "--pc-a12-price-color",
24
- priceFontSize: "--pc-a12-price-size",
25
- optionBackground: "--pc-a12-option-bg",
26
- optionLabelColor: "--pc-a12-option-label-color",
27
- optionValueColor: "--pc-a12-option-value-color",
28
- optionGap: "--pc-a12-option-gap",
29
- shadow: "--pc-a12-shadow"
30
- };
31
- /** 复用其它变体使用的 options,只在展示阶段合并同组已选项。 */
32
- function resolveSpecifications(dataSource) {
33
- if (!Array.isArray(dataSource === null || dataSource === void 0 ? void 0 : dataSource.options)) return [];
34
- const groups = /* @__PURE__ */ new Map();
35
- dataSource.options.forEach((option, index) => {
36
- var _ref, _option$name, _ref2, _option$quantity, _ref3, _ref4, _option$option_group_, _ref5, _ref6, _ref7, _option$option_group_2;
37
- 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;
38
- if (name === void 0 || name === null || name === "") return;
39
- 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));
40
- const value = quantity > 1 ? `${String(name)} × ${quantity}` : name;
41
- 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}`);
42
- 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;
43
- const current = groups.get(groupKey);
44
- if (current) {
45
- current.values.push(value);
46
- if (!current.label && label) current.label = label;
47
- return;
48
- }
49
- groups.set(groupKey, _objectSpread2(_objectSpread2({ key: groupKey }, label ? { label } : {}), {}, { values: [value] }));
50
- });
51
- return Array.from(groups.values()).map((group) => ({
52
- key: group.key,
53
- label: group.label,
54
- value: group.values.map(String).join(", ")
55
- }));
56
- }
57
- function getPresentationStyle(presentation) {
58
- const style = _objectSpread2({}, (presentation === null || presentation === void 0 ? void 0 : presentation.style) || {});
59
- Object.entries((presentation === null || presentation === void 0 ? void 0 : presentation.tokens) || {}).forEach(([key, value]) => {
60
- if (value !== void 0) style[TOKEN_VARIABLES[key]] = value;
61
- });
62
- style["--pc-a12-option-columns"] = (presentation === null || presentation === void 0 ? void 0 : presentation.optionColumns) || 2;
63
- return style;
64
- }
65
- const A12 = ({ dataSource, isShowImage = true, isShowDelete = false, isShowOriginalPrice = false, isShowEditProduct = false, disabled = false, disabledEditClick = false, slots, presentation, onDelete, onEditProduct }) => {
66
- var _ref8, _dataSource$num, _dataSource$total, _dataSource$origin_to, _slots$contentFooter;
67
- const display = (dataSource === null || dataSource === void 0 ? void 0 : dataSource.a12) || {};
68
- const specificationsData = useMemo(() => resolveSpecifications(dataSource), [dataSource]);
69
- const weighingInfo = useMemo(() => resolveWeighingSnapshot(dataSource), [dataSource]);
70
- 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;
71
- 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);
72
- 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;
73
- const symbol = dataSource === null || dataSource === void 0 ? void 0 : dataSource.symbol;
74
- const slotContext = useMemo(() => ({
75
- item: dataSource,
76
- disabled
77
- }), [dataSource, disabled]);
78
- const style = useMemo(() => getPresentationStyle(presentation), [presentation]);
79
- const defaultSpecifications = specificationsData.length ? /* @__PURE__ */ React.createElement("div", { className: `${PREFIX}-a12__specifications` }, specificationsData.map((specification) => /* @__PURE__ */ React.createElement("div", {
80
- className: `${PREFIX}-a12__specification`,
81
- key: specification.key
82
- }, specification.label ? /* @__PURE__ */ React.createElement("span", { className: `${PREFIX}-a12__specification-label` }, specification.label) : null, /* @__PURE__ */ React.createElement("strong", { className: `${PREFIX}-a12__specification-value` }, specification.value)))) : (dataSource === null || dataSource === void 0 ? void 0 : dataSource.product_option_string) ? /* @__PURE__ */ React.createElement("div", { className: `${PREFIX}-a12__specification-summary` }, dataSource.product_option_string) : null;
83
- const specifications = (slots === null || slots === void 0 ? void 0 : slots.specifications) ? slots.specifications(_objectSpread2(_objectSpread2({}, slotContext), {}, { defaultSpecifications })) : defaultSpecifications;
84
- const contentFooter = slots === null || slots === void 0 || (_slots$contentFooter = slots.contentFooter) === null || _slots$contentFooter === void 0 ? void 0 : _slots$contentFooter.call(slots, slotContext);
85
- const defaultPrice = /* @__PURE__ */ React.createElement("div", { className: `${PREFIX}-a12__price` }, /* @__PURE__ */ React.createElement("strong", null, formatAmount(lineTotal, 2, symbol)), isShowOriginalPrice && originalTotal > 0 && originalTotal !== lineTotal ? /* @__PURE__ */ React.createElement("del", null, formatAmount(originalTotal, 2, symbol)) : null);
86
- const defaultEdit = Boolean(isShowEditProduct && onEditProduct) ? /* @__PURE__ */ React.createElement("button", {
87
- type: "button",
88
- className: `${PREFIX}-a12__edit`,
89
- disabled: disabled || disabledEditClick,
90
- onClick: (event) => {
91
- event.preventDefault();
92
- event.stopPropagation();
93
- onEditProduct === null || onEditProduct === void 0 || onEditProduct(dataSource);
94
- }
95
- }, locales.getText("pisell2.product.card.edit")) : null;
96
- const defaultQuantityControl = (slots === null || slots === void 0 ? void 0 : slots.quantityControl) ? slots.quantityControl(slotContext) : /* @__PURE__ */ React.createElement("div", { className: `${PREFIX}-a12__quantity-fallback` }, /* @__PURE__ */ React.createElement("span", null, display.quantityText || `× ${quantity}`));
97
- const defaultActionRail = /* @__PURE__ */ React.createElement("aside", { className: `${PREFIX}-a12__rail` }, isShowDelete && onDelete ? /* @__PURE__ */ React.createElement("button", {
98
- type: "button",
99
- className: `${PREFIX}-a12__delete`,
100
- "aria-label": locales.getText("pisell2.cart.sku-card.actions.delete"),
101
- disabled,
102
- onClick: (event) => {
103
- event.preventDefault();
104
- event.stopPropagation();
105
- onDelete(dataSource);
106
- }
107
- }, /* @__PURE__ */ React.createElement(IconFont, { type: "pisell2-trash-01" })) : null, defaultPrice, defaultEdit, /* @__PURE__ */ React.createElement("div", { className: `${PREFIX}-a12__quantity-control` }, defaultQuantityControl));
108
- const actionRail = (slots === null || slots === void 0 ? void 0 : slots.actionRail) ? slots.actionRail(_objectSpread2(_objectSpread2({}, slotContext), {}, {
109
- defaultPrice,
110
- defaultEdit,
111
- defaultQuantityControl
112
- })) : defaultActionRail;
113
- return /* @__PURE__ */ React.createElement("div", {
114
- className: classNames(`${PREFIX}-a12`, `${PREFIX}-a12--${(presentation === null || presentation === void 0 ? void 0 : presentation.density) || "comfortable"}`, `${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),
115
- style
116
- }, isShowImage ? /* @__PURE__ */ React.createElement("div", { className: `${PREFIX}-a12__media` }, (dataSource === null || dataSource === void 0 ? void 0 : dataSource.image) ? /* @__PURE__ */ React.createElement("img", {
117
- alt: "",
118
- src: image.ali(dataSource.image, 320),
119
- style: { objectFit: (presentation === null || presentation === void 0 ? void 0 : presentation.mediaFit) || "cover" }
120
- }) : /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true" }, String((dataSource === null || dataSource === void 0 ? void 0 : dataSource.name) || "").slice(0, 2))) : null, /* @__PURE__ */ React.createElement("div", { className: `${PREFIX}-a12__content` }, display.eyebrow ? /* @__PURE__ */ React.createElement("div", { className: `${PREFIX}-a12__eyebrow` }, display.eyebrow) : null, /* @__PURE__ */ React.createElement("div", { className: `${PREFIX}-a12__name` }, dataSource === null || dataSource === void 0 ? void 0 : dataSource.name), weighingInfo ? /* @__PURE__ */ React.createElement("div", { className: `${PREFIX}-a12__weighing` }, /* @__PURE__ */ React.createElement(Weighing, {
121
- dataSource: weighingInfo,
122
- symbol
123
- })) : null, specifications, contentFooter ? /* @__PURE__ */ React.createElement("div", { className: `${PREFIX}-a12__content-footer` }, contentFooter) : null), actionRail);
124
- };
125
- //#endregion
126
- export { A12 as default };
@@ -1,279 +0,0 @@
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
- }
@@ -1,56 +0,0 @@
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 };
@@ -1,129 +0,0 @@
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;