@pisell/private-materials 6.3.136 → 6.3.138

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 (173) 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 +1 -1
  5. package/build/lowcode/render/default/view.js +1 -1
  6. package/build/lowcode/view.js +1 -1
  7. package/es/businessModel/SalesModel/index.d.ts +1 -0
  8. package/es/components/booking/addons/model.d.ts +1 -10
  9. package/es/components/booking/components/TabProduct/index.d.ts +1 -0
  10. package/es/components/booking/components/TabProduct/productItem/index.d.ts +1 -0
  11. package/es/components/booking/deposit/index.d.ts +1 -0
  12. package/es/components/booking/forms/model.d.ts +1 -10
  13. package/es/components/booking/forms/single/index.d.ts +1 -0
  14. package/es/components/booking/info/addServiceVariant/index.d.ts +1 -0
  15. package/es/components/booking/info/clientVariant/hooks/useClientFn.d.ts +1 -0
  16. package/es/components/booking/info/date/index.d.ts +1 -0
  17. package/es/components/booking/info/hooks/useInfoHolder.d.ts +1 -0
  18. package/es/components/booking/info/index.d.ts +1 -0
  19. package/es/components/booking/info/model.d.ts +1 -10
  20. package/es/components/booking/info/notes/index.d.ts +1 -0
  21. package/es/components/booking/info/service/Lists.d.ts +1 -0
  22. package/es/components/booking/info/service/actions/index.d.ts +1 -0
  23. package/es/components/booking/info/service/addService/index.d.ts +1 -0
  24. package/es/components/booking/info/service/addTimeModal/index.d.ts +1 -0
  25. package/es/components/booking/info/service/serviceList/index.d.ts +1 -0
  26. package/es/components/booking/info/service2/Lists.d.ts +1 -0
  27. package/es/components/booking/info/service2/utils.d.ts +1 -1
  28. package/es/components/booking/info2/service/actions/index.d.ts +1 -0
  29. package/es/components/booking/info2/service/addTimeModal/index.d.ts +1 -0
  30. package/es/components/booking/info2/service/contactInfoMode/index.d.ts +1 -0
  31. package/es/components/booking/info2/service/serviceList/index.d.ts +1 -0
  32. package/es/components/booking/materiels/duration/index.d.ts +1 -0
  33. package/es/components/booking/materiels/holder/index.d.ts +1 -0
  34. package/es/components/booking/materiels/startTime/index.d.ts +1 -0
  35. package/es/components/booking/model.d.ts +1 -9
  36. package/es/components/booking/notes/model.d.ts +1 -10
  37. package/es/components/booking/payments/model.d.ts +1 -10
  38. package/es/components/eftposPay/amount.d.ts +1 -0
  39. package/es/components/eftposPay/app.d.ts +1 -0
  40. package/es/components/eftposPay/component/fail/failCustom.d.ts +1 -0
  41. package/es/components/eftposPay/device.d.ts +1 -0
  42. package/es/components/eftposPay/hooks.d.ts +2 -2
  43. package/es/components/eftposPay/index.d.ts +1 -0
  44. package/es/components/eftposPay/linkly/index.d.ts +1 -0
  45. package/es/components/eftposPay/pay.d.ts +1 -0
  46. package/es/components/eftposPay/store/index.d.ts +5 -5
  47. package/es/components/eventBooking/components/Provider/Cart/Deposit/index.d.ts +1 -0
  48. package/es/components/eventBooking/components/Provider/Content/index.d.ts +1 -0
  49. package/es/components/eventBooking/components/Provider/Header/index.d.ts +1 -0
  50. package/es/components/eventBooking/components/Provider/SelectHolderModal.d.ts +1 -0
  51. package/es/components/eventBooking/components/bookingDetailModal/components/Resource.d.ts +1 -0
  52. package/es/components/eventBooking/components/bookingDetailModal/components/Schedule.d.ts +1 -0
  53. package/es/components/eventBooking/index.d.ts +1 -0
  54. package/es/components/pay/toC/PaymentMethods/StripePay/Stripe/index.d.ts +1 -0
  55. package/es/components/pay/toC/model.d.ts +1 -9
  56. package/es/components/pisellSelectCustomerModal/RightPanel/Add/PhoneField/index.d.ts +1 -0
  57. package/es/components/pisellSelectCustomerModal/RightPanel/Add/index.d.ts +1 -0
  58. package/es/components/pisellSelectCustomerModal/RightPanel/index.d.ts +1 -0
  59. package/es/components/productExtension/fields/Actor/index.d.ts +1 -0
  60. package/es/components/productExtension/fields/Forms/index.d.ts +1 -0
  61. package/es/components/productExtension/fields/SelectProducts/ProductItem/index.d.ts +1 -0
  62. package/es/components/productExtension/fields/SelectProducts/index.d.ts +1 -0
  63. package/es/components/productExtension/fields/SelectResourcesTable/index.d.ts +1 -0
  64. package/es/components/productExtension/index.d.ts +1 -0
  65. package/es/components/ruleSetting/index.d.ts +1 -0
  66. package/es/components/scanOrder/components/Content/index.js +251 -69
  67. package/es/components/scanOrder/context.js +6 -18
  68. package/es/components/scanOrder/utils/toShoppingCartProducts.d.ts +2 -1
  69. package/es/components/scanOrder/utils/toShoppingCartProducts.js +15 -9
  70. package/es/components/scanOrder/utils/transformProductDetail.d.ts +2 -1
  71. package/es/components/scanOrder/utils/transformProductDetail.js +7 -6
  72. package/es/components/schedules/model.d.ts +1 -9
  73. package/es/components/shoppingCart/components/Empty/index.d.ts +1 -0
  74. package/es/components/shoppingCart/components/Render/index.d.ts +1 -0
  75. package/es/components/shoppingCart/index.d.ts +1 -0
  76. package/es/components/ticketBooking/components/addServiceVariant/index.d.ts +1 -0
  77. package/es/components/venueBooking/components/Checkout/index.js +36 -5
  78. package/es/components/venueBooking/components/VenueSelection/components/TimeGrid.js +1 -1
  79. package/es/components/venueBooking/context.js +32 -6
  80. package/es/components/venueBooking/locales.d.ts +15 -0
  81. package/es/components/venueBooking/locales.js +15 -0
  82. package/es/plus/clinetSearch/Add/PhoneField/index.d.ts +1 -0
  83. package/es/plus/pisellSalesManagement/config/booking.d.ts +6 -6
  84. package/es/plus/pisellSalesProductCard/index.js +16 -1
  85. package/es/plus/pisellSalesProductCard/types.d.ts +21 -1
  86. package/es/plus/productSelect/ProductCard/ProductCardV2.js +6 -2
  87. package/es/plus/walletEditor/components/ImageUpload/index.d.ts +1 -1
  88. package/es/pro/NumericStepper/index.d.ts +19 -0
  89. package/es/pro/NumericStepper/index.js +37 -6
  90. package/lib/businessModel/SalesModel/index.d.ts +1 -0
  91. package/lib/components/booking/addons/model.d.ts +1 -10
  92. package/lib/components/booking/components/TabProduct/index.d.ts +1 -0
  93. package/lib/components/booking/components/TabProduct/productItem/index.d.ts +1 -0
  94. package/lib/components/booking/deposit/index.d.ts +1 -0
  95. package/lib/components/booking/forms/model.d.ts +1 -10
  96. package/lib/components/booking/forms/single/index.d.ts +1 -0
  97. package/lib/components/booking/info/addServiceVariant/index.d.ts +1 -0
  98. package/lib/components/booking/info/clientVariant/hooks/useClientFn.d.ts +1 -0
  99. package/lib/components/booking/info/date/index.d.ts +1 -0
  100. package/lib/components/booking/info/hooks/useInfoHolder.d.ts +1 -0
  101. package/lib/components/booking/info/index.d.ts +1 -0
  102. package/lib/components/booking/info/model.d.ts +1 -10
  103. package/lib/components/booking/info/notes/index.d.ts +1 -0
  104. package/lib/components/booking/info/service/Lists.d.ts +1 -0
  105. package/lib/components/booking/info/service/actions/index.d.ts +1 -0
  106. package/lib/components/booking/info/service/addService/index.d.ts +1 -0
  107. package/lib/components/booking/info/service/addTimeModal/index.d.ts +1 -0
  108. package/lib/components/booking/info/service/serviceList/index.d.ts +1 -0
  109. package/lib/components/booking/info/service2/Lists.d.ts +1 -0
  110. package/lib/components/booking/info/service2/utils.d.ts +1 -1
  111. package/lib/components/booking/info2/service/actions/index.d.ts +1 -0
  112. package/lib/components/booking/info2/service/addTimeModal/index.d.ts +1 -0
  113. package/lib/components/booking/info2/service/contactInfoMode/index.d.ts +1 -0
  114. package/lib/components/booking/info2/service/serviceList/index.d.ts +1 -0
  115. package/lib/components/booking/materiels/duration/index.d.ts +1 -0
  116. package/lib/components/booking/materiels/holder/index.d.ts +1 -0
  117. package/lib/components/booking/materiels/startTime/index.d.ts +1 -0
  118. package/lib/components/booking/model.d.ts +1 -9
  119. package/lib/components/booking/notes/model.d.ts +1 -10
  120. package/lib/components/booking/payments/model.d.ts +1 -10
  121. package/lib/components/eftposPay/amount.d.ts +1 -0
  122. package/lib/components/eftposPay/app.d.ts +1 -0
  123. package/lib/components/eftposPay/component/fail/failCustom.d.ts +1 -0
  124. package/lib/components/eftposPay/device.d.ts +1 -0
  125. package/lib/components/eftposPay/hooks.d.ts +2 -2
  126. package/lib/components/eftposPay/index.d.ts +1 -0
  127. package/lib/components/eftposPay/linkly/index.d.ts +1 -0
  128. package/lib/components/eftposPay/pay.d.ts +1 -0
  129. package/lib/components/eftposPay/store/index.d.ts +5 -5
  130. package/lib/components/eventBooking/components/Provider/Cart/Deposit/index.d.ts +1 -0
  131. package/lib/components/eventBooking/components/Provider/Content/index.d.ts +1 -0
  132. package/lib/components/eventBooking/components/Provider/Header/index.d.ts +1 -0
  133. package/lib/components/eventBooking/components/Provider/SelectHolderModal.d.ts +1 -0
  134. package/lib/components/eventBooking/components/bookingDetailModal/components/Resource.d.ts +1 -0
  135. package/lib/components/eventBooking/components/bookingDetailModal/components/Schedule.d.ts +1 -0
  136. package/lib/components/eventBooking/index.d.ts +1 -0
  137. package/lib/components/pay/toC/PaymentMethods/StripePay/Stripe/index.d.ts +1 -0
  138. package/lib/components/pay/toC/model.d.ts +1 -9
  139. package/lib/components/pisellSelectCustomerModal/RightPanel/Add/PhoneField/index.d.ts +1 -0
  140. package/lib/components/pisellSelectCustomerModal/RightPanel/Add/index.d.ts +1 -0
  141. package/lib/components/pisellSelectCustomerModal/RightPanel/index.d.ts +1 -0
  142. package/lib/components/productExtension/fields/Actor/index.d.ts +1 -0
  143. package/lib/components/productExtension/fields/Forms/index.d.ts +1 -0
  144. package/lib/components/productExtension/fields/SelectProducts/ProductItem/index.d.ts +1 -0
  145. package/lib/components/productExtension/fields/SelectProducts/index.d.ts +1 -0
  146. package/lib/components/productExtension/fields/SelectResourcesTable/index.d.ts +1 -0
  147. package/lib/components/productExtension/index.d.ts +1 -0
  148. package/lib/components/ruleSetting/index.d.ts +1 -0
  149. package/lib/components/scanOrder/components/Content/index.js +150 -41
  150. package/lib/components/scanOrder/context.js +0 -10
  151. package/lib/components/scanOrder/utils/toShoppingCartProducts.d.ts +2 -1
  152. package/lib/components/scanOrder/utils/toShoppingCartProducts.js +8 -5
  153. package/lib/components/scanOrder/utils/transformProductDetail.d.ts +2 -1
  154. package/lib/components/scanOrder/utils/transformProductDetail.js +1 -9
  155. package/lib/components/schedules/model.d.ts +1 -9
  156. package/lib/components/shoppingCart/components/Empty/index.d.ts +1 -0
  157. package/lib/components/shoppingCart/components/Render/index.d.ts +1 -0
  158. package/lib/components/shoppingCart/index.d.ts +1 -0
  159. package/lib/components/ticketBooking/components/addServiceVariant/index.d.ts +1 -0
  160. package/lib/components/venueBooking/components/Checkout/index.js +28 -3
  161. package/lib/components/venueBooking/components/VenueSelection/components/TimeGrid.js +1 -1
  162. package/lib/components/venueBooking/context.js +14 -6
  163. package/lib/components/venueBooking/locales.d.ts +15 -0
  164. package/lib/components/venueBooking/locales.js +15 -0
  165. package/lib/plus/clinetSearch/Add/PhoneField/index.d.ts +1 -0
  166. package/lib/plus/pisellSalesManagement/config/booking.d.ts +6 -6
  167. package/lib/plus/pisellSalesProductCard/index.js +10 -0
  168. package/lib/plus/pisellSalesProductCard/types.d.ts +21 -1
  169. package/lib/plus/productSelect/ProductCard/ProductCardV2.js +6 -2
  170. package/lib/plus/walletEditor/components/ImageUpload/index.d.ts +1 -1
  171. package/lib/pro/NumericStepper/index.d.ts +19 -0
  172. package/lib/pro/NumericStepper/index.js +21 -4
  173. package/package.json +1 -1
