@pisell/private-materials 6.12.167 → 6.12.168

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 (68) hide show
  1. package/build/lowcode/assets-daily.json +11 -11
  2. package/build/lowcode/assets-dev.json +2 -2
  3. package/build/lowcode/assets-prod.json +11 -11
  4. package/build/lowcode/meta.js +1 -1
  5. package/build/lowcode/render/default/view.js +1 -1
  6. package/build/lowcode/view.js +1 -1
  7. package/es/components/HDLKiosk/app/ScreenRenderer.js +6 -6
  8. package/es/components/HDLKiosk/app/workflow/barcode.js +4 -10
  9. package/es/components/HDLKiosk/docs/00-/346/226/207/344/273/266/345/257/274/350/210/252.md +1 -1
  10. 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 +12 -14
  11. package/es/components/HDLKiosk/docs/03-/344/270/232/345/212/241/346/265/201/347/250/213/344/270/216/344/272/244/344/272/222/350/247/204/345/210/231.md +2 -2
  12. package/es/components/HDLKiosk/docs/07-/345/220/216/347/273/255/345/267/245/344/275/234.md +1 -1
  13. package/es/components/HDLKiosk/kernel/README.md +1 -1
  14. package/es/components/HDLKiosk/kernel/workflow/actor.js +35 -5
  15. package/es/components/HDLKiosk/kernel/workflow/compiler.js +9 -14
  16. package/es/components/HDLKiosk/runtime/HDLKioskWorkflowView.js +3 -3
  17. package/es/components/HDLKiosk/slices/customization/Screen/index.js +3 -3
  18. package/es/components/HDLKiosk/slices/customization/slice.js +1 -1
  19. package/es/components/HDLKiosk/slices/identity/Screen/index.js +2 -2
  20. package/es/components/HDLKiosk/slices/identity/slice.js +1 -1
  21. package/es/components/HDLKiosk/slices/primaryProductPrompt/slice.js +1 -1
  22. package/es/components/HDLKiosk/slices/primaryProductPrompt/view.js +2 -2
  23. package/es/components/bigSale/components/BookingFloatingPanel/useBookingPanelController.js +0 -1
  24. package/es/components/bigSale/components/TimeBar/index.js +0 -1
  25. package/es/components/bigSale/dialog.js +0 -1
  26. package/es/components/bigSale/hooks/useBigSaleContext.js +0 -1
  27. package/es/components/bigSale/hooks/useSelectFloorMapResourceForBigSale.js +0 -1
  28. package/es/components/bigSale/index.js +0 -1
  29. package/es/components/bigSale/templates/Kiosk/index.js +0 -1
  30. package/es/components/sharedSecondaryBigSale/SharedSecondaryBigSaleReceiver.js +0 -1
  31. package/es/index.js +0 -2
  32. package/es/plus/pisellReservation/data/bookingToReservationTables.js +1 -1
  33. package/es/plus/pisellReservation/floorMap/floorPlanApi.js +1 -1
  34. package/es/plus/pisellReservation/floorMap/reservationMock.js +1 -1
  35. package/es/plus/saleDetail/Base.js +0 -1
  36. package/es/plus/saleDetail/components/Client/hooks/useClientSelectorProps.js +0 -1
  37. package/es/plus/saleDetail/components/DetailActions/index.js +0 -1
  38. package/es/plus/saleDetail/components/SummaryFinancialSections/index.js +0 -1
  39. package/es/plus/saleDetail/index.js +0 -1
  40. package/es/plus/saleDetail/tmpl/B/components/Dish/index.js +0 -1
  41. package/es/plus/saleDetail/tmpl/B/index.js +0 -1
  42. package/es/plus/salesSdk/utils/addProductWithFlowDebounced.js +1 -1
  43. package/es/plus/salesSdk/utils/bookingDate.js +1 -1
  44. package/es/plus/salesSdk/utils/customerAuthGate.js +1 -1
  45. package/es/plus/salesSdk/utils/enrichCartLineHolderDisplay.js +1 -1
  46. package/es/private-materials/lowcode/authmodal/meta.d.ts +1 -0
  47. package/es/pro/Login2.0/AuthModal.d.ts +1 -1
  48. package/es/pro/Login2.0/index.d.ts +1 -2
  49. package/es/pro/Login2.0/shared/types.d.ts +1 -1
  50. package/lib/components/HDLKiosk/app/ScreenRenderer.js +6 -6
  51. package/lib/components/HDLKiosk/app/workflow/barcode.js +4 -10
  52. package/lib/components/HDLKiosk/docs/00-/346/226/207/344/273/266/345/257/274/350/210/252.md +1 -1
  53. 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 +12 -14
  54. package/lib/components/HDLKiosk/docs/03-/344/270/232/345/212/241/346/265/201/347/250/213/344/270/216/344/272/244/344/272/222/350/247/204/345/210/231.md +2 -2
  55. package/lib/components/HDLKiosk/docs/07-/345/220/216/347/273/255/345/267/245/344/275/234.md +1 -1
  56. package/lib/components/HDLKiosk/kernel/README.md +1 -1
  57. package/lib/components/HDLKiosk/kernel/workflow/actor.js +35 -5
  58. package/lib/components/HDLKiosk/kernel/workflow/compiler.js +9 -14
  59. package/lib/components/HDLKiosk/runtime/HDLKioskWorkflowView.js +3 -3
  60. package/lib/components/HDLKiosk/slices/customization/Screen/index.js +3 -3
  61. package/lib/components/HDLKiosk/slices/customization/slice.js +1 -1
  62. package/lib/components/HDLKiosk/slices/identity/Screen/index.js +2 -2
  63. package/lib/components/HDLKiosk/slices/identity/slice.js +1 -1
  64. package/lib/components/HDLKiosk/slices/primaryProductPrompt/slice.js +1 -1
  65. package/lib/components/HDLKiosk/slices/primaryProductPrompt/view.js +2 -2
  66. package/package.json +3 -3
  67. package/es/plus/pisellReservation/index.js +0 -17
  68. package/es/plus/salesSdk/index.js +0 -52
@@ -9,7 +9,6 @@ import { useSalesSdk } from "../../../salesSdk/hooks/useSalesSdk.js";
9
9
  import { useSalesSdkCart } from "../../../salesSdk/hooks/useSalesSdkCart.js";
10
10
  import { useSalesSdkGlobalScanActivity } from "../../../salesSdk/context/SalesSdkGlobalScanActivityContext.js";
11
11
  import { useSalesSdkSummary } from "../../../salesSdk/hooks/useSalesSdkSummary.js";
12
- import "../../../salesSdk/index.js";
13
12
  import { getNumericAmount, getSalesHostModule, resolveSaleDetailOrderIdFromSales, resolveSaleDetailOrderIdFromSalesResult, shouldCloseDialogAfterCheckout, updateLocalOrder } from "./utils.js";
