@pisell/private-materials 6.12.298 → 6.12.299

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 (73) 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/preview.js +1 -1
  6. package/build/lowcode/render/default/view.css +1 -1
  7. package/build/lowcode/render/default/view.js +2 -2
  8. package/build/lowcode/view.css +1 -1
  9. package/build/lowcode/view.js +2 -2
  10. package/es/components/HDLKiosk/index.less +1 -0
  11. package/es/components/HDLKiosk/slices/customization/NextBowlModal/NextBowlModal.js +6 -6
  12. package/es/components/HDLKiosk/slices/customization/NextBowlModal/next-bowl.css +0 -52
  13. package/es/components/HDLKiosk/slices/customization/PrimaryProductSelection/index.js +11 -21
  14. package/es/components/HDLKiosk/slices/customization/PrimaryProductSelection/index.less +11 -27
  15. package/es/components/HDLKiosk/slices/customization/Screen/index.js +16 -11
  16. package/es/components/HDLKiosk/slices/customization/Screen/index.less +49 -0
  17. package/es/components/HDLKiosk/slices/customization/TooLightDialog/index.js +2 -1
  18. package/es/components/HDLKiosk/slices/customization/TooLightDialog/index.less +0 -22
  19. package/es/components/HDLKiosk/slices/customization/dialogButtons.less +73 -0
  20. package/es/components/HDLKiosk/ui/entry/Screen/index.js +21 -1
  21. package/es/components/HDLKiosk/ui/entry/Screen/index.less +47 -1
  22. package/es/components/HDLKiosk/ui/entry/Screen/useEntryScreenLayout.js +3 -1
  23. package/es/components/bigSale/components/BookingFloatingPanel/useBookingPanelController.js +0 -1
  24. package/es/components/bigSale/components/ProductList/index.js +0 -1
  25. package/es/components/bigSale/components/TimeBar/index.js +0 -1
  26. package/es/components/bigSale/dialog.js +0 -1
  27. package/es/components/bigSale/hooks/useBigSaleContext.js +0 -1
  28. package/es/components/bigSale/hooks/useSelectFloorMapResourceForBigSale.js +0 -1
  29. package/es/components/bigSale/index.js +0 -1
  30. package/es/components/bigSale/templates/HDLKiosk/index.js +9 -16
  31. package/es/components/bigSale/templates/Kiosk/index.js +0 -1
  32. package/es/components/sharedSecondaryBigSale/SharedSecondaryBigSaleReceiver.js +0 -1
  33. package/es/index.js +0 -2
  34. package/es/plus/multiCurrencySettlement/index.js +1 -1
  35. package/es/plus/pisellReservation/data/bookingToReservationTables.js +1 -1
  36. package/es/plus/pisellReservation/floorMap/floorPlanApi.js +1 -1
  37. package/es/plus/pisellReservation/floorMap/reservationMock.js +1 -1
  38. package/es/plus/saasDevice/devicePasscodes/model.js +4 -4
  39. package/es/plus/saleDetail/Base.js +0 -1
  40. package/es/plus/saleDetail/components/Client/hooks/useClientSelectorProps.js +0 -1
  41. package/es/plus/saleDetail/components/DetailActions/PrintAction.js +0 -1
  42. package/es/plus/saleDetail/components/DetailActions/index.js +0 -1
  43. package/es/plus/saleDetail/components/SummaryFinancialSections/index.js +0 -1
  44. package/es/plus/saleDetail/index.js +0 -1
  45. package/es/plus/saleDetail/tmpl/B/components/Dish/index.js +0 -1
  46. package/es/plus/saleDetail/tmpl/B/index.js +0 -1
  47. package/es/plus/salesSdk/utils/addProductWithFlowDebounced.js +1 -1
  48. package/es/plus/salesSdk/utils/bookingDate.js +1 -1
  49. package/es/plus/salesSdk/utils/enrichCartLineHolderDisplay.js +1 -1
  50. package/es/plus/walletPassGallery/components/timelineSection/index.js +4 -4
  51. package/es/private-materials/lowcode/authmodal/meta.d.ts +1 -0
  52. package/es/pro/Login2.0/AuthModal.d.ts +1 -1
  53. package/es/pro/Login2.0/index.d.ts +2 -2
  54. package/es/pro/Login2.0/shared/types.d.ts +1 -1
  55. package/lib/components/HDLKiosk/index.less +1 -0
  56. package/lib/components/HDLKiosk/slices/customization/NextBowlModal/NextBowlModal.js +6 -6
  57. package/lib/components/HDLKiosk/slices/customization/NextBowlModal/next-bowl.css +0 -52
  58. package/lib/components/HDLKiosk/slices/customization/PrimaryProductSelection/index.js +11 -21
  59. package/lib/components/HDLKiosk/slices/customization/PrimaryProductSelection/index.less +11 -27
  60. package/lib/components/HDLKiosk/slices/customization/Screen/index.js +16 -11
  61. package/lib/components/HDLKiosk/slices/customization/Screen/index.less +49 -0
  62. package/lib/components/HDLKiosk/slices/customization/TooLightDialog/index.js +2 -1
  63. package/lib/components/HDLKiosk/slices/customization/TooLightDialog/index.less +0 -22
  64. package/lib/components/HDLKiosk/slices/customization/dialogButtons.less +73 -0
  65. package/lib/components/HDLKiosk/ui/entry/Screen/index.js +21 -1
  66. package/lib/components/HDLKiosk/ui/entry/Screen/index.less +47 -1
  67. package/lib/components/HDLKiosk/ui/entry/Screen/useEntryScreenLayout.js +3 -1
  68. package/lib/components/bigSale/templates/HDLKiosk/index.js +9 -16
  69. package/package.json +4 -4
  70. package/es/components/bigSale/templates/HDLKiosk/hooks/useHDLKioskEntryPreparationToast.js +0 -20
  71. package/es/plus/pisellReservation/index.js +0 -17
  72. package/es/plus/salesSdk/index.js +0 -54
  73. package/lib/components/bigSale/templates/HDLKiosk/hooks/useHDLKioskEntryPreparationToast.js +0 -21
