@zappie/foundations 0.1.1 → 0.1.2

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 (72) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/account/index.js +49 -0
  3. package/dist/account/index.js.map +7 -0
  4. package/dist/cart/index.js +168 -0
  5. package/dist/cart/index.js.map +7 -0
  6. package/dist/fulfilment/address-picker.js +168 -0
  7. package/dist/fulfilment/address-picker.js.map +7 -0
  8. package/dist/fulfilment/branch-picker.js +54 -0
  9. package/dist/fulfilment/branch-picker.js.map +7 -0
  10. package/dist/fulfilment/schedule.js +146 -0
  11. package/dist/fulfilment/schedule.js.map +7 -0
  12. package/dist/fulfilment/switch.js +54 -0
  13. package/dist/fulfilment/switch.js.map +7 -0
  14. package/dist/index.js +48 -2114
  15. package/dist/index.js.map +7 -1
  16. package/dist/internal/combobox.js +131 -0
  17. package/dist/internal/combobox.js.map +7 -0
  18. package/dist/internal/data-attrs.js +8 -0
  19. package/dist/internal/data-attrs.js.map +7 -0
  20. package/dist/internal/ids.js +10 -0
  21. package/dist/internal/ids.js.map +7 -0
  22. package/dist/{chunk-D3J7S33L.js → internal/slot.js} +13 -6
  23. package/dist/internal/slot.js.map +7 -0
  24. package/dist/internal/use-controllable-state.js +29 -0
  25. package/dist/internal/use-controllable-state.js.map +7 -0
  26. package/dist/item-form/index.js +13 -0
  27. package/dist/item-form/index.js.map +7 -0
  28. package/dist/item-form/option-group.js +268 -0
  29. package/dist/item-form/option-group.js.map +7 -0
  30. package/dist/item-form/options.js +30 -0
  31. package/dist/item-form/options.js.map +7 -0
  32. package/dist/item-form/quantity.js +131 -0
  33. package/dist/item-form/quantity.js.map +7 -0
  34. package/dist/item-form/root.js +151 -0
  35. package/dist/item-form/root.js.map +7 -0
  36. package/dist/media/image.js +30 -0
  37. package/dist/media/image.js.map +7 -0
  38. package/dist/money.js +20 -0
  39. package/dist/money.js.map +7 -0
  40. package/dist/next.js +8 -6
  41. package/dist/next.js.map +7 -1
  42. package/dist/otp/input.js +110 -0
  43. package/dist/otp/input.js.map +7 -0
  44. package/dist/overlay/engine.js +16 -8
  45. package/dist/overlay/engine.js.map +7 -1
  46. package/dist/{chunk-BY2WQGLO.js → overlay/history.js} +9 -4
  47. package/dist/overlay/history.js.map +7 -0
  48. package/dist/overlay/react.js +261 -0
  49. package/dist/overlay/react.js.map +7 -0
  50. package/dist/payment/methods.js +103 -0
  51. package/dist/payment/methods.js.map +7 -0
  52. package/dist/rich-text/banners.js +9 -0
  53. package/dist/rich-text/banners.js.map +7 -0
  54. package/dist/rich-text/browser.js +3 -3
  55. package/dist/rich-text/browser.js.map +7 -1
  56. package/dist/rich-text/core.js +75 -0
  57. package/dist/rich-text/core.js.map +7 -0
  58. package/dist/rich-text/index.js +3 -79
  59. package/dist/rich-text/index.js.map +7 -1
  60. package/dist/search/engine.js +93 -0
  61. package/dist/search/engine.js.map +7 -0
  62. package/dist/search/index.js +175 -0
  63. package/dist/search/index.js.map +7 -0
  64. package/dist/status/hours.js +177 -0
  65. package/dist/status/hours.js.map +7 -0
  66. package/dist/status/open-status.js +45 -0
  67. package/dist/status/open-status.js.map +7 -0
  68. package/dist/version.js +6 -0
  69. package/dist/version.js.map +7 -0
  70. package/package.json +3 -3
  71. package/dist/chunk-BY2WQGLO.js.map +0 -1
  72. package/dist/chunk-D3J7S33L.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1,7 @@
