UNPKG

@sixbell-telco/sdk

Version:

A collection of reusable components designed for use in Sixbell Telco Angular projects

1 lines 4.59 kB
{"version":3,"file":"sixbell-telco-sdk-utils-sync.mjs","sources":["../../../projects/sdk/utils/sync/src/sync.ts","../../../projects/sdk/utils/sync/sixbell-telco-sdk-utils-sync.ts"],"sourcesContent":["/**\n * Async utility helpers for reliable DOM synchronization and timing control.\n * These utilities provide browser-native timing mechanisms that are more reliable\n * than hardcoded setTimeout values across different environments and platforms.\n */\nexport class SyncUtils {\n\t/**\n\t * Wait for next microtask (more reliable than setTimeout(0))\n\t * Useful for ensuring state updates are processed before DOM operations\n\t */\n\tstatic nextTick(): Promise<void> {\n\t\treturn new Promise((resolve) => queueMicrotask(resolve));\n\t}\n\n\t/**\n\t * Wait for next animation frame (better for DOM updates)\n\t * Ideal for synchronizing with browser rendering cycles\n\t */\n\tstatic nextFrame(): Promise<void> {\n\t\treturn new Promise((resolve) => requestAnimationFrame(() => resolve()));\n\t}\n\n\t/**\n\t * Wait for DOM element to be available\n\t * Useful for web components or dynamically created elements\n\t */\n\tstatic async waitForElement(selector: string, maxAttempts = 10): Promise<HTMLElement | null> {\n\t\tfor (let i = 0; i < maxAttempts; i++) {\n\t\t\tconst element = document.querySelector(selector) as HTMLElement;\n\t\t\tif (element) return element;\n\t\t\tawait this.nextFrame();\n\t\t}\n\t\treturn null;\n\t}\n\n\t/**\n\t * Wait for a condition to be met with timeout\n\t * Generic utility for polling-based waiting\n\t */\n\tstatic async waitForCondition(\n\t\tcondition: () => boolean | Promise<boolean>,\n\t\tmaxAttempts = 20,\n\t\tdelayStrategy: 'tick' | 'frame' = 'tick',\n\t): Promise<boolean> {\n\t\tfor (let i = 0; i < maxAttempts; i++) {\n\t\t\tconst result = await condition();\n\t\t\tif (result) return true;\n\n\t\t\tif (delayStrategy === 'frame') {\n\t\t\t\tawait this.nextFrame();\n\t\t\t} else {\n\t\t\t\tawait this.nextTick();\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Debounce utility for preventing rapid successive calls\n\t * Returns a debounced version of the provided function\n\t */\n\tstatic debounce<T extends (...args: unknown[]) => unknown>(func: T, wait: number): (...args: Parameters<T>) => void {\n\t\tlet timeout: ReturnType<typeof setTimeout> | undefined;\n\t\treturn (...args: Parameters<T>): void => {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = globalThis.setTimeout(() => func(...args), wait);\n\t\t};\n\t}\n\n\t/**\n\t * Throttle utility for limiting function execution frequency\n\t * Returns a throttled version of the provided function\n\t */\n\tstatic throttle<T extends (...args: unknown[]) => unknown>(func: T, limit: number): (...args: Parameters<T>) => void {\n\t\tlet inThrottle = false;\n\t\treturn (...args: Parameters<T>): void => {\n\t\t\tif (!inThrottle) {\n\t\t\t\tfunc(...args);\n\t\t\t\tinThrottle = true;\n\t\t\t\tsetTimeout(() => (inThrottle = false), limit);\n\t\t\t}\n\t\t};\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;;;AAIG;MACU,SAAS,CAAA;AACrB;;;AAGG;AACH,IAAA,OAAO,QAAQ,GAAA;AACd,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,cAAc,CAAC,OAAO,CAAC,CAAC;;AAGzD;;;AAGG;AACH,IAAA,OAAO,SAAS,GAAA;AACf,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,qBAAqB,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC;;AAGxE;;;AAGG;IACH,aAAa,cAAc,CAAC,QAAgB,EAAE,WAAW,GAAG,EAAE,EAAA;AAC7D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAgB;AAC/D,YAAA,IAAI,OAAO;AAAE,gBAAA,OAAO,OAAO;AAC3B,YAAA,MAAM,IAAI,CAAC,SAAS,EAAE;;AAEvB,QAAA,OAAO,IAAI;;AAGZ;;;AAGG;AACH,IAAA,aAAa,gBAAgB,CAC5B,SAA2C,EAC3C,WAAW,GAAG,EAAE,EAChB,aAAA,GAAkC,MAAM,EAAA;AAExC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AAChC,YAAA,IAAI,MAAM;AAAE,gBAAA,OAAO,IAAI;AAEvB,YAAA,IAAI,aAAa,KAAK,OAAO,EAAE;AAC9B,gBAAA,MAAM,IAAI,CAAC,SAAS,EAAE;;iBAChB;AACN,gBAAA,MAAM,IAAI,CAAC,QAAQ,EAAE;;;AAGvB,QAAA,OAAO,KAAK;;AAGb;;;AAGG;AACH,IAAA,OAAO,QAAQ,CAA4C,IAAO,EAAE,IAAY,EAAA;AAC/E,QAAA,IAAI,OAAkD;AACtD,QAAA,OAAO,CAAC,GAAG,IAAmB,KAAU;YACvC,YAAY,CAAC,OAAO,CAAC;AACrB,YAAA,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC;AAC3D,SAAC;;AAGF;;;AAGG;AACH,IAAA,OAAO,QAAQ,CAA4C,IAAO,EAAE,KAAa,EAAA;QAChF,IAAI,UAAU,GAAG,KAAK;AACtB,QAAA,OAAO,CAAC,GAAG,IAAmB,KAAU;YACvC,IAAI,CAAC,UAAU,EAAE;AAChB,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC;gBACb,UAAU,GAAG,IAAI;AACjB,gBAAA,UAAU,CAAC,OAAO,UAAU,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC;;AAE/C,SAAC;;AAEF;;ACnFD;;AAEG;;;;"}