@@ -92,6 +92,7 @@
92
92
  @import './slices/customization/Screen/index.less';
93
93
  @import './slices/customization/PrimaryProductSelection/index.less';
94
94
  @import './slices/customization/TooLightDialog/index.less';
95
+ @import './slices/customization/dialogButtons.less';
95
96
  @import './slices/fulfillment/Screen/index.less';
96
97
  @import './slices/identity/Screen/index.less';
97
98
  @import './components/common/BlockingNotice/index.less';
@@ -139,11 +139,11 @@ function NextBowlModal({ previousGrams, minimumGrams, exchanging = false, showMe
139
139
  "aria-label": t("progress")
140
140
  }, /* @__PURE__ */ React.createElement("li", { className: stage === "remove" ? "is-current" : "is-complete" }, /* @__PURE__ */ React.createElement("span", null, "1"), t("step-remove")), /* @__PURE__ */ React.createElement("li", { className: stage === "place" ? "is-current" : "" }, /* @__PURE__ */ React.createElement("span", null, "2"), t("step-place"))), /* @__PURE__ */ React.createElement("div", { className: `nb-live-weight ${!ready ? "is-pending" : ""}` }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("span", null, t("live-weight")), /* @__PURE__ */ React.createElement("strong", null, weightLabel, " ", /* @__PURE__ */ React.createElement("small", null, "kg"))), /* @__PURE__ */ React.createElement("p", { role: "status" }, /* @__PURE__ */ React.createElement("i", null), status))), stage === "ask" ? /* @__PURE__ */ React.createElement("div", { className: "nb-modal-actions" }, /* @__PURE__ */ React.createElement("button", {
141
141
  type: "button",
142
- className: "nb-button nb-button--secondary",
142
+ className: "hdl-bowl-dialog-button",
143
143
  onClick: () => dispatch({ type: "FINISH" })
144
144
  }, t("finish")), /* @__PURE__ */ React.createElement("button", {
145
145
  type: "button",
146
- className: "nb-button nb-button--primary nb-button--more",
146
+ className: "hdl-bowl-dialog-button hdl-bowl-dialog-button--primary",
147
147
  onClick: () => {
148
148
  if (!delivered.current) {
149
149
  delivered.current = true;
@@ -157,11 +157,11 @@ function NextBowlModal({ previousGrams, minimumGrams, exchanging = false, showMe
157
157
  focusable: "false"
158
158
  }, /* @__PURE__ */ React.createElement("path", { d: "M10 4v12M4 10h12" })))) : stage === "duplicate" ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "nb-modal-actions" }, /* @__PURE__ */ React.createElement("button", {
159
159
  type: "button",
160
- className: "nb-button nb-button--secondary",
160
+ className: "hdl-bowl-dialog-button",
161
161
  onClick: () => dispatch({ type: "REPLACE" })
162
162
  }, t("replace")), /* @__PURE__ */ React.createElement("button", {
163
163
  type: "button",
164
- className: "nb-button nb-button--primary",
164
+ className: "hdl-bowl-dialog-button hdl-bowl-dialog-button--primary",
165
165
  disabled: !canConfirm,
166
166
  onClick: () => dispatch({
167
167
  type: "CONFIRM_NEW",
@@ -172,11 +172,11 @@ function NextBowlModal({ previousGrams, minimumGrams, exchanging = false, showMe
172
172
  role: "status"
173
173
  }, status), /* @__PURE__ */ React.createElement("button", {
174
174
  type: "button",
175
- className: "nb-button nb-button--secondary nb-continue-button",
175
+ className: "hdl-bowl-dialog-button nb-continue-button",
176
176
  onClick: () => dispatch({ type: "FINISH" })
177
177
  }, t("stop"), " ", /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true" }, "→"))) : /* @__PURE__ */ React.createElement("div", { className: "nb-wait-actions" }, /* @__PURE__ */ React.createElement("p", null, t("auto")), /* @__PURE__ */ React.createElement("button", {
178
178
  type: "button",
179
- className: "nb-button nb-button--secondary nb-continue-button",
179
+ className: "hdl-bowl-dialog-button nb-continue-button",
180
180
  onClick: () => dispatch({ type: "FINISH" })
181
181
  }, t("stop"), " ", /* @__PURE__ */ React.createElement("span", { "aria-hidden": "true" }, "→"))))));
182
182
  }
