@dropins/tools 1.5.0-alpha100 → 1.5.0-alpha1000

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/lib/aem/assets.js CHANGED
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{getConfigValue as O}from"./configs.js";import{p as f,I as g}from"../../chunks/Image.js";import"../../chunks/cjs.js";import"../../chunks/get-path-value.js";import"../../preact-jsx-runtime.js";import"../../chunks/icons/Add.js";import"../../i18n.js";import"../../chunks/vcomponent.js";import"../../chunks/image-params-keymap.js";import"../../signals.js";const b=["gif","jpg","jpeg","png","webp"],v=[90,180,270],U=["h","v","hv"];function l(e){let t=e;if(t.startsWith("//")){const{protocol:s}=window.location;t=s+t}return t}function I(e){return U.includes(e)}function L(e){return v.includes(e)}function y(e){return b.includes(e)}function u(e,t,s){if(e!==void 0&&!t(e))throw new Error(s)}function h(){const e=O("commerce-assets-enabled");return e&&(typeof e=="string"&&e.toLowerCase()==="true"||typeof e=="boolean"&&e===!0)}function R(){return{quality:80,format:"webp"}}function A(e){return!!(typeof e=="string"?new URL(l(e)):e).pathname.startsWith("/adobe/assets/urn:aaid:aem")}function w(e,t,s={}){const r={...R(),...s},{format:i,crop:n,...o}=r;u(i,y,"Invalid format"),u(o.flip,I,"Invalid flip"),u(o.rotate,L,"Invalid rotation");const a=Object.fromEntries(Object.entries(o).map(([p,d])=>[p,String(d)])),c=new URLSearchParams(a);if(n){const[p,d]=[n.xOrigin||0,n.yOrigin||0],[P,E]=[n.width||100,n.height||100],S=`${p}p,${d}p,${P}p,${E}p`;c.set("crop",S)}return`${e}/as/${t}.${i}?${c.toString()}`}function q(e,t,s={}){if(!h())return e;const r=new URL(l(e));if(!A(r))return e;const i=r.origin+r.pathname;return w(i,t,s)}function _(e){return t=>{const{wrapper:s,alias:m,params:r,imageProps:i}=e;if(!i.src)throw new Error("An image source is required. Please provide a `src` or `imageProps.src`.");const n=s??document.createElement("div"),o=w(i.src,m,r),a={width:r.width,height:r.height,crop:void 0,fit:void 0,auto:void 0},c={...i,width:r.width,height:r.height,src:o,params:a};f.render(g,c)(n),t.replaceWith(n)}}function x(e,t){function s(){const i=t.wrapper??document.createElement("div"),{imageProps:n,params:o}=t,a={...n,width:o.width,height:o.height};f.render(g,a)(i),e.replaceWith(i)}if(!h()){s();return}if(!t.imageProps.src)throw new Error("An image source is required. Please provide a `src` or `imageProps.src`.");const r=new URL(l(t.imageProps.src));if(!A(r)){s();return}_(t)(e)}export{w as generateAemAssetsOptimizedUrl,R as getDefaultAemAssetsOptimizationParams,h as isAemAssetsEnabled,A as isAemAssetsUrl,_ as makeAemAssetsImageSlot,q as tryGenerateAemAssetsOptimizedUrl,x as tryRenderAemAssetsImage};
3
+ import{getConfigValue as O}from"./configs.js";import{p as f,I as g}from"../../chunks/Image.js";import"../../chunks/get-path-value.js";import"../../chunks/cjs.js";import"../../preact-jsx-runtime.js";import"../../chunks/icons/Add.js";import"../../i18n.js";import"../../chunks/vcomponent.js";import"../../chunks/image-params-keymap.js";import"../../signals.js";const b=["gif","jpg","jpeg","png","webp"],v=[90,180,270],U=["h","v","hv"];function l(e){let t=e;if(t.startsWith("//")){const{protocol:s}=window.location;t=s+t}return t}function I(e){return U.includes(e)}function L(e){return v.includes(e)}function y(e){return b.includes(e)}function u(e,t,s){if(e!==void 0&&!t(e))throw new Error(s)}function h(){const e=O("commerce-assets-enabled");return e&&(typeof e=="string"&&e.toLowerCase()==="true"||typeof e=="boolean"&&e===!0)}function R(){return{quality:80,format:"webp"}}function A(e){return!!(typeof e=="string"?new URL(l(e)):e).pathname.startsWith("/adobe/assets/urn:aaid:aem")}function w(e,t,s={}){const r={...R(),...s},{format:i,crop:n,...o}=r;u(i,y,"Invalid format"),u(o.flip,I,"Invalid flip"),u(o.rotate,L,"Invalid rotation");const a=Object.fromEntries(Object.entries(o).map(([p,d])=>[p,String(d)])),c=new URLSearchParams(a);if(n){const[p,d]=[n.xOrigin||0,n.yOrigin||0],[P,E]=[n.width||100,n.height||100],S=`${p}p,${d}p,${P}p,${E}p`;c.set("crop",S)}return`${e}/as/${t}.${i}?${c.toString()}`}function q(e,t,s={}){if(!h())return e;const r=new URL(l(e));if(!A(r))return e;const i=r.origin+r.pathname;return w(i,t,s)}function _(e){return t=>{const{wrapper:s,alias:m,params:r,imageProps:i}=e;if(!i.src)throw new Error("An image source is required. Please provide a `src` or `imageProps.src`.");const n=s??document.createElement("div"),o=w(i.src,m,r),a={width:r.width,height:r.height,crop:void 0,fit:void 0,auto:void 0},c={...i,width:r.width,height:r.height,src:o,params:a};f.render(g,c)(n),t.replaceWith(n)}}function x(e,t){function s(){const i=t.wrapper??document.createElement("div"),{imageProps:n,params:o}=t,a={...n,width:o.width,height:o.height};f.render(g,a)(i),e.replaceWith(i)}if(!h()){s();return}if(!t.imageProps.src)throw new Error("An image source is required. Please provide a `src` or `imageProps.src`.");const r=new URL(l(t.imageProps.src));if(!A(r)){s();return}_(t)(e)}export{w as generateAemAssetsOptimizedUrl,R as getDefaultAemAssetsOptimizationParams,h as isAemAssetsEnabled,A as isAemAssetsUrl,_ as makeAemAssetsImageSlot,q as tryGenerateAemAssetsOptimizedUrl,x as tryRenderAemAssetsImage};
4
4
  //# sourceMappingURL=assets.js.map
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{d as o}from"../../chunks/cjs.js";import{g as c}from"../../chunks/get-path-value.js";let i=null,u=null,l=null;function w(){i=null,u=null,l=null}function s(t=i,e){return t?Object.keys(t==null?void 0:t.public).sort((n,r)=>{const f=n.split("/").filter(Boolean).length;return r.split("/").filter(Boolean).length-f}).find(n=>{var r;return window.location.pathname===n||(((r=e==null?void 0:e.match)==null?void 0:r.call(e,n))??window.location.pathname.startsWith(n))})??"/":(console.warn("No config found. Please call initializeConfig() first."),"/")}function g(){return i?Object.keys(i.public).filter(t=>t!=="default"):(console.warn("No config found. Please call initializeConfig() first."),[])}function z(){return g().length>=1}function P(t){if(!l)throw new Error("Configuration not initialized. Call initializeConfig() first.");const e=l.headers??{};return{...e.all??{},...e[t]??{}}}function h(t,e){var n;const a=(n=t.public)==null?void 0:n.default;return e==="/"||!t.public[e]?a:o(a,t.public[e])}function p(t,e){return i=t,u=s(i,{match:e==null?void 0:e.match}),l=h(i,u),l}function v(t){if(!l)throw new Error("Configuration not initialized. Call initializeConfig() first.");return c(l,t)}export{v as getConfigValue,P as getHeaders,g as getListOfRootPaths,s as getRootPath,p as initializeConfig,z as isMultistore,w as resetConfig};
3
+ import{g as u}from"../../chunks/get-path-value.js";import{d as f}from"../../chunks/cjs.js";let e=null,r=null,l=null;function C(){e=null,r=null,l=null}function s(t=e){return t?Object.keys(t==null?void 0:t.public).sort((i,o)=>{const a=i.split("/").filter(Boolean).length;return o.split("/").filter(Boolean).length-a}).find(i=>window.location.pathname===i||window.location.pathname.startsWith(i))??"/":(console.warn("No config found. Please call initializeConfig() first."),"/")}function c(){return e?Object.keys(e.public).filter(t=>t!=="default"):(console.warn("No config found. Please call initializeConfig() first."),[])}function m(){return c().length>=1}function w(t){if(!l)throw new Error("Configuration not initialized. Call initializeConfig() first.");const n=l.headers??{};return{...n.all??{},...n[t]??{}}}function g(t,n){var o;const i=(o=t.public)==null?void 0:o.default;return n==="/"||!t.public[n]?i:f(i,t.public[n])}function z(t){return e=t,r=s(e),l=g(e,r),l}function P(t){if(!l)throw new Error("Configuration not initialized. Call initializeConfig() first.");return u(l,t)}export{P as getConfigValue,w as getHeaders,c as getListOfRootPaths,s as getRootPath,z as initializeConfig,m as isMultistore,C as resetConfig};
4
4
  //# sourceMappingURL=configs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configs.js","sources":["/@dropins/tools/src/lib/aem/configs.ts"],"sourcesContent":["import { deepmerge } from '../deepmerge';\nimport { getPathValue } from '../get-path-value';\n\ninterface ConfigHeaders {\n all?: Record<string, string>;\n [key: string]: Record<string, string> | undefined;\n}\n\ninterface ConfigPublic {\n default: ConfigRoot;\n [key: string]: ConfigRoot;\n}\n\ninterface ConfigRoot {\n headers?: ConfigHeaders;\n [key: string]: any;\n}\n\ninterface Config {\n public: ConfigPublic;\n [key: string]: any;\n}\n\n// Private state\nlet config: Config | null = null;\nlet rootPath: string | null = null;\nlet rootConfig: ConfigRoot | null = null;\n\n/**\n * Reset the config state\n */\nfunction resetConfig() {\n config = null;\n rootPath = null;\n rootConfig = null;\n}\n\n/**\n * Get root path\n * @param {Object} [configObj=config] - The config object.\n * @returns {string} - The root path.\n */\nfunction getRootPath(configObj: Config | null = config, options: { match?: (key: string) => boolean }): string {\n if (!configObj) {\n console.warn('No config found. Please call initializeConfig() first.');\n return '/';\n }\n\n const value = Object.keys(configObj?.public)\n // Sort by number of non-empty segments to find the deepest path\n .sort((a, b) => {\n const aSegments = a.split('/').filter(Boolean).length;\n const bSegments = b.split('/').filter(Boolean).length;\n return bSegments - aSegments;\n })\n .find(\n (key) =>\n window.location.pathname === key ||\n (options?.match?.(key) ?? window.location.pathname.startsWith(key))\n );\n\n return value ?? '/';\n}\n\n/**\n * Get list of root paths from public config\n * @returns {Array} - The list of root paths.\n */\nfunction getListOfRootPaths(): string[] {\n if (!config) {\n console.warn('No config found. Please call initializeConfig() first.');\n return [];\n }\n\n return Object.keys(config.public).filter((root) => root !== 'default');\n}\n\n/**\n * Checks if the public config contains more than \"default\"\n * @returns {boolean} - true if public config contains more than \"default\"\n */\nfunction isMultistore(): boolean {\n return getListOfRootPaths().length >= 1;\n}\n\n/**\n * Retrieves headers from config entries like commerce.headers.pdp.my-header, etc and\n * returns as object of all headers like { my-header: value, ... }\n * @param {string} scope - The scope of the headers to retrieve.\n * @returns {Object} - The headers.\n */\nfunction getHeaders(scope: string): Record<string, string> {\n if (!rootConfig) {\n throw new Error(\n 'Configuration not initialized. Call initializeConfig() first.'\n );\n }\n const headers = rootConfig.headers ?? {};\n return {\n ...(headers.all ?? {}),\n ...(headers[scope] ?? {}),\n };\n}\n\n/**\n * Applies config overrides from metadata.\n *\n * @param {Object} [configObj] - The base config.\n * @param {string} [root] - The root path.\n * @returns {Object} - The config with overrides applied.\n */\nfunction applyConfigOverrides(\n configObj: Config | null,\n root: string | null\n): ConfigRoot {\n const defaultConfig = configObj!.public?.default;\n\n if (root === '/' || !configObj!.public[root as keyof ConfigPublic])\n return defaultConfig;\n\n return deepmerge(\n defaultConfig,\n configObj!.public[root as keyof ConfigPublic]\n );\n}\n\n/**\n * Initializes the configuration system.\n * @param {Object} configObj - The config object.\n * @param {Object} [options] - The options object.\n * @param {Function} [options.match] - The function to match the path to the config.\n * @returns {Object} The initialized root configuration\n */\nfunction initializeConfig(configObj: Config, options?: { match?: (key: string) => boolean }): ConfigRoot {\n config = configObj;\n rootPath = getRootPath(config, { match: options?.match });\n rootConfig = applyConfigOverrides(config, rootPath);\n return rootConfig;\n}\n\n/**\n * Retrieves a configuration value.\n *\n * @param {string} configParam - The configuration parameter to retrieve.\n * @returns {string|undefined} - The value of the configuration parameter, or undefined.\n */\nfunction getConfigValue(configParam: string): any {\n if (!rootConfig) {\n throw new Error(\n 'Configuration not initialized. Call initializeConfig() first.'\n );\n }\n return getPathValue(rootConfig, configParam);\n}\n\nexport {\n initializeConfig,\n getRootPath,\n getListOfRootPaths,\n isMultistore,\n getConfigValue,\n getHeaders,\n resetConfig,\n};\n"],"names":["config","rootPath","rootConfig","resetConfig","getRootPath","configObj","options","a","b","aSegments","key","_a","getListOfRootPaths","root","isMultistore","getHeaders","scope","headers","applyConfigOverrides","defaultConfig","deepmerge","initializeConfig","getConfigValue","configParam","getPathValue"],"mappings":"2FAwBA,IAAIA,EAAwB,KACxBC,EAA0B,KAC1BC,EAAgC,KAKpC,SAASC,GAAc,CACZH,EAAA,KACEC,EAAA,KACEC,EAAA,IACf,CAOA,SAASE,EAAYC,EAA2BL,EAAQM,EAAuD,CAC7G,OAAKD,EAKS,OAAO,KAAKA,GAAA,YAAAA,EAAW,MAAM,EAExC,KAAK,CAACE,EAAGC,IAAM,CACd,MAAMC,EAAYF,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,OAE/C,OADkBC,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,OAC5BC,CACpB,CAAA,EACA,KACEC,GAAA,OACC,cAAO,SAAS,WAAaA,MAC5BC,EAAAL,GAAA,YAAAA,EAAS,QAAT,YAAAK,EAAA,KAAAL,EAAiBI,KAAQ,OAAO,SAAS,SAAS,WAAWA,CAAG,GACrE,GAEc,KAjBd,QAAQ,KAAK,wDAAwD,EAC9D,IAiBX,CAMA,SAASE,GAA+B,CACtC,OAAKZ,EAKE,OAAO,KAAKA,EAAO,MAAM,EAAE,OAAQa,GAASA,IAAS,SAAS,GAJnE,QAAQ,KAAK,wDAAwD,EAC9D,CAAC,EAIZ,CAMA,SAASC,GAAwB,CACxB,OAAAF,EAAA,EAAqB,QAAU,CACxC,CAQA,SAASG,EAAWC,EAAuC,CACzD,GAAI,CAACd,EACH,MAAM,IAAI,MACR,+DACF,EAEI,MAAAe,EAAUf,EAAW,SAAW,CAAC,EAChC,MAAA,CACL,GAAIe,EAAQ,KAAO,CAAC,EACpB,GAAIA,EAAQD,CAAK,GAAK,CAAA,CACxB,CACF,CASA,SAASE,EACPb,EACAQ,EACY,OACN,MAAAM,GAAgBR,EAAAN,EAAW,SAAX,YAAAM,EAAmB,QAEzC,OAAIE,IAAS,KAAO,CAACR,EAAW,OAAOQ,CAA0B,EACxDM,EAEFC,EACLD,EACAd,EAAW,OAAOQ,CAA0B,CAC9C,CACF,CASA,SAASQ,EAAiBhB,EAAmBC,EAA4D,CAC9F,OAAAN,EAAAK,EACTJ,EAAWG,EAAYJ,EAAQ,CAAE,MAAOM,GAAA,YAAAA,EAAS,MAAO,EAC3CJ,EAAAgB,EAAqBlB,EAAQC,CAAQ,EAC3CC,CACT,CAQA,SAASoB,EAAeC,EAA0B,CAChD,GAAI,CAACrB,EACH,MAAM,IAAI,MACR,+DACF,EAEK,OAAAsB,EAAatB,EAAYqB,CAAW,CAC7C"}
