@pisell/private-materials 6.12.168 → 6.12.170

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 (275) 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/components/common/HDLKioskSkuOptionsSelection/index.less +1 -1
  19. package/es/components/HDLKiosk/components/overlays/HDLKioskModal/index.less +1 -1
  20. package/es/components/HDLKiosk/components/shell/HDLKioskBottomBarHost/index.js +4 -1
  21. package/es/components/HDLKiosk/docs/00-/346/226/207/344/273/266/345/257/274/350/210/252.md +104 -167
  22. 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
  23. package/es/components/HDLKiosk/docs/02-Host/351/200/202/351/205/215/344/270/216/344/270/232/345/212/241/346/225/260/346/215/256.md +20 -19
  24. package/es/components/HDLKiosk/docs/04-/350/256/276/345/244/207/344/270/216/347/247/260/351/207/215.md +43 -26
  25. package/es/components/HDLKiosk/docs/05-/344/272/244/346/230/223/345/256/211/345/205/250.md +2 -0
  26. 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
  27. 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
  28. package/es/components/HDLKiosk/docs/README.md +6 -2
  29. package/es/components/HDLKiosk/docs//345/256/236/346/226/275/350/277/233/345/272/246.md +8 -7
  30. package/es/components/HDLKiosk/docs//346/236/266/346/236/204/350/256/276/350/256/241.md +16 -18
  31. package/es/components/HDLKiosk/index.js +32 -30
  32. package/es/components/HDLKiosk/index.less +8 -3
  33. package/es/components/HDLKiosk/kernel/README.md +13 -12
  34. package/es/components/HDLKiosk/kernel/application/defineApplication.js +63 -24
  35. package/es/components/HDLKiosk/kernel/application/defineSlice.js +6 -6
  36. package/es/components/HDLKiosk/kernel/application/runtime.js +237 -0
  37. package/es/components/HDLKiosk/kernel/operations/coordinator.js +1 -1
  38. package/es/components/HDLKiosk/kernel/operations/registry.js +3 -3
  39. package/es/components/HDLKiosk/kernel/operations/sessionEpoch.js +1 -1
  40. package/es/components/HDLKiosk/kernel/operations/types.js +7 -3
  41. package/es/components/HDLKiosk/kernel/workflow/actor.js +16 -17
  42. package/es/components/HDLKiosk/kernel/workflow/compiler.js +14 -16
  43. package/es/components/HDLKiosk/runtime/createRuntime.js +238 -0
  44. package/es/components/HDLKiosk/{devices → runtime/devices}/dedupeStore.js +1 -1
  45. package/es/components/HDLKiosk/{devices → runtime/devices}/scaleIngress.js +1 -1
  46. package/es/components/HDLKiosk/{devices/scale/runtime.js → runtime/devices/scaleStore.js} +18 -24
  47. package/es/components/HDLKiosk/{devices → runtime/devices}/scannerIngress.js +1 -1
  48. package/es/components/HDLKiosk/runtime/devices/scannerSessionPort.js +60 -0
  49. package/es/components/HDLKiosk/runtime/devices/scannerSessionRouter.js +212 -0
  50. package/es/components/HDLKiosk/runtime/operations/barcode.js +18 -0
  51. package/es/components/HDLKiosk/runtime/operations/cart.js +44 -0
  52. package/es/components/HDLKiosk/{app → runtime}/operations/cartConsistency.js +1 -1
  53. package/es/components/HDLKiosk/{app → runtime}/operations/checkout.js +95 -110
  54. package/es/components/HDLKiosk/{app → runtime}/operations/checkoutRequirements.js +1 -1
  55. package/es/components/HDLKiosk/{app → runtime}/operations/checkoutSafety.js +1 -1
  56. package/es/components/HDLKiosk/{app → runtime}/operations/coordinator.js +2 -2
  57. package/es/components/HDLKiosk/runtime/operations/customization.js +70 -0
  58. package/es/components/HDLKiosk/{app → runtime}/operations/errors.js +1 -1
  59. package/es/components/HDLKiosk/runtime/operations/fulfillment.js +6 -0
  60. package/es/components/HDLKiosk/runtime/operations/identity.js +55 -0
  61. package/es/components/HDLKiosk/runtime/operations/registry.js +34 -0
  62. package/es/components/HDLKiosk/runtime/operations/session.js +29 -0
  63. package/es/components/HDLKiosk/runtime/operations/types.js +13 -0
  64. package/es/components/HDLKiosk/runtime/session/blockPolicy.js +14 -0
  65. package/es/components/HDLKiosk/runtime/{createWorkflowSession.js → session/createSession.js} +67 -17
  66. package/es/components/HDLKiosk/runtime/{domainTransitionRunner.js → session/transitionRunner.js} +10 -5
  67. package/es/components/HDLKiosk/runtime/{workflowContext.js → session/workflowContext.js} +2 -2
  68. package/es/components/HDLKiosk/runtime/{workflowLifecycle.js → session/workflowLifecycle.js} +2 -2
  69. package/es/components/HDLKiosk/runtime/triggers.js +28 -0
  70. package/es/components/HDLKiosk/slices/catalog/Screen/index.js +15 -8
  71. package/es/components/HDLKiosk/slices/catalog/Screen/index.less +74 -13
  72. package/es/components/HDLKiosk/slices/catalog/slice.js +2 -2
  73. package/es/components/HDLKiosk/slices/customization/Screen/index.js +34 -35
  74. package/es/components/HDLKiosk/slices/customization/Screen/index.less +5 -0
  75. package/es/components/HDLKiosk/slices/customization/slice.js +2 -3
  76. package/es/components/HDLKiosk/slices/fulfillment/slice.js +2 -2
  77. package/es/components/HDLKiosk/slices/fulfillment/view.js +1 -1
  78. package/es/components/HDLKiosk/slices/identity/Screen/index.less +1 -1
  79. package/es/components/HDLKiosk/slices/identity/slice.js +2 -2
  80. package/es/components/HDLKiosk/slices/identity/view.js +1 -1
  81. package/es/components/HDLKiosk/slices/payment/Screen/index.less +1 -1
  82. package/es/components/HDLKiosk/slices/payment/slice.js +3 -3
  83. package/es/components/HDLKiosk/slices/primaryProductPrompt/slice.js +1 -1
  84. package/es/components/HDLKiosk/{runtime → ui}/HDLKioskWorkflowView.js +68 -129
  85. package/es/components/HDLKiosk/ui/ScaleSimulatorConsole/index.js +387 -0
  86. package/es/components/HDLKiosk/ui/ScaleSimulatorConsole/index.less +621 -0
  87. package/es/components/HDLKiosk/{app → ui}/ScreenRenderer.js +1 -1
  88. package/es/components/HDLKiosk/ui/collaborationStatus.js +11 -0
  89. package/es/components/HDLKiosk/ui/controllers/useHDLKioskActionDispatcher.js +66 -0
  90. package/es/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskCustomerController.js +1 -1
  91. package/es/components/HDLKiosk/ui/controllers/useHDLKioskDeviceController.js +25 -0
  92. package/es/components/HDLKiosk/ui/controllers/useHDLKioskExitController.js +53 -0
  93. package/es/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskScreenData.js +1 -1
  94. package/es/components/HDLKiosk/ui/controllers/useHDLKioskSessionController.js +39 -0
  95. package/es/components/HDLKiosk/{app → ui}/entry/Screen/index.js +8 -6
  96. package/es/components/HDLKiosk/{app → ui}/entry/model.js +2 -2
  97. package/es/components/HDLKiosk/ui/scale.js +20 -0
  98. package/es/components/HDLKiosk/{runtime/useHostSnapshot.js → ui/snapshots.js} +6 -8
  99. package/es/components/HDLKiosk/{app → ui}/views.js +1 -1
  100. package/es/components/HDLKiosk/{runtime → ui}/workflowEvent.js +1 -1
  101. package/es/components/HDLKiosk/utils.js +4 -4
  102. package/es/components/bigSale/templates/HDLKiosk/README.md +43 -0
  103. package/es/components/bigSale/templates/HDLKiosk/adapter/createHost.js +7 -7
  104. package/es/components/bigSale/templates/HDLKiosk/adapter/{devices.js → devices/devicePort.js} +10 -38
  105. package/es/components/bigSale/templates/HDLKiosk/adapter/{capabilities.js → host/capabilities.js} +2 -2
  106. package/es/components/bigSale/templates/HDLKiosk/adapter/{fulfillment.js → host/fulfillmentWriter.js} +3 -3
  107. package/es/components/bigSale/templates/HDLKiosk/adapter/{projection.js → host/projection.js} +24 -14
  108. package/es/components/bigSale/templates/HDLKiosk/adapter/{telemetry.js → host/telemetry.js} +1 -1
  109. package/es/components/bigSale/templates/HDLKiosk/adapter/sales/cart.js +187 -0
  110. package/es/components/bigSale/templates/HDLKiosk/adapter/sales/catalog.js +160 -0
  111. package/es/components/bigSale/templates/HDLKiosk/adapter/{customizationProduct.js → sales/customizationProduct.js} +3 -3
  112. package/es/components/bigSale/templates/HDLKiosk/adapter/sales/fulfillment.js +31 -0
  113. package/es/components/bigSale/templates/HDLKiosk/adapter/sales/identity.js +57 -0
  114. package/es/components/bigSale/templates/HDLKiosk/adapter/sales/index.js +18 -0
  115. package/es/components/bigSale/templates/HDLKiosk/adapter/sales/payment.js +123 -0
  116. package/es/components/bigSale/templates/HDLKiosk/adapter/sales/session.js +71 -0
  117. package/es/components/bigSale/templates/HDLKiosk/adapter/sales/weightedOperations.js +124 -0
  118. package/es/components/bigSale/templates/HDLKiosk/adapter/{weightedProduct.js → sales/weightedProduct.js} +2 -2
  119. package/es/components/bigSale/templates/HDLKiosk/adapter/useBigSaleHDLKioskAdapter.js +41 -0
  120. package/es/components/bigSale/templates/HDLKiosk/adapter/useBigSaleHDLKioskHost.js +10 -7
  121. package/es/components/bigSale/templates/HDLKiosk/cart/useBigSaleHDLKioskCart.js +122 -0
  122. package/es/components/bigSale/templates/HDLKiosk/{adapter → hooks}/useHDLKioskEntryPreparationToast.js +2 -1
  123. package/es/components/bigSale/templates/HDLKiosk/index.js +42 -148
  124. package/es/components/bigSale/templates/HDLKiosk/{adapter/scaleTrigger.js → runtime/BigSaleScaleRuntimeOwner.js} +33 -62
  125. package/es/components/bigSale/templates/HDLKiosk/{adapter → runtime}/HDLKioskPaymentRuntime.js +4 -3
  126. package/es/components/bigSale/templates/HDLKiosk/runtime/scaleBridge.js +44 -0
  127. package/lib/components/HDLKiosk/{contracts → app/contracts}/config.js +1 -1
  128. package/lib/components/HDLKiosk/app/manifest.js +18 -19
  129. package/lib/components/HDLKiosk/app/operations.js +105 -0
  130. package/lib/components/HDLKiosk/app/workflow/barcode.js +7 -3
  131. package/lib/components/HDLKiosk/app/workflow/index.js +16 -0
  132. package/lib/components/HDLKiosk/app/workflow/predicates.js +1 -0
  133. package/lib/components/HDLKiosk/app/workflow/quick.js +1 -1
  134. package/lib/components/HDLKiosk/app/workflow/registry.js +3 -3
  135. package/lib/components/HDLKiosk/app/workflow/scale.js +5 -1
  136. package/lib/components/HDLKiosk/components/common/HDLKioskSkuOptionsSelection/index.less +1 -1
  137. package/lib/components/HDLKiosk/components/overlays/HDLKioskModal/index.less +1 -1
  138. package/lib/components/HDLKiosk/components/shell/HDLKioskBottomBarHost/index.js +4 -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/02-Host/351/200/202/351/205/215/344/270/216/344/270/232/345/212/241/346/225/260/346/215/256.md +20 -19
  142. package/lib/components/HDLKiosk/docs/04-/350/256/276/345/244/207/344/270/216/347/247/260/351/207/215.md +43 -26
  143. package/lib/components/HDLKiosk/docs/05-/344/272/244/346/230/223/345/256/211/345/205/250.md +2 -0
  144. 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
  145. 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
  146. package/lib/components/HDLKiosk/docs/README.md +6 -2
  147. package/lib/components/HDLKiosk/docs//345/256/236/346/226/275/350/277/233/345/272/246.md +8 -7
  148. package/lib/components/HDLKiosk/docs//346/236/266/346/236/204/350/256/276/350/256/241.md +16 -18
  149. package/lib/components/HDLKiosk/index.js +35 -33
  150. package/lib/components/HDLKiosk/index.less +8 -3
  151. package/lib/components/HDLKiosk/kernel/README.md +13 -12
  152. package/lib/components/HDLKiosk/kernel/application/defineApplication.js +65 -25
  153. package/lib/components/HDLKiosk/kernel/application/defineSlice.js +6 -6
  154. package/lib/components/HDLKiosk/kernel/application/runtime.js +237 -0
  155. package/lib/components/HDLKiosk/kernel/operations/coordinator.js +1 -1
  156. package/lib/components/HDLKiosk/kernel/operations/registry.js +3 -3
  157. package/lib/components/HDLKiosk/kernel/operations/sessionEpoch.js +1 -1
  158. package/lib/components/HDLKiosk/kernel/operations/types.js +8 -3
  159. package/lib/components/HDLKiosk/kernel/workflow/actor.js +16 -17
  160. package/lib/components/HDLKiosk/kernel/workflow/compiler.js +14 -16
  161. package/lib/components/HDLKiosk/runtime/createRuntime.js +239 -0
  162. package/lib/components/HDLKiosk/{devices → runtime/devices}/dedupeStore.js +1 -1
  163. package/lib/components/HDLKiosk/{devices → runtime/devices}/scaleIngress.js +1 -1
  164. package/lib/components/HDLKiosk/{devices/scale/runtime.js → runtime/devices/scaleStore.js} +17 -27
  165. package/lib/components/HDLKiosk/{devices → runtime/devices}/scannerIngress.js +1 -1
  166. package/lib/components/HDLKiosk/runtime/devices/scannerSessionPort.js +60 -0
  167. package/lib/components/HDLKiosk/runtime/devices/scannerSessionRouter.js +212 -0
  168. package/lib/components/HDLKiosk/runtime/operations/barcode.js +17 -0
  169. package/lib/components/HDLKiosk/runtime/operations/cart.js +46 -0
  170. package/lib/components/HDLKiosk/{app → runtime}/operations/cartConsistency.js +1 -1
  171. package/lib/components/HDLKiosk/{app → runtime}/operations/checkout.js +97 -112
  172. package/lib/components/HDLKiosk/{app → runtime}/operations/checkoutRequirements.js +1 -1
  173. package/lib/components/HDLKiosk/{app → runtime}/operations/checkoutSafety.js +1 -1
  174. package/lib/components/HDLKiosk/{app → runtime}/operations/coordinator.js +2 -2
  175. package/lib/components/HDLKiosk/runtime/operations/customization.js +73 -0
  176. package/lib/components/HDLKiosk/{app → runtime}/operations/errors.js +1 -1
  177. package/lib/components/HDLKiosk/runtime/operations/fulfillment.js +5 -0
  178. package/lib/components/HDLKiosk/runtime/operations/identity.js +55 -0
  179. package/lib/components/HDLKiosk/runtime/operations/registry.js +34 -0
  180. package/lib/components/HDLKiosk/runtime/operations/session.js +30 -0
  181. package/lib/components/HDLKiosk/runtime/operations/types.js +14 -0
  182. package/lib/components/HDLKiosk/runtime/session/blockPolicy.js +14 -0
  183. package/lib/components/HDLKiosk/runtime/{createWorkflowSession.js → session/createSession.js} +71 -21
  184. package/lib/components/HDLKiosk/runtime/{domainTransitionRunner.js → session/transitionRunner.js} +10 -5
  185. package/lib/components/HDLKiosk/runtime/{workflowContext.js → session/workflowContext.js} +2 -2
  186. package/lib/components/HDLKiosk/runtime/{workflowLifecycle.js → session/workflowLifecycle.js} +2 -2
  187. package/lib/components/HDLKiosk/runtime/triggers.js +28 -0
  188. package/lib/components/HDLKiosk/slices/catalog/Screen/index.js +15 -8
  189. package/lib/components/HDLKiosk/slices/catalog/Screen/index.less +74 -13
  190. package/lib/components/HDLKiosk/slices/catalog/slice.js +3 -3
  191. package/lib/components/HDLKiosk/slices/customization/Screen/index.js +35 -36
  192. package/lib/components/HDLKiosk/slices/customization/Screen/index.less +5 -0
  193. package/lib/components/HDLKiosk/slices/customization/slice.js +5 -6
  194. package/lib/components/HDLKiosk/slices/fulfillment/slice.js +3 -3
  195. package/lib/components/HDLKiosk/slices/fulfillment/view.js +1 -1
  196. package/lib/components/HDLKiosk/slices/identity/Screen/index.less +1 -1
  197. package/lib/components/HDLKiosk/slices/identity/slice.js +4 -4
  198. package/lib/components/HDLKiosk/slices/identity/view.js +1 -1
  199. package/lib/components/HDLKiosk/slices/payment/Screen/index.less +1 -1
  200. package/lib/components/HDLKiosk/slices/payment/slice.js +5 -5
  201. package/lib/components/HDLKiosk/slices/primaryProductPrompt/slice.js +1 -1
  202. package/lib/components/HDLKiosk/{runtime → ui}/HDLKioskWorkflowView.js +69 -130
  203. package/lib/components/HDLKiosk/ui/ScaleSimulatorConsole/index.js +390 -0
  204. package/lib/components/HDLKiosk/ui/ScaleSimulatorConsole/index.less +621 -0
  205. package/lib/components/HDLKiosk/{app → ui}/ScreenRenderer.js +1 -1
  206. package/lib/components/HDLKiosk/ui/collaborationStatus.js +11 -0
  207. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskActionDispatcher.js +67 -0
  208. package/lib/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskCustomerController.js +1 -1
  209. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskDeviceController.js +26 -0
  210. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskExitController.js +54 -0
  211. package/lib/components/HDLKiosk/{runtime → ui}/controllers/useHDLKioskScreenData.js +1 -1
  212. package/lib/components/HDLKiosk/ui/controllers/useHDLKioskSessionController.js +40 -0
  213. package/lib/components/HDLKiosk/{app → ui}/entry/Screen/index.js +8 -6
  214. package/lib/components/HDLKiosk/{app → ui}/entry/model.js +2 -2
  215. package/lib/components/HDLKiosk/ui/scale.js +24 -0
  216. package/lib/components/HDLKiosk/{runtime/useHostSnapshot.js → ui/snapshots.js} +6 -7
  217. package/lib/components/HDLKiosk/{app → ui}/views.js +1 -1
  218. package/lib/components/HDLKiosk/{runtime → ui}/workflowEvent.js +1 -1
  219. package/lib/components/HDLKiosk/utils.js +4 -4
  220. package/lib/components/bigSale/templates/HDLKiosk/README.md +43 -0
  221. package/lib/components/bigSale/templates/HDLKiosk/adapter/createHost.js +9 -9
  222. package/lib/components/bigSale/templates/HDLKiosk/adapter/{devices.js → devices/devicePort.js} +10 -38
  223. package/lib/components/bigSale/templates/HDLKiosk/adapter/{capabilities.js → host/capabilities.js} +2 -2
  224. package/lib/components/bigSale/templates/HDLKiosk/adapter/{fulfillment.js → host/fulfillmentWriter.js} +3 -3
  225. package/lib/components/bigSale/templates/HDLKiosk/adapter/{projection.js → host/projection.js} +25 -14
  226. package/lib/components/bigSale/templates/HDLKiosk/adapter/{telemetry.js → host/telemetry.js} +1 -1
  227. package/lib/components/bigSale/templates/HDLKiosk/adapter/sales/cart.js +189 -0
  228. package/lib/components/bigSale/templates/HDLKiosk/adapter/sales/catalog.js +162 -0
  229. package/lib/components/bigSale/templates/HDLKiosk/adapter/{customizationProduct.js → sales/customizationProduct.js} +4 -4
  230. package/lib/components/bigSale/templates/HDLKiosk/adapter/sales/fulfillment.js +31 -0
  231. package/lib/components/bigSale/templates/HDLKiosk/adapter/sales/identity.js +57 -0
  232. package/lib/components/bigSale/templates/HDLKiosk/adapter/sales/index.js +18 -0
  233. package/lib/components/bigSale/templates/HDLKiosk/adapter/sales/payment.js +123 -0
  234. package/lib/components/bigSale/templates/HDLKiosk/adapter/sales/session.js +71 -0
  235. package/lib/components/bigSale/templates/HDLKiosk/adapter/sales/weightedOperations.js +126 -0
  236. package/lib/components/bigSale/templates/HDLKiosk/adapter/{weightedProduct.js → sales/weightedProduct.js} +3 -3
  237. package/lib/components/bigSale/templates/HDLKiosk/adapter/useBigSaleHDLKioskAdapter.js +42 -0
  238. package/lib/components/bigSale/templates/HDLKiosk/adapter/useBigSaleHDLKioskHost.js +10 -7
  239. package/lib/components/bigSale/templates/HDLKiosk/cart/useBigSaleHDLKioskCart.js +124 -0
  240. package/lib/components/bigSale/templates/HDLKiosk/{adapter → hooks}/useHDLKioskEntryPreparationToast.js +2 -1
  241. package/lib/components/bigSale/templates/HDLKiosk/index.js +43 -149
  242. package/lib/components/bigSale/templates/HDLKiosk/{adapter/scaleTrigger.js → runtime/BigSaleScaleRuntimeOwner.js} +31 -61
  243. package/lib/components/bigSale/templates/HDLKiosk/{adapter → runtime}/HDLKioskPaymentRuntime.js +4 -3
  244. package/lib/components/bigSale/templates/HDLKiosk/runtime/scaleBridge.js +44 -0
  245. package/package.json +2 -2
  246. package/es/components/HDLKiosk/app/constants.js +0 -9
  247. package/es/components/HDLKiosk/app/operations/barcode.js +0 -22
  248. package/es/components/HDLKiosk/app/operations/cart.js +0 -60
  249. package/es/components/HDLKiosk/app/operations/fulfillment.js +0 -11
  250. package/es/components/HDLKiosk/app/operations/session.js +0 -41
  251. package/es/components/HDLKiosk/app/operations/types.js +0 -11
  252. package/es/components/HDLKiosk/devices/entryArbiter.js +0 -33
  253. package/es/components/HDLKiosk/runtime/controllers/useHDLKioskDeviceController.js +0 -75
  254. package/es/components/HDLKiosk/runtime/controllers/useHDLKioskScannerController.js +0 -160
  255. package/es/components/HDLKiosk/runtime/controllers/useHDLKioskSessionController.js +0 -185
  256. package/es/components/HDLKiosk/runtime/useWorkflowSnapshot.js +0 -12
  257. package/es/components/HDLKiosk/slices/customization/operation.js +0 -80
  258. package/es/components/HDLKiosk/slices/identity/operation.js +0 -60
  259. package/es/components/bigSale/templates/HDLKiosk/adapter/sales.js +0 -692
  260. package/lib/components/HDLKiosk/app/constants.js +0 -9
  261. package/lib/components/HDLKiosk/app/operations/barcode.js +0 -21
  262. package/lib/components/HDLKiosk/app/operations/cart.js +0 -62
  263. package/lib/components/HDLKiosk/app/operations/fulfillment.js +0 -10
  264. package/lib/components/HDLKiosk/app/operations/session.js +0 -42
  265. package/lib/components/HDLKiosk/app/operations/types.js +0 -12
  266. package/lib/components/HDLKiosk/devices/entryArbiter.js +0 -33
  267. package/lib/components/HDLKiosk/runtime/controllers/useHDLKioskDeviceController.js +0 -76
  268. package/lib/components/HDLKiosk/runtime/controllers/useHDLKioskScannerController.js +0 -161
  269. package/lib/components/HDLKiosk/runtime/controllers/useHDLKioskSessionController.js +0 -186
  270. package/lib/components/HDLKiosk/runtime/useWorkflowSnapshot.js +0 -13
  271. package/lib/components/HDLKiosk/slices/customization/operation.js +0 -83
  272. package/lib/components/HDLKiosk/slices/identity/operation.js +0 -60
  273. package/lib/components/bigSale/templates/HDLKiosk/adapter/sales.js +0 -694
  274. /package/es/components/HDLKiosk/{app → ui}/entry/Screen/index.less +0 -0
  275. /package/lib/components/HDLKiosk/{app → ui}/entry/Screen/index.less +0 -0