@@ -156,33 +156,6 @@
156
156
  gap: 16px;
157
157
  margin-top: 16px;
158
158
  }
159
- .nb-button {
160
- min-height: clamp(64px, calc(var(--nb-vh, 1vh) * 5.4), 80px);
161
- padding: 14px 20px;
162
- border: 1.5px solid transparent;
163
- border-radius: 16px;
164
- font-size: clamp(18px, calc(var(--nb-vw, 1vw) * 2), 22px);
165
- font-weight: 750;
166
- cursor: pointer;
167
- transition: background 160ms, transform 160ms;
168
- line-height: 1.4;
169
- }
170
- .nb-button:active {
171
- transform: translateY(2px);
172
- }
173
- .nb-button--primary {
174
- color: #fff;
175
- background: var(--nb-red, #b20d12);
176
- }
177
- .nb-button--primary:hover {
178
- background: #970b10;
179
- }
180
- .nb-button--more {
181
- display: inline-flex;
182
- align-items: center;
183
- justify-content: center;
184
- gap: 10px;
185
- }
186
159
  .nb-button__plus {
187
160
  display: block;
188
161
  flex: none;
@@ -193,21 +166,6 @@
193
166
  stroke-width: 1.8;
194
167
  stroke-linecap: round;
195
168
  }
196
- .nb-button--secondary {
197
- color: var(--nb-red, #b20d12);
198
- border-color: #d6a2a5;
199
- background: #fff6f6;
200
- }
201
- .nb-button--secondary:hover {
202
- background: #fce8e9;
203
- }
204
- .nb-button:disabled {
205
- background: #ebe6e1;
206
- color: #847b75;
207
- border-color: transparent;
208
- cursor: not-allowed;
209
- transform: none;
210
- }
211
169
  .nb-dialog :is(button, input, select, summary, a):focus-visible {
212
170
  outline: 3px solid #2563eb;
213
171
  outline-offset: 4px;
@@ -317,11 +275,7 @@
317
275
  text-align: center;
318
276
  }
319
277
  .nb-continue-button {
320
- display: flex;
321
278
  width: 100%;
322
- align-items: center;
323
- justify-content: center;
324
- gap: 14px;
325
279
  margin-top: 12px;
326
280
  }
327
281
  .nb-continue-button > span {
@@ -480,12 +434,6 @@
480
434
  gap: 10px;
481
435
  margin-top: 12px;
482
436
  }
483
- .nb-dialog[data-narrow] .nb-button {
484
- font-size: 17px;
485
- min-height: 64px;
486
- padding: 12px 10px;
487
- border-radius: 12px;
488
- }
489
437
  .nb-dialog[data-narrow] .nb-steps {
490
438
  gap: 16px;
491
439
  font-size: 15px;
@@ -64,26 +64,7 @@ function PrimaryProductSelection({ products, configuredCount, bowlNumber, curren
64
64
  "data-narrow": layout.narrow || void 0,
65
65
  "data-compact": layout.viewport.height <= 740 || void 0,
66
66
  "data-short": layout.viewport.height <= 520 && !layout.narrow || void 0
67
- }, /* @__PURE__ */ React.createElement("div", { className: "hdl-ps-topbar" }, /* @__PURE__ */ React.createElement("span", { className: "hdl-ps-wordmark" }, "MALA · TANG"), /* @__PURE__ */ React.createElement("button", {
68
- type: "button",
69
- className: "hdl-ps-close",
70
- "aria-label": locales.getText("pisell2.hdl-kiosk.primary-select-close"),
71
- disabled: busy,
72
- onClick: () => {
73
- if (delivered.current) return;
74
- delivered.current = true;
75
- onCancel();
76
- }
77
- }, /* @__PURE__ */ React.createElement("svg", {
78
- viewBox: "0 0 24 24",
79
- fill: "none",
80
- "aria-hidden": "true"
81
- }, /* @__PURE__ */ React.createElement("path", {
82
- d: "m6 6 12 12M18 6 6 18",
83
- stroke: "currentColor",
84
- strokeWidth: "1.8",
85
- strokeLinecap: "round"
86
- })))), /* @__PURE__ */ React.createElement("header", { className: "hdl-ps-heading" }, /* @__PURE__ */ React.createElement("h2", {
67
+ }, /* @__PURE__ */ React.createElement("div", { className: "hdl-ps-topbar" }, /* @__PURE__ */ React.createElement("span", { className: "hdl-ps-wordmark" }, "MALA · TANG")), /* @__PURE__ */ React.createElement("header", { className: "hdl-ps-heading" }, /* @__PURE__ */ React.createElement("h2", {
87
68
  ref: heading,
88
69
  tabIndex: -1
89
70
  }, title), /* @__PURE__ */ React.createElement("p", { className: "hdl-ps-bowl-number" }, locales.getText("pisell2.hdl-kiosk.bowl-label").replace("{count}", String(bowlNumber)))), /* @__PURE__ */ React.createElement("div", { className: "hdl-ps-products" }, items.map((item) => {
@@ -110,7 +91,16 @@ function PrimaryProductSelection({ products, configuredCount, bowlNumber, curren
110
91
  strokeLinecap: "round",
111
92
  strokeLinejoin: "round"
112
93
  })))), item.disabled ? /* @__PURE__ */ React.createElement("small", { className: "hdl-ps-unavailable" }, item.reason) : null));
113
- })), !items.length ? /* @__PURE__ */ React.createElement("p", { role: "status" }, locales.getText("pisell2.hdl-kiosk.primary-unavailable")) : null)));
94
+ })), /* @__PURE__ */ React.createElement("button", {
95
+ type: "button",
96
+ className: "hdl-bowl-dialog-button hdl-ps-skip",
97
+ disabled: busy,
98
+ onClick: () => {
99
+ if (busy || delivered.current) return;
100
+ delivered.current = true;
101
+ onCancel();
102
+ }
103
+ }, locales.getText("pisell2.hdl-kiosk.customization-skip")), !items.length ? /* @__PURE__ */ React.createElement("p", { role: "status" }, locales.getText("pisell2.hdl-kiosk.primary-unavailable")) : null)));
114
104
  }