1
+ {"version":3,"file":"configs.js","sources":["/@dropins/tools/src/lib/aem/configs.ts"],"sourcesContent":["import { deepmerge } from '../deepmerge';\nimport { getPathValue } from '../get-path-value';\n\ninterface ConfigHeaders {\n all?: Record<string, string>;\n [key: string]: Record<string, string> | undefined;\n}\n\ninterface ConfigPublic {\n default: ConfigRoot;\n [key: string]: ConfigRoot;\n}\n\ninterface ConfigRoot {\n headers?: ConfigHeaders;\n [key: string]: any;\n}\n\ninterface Config {\n public: ConfigPublic;\n [key: string]: any;\n}\n\n// Private state\nlet config: Config | null = null;\nlet rootPath: string | null = null;\nlet rootConfig: ConfigRoot | null = null;\n\n/**\n * Reset the config state\n */\nfunction resetConfig() {\n config = null;\n rootPath = null;\n rootConfig = null;\n}\n\n/**\n * Get root path\n * @param {Object} [configObj=config] - The config object.\n * @returns {string} - The root path.\n */\nfunction getRootPath(configObj: Config | null = config): string {\n if (!configObj) {\n console.warn('No config found. Please call initializeConfig() first.');\n return '/';\n }\n\n const value = Object.keys(configObj?.public)\n // Sort by number of non-empty segments to find the deepest path\n .sort((a, b) => {\n const aSegments = a.split('/').filter(Boolean).length;\n const bSegments = b.split('/').filter(Boolean).length;\n return bSegments - aSegments;\n })\n .find(\n (key) =>\n window.location.pathname === key ||\n window.location.pathname.startsWith(key)\n );\n\n return value ?? '/';\n}\n\n/**\n * Get list of root paths from public config\n * @returns {Array} - The list of root paths.\n */\nfunction getListOfRootPaths(): string[] {\n if (!config) {\n console.warn('No config found. Please call initializeConfig() first.');\n return [];\n }\n\n return Object.keys(config.public).filter((root) => root !== 'default');\n}\n\n/**\n * Checks if the public config contains more than \"default\"\n * @returns {boolean} - true if public config contains more than \"default\"\n */\nfunction isMultistore(): boolean {\n return getListOfRootPaths().length >= 1;\n}\n\n/**\n * Retrieves headers from config entries like commerce.headers.pdp.my-header, etc and\n * returns as object of all headers like { my-header: value, ... }\n * @param {string} scope - The scope of the headers to retrieve.\n * @returns {Object} - The headers.\n */\nfunction getHeaders(scope: string): Record<string, string> {\n if (!rootConfig) {\n throw new Error(\n 'Configuration not initialized. Call initializeConfig() first.'\n );\n }\n const headers = rootConfig.headers ?? {};\n return {\n ...(headers.all ?? {}),\n ...(headers[scope] ?? {}),\n };\n}\n\n/**\n * Applies config overrides from metadata.\n *\n * @param {Object} [configObj] - The base config.\n * @param {string} [root] - The root path.\n * @returns {Object} - The config with overrides applied.\n */\nfunction applyConfigOverrides(\n configObj: Config | null,\n root: string | null\n): ConfigRoot {\n const defaultConfig = configObj!.public?.default;\n\n if (root === '/' || !configObj!.public[root as keyof ConfigPublic])\n return defaultConfig;\n\n return deepmerge(\n defaultConfig,\n configObj!.public[root as keyof ConfigPublic]\n );\n}\n\n/**\n * Initializes the configuration system.\n * @returns {Object} The initialized root configuration\n */\nfunction initializeConfig(configObj: Config): ConfigRoot {\n config = configObj;\n rootPath = getRootPath(config);\n rootConfig = applyConfigOverrides(config, rootPath);\n return rootConfig;\n}\n\n/**\n * Retrieves a configuration value.\n *\n * @param {string} configParam - The configuration parameter to retrieve.\n * @returns {string|undefined} - The value of the configuration parameter, or undefined.\n */\nfunction getConfigValue(configParam: string): any {\n if (!rootConfig) {\n throw new Error(\n 'Configuration not initialized. Call initializeConfig() first.'\n );\n }\n return getPathValue(rootConfig, configParam);\n}\n\nexport {\n initializeConfig,\n getRootPath,\n getListOfRootPaths,\n isMultistore,\n getConfigValue,\n getHeaders,\n resetConfig,\n};\n"],"names":["config","rootPath","rootConfig","resetConfig","getRootPath","configObj","a","b","aSegments","key","getListOfRootPaths","root","isMultistore","getHeaders","scope","headers","applyConfigOverrides","defaultConfig","_a","deepmerge","initializeConfig","getConfigValue","configParam","getPathValue"],"mappings":"2FAwBA,IAAIA,EAAwB,KACxBC,EAA0B,KAC1BC,EAAgC,KAKpC,SAASC,GAAc,CACZH,EAAA,KACEC,EAAA,KACEC,EAAA,IACf,CAOA,SAASE,EAAYC,EAA2BL,EAAgB,CAC9D,OAAKK,EAKS,OAAO,KAAKA,GAAA,YAAAA,EAAW,MAAM,EAExC,KAAK,CAACC,EAAGC,IAAM,CACd,MAAMC,EAAYF,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,OAE/C,OADkBC,EAAE,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,OAC5BC,CACpB,CAAA,EACA,KACEC,GACC,OAAO,SAAS,WAAaA,GAC7B,OAAO,SAAS,SAAS,WAAWA,CAAG,CAC3C,GAEc,KAjBd,QAAQ,KAAK,wDAAwD,EAC9D,IAiBX,CAMA,SAASC,GAA+B,CACtC,OAAKV,EAKE,OAAO,KAAKA,EAAO,MAAM,EAAE,OAAQW,GAASA,IAAS,SAAS,GAJnE,QAAQ,KAAK,wDAAwD,EAC9D,CAAC,EAIZ,CAMA,SAASC,GAAwB,CACxB,OAAAF,EAAA,EAAqB,QAAU,CACxC,CAQA,SAASG,EAAWC,EAAuC,CACzD,GAAI,CAACZ,EACH,MAAM,IAAI,MACR,+DACF,EAEI,MAAAa,EAAUb,EAAW,SAAW,CAAC,EAChC,MAAA,CACL,GAAIa,EAAQ,KAAO,CAAC,EACpB,GAAIA,EAAQD,CAAK,GAAK,CAAA,CACxB,CACF,CASA,SAASE,EACPX,EACAM,EACY,OACN,MAAAM,GAAgBC,EAAAb,EAAW,SAAX,YAAAa,EAAmB,QAEzC,OAAIP,IAAS,KAAO,CAACN,EAAW,OAAOM,CAA0B,EACxDM,EAEFE,EACLF,EACAZ,EAAW,OAAOM,CAA0B,CAC9C,CACF,CAMA,SAASS,EAAiBf,EAA+B,CAC9C,OAAAL,EAAAK,EACTJ,EAAWG,EAAYJ,CAAM,EAChBE,EAAAc,EAAqBhB,EAAQC,CAAQ,EAC3CC,CACT,CAQA,SAASmB,EAAeC,EAA0B,CAChD,GAAI,CAACpB,EACH,MAAM,IAAI,MACR,+DACF,EAEK,OAAAqB,EAAarB,EAAYoB,CAAW,CAC7C"}
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 ee,V as re,c as oe,g as te}from"./chunks/vcomponent.js";import{d as E}from"./chunks/cjs.js";import{d as se,a as ie,i as le}from"./chunks/deviceUtils.js";import{C as ae,I as ce,i as ue}from"./chunks/initializer.js";import{x as R,A as O,h as _,T as L,E as D,q as f,_ as V,y as v}from"./chunks/icons/Add.js";import{IntlContext as k}from"./i18n.js";import{g as pe,s as fe}from"./chunks/image-params-keymap.js";import{g as he,s as me}from"./chunks/locale-config.js";import{g as ye}from"./chunks/get-path-value.js";import"./preact-jsx-runtime.js";import"./signals.js";const U=r=>{const o=new FormData(r);return Object.fromEntries(o)},A=r=>{const o=new FormData(r),s=Object.fromEntries(o);return Object.entries(s).reduce((n,[d])=>{const c=r.elements[d];return c!=null&&c.validationMessage?{...n,[d]:c.validationMessage}:{...n}},{})},F={arrayMerge:(r,o,s)=>{const l=r.slice();return o.forEach((n,d)=>{typeof l[d]>"u"?l[d]=s.cloneUnlessOtherwiseSpecified(n,s):s.isMergeableObject(n)?l[d]=E(r[d],n,s):r.indexOf(n)===-1&&l.push(n)}),l}};function W(r,o){return o?E(r,o,F):r}const H=r=>r.replace("_","-");function q(r,o={},s,l,n,d="div"){const c=R(M),S=O(null),u=O("pending"),w=O([]),[y,P]=_({children:[l]}),[N,$]=_({}),b=L(()=>({get:t=>N[t],set:(t,e)=>{$({...b,[t]:e})}}),[N]),{intl:B}=R(k);o.dictionary=B.dictionary,o._setProps=t=>{P(e=>{const i=typeof t=="function"?t(e):t;if(n){const a=D(n(e),{key:"render"}),h=e.children.findIndex(p=>(p==null?void 0:p.key)==="render");e.children[h]=a}return i})};const g=f(t=>{typeof t=="function"?w.current.push(t):console.warn("Skipped: Invalid _registerMethod",t)},[]);o._registerMethod=g;const m=f(t=>V(d,{"data-slot-html-element":t.tagName.toLowerCase(),ref:e=>{e==null||e.appendChild(t)}},null),[d]);o._htmlElementToVNode=m,o.getSlotElement=f(t=>{var i,a;const e=(i=S.current)==null?void 0:i.querySelector(`[data-slot-key="${t}"]`);if(I(`🟦 "${r}" Slot getSlotElement: ${t}`,(a=S.current)==null?void 0:a.cloneNode(!0),e==null?void 0:e.cloneNode(!0)),!!e)return{appendChild:h=>{e.appendChild(h)},prependChild:h=>{e.insertBefore(h,e.firstChild)},appendSibling:h=>{const p=e.parentNode;p==null||p.insertBefore(h,e.nextSibling)},prependSibling:h=>{const p=e.parentNode;p==null||p.insertBefore(h,e)}}},[r]),o.onRender=f(t=>{w.current.push(t)},[]),o.onChange=o.onRender,o.replaceWith=f(t=>{g(e=>{const i=m(t);e._setProps({children:[i]})})},[m,g]),o.appendChild=f(t=>{g(e=>{const i=m(t);e._setProps(a=>({...a,children:[...a.children,i]}))})},[m,g]),o.prependChild=f(t=>{g(e=>{const i=m(t);e._setProps(a=>({...a,children:[i,...a.children]}))})},[m,g]),o.appendSibling=f(t=>{g(()=>{var i,a;const e=(i=S.current)==null?void 0:i.parentNode;e==null||e.insertBefore(t,((a=S.current)==null?void 0:a.nextSibling)??null)})},[g]),o.prependSibling=f(t=>{g(()=>{var i;const e=(i=S.current)==null?void 0:i.parentNode;e==null||e.insertBefore(t,S.current)})},[g]);const C=f(async()=>{if(u.current==="loading")return;u.current="loading",I(`🟨 "${r}" Slot Rendered`);const t=n?D(n(y),{key:"render"}):null;P({children:[t??l]}),w.current.forEach(e=>{e(o,b)}),u.current="ready"},[l,o,r,y,n,b]),j=f(async()=>{if(s)try{u.current="loading",I(`🟩 "${r}" Slot Initialized`),await s(o,S.current)}catch(t){console.error(`Error in "${s.name}" Slot callback`,t)}finally{u.current="ready",await C()}},[s,o,C,r]);return v(()=>{j().finally(()=>{c&&(c.value.delete(r),c.value=new Set(c.value))})},[]),v(()=>{C()},[JSON.stringify(o),JSON.stringify(N)]),[S,y]}function X({name:r,context:o,slot:s,children:l,render:n,slotTag:d="div",contentTag:c="div",...S}){const u=R(M),[w,y]=q(r,o,s,l,n,c);return L(()=>{if(!r)return console.warn('Slot "name" is required');u&&(u.value.add(r),u.value=new Set(u.value))},[r,u]),V(d,{...S,ref:w,"data-slot":r},y.children)}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 I=()=>{};window.DROPINS.logSlots=async r=>{window.sessionStorage.setItem("dropin-debugger--log-slots",r.toString()),I=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 Y(r){const o=document.cookie.split(";");let s;return o.forEach(l=>{const[n,d]=l.trim().split("=");n===r&&(s=decodeURIComponent(d))}),s}export{ae as Config,ce as Initializer,ee as Render,X as Slot,M as SlotQueueContext,re as VComponent,oe as classes,se as debounce,E as deepmerge,te as generateSrcset,Y as getCookie,A as getFormErrors,U as getFormValues,he as getGlobalLocale,pe as getImageParamsKeyMap,ye as getPathValue,ue as initializers,ie as isIOSMobileDevice,le as isNumber,W as merge,me as setGlobalLocale,fe as setImageParamsKeyMap,H as toLanguageTag,q as useSlot};
3
+ import{S as M}from"./chunks/vcomponent.js";import{R as ee,V as re,c as oe,g as te}from"./chunks/vcomponent.js";import{d as E}from"./chunks/cjs.js";import{d as se,a as ie,i as le}from"./chunks/deviceUtils.js";import{C as ae,I as ce,i as ue}from"./chunks/initializer.js";import{IntlContext as k}from"./i18n.js";import{x as P,A as R,h as _,T as L,E as v,q as f,_ as V,y as D}from"./chunks/icons/Add.js";import{g as fe,s as pe}from"./chunks/image-params-keymap.js";import{g as Se,s as me}from"./chunks/locale-config.js";import{g as ye}from"./chunks/get-path-value.js";import"./preact-jsx-runtime.js";import"./signals.js";const U=r=>{const o=new FormData(r);return Object.fromEntries(o)},A=r=>{const o=new FormData(r),s=Object.fromEntries(o);return Object.entries(s).reduce((n,[d])=>{const c=r.elements[d];return c!=null&&c.validationMessage?{...n,[d]:c.validationMessage}:{...n}},{})},F={arrayMerge:(r,o,s)=>{const l=r.slice();return o.forEach((n,d)=>{typeof l[d]>"u"?l[d]=s.cloneUnlessOtherwiseSpecified(n,s):s.isMergeableObject(n)?l[d]=E(r[d],n,s):r.indexOf(n)===-1&&l.push(n)}),l}};function W(r,o){return o?E(r,o,F):r}const H=r=>r.replace("_","-");function q(r,o={},s,l,n,d="div"){const c=P(M),p=R(null),m=R("pending"),h=R([]),[y,I]=_({children:[l]}),[b,$]=_({}),C=L(()=>({get:t=>b[t],set:(t,e)=>{$({...C,[t]:e})}}),[b]),{intl:B}=P(k);o.dictionary=B.dictionary,o._setProps=t=>{I(e=>{const i=typeof t=="function"?t(e):t;if(n){const a=v(n(e),{key:"render"}),S=e.children.findIndex(g=>(g==null?void 0:g.key)==="render");e.children[S]=a}return i})};const u=f(t=>{typeof t=="function"?h.current.push(t):console.warn("Skipped: Invalid _registerMethod",t)},[]);o._registerMethod=u;const w=f(t=>V(d,{"data-slot-html-element":t.tagName.toLowerCase(),ref:e=>{e==null||e.appendChild(t)}},null),[d]);o._htmlElementToVNode=w,o.getSlotElement=f(t=>{var i,a;const e=(i=p.current)==null?void 0:i.querySelector(`[data-slot-key="${t}"]`);if(N(`🟦 "${r}" Slot getSlotElement: ${t}`,(a=p.current)==null?void 0:a.cloneNode(!0),e==null?void 0:e.cloneNode(!0)),!!e)return{appendChild:S=>{e.appendChild(S)},prependChild:S=>{e.insertBefore(S,e.firstChild)},appendSibling:S=>{const g=e.parentNode;g==null||g.insertBefore(S,e.nextSibling)},prependSibling:S=>{const g=e.parentNode;g==null||g.insertBefore(S,e)}}},[r]),o.onRender=f(t=>{h.current.push(t)},[]),o.onChange=o.onRender,o.replaceWith=f(t=>{u(e=>{const i=w(t);e._setProps({children:[i]})})},[w,u]),o.appendChild=f(t=>{u(e=>{const i=w(t);e._setProps(a=>({...a,children:[...a.children,i]}))})},[w,u]),o.prependChild=f(t=>{u(e=>{const i=w(t);e._setProps(a=>({...a,children:[i,...a.children]}))})},[w,u]),o.appendSibling=f(t=>{u(()=>{var i,a;const e=(i=p.current)==null?void 0:i.parentNode;e==null||e.insertBefore(t,((a=p.current)==null?void 0:a.nextSibling)??null)})},[u]),o.prependSibling=f(t=>{u(()=>{var i;const e=(i=p.current)==null?void 0:i.parentNode;e==null||e.insertBefore(t,p.current)})},[u]);const O=f(async()=>{if(m.current==="loading")return;m.current="loading",N(`🟨 "${r}" Slot Rendered`);const t=n?v(n(y),{key:"render"}):null;I({children:[t??l]}),h.current.forEach(e=>{e(o,C)}),m.current="ready"},[l,o,r,y,n,C]),j=f(async()=>{if(s)try{m.current="loading",N(`🟩 "${r}" Slot Initialized`),await s(o,p.current)}catch(t){console.error(`Error in "${s.name}" Slot callback`,t)}finally{m.current="ready",await O()}},[s,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(b)]),[p,y]}function X({name:r,lazy:o=!1,context:s,slot:l,children:n,render:d,slotTag:c="div",contentTag:p="div",...m}){const h=P(M),[y,I]=q(r,s,l,n,d,p);return L(()=>{if(!r)return console.warn('Slot "name" is required');h&&o===!1&&(h.value.add(r),h.value=new Set(h.value))},[r,o,h]),V(c,{...m,ref:y,"data-slot":r},I.children)}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 N=()=>{};window.DROPINS.logSlots=async r=>{window.sessionStorage.setItem("dropin-debugger--log-slots",r.toString()),N=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 Y(r){const o=document.cookie.split(";");let s;return o.forEach(l=>{const[n,d]=l.trim().split("=");n===r&&(s=decodeURIComponent(d))}),s}export{ae as Config,ce as Initializer,ee as Render,X as Slot,M as SlotQueueContext,re as VComponent,oe as classes,se as debounce,E as deepmerge,te as generateSrcset,Y as getCookie,A as getFormErrors,U as getFormValues,Se as getGlobalLocale,fe as getImageParamsKeyMap,ye as getPathValue,ue as initializers,ie as isIOSMobileDevice,le as isNumber,W as merge,me as setGlobalLocale,pe as setImageParamsKeyMap,H as toLanguageTag,q 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 { cloneElement, ComponentChildren, RefObject, VNode, createElement } from 'preact';\nimport {\n StateUpdater,\n useContext,\n useState,\n useRef,\n useEffect,\n useMemo,\n useCallback,\n} from 'preact/hooks';\nimport { IntlContext, Lang } from '@adobe-commerce/elsie/i18n';\nimport { HTMLAttributes } from 'preact/compat';\nimport { SlotQueueContext } from './render';\n\nimport '@adobe-commerce/elsie/components/UIProvider/debugger.css';\n\ntype MutateElement = (elem: HTMLElement) => void;\n\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}\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 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>] {\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((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 }, [contentTag]);\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 },\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 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(context as K & DefaultSlotContext<K>, elementRef.current as HTMLDivElement | null);\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) {\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];\n}\n\n// Slot Component\ninterface SlotPropsComponent<T>\n extends Omit<HTMLAttributes<HTMLElement>, 'slot'> {\n name: string;\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 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] = 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) {\n slotsQueue.value.add(name);\n slotsQueue.value = new Set(slotsQueue.value);\n }\n }, [name, slotsQueue]);\n\n return createElement(\n slotTag,\n {\n ...props,\n ref: elementRef,\n 'data-slot': name,\n },\n slotProps.children\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","Slot","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 { HTMLAttributes } 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}\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 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>] {\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 },\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 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];\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] = 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 slotProps.children\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","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.5.0-alpha100", "license": "SEE LICENSE IN LICENSE.md"}
1
+ {"name": "@dropins/tools", "version": "1.5.0-alpha1000", "license": "SEE LICENSE IN LICENSE.md"}
@@ -23,9 +23,7 @@ declare function resetConfig(): void;
23
23
  * @param {Object} [configObj=config] - The config object.
