/** * Sales SDK 顶层导出。 * * 该模块为「headless 业务数据层」:通过 React Provider + Hooks 暴露 OS BookingTicket 数据流, * 不依赖任何 UI 组件;所有对外名称均带 `SalesSdk` / `useSalesSdk` 前缀,避免与既有 `components/Sales` * UI 模块同名冲突。 * * 入口约定: * - 顶层包裹: * - 数据 + actions:useSalesSdk / useSalesSdkProducts / useSalesSdkCart / useSalesSdkCustomer / useSalesSdkSummary * - 派生:deriveDisabledEdit / deriveSummary / isWalkInCustomer * - 多源 enrich:enrichCartItem(s) / enrichCustomer / pickIdentity * - 通用基础:useSyncOsModule */ export { SalesSdkProvider } from './context/SalesSdkProvider'; export { formatBookingDateTime, subscribeBookingDateChange, BOOKING_CONTEXT_DATE_EVENT, } from './utils/bookingDate'; export { SalesSdkBookingContextProvider, useSalesSdkBookingContext, } from './context/SalesSdkBookingContext'; export type { SalesSdkBookingContextValue } from './context/SalesSdkBookingContext'; export { SalesSdkHolderProvider, useSalesSdkHolder, } from './context/SalesSdkHolderContext'; export type { SalesSdkHolderContextValue } from './context/SalesSdkHolderContext'; export { SalesSdkDemo } from './demo'; export type { SalesSdkDemoProps } from './demo'; export { useSalesSdk } from './hooks/useSalesSdk'; export { useSalesSdkProducts } from './hooks/useSalesSdkProducts'; export { useSalesSdkCart } from './hooks/useSalesSdkCart'; export { useSalesSdkCustomer } from './hooks/useSalesSdkCustomer'; export { useSalesSdkSummary } from './hooks/useSalesSdkSummary'; export { useSalesSdkUIHosts } from './hooks/useSalesSdkUIHosts'; export { useSyncOsModule } from './hooks/useSyncOsModule'; export { enrichCartItem, enrichCartItems, enrichCustomer } from './utils/enrich'; export { enrichCartBookingHolderDisplay, resolveHolderDisplayConfig, pickHolderIdFromBooking, buildHolderListRequestParams, } from './utils/enrichCartLineHolderDisplay'; export { formatHolderOptions, normalizeHolderIds, resolveHolderLabels, } from './utils/formatHolderOptions'; export type { SalesSdkHolderOption } from './utils/formatHolderOptions'; export { runAddProductFlow } from './utils/runAddProductFlow'; export type { RunAddProductFlowCartApi, RunAddProductFlowOptions } from './utils/runAddProductFlow'; export { createAddProductWithFlowDebounced, DEFAULT_ADD_PRODUCT_DEBOUNCE_MS, } from './utils/addProductWithFlowDebounced'; export { resolveAddProductDebounceKey } from './utils/resolveAddProductDebounceKey'; export { resolveInCartQuantityForAddToast } from './utils/resolveInCartQuantityForAddToast'; export { showAddToCartToast } from './components/showAddToCartToast'; export { BookingEditServiceDrawer } from './bookingEditService/BookingEditServiceDrawer'; export { BookingEditHostRenderer } from './hosts/BookingEditHostRenderer'; export { NormalProductDetailHostRenderer } from './normalProductDetail/NormalProductDetailHostRenderer'; export { createOpenBookingEditHost } from './hosts/createOpenBookingEditHost'; export { createOpenMultiDaySelectHost } from './hosts/createOpenMultiDaySelectHost'; export { createOpenHolderSelectHost } from './hosts/createOpenHolderSelectHost'; export { createCompositeOpenProductDetailHost } from './hosts/createCompositeOpenProductDetailHost'; export { createOpenNormalProductDetailHost } from './normalProductDetail/createOpenNormalProductDetailHost'; export { createLegacyOpenProductDetailHost, type CreateLegacyOpenProductDetailHostDeps, type LegacyProductDetailHostRuntime, } from './demo/hosts/legacyOpenProductDetail'; export type { BookingEditServiceDrawerProps } from './bookingEditService/types'; export { pickIdentity } from './utils/identity'; export { deriveDisabledEdit, deriveSummary, isWalkInCustomer } from './selectors'; export { shouldPromptHolderBeforeSubmit, collectUnassignedHolderLines, buildHolderConfirmSnapshotKeys, buildHolderConfirmDisplayLines, } from './utils/holderSubmitValidation'; export type { HolderConfirmSnapshotKey, HolderConfirmDisplayLine, } from './utils/holderSubmitValidation'; export { ensureHoldersBeforeSubmit } from './utils/ensureHoldersBeforeSubmit'; export type { SalesSdkStatus, SalesSdkProviderProps, SalesSdkContextValue, SalesSdkProductsContextValue, SalesSdkCartContextValue, SalesSdkCustomerContextValue, SalesSdkCustomerSearchOptions, SalesSdkSummaryContextValue, SalesSdkCartBookingView, SalesSdkCartItemView, SalesSdkCustomerView, SalesSdkAddProductRequiresDetailPayload, SalesSdkAddProductResult, SalesSdkAddProductWithFlowResult, SalesSdkAddProductWithFlowOptions, SalesSdkCustomProductInput, SalesSdkUIHosts, SalesSdkMultiDaySelectResult, SalesSdkOpenMultiDaySelectPayload, SalesSdkOpenHolderSelectPayload, SalesSdkConfirmBookingEditInput, SalesSdkConfirmDetailInput, SalesSdkConfirmDetailResult, SalesSdkRequiresBookingEditPayload, SalesSdkSubmitSalesOrderParams, SalesSdkEditCartLineBookingResult, SalesSdkEditCartLineProductResult, SalesSdkEditCartLineResult, SalesSdkResourceUnavailableReason, SalesSdkResourceError, } from './types'; export type { SalesSdkDerivedDisabledEdit, SalesSdkDerivedSummary, } from './selectors'; export type { ScanOrderOrderProduct, ScanOrderOrderProductIdentity, ScanOrderTempOrder, ScanOrderSummary, ISalesDetail, ISalesDetailHeader, ISalesBooking, ISalesPayment, ISalesSurcharge, ISalesDetailCustomer, ICustomer, ICustomerListResponse, IGetCustomerListParams, IPaginationInfo, ProductData, ILoadProductsParams, ILoadProductDetailParams, IScanResult, UpdateOrderProductParams, UpdateOrderProductQuantityParams, UpdateProductInOrderParams, BaseSalesScanCodeResult, RulesParamsHooks, BookingTicketHandle, SalesSdkLoadSalesDetailParams, } from './types';