115
105
  //#endregion
116
106
  export { PrimaryProductSelection };
@@ -16,7 +16,7 @@
16
16
  background: transparent;
17
17
  text-align: left;
18
18
  }
19
- .hdl-ps-dialog button:disabled {
19
+ .hdl-ps-dialog .hdl-ps-product:disabled {
20
20
  opacity: 0.55;
21
21
  cursor: not-allowed;
22
22
  }
@@ -86,27 +86,6 @@
86
86
  font-weight: 850;
87
87
  letter-spacing: 0.18em;
88
88
  }
89
- .hdl-ps-close {
90
- display: grid;
91
- place-items: center;
92
- width: 64px;
93
- height: 64px;
94
- padding: 16px;
95
- border: 1px solid #e8e4df;
96
- border-radius: 16px;
97
- background: #faf9f7;
98
- color: var(--hdl-ps-muted);
99
- transition: background 160ms, color 160ms;
100
- }
101
- .hdl-ps-close svg {
102
- display: block;
103
- width: 26px;
104
- height: 26px;
105
- }
106
- .hdl-ps-close:active {
107
- background: #fce8e9;
108
- color: var(--hdl-ps-red);
109
- }
110
89
  .hdl-ps-heading {
111
90
  flex: none;
112
91
  text-align: center;
@@ -242,10 +221,6 @@
242
221
  background: #fffaf8;
243
222
  box-shadow: 0 10px 28px #b20d1210;
244
223
  }
245
- .hdl-ps-close:hover {
246
- background: #fce8e9;
247
- color: var(--hdl-ps-red);
248
- }
249
224
  }
250
225
  .hdl-ps-dialog[data-narrow] {
251
226
  & {
@@ -337,7 +312,7 @@
337
312
  display: grid;
338
313
  min-height: 64px;
339
314
  place-content: center;
340
- margin: 0 68px 12px;
315
+ margin: 0 0 12px;
341
316
  }
342
317
  .hdl-ps-heading .hdl-ps-bowl-number {
343
318
  margin-top: 6px;
@@ -404,3 +379,12 @@
404
379
  font-size: 18px;
405
380
  line-height: 1.5;
406
381
  }
382
+
383
+ .hdl-ps-dialog .hdl-ps-skip {
384
+ flex: none;
385
+ width: 100%;
386
+ margin-top: 24px;
387
+ }
388
+ .hdl-ps-dialog[data-short] .hdl-ps-skip {
389
+ margin-top: 12px;
390
+ }
@@ -251,6 +251,7 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
251
251
  ]);
252
252
  const skipCustomization = useCallback(() => {
253
253
  if (busy || syncing || uncertain) return;
254
+ if (bowls && bowls.session.getSnapshot().draft.id !== (bowlState === null || bowlState === void 0 ? void 0 : bowlState.draft.id)) return;
254
255
  if (editing) {
255
256
  bowls === null || bowls === void 0 || bowls.returnFromEdit();
256
257
  return;
@@ -266,6 +267,7 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
266
267
  send,
267
268
  syncing,
268
269
  bowls,
270
+ bowlState === null || bowlState === void 0 ? void 0 : bowlState.draft.id,
269
271
  editing,
270
272
  uncertain
271
273
  ]);
@@ -290,9 +292,7 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
290
292
  closeTooLight,
291
293
  skipCustomization
292
294
  ]);
293
- const hasBowlContent = standardProduct || measurement.gross.greaterThan(0);
294
- const advance = hasBowlContent || uncertain || (bowlState === null || bowlState === void 0 ? void 0 : bowlState.phase) === "saved" ? submit : skipCustomization;
295
- const advanceLabel = uncertain ? locales.getText("pisell2.hdl-kiosk.bowl-retry") : locales.getText(hasBowlContent || (bowlState === null || bowlState === void 0 ? void 0 : bowlState.phase) === "saved" ? "pisell2.hdl-kiosk.customization-next" : "pisell2.hdl-kiosk.skip");
295
+ const advanceLabel = uncertain ? locales.getText("pisell2.hdl-kiosk.bowl-retry") : locales.getText("pisell2.hdl-kiosk.customization-next");
296
296
  const { openCart } = useHDLKioskBottomBarController();