14
13
  import { getRemotePrintActions, getWristbandList } from "../../serve.js";
15
14
  import { deriveSaleOrderSubmitState } from "../../actions/state.js";
@@ -3,7 +3,6 @@ import { resolvePaymentMethodName, usePaymentMethodNameMap } from "../../../pise
3
3
  import { useSalesSdk } from "../../../salesSdk/hooks/useSalesSdk.js";
4
4
  import { useSalesSdkCart } from "../../../salesSdk/hooks/useSalesSdkCart.js";
5
5
  import { useSalesSdkSummary } from "../../../salesSdk/hooks/useSalesSdkSummary.js";
6
- import "../../../salesSdk/index.js";
7
6
  import React, { memo, useMemo } from "react";
8
7
  import { formatAmount, locales } from "@pisell/utils";
9
8
  import Decimal from "decimal.js";
@@ -4,7 +4,6 @@ import { useSalesSdk } from "../salesSdk/hooks/useSalesSdk.js";
4
4
  import { SalesSdkProvider } from "../salesSdk/context/SalesSdkProvider.js";
5
5
  import { SalesSdkDishProvider } from "../salesSdk/context/SalesSdkDishContext.js";
6
6
  import { SalesSdkBookingContextProvider } from "../salesSdk/context/SalesSdkBookingContext.js";
7
- import "../salesSdk/index.js";
8
7
  import Base_default from "./Base.js";
9
8
  import React, { forwardRef, useImperativeHandle } from "react";
10
9
  //#region src/plus/saleDetail/index.tsx
@@ -1,7 +1,6 @@
1
1
  import useStableInstanceId from "../../../../../../hooks/useStableInstanceId.js";
2
2
  import { useSalesSdkDish } from "../../../../../salesSdk/hooks/useSalesSdkDish.js";
3
3
  import { useCurrentSalesSdkDish } from "../../../../../salesSdk/hooks/useCurrentSalesSdkDish.js";
4
- import "../../../../../salesSdk/index.js";
5
4
  import { SaleDetailStatusOverview } from "../shared/StatusOverview.js";
6
5
  import { DishGroupView } from "./DishGroupView.js";
7
6
  import dayjs from "dayjs";
@@ -1,7 +1,6 @@
1
1
  import { _objectSpread2 } from "../../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/objectSpread2.js";
2
2
  import useEngineContext from "../../../../hooks/useEngineContext.js";
3
3
  import { useCurrentSalesSdkDish } from "../../../salesSdk/hooks/useCurrentSalesSdkDish.js";
4
- import "../../../salesSdk/index.js";
5
4
  import { getInternalNotesByScheduleEvent } from "../../serve.js";
6
5
  import { TEMPLATE_B_PAY_ACTIONS, TEMPLATE_B_SUMMARY_ACTIONS } from "../../components/DetailActions/configs/index.js";
7
6
  import { DetailActions } from "../../components/DetailActions/index.js";
@@ -342,4 +342,4 @@ function createAddProductWithFlowDebounced(deps) {
342
342
  };
343
343
  }
344
344
  //#endregion
345
- export { createAddProductWithFlowDebounced, shouldBypassAddProductDebounce };
345
+ export { createAddProductWithFlowDebounced };
@@ -31,4 +31,4 @@ function subscribeBookingDateChange(bookingTicket, callback) {
31
31
  return typeof off === "function" ? off : () => {};
32
32
  }
33
33
  //#endregion
34
- export { BOOKING_CONTEXT_DATE_EVENT, formatBookingDateTime, subscribeBookingDateChange };
34
+ export { formatBookingDateTime, subscribeBookingDateChange };
@@ -62,4 +62,4 @@ function normalizeCustomerAuthCustomer(value) {
62
62
  return null;
63
63
  }
64
64
  //#endregion
65
- export { isHolderRequiredProduct, isKioskRuntime, isValidOrderCustomerId, normalizeCustomerAuthCustomer, resolveCustomerAuthCurrentCustomerId, shouldPromptCustomerAuthForProduct };
65
+ export { isValidOrderCustomerId, normalizeCustomerAuthCustomer, resolveCustomerAuthCurrentCustomerId, shouldPromptCustomerAuthForProduct };
@@ -71,4 +71,4 @@ function buildHolderListRequestKey(params) {
71
71
  });
72
72
  }
73
73
  //#endregion
