@zappie/foundations 0.1.0 → 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.
- package/CHANGELOG.md +35 -0
- package/README.md +30 -253
- package/dist/account/index.js +49 -0
- package/dist/account/index.js.map +7 -0
- package/dist/cart/index.js +168 -0
- package/dist/cart/index.js.map +7 -0
- package/dist/fulfilment/address-picker.js +168 -0
- package/dist/fulfilment/address-picker.js.map +7 -0
- package/dist/fulfilment/branch-picker.js +54 -0
- package/dist/fulfilment/branch-picker.js.map +7 -0
- package/dist/fulfilment/schedule.js +146 -0
- package/dist/fulfilment/schedule.js.map +7 -0
- package/dist/fulfilment/switch.js +54 -0
- package/dist/fulfilment/switch.js.map +7 -0
- package/dist/index.d.ts +2 -4
- package/dist/index.js +49 -2113
- package/dist/index.js.map +7 -1
- package/dist/internal/combobox.js +131 -0
- package/dist/internal/combobox.js.map +7 -0
- package/dist/internal/data-attrs.js +8 -0
- package/dist/internal/data-attrs.js.map +7 -0
- package/dist/internal/ids.js +10 -0
- package/dist/internal/ids.js.map +7 -0
- package/dist/{chunk-D3J7S33L.js → internal/slot.js} +13 -6
- package/dist/internal/slot.js.map +7 -0
- package/dist/internal/use-controllable-state.js +29 -0
- package/dist/internal/use-controllable-state.js.map +7 -0
- package/dist/item-form/index.js +13 -0
- package/dist/item-form/index.js.map +7 -0
- package/dist/item-form/option-group.js +268 -0
- package/dist/item-form/option-group.js.map +7 -0
- package/dist/item-form/options.js +30 -0
- package/dist/item-form/options.js.map +7 -0
- package/dist/item-form/quantity.js +131 -0
- package/dist/item-form/quantity.js.map +7 -0
- package/dist/item-form/root.js +151 -0
- package/dist/item-form/root.js.map +7 -0
- package/dist/media/image.js +30 -0
- package/dist/media/image.js.map +7 -0
- package/dist/money.js +20 -0
- package/dist/money.js.map +7 -0
- package/dist/next.js +8 -6
- package/dist/next.js.map +7 -1
- package/dist/otp/input.js +110 -0
- package/dist/otp/input.js.map +7 -0
- package/dist/overlay/engine.js +16 -8
- package/dist/overlay/engine.js.map +7 -1
- package/dist/{chunk-BY2WQGLO.js → overlay/history.js} +9 -4
- package/dist/overlay/history.js.map +7 -0
- package/dist/overlay/react.js +261 -0
- package/dist/overlay/react.js.map +7 -0
- package/dist/payment/methods.js +103 -0
- package/dist/payment/methods.js.map +7 -0
- package/dist/rich-text/banners.js +9 -0
- package/dist/rich-text/banners.js.map +7 -0
- package/dist/rich-text/browser.js +3 -3
- package/dist/rich-text/browser.js.map +7 -1
- package/dist/rich-text/core.js +75 -0
- package/dist/rich-text/core.js.map +7 -0
- package/dist/rich-text/index.js +3 -79
- package/dist/rich-text/index.js.map +7 -1
- package/dist/search/engine.js +93 -0
- package/dist/search/engine.js.map +7 -0
- package/dist/search/index.js +175 -0
- package/dist/search/index.js.map +7 -0
- package/dist/status/hours.js +177 -0
- package/dist/status/hours.js.map +7 -0
- package/dist/status/open-status.js +45 -0
- package/dist/status/open-status.js.map +7 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +7 -0
- package/package.json +5 -4
- package/dist/chunk-BY2WQGLO.js.map +0 -1
- package/dist/chunk-D3J7S33L.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/overlay/history.ts"],"names":["index"],"mappings":"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","file":"chunk-BY2WQGLO.js","sourcesContent":["export type OverlayEntry = { param: string; id: string; stack: string[] };\nexport type OverlayQuery = Record<string, string | null | undefined>;\nexport type CloseOptions = {\n fallback?: OverlayQuery | undefined;\n omitParams?: string[] | undefined;\n};\nexport const LOCATION_EVENT = \"zappie:location\";\nexport function getCurrentOverlayEntry(): OverlayEntry | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n const entry = window.history.state?.__zappieOverlay;\n if (\n !entry ||\n typeof entry.param !== \"string\" ||\n typeof entry.id !== \"string\"\n ) {\n return null;\n }\n return {\n param: entry.param,\n id: entry.id,\n stack: Array.isArray(entry.stack)\n ? entry.stack.filter((key: unknown) => typeof key === \"string\")\n : [],\n };\n}\nexport function subscribeLocation(listener: () => void) {\n window.addEventListener(\"popstate\", listener);\n window.addEventListener(LOCATION_EVENT, listener);\n return () => {\n window.removeEventListener(\"popstate\", listener);\n window.removeEventListener(LOCATION_EVENT, listener);\n };\n}\nexport function locationSnapshot() {\n return window.location.search;\n}\nfunction applyQuery(url: URL, query: OverlayQuery) {\n for (const [key, value] of Object.entries(query)) {\n if (value == null) {\n url.searchParams.delete(key);\n } else {\n url.searchParams.set(key, value);\n }\n }\n}\nfunction write(\n type: \"pushState\" | \"replaceState\",\n url: URL,\n overlay: OverlayEntry | null,\n) {\n const state = { ...window.history.state };\n delete state.__zappieOverlay;\n if (overlay) {\n state.__zappieOverlay = overlay;\n }\n state.__zappieBase ??= window.location.pathname;\n if (url.pathname !== window.location.pathname) {\n delete state.__NA;\n delete state.__PRIVATE_NEXTJS_INTERNALS_TREE;\n }\n // Bypass Next's wrapper: shallow overlay writes must not remount the page.\n const prototype = Object.getPrototypeOf(window.history) as History;\n prototype[type].call(window.history, state, \"\", url.href);\n window.dispatchEvent(new Event(LOCATION_EVENT));\n}\nexport function openOverlay(\n param: string,\n id: string,\n query: OverlayQuery = {},\n) {\n const url = new URL(window.location.href);\n applyQuery(url, query);\n url.searchParams.set(param, id);\n if (url.href === window.location.href) {\n return;\n }\n const previous = getCurrentOverlayEntry();\n write(\"pushState\", url, {\n param,\n id,\n stack: [...(previous?.stack ?? []), `${param}:${id}`],\n });\n}\nexport function closeOverlay(\n param: string,\n id?: string,\n options: CloseOptions = {},\n) {\n const url = new URL(window.location.href);\n if (!url.searchParams.has(param)) {\n return;\n }\n const entry = getCurrentOverlayEntry();\n const stack = entry?.stack ?? [];\n const index = id\n ? stack.lastIndexOf(`${param}:${id}`)\n : stack.reduce(\n (found, key, index) => (key.startsWith(`${param}:`) ? index : found),\n -1,\n );\n if (index >= 0) {\n window.history.go(-(stack.length - index));\n return;\n }\n applyQuery(url, options.fallback ?? {});\n if (!options.fallback || !(param in options.fallback)) {\n url.searchParams.delete(param);\n }\n for (const omitted of options.omitParams ?? []) {\n url.searchParams.delete(omitted);\n }\n write(\n \"replaceState\",\n url,\n entry && url.searchParams.get(entry.param) === entry.id ? entry : null,\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/slot.tsx"],"names":[],"mappings":"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","file":"chunk-D3J7S33L.js","sourcesContent":["import {\n Children,\n cloneElement,\n createElement,\n isValidElement,\n type AllHTMLAttributes,\n type ElementType,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from \"react\";\n/**\n * HTML attributes shared by foundation parts, with optional render-function children.\n * Set asChild to merge the part props and ref into a single child element.\n */\nexport type PartProps<S = Record<string, never>> = Omit<\n AllHTMLAttributes<HTMLElement>,\n \"children\" | \"defaultValue\" | \"value\"\n> & {\n asChild?: boolean;\n children?: ReactNode | ((state: S) => ReactNode);\n};\nexport function composeRefs<T>(...refs: (Ref<T> | undefined)[]): Ref<T> {\n let cleanups: (() => void)[] = [];\n return (value) => {\n for (const cleanup of cleanups) {\n cleanup();\n }\n cleanups = [];\n if (value === null) {\n return;\n }\n for (const ref of refs) {\n if (typeof ref === \"function\") {\n const cleanup = ref(value);\n cleanups.push(\n typeof cleanup === \"function\" ? cleanup : () => ref(null),\n );\n } else if (ref) {\n ref.current = value;\n cleanups.push(() => {\n ref.current = null;\n });\n }\n }\n };\n}\n/** Consumer handlers run first and may cancel the primitive's action. */\nexport function mergeProps(\n base: Record<string, unknown>,\n consumer: Record<string, unknown>,\n) {\n const result = { ...base, ...consumer };\n if (\n typeof base.className === \"string\" &&\n typeof consumer.className === \"string\"\n ) {\n result.className = `${base.className} ${consumer.className}`;\n }\n if (\n base.style &&\n consumer.style &&\n typeof base.style === \"object\" &&\n typeof consumer.style === \"object\"\n ) {\n result.style = { ...base.style, ...consumer.style };\n }\n for (const key of Object.keys(base)) {\n if (\n /^on[A-Z]/.test(key) &&\n typeof base[key] === \"function\" &&\n typeof consumer[key] === \"function\"\n ) {\n result[key] = (event: { defaultPrevented?: boolean }) => {\n (consumer[key] as (event: unknown) => void)(event);\n if (!event.defaultPrevented) {\n (base[key] as (event: unknown) => void)(event);\n }\n };\n }\n }\n return result;\n}\nexport function part<S>(\n tag: ElementType,\n props: PartProps<S>,\n state: S,\n defaults: Record<string, unknown> = {},\n ref?: Ref<HTMLElement>,\n) {\n const { asChild, children, ...dom } = props;\n const content = typeof children === \"function\" ? children(state) : children;\n const merged = mergeProps(defaults, dom);\n if (asChild || (tag === \"input\" && typeof children === \"function\")) {\n const child = Children.only(content);\n if (!isValidElement(child)) {\n throw new Error(\"asChild requires one React element\");\n }\n const element = child as ReactElement<Record<string, unknown>>;\n // React 18 stores ref on the element; React 19 stores it in props.\n const descriptor = Object.getOwnPropertyDescriptor(element, \"ref\");\n const childRef =\n element.props.ref ??\n (descriptor && \"value\" in descriptor ? descriptor.value : undefined);\n return cloneElement(element, {\n ...mergeProps(merged, element.props),\n ref: composeRefs(ref, childRef as Ref<HTMLElement>),\n });\n }\n return createElement(tag, { ...merged, ref }, content);\n}\n/** A part's caller-supplied id, whether passed as a prop or set on its `asChild` element. */\nexport function partId(props: {\n id?: string | undefined;\n asChild?: boolean | undefined;\n children?: unknown;\n}): string | undefined {\n if (props.id) {\n return props.id;\n }\n if (props.asChild && isValidElement(props.children)) {\n const id = (props.children.props as { id?: unknown }).id;\n return typeof id === \"string\" ? id : undefined;\n }\n return undefined;\n}\n"]}
|