297
297
  useHDLKioskBottomBar(useMemo(() => {
298
298
  var _orderBar$cartItemCou;
@@ -323,15 +323,20 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
323
323
  disabled: busy || syncing || uncertain || orderBar.cartLineCount === 0,
324
324
  onOpenCart: openCart
325
325
  }),
326
- trailing: /* @__PURE__ */ React.createElement("button", {
326
+ trailing: /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("button", {
327
+ type: "button",
328
+ className: "hdl-customization-skip",
329
+ disabled: busy || syncing || uncertain,
330
+ onClick: skipCustomization
331
+ }, locales.getText("pisell2.hdl-kiosk.customization-skip")), /* @__PURE__ */ React.createElement("button", {
327
332
  type: "button",
328
333
  className: "hdl-floating-bar__button hdl-customization-next",
329
- disabled: busy || syncing || hasBowlContent && (loading || !productFacts),
330
- onClick: advance
334
+ disabled: busy || syncing || loading || !productFacts,
335
+ onClick: submit
331
336
  }, /* @__PURE__ */ React.createElement("span", null, busy || syncing ? locales.getText("pisell2.hdl-kiosk.working") : advanceLabel), busy || syncing ? /* @__PURE__ */ React.createElement("span", {
332
337
  className: "hdl-loading-spinner",
333
338
  "aria-hidden": "true"
334
- }) : /* @__PURE__ */ React.createElement(NextIcon, null)),
339
+ }) : /* @__PURE__ */ React.createElement(NextIcon, null))),
335
340
  cartOpenBar: (controller) => ({
336
341
  ariaLabel: locales.getText("pisell2.hdl-kiosk.customization-actions-label"),
337
342
  leading: /* @__PURE__ */ React.createElement("button", {
@@ -343,10 +348,10 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
343
348
  trailing: /* @__PURE__ */ React.createElement("button", {
344
349
  type: "button",
345
350
  className: "hdl-floating-bar__button hdl-customization-next",
346
- disabled: busy || syncing || hasBowlContent && (loading || !productFacts),
351
+ disabled: busy || syncing || loading || !productFacts,
347
352
  onClick: () => {
348
353
  controller.onClose();
349
- advance();
354
+ submit();
350
355
  }
351
356
  }, /* @__PURE__ */ React.createElement("span", null, busy || syncing ? locales.getText("pisell2.hdl-kiosk.working") : advanceLabel), busy || syncing ? /* @__PURE__ */ React.createElement("span", {
352
357
  className: "hdl-loading-spinner",
@@ -365,9 +370,9 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
365
370
  canGoBack,
366
371
  syncing,
367
372
  amountText,
368
- advance,
373
+ submit,
374
+ skipCustomization,
369
375
  advanceLabel,
370
- hasBowlContent,
371
376
  productFacts,
372
377
  loading,
373
378
  openCart,
@@ -293,6 +293,55 @@
293
293
  margin-top: 26px;
294
294
  }
295
295
 
296
+ .hdl-customization-skip {
297
+ position: absolute;
298
+ right: 26px;
299
+ bottom: calc(100% + 16px);
300
+ max-width: calc(100% - 52px);
301
+ min-height: 58px;
302
+ border: 1px solid rgba(255, 255, 255, 0.22);
303
+ border-radius: 999px;
304
+ padding: 10px 24px;
305
+ background: rgba(17, 24, 39, 0.86);
306
+ color: #fff;
307
+ font-size: 21px;
308
+ font-weight: 900;
309
+ line-height: 1.4;
310
+ overflow-wrap: anywhere;
311
+ cursor: pointer;
312
+ transition: background 160ms, transform 160ms;
313
+
314
+ &:focus-visible {
315
+ outline: 3px solid #2563eb;
316
+ outline-offset: 4px;
317
+ }
318
+
319
+ &:not(:disabled):hover {
320
+ background: rgba(178, 13, 18, 0.92);
321
+ transform: translateY(-2px);
322
+ }
323
+
324
+ &:not(:disabled):active {
325
+ transform: scale(0.98);
326
+ }
327
+
328
+ &:disabled {
329
+ border-color: transparent;
330
+ background: #ebe6e1;
331
+ color: #847b75;
332
+ cursor: not-allowed;
333
+ }
334
+
335
+ @media (prefers-reduced-motion: reduce) {
336
+ transition: none;
337
+
338
+ &:not(:disabled):hover,
339
+ &:not(:disabled):active {
340
+ transform: none;
341
+ }
342
+ }
343
+ }
344
+
296
345
  .hdl-customization-next {
297
346
  border: 0;
298
347
  background: linear-gradient(180deg, #20b8aa, #119184);
@@ -18,11 +18,12 @@ function TooLightDialog({ busy, editing, hasSavedBowls, onSkip, onRetry }) {
18
18
  height: 887
19
19
  }), /* @__PURE__ */ React.createElement("h1", { className: "hdl-too-light-dialog__title" }, title), /* @__PURE__ */ React.createElement("p", { className: "hdl-too-light-dialog__description" }, description), /* @__PURE__ */ React.createElement("div", { className: "hdl-too-light-dialog__actions" }, /* @__PURE__ */ React.createElement("button", {
20
20
  type: "button",
21
+ className: "hdl-bowl-dialog-button",
21
22
  disabled: busy,
22
23
  onClick: onSkip
23
24
  }, skipLabel), /* @__PURE__ */ React.createElement("button", {
24
25
  type: "button",
25
- className: "is-primary",
26
+ className: "hdl-bowl-dialog-button hdl-bowl-dialog-button--primary",
26
27
  disabled: busy,
27
28
  onClick: onRetry,
28
29
  autoFocus: true
@@ -35,26 +35,4 @@
35
35
  gap: 16px;
36
36
  margin-top: 30px;
37
37
  }
38
-
39
- .hdl-too-light-dialog__actions button {
40
- min-height: 94px;
41
- border: 3px solid #e85c0c;
42
- border-radius: 20px;
43
- padding: 18px 28px;
44
- background: transparent;
45
- color: inherit;
46
- font-size: 32px;
47
- font-weight: 800;
48
- line-height: 1.25;
49
- cursor: pointer;
50
- }
51
-
52
- .hdl-too-light-dialog__actions button.is-primary {
53
- background: linear-gradient(135deg, #ef6b0c, #dc5108);
54
- color: #fff;
55
- }
56
-
57
- .hdl-too-light-dialog__actions button:disabled {
58
- opacity: 0.55;
59
- }
60
38
  }
@@ -0,0 +1,73 @@
1
+ // Shared by product selection, weight warning and every next-bowl stage.
2
+ .pisell-lowcode-modal-root .pisell-pc-modal.hdl-kiosk-modal .hdl-kiosk-dialog {
3
+ .hdl-bowl-dialog-button {
4
+ box-sizing: border-box;
5
+ display: inline-flex;
6
+ min-width: 0;
7
+ max-width: 100%;
8
+ min-height: 64px;
9
+ align-items: center;
10
+ justify-content: center;
11
+ gap: 10px;
12
+ border: 1.5px solid #d6a2a5;
13
+ border-radius: 16px;
14
+ padding: 14px 20px;
15
+ background: #fff6f6;
16
+ color: #b20d12;
17
+ font-family: inherit;
18
+ font-size: 22px;
19
+ font-weight: 750;
20
+ line-height: 1.4;
21
+ text-align: center;
22
+ white-space: normal;
23
+ cursor: pointer;
24
+ touch-action: manipulation;
25
+ -webkit-tap-highlight-color: transparent;
26
+ transition: background 160ms, transform 160ms;
27
+
28
+ &:not(:disabled):hover {
29
+ background: #fce8e9;
30
+ }
31
+
32
+ &:not(:disabled):active {
33
+ transform: translateY(2px);
34
+ }
35
+
36
+ &--primary {
37
+ border-color: transparent;
38
+ background: #b20d12;
39
+ color: #fff;
40
+
41
+ &:not(:disabled):hover {
42
+ background: #970b10;
43
+ }
44
+ }
45
+
46
+ &:disabled {
47
+ border-color: transparent;
48
+ background: #ebe6e1;
49
+ color: #847b75;
50
+ opacity: 1;
51
+ cursor: not-allowed;
52
+ transform: none;
53
+ }
54
+
55
+ &:focus-visible {
56
+ outline: 3px solid #2563eb;
57
+ outline-offset: 4px;
58
+ }
59
+ }
60
+
61
+ @media (max-width: 600px) {
62
+ .hdl-bowl-dialog-button {
63
+ padding: 12px 16px;
64
+ font-size: 18px;
65
+ }
66
+ }
67
+
68
+ @media (prefers-reduced-motion: reduce) {
69
+ .hdl-bowl-dialog-button {
70
+ transition: none;
71
+ }
72
+ }
73
+ }
@@ -63,12 +63,14 @@ function HandTapIcon() {
63
63
  }), /* @__PURE__ */ React.createElement("g", { className: "hdl-entry-tap-hand" }, /* @__PURE__ */ React.createElement("path", { d: "M196,120a27.9,27.9,0,0,0-13.36,3.39A28,28,0,0,0,144,106.7V76a28,28,0,0,0-56,0v80l-3.82-6.13a28,28,0,0,0-48.41,28.17l29.32,50A8,8,0,1,0,78.89,220L49.6,170a12,12,0,1,1,20.78-12l.14.23,18.68,30A8,8,0,0,0,104,184V76a12,12,0,0,1,24,0v68a8,8,0,1,0,16,0V132a12,12,0,0,1,24,0v20a8,8,0,0,0,16,0v-4a12,12,0,0,1,24,0v36c0,21.61-7.1,36.3-7.16,36.42a8,8,0,0,0,3.58,10.73A7.9,7.9,0,0,0,208,232a8,8,0,0,0,7.16-4.42c.37-.73,8.85-18,8.85-43.58V148A28,28,0,0,0,196,120Z" })));
64
64
  }
65
65
  function EntryScreen({ locale, model, theme, onThemeChange, isActive = true, onLocaleChange, onTechnicalSupportClick, onSelect, busy = false, canRetryPreparation = false }) {
66
+ var _capabilityErrorCodes;
66
67
  const layout = useEntryScreenLayout();
67
68
  const buttonRef = useRef(null);
68
69
  const indicatorRef = useRef(null);
69
70
  const feedbackFrame = useRef();
70
71
  const lastActivation = useRef(-Infinity);
71
72
  const [documentHidden, setDocumentHidden] = useState(() => typeof document !== "undefined" && document.hidden);
73
+ const [capabilityErrorsVisible, setCapabilityErrorsVisible] = useState(false);
72
74
  const entryLocale = locale || "en";
73
75
  const quickOption = model.options.find((option) => option.entry === "quick" && option.interactive);
74
76
  const canStart = Boolean(quickOption && (quickOption.available || canRetryPreparation)) && !busy && isActive;
@@ -117,6 +119,12 @@ function EntryScreen({ locale, model, theme, onThemeChange, isActive = true, onL
117
119
  });
118
120
  onSelect(quickOption.entry);
119
121
  };
122
+ const capabilityErrorCodes = model.capabilityErrorCodes;
123
+ const capabilityErrorSignature = (_capabilityErrorCodes = capabilityErrorCodes === null || capabilityErrorCodes === void 0 ? void 0 : capabilityErrorCodes.join("|")) !== null && _capabilityErrorCodes !== void 0 ? _capabilityErrorCodes : "";
124
+ const pendingOptions = model.options.filter((option) => option.statusTone === "pending");
125
+ useEffect(() => {
126
+ setCapabilityErrorsVisible(false);
127
+ }, [capabilityErrorSignature]);
120
128
  return /* @__PURE__ */ React.createElement("section", {
121
129
  ref: layout.ref,
122
130
  className: "hdl-entry-screen",
@@ -175,7 +183,19 @@ function EntryScreen({ locale, model, theme, onThemeChange, isActive = true, onL
175
183
  }, /* @__PURE__ */ React.createElement("span", {
176
184
  className: "hdl-entry-tap-indicator",
177
185
  ref: indicatorRef
178
- }, /* @__PURE__ */ React.createElement(HandTapIcon, null)), /* @__PURE__ */ React.createElement("span", { className: "hdl-entry-tap-copy" }, locales.getText("pisell2.hdl-kiosk.tap-to-start"))) : null));
186
+ }, /* @__PURE__ */ React.createElement(HandTapIcon, null)), /* @__PURE__ */ React.createElement("span", { className: "hdl-entry-tap-copy" }, locales.getText("pisell2.hdl-kiosk.tap-to-start"))) : null), pendingOptions.length || model.assistanceMessage ? /* @__PURE__ */ React.createElement("div", { className: "hdl-entry-screen__notices" }, pendingOptions.map((option) => /* @__PURE__ */ React.createElement("p", {
187
+ key: option.entry,
188
+ className: "hdl-entry-screen__device-status",
189
+ role: "status"
190
+ }, option.statusText)), model.assistanceMessage ? (capabilityErrorCodes === null || capabilityErrorCodes === void 0 ? void 0 : capabilityErrorCodes.length) ? /* @__PURE__ */ React.createElement("button", {
191
+ type: "button",
192
+ className: "hdl-entry-screen__assistance is-toggle",
193
+ "aria-expanded": capabilityErrorsVisible,
194
+ onClick: () => setCapabilityErrorsVisible((visible) => !visible)
195
+ }, /* @__PURE__ */ React.createElement("span", null, model.assistanceMessage), capabilityErrorsVisible ? /* @__PURE__ */ React.createElement("code", null, capabilityErrorCodes.join(" / ")) : null) : /* @__PURE__ */ React.createElement("p", {
196
+ className: "hdl-entry-screen__assistance",
197
+ role: "alert"
198
+ }, model.assistanceMessage) : null) : null);
179
199
  }