@@ -1,9 +0,0 @@
1
- //#region src/components/HDLKiosk/app/constants.ts
2
- /** HDLKiosk 应用级稳定常量;不包含可由宿主或 Workflow 定义覆盖的业务行为。 */
3
- const HDL_WORKFLOW_IDS = Object.freeze([
4
- "hdl.quick",
5
- "hdl.barcode",
6
- "hdl.scale"
7
- ]);
8
- //#endregion
9
- exports.HDL_WORKFLOW_IDS = HDL_WORKFLOW_IDS;
@@ -1,21 +0,0 @@
1
- const require_asyncToGenerator = require("../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
2
- const require_cartConsistency = require("./cartConsistency.js");
3
- //#region src/components/HDLKiosk/app/operations/barcode.ts
4
- const barcodeConsumeOperation = require("./types.js").defineOperation({
5
- id: "barcode.consume",
6
- conflictScope: "cart",
7
- retry: "explicit-user",
8
- execute: function() {
9
- var _ref = require_asyncToGenerator._asyncToGenerator(function* (context, input, signal) {
10
- const beforeFingerprint = context.host.sales.getObservedSnapshot().fingerprint.value;
11
- const mutation = yield context.host.sales.consumeBarcode(input.code, signal);
12
- if (mutation.status === "succeeded" && mutation.data.code === "requiresSelection") return mutation;
13
- return require_cartConsistency.finalizeCartMutation(context, mutation, signal, () => mutation.status === "succeeded" && mutation.data.code === "added" && mutation.data.cartChangeConfirmed === true || context.host.sales.getObservedSnapshot().fingerprint.value !== beforeFingerprint);
14
- });
15
- return function execute(_x, _x2, _x3) {
16
- return _ref.apply(this, arguments);
17
- };
18
- }()
19
- });
20
- //#endregion
21
- exports.barcodeConsumeOperation = barcodeConsumeOperation;
@@ -1,62 +0,0 @@
1
- const require_asyncToGenerator = require("../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
2
- const require_cartConsistency = require("./cartConsistency.js");
3
- const require_types = require("./types.js");
4
- //#region src/components/HDLKiosk/app/operations/cart.ts
5
- const cartAddProductOperation = require_types.defineOperation({
6
- id: "cart.addProduct",
7
- conflictScope: "cart",
8
- retry: "explicit-user",
9
- execute: function() {
10
- var _ref = require_asyncToGenerator._asyncToGenerator(function* (context, input, signal) {
11
- return require_cartConsistency.finalizeCartMutation(context, yield context.host.sales.addProduct(input, signal), signal);
12
- });
13
- return function execute(_x, _x2, _x3) {
14
- return _ref.apply(this, arguments);
15
- };
16
- }()
17
- });
18
- const cartUpdateQuantityOperation = require_types.defineOperation({
19
- id: "cart.updateQuantity",
20
- conflictScope: "cart",
21
- timeoutMs: 15e3,
22
- retry: "explicit-user",
23
- execute: function() {
24
- var _ref2 = require_asyncToGenerator._asyncToGenerator(function* (context, input, signal) {
25
- const mutation = yield context.host.sales.updateQuantity(input, signal);
26
- return require_cartConsistency.finalizeCartMutation(context, mutation, signal, () => {
27
- var _mutation$data$confir;
28
- if (mutation.status === "succeeded" && mutation.data.affectedLineId === input.lineId && ((_mutation$data$confir = mutation.data.confirmedLine) === null || _mutation$data$confir === void 0 ? void 0 : _mutation$data$confir.lineId) === input.lineId && decimalValuesEqual(mutation.data.confirmedLine.quantity, input.quantity)) return true;
29
- const line = context.host.sales.getObservedSnapshot().cart.lines.find((item) => item.lineId === input.lineId);
30
- return decimalValuesEqual(line === null || line === void 0 ? void 0 : line.quantity, input.quantity);
31
- });
32
- });
33
- return function execute(_x4, _x5, _x6) {
34
- return _ref2.apply(this, arguments);
35
- };
36
- }()
37
- });
38
- function decimalValuesEqual(left, right) {
39
- if (left === void 0) return false;
40
- const leftNumber = Number(left);
41
- const rightNumber = Number(right);
42
- return Number.isFinite(leftNumber) && Number.isFinite(rightNumber) && leftNumber === rightNumber;
43
- }
44
- const cartRemoveLineOperation = require_types.defineOperation({
45
- id: "cart.removeLine",
46
- conflictScope: "cart",
47
- timeoutMs: 15e3,
48
- retry: "explicit-user",
49
- execute: function() {
50
- var _ref3 = require_asyncToGenerator._asyncToGenerator(function* (context, input, signal) {
51
- const mutation = yield context.host.sales.removeLine(input, signal);
52
- return require_cartConsistency.finalizeCartMutation(context, mutation, signal, () => mutation.status === "succeeded" && mutation.data.removedLineId === input.lineId || !context.host.sales.getObservedSnapshot().cart.lines.some((item) => item.lineId === input.lineId));
53
- });
54
- return function execute(_x7, _x8, _x9) {
55
- return _ref3.apply(this, arguments);
56
- };
57
- }()
58
- });
59
- //#endregion
60
- exports.cartAddProductOperation = cartAddProductOperation;
61
- exports.cartRemoveLineOperation = cartRemoveLineOperation;
62
- exports.cartUpdateQuantityOperation = cartUpdateQuantityOperation;
@@ -1,10 +0,0 @@
1
- //#region src/components/HDLKiosk/app/operations/fulfillment.ts
2
- const setFulfillmentOperation = require("./types.js").defineOperation({
3
- id: "fulfillment.set",
4
- conflictScope: "cart",
5
- timeoutMs: 2e4,
6
- retry: "explicit-user",
7
- execute: (context, input, signal) => context.host.sales.setFulfillment(input, signal)
8
- });
9
- //#endregion
10
- exports.setFulfillmentOperation = setFulfillmentOperation;
@@ -1,42 +0,0 @@
1
- const require_asyncToGenerator = require("../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
2
- const require_errors = require("./errors.js");
3
- const require_types = require("./types.js");
4
- //#region src/components/HDLKiosk/app/operations/session.ts
5
- function forwardFailure(result) {
6
- return result;
7
- }
8
- const sessionEnsureOperation = require_types.defineOperation({
9
- id: "session.ensure",
10
- conflictScope: "session",
11
- timeoutMs: 15e3,
12
- retry: "explicit-user",
13
- execute: ({ host }, _input, signal) => host.sales.ensureSession(signal)
14
- });
15
- const sessionResetOperation = require_types.defineOperation({
16
- id: "session.reset",
17
- tags: ["session-reset"],
18
- conflictScope: "session",
19
- timeoutMs: 15e3,
20
- retry: "never",
21
- execute: function() {
22
- var _ref = require_asyncToGenerator._asyncToGenerator(function* ({ host }, _input, signal) {
23
- const before = host.sales.getObservedSnapshot();
24
- if (before.payment.status === "pending" || before.payment.status === "unknown") return require_errors.operationUnknown("resetBlockedByPaymentState");
25
- const reset = yield host.sales.clearAndReset(signal);
26
- if (reset.status !== "succeeded") return forwardFailure(reset);
27
- if (!reset.data.cartEmpty) return require_errors.operationUnknown("resetHostResultNotEmpty");
28
- const consistency = yield host.sales.waitForCartConsistency(signal);
29
- if (consistency.status !== "succeeded") return forwardFailure(consistency);
30
- return {
31
- status: "succeeded",
32
- data: void 0
33
- };
34
- });
35
- return function execute(_x, _x2, _x3) {
36
- return _ref.apply(this, arguments);
37
- };
38
- }()
39
- });
40
- //#endregion
41
- exports.sessionEnsureOperation = sessionEnsureOperation;
42
- exports.sessionResetOperation = sessionResetOperation;
@@ -1,12 +0,0 @@
1
- const require_registry = require("../../kernel/operations/registry.js");
2
- const require_types = require("../../kernel/operations/types.js");
3
- //#region src/components/HDLKiosk/app/operations/types.ts
4
- function defineOperation(operation) {
5
- return require_types.defineKernelOperation(operation);
6
- }
7
- function createOperationRegistry(operations) {
8
- return require_registry.createKernelOperationRegistry(operations);
9
- }
10
- //#endregion
11
- exports.createOperationRegistry = createOperationRegistry;
12
- exports.defineOperation = defineOperation;
@@ -1,33 +0,0 @@
1
- //#region src/components/HDLKiosk/devices/entryArbiter.ts
2
- /**
3
- * JS 同一执行上下文内同步锁定第一个入口。它不持有 Workflow,也不执行副作用。
4
- */
5
- function createEntryArbiter() {
6
- let active;
7
- return {
8
- claim: (entry) => {
9
- if (active === void 0) {
10
- active = entry;
11
- return {
12
- status: "accepted",
13
- entry
14
- };
15
- }
16
- if (active === entry) return {
17
- status: "accepted",
18
- entry
19
- };
20
- return {
21
- status: "rejected",
22
- reason: "workflowLocked",
23
- activeEntry: active
24
- };
25
- },
26
- activeEntry: () => active,
27
- reset: () => {
28
- active = void 0;
29
- }
30
- };
31
- }
32
- //#endregion
33
- exports.createEntryArbiter = createEntryArbiter;
@@ -1,76 +0,0 @@
1
- require("../../../../_virtual/_rolldown/runtime.js");
2
- const require_asyncToGenerator = require("../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
3
- let react = require("react");
4
- //#region src/components/HDLKiosk/runtime/controllers/useHDLKioskDeviceController.ts
5
- /**
6
- * 文件角色:连接 Scale Port、入口 Ingress 与会话启动器。
7
- * 运行机制:Entry 可见时消费称重边沿并请求 Scale Session;持续读数由 Scale Runtime 管理。
8
- * 边界:Scanner 由独立的 Session 级 Scanner Controller 持有。
9
- */
10
- function useHDLKioskDeviceController({ host, config, isActive, starting, session, sessionRef, activeRef, scaleIngress, start }) {
11
- const [scaleConnectionState, setScaleConnectionState] = (0, react.useState)();
12
- const rejectionSequence = (0, react.useRef)(0);
13
- const scaleAvailable = host.capabilities.scale.available;
14
- const scaleWeightChangeTrigger = host.capabilities.scale.weightChangeTrigger;
15
- (0, react.useEffect)(() => {
16
- setScaleConnectionState(void 0);
17
- }, [host]);
18
- const rejectDeviceEvent = (0, react.useCallback)((event, reason) => {
19
- rejectionSequence.current += 1;
20
- try {
21
- host.telemetry.emit({
22
- name: "hdlKiosk.device.eventRejected",
23
- traceId: `hdl-device-rejected-${rejectionSequence.current}`,
24
- occurredAt: Date.now(),
25
- attributes: {
26
- eventType: event.type,
27
- reason
28
- }
29
- });
30
- } catch (_unused) {}
31
- }, [host]);
32
- (0, react.useEffect)(() => {
33
- const primaryWeightedProductId = config.primaryWeightedProductId;
34
- if (!isActive || starting || !primaryWeightedProductId) return;
35
- if (session) return void 0;
36
- return host.devices.subscribe((event) => {
37
- if (!activeRef.current) return;
38
- if (event.type === "connectionChanged" && event.device === "scale") {
39
- var _event$state;
40
- setScaleConnectionState((_event$state = event.state) !== null && _event$state !== void 0 ? _event$state : event.connected ? "connected" : "disconnected");
41
- return;
42
- }
43
- if (event.type !== "weightChanged") return;
44
- const activeSession = sessionRef.current;
45
- const result = scaleIngress.accept(event, {
46
- active: activeRef.current,
47
- supported: scaleAvailable && scaleWeightChangeTrigger && config.enabledEntries.includes("scale"),
48
- workflowLocked: Boolean(activeSession),
49
- nodeAcceptsEvent: !activeSession,
50
- paymentFrozen: false
51
- });
52
- if (result.status === "rejected") {
53
- rejectDeviceEvent(event, result.reason);
54
- return;
55
- }
56
- require_asyncToGenerator._asyncToGenerator(function* () {
57
- if (!(yield start({ entry: "scale" }))) rejectDeviceEvent(event, "sessionStartFailed");
58
- })();
59
- }, { sources: ["scale"] });
60
- }, [
61
- config.enabledEntries,
62
- config.primaryWeightedProductId,
63
- host,
64
- isActive,
65
- rejectDeviceEvent,
66
- scaleAvailable,
67
- scaleIngress,
68
- scaleWeightChangeTrigger,
69
- session,
70
- start,
71
- starting
72
- ]);
73
- return { scaleConnectionState };
74
- }
75
- //#endregion
76
- exports.useHDLKioskDeviceController = useHDLKioskDeviceController;
@@ -1,161 +0,0 @@
1
- require("../../../../_virtual/_rolldown/runtime.js");
2
- const require_asyncToGenerator = require("../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
3
- let react = require("react");
4
- //#region src/components/HDLKiosk/runtime/controllers/useHDLKioskScannerController.ts
5
- /**
6
- * 文件角色:在 HDLKiosk active 生命周期内唯一拥有 Scanner,并把扫码任务归属到 Session。
7
- * 运行机制:Ingress 去重/背压后进入有限 FIFO;Session readyForCommands 后串行消费。
8
- * 边界:不依赖任何 Screen mount,不负责 Workflow 导航,也不记录原始条码。
9
- */
10
- const NON_WRITABLE_ACTIVITIES = new Set(["paymentCompleted"]);
11
- const PAYMENT_OPERATION_IDS = new Set([
12
- "checkout.open",
13
- "checkout.payEftpos",
14
- "checkout.requestStaffPaymentApproval",
15
- "session.reset"
16
- ]);
17
- function isPaymentFrozen(host) {
18
- const status = host.sales.getObservedSnapshot().payment.status;
19
- return status === "pending" || status === "unknown" || status === "succeeded";
20
- }
21
- function isHDLKioskSessionCartWritable(session) {
22
- var _session$definition$n;
23
- const snapshot = session.actor.getSnapshot();
24
- if (snapshot.status === "blocked" || snapshot.status === "finished") return false;
25
- const activity = (_session$definition$n = session.definition.nodes[snapshot.nodeId]) === null || _session$definition$n === void 0 ? void 0 : _session$definition$n.activity;
26
- if (!activity || NON_WRITABLE_ACTIVITIES.has(activity)) return false;
27
- return !(snapshot.activeOperation && PAYMENT_OPERATION_IDS.has(snapshot.activeOperation.definitionId));
28
- }
29
- function useHDLKioskScannerController({ host, config, isActive, starting, sessionRef, activeRef, scannerIngress, start, waitForReadySession }) {
30
- const queueRef = (0, react.useRef)([]);
31
- const startingRef = (0, react.useRef)(starting);
32
- const processingRef = (0, react.useRef)(false);
33
- const currentTaskRef = (0, react.useRef)();
34
- const generationRef = (0, react.useRef)(0);
35
- const rejectionSequence = (0, react.useRef)(0);
36
- const scannerAvailable = host.capabilities.scanner.available;
37
- startingRef.current = starting;
38
- const emitRejected = (0, react.useCallback)((event, reason) => {
39
- rejectionSequence.current += 1;
40
- try {
41
- host.telemetry.emit({
42
- name: "hdlKiosk.device.eventRejected",
43
- traceId: `hdl-scanner-rejected-${rejectionSequence.current}`,
44
- occurredAt: Date.now(),
45
- attributes: {
46
- eventType: event.type,
47
- reason
48
- }
49
- });
50
- } catch (_unused) {}
51
- }, [host]);
52
- const emitCompleted = (0, react.useCallback)((task, target, result) => {
53
- try {
54
- host.telemetry.emit({
55
- name: "hdlKiosk.scanner.taskFinished",
56
- traceId: `hdl-scan:${target.actor.getSnapshot().sessionEpoch}:${task.event.eventId}`,
57
- occurredAt: Date.now(),
58
- attributes: {
59
- eventId: task.event.eventId,
60
- sessionEpoch: target.actor.getSnapshot().sessionEpoch,
61
- status: result.status
62
- }
63
- });
64
- } catch (_unused2) {}
65
- }, [host]);
66
- const processQueue = (0, react.useCallback)(require_asyncToGenerator._asyncToGenerator(function* () {
67
- if (processingRef.current) return;
68
- processingRef.current = true;
69
- const generation = generationRef.current;
70
- try {
71
- while (activeRef.current && generation === generationRef.current && queueRef.current.length > 0) {
72
- var _sessionRef$current;
73
- const nextTask = queueRef.current[0];
74
- if (!nextTask) continue;
75
- let target = (_sessionRef$current = sessionRef.current) !== null && _sessionRef$current !== void 0 ? _sessionRef$current : yield waitForReadySession();
76
- if (!target && nextTask.binding === "startBarcodeSession") target = yield start({ entry: "barcode" });
77
- if (!target || nextTask.acceptedSessionEpoch !== void 0 && target.actor.getSnapshot().sessionEpoch !== nextTask.acceptedSessionEpoch || generation !== generationRef.current || !activeRef.current) {
78
- const rejected = queueRef.current.shift();
79
- if (rejected) emitRejected(rejected.event, "sessionStartFailed");
80
- continue;
81
- }
82
- if (isPaymentFrozen(host) || !isHDLKioskSessionCartWritable(target)) {
83
- const rejected = queueRef.current.shift();
84
- if (rejected) emitRejected(rejected.event, "sessionNotCartWritable");
85
- continue;
86
- }
87
- const pendingNavigation = target.actor.getSnapshot().pendingNavigation;
88
- if (pendingNavigation) target.actor.resolvePendingNavigation(pendingNavigation.navigationId, "cancel");
89
- const task = queueRef.current.shift();
90
- if (!task) continue;
91
- currentTaskRef.current = task;
92
- const sessionEpoch = target.actor.getSnapshot().sessionEpoch;
93
- const result = yield target.executeCommand("barcode.consume", { code: task.code }, `scan:${sessionEpoch}:${task.event.eventId}`);
94
- currentTaskRef.current = void 0;
95
- emitCompleted(task, target, result);
96
- if (result.status === "partialFailure" || result.status === "unknown") queueRef.current = [];
97
- }
98
- } finally {
99
- currentTaskRef.current = void 0;
100
- processingRef.current = false;
101
- }
102
- }), [
103
- activeRef,
104
- emitCompleted,
105
- emitRejected,
106
- waitForReadySession,
107
- host,
108
- sessionRef,
109
- start
110
- ]);
111
- (0, react.useEffect)(() => {
112
- if (!isActive || !scannerAvailable) return void 0;
113
- return host.devices.subscribe((event) => {
114
- if (!activeRef.current || event.type !== "barcode") return;
115
- const activeSession = sessionRef.current;
116
- const canStartBarcode = config.enabledEntries.includes("barcode");
117
- const supported = Boolean(activeSession || startingRef.current || canStartBarcode);
118
- const cartWritable = activeSession ? isHDLKioskSessionCartWritable(activeSession) : true;
119
- const result = scannerIngress.accept(event, {
120
- active: activeRef.current,
121
- supported,
122
- workflowLocked: false,
123
- nodeAcceptsEvent: cartWritable,
124
- paymentFrozen: isPaymentFrozen(host),
125
- pendingEventCount: queueRef.current.length + (currentTaskRef.current ? 1 : 0)
126
- });
127
- if (result.status === "rejected") {
128
- emitRejected(event, result.reason);
129
- return;
130
- }
131
- queueRef.current.push({
132
- event: result.event,
133
- code: result.code,
134
- binding: activeSession || startingRef.current ? "existingOrPendingSession" : "startBarcodeSession",
135
- acceptedSessionEpoch: activeSession === null || activeSession === void 0 ? void 0 : activeSession.actor.getSnapshot().sessionEpoch
136
- });
137
- processQueue();
138
- }, { sources: ["scanner"] });
139
- }, [
140
- activeRef,
141
- config.enabledEntries,
142
- emitRejected,
143
- host,
144
- isActive,
145
- processQueue,
146
- scannerAvailable,
147
- scannerIngress,
148
- sessionRef
149
- ]);
150
- (0, react.useEffect)(() => {
151
- if (isActive) return;
152
- generationRef.current += 1;
153
- queueRef.current = [];
154
- }, [isActive]);
155
- (0, react.useEffect)(() => () => {
156
- generationRef.current += 1;
157
- queueRef.current = [];
158
- }, [host]);
159
- }
160
- //#endregion
161
- exports.useHDLKioskScannerController = useHDLKioskScannerController;
@@ -1,186 +0,0 @@
1
- require("../../../../_virtual/_rolldown/runtime.js");
2
- const require_asyncToGenerator = require("../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/asyncToGenerator.js");
3
- const require_entryArbiter = require("../../devices/entryArbiter.js");
4
- const require_scaleIngress = require("../../devices/scaleIngress.js");
5
- const require_scannerIngress = require("../../devices/scannerIngress.js");
6
- const require_registry = require("../../app/workflow/registry.js");
7
- const require_createWorkflowSession = require("../createWorkflowSession.js");
8
- let react = require("react");
9
- //#region src/components/HDLKiosk/runtime/controllers/useHDLKioskSessionController.ts
10
- /**
11
- * 文件角色:拥有 Entry、会话创建/销毁和回首页的顶层生命周期。
12
- * 运行机制:结合 Capabilities 和入口 claim 决定 start;reset 成功后 dispose Actor
13
- * 并推进 session epoch。当前应用不恢复跨刷新会话。
14
- * 边界:不会仅靠页面导航开始下一单,也不消费具体 Screen 的局部交互。
15
- */
16
- /**
17
- * Barcode 的首次扫码只需要建立可写 Session 并消费条码;秤和称重主商品
18
- * 是后续业务分支能力,不得阻断 Barcode Session 入口。
19
- */
20
- function resolveHDLKioskEntryCapabilityBlockReason({ entry, capabilities, primaryWeightedProductId }) {
21
- if (!capabilities.session.ensure) return "sessionEnsureUnavailable";
22
- if (entry === "barcode") return capabilities.scanner.available ? void 0 : "scannerUnavailable";
23
- if (!capabilities.products.primaryWeightedProductQuery || !primaryWeightedProductId) return "primaryProductUnavailable";
24
- if (require_registry.builtInWorkflowHasActivity(entry, "customization") && (!capabilities.customization.weightedProduct || !capabilities.scale.available)) return "customizationUnavailable";
25
- if (entry === "scale" && (!capabilities.scale.available || !capabilities.scale.weightChangeTrigger)) return "scaleTriggerUnavailable";
26
- }
27
- function useHDLKioskSessionController({ host, config, isActive }) {
28
- const [session, setSession] = (0, react.useState)();
29
- const [starting, setStarting] = (0, react.useState)(false);
30
- const [startErrorReference, setStartErrorReference] = (0, react.useState)();
31
- const sessionRef = (0, react.useRef)(session);
32
- const startingSessionRef = (0, react.useRef)();
33
- const startPromiseRef = (0, react.useRef)();
34
- const startAttemptSequence = (0, react.useRef)(0);
35
- const returnAttemptSequence = (0, react.useRef)(0);
36
- const returnPromiseRef = (0, react.useRef)();
37
- const activeRef = (0, react.useRef)(isActive);
38
- const mountedHostRef = (0, react.useRef)(host);
39
- const entryArbiter = (0, react.useMemo)(() => require_entryArbiter.createEntryArbiter(), [host]);
40
- const scannerIngress = (0, react.useMemo)(() => require_scannerIngress.createScannerIngress({ maxPendingEvents: 5 }), [host]);
41
- const scaleIngress = (0, react.useMemo)(() => require_scaleIngress.createScaleIngress(), [host]);
42
- sessionRef.current = session;
43
- activeRef.current = isActive;
44
- (0, react.useEffect)(() => () => {
45
- var _sessionRef$current, _startingSessionRef$c;
46
- (_sessionRef$current = sessionRef.current) === null || _sessionRef$current === void 0 || _sessionRef$current.actor.dispose();
47
- (_startingSessionRef$c = startingSessionRef.current) === null || _startingSessionRef$c === void 0 || _startingSessionRef$c.actor.dispose();
48
- }, []);
49
- (0, react.useEffect)(() => {
50
- var _sessionRef$current2, _startingSessionRef$c2;
51
- if (mountedHostRef.current === host) return;
52
- (_sessionRef$current2 = sessionRef.current) === null || _sessionRef$current2 === void 0 || _sessionRef$current2.actor.dispose();
53
- (_startingSessionRef$c2 = startingSessionRef.current) === null || _startingSessionRef$c2 === void 0 || _startingSessionRef$c2.actor.dispose();
54
- startingSessionRef.current = void 0;
55
- startPromiseRef.current = void 0;
56
- startAttemptSequence.current += 1;
57
- sessionRef.current = void 0;
58
- entryArbiter.reset();
59
- scannerIngress.reset();
60
- scaleIngress.reset();
61
- mountedHostRef.current = host;
62
- setSession(void 0);
63
- setStarting(false);
64
- setStartErrorReference(void 0);
65
- }, [
66
- entryArbiter,
67
- host,
68
- scaleIngress,
69
- scannerIngress
70
- ]);
71
- const start = (0, react.useCallback)((request) => {
72
- const { entry } = request;
73
- if (!activeRef.current || !config.enabledEntries.includes(entry)) return Promise.resolve(void 0);
74
- if (config.businessMode === "production" && !require_registry.isBuiltInWorkflowProductionReady(entry)) {
75
- setStartErrorReference(`workflow-placeholder-blocked-${Date.now()}`);
76
- return Promise.resolve(void 0);
77
- }
78
- const capabilityBlockReason = resolveHDLKioskEntryCapabilityBlockReason({
79
- entry,
80
- capabilities: host.capabilities,
81
- primaryWeightedProductId: config.primaryWeightedProductId
82
- });
83
- if (capabilityBlockReason) {
84
- if (capabilityBlockReason === "sessionEnsureUnavailable") setStartErrorReference(`session-ensure-unavailable-${Date.now()}`);
85
- return Promise.resolve(void 0);
86
- }
87
- const current = sessionRef.current;
88
- if (current) return Promise.resolve(current.entry === entry ? current : void 0);
89
- const pending = startPromiseRef.current;
90
- if (pending) return pending.entry === entry ? pending.promise : Promise.resolve(void 0);
91
- if (entryArbiter.claim(entry).status !== "accepted") return Promise.resolve(void 0);
92
- const next = require_createWorkflowSession.createHDLKioskWorkflowSession(entry, host, { primaryWeightedProductId: config.primaryWeightedProductId });
93
- startingSessionRef.current = next;
94
- startAttemptSequence.current += 1;
95
- const attempt = startAttemptSequence.current;
96
- setStarting(true);
97
- setStartErrorReference(void 0);
98
- const promise = next.ensure(`entry:${entry}:ensure:${attempt}`).then(function() {
99
- var _ref = require_asyncToGenerator._asyncToGenerator(function* (result) {
100
- if (attempt !== startAttemptSequence.current || mountedHostRef.current !== host || !activeRef.current) {
101
- next.actor.dispose();
102
- return;
103
- }
104
- if (result.status !== "succeeded") {
105
- next.actor.dispose();
106
- entryArbiter.reset();
107
- setStartErrorReference(result.status === "failed" || result.status === "partialFailure" || result.status === "unknown" ? result.error.traceId : `session-start-cancelled-${Date.now()}`);
108
- return;
109
- }
110
- sessionRef.current = next;
111
- setSession(next);
112
- return next;
113
- });
114
- return function(_x) {
115
- return _ref.apply(this, arguments);
116
- };
117
- }()).finally(() => {
118
- if (attempt !== startAttemptSequence.current) return;
119
- startingSessionRef.current = void 0;
120
- startPromiseRef.current = void 0;
121
- setStarting(false);
122
- });
123
- startPromiseRef.current = {
124
- entry,
125
- promise
126
- };
127
- return promise;
128
- }, [
129
- config.enabledEntries,
130
- config.primaryWeightedProductId,
131
- entryArbiter,
132
- host
133
- ]);
134
- const waitForReadySession = (0, react.useCallback)(() => {
135
- var _startPromiseRef$curr, _startPromiseRef$curr2;
136
- const current = sessionRef.current;
137
- if (current) return Promise.resolve(current);
138
- return (_startPromiseRef$curr = (_startPromiseRef$curr2 = startPromiseRef.current) === null || _startPromiseRef$curr2 === void 0 ? void 0 : _startPromiseRef$curr2.promise) !== null && _startPromiseRef$curr !== void 0 ? _startPromiseRef$curr : Promise.resolve(void 0);
139
- }, []);
140
- const completeReset = (0, react.useCallback)((completedSession) => {
141
- if (sessionRef.current !== completedSession) return;
142
- completedSession.actor.dispose();
143
- entryArbiter.reset();
144
- scannerIngress.reset();
145
- scaleIngress.reset();
146
- sessionRef.current = void 0;
147
- setSession(void 0);
148
- }, [
149
- entryArbiter,
150
- scaleIngress,
151
- scannerIngress
152
- ]);
153
- return {
154
- session,
155
- starting,
156
- startErrorReference,
157
- sessionRef,
158
- activeRef,
159
- entryArbiter,
160
- scannerIngress,
161
- scaleIngress,
162
- start,
163
- waitForReadySession,
164
- completeReset,
165
- returnToEntry: (0, react.useCallback)((reason = "application") => {
166
- if (returnPromiseRef.current) return returnPromiseRef.current;
167
- const current = sessionRef.current;
168
- if (!current) return Promise.resolve({
169
- status: "succeeded",
170
- data: void 0
171
- });
172
- returnAttemptSequence.current += 1;
173
- const attempt = returnAttemptSequence.current;
174
- const promise = current.reset(`return:${reason}:${attempt}`).then((result) => {
175
- if (result.status === "succeeded") completeReset(current);
176
- return result;
177
- }).finally(() => {
178
- if (returnPromiseRef.current === promise) returnPromiseRef.current = void 0;
179
- });
180
- returnPromiseRef.current = promise;
181
- return promise;
182
- }, [completeReset])
183
- };
184
- }
185
- //#endregion
186
- exports.useHDLKioskSessionController = useHDLKioskSessionController;
@@ -1,13 +0,0 @@
1
- require("../../../_virtual/_rolldown/runtime.js");
2
- let react = require("react");
3
- //#region src/components/HDLKiosk/runtime/useWorkflowSnapshot.ts
4
- /**
5
- * 文件角色:将纯 Workflow Actor 的 Snapshot 接入 React 渲染。
6
- * 运行机制:useSyncExternalStore 订阅 Actor,组件始终消费 Actor 发布的不可变快照。
7
- * 边界:不发送事件、不派生业务事实,也不维护第二份当前节点状态。
8
- */
9
- function useWorkflowSnapshot(actor) {
10
- return (0, react.useSyncExternalStore)(actor.subscribe, actor.getSnapshot, actor.getSnapshot);
11
- }
12
- //#endregion
13
- exports.useWorkflowSnapshot = useWorkflowSnapshot;