@pisell/private-materials 6.12.168 → 6.12.169

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 (252) 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.css +1 -1
  6. package/build/lowcode/render/default/view.js +10 -10
  7. package/build/lowcode/view.css +1 -1
  8. package/build/lowcode/view.js +10 -10
  9. package/es/components/HDLKiosk/{contracts → app/contracts}/config.js +1 -1
  10. package/es/components/HDLKiosk/app/manifest.js +11 -11
  11. package/es/components/HDLKiosk/app/operations.js +92 -0
  12. package/es/components/HDLKiosk/app/workflow/barcode.js +7 -3
  13. package/es/components/HDLKiosk/app/workflow/index.js +16 -0
  14. package/es/components/HDLKiosk/app/workflow/predicates.js +1 -1
  15. package/es/components/HDLKiosk/app/workflow/quick.js +1 -1
  16. package/es/components/HDLKiosk/app/workflow/registry.js +4 -4
  17. package/es/components/HDLKiosk/app/workflow/scale.js +5 -1
  18. package/es/components/HDLKiosk/docs/00-/346/226/207/344/273/266/345/257/274/350/210/252.md +104 -167
  19. package/es/components/HDLKiosk/docs/01-/346/240/270/345/277/203/350/277/220/350/241/214/346/234/272/345/210/266.md +95 -89
  20. package/es/components/HDLKiosk/docs/04-/350/256/276/345/244/207/344/270/216/347/247/260/351/207/215.md +43 -26
  21. package/es/components/HDLKiosk/docs/05-/344/272/244/346/230/223/345/256/211/345/205/250.md +2 -0
  22. package/es/components/HDLKiosk/docs/08-/346/227/240/345/244/264Application/350/277/220/350/241/214/346/227/266/351/207/215/346/236/204/350/256/276/350/256/241.md +719 -0
  23. package/es/components/HDLKiosk/docs/09-Entry/350/256/276/345/244/207/344/272/213/344/273/266/351/207/215/346/236/204/344/277/256/345/244/215/346/212/245/345/221/212.md +187 -0
  24. package/es/components/HDLKiosk/docs/README.md +6 -2
  25. package/es/components/HDLKiosk/docs//345/256/236/346/226/275/350/277/233/345/272/246.md +8 -7
  26. package/es/components/HDLKiosk/docs//346/236/266/346/236/204/350/256/276/350/256/241.md +16 -18
  27. package/es/components/HDLKiosk/index.js +22 -28
  28. package/es/components/HDLKiosk/index.less +1 -1
  29. package/es/components/HDLKiosk/kernel/README.md +13 -12
  30. package/es/components/HDLKiosk/kernel/application/defineApplication.js +63 -24
  31. package/es/components/HDLKiosk/kernel/application/defineSlice.js +6 -6
  32. package/es/components/HDLKiosk/kernel/application/runtime.js +237 -0
  33. package/es/components/HDLKiosk/kernel/operations/coordinator.js +1 -1
  34. package/es/components/HDLKiosk/kernel/operations/registry.js +3 -3
  35. package/es/components/HDLKiosk/kernel/operations/sessionEpoch.js +1 -1
  36. package/es/components/HDLKiosk/kernel/operations/types.js +7 -3
  37. package/es/components/HDLKiosk/kernel/workflow/actor.js +16 -17
  38. package/es/components/HDLKiosk/kernel/workflow/compiler.js +14 -16
  39. package/es/components/HDLKiosk/runtime/createRuntime.js +238 -0
  40. package/es/components/HDLKiosk/{devices → runtime/devices}/dedupeStore.js +1 -1
  41. package/es/components/HDLKiosk/{devices → runtime/devices}/scaleIngress.js +1 -1
  42. package/es/components/HDLKiosk/{devices/scale/runtime.js → runtime/devices/scaleStore.js} +18 -24
  43. package/es/components/HDLKiosk/{devices → runtime/devices}/scannerIngress.js +1 -1
  44. package/es/components/HDLKiosk/runtime/devices/scannerSessionPort.js +60 -0
  45. package/es/components/HDLKiosk/runtime/devices/scannerSessionRouter.js +212 -0
  46. package/es/components/HDLKiosk/runtime/operations/barcode.js +18 -0
  47. package/es/components/HDLKiosk/runtime/operations/cart.js +44 -0
  48. package/es/components/HDLKiosk/{app → runtime}/operations/cartConsistency.js +1 -1
  49. package/es/components/HDLKiosk/{app → runtime}/operations/checkout.js +95 -110
  50. package/es/components/HDLKiosk/{app → runtime}/operations/checkoutRequirements.js +1 -1
  51. package/es/components/HDLKiosk/{app → runtime}/operations/checkoutSafety.js +1 -1
  52. package/es/components/HDLKiosk/{app → runtime}/operations/coordinator.js +2 -2
  53. package/es/components/HDLKiosk/runtime/operations/customization.js +70 -0
  54. package/es/components/HDLKiosk/{app → runtime}/operations/errors.js +1 -1
  55. package/es/components/HDLKiosk/runtime/operations/fulfillment.js +6 -0
  56. package/es/components/HDLKiosk/runtime/operations/identity.js +55 -0
  57. package/es/components/HDLKiosk/runtime/operations/registry.js +34 -0
  58. package/es/components/HDLKiosk/runtime/operations/session.js +29 -0
  59. package/es/components/HDLKiosk/runtime/operations/types.js +13 -0
  60. package/es/components/HDLKiosk/runtime/session/blockPolicy.js +14 -0
  61. package/es/components/HDLKiosk/runtime/{createWorkflowSession.js → session/createSession.js} +67 -17
  62. package/es/components/HDLKiosk/runtime/{domainTransitionRunner.js → session/transitionRunner.js} +10 -5
  63. package/es/components/HDLKiosk/runtime/{workflowContext.js → session/workflowContext.js} +2 -2
  64. package/es/components/HDLKiosk/runtime/{workflowLifecycle.js → session/workflowLifecycle.js} +2 -2
  65. package/es/components/HDLKiosk/runtime/triggers.js +28 -0
  66. package/es/components/HDLKiosk/slices/catalog/Screen/index.js +15 -8
  67. package/es/components/HDLKiosk/slices/catalog/Screen/index.less +74 -13
  68. package/es/components/HDLKiosk/slices/catalog/slice.js +2 -2
  69. package/es/components/HDLKiosk/slices/customization/Screen/index.js +34 -35
  70. package/es/components/HDLKiosk/slices/customization/Screen/index.less +5 -0
  71. package/es/components/HDLKiosk/slices/customization/slice.js +2 -3
  72. package/es/components/HDLKiosk/slices/fulfillment/slice.js +2 -2
  73. package/es/components/HDLKiosk/slices/fulfillment/view.js +1 -1
  74. package/es/components/HDLKiosk/slices/identity/slice.js +2 -2
  75. package/es/components/HDLKiosk/slices/identity/view.js +1 -1
  76. package/es/components/HDLKiosk/slices/payment/slice.js +3 -3
  77. package/es/components/HDLKiosk/slices/primaryProductPrompt/slice.js +1 -1
  78. package/es/components/HDLKiosk/{runtime → ui}/HDLKioskWorkflowView.js +43 -129
  79. package/es/components/HDLKiosk/ui/ScaleSimulatorConsole/index.js +387 -0
  80. package/es/components/HDLKiosk/ui/ScaleSimulatorConsole/index.less +621 -0
  81. package/es/components/HDLKiosk/{app → ui}/ScreenRenderer.js +1 -1
  82. package/es/components/HDLKiosk/ui/controllers/useHDLKioskActionDispatcher.js +66 -0
  83. package/es/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskCustomerController.js +1 -1
  84. package/es/components/HDLKiosk/ui/controllers/useHDLKioskDeviceController.js +25 -0
  85. package/es/components/HDLKiosk/ui/controllers/useHDLKioskExitController.js +53 -0
  86. package/es/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskScreenData.js +1 -1
  87. package/es/components/HDLKiosk/ui/controllers/useHDLKioskSessionController.js +39 -0
  88. package/es/components/HDLKiosk/{app → ui}/entry/Screen/index.js +8 -6
  89. package/es/components/HDLKiosk/{app → ui}/entry/model.js +2 -2
  90. package/es/components/HDLKiosk/ui/scale.js +20 -0
  91. package/es/components/HDLKiosk/{runtime/useHostSnapshot.js → ui/snapshots.js} +6 -8
  92. package/es/components/HDLKiosk/{app → ui}/views.js +1 -1
  93. package/es/components/HDLKiosk/{runtime → ui}/workflowEvent.js +1 -1
  94. package/es/components/HDLKiosk/utils.js +4 -4
  95. package/es/components/bigSale/components/BookingFloatingPanel/useBookingPanelController.js +1 -0
  96. package/es/components/bigSale/components/TimeBar/index.js +1 -0
  97. package/es/components/bigSale/dialog.js +1 -0
  98. package/es/components/bigSale/hooks/useBigSaleContext.js +1 -0
  99. package/es/components/bigSale/hooks/useSelectFloorMapResourceForBigSale.js +1 -0
  100. package/es/components/bigSale/index.js +1 -0
  101. package/es/components/bigSale/templates/HDLKiosk/adapter/HDLKioskPaymentRuntime.js +2 -1
  102. package/es/components/bigSale/templates/HDLKiosk/adapter/capabilities.js +1 -1
  103. package/es/components/bigSale/templates/HDLKiosk/adapter/projection.js +21 -11
  104. package/es/components/bigSale/templates/HDLKiosk/adapter/sales.js +21 -3
  105. package/es/components/bigSale/templates/HDLKiosk/adapter/scaleTrigger.js +20 -5
  106. package/es/components/bigSale/templates/HDLKiosk/adapter/useBigSaleHDLKioskHost.js +3 -0
  107. package/es/components/bigSale/templates/HDLKiosk/index.js +3 -3
  108. package/es/components/bigSale/templates/Kiosk/index.js +1 -0
  109. package/es/components/sharedSecondaryBigSale/SharedSecondaryBigSaleReceiver.js +1 -0
  110. package/es/index.js +2 -0
  111. package/es/plus/pisellReservation/data/bookingToReservationTables.js +1 -1
  112. package/es/plus/pisellReservation/floorMap/floorPlanApi.js +1 -1
  113. package/es/plus/pisellReservation/floorMap/reservationMock.js +1 -1
  114. package/es/plus/pisellReservation/index.js +17 -0
  115. package/es/plus/saleDetail/Base.js +1 -0
  116. package/es/plus/saleDetail/components/Client/hooks/useClientSelectorProps.js +1 -0
  117. package/es/plus/saleDetail/components/DetailActions/index.js +1 -0
  118. package/es/plus/saleDetail/components/SummaryFinancialSections/index.js +1 -0
  119. package/es/plus/saleDetail/index.js +1 -0
  120. package/es/plus/saleDetail/tmpl/B/components/Dish/index.js +1 -0
  121. package/es/plus/saleDetail/tmpl/B/index.js +1 -0
  122. package/es/plus/salesSdk/index.js +52 -0
  123. package/es/plus/salesSdk/utils/addProductWithFlowDebounced.js +1 -1
  124. package/es/plus/salesSdk/utils/bookingDate.js +1 -1
  125. package/es/plus/salesSdk/utils/customerAuthGate.js +1 -1
  126. package/es/plus/salesSdk/utils/enrichCartLineHolderDisplay.js +1 -1
  127. package/es/pro/Login2.0/AuthModal.d.ts +1 -1
  128. package/es/pro/Login2.0/index.d.ts +2 -1
  129. package/es/pro/Login2.0/shared/types.d.ts +1 -1
  130. package/lib/components/HDLKiosk/{contracts → app/contracts}/config.js +1 -1
  131. package/lib/components/HDLKiosk/app/manifest.js +18 -19
  132. package/lib/components/HDLKiosk/app/operations.js +105 -0
  133. package/lib/components/HDLKiosk/app/workflow/barcode.js +7 -3
  134. package/lib/components/HDLKiosk/app/workflow/index.js +16 -0
  135. package/lib/components/HDLKiosk/app/workflow/predicates.js +1 -0
  136. package/lib/components/HDLKiosk/app/workflow/quick.js +1 -1
  137. package/lib/components/HDLKiosk/app/workflow/registry.js +3 -3
  138. package/lib/components/HDLKiosk/app/workflow/scale.js +5 -1
  139. package/lib/components/HDLKiosk/docs/00-/346/226/207/344/273/266/345/257/274/350/210/252.md +104 -167
  140. package/lib/components/HDLKiosk/docs/01-/346/240/270/345/277/203/350/277/220/350/241/214/346/234/272/345/210/266.md +95 -89
  141. package/lib/components/HDLKiosk/docs/04-/350/256/276/345/244/207/344/270/216/347/247/260/351/207/215.md +43 -26
  142. package/lib/components/HDLKiosk/docs/05-/344/272/244/346/230/223/345/256/211/345/205/250.md +2 -0
  143. package/lib/components/HDLKiosk/docs/08-/346/227/240/345/244/264Application/350/277/220/350/241/214/346/227/266/351/207/215/346/236/204/350/256/276/350/256/241.md +719 -0
  144. package/lib/components/HDLKiosk/docs/09-Entry/350/256/276/345/244/207/344/272/213/344/273/266/351/207/215/346/236/204/344/277/256/345/244/215/346/212/245/345/221/212.md +187 -0
  145. package/lib/components/HDLKiosk/docs/README.md +6 -2
  146. package/lib/components/HDLKiosk/docs//345/256/236/346/226/275/350/277/233/345/272/246.md +8 -7
  147. package/lib/components/HDLKiosk/docs//346/236/266/346/236/204/350/256/276/350/256/241.md +16 -18
  148. package/lib/components/HDLKiosk/index.js +25 -31
  149. package/lib/components/HDLKiosk/index.less +1 -1
  150. package/lib/components/HDLKiosk/kernel/README.md +13 -12
  151. package/lib/components/HDLKiosk/kernel/application/defineApplication.js +65 -25
  152. package/lib/components/HDLKiosk/kernel/application/defineSlice.js +6 -6
  153. package/lib/components/HDLKiosk/kernel/application/runtime.js +237 -0
  154. package/lib/components/HDLKiosk/kernel/operations/coordinator.js +1 -1
  155. package/lib/components/HDLKiosk/kernel/operations/registry.js +3 -3
  156. package/lib/components/HDLKiosk/kernel/operations/sessionEpoch.js +1 -1
  157. package/lib/components/HDLKiosk/kernel/operations/types.js +8 -3
  158. package/lib/components/HDLKiosk/kernel/workflow/actor.js +16 -17
  159. package/lib/components/HDLKiosk/kernel/workflow/compiler.js +14 -16
  160. package/lib/components/HDLKiosk/runtime/createRuntime.js +239 -0
  161. package/lib/components/HDLKiosk/{devices → runtime/devices}/dedupeStore.js +1 -1
  162. package/lib/components/HDLKiosk/{devices → runtime/devices}/scaleIngress.js +1 -1
  163. package/lib/components/HDLKiosk/{devices/scale/runtime.js → runtime/devices/scaleStore.js} +17 -27
  164. package/lib/components/HDLKiosk/{devices → runtime/devices}/scannerIngress.js +1 -1
  165. package/lib/components/HDLKiosk/runtime/devices/scannerSessionPort.js +60 -0
  166. package/lib/components/HDLKiosk/runtime/devices/scannerSessionRouter.js +212 -0
  167. package/lib/components/HDLKiosk/runtime/operations/barcode.js +17 -0
  168. package/lib/components/HDLKiosk/runtime/operations/cart.js +46 -0
  169. package/lib/components/HDLKiosk/{app → runtime}/operations/cartConsistency.js +1 -1
  170. package/lib/components/HDLKiosk/{app → runtime}/operations/checkout.js +97 -112
  171. package/lib/components/HDLKiosk/{app → runtime}/operations/checkoutRequirements.js +1 -1
  172. package/lib/components/HDLKiosk/{app → runtime}/operations/checkoutSafety.js +1 -1
  173. package/lib/components/HDLKiosk/{app → runtime}/operations/coordinator.js +2 -2
  174. package/lib/components/HDLKiosk/runtime/operations/customization.js +73 -0
  175. package/lib/components/HDLKiosk/{app → runtime}/operations/errors.js +1 -1
  176. package/lib/components/HDLKiosk/runtime/operations/fulfillment.js +5 -0
  177. package/lib/components/HDLKiosk/runtime/operations/identity.js +55 -0
  178. package/lib/components/HDLKiosk/runtime/operations/registry.js +34 -0
  179. package/lib/components/HDLKiosk/runtime/operations/session.js +30 -0
  180. package/lib/components/HDLKiosk/runtime/operations/types.js +14 -0
  181. package/lib/components/HDLKiosk/runtime/session/blockPolicy.js +14 -0
  182. package/lib/components/HDLKiosk/runtime/{createWorkflowSession.js → session/createSession.js} +71 -21
  183. package/lib/components/HDLKiosk/runtime/{domainTransitionRunner.js → session/transitionRunner.js} +10 -5
  184. package/lib/components/HDLKiosk/runtime/{workflowContext.js → session/workflowContext.js} +2 -2
  185. package/lib/components/HDLKiosk/runtime/{workflowLifecycle.js → session/workflowLifecycle.js} +2 -2
  186. package/lib/components/HDLKiosk/runtime/triggers.js +28 -0
  187. package/lib/components/HDLKiosk/slices/catalog/Screen/index.js +15 -8
  188. package/lib/components/HDLKiosk/slices/catalog/Screen/index.less +74 -13
  189. package/lib/components/HDLKiosk/slices/catalog/slice.js +3 -3
  190. package/lib/components/HDLKiosk/slices/customization/Screen/index.js +35 -36
  191. package/lib/components/HDLKiosk/slices/customization/Screen/index.less +5 -0
  192. package/lib/components/HDLKiosk/slices/customization/slice.js +5 -6
  193. package/lib/components/HDLKiosk/slices/fulfillment/slice.js +3 -3
  194. package/lib/components/HDLKiosk/slices/fulfillment/view.js +1 -1
  195. package/lib/components/HDLKiosk/slices/identity/slice.js +4 -4
  196. package/lib/components/HDLKiosk/slices/identity/view.js +1 -1
  197. package/lib/components/HDLKiosk/slices/payment/slice.js +5 -5
  198. package/lib/components/HDLKiosk/slices/primaryProductPrompt/slice.js +1 -1
  199. package/lib/components/HDLKiosk/{runtime → ui}/HDLKioskWorkflowView.js +44 -130
  200. package/lib/components/HDLKiosk/ui/ScaleSimulatorConsole/index.js +390 -0
  201. package/lib/components/HDLKiosk/ui/ScaleSimulatorConsole/index.less +621 -0
  202. package/lib/components/HDLKiosk/{app → ui}/ScreenRenderer.js +1 -1
  203. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskActionDispatcher.js +67 -0
  204. package/lib/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskCustomerController.js +1 -1
  205. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskDeviceController.js +26 -0
  206. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskExitController.js +54 -0
  207. package/lib/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskScreenData.js +1 -1
  208. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskSessionController.js +40 -0
  209. package/lib/components/HDLKiosk/{app → ui}/entry/Screen/index.js +8 -6
  210. package/lib/components/HDLKiosk/{app → ui}/entry/model.js +2 -2
  211. package/lib/components/HDLKiosk/ui/scale.js +24 -0
  212. package/lib/components/HDLKiosk/{runtime/useHostSnapshot.js → ui/snapshots.js} +6 -7
  213. package/lib/components/HDLKiosk/{app → ui}/views.js +1 -1
  214. package/lib/components/HDLKiosk/{runtime → ui}/workflowEvent.js +1 -1
  215. package/lib/components/HDLKiosk/utils.js +4 -4
  216. package/lib/components/bigSale/templates/HDLKiosk/adapter/HDLKioskPaymentRuntime.js +2 -1
  217. package/lib/components/bigSale/templates/HDLKiosk/adapter/capabilities.js +1 -1
  218. package/lib/components/bigSale/templates/HDLKiosk/adapter/projection.js +21 -10
  219. package/lib/components/bigSale/templates/HDLKiosk/adapter/sales.js +20 -2
  220. package/lib/components/bigSale/templates/HDLKiosk/adapter/scaleTrigger.js +19 -4
  221. package/lib/components/bigSale/templates/HDLKiosk/adapter/useBigSaleHDLKioskHost.js +3 -0
  222. package/lib/components/bigSale/templates/HDLKiosk/index.js +4 -4
  223. package/package.json +3 -3
  224. package/es/components/HDLKiosk/app/constants.js +0 -9
  225. package/es/components/HDLKiosk/app/operations/barcode.js +0 -22
  226. package/es/components/HDLKiosk/app/operations/cart.js +0 -60
  227. package/es/components/HDLKiosk/app/operations/fulfillment.js +0 -11
  228. package/es/components/HDLKiosk/app/operations/session.js +0 -41
  229. package/es/components/HDLKiosk/app/operations/types.js +0 -11
  230. package/es/components/HDLKiosk/devices/entryArbiter.js +0 -33
  231. package/es/components/HDLKiosk/runtime/controllers/useHDLKioskDeviceController.js +0 -75
  232. package/es/components/HDLKiosk/runtime/controllers/useHDLKioskScannerController.js +0 -160
  233. package/es/components/HDLKiosk/runtime/controllers/useHDLKioskSessionController.js +0 -185
  234. package/es/components/HDLKiosk/runtime/useWorkflowSnapshot.js +0 -12
  235. package/es/components/HDLKiosk/slices/customization/operation.js +0 -80
  236. package/es/components/HDLKiosk/slices/identity/operation.js +0 -60
  237. package/es/private-materials/lowcode/authmodal/meta.d.ts +0 -1
  238. package/lib/components/HDLKiosk/app/constants.js +0 -9
  239. package/lib/components/HDLKiosk/app/operations/barcode.js +0 -21
  240. package/lib/components/HDLKiosk/app/operations/cart.js +0 -62
  241. package/lib/components/HDLKiosk/app/operations/fulfillment.js +0 -10
  242. package/lib/components/HDLKiosk/app/operations/session.js +0 -42
  243. package/lib/components/HDLKiosk/app/operations/types.js +0 -12
  244. package/lib/components/HDLKiosk/devices/entryArbiter.js +0 -33
  245. package/lib/components/HDLKiosk/runtime/controllers/useHDLKioskDeviceController.js +0 -76
  246. package/lib/components/HDLKiosk/runtime/controllers/useHDLKioskScannerController.js +0 -161
  247. package/lib/components/HDLKiosk/runtime/controllers/useHDLKioskSessionController.js +0 -186
  248. package/lib/components/HDLKiosk/runtime/useWorkflowSnapshot.js +0 -13
  249. package/lib/components/HDLKiosk/slices/customization/operation.js +0 -83
  250. package/lib/components/HDLKiosk/slices/identity/operation.js +0 -60
  251. /package/es/components/HDLKiosk/{app → ui}/entry/Screen/index.less +0 -0
  252. /package/lib/components/HDLKiosk/{app → ui}/entry/Screen/index.less +0 -0