180
200
  //#endregion
181
201
  export { EntryScreen };
@@ -389,7 +389,8 @@
389
389
 
390
390
  .hdl-entry-language:focus-within,
391
391
  .hdl-entry-theme-toggle:focus-visible,
392
- .hdl-entry-technical-support:focus-visible {
392
+ .hdl-entry-technical-support:focus-visible,
393
+ .hdl-entry-screen__notices button:focus-visible {
393
394
  outline: 3px solid var(--hdl-entry-focus);
394
395
  outline-offset: 5px;
395
396
  }
@@ -415,6 +416,51 @@
415
416
  }
416
417
  }
417
418
 
419
+ .hdl-entry-screen__notices {
420
+ position: absolute;
421
+ top: var(--hdl-entry-notices-top);
422
+ left: 50%;
423
+ z-index: 4;
424
+ width: var(--hdl-entry-notices-width);
425
+ max-height: calc(100% - var(--hdl-entry-notices-top) - 24px);
426
+ overflow: auto;
427
+ padding: 16px 20px;
428
+ pointer-events: none;
429
+ color: var(--hdl-entry-copy);
430
+ transform: translateX(-50%);
431
+ }
432
+
433
+ .hdl-entry-screen__assistance,
434
+ .hdl-entry-screen__device-status {
435
+ display: block;
436
+ width: 100%;
437
+ margin: 0;
438
+ border: 0;
439
+ padding: 0;
440
+ background: transparent;
441
+ color: inherit;
442
+ font-size: 20px;
443
+ font-weight: 500;
444
+ line-height: 1.5;
445
+ text-align: center;
446
+ }
447
+
448
+ .hdl-entry-screen__device-status + .hdl-entry-screen__assistance {
449
+ margin-top: 12px;
450
+ }
451
+
452
+ .hdl-entry-screen__assistance.is-toggle {
453
+ cursor: pointer;
454
+ pointer-events: auto;
455
+ }
456
+
457
+ .hdl-entry-screen__assistance code {
458
+ display: block;
459
+ margin-top: 6px;
460
+ color: inherit;
461
+ font-size: 15px;
462
+ }
463
+
418
464
  & > .hdl-operation-overlay {
419
465
  background: var(--hdl-entry-loading-background);
420
466
  color: var(--hdl-entry-copy);
@@ -50,7 +50,9 @@ function useEntryScreenLayout() {
50
50
  "--hdl-entry-icon-size": `${Math.max(44, width * .112)}px`,
51
51
  "--hdl-entry-copy-size": `${copySize}px`,
52
52
  "--hdl-entry-invitation-gap": `${invitationGap}px`,
53
- "--hdl-entry-touch-size": `${Math.min(200, Math.max(96, surface.width * .24))}px`
53
+ "--hdl-entry-touch-size": `${Math.min(200, Math.max(96, surface.width * .24))}px`,
54
+ "--hdl-entry-notices-width": `${Math.min(734, width * .9)}px`,
55
+ "--hdl-entry-notices-top": `${(surface.height - height) / 2 + height * .398 + indicatorSize + invitationGap + copySize * 1.25 + 32}px`
54
56
  }
55
57
  };