24
24
  * @returns {string} - The root path.
25
25
  */
26
- declare function getRootPath(configObj: Config | null | undefined, options: {
27
- match?: (key: string) => boolean;
28
- }): string;
26
+ declare function getRootPath(configObj?: Config | null): string;
29
27
  /**
30
28
  * Get list of root paths from public config
31
29
  * @returns {Array} - The list of root paths.
@@ -45,14 +43,9 @@ declare function isMultistore(): boolean;
45
43
  declare function getHeaders(scope: string): Record<string, string>;
46
44
  /**
47
45
  * Initializes the configuration system.
48
- * @param {Object} configObj - The config object.
49
- * @param {Object} [options] - The options object.
50
- * @param {Function} [options.match] - The function to match the path to the config.
51
46
  * @returns {Object} The initialized root configuration
52
47
  */
53
- declare function initializeConfig(configObj: Config, options?: {
54
- match?: (key: string) => boolean;
55
- }): ConfigRoot;
48
+ declare function initializeConfig(configObj: Config): ConfigRoot;
56
49
  /**
57
50
  * Retrieves a configuration value.
58
51
  *
@@ -24,10 +24,15 @@ export declare class Render {
24
24
  * @returns A function to render the component to a root element.
25
25
  */
26
26
  render<T>(Component: Container<T>, props: T): (rootElement: HTMLElement) => Promise<RenderAPI>;