74
- export { buildHolderListRequestKey, buildHolderListRequestParams, enrichCartBookingHolderDisplay, pickHolderIdFromBooking, resolveHolderDisplayConfig };
74
+ export { buildHolderListRequestKey, buildHolderListRequestParams, enrichCartBookingHolderDisplay, resolveHolderDisplayConfig };
@@ -0,0 +1 @@
1
+ export { };
@@ -14,4 +14,4 @@ interface AuthModalProps {
14
14
  */
15
15
  declare const AuthModal: React.FC<AuthModalProps>;
16
16
  //#endregion
17
- export { AuthModal };
17
+ export { AuthModal, AuthModalProps };
@@ -1,4 +1,3 @@
1
- import { AuthMethodType, EmailAuthConfig, EmailRegistrationVerification, LoginFormData, OAuthConfig, PhoneAuthConfig, RegisterFormData, UIConfig, VerificationMethod } from "./shared/types.js";
2
1
  import { Login2, Login2Config, Login2Events, Login2Props } from "./Login2.js";
3
2
  import { Register2, Register2Config, Register2Events, Register2Props } from "./Register2.js";
4
- import { AuthModal } from "./AuthModal.js";
3
+ import { AuthModal, AuthModalProps } from "./AuthModal.js";
@@ -226,4 +226,4 @@ interface RegisterFormData {
226
226
  verification_token?: string;
227
227
  }
228
228
  //#endregion
229
- export { AuthMethodType, EmailAuthConfig, EmailRegistrationVerification, LegalTermsConfig, LoginFormData, LoginMethodItem, OAuthConfig, PhoneAuthConfig, RegisterFormData, RegistrationMethodItem, UIConfig, VerificationMethod };
229
+ export { AuthMethodType, EmailAuthConfig, LegalTermsConfig, LoginFormData, LoginMethodItem, OAuthConfig, PhoneAuthConfig, RegisterFormData, RegistrationMethodItem, UIConfig };
@@ -8,8 +8,8 @@ let _pisell_utils = require("@pisell/utils");
8
8
  //#region src/components/HDLKiosk/app/ScreenRenderer.tsx
9
9
  /**
10
10
  * 文件角色:把当前 Workflow Node 交给其 Slice 自有 View 渲染。
11
- * 运行机制:从应用 View 注册表按 Activity 读取同步组件;Modal 节点先渲染 base
12
- * Slice,再叠加当前 Slice View。
11
+ * 运行机制:从应用 View 注册表按 Activity 读取同步组件;先渲染 Actor
12
+ * Surface 保留的 Page,再按顺序叠加 Modal Slice View。
13
13
  * 边界:只组装 View Context,不调用 Host、不创建 ViewModel、不决定下一节点。
14
14
  */
15
15
  function ScreenRenderer({ definition, snapshot, sales, send, commandState = { busy: false }, resetting, capabilities, businessMode = "prototype", scaleMinimumWeightKg = .01, renderIdentityAuth, memberAction = {
@@ -24,10 +24,10 @@ function ScreenRenderer({ definition, snapshot, sales, send, commandState = { bu
24
24
  methods: [],
25
25
  loading: false
26
26
  } }) {
27
- var _activeNode$presentat, _commandState$error;
27
+ var _definition$nodes$sna, _commandState$error;
28
28
  const activeNode = definition.nodes[snapshot.nodeId];
29
- const modalBaseNodeId = ((_activeNode$presentat = activeNode.presentation) === null || _activeNode$presentat === void 0 ? void 0 : _activeNode$presentat.mode) === "modal" ? activeNode.presentation.base : void 0;
30
- const renderedNode = definition.nodes[modalBaseNodeId !== null && modalBaseNodeId !== void 0 ? modalBaseNodeId : snapshot.nodeId];
29
+ const pageNode = (_definition$nodes$sna = definition.nodes[snapshot.surface.pageStepId]) !== null && _definition$nodes$sna !== void 0 ? _definition$nodes$sna : activeNode;
30
+ const overlayNodes = snapshot.surface.overlays.map((stepId) => definition.nodes[stepId]).filter((node) => Boolean(node));
31
31
  const bindActivity = (activityId) => (action) => {
32
32
  send(action.kind === "intent" || action.kind === "navigation" ? require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, action), {}, { activityId }) : action);
33
33
  };
@@ -66,7 +66,7 @@ function ScreenRenderer({ definition, snapshot, sales, send, commandState = { bu
66
66
  };
67
67
  return /* @__PURE__ */ react.default.createElement(SliceView, context);
68
68
  };
69
- return /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, renderNode(renderedNode), modalBaseNodeId ? renderNode(activeNode) : null);
69
+ return /* @__PURE__ */ react.default.createElement(react.default.Fragment, null, renderNode(pageNode), overlayNodes.map((node) => /* @__PURE__ */ react.default.createElement(react.default.Fragment, { key: node.id }, renderNode(node))));
70
70
  }
71
71
  //#endregion
72
72
  exports.ScreenRenderer = ScreenRenderer;
@@ -19,17 +19,11 @@ const barcodeWorkflow = require_defineApplication.defineWorkflow({
19
19
  require_slice.catalogSlice,
20
20
  {
21
21
  slice: require_slice$4.primaryProductPromptSlice,
22
- presentation: {
23
- mode: "modal",
24
- base: "catalog"
25
- },
26
- visitPolicy: "reuseResolution",
27
- on: { skip: "fulfillment" }
28
- },
29
- {
30
- slice: require_slice$1.customizationSlice,
31
- visitPolicy: "reuseResolution"
22
+ presentation: { mode: "modal" },
23
+ visitPolicy: "once",
24
+ on: { omit: "fulfillment" }
32
25
  },
26
+ require_slice$1.customizationSlice,
33
27
  require_slice$2.fulfillmentSlice,
34
28
  require_slice$3.paymentMethodSlice,
35
29
  {
@@ -84,7 +84,7 @@ slices/<name>/
84
84
 
85
85
  `Slice` 是作者侧唯一业务能力概念:`defineSlice` 定义能力,`application.slices` 收集能力,Workflow 的 `slice` 字段引用能力;运行期再编译为 Activity Contract。
86
86
 
87
- 命名关系必须保持单向:Slice `id` 是业务 Activity;`screen.id` 是页面类别;`app/views.ts` 按 Activity 注册实际 UI。`catalog` 负责商品浏览,`primaryProductPrompt` 负责主商品询问,两者通过 Modal base 组合。支付派发和店员支付授权是 `paymentMethod` 页面内 Command,不创建流程 Intent。
87
+ 命名关系必须保持单向:Slice `id` 是业务 Activity;`screen.id` 是页面类别;`app/views.ts` 按 Activity 注册实际 UI。`catalog` 负责商品浏览,`primaryProductPrompt` 负责主商品询问;Prompt 以 Modal 覆盖 Actor Surface 中当前实际 Page,不引用固定背景 Step。支付派发和店员支付授权是 `paymentMethod` 页面内 Command,不创建流程 Intent。
88
88
 
89
89
  ## 5. `components/`:共享展示能力
90
90
 
@@ -175,13 +175,11 @@ Workflow 用有序 Slice 数组描述静态编排。数组顺序是默认主路
175
175
  catalogSlice,
176
176
  {
177
177
  slice: primaryProductPromptSlice,
178
- presentation: { mode: 'modal', base: 'catalog' },
179
- on: { complete: 'customization', skip: 'fulfillment' },
180
- },
181
- {
182
- slice: customizationSlice,
183
- on: { complete: 'fulfillment', skip: 'fulfillment' },
178
+ presentation: { mode: 'modal' },
179
+ visitPolicy: 'once',
180
+ on: { omit: 'fulfillment' },
184
181
  },
182
+ customizationSlice,
185
183
  fulfillmentSlice,
186
184
  paymentMethodSlice,
187
185
  { slice: paymentCompletedSlice, end: 'success' },
@@ -206,7 +204,7 @@ Predicate 是本地可信的纯真假判断,例如 `cart.notEmpty`;Intent Pr
206
204
 
207
205
  业务 Workflow 当前不启用 Slice `beforeEnter` 守卫。Actor 仍保留全局 `beforeEach` 管线,用于 `sessionExit` 等会话安全策略;它不承载 Identity、Fulfillment 等步骤的业务进入条件。
208
206
 
209
- Actor 分别记录已成功向前离开的 Step、每个 Step 已提交的 `complete | skip` Resolution,以及用户实际访问过的页面历史。`back` 按实际页面历史返回,Modal 和 Skip Step 不写入历史;历史为空时 Back 进入会话退出导航。Workflow occurrence 通过 `visitPolicy: 'always' | 'reuseResolution' | 'once'` 明确声明再次访问策略:`always` 重新展示,`reuseResolution` 再次向前时复用已提交 Resolution,`once` 提交后不再进入且不写入 Back 历史。用户通过 Back 退出一个已解决页面时,其旧 Resolution 失效。导航在执行 Activity Exit Effect 之前完成解析;被 cancel/defer 的导航不会先写 Host。
207
+ Actor 分别记录已成功向前离开的 Step、每个 Step 已提交的 `complete | omit` Resolution,以及用户实际访问过的页面历史。`complete` 保留页面的 Back 路径;`omit` 表示将该 Step 从当前流程路径中排除,后续遇到时沿已提交的 `omit` transition 继续,也不写入 Back 历史。Modal 不写入页面历史;历史为空时 Back 进入会话退出导航。Workflow occurrence 只有 `visitPolicy: 'always' | 'once'`:`always` 保留已 `complete` Step 的正常访问,`once` 表示任意 Resolution 提交后不再进入且不写入 Back 历史。用户通过 Back 退出一个已解决页面时,其旧 Resolution 失效。导航在执行 Activity Exit Effect 之前完成解析;被 cancel/defer 的导航不会先写 Host。
210
208
 
211
209
  退出流程也是导航目标 `{ kind: 'sessionExit' }`。全局 `beforeEach` 对它返回 `defer({ kind: 'confirmEndOrder' })`,Actor 保存带唯一 `navigationId` 的 `pendingNavigation`。Shell 只根据该 request 展示确认;旧 ID 不能恢复后来的导航。
212
210
 
@@ -224,7 +222,7 @@ Step ID 只标识“一次出现”。Runtime 判断加载哪类数据、是否
224
222
  - Screen 内有哪些不会离开节点的 Command;
225
223
  - 使用该 Slice 的流程在支付前需要哪些业务事实。
226
224
 
227
- 例如 `identity.complete` / `identity.skip` 可在携带输入时执行 `identity.sync`,`customization.complete` 执行主商品同步,`paymentMethod.complete` 检查 Host 已确认支付成功。EFTPOS 派发和店员支付授权是 Payment 页面 Command,不作为流程 Intent。`defineKioskApplication` 从 Slice 自动生成 Activity Contract 与 Operation 注册信息;远端定义只看到 `Slice ID + 标准 Intent → target`,不能替换这些安全规则。
225
+ 例如 `identity.complete` / `identity.omit` 可在携带输入时执行 `identity.sync`,`customization.complete` 执行主商品同步,`paymentMethod.complete` 检查 Host 已确认支付成功。EFTPOS 派发和店员支付授权是 Payment 页面 Command,不作为流程 Intent。`defineKioskApplication` 从 Slice 自动生成 Activity Contract 与 Operation 注册信息;远端定义只看到 `Slice ID + 标准 Intent → target`,不能替换这些安全规则。
228
226
 
229
227
  Slice 的业务定义与 React View 分离:Slice `id` 是 Workflow 和 Actor 使用的业务 Activity;`screen.id` 会被 Compiler 复制为 Workflow Node 的 `screenId`,供 Shell、Controller 和数据加载策略使用;`app/views.ts` 按 Activity 注册本地可信 View。各 Slice 的 `view.tsx` 仍负责 ViewModel 派生与组件装配,但不会进入 `defineSlice` 或 Workflow Definition。
230
228
 
@@ -240,15 +238,15 @@ Slice 的业务定义与 React View 分离:Slice `id` 是 Workflow 和 Actor
240
238
 
241
239
  Compiler 从实际使用的 Slice 汇总 Checkout Requirement ID,但不把判断函数或 Host 字段写入 Workflow。当前 HDLKiosk 默认注册表为空;未来增加其他业务要求时仍由 [`checkoutRequirements.ts`](../app/operations/checkoutRequirements.ts) 集中判断。
242
240
 
243
- `WorkflowEvent` 同时约束 Activity、Intent 和必要输入:例如 `identity.skip` 必须携带身份输入,`fulfillment.complete` 必须携带 fulfillment context patch。Back 使用不携带业务输入的 `NAVIGATE_BACK`。Barcode 入口的条码输入不是 Workflow Event,而是 Session Controller 在发布会话前交给 `barcode.consume` 的 Command 输入。Screen Command 由 `OperationInputMap` 约束 Command ID 与输入类型。
241
+ `WorkflowEvent` 同时约束 Activity、Intent 和必要输入:例如 `identity.omit` 必须携带身份输入,`fulfillment.complete` 必须携带 fulfillment context patch。Back 使用不携带业务输入的 `NAVIGATE_BACK`。Barcode 入口的条码输入不是 Workflow Event,而是 Session Controller 在发布会话前交给 `barcode.consume` 的 Command 输入。Screen Command 由 `OperationInputMap` 约束 Command ID 与输入类型。
244
242
 
245
243
  Step 可选声明 Modal 展示关系:
246
244
 
247
245
  ```ts
248
- presentation: { mode: 'modal', base: 'customization' }
246
+ presentation: { mode: 'modal' }
249
247
  ```
250
248
 
251
- 这只控制渲染层级。Compiler 会拒绝缺失、自引用或嵌套 Modal base。
249
+ 这只控制渲染层级。Actor Surface 保留进入 Modal 前实际展示的 Page,Workflow 不指定背景 Step。Compiler 会拒绝以 Modal 作为首节点或 Modal 直接进入另一个 Modal。
252
250
 
253
251
  ### 6.3 结构 Compiler 与业务 Policy 校验
254
252
 
@@ -412,7 +410,7 @@ BigSale Login2/Register2
412
410
  → 成功后进入下一节点
413
411
  ```
414
412
 
415
- 认证 UI 通过 HDLKiosk 应用展示层插槽注入,不进入 `defineSlice`、View 注册表或 Kernel。Slice 的 `complete` 在携带输入时执行 `identity.sync`;已登录客户的自动略过使用 `skip` 且不携带输入,因此不会重复写客户。
413
+ 认证 UI 通过 HDLKiosk 应用展示层插槽注入,不进入 `defineSlice`、View 注册表或 Kernel。Slice 的 `complete` 在携带输入时执行 `identity.sync`;已登录客户的自动略过使用 `omit` 且不携带输入,因此不会重复写客户。
416
414
 
417
415
  Shell 登录不是 Workflow 跳转,而是 session-level 插入 Operation:
418
416
 
@@ -429,7 +427,7 @@ Shell Login
429
427
 
430
428
  ### 8.4 Screen Data Controller
431
429
 
432
- 只在相关节点加载 Catalog、Weighted Product 或 Customization DTO;使用 AbortController 防止离开页面后的结果写回。Modal Step 通过 `presentation.base` 继续复用底层页面数据,避免称重读数和 options 被重置。
430
+ 只在相关节点加载 Catalog、Weighted Product 或 Customization DTO;使用 AbortController 防止离开页面后的结果写回。Modal 激活时,Screen Data Controller 继续使用 Actor Surface 中保留的 `pageStepId`,底层 Page 保持挂载和原数据,不按 Modal Activity 清空或重新加载。
433
431
 
434
432
  ### 8.5 返回 Entry 能力接口
435
433
 
@@ -530,7 +528,7 @@ Workflow View 负责控制器组合、自动推进和会话级 Dialog;Renderer
530
528
 
531
529
  OS 加购过程中的内部弹窗和业务判断不属于 HDLKiosk Activity、Host Contract 或 Checkout Requirement。HDLKiosk 不读写相关业务事实,只根据主商品加购操作的最终结果决定是否跳转。
532
530
 
533
- Barcode 的主商品询问是独立 `primaryProductPrompt` Modal Slice:Yes 发出 `complete`,No 发出 `skip`。Actor 成功提交后直接记录同名 Resolution。Prompt 和 Customization occurrence 均声明 `visitPolicy: 'reuseResolution'`,因此拒绝或跳过后,从 Fulfillment 返回 Catalog 再次前进不会重复展示它们。正常完成 Customization 后可从 Fulfillment Back 返回编辑;若再退回 Catalog,旧 Customization Resolution 失效,之后前进会重新展示。跳过已有主商品前会先通过本地 Exit Effect 删除对应购物车行。
531
+ Barcode 的主商品询问是独立 `primaryProductPrompt` Modal Slice:Yes 发出 `complete`,No 发出 `omit`。Prompt 声明 `visitPolicy: 'once'`,因此任一选择成功提交后不再询问;关闭 Modal 只执行 Back,没有 Resolution,下次仍会展示。Customization 使用缺省 `always`:`complete` 后保留 Back 编辑能力;`omit` 会先通过本地 Exit Effect 删除已有主商品,再将该 Step 从后续路径和 Back 历史中排除。
534
532
 
535
533
  ## 11. 四条端到端调用链
536
534
 
@@ -26,7 +26,7 @@ Entry → Identity → Customization → Catalog → Fulfillment
26
26
  → Payment Method / Payment Completed → Entry
27
27
  ```
28
28
 
29
- - Quick 的 Identity occurrence 显式声明 `visitPolicy: 'once'`。登录或 Skip 成功后,该 Step 在本会话不再进入,也不写入 Back 页面历史。当没有更早的已访问页面时,Back 的导航目标为 `sessionExit`;全局会话策略返回 `defer(confirmEndOrder)` 并打开结束订单确认。确认后返回 Entry,取消则留在当前页。
29
+ - Quick 的 Identity occurrence 显式声明 `visitPolicy: 'once'`。登录或 Omit 成功后,该 Step 在本会话不再进入,也不写入 Back 页面历史。当没有更早的已访问页面时,Back 的导航目标为 `sessionExit`;全局会话策略返回 `defer(confirmEndOrder)` 并打开结束订单确认。确认后返回 Entry,取消则留在当前页。
30
30
  - Fulfillment 统一位于 Payment 之前确认堂食/外带。
31
31
  - Customization 只在稳定正净重且必选 options 完整时启用 Next。
32
32
  - “I don't need Malatang” 直接跳过主商品并进入 Catalog;如果正在编辑已确认主商品,则先移除该行。
@@ -67,7 +67,7 @@ Entry 消费第一个有效重量边沿后启动以 Fulfillment 为首节点的
67
67
 
68
68
  ## 6. 会员中途插入
69
69
 
70
- Identity 的 Skip 只表示当前以 Guest 继续。Shell 可在本地策略允许的页面执行 `identity.sync`。登录、Customer 写入、重报价和 Projection 验证成功后仍留在原节点;`partial`/`unknown` 不得带着未确认价格继续。
70
+ Identity 的 Omit 只表示当前以 Guest 继续。Shell 可在本地策略允许的页面执行 `identity.sync`。登录、Customer 写入、重报价和 Projection 验证成功后仍留在原节点;`partial`/`unknown` 不得带着未确认价格继续。
71
71
 
72
72
  ## 7. UI 和修改规则
73
73
 
@@ -35,7 +35,7 @@
35
35
  ### P1-1 商品和 Catalog
36
36
 
37
37
  - 将模板内临时固定商品 ID 改为租户/门店正式称重商品配置;商品结构已经切换为 OS `queryProducts`,不得恢复本地 fallback;
38
- - 确认 Quick 是否允许跳过称重主商品;若不允许,从 `customization` Activity Contract/Workflow 中移除 `skip` Intent;
38
+ - 确认 Quick 是否允许排除称重主商品;若不允许,从 `customization` Activity Contract/Workflow 中移除 `omit` Intent;
39
39
  - 大目录分页/虚拟滚动与分类切换性能;分类、子分类和本地搜索首版已完成;
40
40
  - 缺货、下架、菜单不可用、价格变化;
41
41
  - Barcode 细分 added/requiresSelection/notFound/cancelled;
@@ -12,7 +12,7 @@ const identity = defineSlice({
12
12
  screen: { id: 'identity' },
13
13
  intents: {
14
14
  complete: effect(identifyCustomer, { navigate: 'next' }),
15
- skip: next(),
15
+ omit: next(),
16
16
  },
17
17
  commands: {
18
18
  requestSmsCode,
@@ -50,7 +50,7 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
50
50
  visited.add(stepId);
51
51
  const node = definition.nodes[stepId];
52
52
  const storedResolution = stepResolutions.get(stepId);
53
- if (!node || !storedResolution || node.visitPolicy !== "reuseResolution" && node.visitPolicy !== "once") return stepId;
53
+ if (!node || !storedResolution || storedResolution !== "omit" && node.visitPolicy !== "once") return stepId;
54
54
  const transition = node.on[storedResolution];
55
55
  if (!transition) return stepId;
56
56
  stepId = transition.target;
@@ -116,7 +116,16 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
116
116
  const direction = !fromNodeId ? "initial" : delta < 0 ? "backward" : "forward";
117
117
  for (let candidateIndex = targetIndex; candidateIndex >= 0 && candidateIndex < definition.stepOrder.length; candidateIndex += delta) {
118
118
  const candidateStepId = definition.stepOrder[candidateIndex];
119
- if (definition.nodes[candidateStepId].visitPolicy === "once" && stepResolutions.has(candidateStepId)) continue;
119
+ const candidateNode = definition.nodes[candidateStepId];
120
+ if (candidateNode.presentation.mode === "modal") {
121
+ const fromNode = fromNodeId ? definition.nodes[fromNodeId] : void 0;
122
+ if (!fromNode || fromNode.presentation.mode === "modal") return {
123
+ type: "block",
124
+ error: createWorkflowError(fromNode ? "workflowNestedModalUnsupported" : "workflowModalRequiresPage", "staff")
125
+ };
126
+ }
127
+ const candidateResolution = stepResolutions.get(candidateStepId);
128
+ if (candidateResolution === "omit" || candidateNode.visitPolicy === "once" && candidateResolution) continue;
120
129
  const decision = beforeEach({
121
130
  navigationId,
122
131
  intentId,
@@ -176,6 +185,10 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
176
185
  context: Object.freeze(require_objectSpread2._objectSpread2({}, context)),
177
186
  completedStepIds: Object.freeze([]),
178
187
  stepResolutions: Object.freeze({}),
188
+ surface: Object.freeze({
189
+ pageStepId: startingNodeId,
190
+ overlays: Object.freeze([])
191
+ }),
179
192
  navigationHistory: Object.freeze([]),
180
193
  lastError: (_ref2 = initialError !== null && initialError !== void 0 ? initialError : initialResolutionError) !== null && _ref2 !== void 0 ? _ref2 : startingNode.end === "blocked" ? createWorkflowError("workflowEndedBlocked", "staff") : void 0
181
194
  });
@@ -184,6 +197,10 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
184
197
  context: Object.freeze(require_objectSpread2._objectSpread2({}, next.context)),
185
198
  completedStepIds: Object.freeze([...next.completedStepIds]),
186
199
  stepResolutions: Object.freeze(require_objectSpread2._objectSpread2({}, next.stepResolutions)),
200
+ surface: Object.freeze({
201
+ pageStepId: next.surface.pageStepId,
202
+ overlays: Object.freeze([...next.surface.overlays])
203
+ }),
187
204
  navigationHistory: Object.freeze([...next.navigationHistory]),
188
205
  pendingNavigation: next.pendingNavigation ? Object.freeze(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, next.pendingNavigation), {}, {
189
206
  to: Object.freeze(require_objectSpread2._objectSpread2({}, next.pendingNavigation.to)),
@@ -197,12 +214,20 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
197
214
  const commit = function() {
198
215
  var _ref3 = require_asyncToGenerator._asyncToGenerator(function* (fromNodeId, nodeId, event, nextContext, blocked, lastError, confirmedCheckout) {
199
216
  const node = definition.nodes[nodeId];
217
+ const surface = node.presentation.mode === "modal" ? Object.freeze({
218
+ pageStepId: snapshot.surface.pageStepId,
219
+ overlays: Object.freeze([nodeId])
220
+ }) : Object.freeze({
221
+ pageStepId: nodeId,
222
+ overlays: Object.freeze([])
223
+ });
200
224
  publish(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, snapshot), {}, {
201
225
  nodeId,
202
226
  status: blocked || node.end === "blocked" ? "blocked" : node.end === "success" ? "finished" : "idle",
203
227
  context: nextContext,
204
228
  completedStepIds: Object.freeze([...completedStepIds]),
205
229
  stepResolutions: Object.freeze(readStepResolutions()),
230
+ surface,
206
231
  navigationHistory: Object.freeze([...navigationHistory]),
207
232
  pendingNavigation: void 0,
208
233
  confirmedCheckout: confirmedCheckout !== null && confirmedCheckout !== void 0 ? confirmedCheckout : snapshot.confirmedCheckout,
@@ -357,7 +382,7 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
357
382
  if (event.intent === "complete" && node.presentation.mode === "page" && movesForward && node.visitPolicy !== "once") {
358
383
  navigationHistory = navigationHistory.filter((stepId) => stepId !== fromNodeId);
359
384
  navigationHistory.push(fromNodeId);
360
- } else if (event.intent === "skip") navigationHistory = navigationHistory.filter((stepId) => stepId !== fromNodeId);
385
+ } else if (event.intent === "omit") navigationHistory = navigationHistory.filter((stepId) => stepId !== fromNodeId);
361
386
  yield commit(fromNodeId, resolvedTarget, event, nextContext, false, void 0, result.confirmedCheckout);
362
387
  return;
363
388
  }
@@ -411,8 +436,13 @@ function createWorkflowActor({ definition, context, sessionEpoch, transitionRunn
411
436
  if (resolution.type === "step") {
412
437
  const fromIndex = definition.stepOrder.indexOf(fromNodeId);
413
438
  if (definition.stepOrder.indexOf(resolution.stepId) < fromIndex) stepResolutions.delete(fromNodeId);
414
- const historyIndex = navigationHistory.lastIndexOf(resolution.stepId);
415
- if (historyIndex >= 0) navigationHistory = navigationHistory.slice(0, historyIndex);
439
+ if (definition.nodes[resolution.stepId].presentation.mode === "modal" && definition.nodes[fromNodeId].presentation.mode === "page") {
440
+ navigationHistory = navigationHistory.filter((stepId) => stepId !== fromNodeId);
441
+ navigationHistory.push(fromNodeId);
442
+ } else {
443
+ const historyIndex = navigationHistory.lastIndexOf(resolution.stepId);
444
+ if (historyIndex >= 0) navigationHistory = navigationHistory.slice(0, historyIndex);
445
+ }
416
446
  yield commit(fromNodeId, resolution.stepId, {
417
447
  intentId,
418
448
  intent: "directNavigation"
@@ -127,7 +127,7 @@ function compileWorkflowStructure(input, options) {
127
127
  "screen"
128
128
  ], stepPath, issues);
129
129
  if (rawStep.screen !== void 0) addIssue(issues, "step.screen.forbidden", `${stepPath}.screen`, "Screen is resolved by the local Activity Contract");
130
- if (rawStep.visitPolicy !== void 0 && rawStep.visitPolicy !== "always" && rawStep.visitPolicy !== "reuseResolution" && rawStep.visitPolicy !== "once") addIssue(issues, "step.visitPolicy.invalid", `${stepPath}.visitPolicy`, "Step visitPolicy must be always, reuseResolution or once");
130
+ if (rawStep.visitPolicy !== void 0 && rawStep.visitPolicy !== "always" && rawStep.visitPolicy !== "once") addIssue(issues, "step.visitPolicy.invalid", `${stepPath}.visitPolicy`, "Step visitPolicy must be always or once");
131
131
  const activityValue = rawStep.activity;
132
132
  if (typeof activityValue !== "string" || !activities.has(activityValue)) addIssue(issues, "activity.unknown", `${stepPath}.activity`, `Unknown activity: ${String(activityValue)}`);
133
133
  const fallbackActivityId = activities.ids[0];
@@ -161,15 +161,11 @@ function compileWorkflowStructure(input, options) {
161
161
  const rawPresentation = rawStep.presentation;
162
162
  let presentation = { mode: "page" };
163
163
  if (rawPresentation !== void 0) {
164
- if (isRecord(rawPresentation)) rejectUnknownFields(rawPresentation, ["mode", "base"], `${stepPath}.presentation`, issues);
164
+ if (isRecord(rawPresentation)) rejectUnknownFields(rawPresentation, ["mode"], `${stepPath}.presentation`, issues);
165
165
  if (!isRecord(rawPresentation)) addIssue(issues, "step.presentation.invalid", `${stepPath}.presentation`, "Step presentation must be an object");
166
166
  else if (rawPresentation.mode !== "page" && rawPresentation.mode !== "modal") addIssue(issues, "step.presentation.mode.invalid", `${stepPath}.presentation.mode`, "Presentation mode must be page or modal");
167
167
  else if (!activity.allowedPresentations.includes(rawPresentation.mode)) addIssue(issues, "activity.presentation.unsupported", `${stepPath}.presentation.mode`, `Activity ${activity.id} does not support ${rawPresentation.mode}`);
168
- else if (rawPresentation.mode === "modal") if (typeof rawPresentation.base !== "string" || !rawPresentation.base.trim()) addIssue(issues, "step.presentation.base.invalid", `${stepPath}.presentation.base`, "Modal base must be a non-empty step id");
169
- else presentation = {
170
- mode: "modal",
171
- base: rawPresentation.base.trim()
172
- };
168
+ else if (rawPresentation.mode === "modal") presentation = { mode: "modal" };
173
169
  }
174
170
  if (rawStep.readiness !== void 0 && rawStep.readiness !== "implemented" && rawStep.readiness !== "placeholder") addIssue(issues, "step.readiness.invalid", `${stepPath}.readiness`, "Step readiness must be implemented or placeholder");
175
171
  if (rawStep.end !== void 0 && rawStep.end !== "success" && rawStep.end !== "blocked") addIssue(issues, "step.end.invalid", `${stepPath}.end`, "Step end must be success or blocked");
@@ -235,7 +231,7 @@ function compileWorkflowStructure(input, options) {
235
231
  screenId: activity.screenId,
236
232
  presentation,
237
233
  readiness: rawStep.readiness === "placeholder" ? "placeholder" : void 0,
238
- visitPolicy: rawStep.visitPolicy === "reuseResolution" || rawStep.visitPolicy === "once" ? rawStep.visitPolicy : "always",
234
+ visitPolicy: rawStep.visitPolicy === "once" ? "once" : "always",
239
235
  guardPhases: Object.freeze([...guardPhases]),
240
236
  on: Object.freeze(transitions),
241
237
  end: rawStep.end === "success" || rawStep.end === "blocked" ? rawStep.end : void 0
@@ -246,13 +242,12 @@ function compileWorkflowStructure(input, options) {
246
242
  Object.entries(nodes).forEach(([stepId, node]) => {
247
243
  var _stepIndex$get;
248
244
  const path = `steps.${(_stepIndex$get = stepIndex.get(stepId)) !== null && _stepIndex$get !== void 0 ? _stepIndex$get : 0}`;
249
- if (node.presentation.mode === "modal") {
250
- const base = nodes[node.presentation.base];
251
- if (!base) addIssue(issues, "step.presentation.base.missing", `${path}.presentation.base`, `Modal base step does not exist: ${node.presentation.base}`);
252
- else if (node.presentation.base === stepId) addIssue(issues, "step.presentation.base.self", `${path}.presentation.base`, "Modal step cannot use itself as its base");
253
- else if (base.presentation.mode === "modal") addIssue(issues, "step.presentation.base.modal", `${path}.presentation.base`, "Modal step cannot use another modal step as its base");
254
- }
245
+ if (node.presentation.mode === "modal" && stepId === stepIds[0]) addIssue(issues, "workflow.initial.modal", `${path}.presentation.mode`, "Workflow initial step must provide a page surface");
255
246
  const transitions = Object.entries(node.on).filter((entry) => entry[1]);
247
+ transitions.forEach(([intent, transition]) => {
248
+ var _nodes$transition$tar;
249
+ if (node.presentation.mode === "modal" && transition && ((_nodes$transition$tar = nodes[transition.target]) === null || _nodes$transition$tar === void 0 ? void 0 : _nodes$transition$tar.presentation.mode) === "modal") addIssue(issues, "transition.modal.nested", `${path}.on.${intent}`, "A modal step cannot navigate directly to another modal step");
250
+ });
256
251
  if (!node.end && transitions.length === 0) addIssue(issues, "step.deadEnd", path, "A step without outgoing transitions must declare its end state");
257
252
  if (node.end && transitions.length > 0) addIssue(issues, "step.end.hasTransitions", path, "An end step cannot expose outgoing transitions");
258
253
  transitions.forEach(([intent, transition]) => {
@@ -49,7 +49,7 @@ function HDLKioskWorkflowCartOverlay({ model, busy, memberAction, send, renderCa
49
49
  * Host、Workflow Actor 或会话计时器。
50
50
  */
51
51
  function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderIdentityAuth, renderCartContent, cartOverlayActions, returnToEntry }) {
52
- var _snapshot$pendingNavi, _snapshot$pendingNavi2, _activeNode$presentat, _customer$error, _activeNode$presentat2;
52
+ var _snapshot$pendingNavi, _snapshot$pendingNavi2, _session$definition$n2, _customer$error, _activeNode$presentat;
53
53
  const snapshot = require_useWorkflowSnapshot.useWorkflowSnapshot(session.actor);
54
54
  const sequence = (0, react.useRef)(0);
55
55
  const resetInFlight = (0, react.useRef)(false);
@@ -68,7 +68,7 @@ function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderId
68
68
  var _session$definition$n;
69
69
  return ((_session$definition$n = session.definition.nodes[stepId]) === null || _session$definition$n === void 0 ? void 0 : _session$definition$n.activity) === "customization";
70
70
  });
71
- const screenDataNode = ((_activeNode$presentat = activeNode.presentation) === null || _activeNode$presentat === void 0 ? void 0 : _activeNode$presentat.mode) === "modal" ? session.definition.nodes[activeNode.presentation.base] : activeNode;
71
+ const screenDataNode = (_session$definition$n2 = session.definition.nodes[snapshot.surface.pageStepId]) !== null && _session$definition$n2 !== void 0 ? _session$definition$n2 : activeNode;
72
72
  const paymentSafeForReset = sales.payment.status === "idle" || sales.payment.status === "failed";
73
73
  const resetSession = (0, react.useCallback)(require_asyncToGenerator._asyncToGenerator(function* () {
74
74
  if (resetInFlight.current) return;
@@ -246,7 +246,7 @@ function HDLKioskWorkflowView({ session, host, sales, config, isActive, renderId
246
246
  memberAction,
247
247
  variant: currentScreenId === "identity" ? "identityGate" : "default"
248
248
  }, /* @__PURE__ */ react.default.createElement(require_index$5.HDLKioskBottomBarHost, {
249
- mode: ((_activeNode$presentat2 = activeNode.presentation) === null || _activeNode$presentat2 === void 0 ? void 0 : _activeNode$presentat2.mode) === "modal" || endOrderConfirmationOpen || memberLoginOpen ? "masked" : "visible",
249
+ mode: ((_activeNode$presentat = activeNode.presentation) === null || _activeNode$presentat === void 0 ? void 0 : _activeNode$presentat.mode) === "modal" || endOrderConfirmationOpen || memberLoginOpen ? "masked" : "visible",
250
250
  fallback: endOrderBottomBar,
251
251
  cartOverlayActions,
252
252
  promotionsAvailable: Boolean(renderCartContent)
@@ -244,11 +244,11 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
244
244
  send,
245
245
  syncing
246
246
  ]);
247
- const skipPrimaryProduct = (0, react.useCallback)(() => {
247
+ const omitPrimaryProduct = (0, react.useCallback)(() => {
248
248
  var _orderBar$primaryLine10;
249
249
  send({
250
250
  kind: "intent",
251
- intent: "skip",
251
+ intent: "omit",
252
252
  operationInput: { lineId: (_orderBar$primaryLine10 = orderBar.primaryLine) === null || _orderBar$primaryLine10 === void 0 ? void 0 : _orderBar$primaryLine10.lineId }
253
253
  });
254
254
  }, [(_orderBar$primaryLine11 = orderBar.primaryLine) === null || _orderBar$primaryLine11 === void 0 ? void 0 : _orderBar$primaryLine11.lineId, send]);
@@ -335,7 +335,7 @@ function CustomizationScreen({ product, loading, errorReference, errorMessage, b
335
335
  type: "button",
336
336
  className: "hdl-customization-skip",
337
337
  disabled: busy || syncing,
338
- onClick: skipPrimaryProduct
338
+ onClick: omitPrimaryProduct
339
339
  }, _pisell_utils.locales.getText("pisell2.hdl-kiosk.customization-skip")));
340
340
  }
341
341
  //#endregion
@@ -9,7 +9,7 @@ const customizationSlice = require_defineSlice.defineSlice({
9
9
  commands: { removePrimaryProduct: require_cart.cartRemoveLineOperation },
10
10
  intents: {
11
11
  complete: require_defineSlice.effect(require_operation.productSyncPrimaryWeightedProductOperation, { navigate: "next" }),
12
- skip: require_defineSlice.effect(require_operation.productRemovePrimaryProductOperation, { navigate: "next" })
12
+ omit: require_defineSlice.effect(require_operation.productRemovePrimaryProductOperation, { navigate: "next" })
13
13
  }
14
14
  });
15
15
  //#endregion
@@ -10,7 +10,7 @@ const QR_CELLS = Object.freeze(Array.from({ length: 49 }, (_, index) => index *
10
10
  * Quick Order 的前置会员提示页。
11
11
  *
12
12
  * 宿主可注入认证 UI;未注入时保留 QR / SMS 视觉 fallback。Skip 继续产生
13
- * identity.skip Intent,由本地 Exit Policy 同步访客后进入下一步。
13
+ * identity.omit Intent,由本地 Exit Policy 同步访客后进入下一步。
14
14
  */
15
15
  function IdentityScreen({ model, orderBar, send, renderIdentityAuth }) {
16
16
  const [authBusy, setAuthBusy] = (0, react.useState)(false);
@@ -82,7 +82,7 @@ function IdentityScreen({ model, orderBar, send, renderIdentityAuth }) {
82
82
  disabled: busy,
83
83
  onClick: () => send({
84
84
  kind: "intent",
85
- intent: "skip",
85
+ intent: "omit",
86
86
  operationInput: {}
87
87
  })
88
88
  }, _pisell_utils.locales.getText("pisell2.hdl-kiosk.skip")), model.errorReference ? /* @__PURE__ */ react.default.createElement("div", {
@@ -7,7 +7,7 @@ const identitySlice = require_defineSlice.defineSlice({
7
7
  screen: { id: "identity" },
8
8
  intents: {
9
9
  complete: require_defineSlice.effect(require_operation.identitySyncOperation, { navigate: "next" }),
10
- skip: require_defineSlice.effect(require_operation.identitySyncOperation, { navigate: "next" })
10
+ omit: require_defineSlice.effect(require_operation.identitySyncOperation, { navigate: "next" })
11
11
  }
12
12
  });
13
13
  //#endregion
@@ -7,7 +7,7 @@ const primaryProductPromptSlice = require_defineSlice.defineSlice({
7
7
  presentation: "modal",
8
8
  intents: {
9
9
  complete: require_defineSlice.intentPrecondition("cart.notEmpty", { navigate: "next" }),
10
- skip: require_defineSlice.intentPrecondition("cart.notEmpty")
10
+ omit: require_defineSlice.intentPrecondition("cart.notEmpty")
11
11
  }
12
12
  });
13
13
  //#endregion
@@ -3,13 +3,13 @@ const require_index = require("../catalog/PrimaryProductPromptDialog/index.js");
3
3
  let react = require("react");
4
4
  react = require_runtime.__toESM(react);
5
5
  //#region src/components/HDLKiosk/slices/primaryProductPrompt/view.tsx
6
- /** 主商品询问展示:将用户选择转换为标准 completed/skipped 结果。 */
6
+ /** 主商品询问展示:将用户选择转换为标准 complete/omit 结果。 */
7
7
  function PrimaryProductPromptView({ busy, send }) {
8
8
  return /* @__PURE__ */ react.default.createElement(require_index.PrimaryProductPromptDialog, {
9
9
  busy,
10
10
  onDecline: () => send({
11
11
  kind: "intent",
12
- intent: "skip"
12
+ intent: "omit"
13
13
  }),
14
14
  onAccept: () => send({
15
15
  kind: "intent",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pisell/private-materials",
3
- "version": "6.12.167",
3
+ "version": "6.12.168",
4
4
  "main": "./lib/index.js",
5
5
  "module": "./es/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -70,10 +70,10 @@
70
70
  "styled-components": "^6.0.0-rc.3",
71
71
  "use-sync-external-store": "^1.6.0",
72
72
  "@pisell/pi-payment-sdk": "0.0.3",
73
+ "@pisell/date-picker": "3.0.10",
73
74
  "@pisell/utils": "3.0.4",
74
75
  "@pisell/icon": "0.0.11",
75
- "@pisell/materials": "6.12.50",
76
- "@pisell/date-picker": "3.0.10"
76
+ "@pisell/materials": "6.12.50"
77
77
  },
78
78
  "peerDependencies": {
79
79
  "react": "^18.0.0",
@@ -1,17 +0,0 @@
1
- import "./serve/formResourcePage.js";
2
- import "./floorRoomCard/mapRowToFloorRoomCardData.js";
3
- import "./floorRoomCard/ReservationFloorRoomCard.js";
4
- import "./floorMap/reservationMock.js";
5
- import "./floorMap/floorPlanApi.js";
6
- import "./reservationConstants.js";
7
- import "./data/bookingToReservationTables.js";
8
- import "./data/formResourceToReservationTables.js";
9
- import "./data/salesEmbeddedResourceToTableRows.js";
10
- import "./floorMap/reservationCards.js";
11
- import "./PisellReservation.js";
12
- import "./PisellReservationBookingPage.js";
13
- import "./PisellVenueControlPage.js";
14
- import "./PisellVenueWallPage.js";
15
- import "./PisellReservationTablePage.js";
16
- import "./components/SelectFloorMapResourceDialog.js";
17
- export {};