@dropins/tools 1.6.0-alpha2 → 1.6.0-alpha24
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/chunks/get-price-formatter.js +4 -0
- package/chunks/get-price-formatter.js.map +1 -0
- package/chunks/icons/Business.js +4 -0
- package/chunks/icons/Business.js.map +1 -0
- package/chunks/icons/List.js +4 -0
- package/chunks/icons/List.js.map +1 -0
- package/chunks/icons/Quote.js +4 -0
- package/chunks/icons/Quote.js.map +1 -0
- package/chunks/icons/Structure.js +4 -0
- package/chunks/icons/Structure.js.map +1 -0
- package/chunks/icons/Team.js +4 -0
- package/chunks/icons/Team.js.map +1 -0
- package/chunks/initializer.js +1 -1
- package/components.js +1 -1
- package/components.js.map +1 -1
- package/fetch-graphql.js +1 -1
- package/fetch-graphql.js.map +1 -1
- package/initializer.js +1 -1
- package/lib/aem/configs.js +1 -1
- package/lib/aem/configs.js.map +1 -1
- package/lib.js +1 -1
- package/lib.js.map +1 -1
- package/package.json +1 -1
- package/types/elsie/src/components/Pagination/Pagination.d.ts +2 -1
- package/types/elsie/src/components/Pagination/PaginationButton.d.ts +11 -0
- package/types/elsie/src/icons/index.d.ts +29 -24
- package/types/elsie/src/lib/get-price-formatter.d.ts +34 -0
- package/types/elsie/src/lib/index.d.ts +1 -0
- package/types/fetch-graphql/src/index.d.ts +83 -5
- package/chunks/deviceUtils.js +0 -4
- package/chunks/deviceUtils.js.map +0 -1
package/lib.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{S as M}from"./chunks/vcomponent.js";import{R as te,V as ne,c as se,g as ie}from"./chunks/vcomponent.js";import{d as E}from"./chunks/cjs.js";import{d as ae,
|
|
3
|
+
import{S as M}from"./chunks/vcomponent.js";import{R as te,V as ne,c as se,g as ie}from"./chunks/vcomponent.js";import{d as E}from"./chunks/cjs.js";import{d as ae,g as de,b as ue,a as ce,i as pe}from"./chunks/get-price-formatter.js";import{C as fe,I as Se,i as me}from"./chunks/initializer.js";import{IntlContext as k}from"./i18n.js";import{x as R,A as P,h as _,T as L,E as C,q as p,_ as V,y as D,N as q,f as Q}from"./chunks/icons/Add.js";import{g as we,s as ye}from"./chunks/image-params-keymap.js";import{g as Ne,s as be}from"./chunks/locale-config.js";import{g as ve}from"./chunks/get-path-value.js";import"./preact-jsx-runtime.js";import"./signals.js";const H=r=>{const o=new FormData(r);return Object.fromEntries(o)},X=r=>{const o=new FormData(r),n=Object.fromEntries(o);return Object.entries(n).reduce((s,[a])=>{const c=r.elements[a];return c!=null&&c.validationMessage?{...s,[a]:c.validationMessage}:{...s}},{})},T={arrayMerge:(r,o,n)=>{const l=r.slice();return o.forEach((s,a)=>{typeof l[a]>"u"?l[a]=n.cloneUnlessOtherwiseSpecified(s,n):n.isMergeableObject(s)?l[a]=E(r[a],s,n):r.indexOf(s)===-1&&l.push(s)}),l}};function Y(r,o){return o?E(r,o,T):r}const Z=r=>r.replace("_","-");function z(r,o={},n,l,s,a="div"){const c=R(M),g=P(null),h=P("pending"),S=P([]),[y,N]=_({children:[l]}),[I,B]=_({}),v=L(()=>({get:t=>I[t],set:(t,e)=>{B({...v,[t]:e})}}),[I]),{intl:F}=R(k);o.dictionary=F.dictionary,o._setProps=t=>{N(e=>{const i=typeof t=="function"?t(e):t;if(s){const u=C(s(e),{key:"render"}),m=e.children.findIndex(f=>(f==null?void 0:f.key)==="render");e.children[m]=u}return i})};const d=p(t=>{typeof t=="function"?S.current.push(t):console.warn("Skipped: Invalid _registerMethod",t)},[]);o._registerMethod=d;const w=p(t=>V(a,{"data-slot-html-element":t.tagName.toLowerCase(),ref:e=>{e==null||e.appendChild(t)}},null),[a]);o._htmlElementToVNode=w,o.getSlotElement=p(t=>{var i,u;const e=(i=g.current)==null?void 0:i.querySelector(`[data-slot-key="${t}"]`);if(b(`🟦 "${r}" Slot getSlotElement: ${t}`,(u=g.current)==null?void 0:u.cloneNode(!0),e==null?void 0:e.cloneNode(!0)),!!e)return{appendChild:m=>{e.appendChild(m)},prependChild:m=>{e.insertBefore(m,e.firstChild)},appendSibling:m=>{const f=e.parentNode;f==null||f.insertBefore(m,e.nextSibling)},prependSibling:m=>{const f=e.parentNode;f==null||f.insertBefore(m,e)},remove:()=>{e.remove()}}},[r]),o.onRender=p(t=>{S.current.push(t)},[]),o.onChange=o.onRender,o.replaceWith=p(t=>{d(e=>{const i=w(t);e._setProps({children:[i]})})},[w,d]),o.appendChild=p(t=>{d(e=>{const i=w(t);e._setProps(u=>({...u,children:[...u.children,i]}))})},[w,d]),o.prependChild=p(t=>{d(e=>{const i=w(t);e._setProps(u=>({...u,children:[i,...u.children]}))})},[w,d]),o.appendSibling=p(t=>{d(()=>{var i,u;const e=(i=g.current)==null?void 0:i.parentNode;e==null||e.insertBefore(t,((u=g.current)==null?void 0:u.nextSibling)??null)})},[d]),o.prependSibling=p(t=>{d(()=>{var i;const e=(i=g.current)==null?void 0:i.parentNode;e==null||e.insertBefore(t,g.current)})},[d]),o.remove=p(()=>{d(()=>{var t;(t=g.current)==null||t.remove()})},[d]);const O=p(async()=>{if(h.current==="loading")return;h.current="loading",b(`🟨 "${r}" Slot Rendered`);const t=s?C(s(y),{key:"render"}):null;N({children:[t??l]}),S.current.forEach(e=>{e(o,v)}),h.current="ready"},[l,o,r,y,s,v]),j=p(async()=>{if(n)try{h.current="loading",b(`🟩 "${r}" Slot Initialized`),await n(o,g.current)}catch(t){console.error(`Error in "${n.name}" Slot callback`,t)}finally{h.current="ready",await O()}},[n,o,O,r]);return D(()=>{j().finally(()=>{c&&c.value.has(r)&&(c.value.delete(r),c.value=new Set(c.value))})},[]),D(()=>{O()},[JSON.stringify(o),JSON.stringify(I)]),[g,y,h.current]}const $=(r,o)=>q.map(r,n=>Q(n)?n.props.src?C(n,{...n.props,src:o?n.props.src:"","data-original-src":n.props.src}):n.props&&n.props.children?C(n,{...n.props,children:$(n.props.children,o)}):n:n);function x({name:r,lazy:o=!1,context:n,slot:l,children:s,render:a,slotTag:c="div",contentTag:g="div",...h}){const S=R(M),[y,N,I]=z(r,n,l,s,a,g);return L(()=>{if(!r)return console.warn('Slot "name" is required');S&&o===!1&&(S.value.add(r),S.value=new Set(S.value))},[r,o,S]),V(c,{...h,ref:y,"data-slot":r},$(N.children,I==="ready"))}window.DROPINS=window.DROPINS||{};window.DROPINS.showSlots=async r=>{window.sessionStorage.setItem("dropin-debugger--show-slots",r.toString()),document.body.classList.toggle("dropin-debugger--show-slots",r)};let b=()=>{};window.DROPINS.logSlots=async r=>{window.sessionStorage.setItem("dropin-debugger--log-slots",r.toString()),b=r?(...o)=>console.log(...o):()=>{}};window.DROPINS.showSlots(window.sessionStorage.getItem("dropin-debugger--show-slots")==="true");window.DROPINS.logSlots(window.sessionStorage.getItem("dropin-debugger--log-slots")==="true");function ee(r){const o=document.cookie.split(";");let n;return o.forEach(l=>{const[s,a]=l.trim().split("=");s===r&&(n=decodeURIComponent(a))}),n}export{fe as Config,Se as Initializer,te as Render,x as Slot,M as SlotQueueContext,ne as VComponent,se as classes,ae as debounce,E as deepmerge,ie as generateSrcset,ee as getCookie,de as getEffectiveLocale,X as getFormErrors,H as getFormValues,Ne as getGlobalLocale,we as getImageParamsKeyMap,ve as getPathValue,ue as getPriceFormatter,me as initializers,ce as isIOSMobileDevice,pe as isNumber,Y as merge,be as setGlobalLocale,ye as setImageParamsKeyMap,Z as toLanguageTag,z as useSlot};
|
|
4
4
|
//# sourceMappingURL=lib.js.map
|
package/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sources":["/@dropins/tools/src/lib/form-values.ts","/@dropins/tools/src/lib/deepmerge.ts","/@dropins/tools/src/lib/i18n.ts","/@dropins/tools/src/lib/slot.tsx","/@dropins/tools/src/lib/get-cookie.ts"],"sourcesContent":["/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const getFormValues = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n const result = Object.fromEntries(formData);\n return result;\n};\n\nexport const getFormErrors = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n\n const data = Object.fromEntries(formData);\n\n const result = Object.entries(data).reduce((result, [key]) => {\n // @ts-ignore\n const field = form.elements[key];\n\n return field?.validationMessage\n ? { ...result, [key]: field.validationMessage }\n : { ...result };\n }, {});\n\n return result;\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport deepmerge from 'deepmerge';\n\nexport { default as deepmerge } from 'deepmerge';\n\nconst mergeOptions = {\n arrayMerge: (target: any, source: any, options: any) => {\n const destination = target.slice();\n\n source.forEach((item: any, index: number) => {\n if (typeof destination[index] === 'undefined') {\n destination[index] = options.cloneUnlessOtherwiseSpecified(\n item,\n options\n );\n } else if (options.isMergeableObject(item)) {\n destination[index] = deepmerge(target[index], item, options);\n } else if (target.indexOf(item) === -1) {\n destination.push(item);\n }\n });\n return destination;\n },\n};\n\nexport function merge<T>(\n prev: T,\n next?: { [key: string]: any }\n) {\n if (!next) return prev;\n\n return deepmerge<T, { [key: string]: any }>(\n prev,\n next,\n mergeOptions\n );\n}\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\n/**\n * Convert locale from Magento standard to react-intl BCP 47 language tag\n *\n * @param {string} locale - A locale (e.g. `fr_FR`).\n * @returns {string} A BCP 47 language tag (e.g. `fr-FR`).\n */\nexport const toLanguageTag = (locale: string) => {\n return locale.replace('_', '-');\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { IntlContext, Lang } from '@adobe-commerce/elsie/i18n';\nimport {\n cloneElement,\n ComponentChildren,\n createElement,\n RefObject,\n VNode,\n} from 'preact';\nimport { Children, HTMLAttributes, isValidElement } from 'preact/compat';\nimport {\n StateUpdater,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { SlotQueueContext } from './render';\n\nimport '@adobe-commerce/elsie/components/UIProvider/debugger.css';\n\ntype MutateElement = (elem: HTMLElement) => void;\n\ninterface State {\n get: (key: string) => void;\n set: (key: string, value: any) => void;\n}\n\ninterface SlotElement {\n appendChild: MutateElement;\n prependChild: MutateElement;\n appendSibling: MutateElement;\n prependSibling: MutateElement;\n remove: () => void;\n}\n\ninterface PrivateContext<T> {\n _setProps: (s: StateUpdater<{}>) => void;\n _registerMethod: (\n cb: (next: T & DefaultSlotContext<T>, state: State) => void\n ) => void;\n // eslint-disable-next-line no-undef\n _htmlElementToVNode: (element: HTMLElement, tag: keyof HTMLElementTagNameMap) => VNode;\n}\n\ninterface DefaultSlotContext<T> extends PrivateContext<T> {\n dictionary: Lang;\n getSlotElement: (key: string) => SlotElement;\n replaceWith: MutateElement;\n appendChild: MutateElement;\n prependChild: MutateElement;\n appendSibling: MutateElement;\n prependSibling: MutateElement;\n remove: () => void;\n onRender: (cb: (next: T & DefaultSlotContext<T>) => void) => void;\n onChange: (cb: (next: T & DefaultSlotContext<T>) => void) => void;\n}\n\ntype Context<T> = T & ThisType<DefaultSlotContext<T>>; // NOSONAR\n\nexport type SlotProps<T = any> = (\n ctx: T & DefaultSlotContext<T>,\n element: HTMLDivElement | null\n) => Promise<void> | void;\n\nexport type SlotMethod<P = any> = (\n callback: (next: unknown, state: State) => P\n) => void;\n\n// Slot Hook\nexport function useSlot<K, V extends HTMLElement>(\n name: string,\n // @ts-ignore\n context: Context<K> = {},\n callback?: SlotProps<K>,\n children?: ComponentChildren,\n render?: Function,\n // eslint-disable-next-line no-undef\n contentTag: keyof HTMLElementTagNameMap = 'div'\n): [RefObject<V>, Record<string, any>, 'loading' | 'pending' | 'ready'] {\n const slotsQueue = useContext(SlotQueueContext);\n\n // HTML Element\n const elementRef = useRef<V>(null);\n\n const status = useRef<'pending' | 'ready' | 'loading'>('pending');\n\n // Methods\n const methodsRef = useRef<any>([]);\n\n // Children VNodes\n const [props, _setProps] = useState<Record<string, any>>({\n children: [children],\n });\n\n // Attributes\n const [_state, setState] = useState<any>({});\n\n const state = useMemo(\n () => ({\n get: (key: string) => _state[key],\n set: (key: string, value: any) => {\n setState({ ...state, [key]: value });\n },\n }),\n [_state]\n );\n\n /** Internationalization */\n // @ts-ignore\n const { intl }: any = useContext(IntlContext);\n\n // @ts-ignore\n context.dictionary = intl.dictionary;\n\n /** Privates */\n // @ts-ignore\n context._setProps = (next: State<any>) => {\n _setProps((prev) => {\n // next props\n const _next = typeof next === 'function' ? next(prev) : next;\n\n // On render method...\n if (render) {\n const renderNode = cloneElement(render(prev), { key: 'render' });\n\n // find index of existing render node\n const index = prev.children.findIndex((n: any) => n?.key === 'render');\n\n // replace existing render node\n prev.children[index] = renderNode;\n }\n\n return _next;\n });\n };\n\n const _registerMethod = useCallback((cb: Function) => {\n if (typeof cb === 'function') {\n methodsRef.current.push(cb);\n } else {\n console.warn('Skipped: Invalid _registerMethod', cb);\n }\n }, []);\n\n // @ts-ignore\n context._registerMethod = _registerMethod;\n\n const _htmlElementToVNode = useCallback(\n (elem: HTMLElement) => {\n return createElement(\n contentTag,\n {\n 'data-slot-html-element': elem.tagName.toLowerCase(),\n ref: (refElem: HTMLElement | null): void => {\n refElem?.appendChild(elem);\n },\n },\n null\n );\n },\n [contentTag]\n );\n\n // @ts-ignore\n context._htmlElementToVNode = _htmlElementToVNode;\n\n /** Prebuilt Methods */\n // @ts-ignore\n context.getSlotElement = useCallback(\n (key: string) => {\n const element = elementRef.current?.querySelector(\n `[data-slot-key=\"${key}\"]`\n );\n\n log(\n `🟦 \"${name}\" Slot getSlotElement: ${key}`,\n elementRef.current?.cloneNode(true),\n element?.cloneNode(true)\n );\n\n if (!element) return;\n\n return {\n appendChild: (elem: HTMLElement) => {\n element.appendChild(elem);\n },\n\n prependChild: (elem: HTMLElement) => {\n element.insertBefore(elem, element.firstChild);\n },\n\n appendSibling: (elem: HTMLElement) => {\n const parent = element.parentNode;\n parent?.insertBefore(elem, element.nextSibling);\n },\n\n prependSibling: (elem: HTMLElement) => {\n const parent = element.parentNode;\n parent?.insertBefore(elem, element);\n },\n\n remove: () => {\n element.remove();\n },\n };\n },\n [name]\n );\n\n // @ts-ignore\n context.onRender = useCallback((cb: Function) => {\n methodsRef.current.push(cb);\n }, []);\n\n /**\n * @deprecated Use `onRender` instead.\n */\n // @ts-ignore\n context.onChange = context.onRender;\n\n // @ts-ignore\n context.replaceWith = useCallback(\n (elem: HTMLElement) => {\n // @ts-ignore\n _registerMethod((next) => {\n // @ts-ignore\n const children = _htmlElementToVNode(elem);\n\n next._setProps({ children: [children] });\n });\n },\n [_htmlElementToVNode, _registerMethod]\n );\n\n // @ts-ignore\n context.appendChild = useCallback(\n (elem: HTMLElement) => {\n // @ts-ignore\n _registerMethod((next) => {\n // @ts-ignore\n const vnode = _htmlElementToVNode(elem);\n\n next._setProps((prev: any) => {\n return {\n ...prev,\n children: [...prev.children, vnode],\n };\n });\n });\n },\n [_htmlElementToVNode, _registerMethod]\n );\n\n // @ts-ignore\n context.prependChild = useCallback(\n (elem: HTMLElement) => {\n // @ts-ignore\n _registerMethod((next) => {\n // @ts-ignore\n const vnode = _htmlElementToVNode(elem);\n\n next._setProps((prev: any) => {\n return {\n ...prev,\n children: [vnode, ...prev.children],\n };\n });\n });\n },\n [_htmlElementToVNode, _registerMethod]\n );\n\n // @ts-ignore\n context.appendSibling = useCallback(\n (elem: HTMLElement) => {\n // @ts-ignore\n _registerMethod(() => {\n const parent = elementRef.current?.parentNode;\n\n parent?.insertBefore(elem, elementRef.current?.nextSibling ?? null);\n });\n },\n [_registerMethod]\n );\n\n // @ts-ignore\n context.prependSibling = useCallback(\n (elem: HTMLElement) => {\n // @ts-ignore\n _registerMethod(() => {\n const parent = elementRef.current?.parentNode;\n\n parent?.insertBefore(elem, elementRef.current);\n });\n },\n [_registerMethod]\n );\n\n // @ts-ignore\n context.remove = useCallback(() => {\n // @ts-ignore\n _registerMethod(() => {\n elementRef.current?.remove();\n });\n }, [_registerMethod]);\n\n const handleLifeCycleRender = useCallback(async () => {\n if (status.current === 'loading') return;\n\n status.current = 'loading';\n\n log(`🟨 \"${name}\" Slot Rendered`);\n\n // Reset\n const renderNode = render\n ? cloneElement(render(props), { key: 'render' })\n : null;\n _setProps({ children: [renderNode ?? children] });\n\n // Run all registered methods\n methodsRef.current.forEach((method: any) => {\n method(context, state);\n });\n\n status.current = 'ready';\n }, [children, context, name, props, render, state]);\n\n // Initialization\n const handleLifeCycleInit = useCallback(async () => {\n if (!callback) return;\n\n try {\n status.current = 'loading';\n\n log(`🟩 \"${name}\" Slot Initialized`);\n await callback(\n context as K & DefaultSlotContext<K>,\n elementRef.current as HTMLDivElement | null\n );\n } catch (error) {\n console.error(`Error in \"${callback.name}\" Slot callback`, error);\n } finally {\n status.current = 'ready';\n\n // first render\n await handleLifeCycleRender();\n }\n }, [callback, context, handleLifeCycleRender, name]);\n\n // Initialization\n useEffect(() => {\n handleLifeCycleInit().finally(() => {\n if (slotsQueue && slotsQueue.value.has(name)) {\n slotsQueue.value.delete(name);\n slotsQueue.value = new Set(slotsQueue.value);\n }\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Update\n useEffect(() => {\n handleLifeCycleRender();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(context), JSON.stringify(_state)]);\n\n return [elementRef, props, status.current];\n}\n\n/**\n * Recursively processes children elements to conditionally prevent image loading.\n * \n * This function traverses the children tree and modifies img elements to prevent\n * premature loading during slot initialization. When isReady is false, img src\n * attributes are set to empty string to prevent network requests, while preserving\n * the original src in a data attribute for debugging purposes.\n * \n * @param children - The children elements to process (can be any React/Preact children)\n * @param isReady - Whether the slot is ready to load images (true) or should prevent loading (false)\n * @returns Processed children with conditional image src attributes\n */\nconst processChildren = (children: any, isReady: boolean): any => {\n return Children.map(children, child => {\n // Handle text nodes, numbers, etc.\n if (!isValidElement(child)) {\n return child;\n }\n\n // Handle img elements - conditionally set src\n if (child.props.src) {\n return cloneElement(child, {\n ...child.props,\n src: isReady ? child.props.src : \"\",\n // Optionally preserve original src in data attribute for debugging\n 'data-original-src': child.props.src,\n });\n }\n\n // Handle elements with children - recursively process them\n if (child.props && child.props.children) {\n return cloneElement(child, {\n ...child.props,\n children: processChildren(child.props.children, isReady),\n });\n }\n\n // Return other elements as-is\n return child;\n });\n};\n\n// Slot Component\ninterface SlotPropsComponent<T>\n extends Omit<HTMLAttributes<HTMLElement>, 'slot'> {\n name: string;\n lazy?: boolean;\n slot?: SlotProps<T>;\n context?: Context<T>;\n render?: (props: Record<string, any>) => VNode | VNode[];\n // eslint-disable-next-line no-undef\n slotTag?: keyof HTMLElementTagNameMap; // The tag for the slot wrapper itself\n // eslint-disable-next-line no-undef\n contentTag?: keyof HTMLElementTagNameMap; // The tag for dynamically inserted content\n children?: ComponentChildren;\n}\n\nexport function Slot<T>({\n name,\n lazy = false,\n context,\n slot,\n children,\n render,\n slotTag = 'div',\n contentTag = 'div',\n ...props\n}: Readonly<SlotPropsComponent<T>>): VNode<{\n ref: RefObject<HTMLElement>;\n 'data-slot': string;\n [key: string]: any;\n}> {\n const slotsQueue = useContext(SlotQueueContext);\n\n const [elementRef, slotProps, status] = useSlot<T, HTMLElement>(\n name,\n context,\n slot,\n children,\n render,\n contentTag\n );\n\n useMemo(() => {\n if (!name) {\n return console.warn('Slot \"name\" is required');\n }\n\n // add slot to queue\n if (slotsQueue && lazy === false) {\n slotsQueue.value.add(name);\n slotsQueue.value = new Set(slotsQueue.value);\n }\n }, [name, lazy, slotsQueue]);\n\n return createElement(\n slotTag,\n {\n ...props,\n ref: elementRef,\n 'data-slot': name,\n },\n processChildren(slotProps.children, status === 'ready')\n );\n}\n\n// Debugger\n\n// @ts-ignore\nwindow.DROPINS = window.DROPINS || {};\n\n// @ts-ignore\nwindow.DROPINS.showSlots = async (state) => {\n // cache state in session storage\n window.sessionStorage.setItem(\n 'dropin-debugger--show-slots',\n state.toString()\n );\n\n document.body.classList.toggle('dropin-debugger--show-slots', state);\n};\n\nlet log: (...attrs: any) => void = () => {};\n\n// @ts-ignore\nwindow.DROPINS.logSlots = async (state) => {\n // cache state in session storage\n window.sessionStorage.setItem('dropin-debugger--log-slots', state.toString());\n\n log = state ? (...attrs) => console.log(...attrs) : () => {};\n};\n\n/** Persistent Settings */\n\n// @ts-ignore\nwindow.DROPINS.showSlots(\n window.sessionStorage.getItem('dropin-debugger--show-slots') === 'true'\n);\n\n// @ts-ignore\nwindow.DROPINS.logSlots(\n window.sessionStorage.getItem('dropin-debugger--log-slots') === 'true'\n);\n","/**\n * Get cookie\n * @param {string} cookieName - The name of the cookie to get\n * @returns {string} - The value of the cookie\n */\nexport function getCookie(cookieName: string): string | undefined {\n const cookies = document.cookie.split(';');\n let foundValue;\n\n cookies.forEach((cookie) => {\n const [name, value] = cookie.trim().split('=');\n if (name === cookieName) {\n foundValue = decodeURIComponent(value);\n }\n });\n\n return foundValue;\n}\n"],"names":["getFormValues","form","formData","getFormErrors","data","result","key","field","mergeOptions","target","source","options","destination","item","index","deepmerge","merge","prev","next","toLanguageTag","locale","useSlot","name","context","callback","children","render","contentTag","slotsQueue","useContext","SlotQueueContext","elementRef","useRef","status","methodsRef","props","_setProps","useState","_state","setState","state","useMemo","value","intl","IntlContext","_next","renderNode","cloneElement","n","_registerMethod","useCallback","cb","_htmlElementToVNode","elem","createElement","refElem","element","_a","log","_b","parent","vnode","handleLifeCycleRender","method","handleLifeCycleInit","error","useEffect","processChildren","isReady","Children","child","isValidElement","Slot","lazy","slot","slotTag","slotProps","attrs","getCookie","cookieName","cookies","foundValue","cookie"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lib.js","sources":["/@dropins/tools/src/lib/form-values.ts","/@dropins/tools/src/lib/deepmerge.ts","/@dropins/tools/src/lib/i18n.ts","/@dropins/tools/src/lib/slot.tsx","/@dropins/tools/src/lib/get-cookie.ts"],"sourcesContent":["/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const getFormValues = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n const result = Object.fromEntries(formData);\n return result;\n};\n\nexport const getFormErrors = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n\n const data = Object.fromEntries(formData);\n\n const result = Object.entries(data).reduce((result, [key]) => {\n // @ts-ignore\n const field = form.elements[key];\n\n return field?.validationMessage\n ? { ...result, [key]: field.validationMessage }\n : { ...result };\n }, {});\n\n return result;\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nimport deepmerge from 'deepmerge';\n\nexport { default as deepmerge } from 'deepmerge';\n\nconst mergeOptions = {\n arrayMerge: (target: any, source: any, options: any) => {\n const destination = target.slice();\n\n source.forEach((item: any, index: number) => {\n if (typeof destination[index] === 'undefined') {\n destination[index] = options.cloneUnlessOtherwiseSpecified(\n item,\n options\n );\n } else if (options.isMergeableObject(item)) {\n destination[index] = deepmerge(target[index], item, options);\n } else if (target.indexOf(item) === -1) {\n destination.push(item);\n }\n });\n return destination;\n },\n};\n\nexport function merge<T>(\n prev: T,\n next?: { [key: string]: any }\n) {\n if (!next) return prev;\n\n return deepmerge<T, { [key: string]: any }>(\n prev,\n next,\n mergeOptions\n );\n}\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\n/**\n * Convert locale from Magento standard to react-intl BCP 47 language tag\n *\n * @param {string} locale - A locale (e.g. `fr_FR`).\n * @returns {string} A BCP 47 language tag (e.g. `fr-FR`).\n */\nexport const toLanguageTag = (locale: string) => {\n return locale.replace('_', '-');\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this\n * file in accordance with the terms of the Adobe license agreement\n * accompanying it.\n *******************************************************************/\n\nimport { IntlContext, Lang } from '@adobe-commerce/elsie/i18n';\nimport {\n cloneElement,\n ComponentChildren,\n createElement,\n RefObject,\n VNode,\n} from 'preact';\nimport { Children, HTMLAttributes, isValidElement } from 'preact/compat';\nimport {\n StateUpdater,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'preact/hooks';\nimport { SlotQueueContext } from './render';\n\nimport '@adobe-commerce/elsie/components/UIProvider/debugger.css';\n\ntype MutateElement = (elem: HTMLElement) => void;\n\ninterface State {\n get: (key: string) => void;\n set: (key: string, value: any) => void;\n}\n\ninterface SlotElement {\n appendChild: MutateElement;\n prependChild: MutateElement;\n appendSibling: MutateElement;\n prependSibling: MutateElement;\n remove: () => void;\n}\n\ninterface PrivateContext<T> {\n _setProps: (s: StateUpdater<{}>) => void;\n _registerMethod: (\n cb: (next: T & DefaultSlotContext<T>, state: State) => void\n ) => void;\n // eslint-disable-next-line no-undef\n _htmlElementToVNode: (element: HTMLElement, tag: keyof HTMLElementTagNameMap) => VNode;\n}\n\ninterface DefaultSlotContext<T> extends PrivateContext<T> {\n dictionary: Lang;\n getSlotElement: (key: string) => SlotElement;\n replaceWith: MutateElement;\n appendChild: MutateElement;\n prependChild: MutateElement;\n appendSibling: MutateElement;\n prependSibling: MutateElement;\n remove: () => void;\n onRender: (cb: (next: T & DefaultSlotContext<T>) => void) => void;\n onChange: (cb: (next: T & DefaultSlotContext<T>) => void) => void;\n}\n\ntype Context<T> = T & ThisType<DefaultSlotContext<T>>; // NOSONAR\n\nexport type SlotProps<T = any> = (\n ctx: T & DefaultSlotContext<T>,\n element: HTMLDivElement | null\n) => Promise<void> | void;\n\nexport type SlotMethod<P = any> = (\n callback: (next: unknown, state: State) => P\n) => void;\n\n// Slot Hook\nexport function useSlot<K, V extends HTMLElement>(\n name: string,\n // @ts-ignore\n context: Context<K> = {},\n callback?: SlotProps<K>,\n children?: ComponentChildren,\n render?: Function,\n // eslint-disable-next-line no-undef\n contentTag: keyof HTMLElementTagNameMap = 'div'\n): [RefObject<V>, Record<string, any>, 'loading' | 'pending' | 'ready'] {\n const slotsQueue = useContext(SlotQueueContext);\n\n // HTML Element\n const elementRef = useRef<V>(null);\n\n const status = useRef<'pending' | 'ready' | 'loading'>('pending');\n\n // Methods\n const methodsRef = useRef<any>([]);\n\n // Children VNodes\n const [props, _setProps] = useState<Record<string, any>>({\n children: [children],\n });\n\n // Attributes\n const [_state, setState] = useState<any>({});\n\n const state = useMemo(\n () => ({\n get: (key: string) => _state[key],\n set: (key: string, value: any) => {\n setState({ ...state, [key]: value });\n },\n }),\n [_state]\n );\n\n /** Internationalization */\n // @ts-ignore\n const { intl }: any = useContext(IntlContext);\n\n // @ts-ignore\n context.dictionary = intl.dictionary;\n\n /** Privates */\n // @ts-ignore\n context._setProps = (next: State<any>) => {\n _setProps((prev) => {\n // next props\n const _next = typeof next === 'function' ? next(prev) : next;\n\n // On render method...\n if (render) {\n const renderNode = cloneElement(render(prev), { key: 'render' });\n\n // find index of existing render node\n const index = prev.children.findIndex((n: any) => n?.key === 'render');\n\n // replace existing render node\n prev.children[index] = renderNode;\n }\n\n return _next;\n });\n };\n\n const _registerMethod = useCallback((cb: Function) => {\n if (typeof cb === 'function') {\n methodsRef.current.push(cb);\n } else {\n console.warn('Skipped: Invalid _registerMethod', cb);\n }\n }, []);\n\n // @ts-ignore\n context._registerMethod = _registerMethod;\n\n const _htmlElementToVNode = useCallback(\n (elem: HTMLElement) => {\n return createElement(\n contentTag,\n {\n 'data-slot-html-element': elem.tagName.toLowerCase(),\n ref: (refElem: HTMLElement | null): void => {\n refElem?.appendChild(elem);\n },\n },\n null\n );\n },\n [contentTag]\n );\n\n // @ts-ignore\n context._htmlElementToVNode = _htmlElementToVNode;\n\n /** Prebuilt Methods */\n // @ts-ignore\n context.getSlotElement = useCallback(\n (key: string) => {\n const element = elementRef.current?.querySelector(\n `[data-slot-key=\"${key}\"]`\n );\n\n log(\n `🟦 \"${name}\" Slot getSlotElement: ${key}`,\n elementRef.current?.cloneNode(true),\n element?.cloneNode(true)\n );\n\n if (!element) return;\n\n return {\n appendChild: (elem: HTMLElement) => {\n element.appendChild(elem);\n },\n\n prependChild: (elem: HTMLElement) => {\n element.insertBefore(elem, element.firstChild);\n },\n\n appendSibling: (elem: HTMLElement) => {\n const parent = element.parentNode;\n parent?.insertBefore(elem, element.nextSibling);\n },\n\n prependSibling: (elem: HTMLElement) => {\n const parent = element.parentNode;\n parent?.insertBefore(elem, element);\n },\n\n remove: () => {\n element.remove();\n },\n };\n },\n [name]\n );\n\n // @ts-ignore\n context.onRender = useCallback((cb: Function) => {\n methodsRef.current.push(cb);\n }, []);\n\n /**\n * @deprecated Use `onRender` instead.\n */\n // @ts-ignore\n context.onChange = context.onRender;\n\n // @ts-ignore\n context.replaceWith = useCallback(\n (elem: HTMLElement) => {\n // @ts-ignore\n _registerMethod((next) => {\n // @ts-ignore\n const children = _htmlElementToVNode(elem);\n\n next._setProps({ children: [children] });\n });\n },\n [_htmlElementToVNode, _registerMethod]\n );\n\n // @ts-ignore\n context.appendChild = useCallback(\n (elem: HTMLElement) => {\n // @ts-ignore\n _registerMethod((next) => {\n // @ts-ignore\n const vnode = _htmlElementToVNode(elem);\n\n next._setProps((prev: any) => {\n return {\n ...prev,\n children: [...prev.children, vnode],\n };\n });\n });\n },\n [_htmlElementToVNode, _registerMethod]\n );\n\n // @ts-ignore\n context.prependChild = useCallback(\n (elem: HTMLElement) => {\n // @ts-ignore\n _registerMethod((next) => {\n // @ts-ignore\n const vnode = _htmlElementToVNode(elem);\n\n next._setProps((prev: any) => {\n return {\n ...prev,\n children: [vnode, ...prev.children],\n };\n });\n });\n },\n [_htmlElementToVNode, _registerMethod]\n );\n\n // @ts-ignore\n context.appendSibling = useCallback(\n (elem: HTMLElement) => {\n // @ts-ignore\n _registerMethod(() => {\n const parent = elementRef.current?.parentNode;\n\n parent?.insertBefore(elem, elementRef.current?.nextSibling ?? null);\n });\n },\n [_registerMethod]\n );\n\n // @ts-ignore\n context.prependSibling = useCallback(\n (elem: HTMLElement) => {\n // @ts-ignore\n _registerMethod(() => {\n const parent = elementRef.current?.parentNode;\n\n parent?.insertBefore(elem, elementRef.current);\n });\n },\n [_registerMethod]\n );\n\n // @ts-ignore\n context.remove = useCallback(() => {\n // @ts-ignore\n _registerMethod(() => {\n elementRef.current?.remove();\n });\n }, [_registerMethod]);\n\n const handleLifeCycleRender = useCallback(async () => {\n if (status.current === 'loading') return;\n\n status.current = 'loading';\n\n log(`🟨 \"${name}\" Slot Rendered`);\n\n // Reset\n const renderNode = render\n ? cloneElement(render(props), { key: 'render' })\n : null;\n _setProps({ children: [renderNode ?? children] });\n\n // Run all registered methods\n methodsRef.current.forEach((method: any) => {\n method(context, state);\n });\n\n status.current = 'ready';\n }, [children, context, name, props, render, state]);\n\n // Initialization\n const handleLifeCycleInit = useCallback(async () => {\n if (!callback) return;\n\n try {\n status.current = 'loading';\n\n log(`🟩 \"${name}\" Slot Initialized`);\n await callback(\n context as K & DefaultSlotContext<K>,\n elementRef.current as HTMLDivElement | null\n );\n } catch (error) {\n console.error(`Error in \"${callback.name}\" Slot callback`, error);\n } finally {\n status.current = 'ready';\n\n // first render\n await handleLifeCycleRender();\n }\n }, [callback, context, handleLifeCycleRender, name]);\n\n // Initialization\n useEffect(() => {\n handleLifeCycleInit().finally(() => {\n if (slotsQueue && slotsQueue.value.has(name)) {\n slotsQueue.value.delete(name);\n slotsQueue.value = new Set(slotsQueue.value);\n }\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Update\n useEffect(() => {\n handleLifeCycleRender();\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [JSON.stringify(context), JSON.stringify(_state)]);\n\n return [elementRef, props, status.current];\n}\n\n/**\n * Recursively processes children elements to conditionally prevent image loading.\n * \n * This function traverses the children tree and modifies img elements to prevent\n * premature loading during slot initialization. When isReady is false, img src\n * attributes are set to empty string to prevent network requests, while preserving\n * the original src in a data attribute for debugging purposes.\n * \n * @param children - The children elements to process (can be any React/Preact children)\n * @param isReady - Whether the slot is ready to load images (true) or should prevent loading (false)\n * @returns Processed children with conditional image src attributes\n */\nconst processChildren = (children: any, isReady: boolean): any => {\n return Children.map(children, child => {\n // Handle text nodes, numbers, etc.\n if (!isValidElement(child)) {\n return child;\n }\n\n // Handle img elements - conditionally set src\n if (child.props.src) {\n return cloneElement(child, {\n ...child.props,\n src: isReady ? child.props.src : \"\",\n // Optionally preserve original src in data attribute for debugging\n 'data-original-src': child.props.src,\n });\n }\n\n // Handle elements with children - recursively process them\n if (child.props && child.props.children) {\n return cloneElement(child, {\n ...child.props,\n children: processChildren(child.props.children, isReady),\n });\n }\n\n // Return other elements as-is\n return child;\n });\n};\n\n// Slot Component\ninterface SlotPropsComponent<T>\n extends Omit<HTMLAttributes<HTMLElement>, 'slot'> {\n name: string;\n lazy?: boolean;\n slot?: SlotProps<T>;\n context?: Context<T>;\n render?: (props: Record<string, any>) => VNode | VNode[];\n // eslint-disable-next-line no-undef\n slotTag?: keyof HTMLElementTagNameMap; // The tag for the slot wrapper itself\n // eslint-disable-next-line no-undef\n contentTag?: keyof HTMLElementTagNameMap; // The tag for dynamically inserted content\n children?: ComponentChildren;\n}\n\nexport function Slot<T>({\n name,\n lazy = false,\n context,\n slot,\n children,\n render,\n slotTag = 'div',\n contentTag = 'div',\n ...props\n}: Readonly<SlotPropsComponent<T>>): VNode<{\n ref: RefObject<HTMLElement>;\n 'data-slot': string;\n [key: string]: any;\n}> {\n const slotsQueue = useContext(SlotQueueContext);\n\n const [elementRef, slotProps, status] = useSlot<T, HTMLElement>(\n name,\n context,\n slot,\n children,\n render,\n contentTag\n );\n\n useMemo(() => {\n if (!name) {\n return console.warn('Slot \"name\" is required');\n }\n\n // add slot to queue\n if (slotsQueue && lazy === false) {\n slotsQueue.value.add(name);\n slotsQueue.value = new Set(slotsQueue.value);\n }\n }, [name, lazy, slotsQueue]);\n\n return createElement(\n slotTag,\n {\n ...props,\n ref: elementRef,\n 'data-slot': name,\n },\n processChildren(slotProps.children, status === 'ready')\n );\n}\n\n// Debugger\n\n// @ts-ignore\nwindow.DROPINS = window.DROPINS || {};\n\n// @ts-ignore\nwindow.DROPINS.showSlots = async (state) => {\n // cache state in session storage\n window.sessionStorage.setItem(\n 'dropin-debugger--show-slots',\n state.toString()\n );\n\n document.body.classList.toggle('dropin-debugger--show-slots', state);\n};\n\nlet log: (...attrs: any) => void = () => {};\n\n// @ts-ignore\nwindow.DROPINS.logSlots = async (state) => {\n // cache state in session storage\n window.sessionStorage.setItem('dropin-debugger--log-slots', state.toString());\n\n log = state ? (...attrs) => console.log(...attrs) : () => {};\n};\n\n/** Persistent Settings */\n\n// @ts-ignore\nwindow.DROPINS.showSlots(\n window.sessionStorage.getItem('dropin-debugger--show-slots') === 'true'\n);\n\n// @ts-ignore\nwindow.DROPINS.logSlots(\n window.sessionStorage.getItem('dropin-debugger--log-slots') === 'true'\n);\n","/**\n * Get cookie\n * @param {string} cookieName - The name of the cookie to get\n * @returns {string} - The value of the cookie\n */\nexport function getCookie(cookieName: string): string | undefined {\n const cookies = document.cookie.split(';');\n let foundValue;\n\n cookies.forEach((cookie) => {\n const [name, value] = cookie.trim().split('=');\n if (name === cookieName) {\n foundValue = decodeURIComponent(value);\n }\n });\n\n return foundValue;\n}\n"],"names":["getFormValues","form","formData","getFormErrors","data","result","key","field","mergeOptions","target","source","options","destination","item","index","deepmerge","merge","prev","next","toLanguageTag","locale","useSlot","name","context","callback","children","render","contentTag","slotsQueue","useContext","SlotQueueContext","elementRef","useRef","status","methodsRef","props","_setProps","useState","_state","setState","state","useMemo","value","intl","IntlContext","_next","renderNode","cloneElement","n","_registerMethod","useCallback","cb","_htmlElementToVNode","elem","createElement","refElem","element","_a","log","_b","parent","vnode","handleLifeCycleRender","method","handleLifeCycleInit","error","useEffect","processChildren","isReady","Children","child","isValidElement","Slot","lazy","slot","slotTag","slotProps","attrs","getCookie","cookieName","cookies","foundValue","cookie"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name": "@dropins/tools", "version": "1.6.0-
|
|
1
|
+
{"name": "@dropins/tools", "version": "1.6.0-alpha24", "license": "SEE LICENSE IN LICENSE.md"}
|
|
@@ -4,7 +4,8 @@ export interface PaginationProps {
|
|
|
4
4
|
className?: string;
|
|
5
5
|
currentPage?: number;
|
|
6
6
|
totalPages?: number;
|
|
7
|
-
onChange?: (currentPage: number) => void;
|
|
7
|
+
onChange?: (currentPage: number, e?: Event) => void;
|
|
8
|
+
routePage?: (page: number) => string;
|
|
8
9
|
}
|
|
9
10
|
export type PaginationList = {
|
|
10
11
|
page: number | string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { FunctionComponent, JSX } from 'preact';
|
|
2
|
+
|
|
3
|
+
type BaseProps = {
|
|
4
|
+
href?: string;
|
|
5
|
+
type?: 'button';
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export type PaginationButtonProps = BaseProps & (Omit<JSX.HTMLAttributes<HTMLAnchorElement>, 'type'> | Omit<JSX.HTMLAttributes<HTMLButtonElement>, 'href'>);
|
|
9
|
+
export declare const PaginationButton: FunctionComponent<PaginationButtonProps>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=PaginationButton.d.ts.map
|
|
@@ -1,44 +1,49 @@
|
|
|
1
1
|
export { default as Add } from './Add.svg';
|
|
2
|
+
export { default as AddressBook } from './AddressBook.svg';
|
|
2
3
|
export { default as Bulk } from './Bulk.svg';
|
|
3
4
|
export { default as Burger } from './Burger.svg';
|
|
5
|
+
export { default as Business } from './Business.svg';
|
|
6
|
+
export { default as Card } from './Card.svg';
|
|
4
7
|
export { default as Cart } from './Cart.svg';
|
|
5
8
|
export { default as Check } from './Check.svg';
|
|
9
|
+
export { default as CheckWithCircle } from './CheckWithCircle.svg';
|
|
6
10
|
export { default as ChevronDown } from './ChevronDown.svg';
|
|
7
|
-
export { default as ChevronUp } from './ChevronUp.svg';
|
|
8
11
|
export { default as ChevronRight } from './ChevronRight.svg';
|
|
12
|
+
export { default as ChevronUp } from './ChevronUp.svg';
|
|
9
13
|
export { default as Close } from './Close.svg';
|
|
14
|
+
export { default as Coupon } from './Coupon.svg';
|
|
15
|
+
export { default as Date } from './Date.svg';
|
|
16
|
+
export { default as Delivery } from './Delivery.svg';
|
|
17
|
+
export { default as Edit } from './Edit.svg';
|
|
18
|
+
export { default as EmptyBox } from './EmptyBox.svg';
|
|
19
|
+
export { default as Eye } from './Eye.svg';
|
|
20
|
+
export { default as EyeClose } from './EyeClose.svg';
|
|
21
|
+
export { default as Gift } from './Gift.svg';
|
|
22
|
+
export { default as GiftCard } from './GiftCard.svg';
|
|
10
23
|
export { default as Heart } from './Heart.svg';
|
|
24
|
+
export { default as HeartFilled } from './HeartFilled.svg';
|
|
25
|
+
export { default as InfoFilled } from './InfoFilled.svg';
|
|
26
|
+
export { default as List } from './List.svg';
|
|
27
|
+
export { default as Locker } from './Locker.svg';
|
|
11
28
|
export { default as Minus } from './Minus.svg';
|
|
29
|
+
export { default as Order } from './Order.svg';
|
|
30
|
+
export { default as OrderError } from './OrderError.svg';
|
|
31
|
+
export { default as OrderSuccess } from './OrderSuccess.svg';
|
|
32
|
+
export { default as PaymentError } from './PaymentError.svg';
|
|
12
33
|
export { default as Placeholder } from './Placeholder.svg';
|
|
13
34
|
export { default as PlaceholderFilled } from './PlaceholderFilled.svg';
|
|
35
|
+
export { default as Quote } from './Quote.svg';
|
|
14
36
|
export { default as Search } from './Search.svg';
|
|
15
37
|
export { default as SearchFilled } from './SearchFilled.svg';
|
|
16
38
|
export { default as Sort } from './Sort.svg';
|
|
17
39
|
export { default as Star } from './Star.svg';
|
|
18
|
-
export { default as
|
|
40
|
+
export { default as Structure } from './Structure.svg';
|
|
41
|
+
export { default as Team } from './Team.svg';
|
|
42
|
+
export { default as Trash } from './Trash.svg';
|
|
19
43
|
export { default as User } from './User.svg';
|
|
20
|
-
export { default as
|
|
21
|
-
export { default as Locker } from './Locker.svg';
|
|
44
|
+
export { default as View } from './View.svg';
|
|
22
45
|
export { default as Wallet } from './Wallet.svg';
|
|
23
|
-
export { default as
|
|
24
|
-
export { default as Order } from './Order.svg';
|
|
25
|
-
export { default as Delivery } from './Delivery.svg';
|
|
26
|
-
export { default as OrderError } from './OrderError.svg';
|
|
27
|
-
export { default as OrderSuccess } from './OrderSuccess.svg';
|
|
28
|
-
export { default as PaymentError } from './PaymentError.svg';
|
|
29
|
-
export { default as CheckWithCircle } from './CheckWithCircle.svg';
|
|
30
|
-
export { default as WarningWithCircle } from './WarningWithCircle.svg';
|
|
46
|
+
export { default as Warning } from './Warning.svg';
|
|
31
47
|
export { default as WarningFilled } from './WarningFilled.svg';
|
|
32
|
-
export { default as
|
|
33
|
-
export { default as HeartFilled } from './HeartFilled.svg';
|
|
34
|
-
export { default as Trash } from './Trash.svg';
|
|
35
|
-
export { default as Eye } from './Eye.svg';
|
|
36
|
-
export { default as EyeClose } from './EyeClose.svg';
|
|
37
|
-
export { default as Date } from './Date.svg';
|
|
38
|
-
export { default as AddressBook } from './AddressBook.svg';
|
|
39
|
-
export { default as EmptyBox } from './EmptyBox.svg';
|
|
40
|
-
export { default as Coupon } from './Coupon.svg';
|
|
41
|
-
export { default as Gift } from './Gift.svg';
|
|
42
|
-
export { default as GiftCard } from './GiftCard.svg';
|
|
43
|
-
export { default as Edit } from './Edit.svg';
|
|
48
|
+
export { default as WarningWithCircle } from './WarningWithCircle.svg';
|
|
44
49
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/********************************************************************
|
|
2
|
+
* Copyright 2025 Adobe
|
|
3
|
+
* All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* NOTICE: Adobe permits you to use, modify, and distribute this
|
|
6
|
+
* file in accordance with the terms of the Adobe license agreement
|
|
7
|
+
* accompanying it.
|
|
8
|
+
*******************************************************************/
|
|
9
|
+
export interface PriceFormatterOptions {
|
|
10
|
+
currency?: string | null;
|
|
11
|
+
locale?: string;
|
|
12
|
+
formatOptions?: Intl.NumberFormatOptions;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Determines the effective locale to use for price formatting
|
|
16
|
+
* Priority: prop locale > global locale > browser locale > default 'en-US'
|
|
17
|
+
*/
|
|
18
|
+
export declare function getEffectiveLocale(locale?: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Gets an Intl.NumberFormat instance for price formatting
|
|
21
|
+
* Uses getEffectiveLocale internally to determine the best locale
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* // Single price formatting
|
|
25
|
+
* const formatter = getPriceFormatter({ currency: 'USD', locale: 'en-US' });
|
|
26
|
+
* const price = formatter.format(10.99); // "$10.99"
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* // Bulk price formatting (more efficient)
|
|
30
|
+
* const formatter = getPriceFormatter({ currency: 'EUR', locale: 'fr-FR' });
|
|
31
|
+
* const prices = [10.99, 25.50, 99.99].map(amount => formatter.format(amount));
|
|
32
|
+
*/
|
|
33
|
+
export declare function getPriceFormatter(options?: PriceFormatterOptions): Intl.NumberFormat;
|
|
34
|
+
//# sourceMappingURL=get-price-formatter.d.ts.map
|
|
@@ -32,15 +32,20 @@ export type AfterHook<T = any> = (requestInit: RequestInit, response: {
|
|
|
32
32
|
data: T;
|
|
33
33
|
};
|
|
34
34
|
declare class FetchGraphQLMesh {
|
|
35
|
-
_endpoint?: string;
|
|
36
|
-
get endpoint(): string | undefined;
|
|
37
|
-
get fetchGraphQlHeaders(): Header;
|
|
35
|
+
protected _endpoint?: string;
|
|
38
36
|
_fetchGraphQlHeaders: Header;
|
|
39
37
|
_beforeHooks: BeforeHook[];
|
|
40
38
|
_afterHooks: AfterHook[];
|
|
39
|
+
get endpoint(): string | undefined;
|
|
40
|
+
get fetchGraphQlHeaders(): Header;
|
|
41
41
|
/**
|
|
42
42
|
* Sets the GraphQL endpoint.
|
|
43
|
-
* @param endpoint - The GraphQL endpoint.
|
|
43
|
+
* @param endpoint - The GraphQL endpoint URL string.
|
|
44
|
+
* @example
|
|
45
|
+
* ```js
|
|
46
|
+
* // Set endpoint as string
|
|
47
|
+
* instance.setEndpoint('https://api.example.com/graphql');
|
|
48
|
+
* ```
|
|
44
49
|
*/
|
|
45
50
|
setEndpoint(endpoint: string): void;
|
|
46
51
|
/**
|
|
@@ -106,6 +111,16 @@ declare class FetchGraphQLMesh {
|
|
|
106
111
|
* ```
|
|
107
112
|
*/
|
|
108
113
|
addAfterHook(hook: AfterHook): void;
|
|
114
|
+
/**
|
|
115
|
+
* Collects all before hooks. Can be overridden by subclasses for inheritance.
|
|
116
|
+
* @protected
|
|
117
|
+
*/
|
|
118
|
+
protected _collectBeforeHooks(): BeforeHook[];
|
|
119
|
+
/**
|
|
120
|
+
* Collects all after hooks. Can be overridden by subclasses for inheritance.
|
|
121
|
+
* @protected
|
|
122
|
+
*/
|
|
123
|
+
protected _collectAfterHooks(): AfterHook[];
|
|
109
124
|
/**
|
|
110
125
|
* Fetches GraphQL data.
|
|
111
126
|
* @param query - The GraphQL query.
|
|
@@ -143,14 +158,75 @@ declare class FetchGraphQLMesh {
|
|
|
143
158
|
}
|
|
144
159
|
/**
|
|
145
160
|
* `FetchGraphQL` is a class that extends `FetchGraphQLMesh`.
|
|
146
|
-
* It provides methods to get the GraphQL endpoint and headers.
|
|
161
|
+
* It provides methods to get the GraphQL endpoint and headers with support for inheritance.
|
|
147
162
|
*
|
|
148
163
|
* @class
|
|
149
164
|
*
|
|
150
165
|
*/
|
|
151
166
|
export declare class FetchGraphQL extends FetchGraphQLMesh {
|
|
167
|
+
private _mode;
|
|
168
|
+
private _source?;
|
|
152
169
|
get endpoint(): string | undefined;
|
|
153
170
|
get fetchGraphQlHeaders(): Header;
|
|
171
|
+
/**
|
|
172
|
+
* Sets the GraphQL endpoint or links to another FetchGraphQL instance.
|
|
173
|
+
* @param endpoint - The GraphQL endpoint URL string, or a FetchGraphQL instance to link to.
|
|
174
|
+
* @example
|
|
175
|
+
* ```js
|
|
176
|
+
* // Set endpoint as string
|
|
177
|
+
* instance.setEndpoint('https://api.example.com/graphql');
|
|
178
|
+
*
|
|
179
|
+
* // Link to another instance
|
|
180
|
+
* const parent = new FetchGraphQL();
|
|
181
|
+
* parent.setEndpoint('https://api.example.com/graphql');
|
|
182
|
+
*
|
|
183
|
+
* const child = new FetchGraphQL();
|
|
184
|
+
* child.setEndpoint(parent); // Links to parent, shares endpoint, headers, and hooks
|
|
185
|
+
* ```
|
|
186
|
+
*/
|
|
187
|
+
setEndpoint(endpoint: string | FetchGraphQL): void;
|
|
188
|
+
/**
|
|
189
|
+
* Sets a GraphQL header. When linked to another instance, this sets the header on the linked instance.
|
|
190
|
+
* @param key - The key of the header.
|
|
191
|
+
* @param value - The value of the header.
|
|
192
|
+
*/
|
|
193
|
+
setFetchGraphQlHeader(key: string, value: string | null): void;
|
|
194
|
+
/**
|
|
195
|
+
* Sets the GraphQL headers. When linked to another instance, this sets the headers on the linked instance.
|
|
196
|
+
* @param header - The header object or a function that returns a header object.
|
|
197
|
+
*/
|
|
198
|
+
setFetchGraphQlHeaders(header: Header | ((prev: Header) => Header)): void;
|
|
199
|
+
/**
|
|
200
|
+
* Removes a specific GraphQL header. When linked to another instance, this removes the header from the linked instance.
|
|
201
|
+
* @param key - The key of the header.
|
|
202
|
+
*/
|
|
203
|
+
removeFetchGraphQlHeader(key: string): void;
|
|
204
|
+
/**
|
|
205
|
+
* Gets the value of a specific GraphQL header. When linked to another instance, this gets the header from the linked instance.
|
|
206
|
+
* @param key - The key of the header.
|
|
207
|
+
* @returns The value of the header, or undefined if not found.
|
|
208
|
+
*/
|
|
209
|
+
getFetchGraphQlHeader(key: string): string | null | undefined;
|
|
210
|
+
/**
|
|
211
|
+
* Adds a before hook. When linked to another instance, this adds the hook to the linked instance.
|
|
212
|
+
* @param hook - The hook function.
|
|
213
|
+
*/
|
|
214
|
+
addBeforeHook(hook: BeforeHook): void;
|
|
215
|
+
/**
|
|
216
|
+
* Adds an after hook. When linked to another instance, this adds the hook to the linked instance.
|
|
217
|
+
* @param hook - The hook function.
|
|
218
|
+
*/
|
|
219
|
+
addAfterHook(hook: AfterHook): void;
|
|
220
|
+
/**
|
|
221
|
+
* Collects all before hooks. When linked, delegates to the linked instance.
|
|
222
|
+
* @protected
|
|
223
|
+
*/
|
|
224
|
+
protected _collectBeforeHooks(): BeforeHook[];
|
|
225
|
+
/**
|
|
226
|
+
* Collects all after hooks. When linked, delegates to the linked instance.
|
|
227
|
+
* @protected
|
|
228
|
+
*/
|
|
229
|
+
protected _collectAfterHooks(): AfterHook[];
|
|
154
230
|
}
|
|
155
231
|
/**
|
|
156
232
|
* Exports several methods from the `mesh` object.
|
|
@@ -162,6 +238,8 @@ export declare class FetchGraphQL extends FetchGraphQLMesh {
|
|
|
162
238
|
* @property {Function} removeFetchGraphQlHeader - Removes a specific GraphQL header.
|
|
163
239
|
* @property {Function} fetchGraphQl - Fetches GraphQL data.
|
|
164
240
|
* @property {Function} getConfig - Gets the configuration.
|
|
241
|
+
* @property {Function} addBeforeHook - Adds a hook executed before the GraphQL call.
|
|
242
|
+
* @property {Function} addAfterHook - Adds a hook executed after the GraphQL call.
|
|
165
243
|
*/
|
|
166
244
|
export declare const setEndpoint: (endpoint: string) => void, setFetchGraphQlHeaders: (header: Header | ((prev: Header) => Header)) => void, setFetchGraphQlHeader: (key: string, value: string | null) => void, getFetchGraphQlHeader: (key: string) => string | null | undefined, removeFetchGraphQlHeader: (key: string) => void, fetchGraphQl: <T = any>(query: string, options?: FetchOptions) => Promise<{
|
|
167
245
|
errors?: FetchQueryError | undefined;
|
package/chunks/deviceUtils.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/*! Copyright 2025 Adobe
|
|
2
|
-
All Rights Reserved. */
|
|
3
|
-
const s=(e,o)=>{let t;return function(...n){clearTimeout(t),t=setTimeout(()=>e.apply(this,n),o)}},i=e=>typeof e=="number",c=()=>{const e=navigator.userAgent.toLowerCase(),o=/ipad|iphone|ipod/.test(e),t=e.includes("mac")&&"ontouchend"in document;return o||t};export{c as a,s as d,i};
|
|
4
|
-
//# sourceMappingURL=deviceUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deviceUtils.js","sources":["/@dropins/tools/src/lib/debounce.ts","/@dropins/tools/src/lib/is-number.ts","/@dropins/tools/src/lib/deviceUtils.ts"],"sourcesContent":["/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const debounce = (fn: Function, ms: number) => {\n let timeoutId: ReturnType<typeof setTimeout>;\n return function (this: any, ...args: any[]) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn.apply(this, args), ms);\n };\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const isNumber = (value: number | string): value is number => {\n return typeof value === 'number';\n};\n","/********************************************************************\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n\nexport const isIOSMobileDevice = () => {\n const userAgent = navigator.userAgent.toLowerCase();\n const isIOS = /ipad|iphone|ipod/.test(userAgent);\n const isMacWithTouch = userAgent.includes('mac') && 'ontouchend' in document;\n\n return isIOS || isMacWithTouch;\n};\n"],"names":["debounce","fn","ms","timeoutId","args","isNumber","value","isIOSMobileDevice","userAgent","isIOS","isMacWithTouch"],"mappings":"AASa,MAAAA,EAAW,CAACC,EAAcC,IAAe,CAChD,IAAAC,EACJ,OAAO,YAAwBC,EAAa,CAC1C,aAAaD,CAAS,EACtBA,EAAY,WAAW,IAAMF,EAAG,MAAM,KAAMG,CAAI,EAAGF,CAAE,CACvD,CACF,ECNaG,EAAYC,GAChB,OAAOA,GAAU,SCDbC,EAAoB,IAAM,CAC/B,MAAAC,EAAY,UAAU,UAAU,YAAY,EAC5CC,EAAQ,mBAAmB,KAAKD,CAAS,EACzCE,EAAiBF,EAAU,SAAS,KAAK,GAAK,eAAgB,SAEpE,OAAOC,GAASC,CAClB"}
|