@elementor/utils 4.4.0-1078 → 4.4.0-1079
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/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/use-debounce-state.ts +8 -0
package/dist/index.d.mts
CHANGED
|
@@ -40,6 +40,7 @@ type UseDebounceStateResult = {
|
|
|
40
40
|
debouncedValue: string;
|
|
41
41
|
inputValue: string;
|
|
42
42
|
handleChange: (val: string) => void;
|
|
43
|
+
setImmediateValue: (val: string) => void;
|
|
43
44
|
setInputValue: React.Dispatch<React.SetStateAction<string>>;
|
|
44
45
|
};
|
|
45
46
|
declare function useDebounceState(options?: UseDebounceStateOptions): UseDebounceStateResult;
|
package/dist/index.d.ts
CHANGED
|
@@ -40,6 +40,7 @@ type UseDebounceStateResult = {
|
|
|
40
40
|
debouncedValue: string;
|
|
41
41
|
inputValue: string;
|
|
42
42
|
handleChange: (val: string) => void;
|
|
43
|
+
setImmediateValue: (val: string) => void;
|
|
43
44
|
setInputValue: React.Dispatch<React.SetStateAction<string>>;
|
|
44
45
|
};
|
|
45
46
|
declare function useDebounceState(options?: UseDebounceStateOptions): UseDebounceStateResult;
|
package/dist/index.js
CHANGED
|
@@ -136,10 +136,16 @@ function useDebounceState(options = {}) {
|
|
|
136
136
|
setInputValue(val);
|
|
137
137
|
debouncedSetValue(val);
|
|
138
138
|
};
|
|
139
|
+
const setImmediateValue = (val) => {
|
|
140
|
+
runRef.current?.cancel?.();
|
|
141
|
+
setInputValue(val);
|
|
142
|
+
setDebouncedValue(val);
|
|
143
|
+
};
|
|
139
144
|
return {
|
|
140
145
|
debouncedValue,
|
|
141
146
|
inputValue,
|
|
142
147
|
handleChange,
|
|
148
|
+
setImmediateValue,
|
|
143
149
|
setInputValue
|
|
144
150
|
};
|
|
145
151
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/errors/elementor-error.ts","../src/errors/create-error.ts","../src/errors/ensure-error.ts","../src/use-debounce-state.ts","../src/debounce.ts","../src/use-debounced-callback.ts","../src/throttle.ts","../src/encoding.ts","../src/hash.ts","../src/use-search-state.ts","../src/generate-unique-id.ts","../src/string-helpers.ts","../src/version.ts","../src/is-pro.ts","../src/translations.ts"],"sourcesContent":["export { ElementorError, createError, ensureError } from './errors';\nexport type { ElementorErrorOptions, CreateErrorParams } from './errors';\nexport { useDebounceState, type UseDebounceStateOptions, type UseDebounceStateResult } from './use-debounce-state';\nexport { useDebouncedCallback } from './use-debounced-callback';\nexport { debounce } from './debounce';\nexport { throttle } from './throttle';\nexport { encodeString, decodeString } from './encoding';\nexport { hash, hashString } from './hash';\nexport { useSearchState, type UseSearchStateResult } from './use-search-state';\nexport { generateUniqueId } from './generate-unique-id';\nexport { capitalize } from './string-helpers';\nexport { compareVersions, isVersionLessThan, isVersionGreaterOrEqual } from './version';\nexport { hasProInstalled, isProActive, isProAtLeast } from './is-pro';\nexport { createTranslate } from './translations';\n","export type ElementorErrorOptions = {\n\tcause?: Error[ 'cause' ];\n\tcontext?: Record< string, unknown > | null;\n\tcode: string;\n};\n\nexport class ElementorError extends Error {\n\treadonly context: ElementorErrorOptions[ 'context' ];\n\treadonly code: ElementorErrorOptions[ 'code' ];\n\n\tconstructor( message: string, { code, context = null, cause = null }: ElementorErrorOptions ) {\n\t\tsuper( message, { cause } );\n\t\tthis.context = context;\n\t\tthis.code = code;\n\t}\n}\n","import { ElementorError, type ElementorErrorOptions } from './elementor-error';\n\nexport type CreateErrorParams = {\n\tcode: ElementorErrorOptions[ 'code' ];\n\tmessage: string;\n};\n\nexport const createError = < T extends ElementorErrorOptions[ 'context' ] >( { code, message }: CreateErrorParams ) => {\n\treturn class extends ElementorError {\n\t\tconstructor( { cause, context }: { cause?: ElementorErrorOptions[ 'cause' ]; context?: T } = {} ) {\n\t\t\tsuper( message, { cause, code, context } );\n\t\t}\n\t};\n};\n","export const ensureError = ( error: unknown ) => {\n\tif ( error instanceof Error ) {\n\t\treturn error;\n\t}\n\n\tlet message: string;\n\tlet cause: unknown = null;\n\n\ttry {\n\t\tmessage = JSON.stringify( error );\n\t} catch ( e ) {\n\t\tcause = e;\n\t\tmessage = 'Unable to stringify the thrown value';\n\t}\n\treturn new Error( `Unexpected non-error thrown: ${ message }`, { cause } );\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type * as React from 'react';\n\nimport { debounce } from './debounce';\n\nexport type UseDebounceStateOptions = {\n\tdelay?: number;\n\tinitialValue?: string;\n};\n\nexport type UseDebounceStateResult = {\n\tdebouncedValue: string;\n\tinputValue: string;\n\thandleChange: ( val: string ) => void;\n\tsetInputValue: React.Dispatch< React.SetStateAction< string > >;\n};\n\nexport function useDebounceState( options: UseDebounceStateOptions = {} ): UseDebounceStateResult {\n\tconst { delay = 300, initialValue = '' } = options;\n\n\tconst [ debouncedValue, setDebouncedValue ] = useState( initialValue );\n\tconst [ inputValue, setInputValue ] = useState( initialValue );\n\n\tconst runRef = useRef< ReturnType< typeof debounce > | null >( null );\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\trunRef.current?.cancel?.();\n\t\t};\n\t}, [] );\n\n\tconst debouncedSetValue = useCallback(\n\t\t( val: string ) => {\n\t\t\trunRef.current?.cancel?.();\n\t\t\trunRef.current = debounce( () => {\n\t\t\t\tsetDebouncedValue( val );\n\t\t\t}, delay );\n\t\t\trunRef.current();\n\t\t},\n\t\t[ delay ]\n\t);\n\n\tconst handleChange = ( val: string ) => {\n\t\tsetInputValue( val );\n\t\tdebouncedSetValue( val );\n\t};\n\n\treturn {\n\t\tdebouncedValue,\n\t\tinputValue,\n\t\thandleChange,\n\t\tsetInputValue,\n\t};\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce< TArgs extends any[] >( fn: ( ...args: TArgs ) => void, wait: number ) {\n\tlet timer: ReturnType< typeof setTimeout > | null = null;\n\n\tconst cancel = () => {\n\t\tif ( ! timer ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( timer );\n\t\ttimer = null;\n\t};\n\n\tconst flush = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\tfn( ...args );\n\t};\n\n\tconst run = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\ttimer = setTimeout( () => {\n\t\t\tfn( ...args );\n\n\t\t\ttimer = null;\n\t\t}, wait );\n\t};\n\n\tconst pending = () => !! timer;\n\n\trun.flush = flush;\n\trun.cancel = cancel;\n\trun.pending = pending;\n\n\treturn run;\n}\n","import { useEffect, useMemo, useRef } from 'react';\n\nimport { debounce } from './debounce';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebouncedCallback< TArgs extends any[] >( callback: ( ...args: TArgs ) => void, delay: number ) {\n\tconst callbackRef = useRef( callback );\n\n\tuseEffect( () => {\n\t\tcallbackRef.current = callback;\n\t}, [ callback ] );\n\n\tconst debounced = useMemo(\n\t\t() => debounce( ( ...args: TArgs ) => callbackRef.current( ...args ), delay ),\n\t\t[ delay ]\n\t);\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tdebounced.cancel();\n\t\t};\n\t}, [ debounced ] );\n\n\treturn debounced;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function throttle< TArgs extends any[] >(\n\tfn: ( ...args: TArgs ) => void,\n\twait: number,\n\tshouldExecuteIgnoredCalls: boolean = false\n) {\n\tlet timer: ReturnType< typeof setTimeout > | null = null;\n\tlet ignoredExecution: boolean = false;\n\n\tconst cancel = () => {\n\t\tif ( ! timer ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( timer );\n\t\ttimer = null;\n\t};\n\n\tconst flush = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\tfn( ...args );\n\t};\n\n\tconst run = ( ...args: TArgs ) => {\n\t\tif ( timer ) {\n\t\t\tignoredExecution = true;\n\t\t\treturn;\n\t\t}\n\n\t\tfn( ...args );\n\n\t\ttimer = setTimeout( () => {\n\t\t\ttimer = null;\n\n\t\t\tif ( ignoredExecution && shouldExecuteIgnoredCalls ) {\n\t\t\t\tfn( ...args );\n\t\t\t}\n\n\t\t\tignoredExecution = false;\n\t\t}, wait );\n\t};\n\n\tconst pending = () => !! timer;\n\n\trun.flush = flush;\n\trun.cancel = cancel;\n\trun.pending = pending;\n\n\treturn run;\n}\n","export const encodeString = ( value: string ): string => {\n\tconst binary = Array.from( new TextEncoder().encode( value ), ( b ) => String.fromCharCode( b ) ).join( '' );\n\treturn btoa( binary );\n};\n\nexport const decodeString = < T = string >( value: string, fallback?: T ): string | T => {\n\ttry {\n\t\tconst binary = atob( value );\n\t\tconst bytes = new Uint8Array( Array.from( binary, ( char ) => char.charCodeAt( 0 ) ) );\n\t\treturn new TextDecoder().decode( bytes );\n\t} catch {\n\t\treturn fallback !== undefined ? fallback : '';\n\t}\n};\n","/* eslint-disable no-bitwise */\ntype UnknownObject = Record< string, unknown >;\n\n// Inspired by:\n// https://github.com/TanStack/query/blob/66ea5f2fc/packages/query-core/src/utils.ts#L212\nexport function hash( obj: UnknownObject ): string {\n\treturn JSON.stringify( obj, ( _, value ) =>\n\t\tisPlainObject( value )\n\t\t\t? Object.keys( value )\n\t\t\t\t\t.sort()\n\t\t\t\t\t.reduce< UnknownObject >( ( result, key ) => {\n\t\t\t\t\t\tresult[ key ] = value[ key ];\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}, {} )\n\t\t\t: value\n\t);\n}\n\nfunction isPlainObject( value: unknown ): value is UnknownObject {\n\treturn !! value && typeof value === 'object' && ! Array.isArray( value );\n}\n\n// Inspired by:\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nexport function hashString( str: string, length?: number ): string {\n\tlet hashBasis = 5381;\n\n\tlet i = str.length;\n\twhile ( i ) {\n\t\thashBasis = ( hashBasis * 33 ) ^ str.charCodeAt( --i );\n\t}\n\n\t/* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n\t * integers. Since we want the results to be always positive, convert the\n\t * signed int to an unsigned by doing an unsigned bitshift. */\n\tconst result = ( hashBasis >>> 0 ).toString( 36 );\n\n\tif ( length === undefined ) {\n\t\treturn result;\n\t}\n\n\tconst sliced = result.slice( -length );\n\treturn sliced.padStart( length, '0' );\n}\n","import { useDebounceState, type UseDebounceStateResult } from './use-debounce-state';\n\nexport type UseSearchStateResult = UseDebounceStateResult;\n\nexport function useSearchState( { localStorageKey }: { localStorageKey?: string } ) {\n\tconst getInitialSearchValue = () => {\n\t\tif ( localStorageKey ) {\n\t\t\tconst storedValue = localStorage.getItem( localStorageKey );\n\t\t\tif ( storedValue ) {\n\t\t\t\tlocalStorage.removeItem( localStorageKey );\n\t\t\t\treturn storedValue;\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\tconst { debouncedValue, inputValue, handleChange } = useDebounceState( {\n\t\tdelay: 300,\n\t\tinitialValue: getInitialSearchValue(),\n\t} );\n\treturn {\n\t\tdebouncedValue,\n\t\tinputValue,\n\t\thandleChange,\n\t};\n}\n","export function generateUniqueId( prefix: string = '' ): string {\n\tconst prefixStr = prefix ? `${ prefix }-` : '';\n\n\treturn `${ prefixStr }${ Date.now() }-${ Math.random().toString( 36 ).substring( 2, 9 ) }`;\n}\n","export const capitalize = ( str: string ): string => {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n};\n","export const compareVersions = ( a: string | number, b: string | number ): number => {\n\tconst aParts = String( a || '0.0.0' )\n\t\t.split( '.' )\n\t\t.map( Number );\n\tconst bParts = String( b || '0.0.0' )\n\t\t.split( '.' )\n\t\t.map( Number );\n\n\tfor ( let i = 0; i < Math.max( aParts.length, bParts.length ); i++ ) {\n\t\tconst aVal = aParts[ i ] || 0;\n\t\tconst bVal = bParts[ i ] || 0;\n\t\tif ( aVal !== bVal ) {\n\t\t\treturn aVal - bVal;\n\t\t}\n\t}\n\treturn 0;\n};\n\nexport const isVersionLessThan = ( a: string | number, b: string | number ): boolean => {\n\treturn compareVersions( a, b ) < 0;\n};\n\nexport const isVersionGreaterOrEqual = ( a: string | number, b: string | number ): boolean => {\n\treturn compareVersions( a, b ) >= 0;\n};\n","export function hasProInstalled(): boolean {\n\treturn window.elementor?.helpers?.hasPro?.() ?? false;\n}\n\nexport function isProActive(): boolean {\n\tif ( ! hasProInstalled() ) {\n\t\treturn false;\n\t}\n\n\treturn window.elementorPro?.config?.isActive ?? false;\n}\n\nfunction getProVersion(): string {\n\treturn window.elementorPro?.config?.version ?? '0.0';\n}\n\nexport function isProAtLeast( targetVersion: string ): boolean {\n\tconst version = getProVersion();\n\n\tif ( ! version ) {\n\t\treturn false;\n\t}\n\n\tconst [ major, minor ] = version.split( '.' ).map( Number );\n\tconst [ targetMajor, targetMinor ] = targetVersion.split( '.' ).map( Number );\n\n\treturn major > targetMajor || ( major === targetMajor && minor >= targetMinor );\n}\n","type TranslateFunction = ( key: string, ...args: string[] ) => string;\n\ninterface CreateTranslateOptions {\n\tconfigKey: string;\n\tdefaultStrings?: Record< string, string >;\n}\n\nexport function createTranslate( { configKey, defaultStrings = {} }: CreateTranslateOptions ): TranslateFunction {\n\treturn ( key: string, ...args: string[] ): string => {\n\t\tconst appConfig = window.elementorAppConfig as\n\t\t\t| Record< string, { translations?: Record< string, string > } >\n\t\t\t| undefined;\n\t\tconst remoteStrings = Object.fromEntries(\n\t\t\tObject.entries( appConfig?.[ configKey ]?.translations ?? {} ).filter(\n\t\t\t\t( [ , value ] ) => 'string' === typeof value && '' !== value.trim()\n\t\t\t)\n\t\t);\n\t\tconst strings: Record< string, string > = {\n\t\t\t...defaultStrings,\n\t\t\t...remoteStrings,\n\t\t};\n\n\t\tlet template = strings[ key ];\n\n\t\tif ( ! template ) {\n\t\t\treturn key;\n\t\t}\n\n\t\tfor ( let i = 0; i < args.length; i++ ) {\n\t\t\ttemplate = template.replace( `%${ i + 1 }$s`, args[ i ] );\n\t\t\ttemplate = template.replace( '%s', args[ i ] );\n\t\t}\n\n\t\treturn template;\n\t};\n}\n"],"mappings":"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","names":["import_react"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/errors/elementor-error.ts","../src/errors/create-error.ts","../src/errors/ensure-error.ts","../src/use-debounce-state.ts","../src/debounce.ts","../src/use-debounced-callback.ts","../src/throttle.ts","../src/encoding.ts","../src/hash.ts","../src/use-search-state.ts","../src/generate-unique-id.ts","../src/string-helpers.ts","../src/version.ts","../src/is-pro.ts","../src/translations.ts"],"sourcesContent":["export { ElementorError, createError, ensureError } from './errors';\nexport type { ElementorErrorOptions, CreateErrorParams } from './errors';\nexport { useDebounceState, type UseDebounceStateOptions, type UseDebounceStateResult } from './use-debounce-state';\nexport { useDebouncedCallback } from './use-debounced-callback';\nexport { debounce } from './debounce';\nexport { throttle } from './throttle';\nexport { encodeString, decodeString } from './encoding';\nexport { hash, hashString } from './hash';\nexport { useSearchState, type UseSearchStateResult } from './use-search-state';\nexport { generateUniqueId } from './generate-unique-id';\nexport { capitalize } from './string-helpers';\nexport { compareVersions, isVersionLessThan, isVersionGreaterOrEqual } from './version';\nexport { hasProInstalled, isProActive, isProAtLeast } from './is-pro';\nexport { createTranslate } from './translations';\n","export type ElementorErrorOptions = {\n\tcause?: Error[ 'cause' ];\n\tcontext?: Record< string, unknown > | null;\n\tcode: string;\n};\n\nexport class ElementorError extends Error {\n\treadonly context: ElementorErrorOptions[ 'context' ];\n\treadonly code: ElementorErrorOptions[ 'code' ];\n\n\tconstructor( message: string, { code, context = null, cause = null }: ElementorErrorOptions ) {\n\t\tsuper( message, { cause } );\n\t\tthis.context = context;\n\t\tthis.code = code;\n\t}\n}\n","import { ElementorError, type ElementorErrorOptions } from './elementor-error';\n\nexport type CreateErrorParams = {\n\tcode: ElementorErrorOptions[ 'code' ];\n\tmessage: string;\n};\n\nexport const createError = < T extends ElementorErrorOptions[ 'context' ] >( { code, message }: CreateErrorParams ) => {\n\treturn class extends ElementorError {\n\t\tconstructor( { cause, context }: { cause?: ElementorErrorOptions[ 'cause' ]; context?: T } = {} ) {\n\t\t\tsuper( message, { cause, code, context } );\n\t\t}\n\t};\n};\n","export const ensureError = ( error: unknown ) => {\n\tif ( error instanceof Error ) {\n\t\treturn error;\n\t}\n\n\tlet message: string;\n\tlet cause: unknown = null;\n\n\ttry {\n\t\tmessage = JSON.stringify( error );\n\t} catch ( e ) {\n\t\tcause = e;\n\t\tmessage = 'Unable to stringify the thrown value';\n\t}\n\treturn new Error( `Unexpected non-error thrown: ${ message }`, { cause } );\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type * as React from 'react';\n\nimport { debounce } from './debounce';\n\nexport type UseDebounceStateOptions = {\n\tdelay?: number;\n\tinitialValue?: string;\n};\n\nexport type UseDebounceStateResult = {\n\tdebouncedValue: string;\n\tinputValue: string;\n\thandleChange: ( val: string ) => void;\n\tsetImmediateValue: ( val: string ) => void;\n\tsetInputValue: React.Dispatch< React.SetStateAction< string > >;\n};\n\nexport function useDebounceState( options: UseDebounceStateOptions = {} ): UseDebounceStateResult {\n\tconst { delay = 300, initialValue = '' } = options;\n\n\tconst [ debouncedValue, setDebouncedValue ] = useState( initialValue );\n\tconst [ inputValue, setInputValue ] = useState( initialValue );\n\n\tconst runRef = useRef< ReturnType< typeof debounce > | null >( null );\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\trunRef.current?.cancel?.();\n\t\t};\n\t}, [] );\n\n\tconst debouncedSetValue = useCallback(\n\t\t( val: string ) => {\n\t\t\trunRef.current?.cancel?.();\n\t\t\trunRef.current = debounce( () => {\n\t\t\t\tsetDebouncedValue( val );\n\t\t\t}, delay );\n\t\t\trunRef.current();\n\t\t},\n\t\t[ delay ]\n\t);\n\n\tconst handleChange = ( val: string ) => {\n\t\tsetInputValue( val );\n\t\tdebouncedSetValue( val );\n\t};\n\n\tconst setImmediateValue = ( val: string ) => {\n\t\trunRef.current?.cancel?.();\n\t\tsetInputValue( val );\n\t\tsetDebouncedValue( val );\n\t};\n\n\treturn {\n\t\tdebouncedValue,\n\t\tinputValue,\n\t\thandleChange,\n\t\tsetImmediateValue,\n\t\tsetInputValue,\n\t};\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce< TArgs extends any[] >( fn: ( ...args: TArgs ) => void, wait: number ) {\n\tlet timer: ReturnType< typeof setTimeout > | null = null;\n\n\tconst cancel = () => {\n\t\tif ( ! timer ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( timer );\n\t\ttimer = null;\n\t};\n\n\tconst flush = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\tfn( ...args );\n\t};\n\n\tconst run = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\ttimer = setTimeout( () => {\n\t\t\tfn( ...args );\n\n\t\t\ttimer = null;\n\t\t}, wait );\n\t};\n\n\tconst pending = () => !! timer;\n\n\trun.flush = flush;\n\trun.cancel = cancel;\n\trun.pending = pending;\n\n\treturn run;\n}\n","import { useEffect, useMemo, useRef } from 'react';\n\nimport { debounce } from './debounce';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebouncedCallback< TArgs extends any[] >( callback: ( ...args: TArgs ) => void, delay: number ) {\n\tconst callbackRef = useRef( callback );\n\n\tuseEffect( () => {\n\t\tcallbackRef.current = callback;\n\t}, [ callback ] );\n\n\tconst debounced = useMemo(\n\t\t() => debounce( ( ...args: TArgs ) => callbackRef.current( ...args ), delay ),\n\t\t[ delay ]\n\t);\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tdebounced.cancel();\n\t\t};\n\t}, [ debounced ] );\n\n\treturn debounced;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function throttle< TArgs extends any[] >(\n\tfn: ( ...args: TArgs ) => void,\n\twait: number,\n\tshouldExecuteIgnoredCalls: boolean = false\n) {\n\tlet timer: ReturnType< typeof setTimeout > | null = null;\n\tlet ignoredExecution: boolean = false;\n\n\tconst cancel = () => {\n\t\tif ( ! timer ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( timer );\n\t\ttimer = null;\n\t};\n\n\tconst flush = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\tfn( ...args );\n\t};\n\n\tconst run = ( ...args: TArgs ) => {\n\t\tif ( timer ) {\n\t\t\tignoredExecution = true;\n\t\t\treturn;\n\t\t}\n\n\t\tfn( ...args );\n\n\t\ttimer = setTimeout( () => {\n\t\t\ttimer = null;\n\n\t\t\tif ( ignoredExecution && shouldExecuteIgnoredCalls ) {\n\t\t\t\tfn( ...args );\n\t\t\t}\n\n\t\t\tignoredExecution = false;\n\t\t}, wait );\n\t};\n\n\tconst pending = () => !! timer;\n\n\trun.flush = flush;\n\trun.cancel = cancel;\n\trun.pending = pending;\n\n\treturn run;\n}\n","export const encodeString = ( value: string ): string => {\n\tconst binary = Array.from( new TextEncoder().encode( value ), ( b ) => String.fromCharCode( b ) ).join( '' );\n\treturn btoa( binary );\n};\n\nexport const decodeString = < T = string >( value: string, fallback?: T ): string | T => {\n\ttry {\n\t\tconst binary = atob( value );\n\t\tconst bytes = new Uint8Array( Array.from( binary, ( char ) => char.charCodeAt( 0 ) ) );\n\t\treturn new TextDecoder().decode( bytes );\n\t} catch {\n\t\treturn fallback !== undefined ? fallback : '';\n\t}\n};\n","/* eslint-disable no-bitwise */\ntype UnknownObject = Record< string, unknown >;\n\n// Inspired by:\n// https://github.com/TanStack/query/blob/66ea5f2fc/packages/query-core/src/utils.ts#L212\nexport function hash( obj: UnknownObject ): string {\n\treturn JSON.stringify( obj, ( _, value ) =>\n\t\tisPlainObject( value )\n\t\t\t? Object.keys( value )\n\t\t\t\t\t.sort()\n\t\t\t\t\t.reduce< UnknownObject >( ( result, key ) => {\n\t\t\t\t\t\tresult[ key ] = value[ key ];\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}, {} )\n\t\t\t: value\n\t);\n}\n\nfunction isPlainObject( value: unknown ): value is UnknownObject {\n\treturn !! value && typeof value === 'object' && ! Array.isArray( value );\n}\n\n// Inspired by:\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nexport function hashString( str: string, length?: number ): string {\n\tlet hashBasis = 5381;\n\n\tlet i = str.length;\n\twhile ( i ) {\n\t\thashBasis = ( hashBasis * 33 ) ^ str.charCodeAt( --i );\n\t}\n\n\t/* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n\t * integers. Since we want the results to be always positive, convert the\n\t * signed int to an unsigned by doing an unsigned bitshift. */\n\tconst result = ( hashBasis >>> 0 ).toString( 36 );\n\n\tif ( length === undefined ) {\n\t\treturn result;\n\t}\n\n\tconst sliced = result.slice( -length );\n\treturn sliced.padStart( length, '0' );\n}\n","import { useDebounceState, type UseDebounceStateResult } from './use-debounce-state';\n\nexport type UseSearchStateResult = UseDebounceStateResult;\n\nexport function useSearchState( { localStorageKey }: { localStorageKey?: string } ) {\n\tconst getInitialSearchValue = () => {\n\t\tif ( localStorageKey ) {\n\t\t\tconst storedValue = localStorage.getItem( localStorageKey );\n\t\t\tif ( storedValue ) {\n\t\t\t\tlocalStorage.removeItem( localStorageKey );\n\t\t\t\treturn storedValue;\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\tconst { debouncedValue, inputValue, handleChange } = useDebounceState( {\n\t\tdelay: 300,\n\t\tinitialValue: getInitialSearchValue(),\n\t} );\n\treturn {\n\t\tdebouncedValue,\n\t\tinputValue,\n\t\thandleChange,\n\t};\n}\n","export function generateUniqueId( prefix: string = '' ): string {\n\tconst prefixStr = prefix ? `${ prefix }-` : '';\n\n\treturn `${ prefixStr }${ Date.now() }-${ Math.random().toString( 36 ).substring( 2, 9 ) }`;\n}\n","export const capitalize = ( str: string ): string => {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n};\n","export const compareVersions = ( a: string | number, b: string | number ): number => {\n\tconst aParts = String( a || '0.0.0' )\n\t\t.split( '.' )\n\t\t.map( Number );\n\tconst bParts = String( b || '0.0.0' )\n\t\t.split( '.' )\n\t\t.map( Number );\n\n\tfor ( let i = 0; i < Math.max( aParts.length, bParts.length ); i++ ) {\n\t\tconst aVal = aParts[ i ] || 0;\n\t\tconst bVal = bParts[ i ] || 0;\n\t\tif ( aVal !== bVal ) {\n\t\t\treturn aVal - bVal;\n\t\t}\n\t}\n\treturn 0;\n};\n\nexport const isVersionLessThan = ( a: string | number, b: string | number ): boolean => {\n\treturn compareVersions( a, b ) < 0;\n};\n\nexport const isVersionGreaterOrEqual = ( a: string | number, b: string | number ): boolean => {\n\treturn compareVersions( a, b ) >= 0;\n};\n","export function hasProInstalled(): boolean {\n\treturn window.elementor?.helpers?.hasPro?.() ?? false;\n}\n\nexport function isProActive(): boolean {\n\tif ( ! hasProInstalled() ) {\n\t\treturn false;\n\t}\n\n\treturn window.elementorPro?.config?.isActive ?? false;\n}\n\nfunction getProVersion(): string {\n\treturn window.elementorPro?.config?.version ?? '0.0';\n}\n\nexport function isProAtLeast( targetVersion: string ): boolean {\n\tconst version = getProVersion();\n\n\tif ( ! version ) {\n\t\treturn false;\n\t}\n\n\tconst [ major, minor ] = version.split( '.' ).map( Number );\n\tconst [ targetMajor, targetMinor ] = targetVersion.split( '.' ).map( Number );\n\n\treturn major > targetMajor || ( major === targetMajor && minor >= targetMinor );\n}\n","type TranslateFunction = ( key: string, ...args: string[] ) => string;\n\ninterface CreateTranslateOptions {\n\tconfigKey: string;\n\tdefaultStrings?: Record< string, string >;\n}\n\nexport function createTranslate( { configKey, defaultStrings = {} }: CreateTranslateOptions ): TranslateFunction {\n\treturn ( key: string, ...args: string[] ): string => {\n\t\tconst appConfig = window.elementorAppConfig as\n\t\t\t| Record< string, { translations?: Record< string, string > } >\n\t\t\t| undefined;\n\t\tconst remoteStrings = Object.fromEntries(\n\t\t\tObject.entries( appConfig?.[ configKey ]?.translations ?? {} ).filter(\n\t\t\t\t( [ , value ] ) => 'string' === typeof value && '' !== value.trim()\n\t\t\t)\n\t\t);\n\t\tconst strings: Record< string, string > = {\n\t\t\t...defaultStrings,\n\t\t\t...remoteStrings,\n\t\t};\n\n\t\tlet template = strings[ key ];\n\n\t\tif ( ! template ) {\n\t\t\treturn key;\n\t\t}\n\n\t\tfor ( let i = 0; i < args.length; i++ ) {\n\t\t\ttemplate = template.replace( `%${ i + 1 }$s`, args[ i ] );\n\t\t\ttemplate = template.replace( '%s', args[ i ] );\n\t\t}\n\n\t\treturn template;\n\t};\n}\n"],"mappings":"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","names":["import_react"]}
|
package/dist/index.mjs
CHANGED
|
@@ -90,10 +90,16 @@ function useDebounceState(options = {}) {
|
|
|
90
90
|
setInputValue(val);
|
|
91
91
|
debouncedSetValue(val);
|
|
92
92
|
};
|
|
93
|
+
const setImmediateValue = (val) => {
|
|
94
|
+
runRef.current?.cancel?.();
|
|
95
|
+
setInputValue(val);
|
|
96
|
+
setDebouncedValue(val);
|
|
97
|
+
};
|
|
93
98
|
return {
|
|
94
99
|
debouncedValue,
|
|
95
100
|
inputValue,
|
|
96
101
|
handleChange,
|
|
102
|
+
setImmediateValue,
|
|
97
103
|
setInputValue
|
|
98
104
|
};
|
|
99
105
|
}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors/elementor-error.ts","../src/errors/create-error.ts","../src/errors/ensure-error.ts","../src/use-debounce-state.ts","../src/debounce.ts","../src/use-debounced-callback.ts","../src/throttle.ts","../src/encoding.ts","../src/hash.ts","../src/use-search-state.ts","../src/generate-unique-id.ts","../src/string-helpers.ts","../src/version.ts","../src/is-pro.ts","../src/translations.ts"],"sourcesContent":["export type ElementorErrorOptions = {\n\tcause?: Error[ 'cause' ];\n\tcontext?: Record< string, unknown > | null;\n\tcode: string;\n};\n\nexport class ElementorError extends Error {\n\treadonly context: ElementorErrorOptions[ 'context' ];\n\treadonly code: ElementorErrorOptions[ 'code' ];\n\n\tconstructor( message: string, { code, context = null, cause = null }: ElementorErrorOptions ) {\n\t\tsuper( message, { cause } );\n\t\tthis.context = context;\n\t\tthis.code = code;\n\t}\n}\n","import { ElementorError, type ElementorErrorOptions } from './elementor-error';\n\nexport type CreateErrorParams = {\n\tcode: ElementorErrorOptions[ 'code' ];\n\tmessage: string;\n};\n\nexport const createError = < T extends ElementorErrorOptions[ 'context' ] >( { code, message }: CreateErrorParams ) => {\n\treturn class extends ElementorError {\n\t\tconstructor( { cause, context }: { cause?: ElementorErrorOptions[ 'cause' ]; context?: T } = {} ) {\n\t\t\tsuper( message, { cause, code, context } );\n\t\t}\n\t};\n};\n","export const ensureError = ( error: unknown ) => {\n\tif ( error instanceof Error ) {\n\t\treturn error;\n\t}\n\n\tlet message: string;\n\tlet cause: unknown = null;\n\n\ttry {\n\t\tmessage = JSON.stringify( error );\n\t} catch ( e ) {\n\t\tcause = e;\n\t\tmessage = 'Unable to stringify the thrown value';\n\t}\n\treturn new Error( `Unexpected non-error thrown: ${ message }`, { cause } );\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type * as React from 'react';\n\nimport { debounce } from './debounce';\n\nexport type UseDebounceStateOptions = {\n\tdelay?: number;\n\tinitialValue?: string;\n};\n\nexport type UseDebounceStateResult = {\n\tdebouncedValue: string;\n\tinputValue: string;\n\thandleChange: ( val: string ) => void;\n\tsetInputValue: React.Dispatch< React.SetStateAction< string > >;\n};\n\nexport function useDebounceState( options: UseDebounceStateOptions = {} ): UseDebounceStateResult {\n\tconst { delay = 300, initialValue = '' } = options;\n\n\tconst [ debouncedValue, setDebouncedValue ] = useState( initialValue );\n\tconst [ inputValue, setInputValue ] = useState( initialValue );\n\n\tconst runRef = useRef< ReturnType< typeof debounce > | null >( null );\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\trunRef.current?.cancel?.();\n\t\t};\n\t}, [] );\n\n\tconst debouncedSetValue = useCallback(\n\t\t( val: string ) => {\n\t\t\trunRef.current?.cancel?.();\n\t\t\trunRef.current = debounce( () => {\n\t\t\t\tsetDebouncedValue( val );\n\t\t\t}, delay );\n\t\t\trunRef.current();\n\t\t},\n\t\t[ delay ]\n\t);\n\n\tconst handleChange = ( val: string ) => {\n\t\tsetInputValue( val );\n\t\tdebouncedSetValue( val );\n\t};\n\n\treturn {\n\t\tdebouncedValue,\n\t\tinputValue,\n\t\thandleChange,\n\t\tsetInputValue,\n\t};\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce< TArgs extends any[] >( fn: ( ...args: TArgs ) => void, wait: number ) {\n\tlet timer: ReturnType< typeof setTimeout > | null = null;\n\n\tconst cancel = () => {\n\t\tif ( ! timer ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( timer );\n\t\ttimer = null;\n\t};\n\n\tconst flush = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\tfn( ...args );\n\t};\n\n\tconst run = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\ttimer = setTimeout( () => {\n\t\t\tfn( ...args );\n\n\t\t\ttimer = null;\n\t\t}, wait );\n\t};\n\n\tconst pending = () => !! timer;\n\n\trun.flush = flush;\n\trun.cancel = cancel;\n\trun.pending = pending;\n\n\treturn run;\n}\n","import { useEffect, useMemo, useRef } from 'react';\n\nimport { debounce } from './debounce';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebouncedCallback< TArgs extends any[] >( callback: ( ...args: TArgs ) => void, delay: number ) {\n\tconst callbackRef = useRef( callback );\n\n\tuseEffect( () => {\n\t\tcallbackRef.current = callback;\n\t}, [ callback ] );\n\n\tconst debounced = useMemo(\n\t\t() => debounce( ( ...args: TArgs ) => callbackRef.current( ...args ), delay ),\n\t\t[ delay ]\n\t);\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tdebounced.cancel();\n\t\t};\n\t}, [ debounced ] );\n\n\treturn debounced;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function throttle< TArgs extends any[] >(\n\tfn: ( ...args: TArgs ) => void,\n\twait: number,\n\tshouldExecuteIgnoredCalls: boolean = false\n) {\n\tlet timer: ReturnType< typeof setTimeout > | null = null;\n\tlet ignoredExecution: boolean = false;\n\n\tconst cancel = () => {\n\t\tif ( ! timer ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( timer );\n\t\ttimer = null;\n\t};\n\n\tconst flush = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\tfn( ...args );\n\t};\n\n\tconst run = ( ...args: TArgs ) => {\n\t\tif ( timer ) {\n\t\t\tignoredExecution = true;\n\t\t\treturn;\n\t\t}\n\n\t\tfn( ...args );\n\n\t\ttimer = setTimeout( () => {\n\t\t\ttimer = null;\n\n\t\t\tif ( ignoredExecution && shouldExecuteIgnoredCalls ) {\n\t\t\t\tfn( ...args );\n\t\t\t}\n\n\t\t\tignoredExecution = false;\n\t\t}, wait );\n\t};\n\n\tconst pending = () => !! timer;\n\n\trun.flush = flush;\n\trun.cancel = cancel;\n\trun.pending = pending;\n\n\treturn run;\n}\n","export const encodeString = ( value: string ): string => {\n\tconst binary = Array.from( new TextEncoder().encode( value ), ( b ) => String.fromCharCode( b ) ).join( '' );\n\treturn btoa( binary );\n};\n\nexport const decodeString = < T = string >( value: string, fallback?: T ): string | T => {\n\ttry {\n\t\tconst binary = atob( value );\n\t\tconst bytes = new Uint8Array( Array.from( binary, ( char ) => char.charCodeAt( 0 ) ) );\n\t\treturn new TextDecoder().decode( bytes );\n\t} catch {\n\t\treturn fallback !== undefined ? fallback : '';\n\t}\n};\n","/* eslint-disable no-bitwise */\ntype UnknownObject = Record< string, unknown >;\n\n// Inspired by:\n// https://github.com/TanStack/query/blob/66ea5f2fc/packages/query-core/src/utils.ts#L212\nexport function hash( obj: UnknownObject ): string {\n\treturn JSON.stringify( obj, ( _, value ) =>\n\t\tisPlainObject( value )\n\t\t\t? Object.keys( value )\n\t\t\t\t\t.sort()\n\t\t\t\t\t.reduce< UnknownObject >( ( result, key ) => {\n\t\t\t\t\t\tresult[ key ] = value[ key ];\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}, {} )\n\t\t\t: value\n\t);\n}\n\nfunction isPlainObject( value: unknown ): value is UnknownObject {\n\treturn !! value && typeof value === 'object' && ! Array.isArray( value );\n}\n\n// Inspired by:\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nexport function hashString( str: string, length?: number ): string {\n\tlet hashBasis = 5381;\n\n\tlet i = str.length;\n\twhile ( i ) {\n\t\thashBasis = ( hashBasis * 33 ) ^ str.charCodeAt( --i );\n\t}\n\n\t/* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n\t * integers. Since we want the results to be always positive, convert the\n\t * signed int to an unsigned by doing an unsigned bitshift. */\n\tconst result = ( hashBasis >>> 0 ).toString( 36 );\n\n\tif ( length === undefined ) {\n\t\treturn result;\n\t}\n\n\tconst sliced = result.slice( -length );\n\treturn sliced.padStart( length, '0' );\n}\n","import { useDebounceState, type UseDebounceStateResult } from './use-debounce-state';\n\nexport type UseSearchStateResult = UseDebounceStateResult;\n\nexport function useSearchState( { localStorageKey }: { localStorageKey?: string } ) {\n\tconst getInitialSearchValue = () => {\n\t\tif ( localStorageKey ) {\n\t\t\tconst storedValue = localStorage.getItem( localStorageKey );\n\t\t\tif ( storedValue ) {\n\t\t\t\tlocalStorage.removeItem( localStorageKey );\n\t\t\t\treturn storedValue;\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\tconst { debouncedValue, inputValue, handleChange } = useDebounceState( {\n\t\tdelay: 300,\n\t\tinitialValue: getInitialSearchValue(),\n\t} );\n\treturn {\n\t\tdebouncedValue,\n\t\tinputValue,\n\t\thandleChange,\n\t};\n}\n","export function generateUniqueId( prefix: string = '' ): string {\n\tconst prefixStr = prefix ? `${ prefix }-` : '';\n\n\treturn `${ prefixStr }${ Date.now() }-${ Math.random().toString( 36 ).substring( 2, 9 ) }`;\n}\n","export const capitalize = ( str: string ): string => {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n};\n","export const compareVersions = ( a: string | number, b: string | number ): number => {\n\tconst aParts = String( a || '0.0.0' )\n\t\t.split( '.' )\n\t\t.map( Number );\n\tconst bParts = String( b || '0.0.0' )\n\t\t.split( '.' )\n\t\t.map( Number );\n\n\tfor ( let i = 0; i < Math.max( aParts.length, bParts.length ); i++ ) {\n\t\tconst aVal = aParts[ i ] || 0;\n\t\tconst bVal = bParts[ i ] || 0;\n\t\tif ( aVal !== bVal ) {\n\t\t\treturn aVal - bVal;\n\t\t}\n\t}\n\treturn 0;\n};\n\nexport const isVersionLessThan = ( a: string | number, b: string | number ): boolean => {\n\treturn compareVersions( a, b ) < 0;\n};\n\nexport const isVersionGreaterOrEqual = ( a: string | number, b: string | number ): boolean => {\n\treturn compareVersions( a, b ) >= 0;\n};\n","export function hasProInstalled(): boolean {\n\treturn window.elementor?.helpers?.hasPro?.() ?? false;\n}\n\nexport function isProActive(): boolean {\n\tif ( ! hasProInstalled() ) {\n\t\treturn false;\n\t}\n\n\treturn window.elementorPro?.config?.isActive ?? false;\n}\n\nfunction getProVersion(): string {\n\treturn window.elementorPro?.config?.version ?? '0.0';\n}\n\nexport function isProAtLeast( targetVersion: string ): boolean {\n\tconst version = getProVersion();\n\n\tif ( ! version ) {\n\t\treturn false;\n\t}\n\n\tconst [ major, minor ] = version.split( '.' ).map( Number );\n\tconst [ targetMajor, targetMinor ] = targetVersion.split( '.' ).map( Number );\n\n\treturn major > targetMajor || ( major === targetMajor && minor >= targetMinor );\n}\n","type TranslateFunction = ( key: string, ...args: string[] ) => string;\n\ninterface CreateTranslateOptions {\n\tconfigKey: string;\n\tdefaultStrings?: Record< string, string >;\n}\n\nexport function createTranslate( { configKey, defaultStrings = {} }: CreateTranslateOptions ): TranslateFunction {\n\treturn ( key: string, ...args: string[] ): string => {\n\t\tconst appConfig = window.elementorAppConfig as\n\t\t\t| Record< string, { translations?: Record< string, string > } >\n\t\t\t| undefined;\n\t\tconst remoteStrings = Object.fromEntries(\n\t\t\tObject.entries( appConfig?.[ configKey ]?.translations ?? {} ).filter(\n\t\t\t\t( [ , value ] ) => 'string' === typeof value && '' !== value.trim()\n\t\t\t)\n\t\t);\n\t\tconst strings: Record< string, string > = {\n\t\t\t...defaultStrings,\n\t\t\t...remoteStrings,\n\t\t};\n\n\t\tlet template = strings[ key ];\n\n\t\tif ( ! template ) {\n\t\t\treturn key;\n\t\t}\n\n\t\tfor ( let i = 0; i < args.length; i++ ) {\n\t\t\ttemplate = template.replace( `%${ i + 1 }$s`, args[ i ] );\n\t\t\ttemplate = template.replace( '%s', args[ i ] );\n\t\t}\n\n\t\treturn template;\n\t};\n}\n"],"mappings":"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","names":["useEffect","useRef","useRef","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors/elementor-error.ts","../src/errors/create-error.ts","../src/errors/ensure-error.ts","../src/use-debounce-state.ts","../src/debounce.ts","../src/use-debounced-callback.ts","../src/throttle.ts","../src/encoding.ts","../src/hash.ts","../src/use-search-state.ts","../src/generate-unique-id.ts","../src/string-helpers.ts","../src/version.ts","../src/is-pro.ts","../src/translations.ts"],"sourcesContent":["export type ElementorErrorOptions = {\n\tcause?: Error[ 'cause' ];\n\tcontext?: Record< string, unknown > | null;\n\tcode: string;\n};\n\nexport class ElementorError extends Error {\n\treadonly context: ElementorErrorOptions[ 'context' ];\n\treadonly code: ElementorErrorOptions[ 'code' ];\n\n\tconstructor( message: string, { code, context = null, cause = null }: ElementorErrorOptions ) {\n\t\tsuper( message, { cause } );\n\t\tthis.context = context;\n\t\tthis.code = code;\n\t}\n}\n","import { ElementorError, type ElementorErrorOptions } from './elementor-error';\n\nexport type CreateErrorParams = {\n\tcode: ElementorErrorOptions[ 'code' ];\n\tmessage: string;\n};\n\nexport const createError = < T extends ElementorErrorOptions[ 'context' ] >( { code, message }: CreateErrorParams ) => {\n\treturn class extends ElementorError {\n\t\tconstructor( { cause, context }: { cause?: ElementorErrorOptions[ 'cause' ]; context?: T } = {} ) {\n\t\t\tsuper( message, { cause, code, context } );\n\t\t}\n\t};\n};\n","export const ensureError = ( error: unknown ) => {\n\tif ( error instanceof Error ) {\n\t\treturn error;\n\t}\n\n\tlet message: string;\n\tlet cause: unknown = null;\n\n\ttry {\n\t\tmessage = JSON.stringify( error );\n\t} catch ( e ) {\n\t\tcause = e;\n\t\tmessage = 'Unable to stringify the thrown value';\n\t}\n\treturn new Error( `Unexpected non-error thrown: ${ message }`, { cause } );\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport type * as React from 'react';\n\nimport { debounce } from './debounce';\n\nexport type UseDebounceStateOptions = {\n\tdelay?: number;\n\tinitialValue?: string;\n};\n\nexport type UseDebounceStateResult = {\n\tdebouncedValue: string;\n\tinputValue: string;\n\thandleChange: ( val: string ) => void;\n\tsetImmediateValue: ( val: string ) => void;\n\tsetInputValue: React.Dispatch< React.SetStateAction< string > >;\n};\n\nexport function useDebounceState( options: UseDebounceStateOptions = {} ): UseDebounceStateResult {\n\tconst { delay = 300, initialValue = '' } = options;\n\n\tconst [ debouncedValue, setDebouncedValue ] = useState( initialValue );\n\tconst [ inputValue, setInputValue ] = useState( initialValue );\n\n\tconst runRef = useRef< ReturnType< typeof debounce > | null >( null );\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\trunRef.current?.cancel?.();\n\t\t};\n\t}, [] );\n\n\tconst debouncedSetValue = useCallback(\n\t\t( val: string ) => {\n\t\t\trunRef.current?.cancel?.();\n\t\t\trunRef.current = debounce( () => {\n\t\t\t\tsetDebouncedValue( val );\n\t\t\t}, delay );\n\t\t\trunRef.current();\n\t\t},\n\t\t[ delay ]\n\t);\n\n\tconst handleChange = ( val: string ) => {\n\t\tsetInputValue( val );\n\t\tdebouncedSetValue( val );\n\t};\n\n\tconst setImmediateValue = ( val: string ) => {\n\t\trunRef.current?.cancel?.();\n\t\tsetInputValue( val );\n\t\tsetDebouncedValue( val );\n\t};\n\n\treturn {\n\t\tdebouncedValue,\n\t\tinputValue,\n\t\thandleChange,\n\t\tsetImmediateValue,\n\t\tsetInputValue,\n\t};\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function debounce< TArgs extends any[] >( fn: ( ...args: TArgs ) => void, wait: number ) {\n\tlet timer: ReturnType< typeof setTimeout > | null = null;\n\n\tconst cancel = () => {\n\t\tif ( ! timer ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( timer );\n\t\ttimer = null;\n\t};\n\n\tconst flush = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\tfn( ...args );\n\t};\n\n\tconst run = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\ttimer = setTimeout( () => {\n\t\t\tfn( ...args );\n\n\t\t\ttimer = null;\n\t\t}, wait );\n\t};\n\n\tconst pending = () => !! timer;\n\n\trun.flush = flush;\n\trun.cancel = cancel;\n\trun.pending = pending;\n\n\treturn run;\n}\n","import { useEffect, useMemo, useRef } from 'react';\n\nimport { debounce } from './debounce';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useDebouncedCallback< TArgs extends any[] >( callback: ( ...args: TArgs ) => void, delay: number ) {\n\tconst callbackRef = useRef( callback );\n\n\tuseEffect( () => {\n\t\tcallbackRef.current = callback;\n\t}, [ callback ] );\n\n\tconst debounced = useMemo(\n\t\t() => debounce( ( ...args: TArgs ) => callbackRef.current( ...args ), delay ),\n\t\t[ delay ]\n\t);\n\n\tuseEffect( () => {\n\t\treturn () => {\n\t\t\tdebounced.cancel();\n\t\t};\n\t}, [ debounced ] );\n\n\treturn debounced;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function throttle< TArgs extends any[] >(\n\tfn: ( ...args: TArgs ) => void,\n\twait: number,\n\tshouldExecuteIgnoredCalls: boolean = false\n) {\n\tlet timer: ReturnType< typeof setTimeout > | null = null;\n\tlet ignoredExecution: boolean = false;\n\n\tconst cancel = () => {\n\t\tif ( ! timer ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( timer );\n\t\ttimer = null;\n\t};\n\n\tconst flush = ( ...args: TArgs ) => {\n\t\tcancel();\n\n\t\tfn( ...args );\n\t};\n\n\tconst run = ( ...args: TArgs ) => {\n\t\tif ( timer ) {\n\t\t\tignoredExecution = true;\n\t\t\treturn;\n\t\t}\n\n\t\tfn( ...args );\n\n\t\ttimer = setTimeout( () => {\n\t\t\ttimer = null;\n\n\t\t\tif ( ignoredExecution && shouldExecuteIgnoredCalls ) {\n\t\t\t\tfn( ...args );\n\t\t\t}\n\n\t\t\tignoredExecution = false;\n\t\t}, wait );\n\t};\n\n\tconst pending = () => !! timer;\n\n\trun.flush = flush;\n\trun.cancel = cancel;\n\trun.pending = pending;\n\n\treturn run;\n}\n","export const encodeString = ( value: string ): string => {\n\tconst binary = Array.from( new TextEncoder().encode( value ), ( b ) => String.fromCharCode( b ) ).join( '' );\n\treturn btoa( binary );\n};\n\nexport const decodeString = < T = string >( value: string, fallback?: T ): string | T => {\n\ttry {\n\t\tconst binary = atob( value );\n\t\tconst bytes = new Uint8Array( Array.from( binary, ( char ) => char.charCodeAt( 0 ) ) );\n\t\treturn new TextDecoder().decode( bytes );\n\t} catch {\n\t\treturn fallback !== undefined ? fallback : '';\n\t}\n};\n","/* eslint-disable no-bitwise */\ntype UnknownObject = Record< string, unknown >;\n\n// Inspired by:\n// https://github.com/TanStack/query/blob/66ea5f2fc/packages/query-core/src/utils.ts#L212\nexport function hash( obj: UnknownObject ): string {\n\treturn JSON.stringify( obj, ( _, value ) =>\n\t\tisPlainObject( value )\n\t\t\t? Object.keys( value )\n\t\t\t\t\t.sort()\n\t\t\t\t\t.reduce< UnknownObject >( ( result, key ) => {\n\t\t\t\t\t\tresult[ key ] = value[ key ];\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}, {} )\n\t\t\t: value\n\t);\n}\n\nfunction isPlainObject( value: unknown ): value is UnknownObject {\n\treturn !! value && typeof value === 'object' && ! Array.isArray( value );\n}\n\n// Inspired by:\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nexport function hashString( str: string, length?: number ): string {\n\tlet hashBasis = 5381;\n\n\tlet i = str.length;\n\twhile ( i ) {\n\t\thashBasis = ( hashBasis * 33 ) ^ str.charCodeAt( --i );\n\t}\n\n\t/* JavaScript does bitwise operations (like XOR, above) on 32-bit signed\n\t * integers. Since we want the results to be always positive, convert the\n\t * signed int to an unsigned by doing an unsigned bitshift. */\n\tconst result = ( hashBasis >>> 0 ).toString( 36 );\n\n\tif ( length === undefined ) {\n\t\treturn result;\n\t}\n\n\tconst sliced = result.slice( -length );\n\treturn sliced.padStart( length, '0' );\n}\n","import { useDebounceState, type UseDebounceStateResult } from './use-debounce-state';\n\nexport type UseSearchStateResult = UseDebounceStateResult;\n\nexport function useSearchState( { localStorageKey }: { localStorageKey?: string } ) {\n\tconst getInitialSearchValue = () => {\n\t\tif ( localStorageKey ) {\n\t\t\tconst storedValue = localStorage.getItem( localStorageKey );\n\t\t\tif ( storedValue ) {\n\t\t\t\tlocalStorage.removeItem( localStorageKey );\n\t\t\t\treturn storedValue;\n\t\t\t}\n\t\t}\n\t\treturn '';\n\t};\n\tconst { debouncedValue, inputValue, handleChange } = useDebounceState( {\n\t\tdelay: 300,\n\t\tinitialValue: getInitialSearchValue(),\n\t} );\n\treturn {\n\t\tdebouncedValue,\n\t\tinputValue,\n\t\thandleChange,\n\t};\n}\n","export function generateUniqueId( prefix: string = '' ): string {\n\tconst prefixStr = prefix ? `${ prefix }-` : '';\n\n\treturn `${ prefixStr }${ Date.now() }-${ Math.random().toString( 36 ).substring( 2, 9 ) }`;\n}\n","export const capitalize = ( str: string ): string => {\n\treturn str.charAt( 0 ).toUpperCase() + str.slice( 1 );\n};\n","export const compareVersions = ( a: string | number, b: string | number ): number => {\n\tconst aParts = String( a || '0.0.0' )\n\t\t.split( '.' )\n\t\t.map( Number );\n\tconst bParts = String( b || '0.0.0' )\n\t\t.split( '.' )\n\t\t.map( Number );\n\n\tfor ( let i = 0; i < Math.max( aParts.length, bParts.length ); i++ ) {\n\t\tconst aVal = aParts[ i ] || 0;\n\t\tconst bVal = bParts[ i ] || 0;\n\t\tif ( aVal !== bVal ) {\n\t\t\treturn aVal - bVal;\n\t\t}\n\t}\n\treturn 0;\n};\n\nexport const isVersionLessThan = ( a: string | number, b: string | number ): boolean => {\n\treturn compareVersions( a, b ) < 0;\n};\n\nexport const isVersionGreaterOrEqual = ( a: string | number, b: string | number ): boolean => {\n\treturn compareVersions( a, b ) >= 0;\n};\n","export function hasProInstalled(): boolean {\n\treturn window.elementor?.helpers?.hasPro?.() ?? false;\n}\n\nexport function isProActive(): boolean {\n\tif ( ! hasProInstalled() ) {\n\t\treturn false;\n\t}\n\n\treturn window.elementorPro?.config?.isActive ?? false;\n}\n\nfunction getProVersion(): string {\n\treturn window.elementorPro?.config?.version ?? '0.0';\n}\n\nexport function isProAtLeast( targetVersion: string ): boolean {\n\tconst version = getProVersion();\n\n\tif ( ! version ) {\n\t\treturn false;\n\t}\n\n\tconst [ major, minor ] = version.split( '.' ).map( Number );\n\tconst [ targetMajor, targetMinor ] = targetVersion.split( '.' ).map( Number );\n\n\treturn major > targetMajor || ( major === targetMajor && minor >= targetMinor );\n}\n","type TranslateFunction = ( key: string, ...args: string[] ) => string;\n\ninterface CreateTranslateOptions {\n\tconfigKey: string;\n\tdefaultStrings?: Record< string, string >;\n}\n\nexport function createTranslate( { configKey, defaultStrings = {} }: CreateTranslateOptions ): TranslateFunction {\n\treturn ( key: string, ...args: string[] ): string => {\n\t\tconst appConfig = window.elementorAppConfig as\n\t\t\t| Record< string, { translations?: Record< string, string > } >\n\t\t\t| undefined;\n\t\tconst remoteStrings = Object.fromEntries(\n\t\t\tObject.entries( appConfig?.[ configKey ]?.translations ?? {} ).filter(\n\t\t\t\t( [ , value ] ) => 'string' === typeof value && '' !== value.trim()\n\t\t\t)\n\t\t);\n\t\tconst strings: Record< string, string > = {\n\t\t\t...defaultStrings,\n\t\t\t...remoteStrings,\n\t\t};\n\n\t\tlet template = strings[ key ];\n\n\t\tif ( ! template ) {\n\t\t\treturn key;\n\t\t}\n\n\t\tfor ( let i = 0; i < args.length; i++ ) {\n\t\t\ttemplate = template.replace( `%${ i + 1 }$s`, args[ i ] );\n\t\t\ttemplate = template.replace( '%s', args[ i ] );\n\t\t}\n\n\t\treturn template;\n\t};\n}\n"],"mappings":";AAMO,IAAM,iBAAN,cAA6B,MAAM;AAAA,EAChC;AAAA,EACA;AAAA,EAET,YAAa,SAAiB,EAAE,MAAM,UAAU,MAAM,QAAQ,KAAK,GAA2B;AAC7F,UAAO,SAAS,EAAE,MAAM,CAAE;AAC1B,SAAK,UAAU;AACf,SAAK,OAAO;AAAA,EACb;AACD;;;ACRO,IAAM,cAAc,CAAkD,EAAE,MAAM,QAAQ,MAA0B;AACtH,SAAO,cAAc,eAAe;AAAA,IACnC,YAAa,EAAE,OAAO,QAAQ,IAA+D,CAAC,GAAI;AACjG,YAAO,SAAS,EAAE,OAAO,MAAM,QAAQ,CAAE;AAAA,IAC1C;AAAA,EACD;AACD;;;ACbO,IAAM,cAAc,CAAE,UAAoB;AAChD,MAAK,iBAAiB,OAAQ;AAC7B,WAAO;AAAA,EACR;AAEA,MAAI;AACJ,MAAI,QAAiB;AAErB,MAAI;AACH,cAAU,KAAK,UAAW,KAAM;AAAA,EACjC,SAAU,GAAI;AACb,YAAQ;AACR,cAAU;AAAA,EACX;AACA,SAAO,IAAI,MAAO,gCAAiC,OAAQ,IAAI,EAAE,MAAM,CAAE;AAC1E;;;ACfA,SAAS,aAAa,WAAW,QAAQ,gBAAgB;;;ACClD,SAAS,SAAiC,IAAgC,MAAe;AAC/F,MAAI,QAAgD;AAEpD,QAAM,SAAS,MAAM;AACpB,QAAK,CAAE,OAAQ;AACd;AAAA,IACD;AAEA,iBAAc,KAAM;AACpB,YAAQ;AAAA,EACT;AAEA,QAAM,QAAQ,IAAK,SAAiB;AACnC,WAAO;AAEP,OAAI,GAAG,IAAK;AAAA,EACb;AAEA,QAAM,MAAM,IAAK,SAAiB;AACjC,WAAO;AAEP,YAAQ,WAAY,MAAM;AACzB,SAAI,GAAG,IAAK;AAEZ,cAAQ;AAAA,IACT,GAAG,IAAK;AAAA,EACT;AAEA,QAAM,UAAU,MAAM,CAAC,CAAE;AAEzB,MAAI,QAAQ;AACZ,MAAI,SAAS;AACb,MAAI,UAAU;AAEd,SAAO;AACR;;;ADlBO,SAAS,iBAAkB,UAAmC,CAAC,GAA4B;AACjG,QAAM,EAAE,QAAQ,KAAK,eAAe,GAAG,IAAI;AAE3C,QAAM,CAAE,gBAAgB,iBAAkB,IAAI,SAAU,YAAa;AACrE,QAAM,CAAE,YAAY,aAAc,IAAI,SAAU,YAAa;AAE7D,QAAM,SAAS,OAAgD,IAAK;AAEpE,YAAW,MAAM;AAChB,WAAO,MAAM;AACZ,aAAO,SAAS,SAAS;AAAA,IAC1B;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,QAAM,oBAAoB;AAAA,IACzB,CAAE,QAAiB;AAClB,aAAO,SAAS,SAAS;AACzB,aAAO,UAAU,SAAU,MAAM;AAChC,0BAAmB,GAAI;AAAA,MACxB,GAAG,KAAM;AACT,aAAO,QAAQ;AAAA,IAChB;AAAA,IACA,CAAE,KAAM;AAAA,EACT;AAEA,QAAM,eAAe,CAAE,QAAiB;AACvC,kBAAe,GAAI;AACnB,sBAAmB,GAAI;AAAA,EACxB;AAEA,QAAM,oBAAoB,CAAE,QAAiB;AAC5C,WAAO,SAAS,SAAS;AACzB,kBAAe,GAAI;AACnB,sBAAmB,GAAI;AAAA,EACxB;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AE7DA,SAAS,aAAAA,YAAW,SAAS,UAAAC,eAAc;AAKpC,SAAS,qBAA6C,UAAsC,OAAgB;AAClH,QAAM,cAAcC,QAAQ,QAAS;AAErC,EAAAC,WAAW,MAAM;AAChB,gBAAY,UAAU;AAAA,EACvB,GAAG,CAAE,QAAS,CAAE;AAEhB,QAAM,YAAY;AAAA,IACjB,MAAM,SAAU,IAAK,SAAiB,YAAY,QAAS,GAAG,IAAK,GAAG,KAAM;AAAA,IAC5E,CAAE,KAAM;AAAA,EACT;AAEA,EAAAA,WAAW,MAAM;AAChB,WAAO,MAAM;AACZ,gBAAU,OAAO;AAAA,IAClB;AAAA,EACD,GAAG,CAAE,SAAU,CAAE;AAEjB,SAAO;AACR;;;ACvBO,SAAS,SACf,IACA,MACA,4BAAqC,OACpC;AACD,MAAI,QAAgD;AACpD,MAAI,mBAA4B;AAEhC,QAAM,SAAS,MAAM;AACpB,QAAK,CAAE,OAAQ;AACd;AAAA,IACD;AAEA,iBAAc,KAAM;AACpB,YAAQ;AAAA,EACT;AAEA,QAAM,QAAQ,IAAK,SAAiB;AACnC,WAAO;AAEP,OAAI,GAAG,IAAK;AAAA,EACb;AAEA,QAAM,MAAM,IAAK,SAAiB;AACjC,QAAK,OAAQ;AACZ,yBAAmB;AACnB;AAAA,IACD;AAEA,OAAI,GAAG,IAAK;AAEZ,YAAQ,WAAY,MAAM;AACzB,cAAQ;AAER,UAAK,oBAAoB,2BAA4B;AACpD,WAAI,GAAG,IAAK;AAAA,MACb;AAEA,yBAAmB;AAAA,IACpB,GAAG,IAAK;AAAA,EACT;AAEA,QAAM,UAAU,MAAM,CAAC,CAAE;AAEzB,MAAI,QAAQ;AACZ,MAAI,SAAS;AACb,MAAI,UAAU;AAEd,SAAO;AACR;;;AClDO,IAAM,eAAe,CAAE,UAA2B;AACxD,QAAM,SAAS,MAAM,KAAM,IAAI,YAAY,EAAE,OAAQ,KAAM,GAAG,CAAE,MAAO,OAAO,aAAc,CAAE,CAAE,EAAE,KAAM,EAAG;AAC3G,SAAO,KAAM,MAAO;AACrB;AAEO,IAAM,eAAe,CAAgB,OAAe,aAA8B;AACxF,MAAI;AACH,UAAM,SAAS,KAAM,KAAM;AAC3B,UAAM,QAAQ,IAAI,WAAY,MAAM,KAAM,QAAQ,CAAE,SAAU,KAAK,WAAY,CAAE,CAAE,CAAE;AACrF,WAAO,IAAI,YAAY,EAAE,OAAQ,KAAM;AAAA,EACxC,QAAQ;AACP,WAAO,aAAa,SAAY,WAAW;AAAA,EAC5C;AACD;;;ACRO,SAAS,KAAM,KAA6B;AAClD,SAAO,KAAK;AAAA,IAAW;AAAA,IAAK,CAAE,GAAG,UAChC,cAAe,KAAM,IAClB,OAAO,KAAM,KAAM,EAClB,KAAK,EACL,OAAyB,CAAE,QAAQ,QAAS;AAC5C,aAAQ,GAAI,IAAI,MAAO,GAAI;AAE3B,aAAO;AAAA,IACR,GAAG,CAAC,CAAE,IACN;AAAA,EACJ;AACD;AAEA,SAAS,cAAe,OAAyC;AAChE,SAAO,CAAC,CAAE,SAAS,OAAO,UAAU,YAAY,CAAE,MAAM,QAAS,KAAM;AACxE;AAIO,SAAS,WAAY,KAAa,QAA0B;AAClE,MAAI,YAAY;AAEhB,MAAI,IAAI,IAAI;AACZ,SAAQ,GAAI;AACX,gBAAc,YAAY,KAAO,IAAI,WAAY,EAAE,CAAE;AAAA,EACtD;AAKA,QAAM,UAAW,cAAc,GAAI,SAAU,EAAG;AAEhD,MAAK,WAAW,QAAY;AAC3B,WAAO;AAAA,EACR;AAEA,QAAM,SAAS,OAAO,MAAO,CAAC,MAAO;AACrC,SAAO,OAAO,SAAU,QAAQ,GAAI;AACrC;;;ACxCO,SAAS,eAAgB,EAAE,gBAAgB,GAAkC;AACnF,QAAM,wBAAwB,MAAM;AACnC,QAAK,iBAAkB;AACtB,YAAM,cAAc,aAAa,QAAS,eAAgB;AAC1D,UAAK,aAAc;AAClB,qBAAa,WAAY,eAAgB;AACzC,eAAO;AAAA,MACR;AAAA,IACD;AACA,WAAO;AAAA,EACR;AACA,QAAM,EAAE,gBAAgB,YAAY,aAAa,IAAI,iBAAkB;AAAA,IACtE,OAAO;AAAA,IACP,cAAc,sBAAsB;AAAA,EACrC,CAAE;AACF,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;ACxBO,SAAS,iBAAkB,SAAiB,IAAa;AAC/D,QAAM,YAAY,SAAS,GAAI,MAAO,MAAM;AAE5C,SAAO,GAAI,SAAU,GAAI,KAAK,IAAI,CAAE,IAAK,KAAK,OAAO,EAAE,SAAU,EAAG,EAAE,UAAW,GAAG,CAAE,CAAE;AACzF;;;ACJO,IAAM,aAAa,CAAE,QAAyB;AACpD,SAAO,IAAI,OAAQ,CAAE,EAAE,YAAY,IAAI,IAAI,MAAO,CAAE;AACrD;;;ACFO,IAAM,kBAAkB,CAAE,GAAoB,MAAgC;AACpF,QAAM,SAAS,OAAQ,KAAK,OAAQ,EAClC,MAAO,GAAI,EACX,IAAK,MAAO;AACd,QAAM,SAAS,OAAQ,KAAK,OAAQ,EAClC,MAAO,GAAI,EACX,IAAK,MAAO;AAEd,WAAU,IAAI,GAAG,IAAI,KAAK,IAAK,OAAO,QAAQ,OAAO,MAAO,GAAG,KAAM;AACpE,UAAM,OAAO,OAAQ,CAAE,KAAK;AAC5B,UAAM,OAAO,OAAQ,CAAE,KAAK;AAC5B,QAAK,SAAS,MAAO;AACpB,aAAO,OAAO;AAAA,IACf;AAAA,EACD;AACA,SAAO;AACR;AAEO,IAAM,oBAAoB,CAAE,GAAoB,MAAiC;AACvF,SAAO,gBAAiB,GAAG,CAAE,IAAI;AAClC;AAEO,IAAM,0BAA0B,CAAE,GAAoB,MAAiC;AAC7F,SAAO,gBAAiB,GAAG,CAAE,KAAK;AACnC;;;ACxBO,SAAS,kBAA2B;AAC1C,SAAO,OAAO,WAAW,SAAS,SAAS,KAAK;AACjD;AAEO,SAAS,cAAuB;AACtC,MAAK,CAAE,gBAAgB,GAAI;AAC1B,WAAO;AAAA,EACR;AAEA,SAAO,OAAO,cAAc,QAAQ,YAAY;AACjD;AAEA,SAAS,gBAAwB;AAChC,SAAO,OAAO,cAAc,QAAQ,WAAW;AAChD;AAEO,SAAS,aAAc,eAAiC;AAC9D,QAAM,UAAU,cAAc;AAE9B,MAAK,CAAE,SAAU;AAChB,WAAO;AAAA,EACR;AAEA,QAAM,CAAE,OAAO,KAAM,IAAI,QAAQ,MAAO,GAAI,EAAE,IAAK,MAAO;AAC1D,QAAM,CAAE,aAAa,WAAY,IAAI,cAAc,MAAO,GAAI,EAAE,IAAK,MAAO;AAE5E,SAAO,QAAQ,eAAiB,UAAU,eAAe,SAAS;AACnE;;;ACpBO,SAAS,gBAAiB,EAAE,WAAW,iBAAiB,CAAC,EAAE,GAA+C;AAChH,SAAO,CAAE,QAAgB,SAA4B;AACpD,UAAM,YAAY,OAAO;AAGzB,UAAM,gBAAgB,OAAO;AAAA,MAC5B,OAAO,QAAS,YAAa,SAAU,GAAG,gBAAgB,CAAC,CAAE,EAAE;AAAA,QAC9D,CAAE,CAAE,EAAE,KAAM,MAAO,aAAa,OAAO,SAAS,OAAO,MAAM,KAAK;AAAA,MACnE;AAAA,IACD;AACA,UAAM,UAAoC;AAAA,MACzC,GAAG;AAAA,MACH,GAAG;AAAA,IACJ;AAEA,QAAI,WAAW,QAAS,GAAI;AAE5B,QAAK,CAAE,UAAW;AACjB,aAAO;AAAA,IACR;AAEA,aAAU,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAM;AACvC,iBAAW,SAAS,QAAS,IAAK,IAAI,CAAE,MAAM,KAAM,CAAE,CAAE;AACxD,iBAAW,SAAS,QAAS,MAAM,KAAM,CAAE,CAAE;AAAA,IAC9C;AAEA,WAAO;AAAA,EACR;AACD;","names":["useEffect","useRef","useRef","useEffect"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/utils",
|
|
3
3
|
"description": "This package contains utility functions that are being used across the Elementor packages",
|
|
4
|
-
"version": "4.4.0-
|
|
4
|
+
"version": "4.4.0-1079",
|
|
5
5
|
"private": false,
|
|
6
6
|
"author": "Elementor Team",
|
|
7
7
|
"homepage": "https://elementor.com/",
|
|
@@ -12,6 +12,7 @@ export type UseDebounceStateResult = {
|
|
|
12
12
|
debouncedValue: string;
|
|
13
13
|
inputValue: string;
|
|
14
14
|
handleChange: ( val: string ) => void;
|
|
15
|
+
setImmediateValue: ( val: string ) => void;
|
|
15
16
|
setInputValue: React.Dispatch< React.SetStateAction< string > >;
|
|
16
17
|
};
|
|
17
18
|
|
|
@@ -45,10 +46,17 @@ export function useDebounceState( options: UseDebounceStateOptions = {} ): UseDe
|
|
|
45
46
|
debouncedSetValue( val );
|
|
46
47
|
};
|
|
47
48
|
|
|
49
|
+
const setImmediateValue = ( val: string ) => {
|
|
50
|
+
runRef.current?.cancel?.();
|
|
51
|
+
setInputValue( val );
|
|
52
|
+
setDebouncedValue( val );
|
|
53
|
+
};
|
|
54
|
+
|
|
48
55
|
return {
|
|
49
56
|
debouncedValue,
|
|
50
57
|
inputValue,
|
|
51
58
|
handleChange,
|
|
59
|
+
setImmediateValue,
|
|
52
60
|
setInputValue,
|
|
53
61
|
};
|
|
54
62
|
}
|