27
+ /**
28
+ * Unmounts a container from a root element.
29
+ * @param rootElement - The root element to unmount the container from.
30
+ */
31
+ static unmount(rootElement: HTMLElement): void;
27
32
  /**
28
33
  * UnRenders a component from a root element.
29
34
  * @param rootElement - The root element to unmount the component from.
30
- * @deprecated Use `remove` method from the returned object of the `mount` method instead.
35
+ * @deprecated Use `remove` method from the returned object of the `mount` method instead or `unmount` method from the `Render` class.
31
36
  */
32
37
  unmount(rootElement: HTMLElement): void;
33
38
  /**
@@ -1,7 +1,7 @@
1
- import { ComponentChildren, RefObject, VNode } from 'preact';
2
- import { StateUpdater } from 'preact/hooks';
3
1
  import { Lang } from '../i18n';
2
+ import { ComponentChildren, RefObject, VNode } from 'preact';
4
3
  import { HTMLAttributes } from 'preact/compat';
4
+ import { StateUpdater } from 'preact/hooks';
5
5
 
6
6
  type MutateElement = (elem: HTMLElement) => void;
7
7
  interface State {
@@ -36,6 +36,7 @@ export type SlotMethod<P = any> = (callback: (next: unknown, state: State) => P)
36
36
  export declare function useSlot<K, V extends HTMLElement>(name: string, context?: Context<K>, callback?: SlotProps<K>, children?: ComponentChildren, render?: Function, contentTag?: keyof HTMLElementTagNameMap): [RefObject<V>, Record<string, any>];
37
37
  interface SlotPropsComponent<T> extends Omit<HTMLAttributes<HTMLElement>, 'slot'> {
38
38
  name: string;
39
+ lazy?: boolean;
39
40
  slot?: SlotProps<T>;
40
41
  context?: Context<T>;
41
42
  render?: (props: Record<string, any>) => VNode | VNode[];
@@ -43,7 +44,7 @@ interface SlotPropsComponent<T> extends Omit<HTMLAttributes<HTMLElement>, 'slot'
43
44
  contentTag?: keyof HTMLElementTagNameMap;
44
45
  children?: ComponentChildren;
45
46
  }
46
- export declare function Slot<T>({ name, context, slot, children, render, slotTag, contentTag, ...props }: Readonly<SlotPropsComponent<T>>): VNode<{
47
+ export declare function Slot<T>({ name, lazy, context, slot, children, render, slotTag, contentTag, ...props }: Readonly<SlotPropsComponent<T>>): VNode<{
47
48
  ref: RefObject<HTMLElement>;
48
49
  'data-slot': string;
49
50
  [key: string]: any;