@@ -1,12 +1,12 @@
1
1
  const require_runtime = require("../../../../../_virtual/_rolldown/runtime.js");
2
2
  const require_objectSpread2 = require("../../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js");
3
3
  const require_asyncToGenerator = require("../../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
4
- const require_runtime$1 = require("../../../devices/scale/runtime.js");
5
4
  const require_index = require("../../../components/shell/HDLKioskBottomBarHost/index.js");
6
5
  const require_index$1 = require("../../../components/shell/HDLKioskOrderSummary/index.js");
7
6
  const require_model = require("../../../components/common/HDLKioskSkuOptionsSelection/model.js");
8
7
  const require_index$2 = require("../../../components/common/HDLKioskSkuOptionsSelection/index.js");
9
8
  const require_product = require("../../../product.js");
9
+ const require_scale = require("../../../ui/scale.js");
10
10
  let react = require("react");
11
11
  react = require_runtime.__toESM(react);
12
12
  let _pisell_utils = require("@pisell/utils");
@@ -30,13 +30,10 @@ function getScaleStatusText(scale) {
30
30
  if (scale.error) return _pisell_utils.locales.getText("pisell2.hdl-kiosk.scale-reading-error");
31
31
  if (scale.connectionState === "disconnected") return _pisell_utils.locales.getText("pisell2.hdl-kiosk.scale-disconnected");
32
32
  if (scale.connectionState !== "connected" || !scale.isListening) return _pisell_utils.locales.getText("pisell2.hdl-kiosk.scale-connecting");
33
- switch (scale.status) {
34
- case "stable": return _pisell_utils.locales.getText("pisell2.hdl-kiosk.scale-stable");
35
- case "overload": return _pisell_utils.locales.getText("pisell2.hdl-kiosk.scale-overload");
36
- case "negative": return _pisell_utils.locales.getText("pisell2.hdl-kiosk.scale-negative");
37
- case "unstable":
38
- case null: return _pisell_utils.locales.getText("pisell2.hdl-kiosk.scale-unstable");
39
- }
33
+ if (scale.status === "overload") return _pisell_utils.locales.getText("pisell2.hdl-kiosk.scale-overload");
34
+ if (scale.status === "negative") return _pisell_utils.locales.getText("pisell2.hdl-kiosk.scale-negative");
35
+ if (!scale.hasLiveSample) return _pisell_utils.locales.getText("pisell2.hdl-kiosk.scale-connecting");
36
+ return _pisell_utils.locales.getText(scale.status === "stable" ? "pisell2.hdl-kiosk.scale-stable" : "pisell2.hdl-kiosk.scale-unstable");
40
37
  }
41
38
  function initialSelections(product) {
42
39
  if (!product) return [];
@@ -74,6 +71,19 @@ function formatMoney(value, currencySymbol) {
74
71
  const amount = value.toDecimalPlaces(2).toNumber();
75
72
  return String((0, _pisell_utils.formatAmount)(amount, 2, currencySymbol || ""));
76
73
  }
74
+ function resolveScaleMeasurement(scale, productFacts, minimumWeightKg) {
75
+ var _scale$grossWeightKg, _productFacts$fixedTa, _productFacts$fixedTa2;
76
+ const gross = new decimal_js.default((_scale$grossWeightKg = scale.grossWeightKg) !== null && _scale$grossWeightKg !== void 0 ? _scale$grossWeightKg : NaN);
77
+ const tare = (_productFacts$fixedTa = productFacts === null || productFacts === void 0 || (_productFacts$fixedTa2 = productFacts.fixedTare) === null || _productFacts$fixedTa2 === void 0 ? void 0 : _productFacts$fixedTa2.valueKg) !== null && _productFacts$fixedTa !== void 0 ? _productFacts$fixedTa : new decimal_js.default(0);
78
+ const numbersValid = gross.isFinite() && tare.isFinite() && !gross.isNegative() && !tare.isNegative();
79
+ const net = numbersValid ? decimal_js.default.max(gross.minus(tare), 0) : new decimal_js.default(0);
80
+ return {
81
+ gross,
82
+ tare,
83
+ net,
84
+ valid: numbersValid && scale.active && scale.hasLiveSample && scale.isListening && scale.connectionState === "connected" && scale.status === "stable" && !scale.error && net.greaterThanOrEqualTo(minimumWeightKg) && (productFacts === null || productFacts === void 0 ? void 0 : productFacts.available) === true
85
+ };
86
+ }
77
87
  function BackIcon() {
78
88
  return /* @__PURE__ */ react.default.createElement("svg", {
79
89
  viewBox: "0 0 24 24",
@@ -162,7 +172,8 @@ function ProductFallback() {
162
172
  }
163
173
  function CustomizationScreen({ product, loading, errorReference, errorMessage, busy, syncing, canGoBack, minimumWeightKg, orderBar, send }) {
164
174
  var _productFacts$product, _orderBar$primaryLine, _orderBar$primaryLine2, _orderBar$primaryLine3, _orderBar$primaryLine4, _orderBar$primaryLine7, _productFacts$unitPri, _orderBar$primaryLine9, _orderBar$primaryLine11;
165
- const scale = require_runtime$1.useHDLScaleSnapshot();
175
+ const scaleRuntime = require_scale.useHDLScaleRuntime();
176
+ const scale = require_scale.useHDLScaleSnapshot();
166
177
  const skuOptionsRef = (0, react.useRef)(null);
167
178
  const hydratedDraftKeyRef = (0, react.useRef)();
168
179
  const [skuValue, setSkuValue] = (0, react.useState)(() => initialSkuValue(product));
@@ -182,30 +193,21 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
182
193
  (_orderBar$primaryLine7 = orderBar.primaryLine) === null || _orderBar$primaryLine7 === void 0 ? void 0 : _orderBar$primaryLine7.skuValue,
183
194
  product
184
195
  ]);
185
- const measurement = (0, react.useMemo)(() => {
186
- var _scale$grossWeightKg, _productFacts$fixedTa, _productFacts$fixedTa2;
187
- const gross = new decimal_js.default((_scale$grossWeightKg = scale.grossWeightKg) !== null && _scale$grossWeightKg !== void 0 ? _scale$grossWeightKg : NaN);
188
- const tare = (_productFacts$fixedTa = productFacts === null || productFacts === void 0 || (_productFacts$fixedTa2 = productFacts.fixedTare) === null || _productFacts$fixedTa2 === void 0 ? void 0 : _productFacts$fixedTa2.valueKg) !== null && _productFacts$fixedTa !== void 0 ? _productFacts$fixedTa : new decimal_js.default(0);
189
- const numbersValid = gross.isFinite() && tare.isFinite() && !gross.isNegative() && !tare.isNegative();
190
- const net = numbersValid ? decimal_js.default.max(gross.minus(tare), 0) : new decimal_js.default(0);
191
- return {
192
- gross,
193
- tare,
194
- net,
195
- valid: numbersValid && scale.active && scale.isListening && scale.connectionState === "connected" && scale.status === "stable" && !scale.error && net.greaterThanOrEqualTo(minimumWeightKg) && (productFacts === null || productFacts === void 0 ? void 0 : productFacts.available) === true
196
- };
197
- }, [
196
+ const measurement = (0, react.useMemo)(() => resolveScaleMeasurement(scale, productFacts, minimumWeightKg), [
198
197
  minimumWeightKg,
199
198
  productFacts,
200
199
  scale
201
200
  ]);
202
201
  const statusText = getScaleStatusText(scale);
203
- const stable = scale.status === "stable" && scale.connectionState === "connected" && scale.isListening && !scale.error;
202
+ const readingInvalid = scale.status === "overload" || scale.status === "negative";
203
+ const stable = scale.status === "stable" && scale.hasLiveSample && scale.connectionState === "connected" && scale.isListening && !scale.error;
204
204
  const unitPricePerStandardWeight = (_productFacts$unitPri = productFacts === null || productFacts === void 0 ? void 0 : productFacts.unitPricePerKg) !== null && _productFacts$unitPri !== void 0 ? _productFacts$unitPri : new decimal_js.default(0);
205
205
  const amountText = orderBar.confirmedAmount !== void 0 ? formatMoney(new decimal_js.default(orderBar.confirmedAmount), orderBar.currencySymbol) : "—";
206
206
  const submit = (0, react.useCallback)(require_asyncToGenerator._asyncToGenerator(function* () {
207
- var _skuOptionsRef$curren2, _skuOptionsRef$curren3, _orderBar$primaryLine8, _scale$updatedAt;
208
- if (!productFacts || !measurement.valid || busy || syncing) return;
207
+ var _skuOptionsRef$curren2, _skuOptionsRef$curren3, _orderBar$primaryLine8, _currentScale$updated;
208
+ const currentScale = scaleRuntime.getSnapshot();
209
+ const currentMeasurement = resolveScaleMeasurement(currentScale, productFacts, minimumWeightKg);
210
+ if (!productFacts || !currentMeasurement.valid || busy || syncing) return;
209
211
  try {
210
212
  var _skuOptionsRef$curren;
211
213
  yield (_skuOptionsRef$curren = skuOptionsRef.current) === null || _skuOptionsRef$curren === void 0 ? void 0 : _skuOptionsRef$curren.validate();
@@ -222,24 +224,21 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
222
224
  existingLineId: (_orderBar$primaryLine8 = orderBar.primaryLine) === null || _orderBar$primaryLine8 === void 0 ? void 0 : _orderBar$primaryLine8.lineId,
223
225
  skuValue: submittedSkuValue,
224
226
  measurement: {
225
- grossWeightKg: formatWeight(measurement.gross),
226
- tareWeightKg: formatWeight(measurement.tare),
227
- netWeightKg: formatWeight(measurement.net),
227
+ grossWeightKg: formatWeight(currentMeasurement.gross),
228
+ tareWeightKg: formatWeight(currentMeasurement.tare),
229
+ netWeightKg: formatWeight(currentMeasurement.net),
228
230
  source: "auto",
229
231
  status: "stable",
230
- measuredAt: (_scale$updatedAt = scale.updatedAt) !== null && _scale$updatedAt !== void 0 ? _scale$updatedAt : Date.now()
232
+ measuredAt: (_currentScale$updated = currentScale.updatedAt) !== null && _currentScale$updated !== void 0 ? _currentScale$updated : Date.now()
231
233
  }
232
234
  }
233
235
  });
234
236
  }), [
235
237
  busy,
236
- measurement.valid,
237
- measurement.gross,
238
- measurement.net,
239
- measurement.tare,
238
+ minimumWeightKg,
240
239
  (_orderBar$primaryLine9 = orderBar.primaryLine) === null || _orderBar$primaryLine9 === void 0 ? void 0 : _orderBar$primaryLine9.lineId,
241
240
  productFacts,
242
- scale.updatedAt,
241
+ scaleRuntime,
243
242
  skuValue,
244
243
  send,
245
244
  syncing
@@ -317,9 +316,9 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
317
316
  src: productFacts.imageUrl,
318
317
  alt: ""
319
318
  }) : /* @__PURE__ */ react.default.createElement(ProductFallback, null)), /* @__PURE__ */ react.default.createElement("div", { className: "hdl-customization-product__copy" }, /* @__PURE__ */ react.default.createElement("p", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.customization-product-eyebrow")), /* @__PURE__ */ react.default.createElement("h1", { id: "hdl-customization-title" }, (productFacts === null || productFacts === void 0 ? void 0 : productFacts.name) || _pisell_utils.locales.getText("pisell2.hdl-kiosk.weighted-product-loading")), /* @__PURE__ */ react.default.createElement("strong", null, productFacts ? formatMoney(unitPricePerStandardWeight, orderBar.currencySymbol) : "—", " ", /* @__PURE__ */ react.default.createElement("small", null, "/", STANDARD_WEIGHT_UNIT_LABEL)))), /* @__PURE__ */ react.default.createElement("aside", { className: "hdl-customization-weight" }, /* @__PURE__ */ react.default.createElement("div", { className: "hdl-customization-weight__status" }, /* @__PURE__ */ react.default.createElement("span", {
320
- className: `hdl-customization-weight__dot${stable ? " is-stable" : ""}`,
319
+ className: `hdl-customization-weight__dot${readingInvalid ? " is-error" : stable ? " is-stable" : ""}`,
321
320
  "aria-hidden": "true"
322
- }), /* @__PURE__ */ react.default.createElement("div", null, /* @__PURE__ */ react.default.createElement("strong", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.customization-weighing")), /* @__PURE__ */ react.default.createElement("small", null, statusText)), /* @__PURE__ */ react.default.createElement(ScaleIcon, null)), /* @__PURE__ */ react.default.createElement("dl", null, /* @__PURE__ */ react.default.createElement("div", null, /* @__PURE__ */ react.default.createElement("dt", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.customization-unit-price")), /* @__PURE__ */ react.default.createElement("dd", null, productFacts ? formatMoney(unitPricePerStandardWeight, orderBar.currencySymbol) : "—", " ", /* @__PURE__ */ react.default.createElement("small", null, "/", STANDARD_WEIGHT_UNIT_LABEL))), /* @__PURE__ */ react.default.createElement("div", { className: "is-featured" }, /* @__PURE__ */ react.default.createElement("dt", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.gross-weight")), /* @__PURE__ */ react.default.createElement("dd", null, measurement.gross.isFinite() ? formatWeight(measurement.gross) : "—", " ", "kg")), /* @__PURE__ */ react.default.createElement("div", null, /* @__PURE__ */ react.default.createElement("dt", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.tare-weight")), /* @__PURE__ */ react.default.createElement("dd", null, formatWeight(measurement.tare), " kg")), /* @__PURE__ */ react.default.createElement("div", null, /* @__PURE__ */ react.default.createElement("dt", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.net-weight")), /* @__PURE__ */ react.default.createElement("dd", null, formatWeight(measurement.net), " kg"))))), /* @__PURE__ */ react.default.createElement("div", { className: "hdl-customization-options" }, product && productFacts ? /* @__PURE__ */ react.default.createElement(require_index$2.default, {
321
+ }), /* @__PURE__ */ react.default.createElement("div", null, /* @__PURE__ */ react.default.createElement("strong", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.customization-weighing")), /* @__PURE__ */ react.default.createElement("small", null, statusText)), /* @__PURE__ */ react.default.createElement(ScaleIcon, null)), /* @__PURE__ */ react.default.createElement("dl", null, /* @__PURE__ */ react.default.createElement("div", null, /* @__PURE__ */ react.default.createElement("dt", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.customization-unit-price")), /* @__PURE__ */ react.default.createElement("dd", null, productFacts ? formatMoney(unitPricePerStandardWeight, orderBar.currencySymbol) : "—", " ", /* @__PURE__ */ react.default.createElement("small", null, "/", STANDARD_WEIGHT_UNIT_LABEL))), /* @__PURE__ */ react.default.createElement("div", { className: "is-featured" }, /* @__PURE__ */ react.default.createElement("dt", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.gross-weight")), /* @__PURE__ */ react.default.createElement("dd", null, readingInvalid ? "Err." : `${measurement.gross.isFinite() ? formatWeight(measurement.gross) : "—"} kg`)), /* @__PURE__ */ react.default.createElement("div", null, /* @__PURE__ */ react.default.createElement("dt", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.tare-weight")), /* @__PURE__ */ react.default.createElement("dd", null, formatWeight(measurement.tare), " kg")), /* @__PURE__ */ react.default.createElement("div", null, /* @__PURE__ */ react.default.createElement("dt", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.net-weight")), /* @__PURE__ */ react.default.createElement("dd", null, readingInvalid ? "Err." : `${formatWeight(measurement.net)} kg`))))), /* @__PURE__ */ react.default.createElement("div", { className: "hdl-customization-options" }, product && productFacts ? /* @__PURE__ */ react.default.createElement(require_index$2.default, {
323
322
  ref: skuOptionsRef,
324
323
  product,
325
324
  value: skuValue,
@@ -122,6 +122,11 @@
122
122
  box-shadow: 0 0 0 5px rgba(18, 183, 106, 0.16);
123
123
  }
124
124
 
125
+ .hdl-customization-weight__dot.is-error {
126
+ background: #f04438;
127
+ box-shadow: 0 0 0 5px rgba(240, 68, 56, 0.16);
128
+ }
129
+
125
130
  .hdl-customization-weight__status > div {
126
131
  min-width: 0;
127
132
  flex: 1;
@@ -1,15 +1,14 @@
1
1
  const require_defineSlice = require("../../kernel/application/defineSlice.js");
2
- const require_cart = require("../../app/operations/cart.js");
3
- const require_operation = require("./operation.js");
2
+ const require_operations = require("../../app/operations.js");
4
3
  //#region src/components/HDLKiosk/slices/customization/slice.ts
5
4
  /** Customization Slice:Next 时才提交本地称重草稿;加购成功后才离开。 */
6
5
  const customizationSlice = require_defineSlice.defineSlice({
7
6
  id: "customization",
8
- screen: { id: "customization" },
9
- commands: { removePrimaryProduct: require_cart.cartRemoveLineOperation },
7
+ surface: { id: "customization" },
8
+ commands: { removePrimaryProduct: require_operations.cartRemoveLineOperation },
10
9
  intents: {
11
- complete: require_defineSlice.effect(require_operation.productSyncPrimaryWeightedProductOperation, { navigate: "next" }),
12
- omit: require_defineSlice.effect(require_operation.productRemovePrimaryProductOperation, { navigate: "next" })
10
+ complete: require_defineSlice.effect(require_operations.productSyncPrimaryWeightedProductOperation, { navigate: "next" }),
11
+ omit: require_defineSlice.effect(require_operations.productRemovePrimaryProductOperation, { navigate: "next" })
13
12
  }
14
13
  });
15
14
  //#endregion
@@ -1,11 +1,11 @@
1
1
  const require_defineSlice = require("../../kernel/application/defineSlice.js");
2
- const require_fulfillment = require("../../app/operations/fulfillment.js");
2
+ const require_operations = require("../../app/operations.js");
3
3
  //#region src/components/HDLKiosk/slices/fulfillment/slice.ts
4
4
  /** Fulfillment Slice:声明就餐方式完成条件与回退语义;不依赖 React 或 Host 实现。 */
5
5
  const fulfillmentSlice = require_defineSlice.defineSlice({
6
6
  id: "fulfillment",
7
- screen: { id: "fulfillment" },
8
- intents: { complete: require_defineSlice.effect(require_fulfillment.setFulfillmentOperation, {
7
+ surface: { id: "fulfillment" },
8
+ intents: { complete: require_defineSlice.effect(require_operations.setFulfillmentOperation, {
9
9
  precondition: "fulfillment.selected",
10
10
  navigate: "next"
11
11
  }) }
@@ -6,7 +6,7 @@ react = require_runtime.__toESM(react);
6
6
  //#region src/components/HDLKiosk/slices/fulfillment/view.tsx
7
7
  /** Fulfillment 展示装配:组合页面、订单摘要与购物车投影;不执行订单写入。 */
8
8
  const renderFulfillment = ({ node, viewSnapshot, sales, businessMode, send }) => /* @__PURE__ */ react.default.createElement(require_index.FulfillmentScreen, {
9
- model: require_utils.createActivityScreenModel(node.screenId, viewSnapshot, node, sales, businessMode),
9
+ model: require_utils.createActivityScreenModel(node.surfaceId, viewSnapshot, node, sales, businessMode),
10
10
  orderBar: require_utils.createOrderBarModel(sales),
11
11
  send
12
12
  });
@@ -1,13 +1,13 @@
1
1
  const require_defineSlice = require("../../kernel/application/defineSlice.js");
2
- const require_operation = require("./operation.js");
2
+ const require_operations = require("../../app/operations.js");
3
3
  //#region src/components/HDLKiosk/slices/identity/slice.ts
4
4
  /** Identity Slice:声明身份节点的 Intent 与客户同步 Effect;不依赖 React 或 Host 实现。 */
5
5
  const identitySlice = require_defineSlice.defineSlice({
6
6
  id: "identity",
7
- screen: { id: "identity" },
7
+ surface: { id: "identity" },
8
8
  intents: {
9
- complete: require_defineSlice.effect(require_operation.identitySyncOperation, { navigate: "next" }),
10
- omit: require_defineSlice.effect(require_operation.identitySyncOperation, { navigate: "next" })
9
+ complete: require_defineSlice.effect(require_operations.identitySyncOperation, { navigate: "next" }),
10
+ omit: require_defineSlice.effect(require_operations.identitySyncOperation, { navigate: "next" })
11
11
  }
12
12
  });
13
13
  //#endregion
@@ -6,7 +6,7 @@ react = require_runtime.__toESM(react);
6
6
  //#region src/components/HDLKiosk/slices/identity/view.tsx
7
7
  /** Identity 展示装配:把统一 View Context 转为本 Slice Screen props;不决定流程目标。 */
8
8
  const renderIdentity = ({ node, viewSnapshot, sales, businessMode, renderIdentityAuth, send }) => /* @__PURE__ */ react.default.createElement(require_index.IdentityScreen, {
9
- model: require_utils.createActivityScreenModel(node.screenId, viewSnapshot, node, sales, businessMode),
9
+ model: require_utils.createActivityScreenModel(node.surfaceId, viewSnapshot, node, sales, businessMode),
10
10
  orderBar: require_utils.createOrderBarModel(sales),
11
11
  send,
12
12
  renderIdentityAuth
@@ -1,20 +1,20 @@
1
1
  const require_defineSlice = require("../../kernel/application/defineSlice.js");
2
- const require_checkout = require("../../app/operations/checkout.js");
2
+ const require_operations = require("../../app/operations.js");
3
3
  //#region src/components/HDLKiosk/slices/payment/slice.ts
4
4
  /** Payment Slice:声明卡/现金选择、支付派发与 Host 成功确认;支付不确定不作成功处理。 */
5
5
  const paymentMethodSlice = require_defineSlice.defineSlice({
6
6
  id: "paymentMethod",
7
- screen: { id: "checkout" },
7
+ surface: { id: "checkout" },
8
8
  commands: {
9
- payEftpos: require_checkout.checkoutPayEftposOperation,
10
- requestStaffPaymentApproval: require_checkout.checkoutRequestStaffPaymentApprovalOperation
9
+ payEftpos: require_operations.checkoutPayEftposOperation,
10
+ requestStaffPaymentApproval: require_operations.checkoutRequestStaffPaymentApprovalOperation
11
11
  },
12
12
  intents: { complete: require_defineSlice.intentPrecondition("payment.succeeded", { navigate: "next" }) }
13
13
  });
14
14
  /** 支付完成仍复用 Checkout Screen,仅作为 Workflow 的成功终态。 */
15
15
  const paymentCompletedSlice = require_defineSlice.defineSlice({
16
16
  id: "paymentCompleted",
17
- screen: { id: "checkout" },
17
+ surface: { id: "checkout" },
18
18
  intents: {}
19
19
  });
20
20
  //#endregion
@@ -3,7 +3,7 @@ const require_defineSlice = require("../../kernel/application/defineSlice.js");
3
3
  /** 主商品询问 Slice:只表达是否进入称重定制,不承担 Catalog 页面职责。 */
4
4
  const primaryProductPromptSlice = require_defineSlice.defineSlice({
5
5
  id: "primaryProductPrompt",
6
- screen: { id: "primaryProductPrompt" },
6
+ surface: { id: "primaryProductPrompt" },
7
7
  presentation: "modal",
8
8
  intents: {
9
9
  complete: require_defineSlice.intentPrecondition("cart.notEmpty", { navigate: "next" }),
@@ -1,6 +1,7 @@
1
1
  const require_runtime = require("../../../_virtual/_rolldown/runtime.js");
2
- const require_asyncToGenerator = require("../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
3
2
  const require_useHDLKioskCustomerController = require("./controllers/useHDLKioskCustomerController.js");
3
+ const require_useHDLKioskActionDispatcher = require("./controllers/useHDLKioskActionDispatcher.js");
4
+ const require_useHDLKioskExitController = require("./controllers/useHDLKioskExitController.js");
4
5
  const require_useHDLKioskScreenData = require("./controllers/useHDLKioskScreenData.js");
5
6
  const require_selectors = require("../kernel/workflow/selectors.js");
6
7
  const require_index = require("../components/overlays/EndOrderDialog/index.js");
@@ -11,13 +12,12 @@ const require_index$4 = require("../components/shell/HDLKioskShell/index.js");
11
12
  const require_index$5 = require("../components/shell/HDLKioskBottomBarHost/index.js");
12
13
  const require_index$6 = require("../components/common/BlockingNotice/index.js");
13
14
  const require_utils = require("../utils.js");
14
- const require_ScreenRenderer = require("../app/ScreenRenderer.js");
15
- const require_useWorkflowSnapshot = require("./useWorkflowSnapshot.js");
16
- const require_workflowEvent = require("./workflowEvent.js");
15
+ const require_ScreenRenderer = require("./ScreenRenderer.js");
16
+ const require_snapshots = require("./snapshots.js");
17
17
  let react = require("react");
18
18
  react = require_runtime.__toESM(react);
19
19
  let _pisell_utils = require("@pisell/utils");
20
- //#region src/components/HDLKiosk/runtime/HDLKioskWorkflowView.tsx
20
+ //#region src/components/HDLKiosk/ui/HDLKioskWorkflowView.tsx
21
21
  /**
22
22
  * 文件角色:承载一个活跃 HDLKiosk 会话的 React 组合视图。
23
23
  * 运行机制:组合 Customer/ScreenData Controller,订阅 Host 与 Actor
@@ -42,52 +42,42 @@ function HDLKioskWorkflowCartOverlay({ model, busy, memberAction, send, renderCa
42
42
  } : void 0
43
43
  });
44
44
  }
45
+ function HDLKioskWorkflowBlockingSurface({ snapshot, title, description, reference, hideBottomBar = false }) {
46
+ return /* @__PURE__ */ react.default.createElement(require_index$4.HDLKioskShell, { snapshot }, /* @__PURE__ */ react.default.createElement(require_index$5.HDLKioskBottomBarHost, { mode: hideBottomBar ? "hidden" : void 0 }, /* @__PURE__ */ react.default.createElement(require_index$1.HDLKioskHeader, null), /* @__PURE__ */ react.default.createElement("main", { className: "hdl-shell__main" }, /* @__PURE__ */ react.default.createElement(require_index$6.BlockingNotice, {
47
+ title,
48
+ description,
49
+ reference
50
+ }))));
51
+ }
45
52
  /**
46
53
  * 活跃点餐会话的 UI 编排层。
47
54
  *
48
55
  * 它把运行时控制器投影为 Screen/Dialog 所需的 props;具体页面不直接接触
49
56
  * Host、Workflow Actor 或会话计时器。
50
57
  */
51
- function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderIdentityAuth, renderCartContent, cartOverlayActions, returnToEntry }) {
52
- var _snapshot$pendingNavi, _snapshot$pendingNavi2, _session$definition$n2, _customer$error, _activeNode$presentat;
53
- const snapshot = require_useWorkflowSnapshot.useWorkflowSnapshot(session.actor);
54
- const sequence = (0, react.useRef)(0);
55
- const resetInFlight = (0, react.useRef)(false);
56
- const [resetting, setResetting] = (0, react.useState)(false);
57
- const [resetError, setResetError] = (0, react.useState)();
58
+ function HDLKioskWorkflowView({ session, host, sales, config, isActive, returning, returnError, renderIdentityAuth, renderCartContent, cartOverlayActions, returnToEntry }) {
59
+ var _session$definition$n2, _customer$error, _activeNode$presentat;
60
+ const snapshot = require_snapshots.useWorkflowSnapshot(session.actor);
61
+ const navigationSequence = (0, react.useRef)(0);
58
62
  const [memberLoginOpen, setMemberLoginOpen] = (0, react.useState)(false);
59
- const [commandState, setCommandState] = (0, react.useState)({ busy: false });
60
- const commandGeneration = (0, react.useRef)(0);
61
- const pendingCommands = (0, react.useRef)(0);
62
63
  const activeNode = session.definition.nodes[snapshot.nodeId];
63
- const pendingEndOrderNavigation = ((_snapshot$pendingNavi = snapshot.pendingNavigation) === null || _snapshot$pendingNavi === void 0 ? void 0 : _snapshot$pendingNavi.request.kind) === "confirmEndOrder" ? snapshot.pendingNavigation : void 0;
64
- const pendingAutomaticExitNavigation = ((_snapshot$pendingNavi2 = snapshot.pendingNavigation) === null || _snapshot$pendingNavi2 === void 0 ? void 0 : _snapshot$pendingNavi2.request.kind) === "performSessionExit" ? snapshot.pendingNavigation : void 0;
65
- const endOrderConfirmationOpen = Boolean(pendingEndOrderNavigation);
66
- const currentScreenId = activeNode.screenId;
67
64
  const customizationStepId = session.definition.stepOrder.find((stepId) => {
68
65
  var _session$definition$n;
69
66
  return ((_session$definition$n = session.definition.nodes[stepId]) === null || _session$definition$n === void 0 ? void 0 : _session$definition$n.activity) === "customization";
70
67
  });
71
68
  const screenDataNode = (_session$definition$n2 = session.definition.nodes[snapshot.surface.pageStepId]) !== null && _session$definition$n2 !== void 0 ? _session$definition$n2 : activeNode;
72
69
  const paymentSafeForReset = sales.payment.status === "idle" || sales.payment.status === "failed";
73
- const resetSession = (0, react.useCallback)(require_asyncToGenerator._asyncToGenerator(function* () {
74
- if (resetInFlight.current) return;
75
- resetInFlight.current = true;
76
- setResetting(true);
77
- setResetError(void 0);
78
- sequence.current += 1;
79
- const result = yield returnToEntry("ui");
80
- if (result.status === "succeeded") return;
81
- resetInFlight.current = false;
82
- setResetting(false);
83
- setResetError(result.status === "failed" || result.status === "partialFailure" || result.status === "unknown" ? result.error : {
84
- code: "resetCancelled",
85
- source: "operation",
86
- recovery: "staff",
87
- safeMessageKey: "hdlKiosk.error.resetCancelled",
88
- traceId: `hdl-reset-cancelled-${Date.now()}`
89
- });
90
- }), [returnToEntry]);
70
+ const { endOrderConfirmationOpen, resetSession, requestEndOrder, cancelEndOrder, confirmEndOrder } = require_useHDLKioskExitController.useHDLKioskExitController({
71
+ session,
72
+ snapshot,
73
+ returnToEntry
74
+ });
75
+ const { send, commandState } = require_useHDLKioskActionDispatcher.useHDLKioskActionDispatcher({
76
+ session,
77
+ snapshot,
78
+ activityId: activeNode.activity,
79
+ resetSession
80
+ });
91
81
  const customer = require_useHDLKioskCustomerController.useHDLKioskCustomerController({
92
82
  session,
93
83
  snapshot,
@@ -95,7 +85,7 @@ function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderId
95
85
  activityId: activeNode.activity,
96
86
  isActive,
97
87
  loginAvailable: Boolean(renderIdentityAuth),
98
- interactionBlocked: resetting || commandState.busy
88
+ interactionBlocked: returning || commandState.busy
99
89
  });
100
90
  const requestMemberLogin = (0, react.useCallback)(() => {
101
91
  if (customer.canLogin && renderIdentityAuth) setMemberLoginOpen(true);
@@ -104,106 +94,27 @@ function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderId
104
94
  setMemberLoginOpen(false);
105
95
  customer.applyAuthenticatedCustomer(customerId);
106
96
  }, [customer.applyAuthenticatedCustomer]);
107
- const requestEndOrder = (0, react.useCallback)(() => {
108
- sequence.current += 1;
109
- session.actor.navigate({
110
- kind: "sessionExit",
111
- reason: "userRequest"
112
- }, `ui:${snapshot.sessionEpoch}:${sequence.current}`);
113
- }, [session, snapshot.sessionEpoch]);
114
97
  const editPrimaryProduct = (0, react.useCallback)(() => {
115
98
  if (!customizationStepId || customizationStepId === snapshot.nodeId) return;
116
- sequence.current += 1;
99
+ navigationSequence.current += 1;
117
100
  session.actor.navigate({
118
101
  kind: "step",
119
102
  stepId: customizationStepId
120
- }, `ui:edit-primary-product:${snapshot.sessionEpoch}:${sequence.current}`);
103
+ }, `ui:edit-primary-product:${snapshot.sessionEpoch}:${navigationSequence.current}`);
121
104
  }, [
122
105
  customizationStepId,
123
106
  session.actor,
124
107
  snapshot.nodeId,
125
108
  snapshot.sessionEpoch
126
109
  ]);
127
- const cancelEndOrder = (0, react.useCallback)(() => {
128
- if (!pendingEndOrderNavigation) return;
129
- session.actor.resolvePendingNavigation(pendingEndOrderNavigation.navigationId, "cancel");
130
- }, [pendingEndOrderNavigation, session.actor]);
131
- const confirmEndOrder = (0, react.useCallback)(() => {
132
- if (!pendingEndOrderNavigation || !session.actor.resolvePendingNavigation(pendingEndOrderNavigation.navigationId, "allow")) return;
133
- resetSession();
134
- }, [
135
- pendingEndOrderNavigation,
136
- resetSession,
137
- session.actor
138
- ]);
139
- (0, react.useEffect)(() => {
140
- if (!pendingAutomaticExitNavigation || !session.actor.resolvePendingNavigation(pendingAutomaticExitNavigation.navigationId, "allow")) return;
141
- resetSession();
142
- }, [
143
- pendingAutomaticExitNavigation,
144
- resetSession,
145
- session.actor
146
- ]);
147
110
  const { catalog, customization, payment } = require_useHDLKioskScreenData.useHDLKioskScreenData({
148
111
  host,
149
- currentScreenId: screenDataNode.screenId,
112
+ currentScreenId: screenDataNode.surfaceId,
150
113
  activity: screenDataNode.activity,
151
114
  isActive,
152
115
  primaryWeightedProductId: config.primaryWeightedProductId
153
116
  });
154
- (0, react.useEffect)(() => {
155
- commandGeneration.current += 1;
156
- pendingCommands.current = 0;
157
- setCommandState({ busy: false });
158
- setMemberLoginOpen(false);
159
- }, [session]);
160
- const send = (0, react.useCallback)((action) => {
161
- if (action.kind === "session") {
162
- resetSession();
163
- return;
164
- }
165
- sequence.current += 1;
166
- const intentId = `ui:${snapshot.sessionEpoch}:${sequence.current}`;
167
- if (action.kind === "intent" || action.kind === "navigation") {
168
- const event = require_workflowEvent.createWorkflowEvent(action, activeNode.activity, snapshot.nodeId, intentId);
169
- if (event) session.actor.send(event);
170
- return;
171
- }
172
- const generation = commandGeneration.current;
173
- pendingCommands.current += 1;
174
- setCommandState({
175
- busy: true,
176
- commandId: action.command
177
- });
178
- session.executeCommand(action.command, action.input, intentId).then((result) => {
179
- if (generation !== commandGeneration.current) return;
180
- pendingCommands.current = Math.max(0, pendingCommands.current - 1);
181
- setCommandState({
182
- busy: pendingCommands.current > 0,
183
- commandId: pendingCommands.current > 0 ? action.command : void 0,
184
- error: result.status === "failed" ? result.error : void 0
185
- });
186
- });
187
- }, [
188
- activeNode.activity,
189
- resetSession,
190
- session,
191
- snapshot.nodeId,
192
- snapshot.sessionEpoch
193
- ]);
194
- (0, react.useEffect)(() => {
195
- if (activeNode.activity !== "paymentMethod" || snapshot.status !== "idle" || sales.payment.status !== "succeeded") return;
196
- send({
197
- kind: "intent",
198
- activityId: "paymentMethod",
199
- intent: "complete"
200
- });
201
- }, [
202
- activeNode.activity,
203
- sales.payment.status,
204
- send,
205
- snapshot.status
206
- ]);
117
+ (0, react.useEffect)(() => setMemberLoginOpen(false), [session, snapshot.nodeId]);
207
118
  const memberAction = customer.visible ? {
208
119
  member: customer.member,
209
120
  memberName: customer.memberName,
@@ -213,7 +124,7 @@ function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderId
213
124
  errorReference: (_customer$error = customer.error) === null || _customer$error === void 0 ? void 0 : _customer$error.traceId,
214
125
  onLogin: requestMemberLogin
215
126
  } : void 0;
216
- const canEndOrder = snapshot.status === "idle" && !resetting && !snapshot.pendingNavigation && !commandState.busy && !customer.busy && paymentSafeForReset;
127
+ const canEndOrder = snapshot.status === "idle" && !returning && !snapshot.pendingNavigation && !commandState.busy && !customer.busy && paymentSafeForReset;
217
128
  const cartDrawerModel = (0, react.useMemo)(() => require_utils.createCartDrawerModel(sales, snapshot.context.primaryWeightedProductId), [sales, snapshot.context.primaryWeightedProductId]);
218
129
  const endOrderBottomBar = activeNode.activity === "paymentCompleted" ? void 0 : {
219
130
  ariaLabel: _pisell_utils.locales.getText("pisell2.hdl-kiosk.exit-order"),
@@ -228,23 +139,26 @@ function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderId
228
139
  "aria-hidden": "true"
229
140
  }, /* @__PURE__ */ react.default.createElement("path", { d: "m15 5-7 7 7 7M8 12h10" })), /* @__PURE__ */ react.default.createElement("span", null, _pisell_utils.locales.getText("pisell2.hdl-kiosk.back")))
230
141
  };
231
- if (resetError) return /* @__PURE__ */ react.default.createElement(require_index$4.HDLKioskShell, { snapshot }, /* @__PURE__ */ react.default.createElement(require_index$5.HDLKioskBottomBarHost, null, /* @__PURE__ */ react.default.createElement(require_index$1.HDLKioskHeader, null), /* @__PURE__ */ react.default.createElement("main", { className: "hdl-shell__main" }, /* @__PURE__ */ react.default.createElement(require_index$6.BlockingNotice, {
142
+ if (returnError) return /* @__PURE__ */ react.default.createElement(HDLKioskWorkflowBlockingSurface, {
143
+ snapshot,
232
144
  title: _pisell_utils.locales.getText("pisell2.hdl-kiosk.reset-failed-title"),
233
145
  description: _pisell_utils.locales.getText("pisell2.hdl-kiosk.reset-failed-description"),
234
- reference: resetError.traceId
235
- }))));
146
+ reference: returnError.traceId
147
+ });
236
148
  if (snapshot.status === "blocked") {
237
149
  var _snapshot$lastError;
238
- return /* @__PURE__ */ react.default.createElement(require_index$4.HDLKioskShell, { snapshot }, /* @__PURE__ */ react.default.createElement(require_index$5.HDLKioskBottomBarHost, { mode: "hidden" }, /* @__PURE__ */ react.default.createElement(require_index$1.HDLKioskHeader, null), /* @__PURE__ */ react.default.createElement("main", { className: "hdl-shell__main" }, /* @__PURE__ */ react.default.createElement(require_index$6.BlockingNotice, {
150
+ return /* @__PURE__ */ react.default.createElement(HDLKioskWorkflowBlockingSurface, {
151
+ snapshot,
239
152
  title: _pisell_utils.locales.getText("pisell2.hdl-kiosk.blocked-title"),
240
153
  description: _pisell_utils.locales.getText("pisell2.hdl-kiosk.blocked-description"),
241
- reference: (_snapshot$lastError = snapshot.lastError) === null || _snapshot$lastError === void 0 ? void 0 : _snapshot$lastError.traceId
242
- }))));
154
+ reference: (_snapshot$lastError = snapshot.lastError) === null || _snapshot$lastError === void 0 ? void 0 : _snapshot$lastError.traceId,
155
+ hideBottomBar: true
156
+ });
243
157
  }
244
158
  return /* @__PURE__ */ react.default.createElement(require_index$4.HDLKioskShell, {
245
159
  snapshot,
246
160
  memberAction,
247
- variant: currentScreenId === "identity" ? "identityGate" : "default"
161
+ variant: screenDataNode.surfaceId === "identity" ? "identityGate" : "default"
248
162
  }, /* @__PURE__ */ react.default.createElement(require_index$5.HDLKioskBottomBarHost, {
249
163
  mode: ((_activeNode$presentat = activeNode.presentation) === null || _activeNode$presentat === void 0 ? void 0 : _activeNode$presentat.mode) === "modal" || endOrderConfirmationOpen || memberLoginOpen ? "masked" : "visible",
250
164
  fallback: endOrderBottomBar,
@@ -259,7 +173,7 @@ function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderId
259
173
  sales,
260
174
  send,
261
175
  commandState,
262
- resetting,
176
+ resetting: returning,
263
177
  capabilities: host.capabilities,
264
178
  businessMode: config.businessMode,
265
179
  scaleMinimumWeightKg: config.scaleTriggerMinimumWeightKg,