56
58
  }
@@ -1,6 +1,5 @@
1
1
  import useEngineContext from "../../../../hooks/useEngineContext.js";
2
2
  import { subscribeBookingDateChange } from "../../../../plus/salesSdk/utils/bookingDate.js";
3
- import "../../../../plus/salesSdk/index.js";
4
3
  import dayjs from "dayjs";
5
4
  import { useCallback, useEffect, useState } from "react";
6
5
  //#region src/components/bigSale/components/BookingFloatingPanel/useBookingPanelController.ts
@@ -14,7 +14,6 @@ import { generateProductTabs } from "../../../ticketBooking/components/ProductDi
14
14
  import { useSalesSdkBusinessAvailability } from "../../../../plus/salesSdk/context/SalesSdkBusinessAvailabilityContext.js";
15
15
  import { showAddToCartToast } from "../../../../plus/salesSdk/components/showAddToCartToast.js";
16
16
  import { mergeBookingsForDisplay } from "../../../../plus/salesSdk/utils/mergeBookingsForDisplay.js";
17
- import "../../../../plus/salesSdk/index.js";
18
17
  import { buildBigSaleProductListPreferencesKey, readBigSaleProductListPreferences, readStoredBigSaleProductListPreferences, removeBigSaleProductListPreferences, resolveBigSaleAutoProductListPreferences, writeBigSaleProductListPreferences } from "../../utils/productListPreferences.js";