1
- {"version":3,"sources":["../src/version.ts","../src/account/index.tsx","../src/internal/data-attrs.ts","../src/internal/use-controllable-state.ts","../src/item-form/quantity.tsx","../src/cart/index.tsx","../src/internal/ids.ts","../src/internal/combobox.tsx","../src/fulfilment/address-picker.tsx","../src/status/hours.ts","../src/fulfilment/branch-picker.tsx","../src/fulfilment/schedule.tsx","../src/fulfilment/switch.tsx","../src/item-form/root.tsx","../src/item-form/options.tsx","../src/item-form/option-group.tsx","../src/item-form/index.ts","../src/media/image.tsx","../src/money.tsx","../src/otp/input.tsx","../src/overlay/react.tsx","../src/payment/methods.tsx","../src/search/engine.ts","../src/search/index.tsx","../src/status/open-status.tsx","../src/index.ts"],"names":["SignIn","SignOut","useCallback","forwardRef","Value","Context","createContext","useContext","Root","jsx","Line","Remove","Empty","Issues","Totals","useState","useEffect","id","Input","Suggestions","Suggestion","hours","Picker","useCart","Schedule","useStore","useMemo","Switch","branch","useZappie","useCartCatalogue","useRef","Options","Add","ctx","group","ChoiceView","Choice","OptionGroup","Money","useContextValue","useId","handle","Trigger","Content","Title","Close","Item","method","useMenu","value","Results","Result","OpenStatus"],"mappings":"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","file":"index.js","sourcesContent":["// Builds replace __ZAPPIE_FOUNDATIONS_VERSION__ with the version in package.json. Code run straight\n// from source, such as a plain Node script, has no build step and gets the\n// development label instead.\ndeclare const __ZAPPIE_FOUNDATIONS_VERSION__: string | undefined;\n\n/** The installed @zappie/foundations version. */\nexport const PACKAGE_VERSION: string =\n typeof __ZAPPIE_FOUNDATIONS_VERSION__ === \"string\"\n ? __ZAPPIE_FOUNDATIONS_VERSION__\n : \"0.0.0-development\";\n","import { forwardRef } from \"react\";\nimport { part, type PartProps } from \"../internal/slot\";\n/** Account stubs that do not read credentials or host authentication. */\nexport type Customer = { id: string; givenName?: string; phoneMasked: string };\n/**\n * Sign-in options reserved by the account contract.\n * The current Account sign-in stub rejects with AccountNotConfiguredError.\n */\nexport type SignInOptions = {\n returnTo?: string;\n prompt?: \"none\" | \"login\";\n display?: \"popup\" | \"redirect\" | \"auto\";\n scopes?: (\n | \"openid\"\n | \"phone\"\n | \"profile\"\n | \"addresses\"\n | \"orders:read\"\n | \"offline_access\"\n | \"cart\"\n )[];\n};\n/**\n * An error from Account sign-in and sign-out when authentication is not configured.\n */\nexport class AccountNotConfiguredError extends Error {\n readonly code = \"not_configured\";\n constructor() {\n super(\"Account authentication requires SDK auth (Open Storefronts PRD 13)\");\n this.name = \"AccountNotConfiguredError\";\n }\n}\nasync function signIn(_options?: SignInOptions): Promise<void> {\n throw new AccountNotConfiguredError();\n}\nasync function signOut(_options?: { everywhere?: boolean }): Promise<void> {\n throw new AccountNotConfiguredError();\n}\nconst SignIn = forwardRef<\n HTMLElement,\n PartProps<{ signIn: typeof signIn; status: \"not_configured\" }>\n>(function SignIn(props, ref) {\n return part(\n \"div\",\n props,\n { signIn, status: \"not_configured\" },\n { \"data-state\": \"invalid\" },\n ref,\n );\n});\nconst SignOut = forwardRef<\n HTMLElement,\n PartProps<{ signOut: typeof signOut; status: \"not_configured\" }>\n>(function SignOut(props, ref) {\n return part(\n \"div\",\n props,\n { signOut, status: \"not_configured\" },\n { \"data-state\": \"invalid\" },\n ref,\n );\n});\nconst CustomerPart = forwardRef<\n HTMLElement,\n PartProps<{ customer: Customer | null; status: \"not_configured\" }>\n>(function Customer(props, ref) {\n return part(\n \"div\",\n props,\n { customer: null, status: \"not_configured\" },\n { \"data-state\": \"invalid\" },\n ref,\n );\n});\n/**\n * Account UI stubs that expose a not_configured status and a null customer.\n * SignIn and SignOut reject with AccountNotConfiguredError. They do not authenticate.\n */\nexport const Account = { SignIn, SignOut, Customer: CustomerPart };\n","export function flag(value: unknown): \"\" | undefined {\n return value ? \"\" : undefined;\n}\n","import { useCallback, useRef, useState } from \"react\";\n/**\n * Manage either a supplied value or internal state initialized from defaultValue.\n * The setter accepts a value or updater and calls onChange only when Object.is detects a change.\n *\n * @returns The current value and a stable setter. A defined value keeps state controlled by you.\n */\nexport function useControllableState<T>({\n value,\n defaultValue,\n onChange,\n}: {\n value?: T | undefined;\n defaultValue: T;\n onChange?: ((value: T) => void) | undefined;\n}) {\n const [internal, setInternal] = useState(defaultValue);\n const current = value === undefined ? internal : value;\n const latest = useRef({ current, onChange, controlled: value !== undefined });\n latest.current = { current, onChange, controlled: value !== undefined };\n const set = useCallback((next: T | ((previous: T) => T)) => {\n const snapshot = latest.current;\n const resolved =\n typeof next === \"function\"\n ? (next as (previous: T) => T)(snapshot.current)\n : next;\n if (Object.is(resolved, snapshot.current)) {\n return;\n }\n if (!snapshot.controlled) {\n latest.current.current = resolved;\n setInternal(resolved);\n }\n snapshot.onChange?.(resolved);\n }, []);\n return [current, set] as const;\n}\n","\"use client\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n type ChangeEvent,\n type KeyboardEvent,\n} from \"react\";\nimport { flag } from \"../internal/data-attrs\";\nimport { part, type PartProps } from \"../internal/slot\";\nimport { useControllableState } from \"../internal/use-controllable-state\";\n/**\n * The current quantity, bounds, step, disabled state and value setter exposed by a quantity control.\n */\nexport type QuantityState = {\n value: number;\n setValue: (value: number) => void;\n min: number;\n max: number;\n step: number;\n disabled: boolean;\n};\nconst Context = createContext<QuantityState | null>(null);\nfunction useQuantity() {\n const context = useContext(Context);\n if (!context) {\n throw new Error(\"Quantity parts require Quantity.Root\");\n }\n return context;\n}\n/**\n * Controlled or default quantity, bounds and change callback for Quantity.Root.\n */\nexport type QuantityProps = PartProps<QuantityState> & {\n value?: number;\n defaultValue?: number;\n onValueChange?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n};\nfunction Root({\n value,\n defaultValue,\n onValueChange,\n min = 1,\n max = 99,\n step = 1,\n disabled = false,\n ...props\n}: QuantityProps) {\n if (\n !Number.isFinite(min) ||\n !Number.isFinite(max) ||\n !Number.isFinite(step) ||\n step <= 0 ||\n min > max\n ) {\n throw new RangeError(\n \"Quantity requires finite ordered bounds and a positive step\",\n );\n }\n const [current, set] = useControllableState({\n value,\n defaultValue: defaultValue ?? min,\n onChange: onValueChange,\n });\n const setValue = useCallback(\n (next: number) => {\n if (!disabled && Number.isFinite(next)) {\n const last = min + Math.floor((max - min) / step) * step;\n set(\n Math.max(\n min,\n Math.min(last, min + Math.round((next - min) / step) * step),\n ),\n );\n }\n },\n [min, max, step, disabled, set],\n );\n const state = useMemo(\n () => ({ value: current, setValue, min, max, step, disabled }),\n [current, setValue, min, max, step, disabled],\n );\n return (\n <Context.Provider value={state}>\n {part(\"div\", props, state, { \"data-disabled\": flag(disabled) })}\n </Context.Provider>\n );\n}\nfunction button(direction: -1 | 1) {\n return forwardRef<HTMLElement, PartProps<QuantityState>>(\n function QuantityButton(props, ref) {\n const ctx = useQuantity();\n const disabled =\n ctx.disabled ||\n (direction < 0 ? ctx.value <= ctx.min : ctx.value + ctx.step > ctx.max);\n return part(\n \"button\",\n props,\n ctx,\n {\n type: \"button\",\n disabled,\n \"aria-disabled\": disabled,\n \"data-disabled\": flag(disabled),\n onClick: () => ctx.setValue(ctx.value + direction * ctx.step),\n },\n ref,\n );\n },\n );\n}\nconst Value = forwardRef<HTMLElement, PartProps<QuantityState>>(\n function Value(props, ref) {\n const ctx = useQuantity();\n return part(\n \"input\",\n props,\n ctx,\n {\n type: \"text\",\n inputMode: \"numeric\",\n role: \"spinbutton\",\n value: String(ctx.value),\n disabled: ctx.disabled,\n \"aria-valuenow\": ctx.value,\n \"aria-valuemin\": ctx.min,\n \"aria-valuemax\": ctx.max,\n onChange: (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.value.trim()) {\n ctx.setValue(Number(event.target.value));\n }\n },\n onKeyDown: (event: KeyboardEvent) => {\n const next = {\n ArrowUp: ctx.value + ctx.step,\n ArrowDown: ctx.value - ctx.step,\n Home: ctx.min,\n End: ctx.max,\n }[event.key];\n if (next !== undefined) {\n event.preventDefault();\n ctx.setValue(next);\n }\n },\n },\n ref,\n );\n },\n);\n/**\n * Composable quantity controls with bounded step changes and keyboard support.\n * Wrap Value, Increment and Decrement in Quantity.Root.\n *\n * @example\n * ```tsx\n * <Quantity.Root min={1} max={10} defaultValue={1}>\n * <Quantity.Decrement>Less</Quantity.Decrement>\n * <Quantity.Value aria-label=\"Quantity\" />\n * <Quantity.Increment>More</Quantity.Increment>\n * </Quantity.Root>\n * ```\n */\nexport const Quantity = {\n Root,\n Value,\n Increment: button(1),\n Decrement: button(-1),\n};\n","\"use client\";\nimport type {\n CartFix,\n CartIssue,\n CartLine,\n CartLineInput,\n Quote,\n} from \"@zappie/sdk\";\nimport { useCart, useCartCatalogue, useZappie } from \"@zappie/sdk/react\";\nimport {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { part, type PartProps } from \"../internal/slot\";\nimport { Quantity, type QuantityProps } from \"../item-form/quantity\";\ntype CartContext = ReturnType<typeof useCart>;\nconst Context = createContext<CartContext | null>(null);\nfunction useContextValue() {\n const value = useContext(Context);\n if (!value) {\n throw new Error(\"Cart parts require Cart.Root\");\n }\n return value;\n}\nfunction Root(props: PartProps<CartContext>) {\n const state = useCart();\n return (\n <Context.Provider value={state}>\n {part(\"div\", props, state, {\n \"data-state\": !state.isHydrated\n ? \"loading\"\n : state.issues.some((issue) => issue.severity === \"blocking\")\n ? \"invalid\"\n : \"valid\",\n })}\n </Context.Provider>\n );\n}\ntype LineContext = {\n line: CartLine;\n item: import(\"@zappie/sdk\").Item | undefined;\n edit: (patch: Partial<Omit<CartLineInput, \"itemId\">>) => CartLine;\n remove: () => void;\n};\nconst Line = forwardRef<\n HTMLElement,\n PartProps<LineContext> & { line: CartLine }\n>(function Line({ line, ...props }, ref) {\n const cart = useContextValue();\n const item = useCartCatalogue()?.items[line.itemId];\n const current = cart.lines.find((candidate) => candidate.id === line.id);\n if (!current) {\n return null;\n }\n const context = {\n line: current,\n item,\n edit: (patch: Partial<Omit<CartLineInput, \"itemId\">>) =>\n cart.actions.update(line.id, patch),\n remove: () => cart.actions.remove(line.id),\n };\n return part(\n \"div\",\n props,\n context,\n {\n \"data-zappie-cart-line\": line.id,\n \"data-invalid\": cart.issues.some(\n (issue) => issue.lineId === line.id && issue.severity === \"blocking\",\n )\n ? \"\"\n : undefined,\n },\n ref,\n );\n});\nfunction CartQuantity({\n lineId,\n ...props\n}: Omit<QuantityProps, \"value\" | \"defaultValue\" | \"onValueChange\"> & {\n lineId: string;\n}) {\n const cart = useContextValue();\n const line = cart.lines.find((candidate) => candidate.id === lineId);\n const item = useCartCatalogue()?.items[line?.itemId ?? \"\"];\n if (!line) {\n return null;\n }\n const step = item?.quantity.step ?? 1;\n const min = Math.ceil((item?.quantity.min ?? 1) / step) * step;\n return (\n <Quantity.Root\n {...props}\n value={line.quantity}\n min={min}\n max={Math.min(item?.quantity.max ?? 99, 99)}\n step={step}\n onValueChange={(quantity) => cart.actions.update(lineId, { quantity })}\n />\n );\n}\nconst Remove = forwardRef<HTMLElement, PartProps & { lineId: string }>(\n function Remove({ lineId, ...props }, ref) {\n const cart = useContextValue();\n return part(\n \"button\",\n props,\n {},\n { type: \"button\", onClick: () => cart.actions.remove(lineId) },\n ref,\n );\n },\n);\nconst Empty = forwardRef<HTMLElement, PartProps>(function Empty(props, ref) {\n const cart = useContextValue();\n return cart.isHydrated && !cart.lines.length\n ? part(\"div\", props, {}, {}, ref)\n : null;\n});\nconst Issues = forwardRef<\n HTMLElement,\n PartProps<{\n issues: readonly CartIssue[];\n applyFix: (issue: CartIssue, fix?: CartFix) => void;\n }>\n>(function Issues(props, ref) {\n const cart = useContextValue();\n return part(\n \"div\",\n props,\n { issues: cart.issues, applyFix: cart.actions.applyFix },\n {\n \"aria-live\": \"polite\",\n \"data-state\": cart.issues.length ? \"invalid\" : \"valid\",\n },\n ref,\n );\n});\n/**\n * Composable cart parts for lines, quantity changes, removal, empty state and validation issues.\n * Wrap the parts in Cart.Root inside your ZappieProvider.\n */\nexport const Cart = {\n Root,\n Line,\n Quantity: CartQuantity,\n Remove,\n Empty,\n Issues,\n};\n/**\n * The quote and its display status: loading, stale, ready or offline.\n */\nexport type TotalsState = {\n quote?: Quote | undefined;\n status: \"loading\" | \"stale\" | \"ready\" | \"offline\";\n};\n/**\n * Expose the cart quote and its freshness or network status to your render function.\n * Subscribes to the cart and quote failures through your ZappieProvider.\n */\nexport const Totals = forwardRef<HTMLElement, PartProps<TotalsState>>(\n function Totals(props, ref) {\n const cart = useCart();\n const client = useZappie();\n const [failure, setFailure] = useState<\"offline\" | \"stale\" | null>(null);\n const [expired, setExpired] = useState(false);\n const quote = \"quote\" in cart.state ? cart.state.quote : undefined;\n useEffect(\n () =>\n client.on(\"quote_failed\", ({ code }) =>\n setFailure(\n code === \"network_error\" || code === \"timeout\"\n ? \"offline\"\n : \"stale\",\n ),\n ),\n [client],\n );\n useEffect(() => {\n if (cart.state.status === \"quoting\" || quote) {\n setFailure(null);\n }\n setExpired(Boolean(quote && Date.parse(quote.expiresAt) <= Date.now()));\n if (!quote) {\n return;\n }\n const timeout = setTimeout(\n () => setExpired(true),\n Math.max(\n 0,\n Math.min(2147483647, Date.parse(quote.expiresAt) - Date.now()),\n ),\n );\n return () => clearTimeout(timeout);\n }, [quote, cart.state.status]);\n // The SDK re-quotes shortly after every change, so a cart with lines and\n // no quote yet is waiting for one rather than stale.\n const pending =\n cart.state.status === \"ready\" && !quote && cart.lines.length > 0;\n const status: TotalsState[\"status\"] =\n failure === \"offline\"\n ? \"offline\"\n : cart.state.status === \"quoting\" || !cart.isHydrated\n ? \"loading\"\n : failure === \"stale\" || expired\n ? \"stale\"\n : pending\n ? \"loading\"\n : !quote\n ? \"stale\"\n : \"ready\";\n return part(\n \"div\",\n props,\n { quote, status },\n {\n \"aria-live\": \"polite\",\n \"aria-busy\": status === \"loading\",\n \"data-state\":\n status === \"ready\"\n ? \"valid\"\n : status === \"offline\"\n ? \"stale\"\n : status,\n },\n ref,\n );\n },\n);\n","import { useId } from \"react\";\nexport function usePartId(provided?: string) {\n const id = useId();\n return provided ?? `zappie-${id.replace(/[^a-zA-Z0-9_-]/g, \"\")}`;\n}\n","import {\n useEffect,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { usePartId } from \"./ids\";\nexport function useCombobox<T>(\n results: readonly T[],\n onSelect: (item: T) => void,\n) {\n const id = usePartId();\n const [activeIndex, setActiveIndex] = useState(-1);\n const [isOpen, setOpen] = useState(false);\n const [listId, setListId] = useState(`${id}-list`);\n const [optionIds, setOptionIds] = useState<Record<number, string>>({});\n // Reset the highlight when the result set changes size; callers reset on a new query.\n // Keying on the array itself would reset on every re-render with an unmemoised array.\n useEffect(() => setActiveIndex(-1), [results.length]);\n const registerOption = (index: number, id: string) =>\n setOptionIds((previous) =>\n previous[index] === id ? previous : { ...previous, [index]: id },\n );\n const active = activeIndex < results.length ? activeIndex : -1;\n const optionId = (index: number) =>\n optionIds[index] ?? `${id}-option-${index}`;\n const activeId = isOpen && active >= 0 ? optionId(active) : undefined;\n // aria-activedescendant doesn't move focus, so keep the highlighted option visible.\n useEffect(() => {\n if (activeId) {\n document.getElementById(activeId)?.scrollIntoView?.({ block: \"nearest\" });\n }\n }, [activeId]);\n const select = (index: number) => {\n const item = results[index];\n if (item !== undefined) {\n onSelect(item);\n setOpen(false);\n setActiveIndex(-1);\n }\n };\n return {\n setListId,\n registerOption,\n activeIndex: active,\n setActiveIndex,\n isOpen,\n setOpen,\n select,\n inputProps: {\n role: \"combobox\",\n \"aria-autocomplete\": \"list\" as const,\n \"aria-expanded\": isOpen,\n \"aria-controls\": listId,\n \"aria-activedescendant\": activeId,\n onKeyDown: (event: KeyboardEvent) => {\n // Keys pressed while an input method composes text belong to the IME, not the list.\n if (event.nativeEvent.isComposing || event.keyCode === 229) {\n return;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n setOpen(false);\n setActiveIndex(-1);\n } else if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex(\n results.length\n ? active < 0\n ? event.key === \"ArrowDown\"\n ? 0\n : results.length - 1\n : (active +\n (event.key === \"ArrowDown\" ? 1 : -1) +\n results.length) %\n results.length\n : -1,\n );\n } else if (event.key === \"Enter\" && isOpen && active >= 0) {\n event.preventDefault();\n select(active);\n }\n },\n onFocus: () => setOpen(true),\n },\n listProps: { id: listId, role: \"listbox\", hidden: !isOpen },\n getOptionProps: (index: number) => ({\n id: optionId(index),\n role: \"option\",\n \"aria-selected\": active === index,\n \"data-selected\": active === index ? \"\" : undefined,\n onMouseDown: (event: { preventDefault: () => void }) =>\n event.preventDefault(),\n // Inside a drawer or sheet, the overlay engine starts a swipe on any\n // press that isn't a button, link or field, then captures the pointer,\n // so the option's click never fires on touch. Options aren't swipe handles.\n onPointerDown: (event: { stopPropagation: () => void }) =>\n event.stopPropagation(),\n onTouchStart: (event: { stopPropagation: () => void }) =>\n event.stopPropagation(),\n onClick: () => select(index),\n }),\n };\n}\n/** Visually hidden but announced; an accessibility mechanism, not a visual default. */\nconst visuallyHidden: CSSProperties = {\n position: \"absolute\",\n width: 1,\n height: 1,\n margin: -1,\n padding: 0,\n border: 0,\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n whiteSpace: \"nowrap\",\n};\n/** Default English announcement of how many options a combobox is showing. */\nexport function countAnnouncement(count: number) {\n return count === 0\n ? \"No results\"\n : `${count} result${count === 1 ? \"\" : \"s\"} available`;\n}\n/** A polite status region so screen readers hear how many options are listed. */\nexport function LiveRegion({ message }: { message: string }) {\n return (\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n data-zappie-live=\"\"\n style={visuallyHidden}\n >\n {message}\n </span>\n );\n}\n/** Append the live region to a root's children; with `asChild` the caller owns the single child. */\nexport function withLiveRegion<S>(\n props: { asChild?: boolean | undefined; children?: unknown },\n message: string,\n): typeof props {\n if (props.asChild) {\n return props;\n }\n const children = props.children;\n return {\n ...props,\n children: (state: S) => (\n <>\n {typeof children === \"function\"\n ? (children as (state: S) => ReactNode)(state)\n : (children as ReactNode)}\n <LiveRegion message={message} />\n </>\n ),\n };\n}\n","\"use client\";\nimport type { DeliveryAddress } from \"@zappie/sdk\";\nimport {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useState,\n type ChangeEvent,\n} from \"react\";\nimport {\n countAnnouncement,\n useCombobox,\n withLiveRegion,\n} from \"../internal/combobox\";\nimport { composeRefs, part, type PartProps } from \"../internal/slot\";\nimport { useControllableState } from \"../internal/use-controllable-state\";\n/**\n * A labelled address suggestion with an ID and the delivery address selected by the shopper.\n */\nexport type AddressSuggestion = {\n id: string;\n label: string;\n address: DeliveryAddress;\n};\n/**\n * Address picker state with query controls, combobox navigation, suggestions and request status.\n */\nexport type AddressState = ReturnType<typeof useCombobox<AddressSuggestion>> & {\n query: string;\n setQuery: (query: string) => void;\n suggestions: AddressSuggestion[];\n status: \"loading\" | \"ready\" | \"error\";\n error?: unknown;\n};\nconst Context = createContext<AddressState | null>(null);\nfunction useAddress() {\n const ctx = useContext(Context);\n if (!ctx) {\n throw new Error(\"Address parts require Address.Picker\");\n }\n return ctx;\n}\nfunction Picker({\n getSuggestions,\n onSelect,\n query,\n defaultQuery = \"\",\n onQueryChange,\n debounceMs = 200,\n announcement = countAnnouncement,\n ...props\n}: PartProps<AddressState> & {\n /** Screen-reader text for the suggestion count. Override it for your language. */\n announcement?: (count: number) => string;\n getSuggestions: (\n query: string,\n signal?: AbortSignal,\n ) => Promise<AddressSuggestion[]>;\n onSelect: (suggestion: AddressSuggestion) => void;\n query?: string;\n defaultQuery?: string;\n onQueryChange?: (query: string) => void;\n debounceMs?: number;\n}) {\n const [value, setValue] = useControllableState({\n value: query,\n defaultValue: defaultQuery,\n onChange: onQueryChange,\n });\n const [response, setResponse] = useState<{\n query: string;\n suggestions: AddressSuggestion[];\n status: AddressState[\"status\"];\n error?: unknown;\n }>({ query: \"\", suggestions: [], status: \"ready\" });\n const suggestions = response.query === value ? response.suggestions : [];\n const combo = useCombobox(suggestions, (suggestion) => {\n setValue(suggestion.label);\n onSelect(suggestion);\n });\n useEffect(() => {\n if (!value.trim()) {\n setResponse({ query: value, suggestions: [], status: \"ready\" });\n return;\n }\n let live = true;\n const abort = new AbortController();\n setResponse({ query: value, suggestions: [], status: \"loading\" });\n const timer = setTimeout(() => {\n void Promise.resolve()\n .then(() => getSuggestions(value, abort.signal))\n .then(\n (items) => {\n if (live) {\n setResponse({\n query: value,\n suggestions: items,\n status: \"ready\",\n });\n }\n },\n (error) => {\n if (live) {\n setResponse({\n query: value,\n suggestions: [],\n status: \"error\",\n error,\n });\n }\n },\n );\n }, debounceMs);\n return () => {\n live = false;\n abort.abort();\n clearTimeout(timer);\n };\n }, [value, getSuggestions, debounceMs]);\n const setQuery = (next: string) => {\n setValue(next);\n combo.setOpen(true);\n combo.setActiveIndex(-1);\n };\n const state = {\n ...combo,\n query: value,\n setQuery,\n suggestions,\n status: response.status,\n error: response.error,\n };\n return (\n <Context.Provider value={state}>\n {part(\n \"div\",\n withLiveRegion(\n props,\n combo.isOpen && value.trim() && response.status === \"ready\"\n ? announcement(suggestions.length)\n : \"\",\n ) as typeof props,\n state,\n {\n \"data-state\":\n response.status === \"error\"\n ? \"invalid\"\n : response.status === \"loading\"\n ? \"loading\"\n : \"valid\",\n onBlur: (event: {\n currentTarget: HTMLElement;\n relatedTarget: Node | null;\n }) => {\n if (!event.currentTarget.contains(event.relatedTarget)) {\n combo.setOpen(false);\n }\n },\n },\n )}\n </Context.Provider>\n );\n}\nconst Input = forwardRef<HTMLElement, PartProps<AddressState>>(\n function Input(props, ref) {\n const state = useAddress();\n return part(\n \"input\",\n props,\n state,\n {\n ...state.inputProps,\n type: \"text\",\n autoComplete: \"street-address\",\n \"data-zappie-address-input\": \"\",\n value: state.query,\n onChange: (event: ChangeEvent<HTMLInputElement>) =>\n state.setQuery(event.target.value),\n },\n ref,\n );\n },\n);\nconst Suggestions = forwardRef<HTMLElement, PartProps<AddressState>>(\n function Suggestions(props, ref) {\n const state = useAddress();\n return part(\n \"div\",\n props,\n state,\n { ...state.listProps, \"aria-busy\": state.status === \"loading\" },\n composeRefs(ref, (node) => {\n if (node?.id && node.id !== state.listProps.id) {\n state.setListId(node.id);\n }\n }),\n );\n },\n);\nconst Suggestion = forwardRef<\n HTMLElement,\n PartProps<AddressState> & { index: number }\n>(function Suggestion({ index, ...props }, ref) {\n const state = useAddress();\n return part(\n \"div\",\n props,\n state,\n state.getOptionProps(index),\n composeRefs(ref, (node) => {\n if (node?.id && node.id !== state.getOptionProps(index).id) {\n state.registerOption(index, node.id);\n }\n }),\n );\n});\n/**\n * Composable address picker parts with debounced suggestions and keyboard navigation.\n * Supply getSuggestions and onSelect to Address.Picker. It cancels outdated requests.\n */\nexport const Address = { Picker, Input, Suggestions, Suggestion };\n","import type { Branch, OpeningTime } from \"@zappie/sdk\";\nconst DAY = 86400000;\nconst formatters = new Map<string, Intl.DateTimeFormat>();\nfunction formatter(timezone: string) {\n let value = formatters.get(timezone);\n if (!value) {\n value = new Intl.DateTimeFormat(\"en-CA\", {\n timeZone: timezone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hourCycle: \"h23\",\n });\n formatters.set(timezone, value);\n }\n return value;\n}\nexport function localParts(date: Date, timezone: string) {\n const parts = Object.fromEntries(\n formatter(timezone)\n .formatToParts(date)\n .map(({ type, value }) => [type, value]),\n );\n return {\n date: `${parts.year}-${parts.month}-${parts.day}`,\n hour: Number(parts.hour),\n minute: Number(parts.minute),\n second: Number(parts.second),\n };\n}\n/**\n * Parse a zero-padded HH:mm or HH:mm:ss wall-clock value without applying a time zone.\n *\n * @returns Clock parts with 12-hour and 24-hour values, or undefined for an invalid time.\n * @example\n * ```ts\n * parseWallClock(\"14:30\"); // { hour24: 14, hour12: 2, minute: 30, second: 0, period: \"PM\" }\n * ```\n */\nexport function parseWallClock(value: string) {\n const match = /^(\\d{2}):(\\d{2})(?::(\\d{2}))?$/.exec(value);\n if (\n !match ||\n Number(match[1]) > 23 ||\n Number(match[2]) > 59 ||\n Number(match[3] ?? 0) > 59\n ) {\n return undefined;\n }\n const hour24 = Number(match[1]);\n return {\n hour24,\n hour12: hour24 % 12 || 12,\n minute: Number(match[2]),\n second: Number(match[3] ?? 0),\n period: hour24 >= 12 ? \"PM\" : \"AM\",\n };\n}\n/**\n * Format a valid wall-clock time as a 12-hour label with AM or PM.\n * Omits zero minutes and all seconds. Returns invalid input unchanged.\n *\n * @example\n * ```ts\n * formatWallClock(\"14:00\"); // \"2 PM\"\n * formatWallClock(\"09:30:15\"); // \"9:30 AM\"\n * ```\n */\nexport function formatWallClock(value: string) {\n const time = parseWallClock(value);\n return time\n ? `${time.hour12}${time.minute ? `:${String(time.minute).padStart(2, \"0\")}` : \"\"} ${time.period}`\n : value;\n}\n/**\n * Group consecutive days with identical opening intervals into display labels.\n * Skips disabled intervals and days with no enabled hours, and orders the groups from Sunday to Saturday.\n */\nexport function formatOpeningHours(times: OpeningTime[]) {\n const names = [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ];\n const groups: { days: number[]; dayLabel: string; hoursLabel: string }[] = [];\n for (let day = 0; day < 7; day++) {\n const intervals = times\n .filter((time) => !time.disabled && time.day === day)\n .sort((a, b) => a.opens.localeCompare(b.opens));\n if (!intervals.length) {\n continue;\n }\n const hoursLabel = intervals\n .map(\n (time) =>\n `${formatWallClock(time.opens)} – ${formatWallClock(time.closes)}`,\n )\n .join(\", \");\n const last = groups[groups.length - 1];\n if (\n last &&\n last.days[last.days.length - 1] === day - 1 &&\n last.hoursLabel === hoursLabel\n ) {\n last.days.push(day);\n last.dayLabel = `${names[last.days[0]!]} – ${names[day]}`;\n } else {\n groups.push({ days: [day], dayLabel: names[day]!, hoursLabel });\n }\n }\n return groups;\n}\nexport function dateOffset(date: string, days: number) {\n return new Date(Date.parse(`${date}T00:00:00Z`) + days * DAY)\n .toISOString()\n .slice(0, 10);\n}\n/** Return all matching instants (two at a DST fold, none in a DST gap). */\nexport function wallInstants(date: string, clock: string, timezone: string) {\n const time = parseWallClock(clock);\n if (!time) {\n return [];\n }\n const wall =\n Date.parse(`${date}T00:00:00Z`) +\n ((time.hour24 * 60 + time.minute) * 60 + time.second) * 1000;\n const offsets = new Set<number>();\n for (const shift of [-DAY, 0, DAY]) {\n const sample = wall + shift;\n const local = localParts(new Date(sample), timezone);\n const asUTC =\n Date.parse(`${local.date}T00:00:00Z`) +\n ((local.hour * 60 + local.minute) * 60 + local.second) * 1000;\n offsets.add(asUTC - sample);\n }\n const matches = [];\n for (const offset of offsets) {\n const instant = wall - offset;\n const local = localParts(new Date(instant), timezone);\n if (\n local.date === date &&\n local.hour === time.hour24 &&\n local.minute === time.minute &&\n local.second === time.second\n ) {\n matches.push(instant);\n }\n }\n return matches.sort((a, b) => a - b);\n}\nexport type OpeningInterval = { start: number; end: number };\nexport function openingIntervals(\n branch: Branch,\n timezone: string,\n now: Date,\n days = 8,\n): OpeningInterval[] {\n const today = localParts(now, timezone).date;\n const intervals: OpeningInterval[] = [];\n for (let offset = -1; offset < days; offset++) {\n const date = dateOffset(today, offset);\n const day = new Date(`${date}T00:00:00Z`).getUTCDay();\n const special = branch.specialHours?.find((hours) => hours.date === date);\n const times = special\n ? special.closed || !special.opens || !special.closes\n ? []\n : [{ opens: special.opens, closes: special.closes }]\n : branch.openingTimes.filter(\n (hours) => hours.day === day && !hours.disabled,\n );\n for (const hours of times) {\n const starts = wallInstants(date, hours.opens, timezone);\n const overnight = hours.closes <= hours.opens;\n const endDate = overnight ? dateOffset(date, 1) : date;\n const ends = wallInstants(endDate, hours.closes, timezone);\n const start = starts[0];\n let end = ends[ends.length - 1];\n if (\n overnight &&\n branch.specialHours?.some(\n (hours) => hours.date === endDate && hours.closed,\n )\n ) {\n end = wallInstants(endDate, \"00:00\", timezone)[0];\n }\n if (start !== undefined && end !== undefined && start < end) {\n intervals.push({ start, end });\n }\n }\n }\n const closedUntil = branch.closedUntil\n ? Date.parse(branch.closedUntil)\n : -Infinity;\n const sorted = intervals\n .map(({ start, end }) => ({ start: Math.max(start, closedUntil), end }))\n .filter(({ start, end }) => start < end)\n .sort((a, b) => a.start - b.start);\n const merged: OpeningInterval[] = [];\n for (const interval of sorted) {\n const last = merged[merged.length - 1];\n if (last && interval.start <= last.end) {\n last.end = Math.max(last.end, interval.end);\n } else {\n merged.push({ ...interval });\n }\n }\n return merged;\n}\nexport type OpenStatusState = {\n isOpen: boolean;\n label: string;\n nextChange?: Date;\n};\n/**\n * Calculate whether a branch is open and provide its next opening or closing label.\n * Accounts for weekly hours, special hours, overnight intervals and closedUntil.\n *\n * @param branch - The branch whose opening rules apply.\n * @param timezone - The time zone used to interpret and display its hours.\n * @param now - The instant to check. Defaults to the current time.\n * @returns Open state, a display label and the next boundary found in the opening-hours window.\n */\nexport function getOpenStatus(\n branch: Branch,\n timezone: string,\n now = new Date(),\n): OpenStatusState {\n const intervals = openingIntervals(branch, timezone, now);\n const current = intervals.find(\n ({ start, end }) => start <= now.getTime() && end > now.getTime(),\n );\n const next =\n current?.end ?? intervals.find(({ start }) => start > now.getTime())?.start;\n if (next === undefined) {\n return { isOpen: false, label: \"Closed\" };\n }\n const nextChange = new Date(next);\n const local = localParts(nextChange, timezone);\n const clock = formatWallClock(\n `${String(local.hour).padStart(2, \"0\")}:${String(local.minute).padStart(2, \"0\")}`,\n )\n .toLowerCase()\n .replace(\" \", \"\");\n const today = localParts(now, timezone).date;\n const suffix =\n local.date === today\n ? \"\"\n : local.date === dateOffset(today, 1)\n ? \" tomorrow\"\n : ` ${new Intl.DateTimeFormat(\"en\", { timeZone: timezone, weekday: \"long\" }).format(nextChange)}`;\n return {\n isOpen: Boolean(current),\n label: current ? `Open until ${clock}` : `Opens ${clock}${suffix}`,\n nextChange,\n };\n}\n","\"use client\";\nimport type { Branch as BranchModel } from \"@zappie/sdk\";\nimport { useCart, useStore } from \"@zappie/sdk/react\";\nimport { forwardRef, useState } from \"react\";\nimport { part, type PartProps } from \"../internal/slot\";\nimport { getOpenStatus } from \"../status/hours\";\nexport type BranchPickerState = {\n branches: BranchModel[];\n selected?: BranchModel | undefined;\n isOpenNow: (branch: BranchModel) => boolean;\n select: (branch: BranchModel) => Promise<void>;\n isLoading: boolean;\n error?: unknown;\n};\nconst Picker = forwardRef<\n HTMLElement,\n PartProps<BranchPickerState> & {\n branches: BranchModel[];\n value?: string;\n onSelect?: (branch: BranchModel) => void;\n }\n>(function Picker({ branches, value, onSelect, ...props }, ref) {\n const cart = useCart();\n const store = useStore();\n const [isLoading, setLoading] = useState(false);\n const [error, setError] = useState<unknown>();\n const selected = branches.find(\n (branch) => branch.id === (value ?? cart.branchId),\n );\n const select = async (branch: BranchModel) => {\n if (\n isLoading ||\n branch.id === cart.branchId ||\n !branches.some((candidate) => candidate.id === branch.id)\n ) {\n return;\n }\n setLoading(true);\n setError(undefined);\n try {\n await cart.actions.moveTo(branch.id);\n onSelect?.(branch);\n } catch (failure) {\n setError(failure);\n } finally {\n setLoading(false);\n }\n };\n return part(\n \"div\",\n props,\n {\n branches,\n selected,\n select,\n isLoading,\n error,\n isOpenNow: (branch) =>\n getOpenStatus(branch, branch.timezone ?? store.data?.timezone ?? \"UTC\")\n .isOpen,\n },\n {\n role: \"group\",\n \"aria-busy\": isLoading,\n \"data-state\": isLoading ? \"loading\" : error ? \"invalid\" : \"valid\",\n },\n ref,\n );\n});\n/**\n * A branch picker that moves the cart to a selected branch and exposes loading and error state.\n * Use Branch.Picker within your ZappieProvider.\n */\nexport const Branch = { Picker };\n","\"use client\";\nimport type { Branch, MenuSchedule } from \"@zappie/sdk\";\nimport { useMenu, useStore } from \"@zappie/sdk/react\";\nimport { forwardRef, useEffect, useMemo, useState } from \"react\";\nimport { part, type PartProps } from \"../internal/slot\";\nimport { useControllableState } from \"../internal/use-controllable-state\";\nimport { getOpenStatus, localParts, openingIntervals } from \"../status/hours\";\n/**\n * A selectable time with an ISO instant, local date and display label including the UTC offset.\n */\nexport type ScheduleSlot = { value: string; label: string; date: string };\n/**\n * Available days and slots, the selected time and controls for choosing ASAP or a scheduled time.\n */\nexport type ScheduleState = {\n days: { date: string; slots: ScheduleSlot[] }[];\n slots: ScheduleSlot[];\n value: string | null;\n setValue: (value: string | null) => void;\n isAsap: boolean;\n canAsap: boolean;\n isValid: boolean;\n};\n/**\n * Generate scheduling slots within branch hours and any supplied menu hours and preorder limits.\n * Returns no slots when the branch does not support scheduling.\n *\n * @param branch - The branch whose hours and scheduling capability apply.\n * @param timezone - The time zone used to interpret opening hours and label slots.\n * @param now - The instant from which notice and scheduling limits are measured.\n * @returns Slots with ISO values, local dates and display labels.\n */\nexport function scheduleSlots(\n branch: Branch,\n timezone: string,\n now: Date,\n {\n intervalMinutes = 30,\n maxDays = 14,\n noticeMinutes = 0,\n menuSchedule,\n }: {\n intervalMinutes?: number | undefined;\n maxDays?: number | undefined;\n noticeMinutes?: number | undefined;\n menuSchedule?: MenuSchedule | undefined;\n } = {},\n) {\n if (\n !Number.isInteger(intervalMinutes) ||\n intervalMinutes < 1 ||\n !Number.isInteger(maxDays) ||\n maxDays < 1 ||\n maxDays > 90 ||\n !Number.isFinite(noticeMinutes) ||\n noticeMinutes < 0\n ) {\n throw new RangeError(\n \"Schedule requires a positive interval, 1–90 days and a non-negative notice\",\n );\n }\n if (!branch.fulfilment.scheduling) {\n return [];\n }\n // Pre-order limits apply to pre-order menus only. Other menus carry zeros\n // (the API's default), and a zero horizon would leave nothing to schedule.\n const preorder = menuSchedule?.preorder ? menuSchedule : undefined;\n const days =\n preorder?.preorderMaxDays && preorder.preorderMaxDays > 0\n ? Math.min(maxDays, preorder.preorderMaxDays)\n : maxDays;\n const earliest =\n now.getTime() +\n Math.max(noticeMinutes, (preorder?.preorderNoticeHours ?? 0) * 60) * 60000;\n const latest = now.getTime() + days * 86400000;\n const menuIntervals = menuSchedule?.openingTimes.length\n ? openingIntervals(\n {\n ...branch,\n openingTimes: menuSchedule.openingTimes,\n specialHours: [],\n },\n timezone,\n now,\n days + 1,\n )\n : undefined;\n const slots: ScheduleSlot[] = [];\n for (const { start, end } of openingIntervals(\n branch,\n timezone,\n now,\n days + 1,\n )) {\n const first =\n start +\n Math.max(0, Math.ceil((earliest - start) / (intervalMinutes * 60000))) *\n intervalMinutes *\n 60000;\n for (\n let instant = first;\n instant < end && instant <= latest;\n instant += intervalMinutes * 60000\n ) {\n if (\n menuIntervals &&\n !menuIntervals.some(\n (interval) => interval.start <= instant && interval.end > instant,\n )\n ) {\n continue;\n }\n const date = new Date(instant);\n slots.push({\n value: date.toISOString(),\n date: localParts(date, timezone).date,\n label: new Intl.DateTimeFormat(\"en\", {\n timeZone: timezone,\n hour: \"numeric\",\n minute: \"2-digit\",\n timeZoneName: \"shortOffset\",\n }).format(date),\n });\n }\n }\n return slots;\n}\n/**\n * Expose valid fulfilment slots and ASAP eligibility using branch hours and loaded menu metadata.\n * Use null for ASAP. Requires a ZappieProvider and refreshes the available times each minute.\n */\nexport const Schedule = forwardRef<\n HTMLElement,\n PartProps<ScheduleState> & {\n branch: Branch;\n timezone?: string;\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string | null) => void;\n intervalMinutes?: number | undefined;\n maxDays?: number | undefined;\n noticeMinutes?: number;\n }\n>(function Schedule(\n {\n branch,\n timezone: suppliedTimezone,\n value,\n defaultValue = null,\n onValueChange,\n intervalMinutes,\n maxDays,\n noticeMinutes,\n ...props\n },\n ref,\n) {\n const store = useStore();\n const menu = useMenu(branch.id, { metadataOnly: true });\n const timezone =\n suppliedTimezone ?? branch.timezone ?? store.data?.timezone ?? \"UTC\";\n const [now, setNow] = useState(() => new Date());\n useEffect(() => {\n const timer = setTimeout(\n () => setNow(new Date()),\n 60000 - (Date.now() % 60000),\n );\n return () => clearTimeout(timer);\n }, [now]);\n const [selection, setSelection] = useControllableState({\n value,\n defaultValue,\n onChange: onValueChange,\n });\n const slots = useMemo(\n () =>\n menu.isLoading || menu.error\n ? []\n : scheduleSlots(branch, timezone, now, {\n intervalMinutes,\n maxDays,\n noticeMinutes,\n menuSchedule: menu.data?.schedule,\n }),\n [\n branch,\n timezone,\n now,\n intervalMinutes,\n maxDays,\n noticeMinutes,\n menu.data?.schedule,\n menu.isLoading,\n menu.error,\n ],\n );\n const days = Array.from(new Set(slots.map((slot) => slot.date))).map(\n (date) => ({ date, slots: slots.filter((slot) => slot.date === date) }),\n );\n const canAsap =\n !menu.isLoading &&\n !menu.error &&\n !menu.data?.schedule?.preorder &&\n getOpenStatus(branch, timezone, now).isOpen;\n const isValid =\n selection === null\n ? canAsap\n : slots.some((slot) => slot.value === selection);\n const setValue = (next: string | null) => {\n if (next === null ? canAsap : slots.some((slot) => slot.value === next)) {\n setSelection(next);\n }\n };\n return part(\n \"div\",\n props,\n {\n days,\n slots,\n value: selection,\n setValue,\n isAsap: selection === null,\n canAsap,\n isValid,\n },\n {\n role: \"group\",\n \"data-state\": isValid ? \"valid\" : \"invalid\",\n \"data-invalid\": isValid ? undefined : \"\",\n },\n ref,\n );\n});\n","\"use client\";\nimport { ZappieError, type CartFulfilment } from \"@zappie/sdk\";\nimport { useCart, useStore } from \"@zappie/sdk/react\";\nimport { forwardRef } from \"react\";\nimport { part, type PartProps } from \"../internal/slot\";\nimport { useControllableState } from \"../internal/use-controllable-state\";\nexport type FulfilmentState = {\n options: CartFulfilment[\"type\"][];\n value: CartFulfilment | null;\n setValue: (value: CartFulfilment) => void;\n};\nconst Switch = forwardRef<\n HTMLElement,\n PartProps<FulfilmentState> & {\n value?: CartFulfilment | null;\n defaultValue?: CartFulfilment | null;\n onValueChange?: (value: CartFulfilment | null) => void;\n }\n>(function Switch({ value, defaultValue, onValueChange, ...props }, ref) {\n const cart = useCart();\n const store = useStore();\n const [selection, setSelection] = useControllableState({\n value,\n defaultValue: defaultValue ?? cart.fulfilment,\n onChange: onValueChange,\n });\n const current =\n value === undefined && defaultValue === undefined\n ? cart.fulfilment\n : selection;\n const branch =\n store.data?.branches.find(\n (branch) => branch.id === (cart.branchId ?? current?.branchId),\n ) ??\n store.data?.branches.find((branch) => branch.isDefault) ??\n store.data?.branches[0];\n const available = branch?.fulfilment;\n const options: CartFulfilment[\"type\"][] = [];\n if (available?.pickup) {\n options.push(\"pickup\");\n }\n if (available?.delivery) {\n options.push(\"delivery\");\n }\n if (available?.dineIn) {\n options.push(\"dine_in\");\n }\n const setValue = (next: CartFulfilment) => {\n if (!options.includes(next.type) || next.branchId !== branch?.id) {\n throw new ZappieError(\n \"invalid_request\",\n \"Select an offered fulfilment mode for this branch\",\n );\n }\n cart.actions.setFulfilment(next);\n setSelection(next);\n };\n return part(\n \"div\",\n props,\n { options, value: current, setValue },\n { role: \"group\" },\n ref,\n );\n});\n/**\n * A fulfilment switch that exposes the active branch modes and updates the SDK cart.\n * Selections must use an offered mode and the active branch ID.\n */\nexport const Fulfilment = { Switch };\n","\"use client\";\nimport {\n previewItem,\n ZappieCartError,\n type CartIssue,\n type CartLine,\n type CartLineInput,\n type Item,\n type Money,\n type OptionGroup,\n} from \"@zappie/sdk\";\nimport { useCartCatalogue, useZappie } from \"@zappie/sdk/react\";\nimport {\n createContext,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { part, type PartProps } from \"../internal/slot\";\nimport { useControllableState } from \"../internal/use-controllable-state\";\n/**\n * An SDK option group with the effective rules exposed by the item preview.\n */\nexport type ActiveGroup = OptionGroup;\n/**\n * The current item selection, preview prices, validation issues and actions supplied to item form parts.\n */\nexport type ItemFormContext = {\n item: Item;\n groups: ActiveGroup[];\n quantity: number;\n setQuantity: (quantity: number) => void;\n unitPrice: Money;\n total: Money;\n issues: CartIssue[];\n canAdd: boolean;\n add: () => CartLine | null;\n status: \"incomplete\" | \"valid\" | \"added\";\n value: CartLineInput;\n setValue: (value: CartLineInput) => void;\n};\nexport const ItemFormStateContext = createContext<ItemFormContext | null>(null);\nexport function useItemForm() {\n const value = useContext(ItemFormStateContext);\n if (!value) {\n throw new Error(\"ItemForm parts require ItemForm.Root\");\n }\n return value;\n}\nexport const GroupRegistry = createContext<Map<string, HTMLElement> | null>(\n null,\n);\n/**\n * Item form configuration with controlled or default selections and cart commit callbacks.\n * Supply onCommit to update an existing line instead of adding a new one.\n */\nexport type ItemFormProps = PartProps<ItemFormContext> & {\n item: Item;\n value?: CartLineInput;\n defaultValue?: Partial<CartLineInput>;\n onValueChange?: (value: CartLineInput) => void;\n defaultQuantity?: number;\n onAdded?: (line: CartLine) => void;\n /** Update an existing line through the same validation and focus workflow. */\n onCommit?: (input: CartLineInput) => CartLine;\n};\nexport function Root({\n item,\n value,\n defaultValue,\n onValueChange,\n defaultQuantity,\n onAdded,\n onCommit,\n ...props\n}: ItemFormProps) {\n const client = useZappie();\n const menu = useCartCatalogue();\n const [input, setInput] = useControllableState({\n value,\n defaultValue: {\n ...defaultValue,\n itemId: item.id,\n quantity: defaultQuantity ?? defaultValue?.quantity ?? item.quantity.min,\n },\n onChange: onValueChange,\n });\n const registry = useRef(new Map<string, HTMLElement>());\n const [added, setAdded] = useState(false);\n // Errors show only after the shopper tries to add (PRD 05 5.3), then track live validation.\n const [attempted, setAttempted] = useState(false);\n const [failure, setFailure] = useState<CartIssue[] | null>(null);\n const normalized = useMemo(\n () => ({ ...input, itemId: item.id }),\n [input, item.id],\n );\n const preview = useMemo(\n () => previewItem(item, normalized),\n [item, normalized],\n );\n const validation = useMemo(\n () => client.cart.validate(normalized),\n [client, normalized, menu],\n );\n const issues =\n failure ?? (attempted && !validation.ok ? validation.issues : []);\n const setValue = useCallback(\n (next: CartLineInput) => {\n setAdded(false);\n setFailure(null);\n setInput({ ...next, itemId: item.id });\n },\n [setInput, item.id],\n );\n const setQuantity = useCallback(\n (quantity: number) => setValue({ ...normalized, quantity }),\n [setValue, normalized],\n );\n const focusIssue = useCallback((errors: CartIssue[]) => {\n for (const [groupId, element] of registry.current) {\n if (errors.some((issue) => issue.groupId === groupId)) {\n element.focus();\n break;\n }\n }\n }, []);\n const add = useCallback(() => {\n const result = client.cart.validate(normalized);\n if (!result.ok) {\n setAttempted(true);\n setFailure(result.issues);\n focusIssue(result.issues);\n return null;\n }\n try {\n const line = onCommit\n ? onCommit(normalized)\n : client.cart.add(item, normalized);\n setAttempted(false);\n setAdded(true);\n onAdded?.(line);\n return line;\n } catch (error) {\n if (error instanceof ZappieCartError) {\n setAttempted(true);\n setFailure([...error.issues]);\n focusIssue([...error.issues]);\n return null;\n }\n throw error;\n }\n }, [client, normalized, item, onAdded, onCommit, focusIssue]);\n const context: ItemFormContext = useMemo(\n () => ({\n item,\n ...preview,\n quantity: normalized.quantity ?? item.quantity.min,\n setQuantity,\n issues,\n canAdd: validation.ok && !failure,\n add,\n status: added ? \"added\" : validation.ok ? \"valid\" : \"incomplete\",\n value: normalized,\n setValue,\n }),\n [\n item,\n preview,\n normalized,\n setQuantity,\n issues,\n validation.ok,\n failure,\n add,\n added,\n setValue,\n ],\n );\n return (\n <ItemFormStateContext.Provider value={context}>\n <GroupRegistry.Provider value={registry.current}>\n {part(\"div\", props, context, {\n \"data-zappie-item\": item.id,\n \"data-state\": issues.length ? \"invalid\" : \"valid\",\n \"data-sold-out\": item.isAvailable ? undefined : \"\",\n })}\n </GroupRegistry.Provider>\n </ItemFormStateContext.Provider>\n );\n}\n","import { forwardRef } from \"react\";\nimport { part, type PartProps } from \"../internal/slot\";\nimport { useItemForm, type ItemFormContext } from \"./root\";\nexport const Options = forwardRef<HTMLElement, PartProps<ItemFormContext>>(\n function Options(props, ref) {\n return part(\"div\", props, useItemForm(), {}, ref);\n },\n);\nexport const Add = forwardRef<HTMLElement, PartProps<ItemFormContext>>(\n function Add(props, ref) {\n const context = useItemForm();\n // Keep invalid configurations actionable so add() can explain and focus errors.\n return part(\n \"button\",\n props,\n context,\n {\n type: \"button\",\n onClick: context.add,\n \"data-zappie-action\": \"add-to-cart\",\n },\n ref,\n );\n },\n);\n","\"use client\";\nimport type {\n Choice as ChoiceModel,\n OptionGroup as GroupModel,\n} from \"@zappie/sdk\";\nimport {\n createContext,\n forwardRef,\n memo,\n useContext,\n useMemo,\n useRef,\n type ChangeEvent,\n type KeyboardEvent,\n} from \"react\";\nimport { flag } from \"../internal/data-attrs\";\nimport { usePartId } from \"../internal/ids\";\nimport { composeRefs, part, type PartProps } from \"../internal/slot\";\nimport { GroupRegistry, useItemForm } from \"./root\";\ntype GroupState = {\n group: GroupModel;\n selected: string[];\n invalid: boolean;\n input: string;\n setInput: (value: string) => void;\n toggle: (id: string) => void;\n quantities: Readonly<Record<string, number>>;\n /** Set a choice's quantity within its bounds. Zero deselects it. A positive value selects it. */\n setQuantity: (id: string, quantity: number) => void;\n};\nconst Context = createContext<GroupState | null>(null);\nfunction useGroup() {\n const value = useContext(Context);\n if (!value) {\n throw new Error(\"Choice and OptionGroup.Input require OptionGroup\");\n }\n return value;\n}\nconst Group = forwardRef<\n HTMLElement,\n PartProps<GroupState> & { group: GroupModel }\n>(function OptionGroup({ group: supplied, ...props }, ref) {\n const ctx = useItemForm();\n const registry = useContext(GroupRegistry)!;\n const group =\n ctx.groups.find((candidate) => candidate.id === supplied.id) ?? supplied;\n const mine =\n ctx.value.choices?.filter((choice) => choice.groupId === group.id) ?? [];\n const selected = mine.map((choice) => choice.choiceId);\n const quantities = Object.fromEntries(\n mine.map((choice) => [choice.choiceId, choice.quantity ?? 1]),\n );\n const invalid = ctx.issues.some((issue) => issue.groupId === group.id);\n const input = ctx.value.inputs?.[group.id] ?? \"\";\n const latest = useRef({ ctx, group });\n latest.current = { ctx, group };\n const actions = useMemo(\n () => ({\n toggle: (id: string) => {\n const { ctx, group } = latest.current;\n const choice = group.choices.find((candidate) => candidate.id === id);\n if (!choice?.isAvailable) {\n return;\n }\n const previous = ctx.value.choices ?? [];\n const chosen = previous.some(\n (candidate) =>\n candidate.groupId === group.id && candidate.choiceId === id,\n );\n let choices = previous.filter(\n (candidate) =>\n candidate.groupId !== group.id ||\n (group.selection.max !== 1 && candidate.choiceId !== id),\n );\n if (!chosen || (group.selection.max === 1 && group.required)) {\n choices = [\n ...choices,\n {\n groupId: group.id,\n choiceId: id,\n quantity: choice.quantity?.min ?? 1,\n },\n ];\n }\n const inputs = { ...ctx.value.inputs };\n delete inputs[group.id];\n ctx.setValue({ ...ctx.value, choices, inputs });\n },\n setQuantity: (id: string, quantity: number) => {\n const { ctx, group } = latest.current;\n const choice = group.choices.find((candidate) => candidate.id === id);\n if (!choice?.isAvailable || !Number.isInteger(quantity)) {\n return;\n }\n const others = (ctx.value.choices ?? []).filter(\n (candidate) =>\n candidate.groupId !== group.id ||\n (group.selection.max !== 1 && candidate.choiceId !== id),\n );\n if (quantity <= 0) {\n ctx.setValue({\n ...ctx.value,\n choices: (ctx.value.choices ?? []).filter(\n (candidate) =>\n candidate.groupId !== group.id || candidate.choiceId !== id,\n ),\n });\n return;\n }\n const min = choice.quantity?.min ?? 1;\n const max = choice.quantity?.max ?? 99;\n ctx.setValue({\n ...ctx.value,\n choices: [\n ...others,\n {\n groupId: group.id,\n choiceId: id,\n quantity: Math.min(max, Math.max(min, quantity)),\n },\n ],\n });\n },\n setInput: (value: string) => {\n const { ctx, group } = latest.current;\n ctx.setValue({\n ...ctx.value,\n choices: (ctx.value.choices ?? []).filter(\n (choice) => choice.groupId !== group.id,\n ),\n inputs: {\n ...ctx.value.inputs,\n [group.id]: value.slice(0, group.input?.maxLength ?? 500),\n },\n });\n },\n }),\n [],\n );\n const selectionKey = JSON.stringify(quantities);\n const state = useMemo(\n () => ({ group, selected, quantities, invalid, input, ...actions }),\n [group, selectionKey, invalid, input, actions],\n );\n const single = group.kind === \"select\" && group.selection.max === 1;\n return (\n <Context.Provider value={state}>\n {part(\n \"div\",\n props,\n state,\n {\n role: single ? \"radiogroup\" : \"group\",\n tabIndex: -1,\n \"aria-label\": group.name,\n \"aria-required\": single ? group.required : undefined,\n \"aria-invalid\": invalid || undefined,\n \"data-invalid\": flag(invalid),\n \"data-state\": invalid ? \"invalid\" : \"valid\",\n \"data-zappie-option-group\": group.id,\n onKeyDown: (event: KeyboardEvent<HTMLElement>) => {\n if (\n !single ||\n ![\n \"ArrowDown\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowLeft\",\n \"Home\",\n \"End\",\n ].includes(event.key)\n ) {\n return;\n }\n const choices = Array.from(\n event.currentTarget.querySelectorAll<HTMLElement>(\n '[role=\"radio\"]:not([aria-disabled=\"true\"])',\n ),\n );\n if (!choices.length) {\n return;\n }\n const current = choices.indexOf(\n document.activeElement as HTMLElement,\n );\n const index =\n event.key === \"Home\"\n ? 0\n : event.key === \"End\"\n ? choices.length - 1\n : (current +\n (event.key === \"ArrowUp\" || event.key === \"ArrowLeft\"\n ? -1\n : 1) +\n choices.length) %\n choices.length;\n event.preventDefault();\n choices[index]?.focus();\n choices[index]?.click();\n },\n },\n composeRefs(ref, (node) => {\n if (node) {\n registry.set(group.id, node);\n } else {\n registry.delete(group.id);\n }\n }),\n )}\n </Context.Provider>\n );\n});\ntype ChoiceState = {\n choice: ChoiceModel;\n selected: boolean;\n disabled: boolean;\n toggle: () => void;\n /** Selected quantity (0 when unselected) and the choice's bounds. */\n quantity: number;\n min: number;\n max: number;\n setQuantity: (quantity: number) => void;\n};\nconst ChoiceView = memo(\n forwardRef<\n HTMLElement,\n PartProps<ChoiceState> & {\n choice: ChoiceModel;\n selected: boolean;\n single: boolean;\n tabIndex: number;\n quantity: number;\n toggleChoice: (id: string) => void;\n setChoiceQuantity: (id: string, quantity: number) => void;\n }\n >(function ChoiceView(\n {\n choice,\n selected,\n single,\n tabIndex,\n quantity,\n toggleChoice,\n setChoiceQuantity,\n ...props\n },\n ref,\n ) {\n const toggle = () => toggleChoice(choice.id);\n const state = {\n choice,\n selected,\n disabled: !choice.isAvailable,\n toggle,\n quantity,\n min: choice.quantity?.min ?? 1,\n max: choice.quantity?.max ?? 99,\n setQuantity: (next: number) => setChoiceQuantity(choice.id, next),\n };\n return part(\n \"button\",\n props,\n state,\n {\n type: \"button\",\n role: single ? \"radio\" : \"checkbox\",\n tabIndex,\n \"aria-checked\": selected,\n \"aria-disabled\": !choice.isAvailable,\n disabled: !choice.isAvailable,\n \"data-selected\": flag(selected),\n \"data-sold-out\": flag(!choice.isAvailable),\n \"data-disabled\": flag(!choice.isAvailable),\n \"data-state\": selected ? \"checked\" : \"unchecked\",\n \"data-zappie-option\": choice.id,\n onClick: toggle,\n },\n ref,\n );\n }),\n);\n/**\n * Render a selectable option within an OptionGroup, with radio or checkbox semantics.\n * Exposes selection and quantity controls and disables unavailable choices.\n */\nexport const Choice = forwardRef<\n HTMLElement,\n PartProps<ChoiceState> & { choice: ChoiceModel }\n>(function Choice(props, ref) {\n const ctx = useGroup();\n const single = ctx.group.selection.max === 1;\n const selected = ctx.selected.includes(props.choice.id);\n const first = ctx.group.choices.find((choice) => choice.isAvailable);\n const tabIndex =\n !single ||\n selected ||\n (!ctx.selected.length && first?.id === props.choice.id)\n ? 0\n : -1;\n return (\n <ChoiceView\n {...props}\n ref={ref}\n selected={selected}\n single={single}\n tabIndex={tabIndex}\n quantity={ctx.quantities[props.choice.id] ?? 0}\n toggleChoice={ctx.toggle}\n setChoiceQuantity={ctx.setQuantity}\n />\n );\n});\nconst Input = forwardRef<HTMLElement, PartProps<GroupState>>(\n function Input(props, ref) {\n const ctx = useGroup();\n const id = usePartId(props.id);\n const toggle = ctx.group.kind === \"toggle\";\n return part(\n \"input\",\n props,\n ctx,\n {\n id,\n type: toggle\n ? \"checkbox\"\n : ctx.group.kind === \"select\"\n ? \"text\"\n : ctx.group.kind,\n value: toggle ? undefined : ctx.input,\n checked: toggle ? ctx.input === \"true\" : undefined,\n required: ctx.group.required,\n \"aria-label\": ctx.group.name,\n \"aria-invalid\": ctx.invalid || undefined,\n \"data-invalid\": flag(ctx.invalid),\n maxLength: ctx.group.input?.maxLength ?? 500,\n placeholder: ctx.group.input?.placeholder,\n onChange: (event: ChangeEvent<HTMLInputElement>) =>\n ctx.setInput(\n toggle ? String(event.target.checked) : event.target.value,\n ),\n },\n ref,\n );\n },\n);\n/**\n * Group item options with selection rules, validation state and an Input part for typed responses.\n * Use within ItemForm.Root. Use Choice for options and OptionGroup.Input for typed responses.\n */\nexport const OptionGroup = Object.assign(Group, { Input });\n","import { Add, Options } from \"./options\";\nimport { Root } from \"./root\";\n/**\n * Composable item configuration parts for selecting options, validating a line and adding it to the cart.\n * Use ItemForm.Root within your ZappieProvider and place Options and Add inside it.\n */\nexport const ItemForm = { Root, Options, Add };\nexport { Choice, OptionGroup } from \"./option-group\";\nexport { Quantity } from \"./quantity\";\nexport type { QuantityProps, QuantityState } from \"./quantity\";\nexport type { ActiveGroup, ItemFormContext, ItemFormProps } from \"./root\";\n","import { resized, srcSet } from \"@zappie/sdk/template\";\nimport type { ImgHTMLAttributes } from \"react\";\n\n/** Props for a responsive storefront image. */\nexport type ImageProps = Omit<\n ImgHTMLAttributes<HTMLImageElement>,\n \"src\" | \"srcSet\"\n> & {\n src: string;\n alt: string;\n sizes?: string;\n priority?: boolean;\n quality?: number;\n mode?: \"resize\" | \"direct\";\n};\n\n/** Render an image through same-origin resizing, or directly when unavailable. */\nexport function Image({\n src,\n sizes = \"100vw\",\n priority = false,\n quality,\n mode = \"resize\",\n alt,\n ...props\n}: ImageProps) {\n const responsive = mode === \"resize\" && /^https?:\\/\\//.test(src);\n return (\n <img\n {...props}\n alt={alt}\n src={responsive ? resized(src, 960, quality) : src}\n {...(responsive ? { srcSet: srcSet(src, quality), sizes } : {})}\n loading={priority ? \"eager\" : \"lazy\"}\n decoding={priority ? \"sync\" : \"async\"}\n {...(priority ? { fetchPriority: \"high\" as const } : {})}\n />\n );\n}\n","import {\n format,\n type MoneyFormatOptions,\n type Money as MoneyValue,\n} from \"@zappie/sdk\";\nimport { forwardRef } from \"react\";\nimport { part, type PartProps } from \"./internal/slot\";\n/**\n * Render formatted SDK money in a data element, with the minor-unit amount as its value.\n * You can override the content with children or a render function receiving the formatted string.\n */\nexport const Money = forwardRef<\n HTMLElement,\n PartProps<{ formatted: string }> & {\n value: MoneyValue;\n formatOptions?: MoneyFormatOptions;\n }\n>(function Money({ value, formatOptions, ...props }, ref) {\n const formatted = format.money(value, formatOptions);\n return part(\n \"data\",\n { ...props, children: props.children ?? formatted },\n { formatted },\n { value: String(value.amountMinor) },\n ref,\n );\n});\n","\"use client\";\nimport {\n forwardRef,\n useEffect,\n useRef,\n type ChangeEvent,\n type ClipboardEvent,\n type KeyboardEvent,\n} from \"react\";\nimport { composeRefs, part, type PartProps } from \"../internal/slot\";\nimport { useControllableState } from \"../internal/use-controllable-state\";\nexport type OtpState = {\n value: string;\n slots: string[];\n getSlotProps: (index: number) => ReturnType<typeof slotAttributes>;\n};\nfunction slotAttributes(\n index: number,\n length: number,\n value: string,\n disabled: boolean,\n update: (index: number, text: string) => void,\n focus: (index: number) => void,\n) {\n return {\n type: \"text\",\n inputMode: \"numeric\" as const,\n autoComplete: index === 0 ? \"one-time-code\" : \"off\",\n \"aria-label\": `Digit ${index + 1} of ${length}`,\n \"data-otp-slot\": index,\n value: value[index] ?? \"\",\n disabled,\n onChange: (event: ChangeEvent<HTMLInputElement>) =>\n update(index, event.target.value),\n onPaste: (event: ClipboardEvent<HTMLInputElement>) => {\n event.preventDefault();\n update(index, event.clipboardData.getData(\"text\"));\n },\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Backspace\") {\n event.preventDefault();\n const target = value[index] ? index : Math.max(0, index - 1);\n update(target, \"\");\n focus(target);\n } else if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") {\n event.preventDefault();\n focus(index + (event.key === \"ArrowLeft\" ? -1 : 1));\n }\n },\n onFocus: (event: { currentTarget: HTMLInputElement }) =>\n event.currentTarget.select(),\n };\n}\nconst Input = forwardRef<\n HTMLElement,\n PartProps<OtpState> & {\n length?: number;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n onComplete?: (value: string) => void;\n disabled?: boolean;\n }\n>(function Input(\n {\n length = 6,\n value,\n defaultValue = \"\",\n onValueChange,\n onComplete,\n disabled = false,\n ...props\n },\n ref,\n) {\n if (!Number.isInteger(length) || length < 1 || length > 12) {\n throw new RangeError(\"OTP length must be 1–12\");\n }\n const [current, setValue] = useControllableState({\n value,\n defaultValue,\n onChange: onValueChange,\n });\n const element = useRef<HTMLElement>(null);\n const previous = useRef(\"\");\n const callback = useRef(onComplete);\n callback.current = onComplete;\n useEffect(() => {\n if (\n current.length === length &&\n /^\\d+$/.test(current) &&\n previous.current !== current\n ) {\n callback.current?.(current);\n }\n previous.current = current;\n }, [current, length]);\n const focus = (index: number) =>\n element.current\n ?.querySelector<HTMLInputElement>(\n `[data-otp-slot=\"${Math.max(0, Math.min(length - 1, index))}\"]`,\n )\n ?.focus();\n const update = (index: number, text: string) => {\n if (disabled) {\n return;\n }\n const digits = text.replace(/\\D/g, \"\");\n const start = digits.length >= length ? 0 : index;\n const next = (\n current.slice(0, start) +\n digits +\n current.slice(start + Math.max(1, digits.length))\n ).slice(0, length);\n setValue(next);\n if (digits) {\n focus(start + digits.length);\n }\n };\n // An SMS code can be autofilled (or typed) before hydration: it sits in the\n // DOM with no change event. Adopt it once the component mounts.\n const adopt = useRef(update);\n adopt.current = update;\n useEffect(() => {\n const typed = Array.from(\n element.current?.querySelectorAll<HTMLInputElement>(\"[data-otp-slot]\") ??\n [],\n (input) => input.value,\n ).join(\"\");\n if (typed && typed !== current) {\n adopt.current(0, typed);\n }\n // Mount only: later edits arrive as change events.\n }, []);\n const getSlotProps = (index: number) =>\n slotAttributes(index, length, current, disabled, update, focus);\n const slots = Array.from({ length }, (_, index) => current[index] ?? \"\");\n return part(\n \"div\",\n {\n ...props,\n children:\n props.children ??\n slots.map((_, index) => <input key={index} {...getSlotProps(index)} />),\n },\n { value: current, slots, getSlotProps },\n { role: \"group\", \"data-disabled\": disabled ? \"\" : undefined },\n composeRefs(ref, element),\n );\n});\n/**\n * A numeric one-time-code input with paste, autofill and keyboard focus handling.\n * Otp.Input defaults to six digits and calls onComplete when a new complete code is entered.\n * You supply code verification.\n */\nexport const Otp = { Input };\n","\"use client\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n} from \"react\";\nimport { composeRefs, part, partId, type PartProps } from \"../internal/slot\";\nimport type { Presentation, SwipeDirection } from \"./engine\";\nimport {\n closeOverlay,\n locationSnapshot,\n openOverlay,\n subscribeLocation,\n type CloseOptions,\n type OverlayQuery,\n} from \"./history\";\n\ntype EngineModule = typeof import(\"./engine\");\nlet engineModule: EngineModule | undefined;\nlet enginePromise: Promise<EngineModule> | undefined;\n/**\n * Load the overlay engine (Base UI dialog and drawer). It is a separate chunk: Root prefetches\n * it when the browser is idle and on trigger hover/focus, so it is usually ready by first open.\n */\nexport function loadOverlayEngine(): Promise<EngineModule> {\n enginePromise ??= import(\"./engine\").then(\n (module) => (engineModule = module),\n (error: unknown) => {\n // A failed chunk load (e.g. offline) must not poison later opens.\n enginePromise = undefined;\n throw error;\n },\n );\n return enginePromise;\n}\n\n/**\n * Control an overlay whose open state is stored in a URL query parameter.\n *\n * @param param - The query parameter to read and update.\n * @param id - The value that identifies this overlay as open.\n * @param options - Fallback query values and query parameters to omit when closing.\n * @returns Reactive open state and history-backed open and close actions.\n */\nexport function useOverlay(param: string, id: string, options?: CloseOptions) {\n const search = useSyncExternalStore(\n subscribeLocation,\n locationSnapshot,\n () => \"\",\n );\n const optionsRef = useRef(options);\n optionsRef.current = options;\n const open = useCallback(\n (query?: OverlayQuery) => openOverlay(param, id, query),\n [param, id],\n );\n const close = useCallback(\n () => closeOverlay(param, id, optionsRef.current),\n [param, id],\n );\n return useMemo(\n () => ({\n isOpen: new URLSearchParams(search).get(param) === id,\n open,\n close,\n }),\n [search, param, id, open, close],\n );\n}\n\n/** Tailwind's default min-width breakpoints. */\nconst BREAKPOINTS = { sm: 640, md: 768, lg: 1024, xl: 1280 } as const;\nexport type ResponsivePresentation =\n | Presentation\n | ({ base: Presentation } & Partial<\n Record<keyof typeof BREAKPOINTS, Presentation>\n >);\n/** Choose a presentation using media queries. The server renders `base`. */\nfunction usePresentation(value: ResponsivePresentation): Presentation {\n // Serialise so inline objects don't resubscribe on every render.\n const key = typeof value === \"string\" ? value : JSON.stringify(value);\n const resolve = useCallback((): Presentation => {\n const parsed = (\n key.startsWith(\"{\") ? JSON.parse(key) : key\n ) as ResponsivePresentation;\n if (typeof parsed === \"string\") {\n return parsed;\n }\n let current = parsed.base;\n for (const [name, width] of Object.entries(BREAKPOINTS)) {\n const at = parsed[name as keyof typeof BREAKPOINTS];\n if (at && window.matchMedia(`(min-width: ${width}px)`).matches) {\n current = at;\n }\n }\n return current;\n }, [key]);\n const subscribe = useCallback(\n (onChange: () => void) => {\n if (!key.startsWith(\"{\")) {\n return () => {};\n }\n const queries = Object.values(BREAKPOINTS).map((width) =>\n window.matchMedia(`(min-width: ${width}px)`),\n );\n queries.forEach((query) => query.addEventListener(\"change\", onChange));\n return () =>\n queries.forEach((query) =>\n query.removeEventListener(\"change\", onChange),\n );\n },\n [key],\n );\n return useSyncExternalStore(subscribe, resolve, () =>\n typeof value === \"string\" ? value : value.base,\n );\n}\n\ntype OverlayState = ReturnType<typeof useOverlay>;\ntype OverlayContext = OverlayState & {\n presentation: Presentation;\n swipeDirection: SwipeDirection;\n contentId: string;\n setContentId: (id: string) => void;\n trigger: { current: HTMLElement | null };\n};\nconst Context = createContext<OverlayContext | null>(null);\nconst EngineContext = createContext<EngineModule | null>(null);\nfunction useContextValue() {\n const value = useContext(Context);\n if (!value) {\n throw new Error(\"Overlay parts require Overlay.Root\");\n }\n return value;\n}\nconst prefetch = () => void loadOverlayEngine().catch(() => {});\n\n/**\n * The URL is the only open state. The engine (Base UI) supplies the modal mechanics: portal,\n * focus scope, scroll lock, outside and Escape dismissal, exit presence and, for drawers and\n * sheets, swipe-to-dismiss. Every open or close it requests goes through the history core.\n */\nfunction Root({\n param,\n id,\n presentation = \"dialog\",\n swipeDirection,\n fallback,\n omitParams,\n navigation,\n ...props\n}: PartProps<OverlayState> & {\n param: string;\n id: string;\n /** Your URL adapter for overlays whose open state lives in the path. */\n navigation?: OverlayState;\n /** A `dialog`, swipeable `drawer` or `sheet`. Use `{ base, sm, md, lg, xl }` for responsive layouts. */\n presentation?: ResponsivePresentation;\n /** Swipe direction to dismiss. Defaults to `down` for drawers and `right` for sheets. */\n swipeDirection?: SwipeDirection;\n} & CloseOptions) {\n const queryOverlay = useOverlay(param, id, { fallback, omitParams });\n const overlay = navigation ?? queryOverlay;\n const resolved = usePresentation(presentation);\n const generated = useId();\n const [contentId, setContentId] = useState(`zappie-overlay-${generated}`);\n const trigger = useRef<HTMLElement | null>(null);\n useEffect(() => {\n if (engineModule) {\n return undefined;\n }\n if (typeof window.requestIdleCallback === \"function\") {\n const handle = window.requestIdleCallback(prefetch);\n return () => window.cancelIdleCallback(handle);\n }\n const handle = window.setTimeout(prefetch, 1500);\n return () => window.clearTimeout(handle);\n }, []);\n const context = useMemo(\n () => ({\n ...overlay,\n presentation: resolved,\n swipeDirection:\n swipeDirection ?? (resolved === \"sheet\" ? \"right\" : \"down\"),\n contentId,\n setContentId,\n trigger,\n }),\n [overlay, resolved, swipeDirection, contentId],\n );\n return (\n <Context.Provider value={context}>\n {part(\"div\", props, overlay, {\n \"data-state\": overlay.isOpen ? \"open\" : \"closed\",\n \"data-presentation\": resolved,\n })}\n </Context.Provider>\n );\n}\nconst Trigger = forwardRef<HTMLElement, PartProps<OverlayState>>(\n function Trigger(props, ref) {\n const ctx = useContextValue();\n return part(\n \"button\",\n props,\n ctx,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": ctx.isOpen,\n \"aria-controls\": ctx.contentId,\n \"data-state\": ctx.isOpen ? \"open\" : \"closed\",\n onPointerEnter: prefetch,\n onFocus: prefetch,\n onClick: () => ctx.open(),\n },\n composeRefs(ref, (node: HTMLElement | null) => {\n ctx.trigger.current = node;\n }),\n );\n },\n);\nexport type OverlayContentProps = PartProps<OverlayState> & {\n /** Runs on Escape. Call `event.preventDefault()` to keep the overlay open. */\n onEscape?: (event: KeyboardEvent) => void;\n /** Runs on an outside pointer press or focus. Call `event.preventDefault()` to keep the overlay open. */\n onInteractOutside?: (event: Event) => void;\n /** Keep the content mounted while closed, for exit animations driven by `data-state`. */\n forceMount?: true;\n /** Where to mount the content. Defaults to `document.body`. */\n container?: HTMLElement | null;\n};\nconst Content = forwardRef<HTMLElement, OverlayContentProps>(function Content(\n { onEscape, onInteractOutside, forceMount, container, ...props },\n ref,\n) {\n const ctx = useContextValue();\n const [engine, setEngine] = useState(engineModule);\n // Once opened, the surface stays mounted so the engine can play exit transitions.\n const [opened, setOpened] = useState(ctx.isOpen);\n if (ctx.isOpen && !opened) {\n setOpened(true);\n }\n const customId = partId(props as Parameters<typeof partId>[0]);\n const { setContentId } = ctx;\n useEffect(() => {\n if (customId) {\n setContentId(customId);\n }\n }, [customId, setContentId]);\n useEffect(() => {\n if (engine || !(ctx.isOpen || forceMount)) {\n return undefined;\n }\n let live = true;\n void loadOverlayEngine().then(\n (module) => {\n if (live) {\n setEngine(module);\n }\n },\n () => {},\n );\n return () => {\n live = false;\n };\n }, [engine, ctx.isOpen, forceMount]);\n if (!engine || (!opened && !forceMount)) {\n return null;\n }\n return (\n <EngineContext.Provider value={engine}>\n <engine.Surface\n open={ctx.isOpen}\n presentation={ctx.presentation}\n swipeDirection={ctx.swipeDirection}\n contentId={ctx.contentId}\n trigger={ctx.trigger}\n onOpen={() => ctx.open()}\n onClose={ctx.close}\n onEscape={onEscape}\n onInteractOutside={onInteractOutside}\n forceMount={forceMount}\n container={container}\n state={ctx}\n contentProps={props as PartProps<never>}\n contentRef={ref}\n />\n </EngineContext.Provider>\n );\n});\nfunction useEngine() {\n const engine = useContext(EngineContext);\n if (!engine) {\n throw new Error(\n \"Overlay.Title and Overlay.Close must be inside Overlay.Content\",\n );\n }\n return engine;\n}\nconst Title = forwardRef<HTMLElement, PartProps<OverlayState>>(\n function Title(props, ref) {\n const ctx = useContextValue();\n const { EngineTitle } = useEngine();\n return (\n <EngineTitle {...(props as PartProps<unknown>)} state={ctx} ref={ref} />\n );\n },\n);\nconst Close = forwardRef<HTMLElement, PartProps<OverlayState>>(\n function Close(props, ref) {\n const ctx = useContextValue();\n const { EngineClose } = useEngine();\n return (\n <EngineClose {...(props as PartProps<unknown>)} state={ctx} ref={ref} />\n );\n },\n);\n/**\n * Composable dialog, drawer and sheet parts with URL-backed open state and a lazy modal engine.\n * Use Root, Trigger, Content, Title and Close to connect history, focus handling and dismissal.\n */\nexport const Overlay = { Root, Trigger, Content, Title, Close };\n","\"use client\";\nimport type { PaymentMethodKind } from \"@zappie/sdk\";\nimport {\n createContext,\n forwardRef,\n useContext,\n type KeyboardEvent,\n} from \"react\";\nimport { usePartId } from \"../internal/ids\";\nimport { part, type PartProps } from \"../internal/slot\";\nimport { useControllableState } from \"../internal/use-controllable-state\";\n/**\n * A payment-method choice with optional disabled state and an explanatory reason.\n */\nexport type PaymentMethod = {\n value: PaymentMethodKind;\n disabled?: boolean;\n reason?: string;\n};\ntype PaymentState = {\n methods: PaymentMethod[];\n value: PaymentMethodKind | null;\n setValue: (value: PaymentMethodKind) => void;\n};\nconst Context = createContext<PaymentState | null>(null);\nfunction Root({\n methods,\n value,\n defaultValue = null,\n onValueChange,\n ...props\n}: PartProps<PaymentState> & {\n methods: (PaymentMethod | PaymentMethodKind)[];\n value?: PaymentMethodKind | null;\n defaultValue?: PaymentMethodKind | null;\n onValueChange?: (value: PaymentMethodKind | null) => void;\n}) {\n const [selected, set] = useControllableState({\n value,\n defaultValue,\n onChange: onValueChange,\n });\n const normalized = methods.map((method) =>\n typeof method === \"string\" ? { value: method } : method,\n );\n const setValue = (next: PaymentMethodKind) => {\n if (\n normalized.some((method) => method.value === next && !method.disabled)\n ) {\n set(next);\n }\n };\n const state = { methods: normalized, value: selected, setValue };\n return (\n <Context.Provider value={state}>\n {part(\"div\", props, state, {\n role: \"radiogroup\",\n onKeyDown: (event: KeyboardEvent<HTMLElement>) => {\n if (\n ![\n \"ArrowRight\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowUp\",\n \"Home\",\n \"End\",\n ].includes(event.key)\n ) {\n return;\n }\n const buttons = Array.from(\n event.currentTarget.querySelectorAll<HTMLElement>(\n '[role=\"radio\"]:not([aria-disabled=\"true\"])',\n ),\n );\n if (!buttons.length) {\n return;\n }\n event.preventDefault();\n const current = buttons.indexOf(\n document.activeElement as HTMLElement,\n );\n const index =\n event.key === \"Home\"\n ? 0\n : event.key === \"End\"\n ? buttons.length - 1\n : (current +\n ([\"ArrowLeft\", \"ArrowUp\"].includes(event.key) ? -1 : 1) +\n buttons.length) %\n buttons.length;\n buttons[index]?.focus();\n buttons[index]?.click();\n },\n })}\n </Context.Provider>\n );\n}\nconst Item = forwardRef<\n HTMLElement,\n PartProps<PaymentMethod & { selected: boolean }> & {\n value: PaymentMethodKind;\n }\n>(function Item({ value, ...props }, ref) {\n const ctx = useContext(Context);\n const id = usePartId();\n if (!ctx) {\n throw new Error(\"PaymentMethods.Item requires PaymentMethods.Root\");\n }\n const method = ctx.methods.find((method) => method.value === value);\n if (!method) {\n return null;\n }\n const selected = ctx.value === value;\n const first = ctx.methods.find((method) => !method.disabled)?.value;\n return part(\n \"button\",\n props,\n { ...method, selected },\n {\n id,\n type: \"button\",\n role: \"radio\",\n \"aria-checked\": selected,\n \"aria-disabled\": method.disabled || undefined,\n \"aria-description\": method.reason,\n disabled: method.disabled,\n tabIndex: selected || (!ctx.value && first === value) ? 0 : -1,\n \"data-disabled\": method.disabled ? \"\" : undefined,\n \"data-selected\": selected ? \"\" : undefined,\n \"data-state\": selected ? \"checked\" : \"unchecked\",\n onClick: () => ctx.setValue(value),\n },\n ref,\n );\n});\n/**\n * Composable payment-method radio controls with keyboard navigation.\n * Root manages the selection. Item renders each method and prevents selection when disabled.\n */\nexport const PaymentMethods = { Root, Item };\n","import type { Category, Item, Menu } from \"@zappie/sdk\";\n/**\n * A scored item or category returned by menu search, ordered by descending score.\n */\nexport type SearchResult =\n | { type: \"item\"; item: Item; score: number }\n | { type: \"category\"; category: Category; score: number };\nexport function normalizeSearch(text: string) {\n return text\n .normalize(\"NFD\")\n .replace(/\\p{M}/gu, \"\")\n .toLowerCase()\n .split(/[^\\p{L}\\p{N}]+/u)\n .filter(Boolean);\n}\nfunction near(a: string, b: string) {\n if (Math.abs(a.length - b.length) > 1) {\n return false;\n }\n let i = 0;\n let j = 0;\n let edits = 0;\n while (i < a.length && j < b.length) {\n if (a[i] === b[j]) {\n i++;\n j++;\n continue;\n }\n if (++edits > 1) {\n return false;\n }\n if (a.length === b.length) {\n if (a[i] === b[j + 1] && a[i + 1] === b[j]) {\n i += 2;\n j += 2;\n } else {\n i++;\n j++;\n }\n } else if (a.length > b.length) {\n i++;\n } else {\n j++;\n }\n }\n return edits + (a.length - i) + (b.length - j) <= 1;\n}\n/**\n * Index item names, tags and descriptions plus category names and descriptions for local search.\n * Matches case- and accent-insensitive prefixes and allows a single edit for query tokens of at least four characters.\n *\n * @param menu - The menu snapshot you want to search.\n * @returns A search function that requires every query token to match and sorts results by descending score.\n */\nexport function createSearchIndex(menu: Menu) {\n const entries = [\n ...Object.values(menu.items).map((item) => ({\n result: { type: \"item\" as const, item },\n fields: [\n normalizeSearch(item.name),\n normalizeSearch(item.tags.join(\" \")),\n normalizeSearch(item.description ?? \"\"),\n ],\n })),\n ...menu.categories.map((category) => ({\n result: { type: \"category\" as const, category },\n fields: [\n normalizeSearch(category.name),\n [],\n normalizeSearch(category.description ?? \"\"),\n ],\n })),\n ];\n return (query: string): SearchResult[] => {\n const tokens = normalizeSearch(query);\n if (!tokens.length) {\n return [];\n }\n const results: SearchResult[] = [];\n for (const entry of entries) {\n let score = 0;\n for (const token of tokens) {\n let best = 0;\n for (let field = 0; field < entry.fields.length; field++) {\n const weight = [30, 20, 10][field]!;\n for (const word of entry.fields[field]!) {\n if (word.startsWith(token)) {\n best = Math.max(best, weight + (word === token ? 3 : 2));\n } else if (token.length >= 4 && near(token, word)) {\n best = Math.max(best, weight);\n }\n }\n }\n if (!best) {\n score = 0;\n break;\n }\n score += best;\n }\n if (score) {\n results.push({ ...entry.result, score });\n }\n }\n return results.sort((a, b) => b.score - a.score);\n };\n}\n","\"use client\";\nimport { useCart, useMenu, useZappie } from \"@zappie/sdk/react\";\nimport {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useMemo,\n type ChangeEvent,\n} from \"react\";\nimport {\n countAnnouncement,\n useCombobox,\n withLiveRegion,\n} from \"../internal/combobox\";\nimport { composeRefs, part, type PartProps } from \"../internal/slot\";\nimport { useControllableState } from \"../internal/use-controllable-state\";\nimport { createSearchIndex, type SearchResult } from \"./engine\";\n/**\n * Search query, results and combobox navigation exposed to search parts and render functions.\n */\nexport type SearchState = ReturnType<typeof useCombobox<SearchResult>> & {\n query: string;\n setQuery: (query: string) => void;\n results: SearchResult[];\n setComposing: (value: boolean) => void;\n error?: string;\n retry?: () => void;\n};\nconst Context = createContext<SearchState | null>(null);\nfunction useSearch() {\n const ctx = useContext(Context);\n if (!ctx) {\n throw new Error(\"Search parts require Search.Root\");\n }\n return ctx;\n}\n/**\n * Externally supplied search results and optional loading, error, retry and composition controls.\n */\nexport type SearchSource = {\n results: SearchResult[];\n isLoading?: boolean;\n isStale?: boolean;\n error?: string;\n retry?: () => void;\n onCompositionChange?: (composing: boolean) => void;\n};\ntype RootProps = Omit<PartProps<SearchState>, \"onSelect\"> & {\n announcement?: (count: number) => string;\n query?: string;\n defaultQuery?: string;\n onQueryChange?: (query: string) => void;\n onSelect?: (result: SearchResult) => void;\n source?: SearchSource;\n};\nfunction Root(props: RootProps) {\n if (props.source) {\n return <ControlledRoot {...props} source={props.source} />;\n }\n return <UncontrolledRoot {...props} />;\n}\nfunction UncontrolledRoot(props: RootProps) {\n const cart = useCart();\n const menu = useMenu(cart.branchId ?? undefined);\n const [query, setQuery] = useControllableState({\n value: props.query,\n defaultValue: props.defaultQuery ?? \"\",\n onChange: props.onQueryChange,\n });\n const index = useMemo(\n () => (menu.data ? createSearchIndex(menu.data) : () => []),\n [menu.data],\n );\n const results = useMemo(() => index(query), [index, query]);\n return (\n <ControlledRoot\n {...props}\n query={query}\n onQueryChange={setQuery}\n source={{ results, isLoading: menu.isLoading, isStale: menu.isStale }}\n />\n );\n}\nfunction ControlledRoot({\n query,\n defaultQuery = \"\",\n onQueryChange,\n onSelect = () => {},\n announcement = countAnnouncement,\n source,\n ...props\n}: RootProps & { source: SearchSource }) {\n const client = useZappie();\n const [value, setValue] = useControllableState({\n value: query,\n defaultValue: defaultQuery,\n onChange: onQueryChange,\n });\n const results = source.results;\n const combo = useCombobox(results, onSelect);\n const setQuery = (next: string) => {\n setValue(next);\n combo.setActiveIndex(-1);\n combo.setOpen(true);\n };\n useEffect(() => {\n if (!value.trim()) {\n return;\n }\n const timer = setTimeout(\n () =>\n client._internal.emit(\"search\", {\n query: value,\n resultCount: results.length,\n }),\n 600,\n );\n return () => clearTimeout(timer);\n }, [client, value, results.length]);\n const state = {\n ...combo,\n query: value,\n setQuery,\n results,\n setComposing: (value: boolean) => source.onCompositionChange?.(value),\n ...(source.error ? { error: source.error } : {}),\n ...(source.retry ? { retry: source.retry } : {}),\n };\n return (\n <Context.Provider value={state}>\n {part(\n \"div\",\n withLiveRegion(\n props,\n combo.isOpen && value.trim() ? announcement(results.length) : \"\",\n ) as typeof props,\n state,\n {\n \"data-state\": source.error\n ? \"error\"\n : source.isLoading\n ? \"loading\"\n : source.isStale\n ? \"stale\"\n : \"valid\",\n onBlur: (event: {\n currentTarget: HTMLElement;\n relatedTarget: Node | null;\n }) => {\n if (!event.currentTarget.contains(event.relatedTarget)) {\n combo.setOpen(false);\n }\n },\n },\n )}\n </Context.Provider>\n );\n}\nconst Input = forwardRef<HTMLElement, PartProps<SearchState>>(\n function Input(props, ref) {\n const state = useSearch();\n return part(\n \"input\",\n props,\n state,\n {\n ...state.inputProps,\n type: \"search\",\n onCompositionStart: () => state.setComposing(true),\n onCompositionEnd: () => state.setComposing(false),\n value: state.query,\n onChange: (event: ChangeEvent<HTMLInputElement>) =>\n state.setQuery(event.target.value),\n },\n ref,\n );\n },\n);\nconst Results = forwardRef<HTMLElement, PartProps<SearchState>>(\n function Results(props, ref) {\n const state = useSearch();\n return part(\n \"div\",\n props,\n state,\n state.listProps,\n composeRefs(ref, (node) => {\n if (node?.id && node.id !== state.listProps.id) {\n state.setListId(node.id);\n }\n }),\n );\n },\n);\nconst Result = forwardRef<\n HTMLElement,\n PartProps<SearchState> & { index: number }\n>(function Result({ index, ...props }, ref) {\n const state = useSearch();\n return part(\n \"div\",\n props,\n state,\n state.getOptionProps(index),\n composeRefs(ref, (node) => {\n if (node?.id && node.id !== state.getOptionProps(index).id) {\n state.registerOption(index, node.id);\n }\n }),\n );\n});\n/**\n * Composable menu search parts with combobox navigation and result announcements.\n * Use Root with your own source or let it index the active branch menu through your ZappieProvider.\n */\nexport const Search = { Root, Input, Results, Result };\nexport { createSearchIndex } from \"./engine\";\nexport type { SearchResult } from \"./engine\";\n","\"use client\";\nimport type { Branch } from \"@zappie/sdk\";\nimport { useStore } from \"@zappie/sdk/react\";\nimport { forwardRef, useEffect, useState } from \"react\";\nimport { part, type PartProps } from \"../internal/slot\";\nimport { getOpenStatus, type OpenStatusState } from \"./hours\";\nexport function useOpenStatus(branch: Branch, timezone: string) {\n const [now, setNow] = useState(() => new Date());\n const state = getOpenStatus(branch, timezone, now);\n const boundary = state.nextChange?.getTime();\n useEffect(() => {\n // With no weekly boundary, retry at the next day for future calendar exceptions.\n const delay = boundary !== undefined ? boundary - Date.now() : 86400000;\n const timeout = setTimeout(\n () => setNow(new Date()),\n Math.max(1, Math.min(2147483647, delay)),\n );\n const refresh = () => setNow(new Date());\n window.addEventListener(\"focus\", refresh);\n return () => {\n clearTimeout(timeout);\n window.removeEventListener(\"focus\", refresh);\n };\n }, [branch, timezone, boundary]);\n return state;\n}\n/**\n * Expose a branch opening label and open/closed state in a span or your render function.\n * Uses your time zone override, then the branch, store or UTC, and refreshes at boundaries and window focus.\n */\nexport const OpenStatus = forwardRef<\n HTMLElement,\n PartProps<OpenStatusState> & { branch: Branch; timezone?: string }\n>(function OpenStatus({ branch, timezone, ...props }, ref) {\n const store = useStore();\n const state = useOpenStatus(\n branch,\n timezone ?? branch.timezone ?? store.data?.timezone ?? \"UTC\",\n );\n return part(\n \"span\",\n props,\n state,\n { \"data-state\": state.isOpen ? \"open\" : \"closed\" },\n ref,\n );\n});\n","\"use client\";\nimport { PACKAGE_VERSION } from \"./version\";\n\n/** The installed @zappie/foundations version. */\nexport const FOUNDATIONS_VERSION: string = PACKAGE_VERSION;\nexport { Account, AccountNotConfiguredError } from \"./account\";\nexport type { Customer, SignInOptions } from \"./account\";\nexport { Cart, Totals } from \"./cart\";\nexport type { TotalsState } from \"./cart\";\nexport { Address } from \"./fulfilment/address-picker\";\nexport type {\n AddressState,\n AddressSuggestion,\n} from \"./fulfilment/address-picker\";\nexport { Branch } from \"./fulfilment/branch-picker\";\nexport { Schedule, scheduleSlots } from \"./fulfilment/schedule\";\nexport type { ScheduleSlot, ScheduleState } from \"./fulfilment/schedule\";\nexport { Fulfilment } from \"./fulfilment/switch\";\nexport type { PartProps } from \"./internal/slot\";\nexport { useControllableState } from \"./internal/use-controllable-state\";\nexport * from \"./item-form\";\nexport { Image } from \"./media/image\";\nexport type { ImageProps } from \"./media/image\";\nexport { Money } from \"./money\";\nexport { Otp } from \"./otp/input\";\nexport { Overlay, useOverlay } from \"./overlay/react\";\nexport { PaymentMethods } from \"./payment/methods\";\nexport type { PaymentMethod } from \"./payment/methods\";\nexport { createSearchIndex, Search } from \"./search\";\nexport type { SearchResult, SearchSource, SearchState } from \"./search\";\nexport {\n formatOpeningHours,\n formatWallClock,\n getOpenStatus,\n parseWallClock,\n} from \"./status/hours\";\nexport { OpenStatus } from \"./status/open-status\";\n"]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts"],
4
+ "sourcesContent": ["\"use client\";\nimport { PACKAGE_VERSION } from \"./version\";\n\n/** The installed @zappie/foundations version. */\nexport const FOUNDATIONS_VERSION: string = PACKAGE_VERSION;\nexport { Account, AccountNotConfiguredError } from \"./account\";\nexport type { Customer, SignInOptions } from \"./account\";\nexport { Cart, Totals } from \"./cart\";\nexport type { TotalsState } from \"./cart\";\nexport { Address } from \"./fulfilment/address-picker\";\nexport type {\n AddressState,\n AddressSuggestion,\n} from \"./fulfilment/address-picker\";\nexport { Branch } from \"./fulfilment/branch-picker\";\nexport { Schedule, scheduleSlots } from \"./fulfilment/schedule\";\nexport type { ScheduleSlot, ScheduleState } from \"./fulfilment/schedule\";\nexport { Fulfilment } from \"./fulfilment/switch\";\nexport type { PartProps } from \"./internal/slot\";\nexport { useControllableState } from \"./internal/use-controllable-state\";\nexport * from \"./item-form\";\nexport { Image } from \"./media/image\";\nexport type { ImageProps } from \"./media/image\";\nexport { Money } from \"./money\";\nexport { Otp } from \"./otp/input\";\nexport { Overlay, useOverlay } from \"./overlay/react\";\nexport { PaymentMethods } from \"./payment/methods\";\nexport type { PaymentMethod } from \"./payment/methods\";\nexport { createSearchIndex, Search } from \"./search\";\nexport type { SearchResult, SearchSource, SearchState } from \"./search\";\nexport {\n formatOpeningHours,\n formatWallClock,\n getOpenStatus,\n parseWallClock,\n} from \"./status/hours\";\nexport { OpenStatus } from \"./status/open-status\";\n"],
5
+ "mappings": ";;;AACA,SAAS,uBAAuB;AAIhC,SAAS,SAAS,iCAAiC;AAEnD,SAAS,MAAM,cAAc;AAE7B,SAAS,eAAe;AAKxB,SAAS,cAAc;AACvB,SAAS,UAAU,qBAAqB;AAExC,SAAS,kBAAkB;AAE3B,SAAS,4BAA4B;AACrC,cAAc;AACd,SAAS,aAAa;AAEtB,SAAS,aAAa;AACtB,SAAS,WAAW;AACpB,SAAS,SAAS,kBAAkB;AACpC,SAAS,sBAAsB;AAE/B,SAAS,mBAAmB,cAAc;AAE1C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAkB;AAhCpB,IAAM,sBAA8B;",
6
+ "names": []
7
+ }
@@ -0,0 +1,131 @@
1
+ // src/internal/combobox.tsx
2
+ import {
3
+ useEffect,
4
+ useState
5
+ } from "react";
6
+ import { usePartId } from "./ids.js";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ function useCombobox(results, onSelect) {
9
+ const id = usePartId();
10
+ const [activeIndex, setActiveIndex] = useState(-1);
11
+ const [isOpen, setOpen] = useState(false);
12
+ const [listId, setListId] = useState(`${id}-list`);
13
+ const [optionIds, setOptionIds] = useState({});
14
+ useEffect(() => setActiveIndex(-1), [results.length]);
15
+ const registerOption = (index, id2) => setOptionIds(
16
+ (previous) => previous[index] === id2 ? previous : { ...previous, [index]: id2 }
17
+ );
18
+ const active = activeIndex < results.length ? activeIndex : -1;
19
+ const optionId = (index) => optionIds[index] ?? `${id}-option-${index}`;
20
+ const activeId = isOpen && active >= 0 ? optionId(active) : void 0;
21
+ useEffect(() => {
22
+ if (activeId) {
23
+ document.getElementById(activeId)?.scrollIntoView?.({ block: "nearest" });
24
+ }
25
+ }, [activeId]);
26
+ const select = (index) => {
27
+ const item = results[index];
28
+ if (item !== void 0) {
29
+ onSelect(item);
30
+ setOpen(false);
31
+ setActiveIndex(-1);
32
+ }
33
+ };
34
+ return {
35
+ setListId,
36
+ registerOption,
37
+ activeIndex: active,
38
+ setActiveIndex,
39
+ isOpen,
40
+ setOpen,
41
+ select,
42
+ inputProps: {
43
+ role: "combobox",
44
+ "aria-autocomplete": "list",
45
+ "aria-expanded": isOpen,
46
+ "aria-controls": listId,
47
+ "aria-activedescendant": activeId,
48
+ onKeyDown: (event) => {
49
+ if (event.nativeEvent.isComposing || event.keyCode === 229) {
50
+ return;
51
+ }
52
+ if (event.key === "Escape") {
53
+ event.preventDefault();
54
+ setOpen(false);
55
+ setActiveIndex(-1);
56
+ } else if (event.key === "ArrowDown" || event.key === "ArrowUp") {
57
+ event.preventDefault();
58
+ setOpen(true);
59
+ setActiveIndex(
60
+ results.length ? active < 0 ? event.key === "ArrowDown" ? 0 : results.length - 1 : (active + (event.key === "ArrowDown" ? 1 : -1) + results.length) % results.length : -1
61
+ );
62
+ } else if (event.key === "Enter" && isOpen && active >= 0) {
63
+ event.preventDefault();
64
+ select(active);
65
+ }
66
+ },
67
+ onFocus: () => setOpen(true)
68
+ },
69
+ listProps: { id: listId, role: "listbox", hidden: !isOpen },
70
+ getOptionProps: (index) => ({
71
+ id: optionId(index),
72
+ role: "option",
73
+ "aria-selected": active === index,
74
+ "data-selected": active === index ? "" : void 0,
75
+ onMouseDown: (event) => event.preventDefault(),
76
+ // Inside a drawer or sheet, the overlay engine starts a swipe on any
77
+ // press that isn't a button, link or field, then captures the pointer,
78
+ // so the option's click never fires on touch. Options aren't swipe handles.
79
+ onPointerDown: (event) => event.stopPropagation(),
80
+ onTouchStart: (event) => event.stopPropagation(),
81
+ onClick: () => select(index)
82
+ })
83
+ };
84
+ }
85
+ var visuallyHidden = {
86
+ position: "absolute",
87
+ width: 1,
88
+ height: 1,
89
+ margin: -1,
90
+ padding: 0,
91
+ border: 0,
92
+ overflow: "hidden",
93
+ clip: "rect(0 0 0 0)",
94
+ whiteSpace: "nowrap"
95
+ };
96
+ function countAnnouncement(count) {
97
+ return count === 0 ? "No results" : `${count} result${count === 1 ? "" : "s"} available`;
98
+ }
99
+ function LiveRegion({ message }) {
100
+ return /* @__PURE__ */ jsx(
101
+ "span",
102
+ {
103
+ role: "status",
104
+ "aria-live": "polite",
105
+ "aria-atomic": "true",
106
+ "data-zappie-live": "",
107
+ style: visuallyHidden,
108
+ children: message
109
+ }
110
+ );
111
+ }
112
+ function withLiveRegion(props, message) {
113
+ if (props.asChild) {
114
+ return props;
115
+ }
116
+ const children = props.children;
117
+ return {
118
+ ...props,
119
+ children: (state) => /* @__PURE__ */ jsxs(Fragment, { children: [
120
+ typeof children === "function" ? children(state) : children,
121
+ /* @__PURE__ */ jsx(LiveRegion, { message })
122
+ ] })
123
+ };
124
+ }
125
+ export {
126
+ LiveRegion,
127
+ countAnnouncement,
128
+ useCombobox,
129
+ withLiveRegion
130
+ };
131
+ //# sourceMappingURL=combobox.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/internal/combobox.tsx"],
4
+ "sourcesContent": ["import {\n useEffect,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type ReactNode,\n} from \"react\";\nimport { usePartId } from \"./ids\";\nexport function useCombobox<T>(\n results: readonly T[],\n onSelect: (item: T) => void,\n) {\n const id = usePartId();\n const [activeIndex, setActiveIndex] = useState(-1);\n const [isOpen, setOpen] = useState(false);\n const [listId, setListId] = useState(`${id}-list`);\n const [optionIds, setOptionIds] = useState<Record<number, string>>({});\n // Reset the highlight when the result set changes size; callers reset on a new query.\n // Keying on the array itself would reset on every re-render with an unmemoised array.\n useEffect(() => setActiveIndex(-1), [results.length]);\n const registerOption = (index: number, id: string) =>\n setOptionIds((previous) =>\n previous[index] === id ? previous : { ...previous, [index]: id },\n );\n const active = activeIndex < results.length ? activeIndex : -1;\n const optionId = (index: number) =>\n optionIds[index] ?? `${id}-option-${index}`;\n const activeId = isOpen && active >= 0 ? optionId(active) : undefined;\n // aria-activedescendant doesn't move focus, so keep the highlighted option visible.\n useEffect(() => {\n if (activeId) {\n document.getElementById(activeId)?.scrollIntoView?.({ block: \"nearest\" });\n }\n }, [activeId]);\n const select = (index: number) => {\n const item = results[index];\n if (item !== undefined) {\n onSelect(item);\n setOpen(false);\n setActiveIndex(-1);\n }\n };\n return {\n setListId,\n registerOption,\n activeIndex: active,\n setActiveIndex,\n isOpen,\n setOpen,\n select,\n inputProps: {\n role: \"combobox\",\n \"aria-autocomplete\": \"list\" as const,\n \"aria-expanded\": isOpen,\n \"aria-controls\": listId,\n \"aria-activedescendant\": activeId,\n onKeyDown: (event: KeyboardEvent) => {\n // Keys pressed while an input method composes text belong to the IME, not the list.\n if (event.nativeEvent.isComposing || event.keyCode === 229) {\n return;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n setOpen(false);\n setActiveIndex(-1);\n } else if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n event.preventDefault();\n setOpen(true);\n setActiveIndex(\n results.length\n ? active < 0\n ? event.key === \"ArrowDown\"\n ? 0\n : results.length - 1\n : (active +\n (event.key === \"ArrowDown\" ? 1 : -1) +\n results.length) %\n results.length\n : -1,\n );\n } else if (event.key === \"Enter\" && isOpen && active >= 0) {\n event.preventDefault();\n select(active);\n }\n },\n onFocus: () => setOpen(true),\n },\n listProps: { id: listId, role: \"listbox\", hidden: !isOpen },\n getOptionProps: (index: number) => ({\n id: optionId(index),\n role: \"option\",\n \"aria-selected\": active === index,\n \"data-selected\": active === index ? \"\" : undefined,\n onMouseDown: (event: { preventDefault: () => void }) =>\n event.preventDefault(),\n // Inside a drawer or sheet, the overlay engine starts a swipe on any\n // press that isn't a button, link or field, then captures the pointer,\n // so the option's click never fires on touch. Options aren't swipe handles.\n onPointerDown: (event: { stopPropagation: () => void }) =>\n event.stopPropagation(),\n onTouchStart: (event: { stopPropagation: () => void }) =>\n event.stopPropagation(),\n onClick: () => select(index),\n }),\n };\n}\n/** Visually hidden but announced; an accessibility mechanism, not a visual default. */\nconst visuallyHidden: CSSProperties = {\n position: \"absolute\",\n width: 1,\n height: 1,\n margin: -1,\n padding: 0,\n border: 0,\n overflow: \"hidden\",\n clip: \"rect(0 0 0 0)\",\n whiteSpace: \"nowrap\",\n};\n/** Default English announcement of how many options a combobox is showing. */\nexport function countAnnouncement(count: number) {\n return count === 0\n ? \"No results\"\n : `${count} result${count === 1 ? \"\" : \"s\"} available`;\n}\n/** A polite status region so screen readers hear how many options are listed. */\nexport function LiveRegion({ message }: { message: string }) {\n return (\n <span\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n data-zappie-live=\"\"\n style={visuallyHidden}\n >\n {message}\n </span>\n );\n}\n/** Append the live region to a root's children; with `asChild` the caller owns the single child. */\nexport function withLiveRegion<S>(\n props: { asChild?: boolean | undefined; children?: unknown },\n message: string,\n): typeof props {\n if (props.asChild) {\n return props;\n }\n const children = props.children;\n return {\n ...props,\n children: (state: S) => (\n <>\n {typeof children === \"function\"\n ? (children as (state: S) => ReactNode)(state)\n : (children as ReactNode)}\n <LiveRegion message={message} />\n </>\n ),\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["id"]
7
+ }
@@ -0,0 +1,8 @@
1
+ // src/internal/data-attrs.ts
2
+ function flag(value) {
3
+ return value ? "" : void 0;
4
+ }
5
+ export {
6
+ flag
7
+ };
8
+ //# sourceMappingURL=data-attrs.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/internal/data-attrs.ts"],
4
+ "sourcesContent": ["export function flag(value: unknown): \"\" | undefined {\n return value ? \"\" : undefined;\n}\n"],
5
+ "mappings": ";AAAO,SAAS,KAAK,OAAgC;AACnD,SAAO,QAAQ,KAAK;AACtB;",
6
+ "names": []
7
+ }