@zappie/theme-base 0.0.0-stage → 0.1.1
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.
- package/CHANGELOG.md +30 -0
- package/LICENSE +21 -0
- package/README.md +37 -2
- package/dist/address.d.ts +32 -0
- package/dist/address.js +4 -0
- package/dist/address.js.map +1 -0
- package/dist/cart.d.ts +12 -0
- package/dist/cart.js +1140 -0
- package/dist/cart.js.map +1 -0
- package/dist/catalogue.d.ts +60 -0
- package/dist/catalogue.js +1389 -0
- package/dist/catalogue.js.map +1 -0
- package/dist/checkout.d.ts +36 -0
- package/dist/checkout.js +4 -0
- package/dist/checkout.js.map +1 -0
- package/dist/chunk-2MV6KU3R.js +352 -0
- package/dist/chunk-2MV6KU3R.js.map +1 -0
- package/dist/chunk-FB5DRCU7.js +146 -0
- package/dist/chunk-FB5DRCU7.js.map +1 -0
- package/dist/chunk-IG63ONID.js +139 -0
- package/dist/chunk-IG63ONID.js.map +1 -0
- package/dist/chunk-ILOCSCZL.js +217 -0
- package/dist/chunk-ILOCSCZL.js.map +1 -0
- package/dist/chunk-JFEI2OUZ.js +13 -0
- package/dist/chunk-JFEI2OUZ.js.map +1 -0
- package/dist/chunk-NTJONY3N.js +95 -0
- package/dist/chunk-NTJONY3N.js.map +1 -0
- package/dist/chunk-QWST2TA2.js +22 -0
- package/dist/chunk-QWST2TA2.js.map +1 -0
- package/dist/chunk-USSLDBDY.js +48 -0
- package/dist/chunk-USSLDBDY.js.map +1 -0
- package/dist/chunk-VIAJ27YC.js +59 -0
- package/dist/chunk-VIAJ27YC.js.map +1 -0
- package/dist/host-bridge.d.ts +100 -0
- package/dist/host-bridge.js +4 -0
- package/dist/host-bridge.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/item-frame.d.ts +20 -0
- package/dist/item-frame.js +5 -0
- package/dist/item-frame.js.map +1 -0
- package/dist/item.d.ts +20 -0
- package/dist/item.js +153 -0
- package/dist/item.js.map +1 -0
- package/dist/navigation.d.ts +64 -0
- package/dist/navigation.js +4 -0
- package/dist/navigation.js.map +1 -0
- package/dist/styles.css +842 -0
- package/package.json +74 -3
package/dist/cart.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cart/cart-issues.tsx","../src/cart/cart-line-groups.ts","../src/cart/cart-lines.tsx","../src/cart/customer-details.tsx","../src/cart/delivery-distance.tsx","../src/cart/empty-cart.tsx","../src/cart/cart-sheet.tsx","../src/cart/use-address-selection.ts","../src/cart/address-sheet.tsx","../src/cart/region-picker.tsx","../src/cart/cart-schedule.ts","../src/cart/schedule-sheet.tsx","../src/cart/fulfilment-panel.tsx","../src/cart/loading.tsx","../src/cart/promo-sheet.tsx","../src/cart/rewards-sheet.tsx","../src/cart/checkout-state.ts","../src/cart/checkout-cta.tsx","../src/cart/totals.tsx","../src/cart/cart-review.tsx"],"names":["error","jsx","jsxs","Cart","useOverlay","Overlay","useState","query","useCart","suggestions","useCartCatalogue","branch","Fragment","useStore","labels","isContactPhoneValid","FoundationTotals","useRef"],"mappings":"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","file":"cart.js","sourcesContent":["import { Cart, useOverlay } from \"@zappie/foundations\";\nimport type { CartFix, CartIssue } from \"@zappie/sdk\";\nimport { useState } from \"react\";\nconst labels: Partial<Record<CartFix[\"action\"], string>> = {\n remove_line: \"Remove item\",\n accept_price: \"Accept new price\",\n remove_promo: \"Remove promo\",\n set_quantity: \"Update quantity\",\n choose_option: \"Choose options\",\n choose_other_option: \"Change options\",\n change_address: \"Change delivery address\",\n schedule: \"Choose order time\",\n};\nfunction Issue({\n issue,\n applyFix,\n}: {\n issue: CartIssue;\n applyFix: (issue: CartIssue, fix: CartFix) => void;\n}) {\n const editor = useOverlay(\"cart_edit\", issue.lineId ?? \"\");\n const address = useOverlay(\"cart_sheet\", \"address\");\n const schedule = useOverlay(\"cart_sheet\", \"schedule\");\n const [error, setError] = useState<string | null>(null);\n const fix = (value: CartFix) => {\n setError(null);\n try {\n if (\n value.action === \"choose_option\" ||\n value.action === \"choose_other_option\"\n ) {\n editor.open();\n } else if (value.action === \"change_address\") {\n address.open();\n } else if (value.action === \"schedule\") {\n schedule.open();\n } else {\n applyFix(issue, value);\n }\n } catch (error) {\n setError(\n error instanceof Error ? error.message : \"Unable to apply this change\",\n );\n }\n };\n return (\n <li>\n <p>{issue.message}</p>\n {issue.fixes\n .filter((value) => labels[value.action])\n .map((value, index) => (\n <button\n key={index}\n type=\"button\"\n className=\"z-base-button-secondary\"\n onClick={() => fix(value)}\n >\n {value.action === \"set_quantity\"\n ? `Set quantity to ${value.quantity}`\n : labels[value.action]}\n </button>\n ))}\n {error && <p role=\"alert\">{error}</p>}\n </li>\n );\n}\nexport function CartIssues() {\n return (\n <Cart.Issues>\n {({ issues, applyFix }) =>\n issues.length > 0 && (\n <section className=\"z-base-issues\" aria-label=\"Cart issues\">\n <h2>Review your cart</h2>\n <ul>\n {issues.map((issue, index) => (\n <Issue\n key={`${issue.lineId}:${issue.code}:${index}`}\n issue={issue}\n applyFix={applyFix}\n />\n ))}\n </ul>\n </section>\n )\n }\n </Cart.Issues>\n );\n}\n","import type { CartLine, Menu } from \"@zappie/sdk\";\n\nexport type CartLineGroup = {\n menuId: string;\n menuName?: string;\n lines: CartLine[];\n};\n\nexport function groupCartLinesByMenu(\n lines: readonly CartLine[],\n catalogue?: Menu,\n): CartLineGroup[] {\n const names = new Map(\n (catalogue?.menus ?? []).map((menu) => [menu.id, menu.name]),\n );\n const groups = new Map<string, CartLineGroup>();\n for (const line of lines) {\n const menuId = line.menuId ?? \"unknown\";\n const group = groups.get(menuId);\n if (group) {\n group.lines.push(line);\n continue;\n }\n const menuName = names.get(menuId);\n groups.set(menuId, {\n menuId,\n ...(menuName !== undefined ? { menuName } : {}),\n lines: [line],\n });\n }\n const ordered: CartLineGroup[] = [];\n for (const menu of catalogue?.menus ?? []) {\n const group = groups.get(menu.id);\n if (group) {\n ordered.push(group);\n groups.delete(menu.id);\n }\n }\n return [...ordered, ...groups.values()];\n}\n","import { useCart, useCartCatalogue } from \"@zappie/sdk/react\";\nimport { CartLine } from \"./cart-line\";\nimport { groupCartLinesByMenu } from \"./cart-line-groups\";\nexport function CartLines() {\n const { lines } = useCart();\n const catalogue = useCartCatalogue();\n const groups = groupCartLinesByMenu(lines, catalogue);\n const grouped = (catalogue?.menus?.length ?? 0) > 1;\n return (\n <section aria-label=\"Cart items\" className=\"z-base-lines\">\n {groups.map((group) => (\n <section\n key={group.menuId}\n aria-label={group.menuName ?? \"Other items\"}\n className=\"z-base-line-group\"\n >\n {grouped && <h2>{group.menuName ?? \"Other items\"}</h2>}\n {group.lines.map((line) => (\n <CartLine key={line.id} line={line} />\n ))}\n </section>\n ))}\n </section>\n );\n}\n","import { isContactPhoneValid } from \"@zappie/sdk/checkout\";\nimport { useId } from \"react\";\nimport { useCheckoutHandoff } from \"../checkout\";\nimport { useBaseHostBridge } from \"../host-bridge\";\nconst FIELDS = [\n { field: \"firstName\", label: \"First name\", autoComplete: \"given-name\" },\n { field: \"lastName\", label: \"Last name\", autoComplete: \"family-name\" },\n { field: \"email\", label: \"Email\", autoComplete: \"email\" },\n] as const;\n\nexport type ContactPhoneState = {\n value: string;\n touched: boolean;\n update(value: string): void;\n touch(): void;\n};\n\n/** The details a business requires before payment, such as a name for the order. */\nexport function CustomerDetails({\n contactPhone,\n}: {\n contactPhone?: ContactPhoneState;\n} = {}) {\n const { customerDetails } = useBaseHostBridge();\n const handoff = useCheckoutHandoff();\n const showPhone = Boolean(\n contactPhone && handoff.contactPhone && handoff.customer,\n );\n const inputId = useId();\n const hintId = useId();\n const errorId = useId();\n const invalid = Boolean(\n contactPhone?.touched && !isContactPhoneValid(contactPhone.value),\n );\n if (!customerDetails && !showPhone) {\n return null;\n }\n return (\n <section className=\"z-base-fulfilment-panel\" aria-label=\"Your details\">\n <h2>Your details</h2>\n {customerDetails &&\n FIELDS.filter(\n ({ field }) => field !== \"email\" || customerDetails.requiresEmail,\n ).map(({ field, label, autoComplete }) => (\n <label key={field} className=\"z-base-field\">\n {label}\n <input\n type={field === \"email\" ? \"email\" : \"text\"}\n autoComplete={autoComplete}\n required={field !== \"lastName\"}\n value={customerDetails.values[field]}\n onChange={(event) =>\n customerDetails.update(field, event.target.value)\n }\n />\n </label>\n ))}\n {showPhone && contactPhone && (\n <div className=\"z-base-field\">\n <label htmlFor={inputId}>Contact phone (optional)</label>\n <input\n id={inputId}\n type=\"tel\"\n inputMode=\"tel\"\n autoComplete=\"tel\"\n value={contactPhone.value}\n aria-describedby={invalid ? `${hintId} ${errorId}` : hintId}\n aria-invalid={invalid}\n onBlur={contactPhone.touch}\n onChange={(event) => contactPhone.update(event.target.value)}\n />\n <span id={hintId}>\n {handoff.customer?.phoneLast4\n ? `Leave blank to use your Zappie number ending ${handoff.customer.phoneLast4}`\n : \"Leave blank to use your Zappie number\"}\n </span>\n {invalid && (\n <span id={errorId} role=\"alert\">\n Enter a phone number with 7 to 15 digits\n </span>\n )}\n </div>\n )}\n </section>\n );\n}\n","import { useBaseHostBridge } from \"../host-bridge\";\n\nexport function DeliveryDistance() {\n const distance = useBaseHostBridge().deliveryDistance;\n if (!distance?.message) {\n return null;\n }\n return (\n <p\n role={distance.status === \"too_far\" ? \"alert\" : \"status\"}\n className=\"z-base-notice\"\n data-severity={distance.status === \"too_far\" ? \"error\" : \"warning\"}\n >\n {distance.message}\n </p>\n );\n}\n","import { Cart, Overlay } from \"@zappie/foundations\";\nexport function EmptyCart() {\n return (\n <Cart.Empty className=\"z-base-cart-empty\">\n <h2>Your cart is empty</h2>\n <p>Add something from the menu to get started.</p>\n <Overlay.Close className=\"z-base-button\">Browse menu</Overlay.Close>\n </Cart.Empty>\n );\n}\n","import { Overlay, useOverlay } from \"@zappie/foundations\";\nimport type { ReactNode } from \"react\";\nimport { useThemeClass } from \"./theme-class\";\nexport function CartSheet({\n id,\n title,\n trigger,\n children,\n}: {\n id: string;\n title: string;\n trigger: string;\n children: ReactNode;\n}) {\n const rootClass = useThemeClass(\"z-base-cart z-base-editor\");\n const overlay = useOverlay(\"cart_sheet\", id);\n return (\n <Overlay.Root\n param=\"cart_sheet\"\n id={id}\n presentation={{ base: \"sheet\", lg: \"dialog\" }}\n >\n <Overlay.Trigger className=\"z-base-button-secondary\">\n {trigger}\n </Overlay.Trigger>\n <Overlay.Content data-zappie-theme=\"base\" className={rootClass}>\n <header className=\"z-base-cart-header\">\n <Overlay.Title>{title}</Overlay.Title>\n <Overlay.Close className=\"z-base-button-secondary\">\n Cancel\n </Overlay.Close>\n </header>\n {overlay.isOpen && <div className=\"z-base-cart-body\">{children}</div>}\n </Overlay.Content>\n </Overlay.Root>\n );\n}\n","import type { DeliveryAddress } from \"@zappie/sdk\";\nimport { useCallback, useRef, useState } from \"react\";\nimport { useAddressLookup } from \"../address\";\nexport function useAddressSelection(initial?: DeliveryAddress) {\n const lookup = useAddressLookup();\n const [selected, setSelected] = useState(initial);\n const [query, setQuery] = useState(initial?.line1 ?? \"\");\n const [busy, setBusy] = useState(false);\n const [locating, setLocating] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const revision = useRef(0);\n const sessions = useRef(new Map<string, string | undefined>());\n const suggestions = useCallback(\n async (query: string) => {\n const values = await lookup.suggest(query);\n return values.map((value) => {\n sessions.current.set(value.placeId, value.sessionToken);\n return {\n id: value.placeId,\n label: value.address,\n address: { line1: value.address, placeId: value.placeId },\n };\n });\n },\n [lookup],\n );\n const changeQuery = (value: string) => {\n revision.current++;\n setQuery(value);\n setSelected(undefined);\n setBusy(false);\n setLocating(false);\n setError(null);\n };\n const run = async (\n request: number,\n operation: () => Promise<DeliveryAddress>,\n fillQuery: boolean,\n ) => {\n try {\n const resolved = await operation();\n if (revision.current === request) {\n setSelected(resolved);\n if (fillQuery) {\n setQuery(resolved.line1);\n }\n }\n } catch (failure) {\n const aborted =\n (failure instanceof Error || failure instanceof DOMException) &&\n failure.name === \"AbortError\";\n if (revision.current === request && !aborted) {\n setError(\n failure instanceof Error\n ? failure.message\n : \"Unable to locate this address\",\n );\n }\n } finally {\n if (revision.current === request) {\n setBusy(false);\n setLocating(false);\n }\n }\n };\n const select = (address: DeliveryAddress) => {\n const request = ++revision.current;\n setLocating(false);\n setBusy(true);\n setError(null);\n const resolve = lookup.resolve;\n if (!resolve) {\n setSelected(address);\n setBusy(false);\n return Promise.resolve();\n }\n return run(\n request,\n () => resolve(address, sessions.current.get(address.placeId ?? \"\")),\n false,\n );\n };\n const findCurrentLocation = () => {\n if (!lookup.reverse || !navigator.geolocation) {\n return;\n }\n const reverse = lookup.reverse;\n const request = ++revision.current;\n setBusy(true);\n setLocating(true);\n setError(null);\n navigator.geolocation.getCurrentPosition(\n (position) => {\n if (revision.current !== request) {\n return;\n }\n void run(\n request,\n () =>\n reverse({\n lat: position.coords.latitude,\n lng: position.coords.longitude,\n }),\n true,\n );\n },\n (failure) => {\n if (revision.current !== request) {\n return;\n }\n if (failure.code === 1) {\n setError(\"Location access is off. Search for your address instead.\");\n } else {\n setError(\n \"We couldn't find your location. Search for your address instead.\",\n );\n }\n setBusy(false);\n setLocating(false);\n },\n { enableHighAccuracy: false, timeout: 10_000, maximumAge: 60_000 },\n );\n };\n return {\n selected,\n query,\n busy,\n locating,\n error,\n suggestions,\n changeQuery,\n select,\n findCurrentLocation,\n };\n}\n","import { Address, useOverlay } from \"@zappie/foundations\";\nimport { useCart } from \"@zappie/sdk/react\";\nimport { Fragment, useState } from \"react\";\nimport { useAddressLookup } from \"../address\";\nimport { useBaseHostBridge } from \"../host-bridge\";\nimport { CartSheet } from \"./cart-sheet\";\nimport { useAddressSelection } from \"./use-address-selection\";\nfunction AddressForm() {\n const cart = useCart();\n const lookup = useAddressLookup();\n const bridge = useBaseHostBridge();\n const overlay = useOverlay(\"cart_sheet\", \"address\");\n const current =\n cart.fulfilment?.type === \"delivery\" ? cart.fulfilment.address : undefined;\n const {\n selected,\n query,\n busy,\n error: lookupError,\n suggestions,\n changeQuery,\n select,\n findCurrentLocation,\n locating,\n } = useAddressSelection(current);\n const [instructions, setInstructions] = useState(current?.instructions ?? \"\");\n const [error, setError] = useState<string | null>(null);\n const save = () => {\n if (!selected || !cart.branchId || busy) {\n return;\n }\n setError(null);\n try {\n const fulfilment = {\n type: \"delivery\" as const,\n branchId: cart.branchId,\n address: { ...selected, instructions },\n ...(cart.fulfilment && \"scheduledFor\" in cart.fulfilment\n ? { scheduledFor: cart.fulfilment.scheduledFor }\n : {}),\n };\n cart.actions.setFulfilment(fulfilment);\n bridge.saveFulfilment?.(fulfilment);\n overlay.close();\n } catch (failure) {\n setError(\n failure instanceof Error\n ? failure.message\n : \"Unable to save this address\",\n );\n }\n };\n return (\n <Fragment>\n {lookup.reverse &&\n typeof navigator !== \"undefined\" &&\n navigator.geolocation && (\n <button\n type=\"button\"\n className=\"z-base-button-secondary\"\n disabled={busy}\n onClick={findCurrentLocation}\n >\n {locating ? \"Finding your location…\" : \"Use my current location\"}\n </button>\n )}\n <Address.Picker\n query={query}\n onQueryChange={changeQuery}\n getSuggestions={suggestions}\n onSelect={(value) => {\n if (\"address\" in value) {\n void select(value.address);\n }\n }}\n >\n {({ suggestions, status, isOpen }) => (\n <Fragment>\n <label className=\"z-base-field\" htmlFor=\"z-base-delivery-address\">\n Delivery address\n <Address.Input\n className=\"z-base-input\"\n id=\"z-base-delivery-address\"\n aria-label=\"Delivery address\"\n />\n </label>\n {status === \"loading\" && <p role=\"status\">Finding addresses…</p>}\n {status === \"error\" && (\n <p role=\"alert\">Unable to find addresses. Try again.</p>\n )}\n {isOpen && (\n <Address.Suggestions className=\"z-base-suggestions\">\n {suggestions.map((value, index) => (\n <Address.Suggestion\n key={value.id}\n index={index}\n className=\"z-base-choice\"\n >\n {value.label}\n </Address.Suggestion>\n ))}\n </Address.Suggestions>\n )}\n {isOpen &&\n status === \"ready\" &&\n query &&\n suggestions.length === 0 && <p>No matching addresses.</p>}\n </Fragment>\n )}\n </Address.Picker>\n <label className=\"z-base-field\">\n Delivery instructions\n <textarea\n className=\"z-base-input\"\n maxLength={500}\n value={instructions}\n onChange={(event) => setInstructions(event.target.value)}\n />\n </label>\n {selected && lookup.Map && <lookup.Map address={selected} />}\n {lookupError && <p role=\"alert\">{lookupError}</p>}\n {error && <p role=\"alert\">{error}</p>}\n <button\n type=\"button\"\n className=\"z-base-button\"\n disabled={!selected || busy}\n onClick={() => {\n void save();\n }}\n >\n {busy ? \"Locating address…\" : \"Save address\"}\n </button>\n </Fragment>\n );\n}\nexport function AddressSheet() {\n const cart = useCart();\n return (\n <CartSheet\n id=\"address\"\n title=\"Delivery address\"\n trigger={\n cart.fulfilment?.type === \"delivery\"\n ? \"Change address\"\n : \"Add delivery address\"\n }\n >\n <AddressForm />\n </CartSheet>\n );\n}\n","import { format } from \"@zappie/sdk\";\nimport { useBaseHostBridge } from \"../host-bridge\";\n/** Shown when the branch prices delivery by region, as the legacy cart does. */\nexport function RegionPicker() {\n const bridge = useBaseHostBridge();\n const regions = bridge.deliveryRegions;\n if (!regions?.length || !bridge.setDeliveryRegion) {\n return null;\n }\n const sorted = [...regions].sort((a, b) => a.name.localeCompare(b.name));\n return (\n <label className=\"z-base-field\">\n Delivery region\n <select\n className=\"z-base-input\"\n value={bridge.deliveryRegionId ?? \"\"}\n onChange={(event) => {\n if (event.target.value) {\n bridge.setDeliveryRegion?.(event.target.value);\n }\n }}\n >\n <option value=\"\" disabled>\n Choose a delivery region\n </option>\n {sorted.map((region) => (\n <option key={region.id} value={region.id}>\n {region.name} ({format.money(region.fee)})\n </option>\n ))}\n </select>\n </label>\n );\n}\n","import type { CartLine, Menu } from \"@zappie/sdk\";\n/**\n * Pre-order limits for the menus the cart's lines come from. Schedule reads a\n * menu's notice only from a single-menu catalogue; with several menus the\n * tightest notice and horizon among the cart's pre-order menus apply.\n */\nexport function cartScheduleLimits(\n menu: Menu | undefined,\n lines: readonly CartLine[],\n maxDays: number | undefined,\n): { noticeMinutes: number; maxDays: number | undefined } {\n const sections = (menu?.menus ?? []).filter(\n (section) =>\n section.schedule?.preorder &&\n lines.some((line) =>\n line.menuId\n ? line.menuId === section.id\n : section.categoryIds.some((id) =>\n menu?.categories\n .find((category) => category.id === id)\n ?.itemIds.includes(line.itemId),\n ),\n ),\n );\n const notice = Math.max(\n 0,\n ...sections.map((section) => section.schedule?.preorderNoticeHours ?? 0),\n );\n const horizons = sections\n .map((section) => section.schedule?.preorderMaxDays)\n .filter((days): days is number => typeof days === \"number\" && days > 0);\n const limit =\n horizons.length > 0\n ? Math.min(maxDays ?? Number.POSITIVE_INFINITY, ...horizons)\n : maxDays;\n return {\n noticeMinutes: notice * 60,\n maxDays: limit === undefined ? undefined : Math.max(1, Math.min(90, limit)),\n };\n}\n","import { Schedule, useOverlay } from \"@zappie/foundations\";\nimport type { Branch } from \"@zappie/sdk\";\nimport { useCart, useCartCatalogue } from \"@zappie/sdk/react\";\nimport { useState } from \"react\";\nimport { useBaseHostBridge } from \"../host-bridge\";\nimport { cartScheduleLimits } from \"./cart-schedule\";\nimport { CartSheet } from \"./cart-sheet\";\nfunction ScheduleForm({ branch }: { branch: Branch }) {\n const cart = useCart();\n const bridge = useBaseHostBridge();\n const overlay = useOverlay(\"cart_sheet\", \"schedule\");\n const menu = useCartCatalogue();\n const limits = cartScheduleLimits(menu, cart.lines, bridge.scheduleMaxDays);\n const [error, setError] = useState<string | null>(null);\n const fulfilment = cart.fulfilment;\n if (!fulfilment || fulfilment.type === \"dine_in\") {\n return (\n <p>Add a delivery address or select pickup before choosing a time.</p>\n );\n }\n return (\n <Schedule\n branch={\n bridge.scheduleOpeningTimes\n ? { ...branch, openingTimes: bridge.scheduleOpeningTimes }\n : branch\n }\n maxDays={limits.maxDays}\n noticeMinutes={limits.noticeMinutes}\n defaultValue={fulfilment.scheduledFor ?? null}\n >\n {({ days, value, setValue, canAsap, isValid }) => (\n <div className=\"z-base-field\">\n <p>Times are shown in {branch.timezone ?? \"the store’s timezone\"}.</p>\n <label className=\"z-base-field\">\n Order time\n <select\n className=\"z-base-input\"\n value={value ?? \"\"}\n onChange={(event) => setValue(event.target.value || null)}\n >\n <option value=\"\" disabled={!canAsap}>\n As soon as possible\n </option>\n {days.map((day) => (\n <optgroup key={day.date} label={day.date}>\n {day.slots.map((slot) => (\n <option key={slot.value} value={slot.value}>\n {slot.label}\n </option>\n ))}\n </optgroup>\n ))}\n </select>\n </label>\n {!isValid && <p role=\"alert\">Choose an available order time.</p>}\n {days.length === 0 && (\n <p>No scheduled times are currently available.</p>\n )}\n {error && <p role=\"alert\">{error}</p>}\n <button\n type=\"button\"\n className=\"z-base-button\"\n disabled={!isValid}\n onClick={() => {\n try {\n const next = { ...fulfilment };\n if (value === null) {\n delete next.scheduledFor;\n } else {\n next.scheduledFor = value;\n }\n cart.actions.setFulfilment(next);\n bridge.saveFulfilment?.(next);\n overlay.close();\n } catch (failure) {\n setError(\n failure instanceof Error\n ? failure.message\n : \"Unable to save this time\",\n );\n }\n }}\n >\n Save time\n </button>\n </div>\n )}\n </Schedule>\n );\n}\nexport function ScheduleSheet({ branch }: { branch: Branch }) {\n return (\n <CartSheet id=\"schedule\" title=\"Schedule order\" trigger=\"Choose order time\">\n <ScheduleForm branch={branch} />\n </CartSheet>\n );\n}\n","import { Branch, Fulfilment } from \"@zappie/foundations\";\nimport { useCart, useStore } from \"@zappie/sdk/react\";\nimport { Fragment, useState } from \"react\";\nimport { useAddressLookup } from \"../address\";\nimport { useBaseHostBridge } from \"../host-bridge\";\nimport { AddressSheet } from \"./address-sheet\";\nimport { RegionPicker } from \"./region-picker\";\nimport { ScheduleSheet } from \"./schedule-sheet\";\nexport function FulfilmentPanel() {\n const cart = useCart();\n const store = useStore();\n const bridge = useBaseHostBridge();\n const lookup = useAddressLookup();\n const [error, setError] = useState<string | null>(null);\n const branch = store.data?.branches.find(\n (branch) => branch.id === cart.branchId,\n );\n const mode = bridge.fulfilmentMode ?? cart.fulfilment?.type ?? \"delivery\";\n if (!branch) {\n return null;\n }\n const scheduledFor =\n cart.fulfilment && \"scheduledFor\" in cart.fulfilment\n ? cart.fulfilment.scheduledFor\n : undefined;\n return (\n <section className=\"z-base-fulfilment-panel\" aria-label=\"Fulfilment\">\n <h2>Fulfilment</h2>\n <Fulfilment.Switch aria-label=\"Order fulfilment\">\n {({ options }) => (\n <div className=\"z-base-line-actions\">\n {options\n .filter((option) => option !== \"dine_in\")\n .map((option) => (\n <button\n type=\"button\"\n key={option}\n aria-pressed={mode === option}\n className=\"z-base-button-secondary\"\n onClick={() => {\n setError(null);\n try {\n if (\n !bridge.setFulfilmentMode(\n option as \"delivery\" | \"pickup\",\n )\n ) {\n setError(\n \"This menu does not allow that fulfilment option.\",\n );\n }\n } catch (failure) {\n setError(\n failure instanceof Error\n ? failure.message\n : \"Unable to change fulfilment\",\n );\n }\n }}\n >\n {option === \"pickup\" ? \"Pickup\" : \"Delivery\"}\n </button>\n ))}\n </div>\n )}\n </Fulfilment.Switch>\n <Branch.Picker branches={[branch]}>\n {({ selected }) => (\n <p>\n {mode === \"pickup\" ? \"Collect from\" : \"Ordering from\"}{\" \"}\n {selected?.name}\n {selected?.address ? ` — ${selected.address}` : \"\"}\n </p>\n )}\n </Branch.Picker>\n {error && <p role=\"alert\">{error}</p>}\n {mode === \"delivery\" && (\n <Fragment>\n {cart.fulfilment?.type === \"delivery\" && (\n <Fragment>\n <p>{cart.fulfilment.address.line1}</p>\n {lookup.Map && <lookup.Map address={cart.fulfilment.address} />}\n </Fragment>\n )}\n <AddressSheet />\n <RegionPicker />\n </Fragment>\n )}\n {scheduledFor && (\n <p>\n Scheduled for{\" \"}\n {new Intl.DateTimeFormat(\"en\", {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n timeZone: branch.timezone ?? store.data?.timezone,\n }).format(new Date(scheduledFor))}\n </p>\n )}\n {branch.fulfilment.scheduling && <ScheduleSheet branch={branch} />}\n </section>\n );\n}\n","import { useStore } from \"@zappie/sdk/react\";\nexport function Loading() {\n const { error } = useStore();\n if (error) {\n return (\n <p role=\"alert\">Unable to load the cart. Reload the page to try again.</p>\n );\n }\n return (\n <div className=\"z-base-cart-empty\" role=\"status\" aria-busy=\"true\">\n <p>Loading cart…</p>\n <div className=\"z-base-cart-placeholder\" aria-hidden=\"true\" />\n </div>\n );\n}\n","import { useOverlay } from \"@zappie/foundations\";\nimport { useCart } from \"@zappie/sdk/react\";\nimport { useState } from \"react\";\nimport { useCheckoutHandoff } from \"../checkout\";\nimport { useBaseHostBridge } from \"../host-bridge\";\nimport { CartSheet } from \"./cart-sheet\";\nfunction PromoForm() {\n const cart = useCart();\n const bridge = useBaseHostBridge();\n const overlay = useOverlay(\"cart_sheet\", \"promo\");\n const [code, setCode] = useState(cart.promoCode ?? \"\");\n const [error, setError] = useState<string | null>(null);\n const save = (value: string | null) => {\n try {\n cart.actions.setPromoCode(value);\n overlay.close();\n } catch (failure) {\n setError(\n failure instanceof Error\n ? failure.message\n : \"Unable to apply this code\",\n );\n }\n };\n return (\n <form\n className=\"z-base-field\"\n onSubmit={(event) => {\n event.preventDefault();\n save(code.trim());\n }}\n >\n <label className=\"z-base-field\">\n Promo code\n <input\n className=\"z-base-input\"\n autoComplete=\"off\"\n value={code}\n onChange={(event) => setCode(event.target.value)}\n />\n </label>\n <p>Discounts are confirmed when your order totals update.</p>\n {bridge.availablePromos?.length ? (\n <section aria-label=\"Available promos\">\n <h3>Available promos</h3>\n <ul className=\"z-base-option-list\">\n {bridge.availablePromos.map((promo) => (\n <li key={promo.id}>\n <div>\n <strong>{promo.name}</strong>\n <p>{promo.description}</p>\n </div>\n <button\n className=\"z-base-button-secondary\"\n type=\"button\"\n disabled={promo.disabled}\n onClick={() => save(promo.code)}\n >\n Apply {promo.code}\n </button>\n </li>\n ))}\n </ul>\n </section>\n ) : null}\n {error && <p role=\"alert\">{error}</p>}\n <button className=\"z-base-button\" type=\"submit\" disabled={!code.trim()}>\n Apply code\n </button>\n {cart.promoCode && (\n <button\n className=\"z-base-button-secondary\"\n type=\"button\"\n onClick={() => save(null)}\n >\n Remove code\n </button>\n )}\n </form>\n );\n}\nexport function PromoSheet() {\n const cart = useCart();\n const handoff = useCheckoutHandoff();\n // Promo codes belong to the customer's account, as in the legacy cart.\n if (!handoff.customer) {\n return null;\n }\n return (\n <CartSheet\n id=\"promo\"\n title=\"Promo code\"\n trigger={cart.promoCode ? `Promo: ${cart.promoCode}` : \"Add promo code\"}\n >\n <PromoForm />\n </CartSheet>\n );\n}\n","import { useState } from \"react\";\nimport { useCheckoutHandoff } from \"../checkout\";\nimport { useBaseHostBridge } from \"../host-bridge\";\nimport { CartSheet } from \"./cart-sheet\";\n\nexport function RewardsSheet() {\n const bridge = useBaseHostBridge();\n const handoff = useCheckoutHandoff();\n const [error, setError] = useState<string | null>(null);\n const rewards = bridge.rewards;\n if (!handoff.customer || !rewards) {\n return null;\n }\n const appliedByPerk = new Map(\n rewards.applied.map((reward) => [reward.perkId, reward]),\n );\n return (\n <CartSheet\n id=\"rewards\"\n title=\"Rewards\"\n trigger={\n rewards.applied.length\n ? `Rewards (${rewards.applied.length})`\n : \"Use rewards\"\n }\n >\n <p>Your points: {rewards.balance}</p>\n {error && <p role=\"alert\">{error}</p>}\n {rewards.items.length ? (\n <ul className=\"z-base-option-list\">\n {rewards.items.map((reward) => {\n const applied = appliedByPerk.get(reward.id);\n const busy = rewards.busyPerkId === reward.id;\n const unavailable =\n reward.disabled ||\n (!applied && reward.pointsCost > rewards.balance);\n return (\n <li key={reward.id}>\n <div>\n <strong>{reward.name}</strong>\n <p>{reward.description}</p>\n <p>\n {reward.pointsCost} points · {reward.reward}\n </p>\n </div>\n {applied ? (\n <button\n className=\"z-base-button-secondary\"\n type=\"button\"\n disabled={busy}\n onClick={() => {\n setError(null);\n void rewards\n .cancel(applied.redemptionId)\n .catch((failure) => {\n setError(\n failure instanceof Error\n ? failure.message\n : \"Unable to remove this reward\",\n );\n });\n }}\n >\n Remove\n </button>\n ) : (\n <button\n className=\"z-base-button-secondary\"\n type=\"button\"\n disabled={busy || unavailable}\n onClick={() => {\n setError(null);\n void rewards.redeem(reward.id).catch((failure) => {\n setError(\n failure instanceof Error\n ? failure.message\n : \"Unable to redeem this reward\",\n );\n });\n }}\n >\n {reward.pointsCost > rewards.balance\n ? \"Not enough points\"\n : \"Redeem\"}\n </button>\n )}\n </li>\n );\n })}\n </ul>\n ) : (\n <p>No rewards available yet.</p>\n )}\n </CartSheet>\n );\n}\n","import type { TotalsState } from \"@zappie/foundations\";\nimport type { CartFulfilment, CartState } from \"@zappie/sdk\";\nimport {\n payReadiness,\n type PayReadiness,\n type PayReadinessQuoteState,\n} from \"@zappie/sdk/checkout\";\n\nexport type CheckoutButtonStatus = PayReadiness | \"busy\" | \"too_far\";\n\nexport type CheckoutButtonState = {\n status: CheckoutButtonStatus;\n label: string;\n enabled: boolean;\n};\n\nconst labels: Record<CheckoutButtonStatus, string> = {\n pay: \"Continue to payment\",\n sign_in: \"Sign in to continue\",\n busy: \"Please wait…\",\n quoting: \"Updating total…\",\n retry: \"Update totals to continue\",\n address: \"Add a delivery address\",\n choose_area: \"Choose a delivery area\",\n fix_issues: \"Review your cart\",\n too_far: \"Too far for delivery\",\n phone: \"Check your phone number\",\n};\n\nexport function toPayReadinessQuoteState(\n cartState: CartState,\n totalsStatus: TotalsState[\"status\"],\n): PayReadinessQuoteState {\n if (cartState.status === \"quoting\") {\n return { status: \"loading\" };\n }\n if (totalsStatus === \"stale\" || totalsStatus === \"offline\") {\n return { status: \"error\" };\n }\n if (cartState.status === \"quoted\") {\n return { status: \"ready\", quote: cartState.quote };\n }\n if (cartState.status === \"needs_attention\") {\n if (cartState.quote) {\n return { status: \"ready\", quote: cartState.quote };\n }\n return { status: \"error\" };\n }\n return { status: \"idle\" };\n}\n\nexport function checkoutButtonState({\n busy,\n cartState,\n totalsStatus,\n fulfilment,\n customer,\n contactPhoneValid = true,\n deliveryDistance,\n}: {\n busy: boolean;\n cartState: CartState;\n totalsStatus: TotalsState[\"status\"];\n fulfilment: CartFulfilment | null;\n customer: { name?: string } | null;\n contactPhoneValid?: boolean;\n deliveryDistance?: { status: \"unknown\" | \"far\" | \"too_far\" };\n}): CheckoutButtonState {\n let status: CheckoutButtonStatus;\n if (busy) {\n status = \"busy\";\n } else if (!customer) {\n status = \"sign_in\";\n } else if (deliveryDistance?.status === \"too_far\") {\n status = \"too_far\";\n } else {\n const addressValid =\n fulfilment?.type !== \"delivery\" ||\n Boolean(\n fulfilment.address.line1 ||\n fulfilment.address.placeId ||\n fulfilment.address.coordinates,\n );\n status = payReadiness(\n toPayReadinessQuoteState(cartState, totalsStatus),\n contactPhoneValid,\n addressValid,\n );\n // Unresolved warnings (a changed price, a refused promo) still hold payment\n // until the shopper deals with them, although the API would accept the order.\n if (status === \"pay\" && cartState.status === \"needs_attention\") {\n status = \"fix_issues\";\n }\n }\n return {\n status,\n label: labels[status],\n enabled: status === \"pay\" || status === \"sign_in\" || status === \"phone\",\n };\n}\n","import type { TotalsState } from \"@zappie/foundations\";\nimport { isContactPhoneValid } from \"@zappie/sdk/checkout\";\nimport { useCart } from \"@zappie/sdk/react\";\nimport { useState } from \"react\";\nimport { useCheckoutHandoff } from \"../checkout\";\nimport { useBaseHostBridge } from \"../host-bridge\";\nimport { checkoutButtonState } from \"./checkout-state\";\nimport type { ContactPhoneState } from \"./customer-details\";\nexport function CheckoutCta({\n totalsStatus,\n contactPhone,\n}: {\n totalsStatus: TotalsState[\"status\"];\n contactPhone?: ContactPhoneState;\n}) {\n const cart = useCart();\n const bridge = useBaseHostBridge();\n const handoff = useCheckoutHandoff();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const showContactPhone = Boolean(\n contactPhone && handoff.contactPhone && handoff.customer,\n );\n const buttonInput: Parameters<typeof checkoutButtonState>[0] = {\n busy,\n cartState: cart.state,\n totalsStatus,\n fulfilment: cart.fulfilment,\n customer: handoff.customer,\n contactPhoneValid:\n !showContactPhone || isContactPhoneValid(contactPhone?.value ?? \"\"),\n };\n if (bridge.deliveryDistance) {\n buttonInput.deliveryDistance = bridge.deliveryDistance;\n }\n const button = checkoutButtonState(buttonInput);\n const checkout = async () => {\n if (!button.enabled) {\n return;\n }\n if (button.status === \"phone\") {\n contactPhone?.touch();\n return;\n }\n setBusy(true);\n setError(null);\n try {\n if (!handoff.customer) {\n await handoff.signIn();\n } else {\n const payload = cart.actions.toCheckoutPayload();\n if (showContactPhone && contactPhone) {\n await handoff.pay(payload, { contactPhone: contactPhone.value });\n } else {\n await handoff.pay(payload);\n }\n }\n } catch (error) {\n setError(\n error instanceof Error\n ? error.message\n : \"Unable to continue to checkout\",\n );\n } finally {\n setBusy(false);\n }\n };\n return (\n <div className=\"z-base-checkout\">\n {error && <p role=\"alert\">{error}</p>}\n <button\n type=\"button\"\n className=\"z-base-button\"\n disabled={!button.enabled}\n onClick={() => {\n void checkout();\n }}\n >\n {button.label}\n </button>\n </div>\n );\n}\n","import { Totals as FoundationTotals, Money } from \"@zappie/foundations\";\nimport { useCart } from \"@zappie/sdk/react\";\nimport { Fragment, useState } from \"react\";\nimport { useBaseHostBridge } from \"../host-bridge\";\nimport { CheckoutCta } from \"./checkout-cta\";\nimport type { ContactPhoneState } from \"./customer-details\";\nexport function Totals({\n contactPhone,\n}: {\n contactPhone?: ContactPhoneState;\n} = {}) {\n const cart = useCart();\n const bridge = useBaseHostBridge();\n const [error, setError] = useState<string | null>(null);\n const blocked = cart.issues.some((issue) => issue.severity === \"blocking\");\n const refresh = async () => {\n setError(null);\n try {\n await cart.actions.quote({ force: true });\n } catch (error) {\n setError(\n error instanceof Error ? error.message : \"Unable to update totals\",\n );\n }\n };\n return (\n <FoundationTotals className=\"z-base-summary\">\n {({ quote, status }) => {\n // Under a blocking issue the store may not have priced the cart at\n // all (a closed branch without a time, a refused preview): its zero\n // totals would read as ₦0. A priced cart still shows its figures, for\n // example before the customer signs in or chooses an address.\n const unpriced =\n blocked && (!quote || quote.subtotal.amountMinor === 0);\n return (\n <Fragment>\n <h2>Order summary</h2>\n {status === \"loading\" && <p role=\"status\">Updating totals…</p>}\n {status === \"offline\" && (\n <p role=\"alert\">\n Unable to connect. Try updating your totals again.\n </p>\n )}\n {status === \"stale\" && !blocked && (\n <p>Update totals before continuing.</p>\n )}\n {error && <p role=\"alert\">{error}</p>}\n {unpriced && (\n <p>Totals appear once the issues above are resolved.</p>\n )}\n {blocked && !unpriced && (\n <p>Your total may change once the issues above are resolved.</p>\n )}\n {quote && !unpriced && (\n <dl className=\"z-base-totals\">\n <div>\n <dt>Subtotal</dt>\n <dd>\n <Money value={quote.subtotal} />\n </dd>\n </div>\n {quote.fees.map((fee, index) => (\n <div key={`${fee.code}:${index}`}>\n <dt>{fee.label}</dt>\n <dd>\n <Money value={fee.amount} />\n </dd>\n </div>\n ))}\n {quote.delivery && (\n <div>\n <dt>Delivery</dt>\n <dd>\n <Money value={quote.delivery} />\n </dd>\n </div>\n )}\n {quote.discounts.map((discount, index) => (\n <div key={`${discount.code}:${index}`}>\n <dt>{discount.label}</dt>\n <dd>\n <Money value={discount.amount} />\n </dd>\n </div>\n ))}\n <div className=\"z-base-total\">\n <dt>Total</dt>\n <dd>\n <Money value={quote.total} />\n </dd>\n </div>\n </dl>\n )}\n {(status === \"stale\" || status === \"offline\") && !blocked && (\n <button\n type=\"button\"\n className=\"z-base-button-secondary\"\n onClick={() => {\n void refresh();\n }}\n >\n Update totals\n </button>\n )}\n <CheckoutCta\n totalsStatus={status}\n {...(contactPhone ? { contactPhone } : {})}\n />\n </Fragment>\n );\n }}\n </FoundationTotals>\n );\n}\n","\"use client\";\nimport { Cart, Overlay, useOverlay } from \"@zappie/foundations\";\nimport { countEvent } from \"@zappie/sdk/visits\";\nimport { Fragment, useEffect, useRef, useState } from \"react\";\nimport { useBaseHostBridge } from \"../host-bridge\";\nimport { CartIssues } from \"./cart-issues\";\nimport { CartLines } from \"./cart-lines\";\nimport { ClearCart } from \"./clear-cart\";\nimport { CustomerDetails } from \"./customer-details\";\nimport { DeliveryDistance } from \"./delivery-distance\";\nimport { EmptyCart } from \"./empty-cart\";\nimport { FulfilmentPanel } from \"./fulfilment-panel\";\nimport { Loading } from \"./loading\";\nimport { PromoSheet } from \"./promo-sheet\";\nimport { RewardsSheet } from \"./rewards-sheet\";\nimport { ThemeClassProvider } from \"./theme-class\";\nimport { Totals } from \"./totals\";\n/**\n * `themeClass` lets a template reuse this cart under its own design: the class\n * is added to every overlay root, so the template's tokens (compiled under\n * that class) and its own rules apply. Without it the cart uses the base theme.\n */\nexport function CartReview({ themeClass }: { themeClass?: string } = {}) {\n const bridge = useBaseHostBridge();\n const cartOverlay = useOverlay(\"modal_id\", \"review-menu\");\n const countedOpen = useRef(false);\n const [contactPhone, setContactPhone] = useState(\"\");\n const [contactPhoneTouched, setContactPhoneTouched] = useState(false);\n const contactPhoneState = {\n value: contactPhone,\n touched: contactPhoneTouched,\n update: setContactPhone,\n touch: () => setContactPhoneTouched(true),\n };\n useEffect(() => {\n if (cartOverlay.isOpen && !countedOpen.current) {\n countEvent(\"bag\");\n }\n countedOpen.current = cartOverlay.isOpen;\n }, [cartOverlay.isOpen]);\n return (\n <ThemeClassProvider value={themeClass}>\n <Overlay.Root\n param=\"modal_id\"\n id=\"review-menu\"\n presentation={{ base: \"drawer\", lg: \"dialog\" }}\n >\n <Overlay.Content\n data-zappie-theme=\"base\"\n className={themeClass ? `z-base-cart ${themeClass}` : \"z-base-cart\"}\n >\n <header className=\"z-base-cart-header\">\n <Overlay.Title>Cart</Overlay.Title>\n <Overlay.Close\n aria-label=\"Close cart\"\n className=\"z-base-button-secondary\"\n >\n Close\n </Overlay.Close>\n </header>\n <Cart.Root className=\"z-base-cart-body\">\n {({ isHydrated, lines }) => (\n <Fragment>\n {bridge.error && <p role=\"alert\">{bridge.error}</p>}\n {!isHydrated ? (\n <Loading />\n ) : lines.length === 0 ? (\n <EmptyCart />\n ) : (\n <Fragment>\n <div className=\"z-base-cart-tools\">\n <Overlay.Close className=\"z-base-button-secondary\">\n Add more items\n </Overlay.Close>\n <ClearCart />\n </div>\n <CartIssues />\n <div className=\"z-base-cart-columns\">\n <CartLines />\n <div>\n <FulfilmentPanel />\n <DeliveryDistance />\n <CustomerDetails contactPhone={contactPhoneState} />\n <PromoSheet />\n <RewardsSheet />\n <Totals contactPhone={contactPhoneState} />\n </div>\n </div>\n </Fragment>\n )}\n </Fragment>\n )}\n </Cart.Root>\n </Overlay.Content>\n </Overlay.Root>\n </ThemeClassProvider>\n );\n}\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Menu, Item, Category } from '@zappie/sdk';
|
|
3
|
+
import { ComponentType } from 'react';
|
|
4
|
+
|
|
5
|
+
type CatalogueStrategy = (metadata: Menu, sample?: Menu) => "eager" | "progressive" | null;
|
|
6
|
+
|
|
7
|
+
type CatalogueProps = {
|
|
8
|
+
initialMenu: Menu;
|
|
9
|
+
orderAction?: "Place" | "Schedule" | "View";
|
|
10
|
+
menuNotice?: string;
|
|
11
|
+
revision?: string;
|
|
12
|
+
resolveStrategy: CatalogueStrategy;
|
|
13
|
+
themeClass?: string;
|
|
14
|
+
slots?: CatalogueSlots;
|
|
15
|
+
};
|
|
16
|
+
type CatalogueColumnCount = 1 | 2 | 3 | 4;
|
|
17
|
+
type CatalogueLayout = {
|
|
18
|
+
columns?: CatalogueColumnCount | {
|
|
19
|
+
base: CatalogueColumnCount;
|
|
20
|
+
medium?: CatalogueColumnCount;
|
|
21
|
+
large?: CatalogueColumnCount;
|
|
22
|
+
};
|
|
23
|
+
density?: "compact" | "comfortable";
|
|
24
|
+
};
|
|
25
|
+
type CatalogueLayoutMode = "GRID" | "LIST" | "CARD";
|
|
26
|
+
type CatalogueTileProps = {
|
|
27
|
+
item: Item;
|
|
28
|
+
menuId?: string;
|
|
29
|
+
href: string;
|
|
30
|
+
quantityInCart: number;
|
|
31
|
+
onAdd(): void;
|
|
32
|
+
onOpen(): void;
|
|
33
|
+
};
|
|
34
|
+
type CatalogueCategoryHeaderProps = {
|
|
35
|
+
category: Category;
|
|
36
|
+
};
|
|
37
|
+
type CatalogueCategoryTabProps = {
|
|
38
|
+
category: Category;
|
|
39
|
+
active: boolean;
|
|
40
|
+
};
|
|
41
|
+
type CatalogueMenuSlotProps = {
|
|
42
|
+
menu: Menu;
|
|
43
|
+
};
|
|
44
|
+
type CatalogueToolbarActionProps = {
|
|
45
|
+
layout: CatalogueLayoutMode;
|
|
46
|
+
setLayout(layout: CatalogueLayoutMode): void;
|
|
47
|
+
};
|
|
48
|
+
type CatalogueSlots = {
|
|
49
|
+
Tile?: ComponentType<CatalogueTileProps>;
|
|
50
|
+
CategoryHeader?: ComponentType<CatalogueCategoryHeaderProps>;
|
|
51
|
+
CategoryTab?: ComponentType<CatalogueCategoryTabProps>;
|
|
52
|
+
BeforeList?: ComponentType<CatalogueMenuSlotProps>;
|
|
53
|
+
AfterList?: ComponentType<CatalogueMenuSlotProps>;
|
|
54
|
+
ToolbarAction?: ComponentType<CatalogueToolbarActionProps>;
|
|
55
|
+
layout?: CatalogueLayout;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
declare function Catalogue({ initialMenu, resolveStrategy, themeClass, orderAction, menuNotice, revision, slots, }: CatalogueProps): react_jsx_runtime.JSX.Element;
|
|
59
|
+
|
|
60
|
+
export { Catalogue, type CatalogueCategoryHeaderProps, type CatalogueCategoryTabProps, type CatalogueColumnCount, type CatalogueLayout, type CatalogueLayoutMode, type CatalogueMenuSlotProps, type CatalogueProps, type CatalogueSlots, type CatalogueTileProps, type CatalogueToolbarActionProps };
|