19
18
  import { resolveBigSaleProductDisplayConfig, useBigSaleProductListConfig } from "../../hooks/useBigSaleProductListConfig.js";
20
19
  import locales_default from "../../locales/index.js";
@@ -4,7 +4,6 @@ import withResponsive from "../../../../responsive/withResponsive.js";
4
4
  import useInitLocalesOnce from "../../../../hooks/useInitLocalesOnce.js";
5
5
  import { subscribeBookingDateChange } from "../../../../plus/salesSdk/utils/bookingDate.js";
6
6
  import { useSalesSdkBookingContext } from "../../../../plus/salesSdk/context/SalesSdkBookingContext.js";
7
- import "../../../../plus/salesSdk/index.js";
8
7
  import locales_default from "../../locales/index.js";
9
8
  import { getPosWeekStartsOn, resolvePosCountryCode } from "../../../../utils/posDateLocale.js";
10
9
  import dayjs from "dayjs";
@@ -6,7 +6,6 @@ import { buildInitBookingContextParams, collectBookingIdsFromTempOrder } from ".
6
6
  import { useSalesSdk } from "../../plus/salesSdk/hooks/useSalesSdk.js";
7
7
  import { useSalesSdkCart } from "../../plus/salesSdk/hooks/useSalesSdkCart.js";
8
8
  import { SalesSdkPrepareOrderSwitchContext, SalesSdkRootRefreshContext } from "../../plus/salesSdk/context/SalesSdkProvider.js";
9
- import "../../plus/salesSdk/index.js";
10
9
  import { isPersistedBigSaleOrderId } from "./utils/orderIdentity.js";
11
10
  import { seedDineInReservationToCart } from "../../plus/pisellReservation/utils/seedDineInReservationToCart.js";
12
11
  import BigSale from "./index.js";
@@ -4,7 +4,6 @@ import { useSalesSdkCustomer } from "../../../plus/salesSdk/hooks/useSalesSdkCus
4
4
  import { useSalesSdkBookingContext } from "../../../plus/salesSdk/context/SalesSdkBookingContext.js";
5
5
  import { useSalesSdkSummary } from "../../../plus/salesSdk/hooks/useSalesSdkSummary.js";
6
6
  import { useSalesSdkProducts } from "../../../plus/salesSdk/hooks/useSalesSdkProducts.js";
7
- import "../../../plus/salesSdk/index.js";
8
7
  import { useMemo } from "react";
9
8
  //#region src/components/bigSale/hooks/useBigSaleContext.ts
10
9
  /**