@@ -48,6 +48,28 @@ var import_Check = __toESM(require("../Check"));
48
48
  var import_PolicyModal = __toESM(require("../../../appointmentBooking/deposit/components/PolicyModal"));
49
49
  var import_useComponents = __toESM(require("../../../../hooks/useComponents"));
50
50
  var import_index = require("./index.less");
51
+ function extractEntryPaxNumber(payload) {
52
+ if (payload == null) return null;
53
+ if (typeof payload === "number" && Number.isFinite(payload) && payload >= 1) {
54
+ return Math.floor(payload);
55
+ }
56
+ if (typeof payload === "string") {
57
+ const n = Number(payload);
58
+ if (Number.isFinite(n) && n >= 1) return Math.floor(n);
59
+ }
60
+ if (typeof payload === "object") {
61
+ const o = payload;
62
+ for (const k of ["entryPaxNumber", "pax", "num", "count", "value"]) {
63
+ const v = o[k];
64
+ if (typeof v === "number" && Number.isFinite(v) && v >= 1) return Math.floor(v);
65
+ if (typeof v === "string") {
66
+ const n = Number(v);
67
+ if (Number.isFinite(n) && n >= 1) return Math.floor(n);
68
+ }
69
+ }
70
+ }
71
+ return null;
72
+ }
51
73
  function ReadyState() {
52
74
  var _a, _b, _c, _d;
53
75
  const {
@@ -78,6 +100,16 @@ function ReadyState() {
78
100
  content: null
79
101
  });
80
102
  const [pendingFormPayload, setPendingFormPayload] = (0, import_react.useState)(null);
103
+ const [entryMode, setEntryMode] = (0, import_react.useState)("default");
104
+ const requestEntryPaxRef = (0, import_react.useRef)(0);
105
+ const requestPaxMinRef = (0, import_react.useRef)(1);
106
+ const requestPaxMaxRef = (0, import_react.useRef)(1);
107
+ const tableFormRecordRef = (0, import_react.useRef)(null);
108
+ const getLocalizedName = (nameMap) => {
109
+ if (!nameMap) return "";
110
+ const currentLocale = import_utils.locales.getLocale();
111
+ return nameMap[currentLocale] || nameMap.original || nameMap.en || "";
112
+ };
81
113
  const normalizeFormPayload = (formPayload, partyroomBookingPayload) => {
82
114
  const sourcePayload = formPayload ?? partyroomBookingPayload;
83
115
  if (!sourcePayload) return null;
@@ -97,6 +129,17 @@ function ReadyState() {
97
129
  const link = `/order/details?id=${order_id}`;
98
130
  location.replace(link);
99
131
  };
132
+ const handleBack = () => {
133
+ if (currentStep !== "product") {
134
+ prevStep();
135
+ return;
136
+ }
137
+ if (entryMode === "additional_order" && (entryContext == null ? void 0 : entryContext.order_id)) {
138
+ handleOrderDetail(entryContext.order_id);
139
+ return;
140
+ }
141
+ location.replace("/");
142
+ };
100
143
  const enterProductStep = async () => {
101
144
  try {
102
145
  await runModuleAction("applyItemRulePrefill");
@@ -107,6 +150,40 @@ function ReadyState() {
107
150
  goToStep("product");
108
151
  }
109
152
  };
153
+ const runEntryPaxGateThenEnterProduct = async () => {
154
+ if (requestEntryPaxRef.current !== 1) {
155
+ await enterProductStep();
156
+ return;
157
+ }
158
+ const pax = await new Promise((resolve) => {
159
+ var _a2;
160
+ if (typeof (utils == null ? void 0 : utils.action) !== "function") {
161
+ resolve(null);
162
+ return;
163
+ }
164
+ utils.action({
165
+ type: "pisell1.handlePaxModal",
166
+ data: {
167
+ tableName: getLocalizedName((_a2 = tableFormRecordRef.current) == null ? void 0 : _a2.name),
168
+ requestPaxMin: requestPaxMinRef.current,
169
+ requestPaxMax: requestPaxMaxRef.current
170
+ },
171
+ callback: (result) => {
172
+ resolve(extractEntryPaxNumber(result));
173
+ }
174
+ });
175
+ });
176
+ if (pax == null) {
177
+ location.replace("/");
178
+ return;
179
+ }
180
+ try {
181
+ await runModuleAction("setEntryPaxNumber", pax);
182
+ } catch (error) {
183
+ console.warn("[scanOrder] setOtherParams failed", error);
184
+ }
185
+ await enterProductStep();
186
+ };
110
187
  const closePolicyAndBack = () => {
111
188
  setPolicyModal({
112
189
  open: false,
@@ -139,7 +216,7 @@ function ReadyState() {
139
216
  content: null
140
217
  });
141
218
  setPendingFormPayload(null);
142
- void enterProductStep();
219
+ void runEntryPaxGateThenEnterProduct();
143
220
  };
144
221
  const handleFormConfirm = () => {
145
222
  var _a2, _b2;
@@ -156,7 +233,7 @@ function ReadyState() {
156
233
  openFormModal(pendingFormPayload);
157
234
  return;
158
235
  }
159
- void enterProductStep();
236
+ void runEntryPaxGateThenEnterProduct();
160
237
  };
161
238
  const depositProtocolRequest = (id) => {
162
239
  var _a2, _b2;
@@ -165,28 +242,45 @@ function ReadyState() {
165
242
  (0, import_react.useEffect)(() => {
166
243
  const checkResourceAvailable = async () => {
167
244
  const hasOrderId = !!(entryContext == null ? void 0 : entryContext.order_id);
168
- const { mode, order_id, errorTips, policy, form, partyroom_booking } = await runModuleAction(
245
+ const {
246
+ mode,
247
+ order_id,
248
+ errorTips,
249
+ policy,
250
+ form,
251
+ partyroom_booking,
252
+ requestEntryPax,
253
+ requestPaxMin,
254
+ requestPaxMax,
255
+ table_form_record
256
+ } = await runModuleAction(
169
257
  "checkResourceAvailable",
170
258
  entryContext == null ? void 0 : entryContext.resource_id,
171
259
  hasOrderId
172
260
  );
261
+ requestEntryPaxRef.current = Number(requestEntryPax) === 1 ? 1 : 0;
262
+ requestPaxMinRef.current = Number(requestPaxMin) || 1;
263
+ requestPaxMaxRef.current = Number(requestPaxMax) || 1;
264
+ tableFormRecordRef.current = table_form_record || {};
173
265
  const normalizedFormPayload = normalizeFormPayload(form, partyroom_booking);
174
- if (mode === "idle" || mode === "additional_order" || mode === "additional_order_with_code") {
266
+ const isAdditionalOrder = mode === "additional_order" || mode === "additional_order_with_code";
267
+ setEntryMode(isAdditionalOrder ? "additional_order" : "default");
268
+ if (mode === "idle") {
175
269
  const normalizedPolicyPayload = typeof policy === "object" && policy !== null ? policy : { id: policy };
176
- if (mode === "idle") {
177
- if (normalizedPolicyPayload == null ? void 0 : normalizedPolicyPayload.id) {
178
- setPendingFormPayload(normalizedFormPayload);
179
- setPolicyModal({
180
- open: true,
181
- content: normalizedPolicyPayload
182
- });
183
- return;
184
- }
185
- if (normalizedFormPayload) {
186
- openFormModal(normalizedFormPayload);
187
- return;
188
- }
270
+ if (normalizedPolicyPayload == null ? void 0 : normalizedPolicyPayload.id) {
271
+ setPendingFormPayload(normalizedFormPayload);
272
+ setPolicyModal({
273
+ open: true,
274
+ content: normalizedPolicyPayload
275
+ });
276
+ return;
277
+ }
278
+ if (normalizedFormPayload) {
279
+ openFormModal(normalizedFormPayload);
280
+ return;
189
281
  }
282
+ await runEntryPaxGateThenEnterProduct();
283
+ } else if (isAdditionalOrder) {
190
284
  await enterProductStep();
191
285
  } else if (mode === "resource_busy") {
192
286
  if (!isLogin) {
@@ -251,37 +345,52 @@ function ReadyState() {
251
345
  check: /* @__PURE__ */ import_react.default.createElement(import_Check.default, null),
252
346
  error: /* @__PURE__ */ import_react.default.createElement(import_ErrorState.default, { message: import_utils.locales.getText("pisell2.scan.order.store.status.exception") })
253
347
  };
254
- const getFirstFailedProductId = () => {
348
+ const getFirstFailedProductIds = () => {
255
349
  const firstFailure = Array.isArray(cartValidation == null ? void 0 : cartValidation.failures) ? cartValidation.failures[0] : null;
256
- const firstFailedTarget = Array.isArray(firstFailure == null ? void 0 : firstFailure.targets) ? firstFailure.targets[0] : null;
257
- const firstFailedProductId = Number(firstFailedTarget == null ? void 0 : firstFailedTarget.product_id);
258
- if (!Number.isFinite(firstFailedProductId) || firstFailedProductId <= 0) {
259
- return null;
350
+ const targets = Array.isArray(firstFailure == null ? void 0 : firstFailure.targets) ? firstFailure.targets : [];
351
+ const ids = [];
352
+ const seen = /* @__PURE__ */ new Set();
353
+ for (const target of targets) {
354
+ const id = Number(target == null ? void 0 : target.product_id);
355
+ if (Number.isFinite(id) && id > 0 && !seen.has(id)) {
356
+ seen.add(id);
357
+ ids.push(id);
358
+ }
260
359
  }
261
- return firstFailedProductId;
360
+ return ids;
262
361
  };
263
- const scrollAndHighlightProductById = (productId) => {
264
- const failedProductElement = document.querySelector(
265
- `[data-product-id="${String(productId)}"]`
266
- );
267
- if (!failedProductElement) return false;
268
- failedProductElement.classList.remove("highlight-product-item");
269
- failedProductElement.scrollIntoView({
270
- behavior: "smooth",
271
- block: "center"
272
- });
273
- failedProductElement.classList.add("highlight-product-item");
274
- setTimeout(() => {
362
+ const scrollAndHighlightProductsByIds = (productIds) => {
363
+ if (!(productIds == null ? void 0 : productIds.length)) return false;
364
+ let scrolled = false;
365
+ let highlighted = false;
366
+ for (const productId of productIds) {
367
+ const failedProductElement = document.querySelector(
368
+ `[data-product-id="${String(productId)}"]`
369
+ );
370
+ if (!failedProductElement) continue;
275
371
  failedProductElement.classList.remove("highlight-product-item");
276
- }, 3e3);
277
- return true;
372
+ if (!scrolled) {
373
+ failedProductElement.scrollIntoView({
374
+ behavior: "smooth",
375
+ block: "center"
376
+ });
377
+ scrolled = true;
378
+ }
379
+ void failedProductElement.offsetWidth;
380
+ failedProductElement.classList.add("highlight-product-item");
381
+ setTimeout(() => {
382
+ failedProductElement.classList.remove("highlight-product-item");
383
+ }, 3e3);
384
+ highlighted = true;
385
+ }
386
+ return highlighted;
278
387
  };
279
388
  const gotoCheckOrder = async () => {
280
389
  const firstFailure = Array.isArray(cartValidation == null ? void 0 : cartValidation.failures) ? cartValidation.failures[0] : null;
281
390
  if ((cartValidation == null ? void 0 : cartValidation.passed) === false) {
282
- const firstFailedProductId = getFirstFailedProductId();
283
- if (firstFailedProductId) {
284
- scrollAndHighlightProductById(firstFailedProductId);
391
+ const failedProductIds = getFirstFailedProductIds();
392
+ if (failedProductIds.length) {
393
+ scrollAndHighlightProductsByIds(failedProductIds);
285
394
  }
286
395
  const failureTips = String((firstFailure == null ? void 0 : firstFailure.validationMessage) || "").trim();
287
396
  (0, import_materials.PisellToast)({
@@ -326,7 +435,7 @@ function ReadyState() {
326
435
  if (isMobileView) return false;
327
436
  return currentStep === "product";
328
437
  }, [currentStep, isMobileView]);
329
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_Header.default, { currentStep, onBack: prevStep }), /* @__PURE__ */ import_react.default.createElement(
438
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_Header.default, { currentStep, onBack: handleBack }), /* @__PURE__ */ import_react.default.createElement(
330
439
  "div",
331
440
  {
332
441
  className: `pisell-scan-order-content-wrap ${isMobileView ? "pisell-scan-order-content-mobile-wrap" : ""}`,
@@ -149,16 +149,6 @@ function ScanOrderProvider({
149
149
  if (typeof scanOrderModule.getPageConfig === "function") {
150
150
  await scanOrderModule.getPageConfig(entryContext);
151
151
  }
152
- await (0, import_hooks.safeRunModuleAction)(scanOrderModule, "setItemRuleRuntimeConfig", {
153
- pax: {
154
- total: 2,
155
- adult: 2,
156
- child: 0
157
- },
158
- serviceType: "dine-in",
159
- submissionIndex: 0,
160
- historicalItems: []
161
- });
162
152
  await refreshViewModel();
163
153
  if (!unmounted) {
164
154
  setErrorMessage("");
@@ -2,8 +2,9 @@ interface ScanOrderOrderProduct {
2
2
  product_id: number | null;
3
3
  product_variant_id: number;
4
4
  num?: number;
5
- payment_price?: string | number;
5
+ /** 券后单品单价(订单域成交单价)。 */
6
6
  selling_price?: string | number;
7
+ /** 券前单品单价(店铺售价)。 */
7
8
  original_price?: string | number;
8
9
  product_option_item?: any[];
9
10
  product_bundle?: any[];
@@ -37,19 +37,22 @@ function getDisplayName(product) {
37
37
  const origin = (product == null ? void 0 : product._origin) || {};
38
38
  const callbackData = (origin == null ? void 0 : origin.callbackData) || {};
39
39
  const callbackOrigin = (callbackData == null ? void 0 : callbackData.origin) || {};
40
- return (callbackData == null ? void 0 : callbackData.name) || (callbackData == null ? void 0 : callbackData.title) || (callbackOrigin == null ? void 0 : callbackOrigin.name) || (callbackOrigin == null ? void 0 : callbackOrigin.title) || (origin == null ? void 0 : origin.name) || (origin == null ? void 0 : origin.title) || ((_b = (_a = origin == null ? void 0 : origin.resources) == null ? void 0 : _a[0]) == null ? void 0 : _b.main_field) || ((_c = product == null ? void 0 : product.metadata) == null ? void 0 : _c.resource_name) || `Product #${product.product_id ?? "unknown"}`;
40
+ const sourceItem = (origin == null ? void 0 : origin.sourceItem) || {};
41
+ return (callbackData == null ? void 0 : callbackData.name) || (callbackData == null ? void 0 : callbackData.title) || (callbackOrigin == null ? void 0 : callbackOrigin.name) || (callbackOrigin == null ? void 0 : callbackOrigin.title) || (sourceItem == null ? void 0 : sourceItem.name) || (sourceItem == null ? void 0 : sourceItem.title) || (origin == null ? void 0 : origin.name) || (origin == null ? void 0 : origin.title) || ((_b = (_a = origin == null ? void 0 : origin.resources) == null ? void 0 : _a[0]) == null ? void 0 : _b.main_field) || ((_c = product == null ? void 0 : product.metadata) == null ? void 0 : _c.resource_name) || `Product #${product.product_id ?? "unknown"}`;
41
42
  }
42
43
  function getDisplayImage(product) {
43
44
  const origin = (product == null ? void 0 : product._origin) || {};
44
45
  const callbackData = (origin == null ? void 0 : origin.callbackData) || {};
45
46
  const callbackOrigin = (callbackData == null ? void 0 : callbackData.origin) || {};
46
- return (callbackData == null ? void 0 : callbackData.image) || (callbackData == null ? void 0 : callbackData.cover) || (callbackOrigin == null ? void 0 : callbackOrigin.image) || (callbackOrigin == null ? void 0 : callbackOrigin.cover) || (origin == null ? void 0 : origin.image) || (origin == null ? void 0 : origin.cover) || "";
47
+ const sourceItem = (origin == null ? void 0 : origin.sourceItem) || {};
48
+ return (callbackData == null ? void 0 : callbackData.image) || (callbackData == null ? void 0 : callbackData.cover) || (callbackOrigin == null ? void 0 : callbackOrigin.image) || (callbackOrigin == null ? void 0 : callbackOrigin.cover) || (sourceItem == null ? void 0 : sourceItem.image) || (sourceItem == null ? void 0 : sourceItem.cover) || (origin == null ? void 0 : origin.image) || (origin == null ? void 0 : origin.cover) || "";
47
49
  }
48
50
  function getUnitPrice(product) {
49
- const origin = (product == null ? void 0 : product._origin) || {};
50
- const callbackData = (origin == null ? void 0 : origin.callbackData) || {};
51
+ var _a, _b;
52
+ const callbackData = ((_a = product == null ? void 0 : product._origin) == null ? void 0 : _a.callbackData) || {};
51
53
  const callbackOrigin = (callbackData == null ? void 0 : callbackData.origin) || {};
52
- return toNumber(product.payment_price, NaN) || toNumber(product.selling_price, NaN) || toNumber(product.original_price, NaN) || toNumber(callbackData == null ? void 0 : callbackData.price, NaN) || toNumber(callbackOrigin == null ? void 0 : callbackOrigin.price, NaN) || toNumber(origin == null ? void 0 : origin.price, NaN) || toNumber(origin == null ? void 0 : origin.selling_price, NaN) || toNumber(origin == null ? void 0 : origin.base_price, 0);
54
+ const sourceItem = ((_b = product == null ? void 0 : product._origin) == null ? void 0 : _b.sourceItem) || {};
55
+ return toNumber(product.selling_price, NaN) || toNumber(product.original_price, NaN) || toNumber(callbackData == null ? void 0 : callbackData.price, NaN) || toNumber(callbackOrigin == null ? void 0 : callbackOrigin.price, NaN) || toNumber(sourceItem == null ? void 0 : sourceItem.price, 0);
53
56
  }
54
57
  function normalizeOptions(product) {
55
58
  var _a;
@@ -43,9 +43,10 @@ export interface ScanOrderOrderProductInput {
43
43
  price: number;
44
44
  }>;
45
45
  product_bundle: ProductDetailBundleItem[];
46
+ /** 券后单品单价;初次加购由入口置为 selling_price,之后由 SDK Rules 引擎维护。 */
46
47
  selling_price: string;
48
+ /** 券前单品单价(店铺售价)。 */
47
49
  original_price: string;
48
- payment_price: string;
49
50
  tax_fee: string;
50
51
  is_charge_tax: number;
51
52
  metadata: Record<string, any>;
@@ -83,14 +83,7 @@ function transformProductDetailToOrderProduct(params) {
83
83
  (payload == null ? void 0 : payload.price) ?? (payload == null ? void 0 : payload.selling_price) ?? (callbackOrigin == null ? void 0 : callbackOrigin.price) ?? (sourceItem == null ? void 0 : sourceItem.price) ?? (sourceItem == null ? void 0 : sourceItem.selling_price) ?? (sourceItem == null ? void 0 : sourceItem.base_price),
84
84
  "0.00"
85
85
  );
86
- const originalPrice = toPriceString(
87
- (payload == null ? void 0 : payload.original_price) ?? (callbackOrigin == null ? void 0 : callbackOrigin.original_price) ?? (sourceItem == null ? void 0 : sourceItem.original_price) ?? sellingPrice,
88
- sellingPrice
89
- );
90
- const paymentPrice = toPriceString(
91
- (payload == null ? void 0 : payload.payment_price) ?? (callbackOrigin == null ? void 0 : callbackOrigin.payment_price) ?? (sourceItem == null ? void 0 : sourceItem.payment_price) ?? sellingPrice,
92
- sellingPrice
93
- );
86
+ const originalPrice = sellingPrice;
94
87
  const taxFee = toPriceString(
95
88
  (payload == null ? void 0 : payload.tax_fee) ?? (callbackOrigin == null ? void 0 : callbackOrigin.tax_fee) ?? (sourceItem == null ? void 0 : sourceItem.tax_fee),
96
89
  "0.00"
@@ -111,7 +104,6 @@ function transformProductDetailToOrderProduct(params) {
111
104
  ),
112
105
  selling_price: sellingPrice,
113
106
  original_price: originalPrice,
114
- payment_price: paymentPrice,
115
107
  tax_fee: taxFee,
116
108
  is_charge_tax: isChargeTax,
117
109
  metadata: {
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  import { CalendarDataItem, ScheduleItem } from "./type";
3
2
  import dayjs from "dayjs";
4
3
  export interface FormState {
@@ -69,11 +68,4 @@ export interface FormState {
69
68
  };
70
69
  setGlobalState: Function | null;
71
70
  }
72
- export declare const Provider: (ComponentUi: any) => any, Context: import("react").Context<{
73
- state: FormState;
74
- } & {
75
- dispatch: (params: {
76
- type: string;
77
- payload: any;
78
- }) => void;
79
- }>;
71
+ export declare const Provider: any, Context: any;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import './index.less';
2
3
  declare const Empty: (props: any) => JSX.Element;
3
4
  export default Empty;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import './index.less';
2
3
  declare const Content: () => JSX.Element;
3
4
  export default Content;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  import { shoppingCartProps } from './type';
2
3
  declare const shoppingCart: ({ onCard, onAction, onChange, onAddProduct, onActiveKey, ...props }: shoppingCartProps) => JSX.Element;
3
4
  export default shoppingCart;
@@ -1,3 +1,4 @@
1
+ /// <reference types="react" />
1
2
  interface AddServiceVariantProps {
2
3
  globalState: any;
3
4
  setGlobalState: any;
@@ -190,6 +190,33 @@ function toContactsInfoPayload(formValues) {
190
190
  }
191
191
  ];
192
192
  }
193
+ function applyI18nPlaceholders(template, vars) {
194
+ let result = template;
195
+ for (const [key, value] of Object.entries(vars)) {
196
+ result = result.split(`{${key}}`).join(String(value));
197
+ }
198
+ return result;
199
+ }
200
+ function formatCheckoutDurationText(totalMinutes) {
201
+ const hours = Math.floor(totalMinutes / 60);
202
+ const minutes = totalMinutes % 60;
203
+ if (hours > 0 && minutes > 0) {
204
+ const tpl2 = String(
205
+ import_utils.locales.getText("pisell2.venue.checkout.duration.hours_minutes") || "{hours}h {minutes}min"
206
+ );
207
+ return applyI18nPlaceholders(tpl2, { hours, minutes });
208
+ }
209
+ if (hours > 0) {
210
+ const tpl2 = String(
211
+ import_utils.locales.getText("pisell2.venue.checkout.duration.hours") || "{hours}h"
212
+ );
213
+ return applyI18nPlaceholders(tpl2, { hours });
214
+ }
215
+ const tpl = String(
216
+ import_utils.locales.getText("pisell2.venue.checkout.duration.minutes") || "{minutes}min"
217
+ );
218
+ return applyI18nPlaceholders(tpl, { minutes });
219
+ }
193
220
  function getSessionDisplayText(item) {
194
221
  const startRaw = String((item == null ? void 0 : item.start_date) || "");
195
222
  const endRaw = String((item == null ? void 0 : item.end_date) || "");
@@ -198,9 +225,7 @@ function getSessionDisplayText(item) {
198
225
  if (!start.isValid() || !end.isValid())
199
226
  return String((item == null ? void 0 : item.description) || (item == null ? void 0 : item.subtitle) || "-");
200
227
  const durationMinutes = Math.max(0, end.diff(start, "minute"));
201
- const hours = Math.floor(durationMinutes / 60);
202
- const minutes = durationMinutes % 60;
203
- const durationText = hours > 0 && minutes > 0 ? `${hours}h ${minutes}m` : hours > 0 ? `${hours}h` : `${minutes}m`;
228
+ const durationText = formatCheckoutDurationText(durationMinutes);
204
229
  return `${start.format("HH:mm")} ~ ${end.format("HH:mm")} ${start.format("DD/MM/YYYY")} (${durationText})`;
205
230
  }
206
231
  function getVenueResourceName(item) {
@@ -289,7 +289,7 @@ function TimeGrid() {
289
289
  symbol,
290
290
  precision: 2,
291
291
  showCurrencySymbol: true,
292
- hideDecimalForWholeNumbers: false,
292
+ hideDecimalForWholeNumbers: true,
293
293
  className: `text-[13px] font-normal leading-4 ${priceClass} md:text-sm`
294
294
  }
295
295
  ), tag ? /* @__PURE__ */ import_react.default.createElement("div", { className: `inline-flex rounded-full px-1.5 py-0 text-[8px] font-semibold leading-4 ring-1 md:text-[9px] ${tag.className}` }, tagText) : null)
@@ -122,6 +122,7 @@ function VenueBookingProvider({ entryContext, children }) {
122
122
  const [isSubmittingOrder, setIsSubmittingOrder] = (0, import_react.useState)(false);
123
123
  const anchorDateRef = (0, import_react.useRef)(anchorDate);
124
124
  anchorDateRef.current = anchorDate;
125
+ const bootstrappedRef = (0, import_react.useRef)(false);
125
126
  const canNext = (0, import_react.useMemo)(() => {
126
127
  const allSelected = (0, import_hooks.getAllSelectedSlots)(venueBookingModule);
127
128
  if (Array.isArray(allSelected) && allSelected.length > 0) return true;
@@ -303,6 +304,12 @@ function VenueBookingProvider({ entryContext, children }) {
303
304
  console.warn("[venueBooking] handleLoginSuccess failed", error);
304
305
  }
305
306
  }, [syncCustomerLoginToModule, venueBookingModule, refreshViewModel]);
307
+ const syncCustomerLoginRef = (0, import_react.useRef)(syncCustomerLoginToModule);
308
+ syncCustomerLoginRef.current = syncCustomerLoginToModule;
309
+ const goToNearestAvailableDateRef = (0, import_react.useRef)(goToNearestAvailableDate);
310
+ goToNearestAvailableDateRef.current = goToNearestAvailableDate;
311
+ const handleLoginSuccessRef = (0, import_react.useRef)(handleLoginSuccess);
312
+ handleLoginSuccessRef.current = handleLoginSuccess;
306
313
  const submitOrder = (0, import_react.useCallback)(async () => {
307
314
  var _a2, _b2, _c2;
308
315
  if (isSubmittingOrder) return;
@@ -414,7 +421,7 @@ function VenueBookingProvider({ entryContext, children }) {
414
421
  if (!pubsub) return;
415
422
  const onGlobalLoginSuccess = async (res) => {
416
423
  if (res === "success" || (res == null ? void 0 : res.status) === "success") {
417
- await handleLoginSuccess();
424
+ await handleLoginSuccessRef.current();
418
425
  }
419
426
  };
420
427
  (_a2 = pubsub.subscribe) == null ? void 0 : _a2.call(pubsub, "pisell1.login.success", onGlobalLoginSuccess);
@@ -422,7 +429,7 @@ function VenueBookingProvider({ entryContext, children }) {
422
429
  var _a3;
423
430
  (_a3 = pubsub.unsubscribe) == null ? void 0 : _a3.call(pubsub, "pisell1.login.success", onGlobalLoginSuccess);
424
431
  };
425
- }, [utils == null ? void 0 : utils.pubsub, handleLoginSuccess]);
432
+ }, [utils == null ? void 0 : utils.pubsub]);
426
433
  (0, import_react.useEffect)(() => {
427
434
  if (!venueBookingModule) return;
428
435
  setIsGridTransition(true);
@@ -463,15 +470,16 @@ function VenueBookingProvider({ entryContext, children }) {
463
470
  };
464
471
  }, [pisellOS, venueBookingModule]);
465
472
  (0, import_react.useEffect)(() => {
466
- if (!venueBookingModule) return;
473
+ if (bootstrappedRef.current || !venueBookingModule) return;
474
+ bootstrappedRef.current = true;
467
475
  let unmounted = false;
468
476
  const bootstrap = async () => {
469
477
  try {
470
478
  setIsLoading(true);
471
- await syncCustomerLoginToModule();
479
+ await syncCustomerLoginRef.current();
472
480
  await (0, import_hooks.loadVenueProducts)(venueBookingModule, import_hooks.VENUE_PRODUCT_IDS);
473
481
  const venueProducts = typeof (venueBookingModule == null ? void 0 : venueBookingModule.getVenueProducts) === "function" ? venueBookingModule.getVenueProducts() : [];
474
- await goToNearestAvailableDate(anchorDateRef.current);
482
+ await goToNearestAvailableDateRef.current(anchorDateRef.current);
475
483
  const moduleData = (0, import_hooks.createVenueBookingViewModel)(venueBookingModule);
476
484
  if (!unmounted) {
477
485
  setViewModel((prev) => ({
@@ -506,7 +514,7 @@ function VenueBookingProvider({ entryContext, children }) {
506
514
  return () => {
507
515
  unmounted = true;
508
516
  };
509
- }, [venueBookingModule, entryContext == null ? void 0 : entryContext.biz, entryContext == null ? void 0 : entryContext.resource_id, syncCustomerLoginToModule, goToNearestAvailableDate]);
517
+ }, [venueBookingModule]);
510
518
  const value = (0, import_react.useMemo)(() => ({
511
519
  venueBookingModule,
512
520
  currentStep,
@@ -78,6 +78,9 @@ declare const _default: {
78
78
  'pisell2.venue.checkout.hotline': string;
79
79
  'pisell2.venue.checkout.estimated.total': string;
80
80
  'pisell2.venue.checkout.change': string;
81
+ 'pisell2.venue.checkout.duration.hours_minutes': string;
82
+ 'pisell2.venue.checkout.duration.hours': string;
83
+ 'pisell2.venue.checkout.duration.minutes': string;
81
84
  'pisell2.venue.grid.loading': string;
82
85
  'pisell2.venue.legend.product.fallback': string;
83
86
  'pisell2.venue.addons.empty': string;
@@ -199,6 +202,9 @@ declare const _default: {
199
202
  'pisell2.venue.checkout.hotline': string;
200
203
  'pisell2.venue.checkout.estimated.total': string;
201
204
  'pisell2.venue.checkout.change': string;
205
+ 'pisell2.venue.checkout.duration.hours_minutes': string;
206
+ 'pisell2.venue.checkout.duration.hours': string;
207
+ 'pisell2.venue.checkout.duration.minutes': string;
202
208
  'pisell2.venue.grid.loading': string;
203
209
  'pisell2.venue.legend.product.fallback': string;
204
210
  'pisell2.venue.addons.empty': string;
@@ -320,6 +326,9 @@ declare const _default: {
320
326
  'pisell2.venue.checkout.hotline': string;
321
327
  'pisell2.venue.checkout.estimated.total': string;
322
328
  'pisell2.venue.checkout.change': string;
329
+ 'pisell2.venue.checkout.duration.hours_minutes': string;
330
+ 'pisell2.venue.checkout.duration.hours': string;
331
+ 'pisell2.venue.checkout.duration.minutes': string;
323
332
  'pisell2.venue.grid.loading': string;
324
333
  'pisell2.venue.legend.product.fallback': string;
325
334
  'pisell2.venue.addons.empty': string;
@@ -441,6 +450,9 @@ declare const _default: {
441
450
  'pisell2.venue.checkout.hotline': string;
442
451
  'pisell2.venue.checkout.estimated.total': string;
443
452
  'pisell2.venue.checkout.change': string;
453
+ 'pisell2.venue.checkout.duration.hours_minutes': string;
454
+ 'pisell2.venue.checkout.duration.hours': string;
455
+ 'pisell2.venue.checkout.duration.minutes': string;
444
456
  'pisell2.venue.grid.loading': string;
445
457
  'pisell2.venue.legend.product.fallback': string;
446
458
  'pisell2.venue.addons.empty': string;
@@ -562,6 +574,9 @@ declare const _default: {
562
574
  'pisell2.venue.checkout.hotline': string;
563
575
  'pisell2.venue.checkout.estimated.total': string;
564
576
  'pisell2.venue.checkout.change': string;
577
+ 'pisell2.venue.checkout.duration.hours_minutes': string;
578
+ 'pisell2.venue.checkout.duration.hours': string;
579
+ 'pisell2.venue.checkout.duration.minutes': string;
565
580
  'pisell2.venue.grid.loading': string;
566
581
  'pisell2.venue.legend.product.fallback': string;
567
582
  'pisell2.venue.addons.empty': string;
@@ -98,6 +98,9 @@ var locales_default = {
98
98
  "pisell2.venue.checkout.hotline": "Support hotline",
99
99
  "pisell2.venue.checkout.estimated.total": "Estimated total",
100
100
  "pisell2.venue.checkout.change": "Change",
101
+ "pisell2.venue.checkout.duration.hours_minutes": "{hours}h {minutes}min",
102
+ "pisell2.venue.checkout.duration.hours": "{hours}h",
103
+ "pisell2.venue.checkout.duration.minutes": "{minutes}min",
101
104
  "pisell2.venue.grid.loading": "Loading...",
102
105
  "pisell2.venue.legend.product.fallback": "Product",
103
106
  "pisell2.venue.addons.empty": "No add-ons available.",
@@ -219,6 +222,9 @@ var locales_default = {
219
222
  "pisell2.venue.checkout.hotline": "客服热线",
220
223
  "pisell2.venue.checkout.estimated.total": "预估总价",
221
224
  "pisell2.venue.checkout.change": "修改",
225
+ "pisell2.venue.checkout.duration.hours_minutes": "{hours}小时{minutes}分钟",
226
+ "pisell2.venue.checkout.duration.hours": "{hours}小时",
227
+ "pisell2.venue.checkout.duration.minutes": "{minutes}分钟",
222
228
  "pisell2.venue.grid.loading": "加载中...",
223
229
  "pisell2.venue.legend.product.fallback": "商品",
224
230
  "pisell2.venue.addons.empty": "暂无可选附加商品",
@@ -340,6 +346,9 @@ var locales_default = {
340
346
  "pisell2.venue.checkout.hotline": "客服熱線",
341
347
  "pisell2.venue.checkout.estimated.total": "預估總價",
342
348
  "pisell2.venue.checkout.change": "修改",
349
+ "pisell2.venue.checkout.duration.hours_minutes": "{hours}小時{minutes}分鐘",
350
+ "pisell2.venue.checkout.duration.hours": "{hours}小時",
351
+ "pisell2.venue.checkout.duration.minutes": "{minutes}分鐘",
343
352
  "pisell2.venue.grid.loading": "加載中...",
344
353
  "pisell2.venue.legend.product.fallback": "商品",
345
354
  "pisell2.venue.addons.empty": "暫無可選附加商品",
@@ -461,6 +470,9 @@ var locales_default = {
461
470
  "pisell2.venue.checkout.hotline": "サポート窓口",
462
471
  "pisell2.venue.checkout.estimated.total": "見積合計",
463
472
  "pisell2.venue.checkout.change": "変更",
473
+ "pisell2.venue.checkout.duration.hours_minutes": "{hours}時間{minutes}分",
474
+ "pisell2.venue.checkout.duration.hours": "{hours}時間",
475
+ "pisell2.venue.checkout.duration.minutes": "{minutes}分",
464
476
  "pisell2.venue.grid.loading": "読み込み中...",
465
477
  "pisell2.venue.legend.product.fallback": "商品",
466
478
  "pisell2.venue.addons.empty": "追加できる商品がありません。",
@@ -582,6 +594,9 @@ var locales_default = {
582
594
  "pisell2.venue.checkout.hotline": "Central de suporte",
583
595
  "pisell2.venue.checkout.estimated.total": "Total estimado",
584
596
  "pisell2.venue.checkout.change": "Alterar",
597
+ "pisell2.venue.checkout.duration.hours_minutes": "{hours} h {minutes} min",
598
+ "pisell2.venue.checkout.duration.hours": "{hours} h",
599
+ "pisell2.venue.checkout.duration.minutes": "{minutes} min",
585
600
  "pisell2.venue.grid.loading": "Carregando...",
586
601
  "pisell2.venue.legend.product.fallback": "Produto",
587
602
  "pisell2.venue.addons.empty": "Nenhum adicional disponível.",
@@ -1,2 +1,3 @@
1
+ /// <reference types="react" />
1
2
  declare const PhoneField: ({ value, onChange }: any) => JSX.Element;
2
3
  export default PhoneField;