hyperfloat 0.0.0-stage → 1.0.45

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperfloat.min.js","sources":["../../packages/core/src/constants/hooks.js","../../packages/core/src/constants/placementOptions.js","../../packages/core/src/constants/allowedValues.js","../../packages/core/src/utils/resolveRenderOutput.js","../../packages/core/src/utils/customRendering.js","../../packages/core/src/utils/createElement.js","../../packages/core/src/utils/toArray.js","../../packages/core/src/utils/generateUUID.js","../../packages/core/src/utils/getValueType.js","../../packages/core/src/utils/resolveCssLength.js","../../packages/core/src/utils/getComputedCssLength.js","../../packages/core/src/utils/resolveCssSize.js","../../packages/core/src/utils/normalizeDelay.js","../../packages/core/src/manager/validate.js","../../packages/core/src/manager/sync.js","../../packages/core/src/manager/raf.js","../../packages/core/src/manager/pointer.js","../../packages/core/src/helpers/normalizers.js","../../packages/core/src/utils/resolveCssBox.js","../../packages/core/src/helpers/validators.js","../../packages/core/src/helpers/parsers.js","../../packages/core/src/manager.js","../../packages/core/src/manager/mount.js","../../packages/core/src/manager/hooks.js","../../packages/core/src/manager/actions.js","../../packages/core/src/manager/options.js","../../packages/core/src/helpers/getManager.js","../../packages/core/src/instance/hooks.js","../../packages/core/src/helpers/listener.js","../../packages/core/src/instance/dismiss.js","../../packages/core/src/helpers/applicators.js","../../packages/core/src/helpers/calcOffsetMargin.js","../../packages/core/src/instance/setters.js","../../packages/core/src/constants/baseOptions.js","../../packages/core/src/constants/breakpointOptions.js","../../packages/core/src/instance/breakpoints.js","../../packages/core/src/helpers/computePosition/calcPosition.js","../../packages/core/src/helpers/computePosition.js","../../packages/core/src/helpers/computePosition/calcOffset.js","../../packages/core/src/helpers/computePosition/calcShift.js","../../packages/core/src/helpers/computePosition/calcFlip.js","../../packages/core/src/instance/registry.js","../../packages/core/src/helpers/interpolate.js","../../packages/core/src/manager/prioritize.js","../../packages/core/src/instance/draggable.js","../../packages/core/src/instance/sync.js","../../packages/core/src/utils/isOutsideViewport.js","../../packages/core/src/instance/actions.js","../../packages/core/src/instance/initializer.js","../../packages/core/src/instance/mount.js","../../packages/core/src/instance.js","../../packages/core/src/helpers/console.js"],"sourcesContent":["// src/constants/hooks.js\n\nexport default [\n \n 'onBeforeInit',\n\n 'onInit',\n\n 'onAfterInit',\n\n 'onReady',\n\n 'onSync',\n\n 'onDestroy',\n\n 'onBeforeOpen',\n\n 'onOpen',\n\n 'onAfterOpen',\n\n 'onBeforeClose',\n\n 'onClose',\n\n 'onAfterClose',\n\n 'onRefresh',\n\n 'onUpdate',\n\n /*'onBeforeUpdate',\n\n 'onUpdate',\n\n 'onAfterUpdate',*/\n\n 'onMove',\n];","// src/constants/placementOptions.js\n\nexport default [\n 'center',\n\n 'top',\n 'top-start',\n 'top-end',\n\n 'right',\n 'right-start',\n 'right-end',\n\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n\n 'left',\n 'left-start',\n 'left-end',\n]; ","// src/constants/allowedValues.js\n\nimport hookList from \"./hooks.js\";\nimport placementOptions from \"./placementOptions.js\";\n\n//------------------------------------------------------\n// Hooks\n\nconst hookValues = {};\n\nhookList.forEach(hook => {\n\n hookValues[hook] = {\n\n type: [\n 'null',\n 'function'\n ],\n default: null\n };\n});\n\nexport default {\n\n id: {\n type: 'string',\n default: ''\n },\n\n meta: {\n type: ['null', 'object'],\n default: {\n type: 'default',\n variant: 'default',\n role: 'dialog',\n }\n },\n\n accessibility: {\n type: ['null', 'object'],\n default: {\n role: 'dialog',\n label: 'dialog',\n modal: false,\n },\n },\n\n anchor: {\n type: ['string'],\n values: [\n 'viewport',\n 'element',\n 'pointer'\n ],\n default: 'viewport'\n },\n\n open: {\n type: [\n 'null',\n 'string',\n 'element',\n 'node',\n 'nodeList',\n 'array',\n 'object'\n ],\n default: null\n },\n\n close: {\n type: [\n 'null',\n 'string',\n 'element',\n 'node',\n 'nodeList',\n 'array'\n ],\n default: null\n },\n\n ignoreCloseAll: {\n type: 'boolean',\n default: false\n },\n\n autoOpen: {\n type: 'boolean',\n default: false\n },\n\n destroyAfterClose: {\n type: 'boolean',\n default: false\n },\n\n overlay: {\n type: ['boolean', 'object'],\n default: null,\n /*\n {\n color: 'black',\n blur: true,\n }\n */\n },\n\n placement: {\n type: 'string',\n values: placementOptions,\n default: 'center'\n },\n\n boundaryPadding: {\n type: ['string', 'number', 'object', 'null'],\n default: 0,\n },\n\n draggable: {\n type: ['boolean', 'object'],\n default: null,\n /*\n {\n bounds: false,\n }\n */\n },\n\n offset: {\n type: ['string', 'number', 'object', 'null'],\n default: null,\n /*\n {\n mainAxis: 0,\n crossAxis: 0,\n alignmentAxis: null\n }\n */\n },\n\n flip: {\n type: ['object', 'boolean', 'null'],\n default: null,\n /*\n {\n mainAxis: true,\n crossAxis: true\n }\n */\n },\n\n shift: {\n type: ['object', 'boolean', 'null'],\n default: null,\n /*\n {\n mainAxis: true,\n crossAxis: false,\n padding: 0\n }\n */\n },\n\n dismiss: {\n type: 'object',\n default: {\n outsideClick: false,\n outsideWheel: false,\n escapeKey: false,\n pointerLeave: false,\n closeWithParent: false,\n timeout: null,\n idleTimeout: null,\n }\n },\n\n size: {\n type: ['string', 'number', 'object'],\n default: 'small',\n },\n\n breakpoints: {\n type: 'object',\n default: {}\n },\n\n content: {\n type: [\n 'null',\n 'string',\n 'function',\n 'node'\n ],\n default: null\n },\n\n header: {\n type: [\n 'null',\n 'string',\n 'function',\n 'node'\n ],\n default: null\n },\n\n footer: {\n type: [\n 'null',\n 'string',\n 'function',\n 'node'\n ],\n default: null\n },\n\n vars: {\n type: [\n 'null',\n 'object',\n ],\n default: {}\n },\n\n interpolate: {\n type: ['null', 'function'],\n default: null\n },\n\n debug: {\n type: 'boolean',\n default: false\n },\n\n\n ...hookValues,\n};","export function resolveRenderOutput(renderItem, context = {}) {\n\n if (typeof renderItem === 'function') {\n\n let result = renderItem.call(context);\n\n /*if (result instanceof Promise) {\n result = await result;\n }*/\n\n // No suported promises\n\n return resolveRenderOutput(result, context);\n }\n\n // Promise direta\n if (renderItem instanceof Promise) {\n\n // No suported promises\n\n return resolveRenderOutput(renderItem, context);\n\n //return resolveRenderOutput(await renderItem, context);\n }\n\n // Se for um Node (elemento DOM), retorna direto\n if (renderItem instanceof Node) {\n\n return renderItem;\n }\n\n // Se for string\n if (typeof renderItem === 'string') {\n const trimmed = renderItem.trim();\n\n // Detecta se é HTML com uma tag no início\n const isHTML = /^<.+?>/.test(trimmed);\n\n if (isHTML) {\n\n const tempContainer = document.createElement('div');\n tempContainer.innerHTML = trimmed;\n\n const fragment = document.createDocumentFragment();\n\n while (tempContainer.firstChild) {\n fragment.appendChild(tempContainer.firstChild);\n }\n\n return fragment;\n\n } else {\n\n // Texto puro\n return document.createTextNode(trimmed);\n }\n }\n\n // Fallback\n return renderItem;\n};","import {\n resolveRenderOutput,\n} from './resolveRenderOutput.js';\n\nexport function customRendering(rawRender, context = {}, insertIn = null) {\n\n if (!rawRender) return null;\n\n //if (!key || !insertIn) return null;\n //if (!this.customRenderList[key] || typeof key !== 'string') return null;\n //const rawRender = this.customRenderList[key];\n\n const customRender = resolveRenderOutput(rawRender, context);\n // await resolveRenderOutput(rawRender, context);\n\n if (!customRender) return null;\n\n if (!insertIn) {\n\n const hyperfloatRoot = document.querySelector('._trivon-ui-hyperfloat');\n\n let sandbox = hyperfloatRoot.querySelector('[data-hyperfloat-sandbox]');\n\n if (!sandbox) {\n\n sandbox = document.createElement('div');\n sandbox.dataset.hyperfloatSandbox = \"\";\n hyperfloatRoot.appendChild(sandbox);\n }\n\n insertIn = sandbox;\n }\n\n let inserted;\n\n if (customRender instanceof DocumentFragment) {\n\n inserted = Array.from(customRender.childNodes);\n insertIn.appendChild(customRender);\n\n } else if (Array.isArray(customRender)) {\n\n inserted = customRender;\n insertIn.append(...customRender);\n\n } else if (customRender instanceof Node) {\n\n inserted = [customRender];\n insertIn.appendChild(customRender);\n }\n\n return inserted?.[0] || null;\n};","\nimport {\n customRendering,\n} from './customRendering.js';\n\nexport function createElement(tag, options = {}) {\n\n const element = document.createElement(tag);\n\n // Adiciona classes, atributos e texto, se fornecidos\n if (options.class) {\n\n const classList = Array.isArray(options.class)\n ? options.class\n : options.class.trim().split(/\\s+/);\n element.classList.add(...classList);\n }\n\n if (options.attrs) {\n\n Object.entries(options.attrs).forEach(([key, value]) => element.setAttribute(key, value));\n }\n\n if (options.text) element.textContent = options.text;\n\n const innerHtml = options.html ?? options.innerHTML ?? options.innerHtml ?? options.content ?? null;\n\n if (innerHtml) {\n //await customRendering(innerHtml, {}, element);\n customRendering(innerHtml, {}, element);\n }\n\n if (options.style) this.applyStyle(element, options.style);\n\n if (!options.appendTo && !options.prependTo) {\n\n const hyperfloatRoot = document.querySelector('._trivon-ui-hyperfloat');\n\n let sandbox = hyperfloatRoot.querySelector('[data-hyperfloat-sandbox]');\n\n if (!sandbox) {\n\n sandbox = document.createElement('div');\n sandbox.dataset.hyperfloatSandbox = \"\";\n hyperfloatRoot.appendChild(sandbox);\n }\n \n sandbox.appendChild(element);\n }\n\n if (options.appendTo) {\n options.appendTo.appendChild(element);\n }\n\n if (options.prependTo) {\n options.prependTo.prepend(element);\n }\n\n return element;\n};","// src/utils/toArray.js\n\n/**\n * Converte qualquer entrada (seletor, elemento, array misto, NodeList)\n * em um Array de elementos DOM reais, sem duplicações.\n *\n * @param {any} value - Alvo(s) a resolver\n * @param {Element|Document|string|null} [scope=document] - Contexto de busca\n * @param {boolean} [leaveStrings=false] - Se true, preserva strings em vez de consultar no DOM\n * @returns {Array<Element|string>}\n */\n\nexport function toArray(\n value,\n scope = typeof document !== 'undefined' ? document : null,\n leaveStrings = false\n) {\n if (!value) return [];\n\n const hasElement = typeof Element !== 'undefined';\n const isElement = (val) => hasElement && val instanceof Element;\n\n // Retorno rápido se já for um elemento DOM isolado\n if (isElement(value)) return [value];\n\n // Resolve o escopo se ele tiver sido passado como um seletor em string\n const resolvedScope =\n typeof scope === 'string' && typeof document !== 'undefined'\n ? document.querySelector(scope)\n : scope;\n\n const uniqueSet = new Set();\n\n const collect = (val) => {\n\n if (!val) return;\n\n // 1. Elemento físico do DOM válido\n if (isElement(val)) {\n uniqueSet.add(val);\n return;\n }\n\n // 2. Seletor CSS em String\n if (typeof val === 'string') {\n\n if (leaveStrings) {\n uniqueSet.add(val);\n return;\n }\n\n if (resolvedScope && typeof resolvedScope.querySelectorAll === 'function') {\n\n try {\n const nodes = resolvedScope.querySelectorAll(val);\n\n for (let i = 0; i < nodes.length; i++) {\n\n uniqueSet.add(nodes[i]);\n }\n\n } catch {\n // Seletores CSS inválidos são ignorados silenciosamente\n }\n }\n return;\n }\n\n // Arrays, NodeLists, HTMLCollections e Array-likes\n if (\n Array.isArray(val) ||\n (\n typeof val === 'object' &&\n typeof val.length === 'number' &&\n typeof val !== 'function'\n )\n ) {\n for (let i = 0; i < val.length; i++) {\n\n collect(val[i]);\n }\n }\n };\n\n collect(value);\n\n return Array.from(uniqueSet);\n}\n\n// Deprecated\n\n/*export function toArray(value, scope = document, leaveStrings = false) {\n\n if (value instanceof HTMLElement) return [value];\n\n // Helpers internos\n const isString = val => typeof val === 'string';\n const isArray = Array.isArray;\n const isArrayLike = val =>\n\n val && typeof val.length === 'number' && typeof val !== 'function';\n\n const flatten = (arr, keepStrings = false) => {\n\n return arr.reduce((acc, val) => {\n //arr.reduce((acc, val) => {\n\n if (isArray(val)) {\n\n acc.push(...flatten(val, keepStrings));\n\n } else if (!keepStrings && isString(val)) {\n\n acc.push(...toArray(val, scope, keepStrings));\n\n } else {\n\n acc.push(val);\n }\n return acc;\n\n }, []);\n };\n\n // Lógica principal\n\n if (\n isString(value) &&\n !leaveStrings\n ) {\n\n try {\n return Array.from(scope.querySelectorAll(value));\n\n } catch (e) {\n\n return [];\n }\n }\n\n if (isArray(value)) {\n\n return flatten(value, leaveStrings);\n }\n\n if (isArrayLike(value)) {\n\n return Array.from(value);\n }\n\n return value\n ? [value]\n : [];\n};*/","/*export function generateUUID({\n prefix = 'uuid',\n blacklist = []\n} = {}) {\n\n const uuid = `${prefix}-${crypto.randomUUID()}`;\n\n if (blacklist.includes(uuid)) {\n\n return generateUUID({\n prefix,\n blacklist\n });\n }\n\n return uuid;\n\n};*/\n\nexport function generateUUID({\n prefix = 'uuid',\n blacklist = []\n} = {}) {\n\n let result = '';\n\n // API nativa do Web Crypto (Navegador HTTPS / Vercel Edge / Cloudflare)\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n\n result = `${prefix}-${crypto.randomUUID()}`;\n }\n else {\n\n result = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n }\n\n if (blacklist.includes(result)) {\n\n return generateUUID({\n prefix,\n blacklist\n });\n }\n\n return result;\n};","export function getValueType(value) {\n\n if (value === null) {\n return 'null';\n }\n\n if (Array.isArray(value)) {\n return 'array';\n }\n\n if (\n typeof Node !== 'undefined' &&\n value instanceof Node\n ) {\n return 'node';\n }\n\n if (typeof value === 'object') {\n return 'object';\n }\n\n return typeof value;\n}","export function resolveCssLength(value) {\n\n if (typeof value === 'string') {\n\n const trimmed = value.trim();\n\n /*if (/^-?[\\d.]+(px|%|em|rem|vh|vw)$/.test(trimmed)) {\n return trimmed; // mantém valores negativos também\n }*/\n\n if (\n /^-?[\\d.]+(px|%|em|rem|vh|vw)$/.test(trimmed) ||\n /^(var|calc|min|max|clamp)\\(.+\\)$/.test(trimmed)\n ) {\n return trimmed;\n }\n\n /*\n\n '10px'\n\n '1.5rem'\n\n '-20%'\n\n 'var(--space)'\n\n var(--space)\n\n calc(var(--space) * 2)\n\n calc(100% - 24px)\n\n min(20px, 5vw)\n\n max(12px, 1rem)\n\n clamp(8px, 2vw, 24px)\n */\n\n const parsed = parseHyperfloat(trimmed);\n return isNaN(parsed) ? null : `${parsed}px`; // trata como px\n }\n\n if (typeof value === 'number') {\n return `${value}px`; // número -> px\n }\n\n return '0px'; // fallback\n};","export function getComputedCssLength(value) {\n\n if (typeof value === 'number') {\n value = `${value}px`;\n }\n\n const temp = document.createElement('div');\n temp.style.all = 'initial';\n temp.style.position = 'absolute';\n temp.style.visibility = 'hidden';\n temp.style.pointerEvents = 'none';\n temp.style.width = value;\n document.body.appendChild(temp);\n\n const computed = getComputedStyle(temp).width;\n document.body.removeChild(temp);\n\n const numeric = parseHyperfloat(computed);\n\n return isNaN(numeric)\n ? 0\n : numeric;\n}","\nimport {\n resolveCssLength,\n} from './resolveCssLength.js';\n\nexport function resolveCssSize(rawSize) {\n\n //------------------------------------------------------\n // String\n\n if (typeof rawSize === 'string') {\n\n const value = rawSize.trim();\n\n const parts = value.split(/\\s+/);\n\n if (parts.length === 1) {\n\n const size = resolveCssLength(parts[0]);\n return {\n width: size,\n height: size,\n };\n }\n\n else if (parts.length === 2) {\n\n return {\n width: resolveCssLength(parts[0]),\n height: resolveCssLength(parts[1]),\n };\n }\n }\n\n //------------------------------------------------------\n // Number\n\n if (typeof rawSize === 'number') {\n\n // const size = `${rawSize}px`;\n const size = resolveCssLength(rawSize);\n\n return {\n width: size,\n height: size,\n };\n }\n\n //------------------------------------------------------\n // Object\n\n if (\n typeof rawSize === 'object'\n && rawSize !== null\n ) {\n return {\n width: resolveCssLength(rawSize?.width),\n height: resolveCssLength(rawSize?.height),\n };\n }\n\n // Fallback seguro\n return {\n width: 'auto',\n height: 'auto',\n };\n};","export function normalizeDelay(value, fallback = 4000) {\n\n return Math.max(\n 0,\n Math.trunc(\n Number(value ?? fallback)\n )\n );\n}","// src/manager/validate.js\n\nimport allowedValues from '../constants/allowedValues.js';\n\nimport {\n getValueType,\n} from '../utils/index.js';\n\nexport function validate(m, data = {}) {\n\n const schema = allowedValues;\n\n const output = {};\n\n for (const [key, rules] of Object.entries(schema)) {\n\n let value = data[key];\n\n //--------------------------------------------------\n // Not provided\n\n // New (Commented)\n /*if (\n value === undefined ||\n value === null\n ) {\n\n if (rules.default !== null) {\n\n output[key] = structuredClone(\n rules.default\n );\n\n }\n continue;\n }*/\n\n //--------------------------------------------------\n // Type validation\n\n const allowedTypes = Array.isArray(rules.type)\n ? rules.type\n : [rules.type];\n\n // New (add)\n allowedTypes.push('undefined');\n\n const currentType = getValueType(value);\n\n if (!allowedTypes.includes(currentType)) {\n\n console.warn(\n `[Trivon Ui - Hyperfloat] Invalid type for \"${key}\".`,\n `Expected: ${allowedTypes.join(', ')}`,\n `Received: ${currentType}`\n );\n\n output[key] = structuredClone(\n rules.default\n );\n\n continue;\n }\n\n //--------------------------------------------------\n // Normalize array\n\n if (\n rules.normalizeArray === true\n && currentType === 'string'\n ) {\n\n value = [value];\n }\n\n //--------------------------------------------------\n // Array item type validation\n\n if (\n rules.itemType\n && Array.isArray(value)\n ) {\n\n const invalidItems = value.filter(item => {\n\n return (\n getValueType(item)\n !== rules.itemType\n );\n\n });\n\n if (invalidItems.length) {\n\n console.warn(\n `[Trivon Ui - Hyperfloat] Invalid item type for \"${key}\".`,\n `Expected items of type: ${rules.itemType}`\n );\n\n output[key] = structuredClone(\n rules.default\n );\n\n continue;\n }\n }\n\n //--------------------------------------------------\n // Enum validation\n\n if (rules.values) {\n\n if (Array.isArray(value)) {\n\n const invalidValues = value.filter(\n\n item => !rules.values.includes(item)\n\n );\n\n if (invalidValues.length) {\n\n console.warn(\n\n `[Trivon Ui - Hyperfloat] Invalid values for \"${key}\".`,\n\n `Expected only: ${rules.values.join(', ')}`,\n\n `Received invalid: ${invalidValues.join(', ')}`\n\n );\n\n output[key] = structuredClone(\n\n rules.default\n\n );\n\n continue;\n\n }\n\n }\n\n else {\n\n if (!rules.values.includes(value)) {\n\n console.warn(\n `[Trivon Ui - Hyperfloat] Invalid value for \"${key}\".`,\n `Expected one of: ${rules.values.join(', ')}`,\n `Received: ${value}`\n );\n\n output[key] = structuredClone(\n rules.default\n );\n\n continue;\n }\n\n }\n }\n\n // output[key] = value;\n\n // New (add)\n if (value !== undefined) {\n\n output[key] = value;\n }\n }\n\n return output;\n}","// src/manager/sync.js\n\nimport {\n startAutoRaf,\n stopAutoRaf,\n} from './raf.js';\n\nimport {\n startPointerTracking,\n stopPointerTracking\n} from './pointer.js';\n\nexport async function refresh(m) {\n\n await m._callHook('refresh', m);\n\n // Refresh version\n m._cache.refreshVersion++;\n\n //console.log('refresh');\n}\n\nexport async function update(m) {\n\n await m._callHook('update', m);\n\n // Refresh version\n m._cache.updateVersion++;\n\n //console.log('update');\n}\n\n\n// Acionado manualmente\n\nexport async function sync(m, args) {\n\n //console.log('Global Sync');\n\n await m._callHook('sync', m);\n}\n\nexport function syncPointerEngine(m, force = false) {\n\n //console.log('syncPointerEngine');\n\n let required = false;\n\n if (!force) {\n\n for (const [id, instance] of m._instancesMap) {\n\n if (\n /*(\n instance.anchor === 'pointer' ||\n instance.draggable?.enabled\n )*/\n instance.anchor === 'pointer' &&\n instance.opened\n ) {\n\n required = true;\n break;\n }\n }\n }\n\n if (\n force ||\n required\n ) {\n\n startAutoRaf(m);\n startPointerTracking(m);\n }\n else {\n\n stopAutoRaf(m);\n stopPointerTracking(m);\n }\n}","// src/manager/raf.js\n\nexport function autoRaf(m, state = true) {\n\n if (m._state.autoRafStarted) {\n\n if (m._config.autoRaf) {\n console.warn(\n 'Auto RAF has already been started. m setting can no longer be changed.'\n );\n } else {\n console.warn(\n 'The RAF mode has already been defined and is currently managed externally. m setting can no longer be changed.'\n );\n }\n return;\n }\n\n m._config.autoRaf = state;\n}\n\nexport function startAutoRaf(m) {\n\n if (\n !m._config.autoRaf ||\n m._state.autoRafStarted\n ) {\n return;\n }\n\n //console.log('startAutoRaf');\n\n m._state.autoRafStarted = true;\n\n const loop = (time) => {\n\n if (\n !m._config.autoRaf ||\n !m._state.autoRafStarted\n ) {\n return;\n }\n\n m._raf(time);\n\n requestAnimationFrame(loop);\n };\n\n requestAnimationFrame(loop);\n}\n\nexport function stopAutoRaf(m) {\n\n if (\n !m._config.autoRaf ||\n !m._state.autoRafStarted\n ) {\n return;\n }\n\n //console.log('stopAutoRaf');\n\n m._state.autoRafStarted = false;\n}\n\n/*export async function raf(m, time) {\n\n await m._callHook('raf', m);\n\n //console.log('raf'); \n}*/\n\n\nexport async function raf(m, time) {\n\n // Se o tempo não for informado (ex: chamada manual sem parâmetros), pega o tempo atual\n const currentTime = time ?? (typeof performance !== 'undefined'\n ? performance.now()\n : Date.now());\n\n //------------------------------------------------------\n // Delta Time Calculation\n\n if (!m._cache.lastRafTime) {\n\n m._cache.lastRafTime = currentTime;\n }\n\n const deltaTime = currentTime - m._cache.lastRafTime;\n m._cache.lastRafTime = currentTime;\n\n // Guarda informações úteis de tempo na instância do Manager\n m._cache.raf = {\n time: currentTime,\n deltaTime: deltaTime,\n };\n\n await m._callHook('raf', m);\n}","// src/manager/pointer.js\n\nexport function pointermove(m, e) {\n\n //console.log('pointermove');\n\n // await m._callHook('pointermove', m);\n\n m._cache.pointer.x = e.clientX;\n m._cache.pointer.y = e.clientY;\n\n /*const element = document.elementFromPoint(\n e.clientX,\n e.clientY\n );\n\n m._cache.pointer.target = element;*/\n} \n\n//------------------------------------------------------\n// Pointer Tracking\n\nexport function startPointerTracking(m) {\n\n //console.log('startPointerTracking');\n\n if (m._state.pointerTrackingStarted) return;\n\n m._state.pointerTrackingStarted = true;\n\n //------------------------------------------------------\n // Add\n\n window.addEventListener(\n 'pointermove',\n m._handlers.pointermove,\n {\n passive: true\n }\n );\n}\n\nexport function stopPointerTracking(m) {\n\n if (!m._state.pointerTrackingStarted) return;\n\n m._state.pointerTrackingStarted = false;\n\n //console.log('stopPointerTracking');\n\n window.removeEventListener(\n 'pointermove',\n m._handlers.pointermove\n );\n}","// src/helpers/resolvers.js\n\nimport placementOptions from '../constants/placementOptions.js';\n\nimport {\n resolveCssSize,\n resolveCssLength,\n getComputedCssLength,\n resolveCssBox,\n normalizeDelay,\n toArray\n} from '../utils/index.js';\n\nexport function normalizeSizeOptions(value) {\n\n // Presets válidos\n const presets = [\n 'auto',\n 'small',\n 'medium',\n 'large',\n 'full'\n ];\n\n if (\n typeof value === 'object'\n && value !== null\n ) {\n\n return {\n type: value.type ?? 'custom',\n width: value.width ?? '100%',\n height: value.height ?? '100%'\n }\n }\n\n else if (typeof value === 'string') {\n\n const _value = value.trim();\n\n if (presets.includes(_value)) {\n\n return {\n type: 'preset',\n width: _value,\n height: _value,\n };\n }\n }\n\n return {\n type: 'custom',\n ...resolveCssSize(value),\n };\n}\n\n//------------------------------------------------------\n// Placement\n\nexport function normalizePlacement(rawPlacement, anchor) {\n\n if (typeof rawPlacement === 'string') {\n\n const value = rawPlacement.trim();\n\n if (placementOptions.includes(value)) {\n return value;\n }\n }\n\n return anchor === 'viewport'\n ? 'center'\n : 'bottom';\n}\n\n//------------------------------------------------------\n// Overlay\n\nexport function normalizeOverlayOptions(value) {\n\n if (\n typeof value === 'boolean'\n && value !== null\n ) {\n return {\n enabled: value,\n color: 'black',\n blur: true,\n };\n }\n\n else if (\n typeof value === 'object'\n && value !== null\n ) {\n\n return {\n enabled: true,\n color: value.color || 'black',\n blur: value.blur === false\n ? false\n : true,\n };\n }\n\n return {\n enabled: false,\n color: 'black',\n blur: true,\n };\n};\n\n//------------------------------------------------------\n// Dismiss\n\nexport function normalizeDismissOptions(value) {\n\n if (\n typeof value === 'object'\n && value !== null\n ) {\n return {\n // Converte diretamente para boolean (true/false)\n outsideClick: !!value.outsideClick,\n\n outsideWheel: !!value.outsideWheel,\n\n escapeKey: !!value.escapeKey,\n\n // DX: 'mouseLeave' funciona como um alias para o moderno 'pointerLeave'\n pointerLeave: !!(value.pointerLeave || value.mouseLeave),\n\n closeWithParent: !!value.closeWithParent,\n\n timeout: value.timeout\n ? normalizeDelay(value.timeout)\n : null,\n\n idleTimeout: value.idleTimeout && value.timeout === undefined\n ? normalizeDelay(value.idleTimeout)\n : null,\n };\n }\n\n return {\n outsideClick: false,\n outsideWheel: false,\n escapeKey: false,\n pointerLeave: false,\n closeWithParent: false,\n timeout: null,\n idleTimeout: null,\n };\n}\n\n//------------------------------------------------------\n// Register Options\n\n/**\n * Normaliza opções de registro (strings, elementos, listas, objetos de config)\n * Retorna sempre um array no formato: [{ el: HTMLElement, event: string }, ...]\n *\n * @param {any} value\n * @returns {Array<{ el: Element, event: string }>}\n */\n\nexport function normalizeRegisterOptions(value) {\n\n if (!value) return [];\n\n let rawTargets = value;\n let resolvedEvent = 'click';\n\n // Suporte a objeto de configuração: { el: ..., event: ... }\n const isDomNode = (val) =>\n typeof Element !== 'undefined' && val instanceof Element;\n\n const isDomList = (val) =>\n (typeof NodeList !== 'undefined' && val instanceof NodeList) ||\n (typeof HTMLCollection !== 'undefined' && val instanceof HTMLCollection);\n\n if (\n typeof value === 'object' &&\n !Array.isArray(value) &&\n !isDomNode(value) &&\n !isDomList(value) &&\n 'el' in value\n ) {\n rawTargets = value.el;\n\n if (\n typeof value.event === 'string' &&\n value.event.trim()\n ) {\n resolvedEvent = value.event.trim();\n }\n }\n\n // Normaliza aliases de mouse para pointer\n const EVENT_ALIASES = {\n mouseenter: 'pointerenter',\n mousemove: 'pointermove'\n };\n resolvedEvent = EVENT_ALIASES[resolvedEvent] || resolvedEvent;\n\n if (!['click', 'pointerenter', 'pointermove'].includes(resolvedEvent)) {\n resolvedEvent = 'click';\n } \n\n // toArray entrega diretamente um Array de Elements únicos e válidos\n return toArray(rawTargets).map(el => ({\n el,\n event: resolvedEvent\n }));\n}\n\nexport function resolveHostHyperfloat(el) {\n\n const hostContainer = el.closest('[data-hyperfloat-id]');\n\n const hostHyperfloat = hostContainer\n ? hostContainer.dataset.hyperfloatId ?? null\n : null;\n\n return hostHyperfloat;\n};\n\n//------------------------------------------------------\n// Offset\n\n/*\n\nmainAxis:\nO eixo que percorre a lateral do elemento flutuante. Representa a distância (espaço ou margem) entre o elemento flutuante e o elemento de referência.\n\ncrossAxis:\nO eixo que percorre o alinhamento do elemento flutuante. Representa o deslizamento entre o elemento flutuante e o elemento de referência.\n\nalignmentAxis:\nThe same axis as crossAxis but applies only to aligned placements and inverts the end alignment. When set to a number, it overrides the crossAxis value.\n\nA positive number will move the hyperfloat element in the direction of the opposite edge to the one that is aligned, while a negative number the reverse.\n\n*/\n\nexport function normalizeOffsetOptions(value) {\n\n if (typeof value === 'number') {\n\n return {\n mainAxis: value,\n crossAxis: value,\n alignmentAxis: null,\n };\n }\n\n else if (typeof value === 'string') {\n\n const _value = getComputedCssLength(resolveCssLength(value));\n\n return {\n mainAxis: _value,\n crossAxis: 0,\n alignmentAxis: null,\n };\n }\n\n else if (\n typeof value === 'object'\n && value !== null\n ) {\n\n let mainAxis = getComputedCssLength(resolveCssLength(value.mainAxis ?? 0));\n let crossAxis = getComputedCssLength(resolveCssLength(value.crossAxis ?? 0));\n let alignmentAxis = value.alignmentAxis\n ? getComputedCssLength(resolveCssLength(value.alignmentAxis ?? 0))\n : null;\n\n if (alignmentAxis !== null) {\n crossAxis = 0;\n }\n\n return {\n mainAxis,\n crossAxis,\n alignmentAxis,\n };\n }\n\n return null;\n}\n\n//------------------------------------------------------\n// Main Cross Axis\n\nexport function normalizeMainCrossAxis(value) {\n\n if (typeof value === 'boolean') {\n\n return {\n mainAxis: value,\n crossAxis: value,\n };\n }\n else if (\n typeof value === 'object'\n && value !== null\n ) {\n return {\n mainAxis: value.mainAxis === true,\n crossAxis: value.crossAxis === true,\n };\n }\n\n return null;\n}\n\n\n//------------------------------------------------------\n// Flip & Shift\n\n/*\n\nmainAxis: \nEste é o eixo principal no qual o deslocamento é aplicado.\n\ncrossAxis:\nEste é o eixo transversal no qual o deslocamento é aplicado, o eixo oposto ao eixo principal (mainAxis).\n\nHabilitar esta opção pode fazer com que o elemento flutuante se sobreponha ao elemento de referência, o que pode não ser desejável e geralmente é substituído pelo middleware flip.\n\n*/\n\nexport function normalizeFlipOptions(value) {\n\n return normalizeMainCrossAxis(value);\n}\n\nexport function normalizeShiftOptions(value) {\n\n return normalizeMainCrossAxis(value);\n\n}\n\n//------------------------------------------------------\n// Boundary Padding\n\nexport function normalizeBoundaryPaddingOptions(value) {\n\n if (value == null) {\n return 0;\n }\n\n return resolveCssBox(value);\n}\n\n//------------------------------------------------------\n// Accessibility\n\nexport function normalizeAccessibilityOptions(value) {\n\n if (\n typeof value === 'object' &&\n value !== null &&\n Object.entries(value).length\n ) {\n return {\n role: value.role ?? 'dialog',\n label: value.label ?? 'dialog',\n modal: value.modal ?? false,\n };\n }\n\n return {\n role: 'dialog',\n label: 'dialog',\n modal: false,\n };\n}\n\n//------------------------------------------------------\n// Meta\n\nexport function normalizeMetaOptions(rawMeta) {\n\n if (\n typeof rawMeta === 'object'\n && rawMeta !== null\n ) {\n return {\n ...rawMeta,\n\n type: rawMeta.type ?? 'default',\n variant: rawMeta.variant ?? 'default',\n role: rawMeta.role ?? 'default',\n };\n }\n\n return {\n type: 'default',\n variant: 'default',\n role: 'dialog',\n };\n}\n\n\n//------------------------------------------------------\n// Draggable\n\nexport function normalizeDraggableOptions(value, anchor) {\n\n if (anchor !== 'viewport') {\n\n return {\n enabled: false,\n bounds: false,\n handle: null,\n };\n }\n\n else if (\n typeof value === 'boolean'\n && value !== null\n ) {\n\n return {\n enabled: value,\n bounds: false,\n handle: null,\n };\n }\n\n else if (\n typeof value === 'object'\n && value !== null\n ) {\n\n return {\n enabled: true,\n bounds: value.bounds === true,\n handle: null,\n };\n }\n\n return {\n enabled: false,\n bounds: false,\n handle: null,\n };\n};","\nimport {\n resolveCssLength,\n} from './resolveCssLength.js';\n\nimport {\n getComputedCssLength,\n} from './getComputedCssLength.js';\n\nexport function resolveCssBox(rawSize) {\n\n //------------------------------------------------------\n // String\n\n if (typeof rawSize === 'string') {\n\n const value = rawSize.trim();\n\n const parts = value.split(/\\s+/);\n\n if (parts.length === 1) {\n\n const size = getComputedCssLength(resolveCssLength(parts[0]));\n\n return {\n top: size,\n right: size,\n bottom: size,\n left: size,\n };\n }\n\n else if (parts.length === 2) {\n\n const topBottom = getComputedCssLength(resolveCssLength(parts[0]));\n const leftRight = getComputedCssLength(resolveCssLength(parts[1]));\n\n return {\n top: topBottom,\n right: leftRight,\n bottom: topBottom,\n left: leftRight\n };\n }\n\n else if (parts.length === 3) {\n\n const top = getComputedCssLength(resolveCssLength(parts[0]));\n const leftRight = getComputedCssLength(resolveCssLength(parts[1]));\n const bottom = getComputedCssLength(resolveCssLength(parts[2]));\n\n return {\n top: top,\n right: leftRight,\n bottom: bottom,\n left: leftRight,\n };\n }\n\n else if (parts.length === 4) {\n\n const top = getComputedCssLength(resolveCssLength(parts[0]));\n const left = getComputedCssLength(resolveCssLength(parts[1]));\n const bottom = getComputedCssLength(resolveCssLength(parts[2]));\n const right = getComputedCssLength(resolveCssLength(parts[3]));\n\n return {\n top,\n right,\n bottom,\n left,\n };\n }\n }\n\n //------------------------------------------------------\n // Number\n\n if (typeof rawSize === 'number') {\n\n // const size = `${rawSize}px`;\n const size = getComputedCssLength(resolveCssLength(rawSize));\n\n return {\n top: size,\n right: size,\n bottom: size,\n left: size,\n };\n }\n\n //------------------------------------------------------\n // Object\n\n if (\n typeof rawSize === 'object'\n && rawSize !== null\n ) {\n return {\n top: getComputedCssLength(resolveCssLength(rawSize?.top)),\n right: getComputedCssLength(resolveCssLength(rawSize?.right)),\n bottom: getComputedCssLength(resolveCssLength(rawSize?.bottom)),\n left: getComputedCssLength(resolveCssLength(rawSize?.left)),\n };\n }\n\n // Fallback\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n };\n};","// src/helpers/validators.js\n\n//------------------------------------------------------\n// Custom Rendering\n\nexport function validateCustomRendering(value) {\n\n if (\n typeof value === 'function' ||\n typeof value === 'string' ||\n value instanceof Node\n ) {\n return value;\n }\n\n return null;\n}\n\n","// src/helpers/parsers.js\n\nimport {\n normalizeDelay\n} from '../utils/normalizeDelay.js';\n\nimport {\n normalizeAccessibilityOptions,\n normalizeBoundaryPaddingOptions,\n normalizeDismissOptions,\n normalizeDraggableOptions,\n normalizeFlipOptions,\n normalizeMetaOptions,\n normalizeOffsetOptions,\n normalizeOverlayOptions,\n normalizePlacement,\n normalizeShiftOptions,\n normalizeSizeOptions,\n} from './normalizers.js';\n\nimport {\n validateCustomRendering\n} from './validators.js';\n\nexport function parseOptions(i, data = {}, prevent = []) {\n\n return {\n\n ...((data.meta !== undefined && !prevent.includes('meta')) && {\n meta: normalizeMetaOptions(data.meta ?? allowedValues.meta.default)\n }),\n\n ...((data.accessibility !== undefined && !prevent.includes('accessibility')) && {\n accessibility: normalizeAccessibilityOptions(data.accessibility ?? allowedValues.accessibility.default)\n }),\n\n ...((data.dismiss !== undefined && !prevent.includes('dismiss')) && {\n dismiss: normalizeDismissOptions(data.dismiss ?? allowedValues.dismiss.default)\n }),\n\n ...((data.destroyAfterClose !== undefined && !prevent.includes('destroyAfterClose')) && {\n destroyAfterClose: data.destroyAfterClose === true,\n }),\n\n ...((data.autoOpen !== undefined && !prevent.includes('autoOpen')) && {\n autoOpen: data.autoOpen === true,\n }),\n\n ...((data.ignoreCloseAll !== undefined && !prevent.includes('ignoreCloseAll')) && {\n ignoreCloseAll: data.ignoreCloseAll === true,\n }),\n\n ...((data.overlay !== undefined && !prevent.includes('overlay')) && {\n overlay: normalizeOverlayOptions(data.overlay ?? allowedValues.overlay.default)\n }),\n\n ...((data.placement !== undefined && !prevent.includes('placement')) && {\n placement: normalizePlacement(data.placement ?? allowedValues.placement.default,\n i.anchor\n )\n }), \n \n ...((data.boundaryPadding !== undefined && !prevent.includes('boundaryPadding')) && {\n boundaryPadding: normalizeBoundaryPaddingOptions(data.boundaryPadding ?? allowedValues.boundaryPadding.default)\n }),\n\n ...((data.draggable !== undefined && !prevent.includes('draggable')) && {\n\n draggable: normalizeDraggableOptions(data.draggable ?? allowedValues.draggable.default,\n i.anchor\n )\n }),\n\n ...((data.offset !== undefined && !prevent.includes('offset')) && {\n offset: normalizeOffsetOptions(data.offset ?? allowedValues.offset.default)\n }),\n\n ...((data.flip !== undefined && !prevent.includes('flip')) && {\n flip: normalizeFlipOptions(data.flip ?? allowedValues.flip.default)\n }),\n\n ...((data.shift !== undefined && !prevent.includes('shift')) && {\n shift: normalizeShiftOptions(data.shift ?? allowedValues.shift.default)\n }),\n\n ...((data.size !== undefined && !prevent.includes('size')) && {\n size: normalizeSizeOptions(data.size ?? allowedValues.size.default)\n }), \n \n ...((data.header !== undefined && !prevent.includes('header')) && {\n header: validateCustomRendering(data.header ?? allowedValues.header.default)\n }),\n\n ...((data.footer !== undefined && !prevent.includes('footer')) && {\n footer: validateCustomRendering(data.footer ?? allowedValues.footer.default)\n }),\n\n ...((data.breakpoints !== undefined && !prevent.includes('breakpoints')) && {\n breakpoints: data.breakpoints ?? {}\n }),\n\n ...((data.debug !== undefined && !prevent.includes('debug')) && {\n debug: data.debug === true,\n }),\n };\n}","// src/manager.js\n\nimport {\n validate\n} from './manager/validate.js';\n\nimport {\n mount\n} from './manager/mount.js';\n\nimport {\n on,\n off,\n callHook\n} from './manager/hooks.js';\n\nimport {\n open,\n close,\n closeAll,\n destroy,\n destroyAll,\n} from './manager/actions.js';\n\nimport {\n update,\n refresh,\n sync,\n syncPointerEngine,\n} from './manager/sync.js';\n\nimport {\n raf,\n autoRaf\n} from './manager/raf.js';\n\nimport {\n zIndex,\n} from './manager/options.js';\n\nimport {\n pointermove,\n} from './manager/pointer.js';\n\n//------------------------------------------------------\n// Helpers\n\nimport {\n generateUUID,\n} from './utils/index.js';\n\nimport {\n parseOptions\n} from './helpers/parsers.js';\n\nexport default class Manager {\n\n constructor() {\n\n this._instancesMap = new Map();\n\n this._root = null;\n\n this._openedInstances = {\n viewport: [],\n element: [],\n pointer: []\n };\n\n this._defaults = {};\n\n //------------------------------------------------------\n // Config\n\n this._config = {\n\n zIndex: 9999,\n\n autoRaf: true,\n // Poderá alternar antes de abrir o primeiro hyperfloat anchor pointer\n };\n\n //------------------------------------------------------\n // Listeners\n\n this._listeners = {\n\n update: [],\n refresh: [],\n raf: [],\n sync: []\n };\n\n //------------------------------------------------------\n // State\n\n this._state = {\n\n pointerTrackingStarted: false,\n\n autoRafStarted: false,\n };\n\n //------------------------------------------------------\n // Cache\n\n this._cache = {\n\n refreshVersion: 0,\n\n updateVersion: 0,\n\n pointer: {\n x: 0,\n y: 0,\n target: null\n },\n\n raf: {\n time: 0,\n deltaTime: 0,\n },\n\n lastRafTime: null,\n };\n\n //------------------------------------------------------\n // Handlers\n\n this._handlers = {\n\n keydown: this._onKeydown.bind(this),\n\n update: () => update(this),\n\n pointermove: (e) => pointermove(this, e),\n\n refresh: () => {\n\n if (this._refreshRaf) return;\n\n this._refreshRaf = requestAnimationFrame(() => {\n\n this._refreshRaf = null;\n\n refresh(this);\n });\n },\n };\n\n // Update\n this._update = this._handlers.update;\n\n window.addEventListener(\n 'scroll',\n this._handlers.update,\n {\n passive: true\n }\n );\n\n // Refresh\n this._refresh = this._handlers.refresh;\n\n window.addEventListener(\n 'resize',\n this._handlers.refresh\n );\n\n //------------------------------------------------------\n // Functions\n\n this._syncPointerEngine = (...args) => syncPointerEngine(this, ...args);\n this._sync = (...args) => sync(this, ...args);\n\n this._on = (...args) => on(this, ...args);\n this._off = (...args) => off(this, ...args);\n this._callHook = (...args) => callHook(this, ...args);\n\n this._open = async (id, data = {}) => await open(this, id, data);\n this._close = async (id, data = {}) => await close(this, id, data);\n this._closeAll = async (data = {}) => await closeAll(this, data);\n this._destroy = async (id, data = {}) => await destroy(this, id, data);\n this._destroyAll = async (data = {}) => await destroyAll(this, data);\n\n //------------------------------------------------------\n // Finaly\n\n mount(this);\n\n return this;\n }\n\n _onKeydown(event) {\n\n if (event.key === 'Escape') {\n\n this._closeFirstPriority({\n event: 'escape'\n });\n }\n }\n\n _setHyperfloatOpened(instance, status) {\n\n const id = instance.id;\n const anchor = instance.anchor;\n\n if (!status) { // Close\n\n if (this._openedInstances[anchor].includes(id)) {\n\n this._openedInstances[anchor] = this._openedInstances[anchor].filter(item => item !== id);\n }\n }\n else // Open\n {\n if (!this._openedInstances[anchor].includes(id)) {\n\n this._openedInstances[anchor].push(id);\n }\n }\n }\n\n _raf(time = null) {\n\n raf(this, time);\n }\n\n _getAll() {\n\n const instances = [];\n\n for (const [id, hyperfloatInstance] of this._instancesMap) {\n\n instances.push(hyperfloatInstance);\n }\n\n return instances;\n }\n\n _getOpened(anchor = null, allowOpening = false) {\n\n const instances = [];\n\n for (const [id, hyperfloatInstance] of this._instancesMap) {\n\n //------------------------------------------------------\n // Anchor filter\n\n if (\n anchor !== null &&\n hyperfloatInstance.anchor !== anchor\n ) {\n continue;\n }\n\n //------------------------------------------------------\n // State filter\n\n if (allowOpening) {\n\n if (\n !hyperfloatInstance.state.opened &&\n !hyperfloatInstance.state.opening\n ) {\n continue;\n }\n\n } else {\n\n if (!hyperfloatInstance.state.opened) {\n continue;\n }\n }\n\n instances.push(hyperfloatInstance);\n };\n\n return instances;\n }\n\n _getByPriority(operator = '>', priorityRef = 1000) {\n\n const instances = [];\n\n for (const [, hyperfloatInstance] of this._instancesMap) {\n\n if (!hyperfloatInstance.opened) {\n continue;\n }\n\n const priority = hyperfloatInstance._state.priority;\n\n const matches =\n operator === '>' ? priority > priorityRef :\n\n operator === '>=' ? priority >= priorityRef :\n\n operator === '<' ? priority < priorityRef :\n\n operator === '<=' ? priority <= priorityRef :\n\n operator === '==' ? priority === priorityRef :\n\n false;\n\n if (matches) {\n instances.push(hyperfloatInstance);\n }\n }\n\n instances.sort((a, b) => a._state.priority - b._state.priority);\n\n return instances;\n }\n\n _getElementsAbovePriority(priorityRef = 1000) {\n\n const boxes = [];\n\n for (const [id, hyperfloatInstance] of this._instancesMap) {\n\n const opened = hyperfloatInstance.opened;\n const priority = hyperfloatInstance._state.priority;\n const box = hyperfloatInstance.elements.box;\n const overlay = hyperfloatInstance.elements.overlay;\n\n if (\n opened &&\n priority > priorityRef\n ) {\n boxes.push(box);\n\n if (overlay) {\n boxes.push(overlay);\n }\n }\n }\n\n //console.log(boxes);\n\n return boxes;\n }\n\n //------------------------------------------------------\n // Config\n\n _setConfig(data = {}) {\n\n if (data.zIndex) {\n zIndex(this, data.zIndex);\n }\n\n if (data.autoRaf) {\n autoRaf(this, data.autoRaf);\n }\n }\n\n //------------------------------------------------------\n // Defaults\n\n _setDefaults(data) {\n\n if (data) {\n\n const newData = validate(this, data);\n\n this._defaults = parseOptions(this, newData, [\n 'ignoreCloseAll'\n ]);\n }\n }\n\n //------------------------------------------------------\n // Create\n\n _normalizeData(data) {\n\n const newData = validate(this, {\n\n ...data,\n\n id: data.id ?? generateUUID({\n //prefix: anchor,\n blacklist: Array.from(this._instancesMap.keys()),\n }),\n });\n\n if (newData.anchor === undefined) {\n newData.anchor = 'viewport';\n }\n\n newData.root = this._root;\n\n return newData;\n }\n\n //------------------------------------------------------\n // \n\n async _closeFirstPriority(data = {}) {\n\n //console.log(this._openedInstances);\n\n const openedInstances = Object.values(this._openedInstances).flat();\n\n let highestPriorityHyperfloat = null;\n\n if (openedInstances.length === 1) {\n\n const uniqueInstanceOpened = this._instancesMap.get(openedInstances[0]);\n\n if (uniqueInstanceOpened.dismiss.escapeKey) {\n highestPriorityHyperfloat = uniqueInstanceOpened;\n }\n }\n else {\n\n for (const [hyperfloatId, hyperfloatInstance] of this._instancesMap) {\n\n if (\n !openedInstances.includes(hyperfloatId)\n || !hyperfloatInstance.dismiss.escapeKey\n ) {\n continue;\n }\n\n if (\n !highestPriorityHyperfloat\n || hyperfloatInstance._state.priority > highestPriorityHyperfloat._state.priority\n ) {\n\n highestPriorityHyperfloat = hyperfloatInstance;\n\n }\n }\n }\n\n //console.log(openedInstances);\n\n //console.log(highestPriorityHyperfloat); \n\n if (highestPriorityHyperfloat) {\n\n await highestPriorityHyperfloat.close(data);\n }\n }\n};","// src/manager/mount.js\n\nexport function mount(m) {\n\n m._root = document.createElement('div');\n\n m._root.classList.add('_trivon-ui-hyperfloat');\n\n //console.log('Manager');\n\n m._root.style.setProperty('--trivon-ui-hyperfloat-z-index', m._config.zIndex);\n\n document.body.prepend(m._root); \n\n document.addEventListener('keydown', m._handlers.keydown); \n}","// src/manager/hooks.js\n\nexport function on(m, stage, callback, priority = 1000) {\n\n if (\n typeof callback === 'function'\n && m._listeners[stage]\n ) { \n \n m._listeners[stage].push({\n callback,\n priority\n });\n }\n}\n\nexport function off(m, stage, callback) {\n\n if (typeof callback === 'function' && m._listeners[stage]) {\n\n m._listeners[stage] = m._listeners[stage].filter(\n listener => listener.callback !== callback\n );\n }\n}\n\nexport async function callHook(m, stage) {\n\n if (!m._listeners[stage].length) return;\n\n // Ordena por prioridade antes de executar\n m._listeners[stage].sort((a, b) => a.priority - b.priority);\n\n for (const { callback, priority } of m._listeners[stage]) {\n\n try {\n await callback();\n\n } catch (e) {\n\n }\n }\n}","// src/manager/actions.js\n\nexport async function open(m, id, data = {}) {\n\n const hyperfloatInstance = m._instancesMap.get(id);\n\n if (hyperfloatInstance) {\n\n await hyperfloatInstance.open(data);\n }\n}\n\n//------------------------------------------------------\n// Close\n\nexport async function close(m, id, data = {}) {\n\n const hyperfloatInstance = m._instancesMap.get(id);\n\n if (hyperfloatInstance) {\n\n await hyperfloatInstance.close(data);\n }\n}\n\nexport async function closeAll(m, data = {}) {\n\n const { force = false, ...closeData } = data;\n\n for (const [id, instance] of m._instancesMap) {\n\n if (instance.ignoreCloseAll && !force) {\n continue;\n }\n\n await instance.close(closeData);\n }\n}\n\n//------------------------------------------------------\n// Destroy\n\nexport async function destroy(m, id, data = {}) {\n\n const hyperfloatInstance = m._instancesMap.get(id);\n\n if (hyperfloatInstance) {\n\n await hyperfloatInstance.destroy(data);\n //m._instancesMap.delete(id);\n }\n} \n\nexport async function destroyAll(m, data = {}) {\n\n for (const [id, hyperfloatInstance] of m._instancesMap) {\n\n await hyperfloatInstance.destroy(data);\n }\n\n m._instancesMap.clear();\n}","// src/manager/options.js\n\nexport function zIndex(m, value) {\n\n value = Number(value);\n\n m._config.zIndex = value;\n\n m._root.style.setProperty('--trivon-ui-hyperfloat-z-index', value);\n}","// src/helpers/getManager.js\n\nimport Manager from \"../manager.js\";\n\nlet managerInstance = null;\n\n/*const ssrManager = new Proxy({}, {\n get: () => () => { }\n});*/\n\nconst ssrManager = new Proxy({}, {\n get: (target, prop) => {\n \n // Evita que o Node ache que é uma Promise\n if (prop === 'then') return undefined; \n \n return () => { };\n }\n});\n\nexport function getManager() {\n\n if (typeof window === \"undefined\") {\n return ssrManager;\n }\n\n managerInstance ??= new Manager();\n\n return managerInstance;\n}","// src/instance/hooks.js\n\nexport async function callHook(stage, i, data = {}, mustAwait = true) {\n\n const hooks = [\n i._data[stage],\n i[stage],\n ].filter(hook => typeof hook === 'function'); \n \n if (!hooks.length) {\n return;\n }\n\n for (const hook of hooks) {\n\n let result = hook.call(i, data);\n\n const isPromise = result && typeof result.then === 'function';\n\n if (isPromise) {\n\n if (!mustAwait) {\n console.error(\n `[Trivon Ui / Hyperfloat]: the hook \"${stage}\" must be synchronous. It cannot return a Promise.`\n );\n continue;\n }\n\n // Aguarda a Promise e reatribui o valor resolvido para 'result'\n result = await result;\n }\n\n // A mágica acontece aqui: avaliamos a resposta deste hook específico.\n // Se ele pediu prevent, nós paramos tudo e devolvemos esse resultado.\n if (\n result === false ||\n result?.prevent\n ) {\n\n // O 'return' dentro do for encerra o loop imediatamente\n // e devolve o valor para quem chamou 'await callHook(...)'\n return result;\n }\n }\n\n // Se o loop terminou sem nenhum hook bloquear a ação, \n // retornamos algo neutro (como true ou undefined) para permitir o fluxo.\n return true;\n}","// src/helpers/listener.js\n\nexport function addListener(i, target, event, handler, options = {}) {\n\n if (!target || typeof handler !== 'function') {\n return;\n }\n\n // Target Map\n let targetEvents = i._listenersMap.get(target);\n\n if (!targetEvents) {\n\n targetEvents = new Map();\n i._listenersMap.set(\n target,\n targetEvents\n );\n }\n\n // Events Map ('click', 'scroll', etc.)\n let handlersMap = targetEvents.get(event);\n\n if (!handlersMap) {\n\n handlersMap = new Map();\n targetEvents.set(\n event,\n handlersMap\n );\n }\n\n // Se o handler já existe para este evento, não duplica\n if (handlersMap.has(handler)) {\n return;\n }\n\n //console.log('addListener: ', target, event, handler);\n\n target.addEventListener(event, handler, options);\n\n // Salva a relação direta handler -> options (Busca instantânea)\n handlersMap.set(\n handler,\n options\n );\n}\n\n\nexport function removeListener(i, target, event, handler) {\n\n if (!target) return;\n\n const targetEvents = i._listenersMap.get(target);\n if (!targetEvents) return;\n\n const handlersMap = targetEvents.get(event);\n if (\n !handlersMap ||\n !handlersMap.has(handler)\n ) return;\n\n // Recupera as options originais (necessário caso use capture: true)\n const options = handlersMap.get(handler);\n\n // Remove do DOM\n target.removeEventListener(event, handler, options);\n\n //console.log('removeListener: ', target, event, handler);\n\n // Remove do mapa\n handlersMap.delete(handler);\n\n // Limpa nós vazios da árvore\n if (handlersMap.size === 0) {\n targetEvents.delete(event);\n }\n if (targetEvents.size === 0) {\n i._listenersMap.delete(target);\n }\n}\n\n\nexport function destroyListeners(i) {\n\n for (const [target, targetEvents] of i._listenersMap) {\n\n for (const [event, handlersMap] of targetEvents) {\n\n for (const [handler, options] of handlersMap) {\n\n target.removeEventListener(event, handler, options);\n }\n }\n }\n\n //console.log('destroyListeners: ', i);\n\n i._listenersMap.clear();\n}\n\n\nexport function removeTargetListeners(i, target) {\n\n if (!target) return;\n\n const targetEvents = i._listenersMap.get(target);\n if (!targetEvents) return;\n\n // Remove do DOM todos os eventos vinculados a este alvo por esta instância\n for (const [event, handlersMap] of targetEvents) {\n\n for (const [handler, options] of handlersMap) {\n \n target.removeEventListener(event, handler, options);\n }\n }\n\n // Remove do mapa de memória\n i._listenersMap.delete(target);\n\n // Limpa as flags para que, caso o elemento volte a ser Target no futuro,\n // ele permita ser vinculado novamente\n delete target.dataset.hyperfloatBound;\n delete target.dataset.hyperfloatOpened;\n}","// src/instance/dismiss.js\n\nimport { getManager } from '../helpers/getManager.js';\n\nimport {\n addListener\n} from '../helpers/listener.js';\n\nexport function syncDismiss(i) {\n\n if (i.dismiss.pointerLeave) {\n\n preparePointerLeave(i);\n }\n\n if (i.dismiss.outsideClick) {\n\n prepareOutsideEvent(i,\n 'pointerdown'\n );\n }\n\n if (i.dismiss.outsideWheel) {\n\n prepareOutsideEvent(i,\n 'wheel'\n );\n }\n}\n\nexport function preparePointerLeave(i) {\n\n if (i._config.anchor !== 'pointer') {\n\n addListener(\n i,\n i._elements.box,\n 'pointerleave',\n i._handlers.pointerLeave\n );\n }\n\n // O ícone de abertura por exemplo\n [...i._registry.open.keys()].forEach(element => {\n\n addListener(\n i,\n element,\n 'pointerleave',\n i._handlers.pointerLeave\n );\n });\n}\n\nexport function prepareOutsideEvent(i, event, options) {\n\n const handlerKey = `outside_${event}`;\n\n if (!i._handlers[handlerKey]) {\n\n i._handlers[handlerKey] = (e) => {\n\n if (!i.opened) return;\n\n const protectedBoxes = [\n i._elements.box,\n //i._elements.overlayEl,\n ...getManager()._getElementsAbovePriority(i._state.priority)\n ];\n\n const clickedInsideProtectedBox = protectedBoxes.some(box =>\n box?.contains(e.target)\n );\n\n if (clickedInsideProtectedBox) {\n return;\n }\n\n const isTarget = [...i._registry.open.keys()].some(element =>\n element.contains(e.target)\n );\n\n //console.log('_registry.open: ', [...i._registry.open.keys()]);\n\n //console.log('target: ', e.target);\n\n if (isTarget) {\n return;\n }\n\n i.close({\n event: event === 'pointerdown'\n ? 'outside-click'\n : 'outside-wheel'\n });\n };\n }\n\n addListener(\n i,\n window,\n event,\n i._handlers[handlerKey],\n options\n );\n}","// src/helpers/applicators.js\n\nimport {\n calcOffsetMargin\n} from './calcOffsetMargin.js';\n\n//------------------------------------------------------\n// Boundary Padding\n\nexport function applyBoundaryPadding(i) {\n\n if (i.anchor !== 'viewport') return;\n\n if (\n i.boundaryPadding === null ||\n i.boundaryPadding === 0\n ) return;\n\n const boundary = i._elements.boundary;\n\n const padding = i.boundaryPadding;\n\n boundary.style.paddingTop = padding.top + 'px';\n boundary.style.paddingRight = padding.right + 'px';\n boundary.style.paddingBottom = padding.bottom + 'px';\n boundary.style.paddingLeft = padding.left + 'px';\n}\n\n//------------------------------------------------------\n// Box Offset\n\nexport function applyBoxOffset(i) {\n\n if (i.anchor !== 'viewport') return;\n\n if (i.offset === null) return;\n\n const margin = calcOffsetMargin(\n i.offset,\n i.placement\n );\n\n const box = i._elements.box;\n\n box.style.marginTop = margin.top;\n box.style.marginRight = margin.right;\n box.style.marginBottom = margin.bottom;\n box.style.marginLeft = margin.left;\n}\n\n//------------------------------------------------------\n// Size\n\nexport function applySize(i) {\n\n i._elements.boundary.dataset.hyperfloatSize = i.size.type == 'preset'\n ? i.size.width\n : 'custom';\n\n if (i.size.type == 'custom') {\n\n i._elements.box.style.width = i.size.width ?? '100%';\n i._elements.box.style.height = i.size.height ?? '100%';\n }\n}\n\n//------------------------------------------------------\n// Overlay\n\nexport function applyOverlay(i) {\n\n if (i.overlay === null) return;\n\n i._elements.boundary.dataset.hyperfloatOverlayEnabled = i.overlay.enabled;\n i._elements.boundary.dataset.hyperfloatOverlayColor = i.overlay.color;\n i._elements.boundary.dataset.hyperfloatOverlayBlur = i.overlay.blur;\n}\n\n//------------------------------------------------------\n// Placement\n\nexport function applyPlacement(i) {\n\n i._elements.boundary.dataset.hyperfloatPlacement = i.placement;\n}","// src/helpers/calcOffsetMargin.js\n\nexport function calcOffsetMargin(offset, placement) {\n\n const {\n mainAxis = 0,\n crossAxis = 0,\n alignmentAxis = null\n } = offset;\n\n //--------------------------------------------------\n // Placement\n\n const [side, alignment] = placement.split('-');\n\n //--------------------------------------------------\n // Axis\n\n const isVertical = (\n side === 'top' ||\n side === 'bottom'\n );\n\n //--------------------------------------------------\n // Main Axis\n\n let marginTop = 0;\n let marginRight = 0;\n let marginBottom = 0;\n let marginLeft = 0;\n\n if (isVertical) {\n\n marginTop += side === 'top'\n ? -mainAxis\n : mainAxis;\n\n } else {\n\n marginLeft += side === 'left'\n ? -mainAxis\n : mainAxis;\n }\n\n //--------------------------------------------------\n // Cross Axis\n\n let cross = crossAxis;\n\n //--------------------------------------------------\n // Alignment Axis\n\n if (\n alignment &&\n alignmentAxis !== null\n ) {\n\n cross = alignmentAxis;\n\n if (alignment === 'end') {\n cross *= -1;\n }\n }\n\n //--------------------------------------------------\n // Apply Cross Axis\n\n if (isVertical) {\n\n marginLeft += cross;\n\n } else {\n\n marginTop += cross;\n }\n\n return {\n top: marginTop + 'px',\n right: marginRight + 'px',\n bottom: marginBottom + 'px',\n left: marginLeft + 'px'\n };\n}","// src/instance/setters.js\n\nimport allowedValues from '../constants/allowedValues.js';\n\nimport {\n toArray\n} from '../utils/index.js'; \n\nimport {\n normalizeAccessibilityOptions,\n normalizeBoundaryPaddingOptions,\n normalizeDismissOptions,\n normalizeDraggableOptions,\n normalizeFlipOptions,\n normalizeMetaOptions,\n normalizeOffsetOptions,\n normalizeOverlayOptions,\n normalizePlacement,\n normalizeShiftOptions,\n normalizeSizeOptions,\n} from '../helpers/normalizers.js';\n\nimport {\n syncDismiss\n} from './dismiss.js';\n\nimport {\n applyBoundaryPadding,\n applyBoxOffset,\n applyOverlay,\n applyPlacement,\n applySize\n} from '../helpers/applicators.js';\n\n/*import {\n syncPosition\n} from './sync.js';*/\n\n//------------------------------------------------------\n// Meta\n\nexport function setMeta(i, value) {\n\n i._config.meta = normalizeMetaOptions(value ?? allowedValues.meta.default)\n\n // Get Old\n const oldAttrs = i._cache.lastApplyMeta;\n\n // Get New\n const newAttrs = i._helpers.createMetaDataset();\n\n // Remove lasted\n for (const key of Object.keys(oldAttrs)) {\n\n i._elements.boundary.removeAttribute(key);\n }\n\n // Apply New\n for (const [key, val] of Object.entries(newAttrs)) {\n\n i._elements.boundary.setAttribute(key, val);\n }\n}\n\n//------------------------------------------------------\n// Accessibility\n\nexport function setAccessibility(i, value) {\n\n i._config.accessibility = normalizeAccessibilityOptions(value ?? allowedValues.accessibility.default)\n\n // Get Old\n const oldAttrs = i._cache.lastApplyAccessibility;\n\n // Get New\n const newAttrs = i._helpers.createAccessibilityDataset();\n\n // Remove lasted\n for (const key of Object.keys(oldAttrs)) {\n\n i._elements.boundary.removeAttribute(key);\n }\n\n // Apply New\n for (const [key, val] of Object.entries(newAttrs)) {\n\n i._elements.boundary.setAttribute(key, val);\n }\n}\n\n//------------------------------------------------------\n// Dismiss\n\nexport function setDismiss(i, value) {\n\n i._config.dismiss = normalizeDismissOptions(value ?? allowedValues.dismiss.default)\n\n syncDismiss(i);\n}\n\n//------------------------------------------------------\n// Overlay\n\nexport function setOverlay(i, value) {\n\n i._config.overlay = normalizeOverlayOptions(value ?? allowedValues.overlay.default)\n\n applyOverlay(i);\n}\n\n//------------------------------------------------------\n// Placement\n\nexport function setPlacement(i, value) {\n\n const normalizedValue = normalizePlacement(value ?? allowedValues.placement.default,\n i.anchor\n );\n\n i._config.placement = normalizedValue;\n i._state.resolvedPlacement = normalizedValue;\n\n applyPlacement(i);\n}\n\n//------------------------------------------------------\n// Boundary Padding\n\nexport function setBoundaryPadding(i, value) {\n\n i._config.boundaryPadding = normalizeBoundaryPaddingOptions(value ?? allowedValues.placement.default);\n\n applyBoundaryPadding(i);\n}\n\n//------------------------------------------------------\n// Offset\n\nexport function setOffset(i, value) {\n\n i._config.offset = normalizeOffsetOptions(value ?? allowedValues.offset.default);\n\n applyBoxOffset(i);\n}\n\n//------------------------------------------------------\n// Flip\n\nexport function setFlip(i, value) {\n\n i._config.flip = normalizeFlipOptions(value ?? allowedValues.flip.default);\n\n if (\n typeof syncPosition === 'function' &&\n i.opened &&\n i.anchor == 'element' &&\n i.lastTarget\n ) {\n syncPosition(i);\n }\n}\n\n//------------------------------------------------------\n// Shift\n\nexport function setShift(i, value) {\n\n i._config.shift = normalizeShiftOptions(value ?? allowedValues.shift.default);\n\n if (\n typeof syncPosition === 'function' &&\n i.opened &&\n i.anchor == 'element' &&\n i.lastTarget\n ) {\n syncPosition(i);\n }\n}\n\n//------------------------------------------------------\n// Size\n\nexport function setSize(i, value) {\n\n i._config.size = normalizeSizeOptions(value ?? allowedValues.size.default);\n\n applySize(i);\n}\n\n//------------------------------------------------------\n// Draggable\n\nexport function setDraggable(i, value) {\n\n i._config.draggable = normalizeDraggableOptions(value ?? allowedValues.draggable.default,\n i.anchor\n );\n\n const handle = toArray(\n value?.handle,\n i._elements.boundary\n ); \n\n if (handle[0]) {\n i._config.draggable.handle = handle[0];\n }\n\n //console.log('setDraggable', i.draggable);\n}\n","// src/constants/baseOptions.js\n\nexport default [\n\n 'meta',\n\n 'accessibility',\n\n 'dismiss',\n\n 'destroyAfterClose',\n\n 'autoOpen',\n\n 'overlay',\n\n 'placement', \n\n 'boundaryPadding',\n\n 'draggable',\n\n 'offset',\n\n 'flip',\n\n 'shift',\n\n 'ignoreCloseAll',\n\n 'header',\n\n 'footer',\n\n 'size',\n\n 'breakpoints',\n\n 'debug',\n];","// src/constants/breakpointOptions.js\n\nimport baseOptions from '../constants/baseOptions.js';\n\nexport const preventBreakpointOptions = [\n 'breakpoints',\n 'destroyAfterClose',\n 'ignoreCloseAll',\n 'draggable',\n 'autoOpen',\n 'header',\n 'footer',\n 'debug'\n];\n\nexport const allowedBreakpointOptions = baseOptions.filter(\n option => !preventBreakpointOptions.includes(option)\n);","// src/instance/breakpoints.js\n\nimport {\n getManager\n} from '../helpers/getManager.js';\n\nimport {\n setAccessibility,\n setBoundaryPadding,\n setDismiss,\n setFlip,\n setMeta,\n setOffset,\n setOverlay,\n setPlacement,\n setShift,\n setSize\n} from './setters.js';\n \nimport {\n allowedBreakpointOptions,\n preventBreakpointOptions\n} from '../constants/breakpointOptions.js';\n\nimport {\n parseOptions\n} from '../helpers/parsers.js';\n\n//------------------------------------------------------\n// Setup\n\nexport function setupBreakpoints(i) {\n\n const rawBreakpoints = i.breakpoints || {};\n const breakpointKeys = Object.keys(rawBreakpoints);\n\n // Inicializa a matriz vazia com segurança se não houver breakpoints\n if (!breakpointKeys.length) {\n i._breakpoints = [];\n return;\n }\n\n const deepMerge = (parent, child) => {\n\n const result = { ...parent };\n for (const key in child) {\n\n if (\n typeof child[key] === 'object' &&\n !Array.isArray(child[key]) &&\n child[key] !== null &&\n typeof parent[key] === 'object'\n ) {\n result[key] = deepMerge(parent[key], child[key]);\n } else if (child[key] !== undefined && child[key] !== null) {\n result[key] = child[key];\n }\n }\n return result;\n };\n\n // Cria o Fallback (O \"Maior\" Breakpoint)\n const max = Math.max(...breakpointKeys.map(Number));\n const fallbackBp = max + 1;\n const fallbackConfig = {};\n\n for (const key of allowedBreakpointOptions) {\n\n if (i[key] !== undefined) {\n\n fallbackConfig[key] = i[key];\n }\n }\n\n // Ordena os breakpoints do usuário (Maior → Menor)\n const breakpoints = breakpointKeys.map(Number).sort((a, b) => b - a);\n\n // Insere o Fallback no INÍCIO da lista para ele ser o PAI de todos\n breakpoints.unshift(fallbackBp);\n\n const merged = {};\n\n // Já injeta o fallback no objeto merged\n merged[fallbackBp] = fallbackConfig;\n\n // Inicia o loop a partir do índice 1 (já que o 0 é o fallback)\n for (let i_ = 1; i_ < breakpoints.length; i_++) {\n\n const bp = breakpoints[i_];\n\n // Pega o breakpoint cru e filtra as propriedades permitidas\n const rawBase = rawBreakpoints[bp];\n let base = {};\n\n for (const key of Object.keys(rawBase)) {\n\n if (allowedBreakpointOptions.includes(key)) {\n\n base[key] = rawBase[key];\n }\n }\n\n // Normaliza os dados antes de fazer o merge com o Fallback/Pai\n base = parseOptions(i, base, preventBreakpointOptions);\n\n // Herda do pai (que no primeiro ciclo será o Fallback)\n const parentBp = breakpoints[i_ - 1];\n const parent = merged[parentBp];\n base = deepMerge(parent, base);\n\n merged[bp] = base;\n }\n\n // 5. Organiza em ordem crescente para uso no refresh\n // Retorna: [ [768, {...}], [1024, {...}], [1025, { FALLBACK }] ]\n i._breakpoints = Object.entries(merged)\n .map(([bp, val]) => [Number(bp), val])\n .sort((a, b) => a[0] - b[0]);\n\n //console.log(i._breakpoints);\n}\n\n//------------------------------------------------------\n// Update\n\nexport function resolveBreakpoints(i) {\n\n //console.log('resolveBreakpoints');\n\n if (!i._breakpoints || !i._breakpoints.length) return;\n\n const globalRefreshVersion = getManager()._cache.refreshVersion;\n\n if (\n i._state.firstresolveBreakpointsDone && // Apenas se o primeiro já estiver sido feito\n globalRefreshVersion === i._cache.resolveBreakpointsVersion\n ) {\n //console.log('Using breakpoints cache. refreshVersion: ', globalRefreshVersion);\n return;\n }\n\n let matched = false;\n const windowWidth = window.innerWidth;\n\n const breakpoints = i._breakpoints;\n\n for (const [breakpoint, values] of breakpoints) {\n\n if (windowWidth <= breakpoint) {\n\n matched = true;\n\n if (i._cache.lastBreakpoint !== breakpoint) {\n\n i._cache.lastBreakpoint = breakpoint;\n applyBreakpoints(i, values, breakpoint);\n }\n\n break;\n }\n }\n\n // Se nenhum breakpoint for aplicado, use o último (fallback)\n if (!matched) {\n\n const [fallbackBreakpoint, fallbackValues] = i._breakpoints[i._breakpoints.length - 1];\n\n if (i._cache.lastBreakpoint !== fallbackBreakpoint) {\n\n i._cache.lastBreakpoint = fallbackBreakpoint;\n\n applyBreakpoints(i, fallbackValues, fallbackBreakpoint);\n }\n }\n\n // Timestamp\n i._cache.resolveBreakpointsVersion = globalRefreshVersion;\n\n // Done\n i._state.firstresolveBreakpointsDone = true;\n\n /*console.log('resolveBreakpoints', {\n\n positioner: i.positionerRect,\n boundary: i.boundaryRect,\n targetRects: i._cache.targetRects\n });*/\n}\n\n//------------------------------------------------------\n// Apply\n\nexport function applyBreakpoints(i, values, breakpoint) {\n\n //console.log('applyBreakpoints');\n\n for (const [key, value] of Object.entries(values)) {\n\n if (key == 'meta') {\n\n setMeta(i, value);\n }\n\n if (key == 'accessibility') {\n\n setAccessibility(i, value);\n }\n\n if (key == 'dismiss') {\n\n setDismiss(i, value);\n }\n\n if (key == 'overlay') {\n\n setOverlay(i, value);\n }\n\n if (key == 'placement') {\n\n setPlacement(i, value);\n }\n\n if (key == 'boundaryPadding') {\n\n setBoundaryPadding(i, value);\n }\n\n if (key == 'offset') {\n\n setOffset(i, value);\n }\n\n if (key == 'flip') {\n\n setFlip(i, value);\n }\n\n if (key == 'shift') {\n\n setShift(i, value);\n }\n\n if (key == 'size') {\n\n setSize(i, value);\n }\n\n i._console.log(`Breakpoint: ${breakpoint} -> ${key}:`, value);\n\n //console.log(`Breakpoint: ${breakpoint} -> ${key}:`, value);\n }\n}","// src/helpers/computePosition/calcPosition.js\n\nexport function calcPosition(\n placement,\n anchor,\n element\n) {\n\n const {\n left: aLeft,\n top: aTop,\n right: aRight,\n bottom: aBottom,\n width: aWidth,\n height: aHeight\n } = anchor;\n\n const {\n width: eWidth,\n height: eHeight\n } = element;\n\n const centerX = aLeft + (aWidth / 2);\n const centerY = aTop + (aHeight / 2);\n\n switch (placement) {\n\n //------------------------------------------------------\n // Center\n\n case 'center':\n return {\n left: centerX - (eWidth / 2),\n top: centerY - (eHeight / 2)\n };\n\n //------------------------------------------------------\n // Top\n\n case 'top':\n return {\n left: centerX - (eWidth / 2),\n top: aTop - eHeight\n };\n\n case 'top-start':\n return {\n left: aLeft,\n top: aTop - eHeight\n };\n\n case 'top-end':\n return {\n left: aRight - eWidth,\n top: aTop - eHeight\n };\n\n //------------------------------------------------------\n // Right\n\n case 'right':\n return {\n left: aRight,\n top: centerY - (eHeight / 2)\n };\n\n case 'right-start':\n return {\n left: aRight,\n top: aTop\n };\n\n case 'right-end':\n return {\n left: aRight,\n top: aBottom - eHeight\n };\n\n //------------------------------------------------------\n // Bottom\n\n case 'bottom':\n return {\n left: centerX - (eWidth / 2),\n top: aBottom\n };\n\n case 'bottom-start':\n return {\n left: aLeft,\n top: aBottom\n };\n\n case 'bottom-end':\n return {\n left: aRight - eWidth,\n top: aBottom\n };\n\n //------------------------------------------------------\n // Left\n\n case 'left':\n return {\n left: aLeft - eWidth,\n top: centerY - (eHeight / 2)\n };\n\n case 'left-start':\n return {\n left: aLeft - eWidth,\n top: aTop\n };\n\n case 'left-end':\n return {\n left: aLeft - eWidth,\n top: aBottom - eHeight\n };\n\n default:\n return {\n left: centerX - (eWidth / 2),\n top: centerY - (eHeight / 2)\n };\n }\n}","// src/helpers/computePosition.js\n\nimport {\n calcPosition\n} from './computePosition/calcPosition.js';\n\nimport {\n calcOffset\n} from './computePosition/calcOffset.js';\n\nimport {\n calcShift\n} from './computePosition/calcShift.js';\n\nimport {\n calcFlip\n} from './computePosition/calcFlip.js';\n\n\nexport function computePosition({\n boundaryRect = window,\n elementRect = null,\n anchorRect = null,\n\n placement = 'bottom',\n\n offset = null,\n flip = null,\n shift = null\n\n} = {}) {\n\n let resolvedPlacement = placement;\n\n let left;\n let top;\n\n //------------------------------------------------------\n // Calculate\n //\n // Executa o pipeline de posicionamento para um\n // determinado placement.\n\n const calculate = () => {\n\n //--------------------------------------------------\n // Position\n\n ({\n left,\n top\n } = calcPosition(\n resolvedPlacement,\n anchorRect,\n elementRect\n ));\n\n //--------------------------------------------------\n // Offset\n\n if (offset !== null) {\n\n ({\n left,\n top\n } = calcOffset(\n offset,\n resolvedPlacement,\n left,\n top\n ));\n }\n\n //--------------------------------------------------\n // Shift\n\n if (shift !== null) {\n\n const calculatedShift = calcShift(\n shift,\n resolvedPlacement,\n boundaryRect,\n anchorRect,\n elementRect,\n left,\n top,\n flip\n );\n\n //------------------------------------------------\n // Shift conseguiu resolver\n\n if (calculatedShift !== null) {\n\n ({\n left,\n top\n } = calculatedShift);\n\n return true;\n }\n\n //------------------------------------------------\n // Shift não conseguiu resolver\n\n return false;\n }\n\n return true;\n };\n\n\n //------------------------------------------------------\n // Initial\n //\n // Primeiro tenta resolver o placement original.\n\n const shiftResolved = calculate();\n\n\n //------------------------------------------------------\n // Flip\n //\n // Só entra se:\n //\n // 1. flip está habilitado;\n // 2. o placement original não pôde ser resolvido\n // pelo shift.\n\n if (\n flip !== null &&\n !shiftResolved\n ) {\n\n const flippedPlacement = calcFlip({\n flip,\n placement: resolvedPlacement,\n boundaryRect,\n anchorRect,\n elementRect,\n offset\n });\n\n if (flippedPlacement) {\n\n resolvedPlacement = flippedPlacement;\n\n //------------------------------------------------\n // Recalcula tudo para o novo placement.\n //\n // position → offset → shift\n\n calculate();\n }\n }\n\n //------------------------------------------------------\n // Return\n\n return {\n\n position: {\n left,\n top\n },\n\n coordinates: {\n left,\n top\n },\n\n placement: resolvedPlacement,\n\n resolvedPlacement\n };\n}","// src/helpers/computePosition/calcOffset.js\n\nexport function calcOffset(\n offset,\n placement,\n left,\n top\n) {\n\n const {\n mainAxis = 0,\n crossAxis = 0,\n alignmentAxis = null\n } = offset;\n\n //--------------------------------------------------\n // Placement\n\n const [side, alignment] = placement.split('-');\n\n //--------------------------------------------------\n // Axis\n\n const isVertical = (\n side === 'top' ||\n side === 'bottom'\n );\n\n //--------------------------------------------------\n // Main Axis\n //\n // top → -Y\n // bottom → +Y\n // left → -X\n // right → +X\n\n if (isVertical) {\n\n top += side === 'top'\n ? -mainAxis\n : mainAxis;\n\n } else {\n\n left += side === 'left'\n ? -mainAxis\n : mainAxis;\n }\n\n //--------------------------------------------------\n // Cross Axis\n //\n // vertical placement → X\n // horizontal placement → Y\n\n let cross = crossAxis;\n\n //--------------------------------------------------\n // Alignment Axis\n //\n // Só se aplica a placements alinhados.\n //\n // start → direção normal\n // end → direção invertida\n\n if (\n alignment &&\n alignmentAxis !== null\n ) {\n cross = alignmentAxis;\n\n if (alignment === 'end') {\n cross *= -1;\n }\n }\n\n //--------------------------------------------------\n // Apply Cross Axis\n\n if (isVertical) {\n left += cross;\n } else {\n top += cross;\n }\n\n return {\n left,\n top\n };\n}","// src/helpers/computePosition/calcShift.js\n\nexport function calcShift(\n shift,\n placement,\n boundaryRect,\n anchorRect,\n elementRect,\n left,\n top,\n flip = null\n) {\n\n const {\n mainAxis = false,\n crossAxis = false\n } = shift;\n\n const clamp = (value, min, max) =>\n Math.max(min, Math.min(value, max));\n\n const [side, alignment] = placement.split('-');\n\n const isVertical = (\n side === 'top' ||\n side === 'bottom'\n );\n\n //------------------------------------------------------\n // Original\n\n const originalLeft = left;\n const originalTop = top;\n\n //------------------------------------------------------\n // Horizontal\n\n const minLeft = boundaryRect.left;\n const maxLeft = boundaryRect.right - elementRect.width;\n\n //------------------------------------------------------\n // Vertical\n\n const minTop = boundaryRect.top;\n const maxTop = boundaryRect.bottom - elementRect.height;\n\n //------------------------------------------------------\n // Shift\n\n if (isVertical) {\n\n // crossAxis → horizontal\n if (crossAxis) {\n left = clamp(left, minLeft, maxLeft);\n }\n\n // mainAxis → vertical\n if (mainAxis) {\n top = clamp(top, minTop, maxTop);\n }\n\n } else {\n\n // mainAxis → horizontal\n if (mainAxis) {\n left = clamp(left, minLeft, maxLeft);\n }\n\n // crossAxis → vertical\n if (crossAxis) {\n top = clamp(top, minTop, maxTop);\n }\n }\n\n //------------------------------------------------------\n // Validate placement\n //\n // Só invalida o placement atual quando:\n // 1. O shift atravessou o anchor no eixo principal;\n // 2. Flip está habilitado;\n // 3. Flip possui o eixo necessário para corrigir o problema.\n //------------------------------------------------------\n\n if (flip !== null) {\n\n const {\n mainAxis = false,\n crossAxis = false\n } = flip;\n\n let placementInvalid = false;\n\n //--------------------------------------------------\n // Main Axis\n //\n // O problema aqui só pode ser corrigido por\n // flip no mainAxis.\n //--------------------------------------------------\n\n if (mainAxis) {\n\n if (\n side === 'right' &&\n left < anchorRect.right\n ) {\n placementInvalid = true;\n }\n\n if (\n side === 'left' &&\n left + elementRect.width > anchorRect.left\n ) {\n placementInvalid = true;\n }\n\n if (\n side === 'top' &&\n top + elementRect.height > anchorRect.top\n ) {\n placementInvalid = true;\n }\n\n if (\n side === 'bottom' &&\n top < anchorRect.bottom\n ) {\n placementInvalid = true;\n }\n }\n\n //--------------------------------------------------\n // Cross Axis\n //\n // CrossAxis não troca o side do placement.\n // Portanto, não deve ser usado para decidir se\n // o placement principal pode sofrer flip.\n //--------------------------------------------------\n\n if (placementInvalid) {\n return null;\n }\n }\n\n //------------------------------------------------------\n // Result\n\n return {\n left,\n top\n };\n}","// src/helpers/computePosition/calcFlip.js\n\nimport {\n calcPosition\n} from './calcPosition.js';\n\nexport function calcFlip({\n flip,\n placement,\n boundaryRect,\n anchorRect,\n elementRect\n}) {\n\n if (flip === null) {\n return null;\n }\n\n const {\n mainAxis = true,\n crossAxis = false\n } = flip;\n\n const [side, alignment] = placement.split('-');\n\n //------------------------------------------------------\n // Helpers\n\n const fits = (left, top) => {\n\n return (\n left >= boundaryRect.left &&\n left + elementRect.width <= boundaryRect.right &&\n top >= boundaryRect.top &&\n top + elementRect.height <= boundaryRect.bottom\n );\n };\n\n const getOppositeSide = side => {\n\n switch (side) {\n\n case 'top':\n return 'bottom';\n\n case 'bottom':\n return 'top';\n\n case 'left':\n return 'right';\n\n case 'right':\n return 'left';\n\n default:\n return side;\n }\n };\n\n\n const getOppositeAlignment = alignment => {\n\n if (alignment === 'start') {\n return 'end';\n }\n\n if (alignment === 'end') {\n return 'start';\n }\n\n return null;\n };\n\n\n const getPlacement = (\n newSide,\n newAlignment = alignment\n ) => {\n\n if (!newAlignment) {\n return newSide;\n }\n\n return `${newSide}-${newAlignment}`;\n };\n\n\n //------------------------------------------------------\n // Main Axis\n //\n // right ↔ left\n // top ↔ bottom\n\n if (mainAxis) {\n\n const oppositeSide = getOppositeSide(side);\n\n const oppositePlacement = getPlacement(\n oppositeSide\n );\n\n const {\n left,\n top\n } = calcPosition(\n oppositePlacement,\n anchorRect,\n elementRect\n );\n\n if (fits(left, top)) {\n return oppositePlacement;\n }\n }\n\n\n //------------------------------------------------------\n // Cross Axis\n //\n // start ↔ end\n //\n // O side permanece o mesmo.\n\n if (\n crossAxis &&\n alignment\n ) {\n\n const oppositeAlignment =\n getOppositeAlignment(alignment);\n\n if (oppositeAlignment) {\n\n const oppositePlacement = getPlacement(\n side,\n oppositeAlignment\n );\n\n const {\n left,\n top\n } = calcPosition(\n oppositePlacement,\n anchorRect,\n elementRect\n );\n\n if (fits(left, top)) {\n return oppositePlacement;\n }\n }\n }\n\n\n //------------------------------------------------------\n // Nenhum flip disponível\n\n return null;\n}","// src/instance/registry.js\n\nimport {\n toArray\n} from '../utils/index.js';\n\nimport {\n addListener,\n removeTargetListeners\n} from '../helpers/listener.js';\n\nimport {\n syncDismiss\n} from './dismiss.js';\n\nimport {\n normalizeRegisterOptions,\n resolveHostHyperfloat\n} from '../helpers/normalizers.js';\n\n//------------------------------------------------------\n// Register\n\nexport function registerAction(i, action, params) {\n\n const entries = normalizeRegisterOptions(\n params ?? null\n );\n\n // No-op segura\n if (!entries.length) return () => { };\n\n const registeredElements = [];\n\n entries.forEach(entry => {\n\n const entryProps = {\n hostHyperfloat: resolveHostHyperfloat(entry.el),\n event: entry.event\n };\n\n i._registry[action].set(entry.el, entryProps);\n\n registeredElements.push(entry.el);\n });\n\n if (action === 'open') {\n\n syncOpenTargets(i);\n //console.log(i._registry.open);\n\n } else {\n\n syncCloseTargets(i);\n //console.log(i._registry.close);\n }\n\n syncDismiss(i);\n\n // Teardown\n return () => {\n unregisterAction(i, action, registeredElements);\n };\n}\n\n//------------------------------------------------------\n// Unregister\n\nexport function unregisterAction(i, action, target) {\n\n const targets = toArray(target);\n //let removedCount = 0;\n\n targets.forEach(el => {\n\n if (\n (el instanceof Element) &&\n i._registry[action]?.has(el)\n ) { \n\n // Remove os event listeners atrelados ao nó físico\n removeTargetListeners(i, el);\n\n // Remove do mapa de registro\n i._registry[action].delete(el);\n\n // 3. Limpa referências ativas no ponteiro para evitar dangling pointers\n if (i._state.pointer.target.el == el) {\n\n i._state.pointer.target = {\n el: null,\n action: null\n };\n }\n\n //removedCount++;\n }\n });\n\n // Deprecated\n // Se houve alterações reais, recalcula o estado e os listeners globais\n /*if (removedCount > 0) {\n\n if (action === 'open') {\n\n syncOpenTargets(i);\n } else {\n\n syncCloseTargets(i);\n }\n\n syncDismiss(i);\n }*/\n}\n\n//------------------------------------------------------\n// Sync Targets\n\nexport function syncTargets(i) {\n\n syncOpenTargets(i);\n\n syncCloseTargets(i);\n}\n\n//------------------------------------------------------\n// Sync Open\n\nexport function syncOpenTargets(i) {\n\n for (const [el, props] of i._registry.open) {\n\n // Se o elements antigos não está mais válido deve limpar listeners\n if (!(el instanceof Element)) {\n\n removeTargetListeners(i, el);\n\n i._registry.open.delete(el);\n continue;\n }\n\n // É um novo elemento?\n\n if (el.dataset.hyperfloatBound === 'true') continue;\n\n registerOpenElement(i, el, props);\n\n el.dataset.hyperfloatOpened = String(i.opened);\n\n el.dataset.hyperfloatBound = 'true';\n\n addListener(\n i,\n el,\n 'pointerenter',\n () => {\n i._state.pointer.target = {\n el,\n action: 'open',\n }\n }\n );\n };\n}\n\n//------------------------------------------------------\n// Register Open Element\n\nexport function registerOpenElement(i, el, props) {\n\n const event = props.event;\n\n if (event == 'click') {\n\n addListener(\n i,\n el,\n 'click',\n //() => i.open({ target: el})\n () => {\n\n if (i.opened) {\n\n i.close({\n target: el\n });\n\n } else {\n\n i.open({\n target: el\n });\n }\n }\n );\n\n return;\n }\n else if (\n [\n 'pointerenter',\n 'pointermove',\n ].includes(event)\n ) {\n\n addListener(\n i,\n el,\n i.anchor === 'pointer'\n ? 'pointermove'\n : 'pointerenter',\n\n () => i.open({\n target: el\n })\n );\n }\n}\n\n//------------------------------------------------------\n// Sync Default Close \n\nexport function syncDefaultCloseEntries(i) {\n\n const defaultEntries = toArray(i._defaultCloseSelector,\n i._elements.boundary\n );\n\n if (i._elements.overlayEl) {\n defaultEntries.push(i._elements.overlayEl);\n }\n\n defaultEntries.forEach(el => {\n\n const entryProps = {\n hostHyperfloat: resolveHostHyperfloat(el),\n event: 'click'\n };\n\n if (!i._registry.close.has(el)) {\n\n i._registry.close.set(el, entryProps);\n }\n });\n}\n\n//------------------------------------------------------\n// Sync Close Register\n\nexport function syncCloseTargets(i) {\n\n for (const [el, props] of i._registry.close) {\n\n // Se o elements antigos não está mais válido deve limpar listeners\n if (!(el instanceof Element)) {\n\n removeTargetListeners(i, el);\n\n i._registry.close.delete(el);\n continue;\n }\n\n if (el.dataset.hyperfloatBound === 'true') continue;\n\n addListener(i, el, 'click', () => {\n i.close({ target: el });\n });\n\n el.dataset.hyperfloatOpened = String(i.opened);\n\n el.dataset.hyperfloatBound = 'true';\n\n addListener(\n i,\n el,\n 'pointerenter',\n () => {\n i._state.pointer.target = {\n el,\n action: 'close'\n };\n }\n );\n }\n}","//\n\nexport async function interpolation(i, x, y) {\n\n const _interpolate = i._data?.interpolate ?? i.interpolate ?? null;\n\n if (typeof _interpolate === 'function') {\n\n const interpolateX = await _interpolate.call(i, {\n\n axis: 'x',\n\n current: i._state.interpolation.lastX ?? x,\n\n target: x,\n\n pointer: i._state.pointer,\n\n });\n\n if (typeof interpolateX == 'number') {\n x = interpolateX;\n }\n\n const interpolateY = await _interpolate.call(i, {\n\n axis: 'y',\n\n current: i._state.interpolation.lastY ?? y,\n\n target: y,\n\n pointer: i._state.pointer,\n\n });\n\n if (typeof interpolateY == 'number') {\n y = interpolateY;\n }\n }\n\n i._state.interpolation.lastX = x;\n\n i._state.interpolation.lastY = y;\n\n //------------------------------------------------------\n // \n return {\n x,\n y\n };\n}","// src/manager/prioritize.js\n\nimport {\n getManager\n} from '../helpers/getManager.js';\n\nexport function prioritize(instance) {\n\n const m = getManager();\n\n let maxPriority = 0;\n\n m._instancesMap.forEach((currentInstance) => {\n\n if (\n !currentInstance ||\n !currentInstance._state.ready\n ) {\n return;\n }\n\n maxPriority = Math.max(\n maxPriority,\n currentInstance._state.priority ?? 0\n );\n });\n const priority = maxPriority + 1;\n\n instance._state.priority = priority;\n\n const zIndex = instance.anchor === 'pointer'\n ? priority + 1000\n : priority;\n\n const boundary = instance.elements?.boundary;\n\n if (boundary) {\n boundary.style.zIndex = String(zIndex);\n }\n}","// src/instance/draggable.js\n\nimport {\n addListener,\n removeListener\n} from '../helpers/listener.js';\n\nimport {\n interpolation\n} from '../helpers/interpolate.js';\n\nimport {\n prioritize\n} from '../manager/prioritize.js';\n\nimport {\n callHook\n} from './hooks.js';\n\nexport function setupDraggable(i) {\n\n if (!i.draggable?.enabled) return;\n\n\n\n // Ativa ancoragem pra evitar \"pulo\"\n i._state.anchored = true;\n i._elements.boundary.dataset.hyperfloatAnchored = 'true';\n\n\n\n\n // 2. Escuta o movimento\n i._handlers.pointerMove = (e) => {\n\n if (!i._state.drag) return;\n\n // Filtro 3: O \"Threshold\" (Limiar de Intenção)\n if (!i._state.dragging) {\n\n const moveX = Math.abs(e.clientX - i._state.drag.startX);\n const moveY = Math.abs(e.clientY - i._state.drag.startY);\n\n // Se moveu mais de 3px, o usuário REALMENTE quer arrastar\n if (moveX > 3 || moveY > 3) {\n\n i._state.dragging = true;\n\n //console.log('arrastando');\n\n // Trava a seleção de texto para não borrar a tela durante o arraste\n document.body.style.userSelect = 'none';\n i._elements.box.style.touchAction = 'none'; // Evita scroll no mobile\n }\n }\n\n // Se a intenção foi confirmada, roda a sua engine de drag\n if (i._state.dragging) {\n\n syncDrag(i, e);\n }\n }\n\n // 3. Finaliza o arraste\n i._handlers.pointerUp = (e) => {\n\n if (i._state.drag) {\n\n if (i._state.dragging) {\n\n // Limpa os travamentos visuais\n document.body.style.userSelect = '';\n i._elements.box.style.touchAction = '';\n }\n\n i._state.drag = null; // Destrói o estado de drag\n }\n\n //console.log('soltou');\n\n i._state.dragging = false;\n\n // Remove os listeners de movimento para poupar memória\n removeListener(\n i,\n document,\n 'pointermove',\n i._handlers.pointerMove\n );\n\n removeListener(\n i,\n document,\n 'pointerup',\n i._handlers.pointerUp\n );\n }\n\n // 1. Escuta o clique inicial no Box \n\n i._handlers.pointerDown = (e) => {\n\n // Ignorar se o clique não for com o botão principal (esquerdo do mouse)\n if (e.button !== 0) return;\n\n if (!i.opened) return;\n\n // Ignorar se o usuário clicou em algo interativo dentro do hyperfloat\n const interactiveElements = ['BUTTON', 'INPUT', 'TEXTAREA', 'SELECT', 'A'];\n if (\n interactiveElements.includes(e.target.tagName) ||\n e.target.closest('[data-no-drag]')\n ) {\n return;\n } \n\n // Filtro do \"Handle\" (Alça de Arraste)\n if (i.draggable.handle) {\n\n const handle = i.draggable.handle;\n\n if (typeof handle === 'string') {\n\n // Se for string (seletor CSS), usamos o closest\n if (!e.target.closest(handle)) {\n return; // Ignora o clique\n }\n }\n else if (\n handle instanceof Node ||\n handle instanceof Element\n ) {\n\n // Se for um elemento físico do DOM, checamos se o clique ocorreu DENTRO dele\n if (!handle.contains(e.target)) {\n return; // Ignora o clique\n }\n }\n }\n\n // Salva o estado inicial (Ainda NÃO é um drag, é apenas um clique potencial)\n const posRect = i.positionerRect;\n\n // Pegue o boundary do cache (onde o padding já está aplicado)\n const boundRect = i.boundaryRect;\n\n // Resgata os valores atuais de translate (se for o primeiro clique, é 0)\n const currentX = i._state.position.x || 0;\n const currentY = i._state.position.y || 0;\n\n i._state.drag = {\n startX: e.clientX,\n startY: e.clientY,\n initialX: currentX,\n initialY: currentY,\n\n // Calcula os limites máximos de movimento (Delta Bounds)\n // \"Onde estou agora\" MINUS \"A distância até a borda\"\n minX: boundRect ? currentX - (posRect.left - boundRect.left) : -Infinity,\n maxX: boundRect ? currentX + (boundRect.right - posRect.right) : Infinity,\n minY: boundRect ? currentY - (posRect.top - boundRect.top) : -Infinity,\n maxY: boundRect ? currentY + (boundRect.bottom - posRect.bottom) : Infinity,\n };\n\n i._state.dragging = false;\n\n prioritize(i);\n\n //console.log('apertou');\n\n // Adiciona os listeners\n\n addListener(\n i,\n document,\n 'pointermove',\n i._handlers.pointerMove\n );\n\n addListener(\n i,\n document,\n 'pointerup',\n i._handlers.pointerUp\n );\n };\n\n addListener(\n i,\n i._elements.box,\n 'pointerdown',\n i._handlers.pointerDown\n );\n}\n\nexport async function syncDrag(i, event) {\n\n if (!event || !i._state.drag) return;\n\n // Delta\n const deltaX = event.clientX - i._state.drag.startX;\n const deltaY = event.clientY - i._state.drag.startY;\n\n // A nova posição de transform (Posição anterior + Delta)\n let x = i._state.drag.initialX + deltaX;\n let y = i._state.drag.initialY + deltaY;\n\n // Lógica de Colisão (Boundary Clamping com os deltas)\n if (i.draggable.bounds) {\n\n x = Math.max(i._state.drag.minX, Math.min(x, i._state.drag.maxX));\n y = Math.max(i._state.drag.minY, Math.min(y, i._state.drag.maxY));\n }\n\n // 4. Salva o estado para o próximo clique não dar pulo!\n i._state.position.x = x;\n i._state.position.y = y;\n\n //------------------------------------------------------\n // Interpolation\n\n const {\n x: newX,\n y: newY\n } = await interpolation(i,\n x,\n y\n );\n\n //------------------------------------------------------\n // \n\n i._elements.positioner.style.transform = `translate3d(${newX}px, ${newY}px, 0)`;\n\n //------------------------------------------------------\n // \n await callHook('onMove', i, {\n x: newX,\n y: newY\n });\n}","// src/instance/sync.js\n\nimport {\n getManager\n} from '../helpers/getManager.js';\n\nimport {\n callHook\n} from './hooks.js';\n\nimport {\n isOutsideViewport\n} from '../utils/index.js';\n\nimport {\n resolveBreakpoints\n} from './breakpoints.js';\n\nimport {\n computePosition\n} from '../helpers/computePosition.js';\n\nimport {\n syncTargets,\n} from './registry.js';\n\nimport {\n syncDismiss,\n} from './dismiss.js';\n\nimport {\n interpolation\n} from '../helpers/interpolate.js';\nimport { syncDrag } from './draggable.js';\n\nexport function sync(i, {\n force = false\n} = {}) {\n\n //console.log('syncInstance');\n\n //------------------------------------------------------\n // Entries\n\n syncTargets(i);\n\n //------------------------------------------------------\n // Dismiss\n\n syncDismiss(i);\n\n //------------------------------------------------------\n // \n\n callHook('onSync', i, {});\n}\n\nexport function refresh(i, {\n force = false\n} = {}) {\n\n //console.log('refresh instance', i);\n //console.log('force: ', force);\n\n if (i.opened) {\n\n //------------------------------------------------------\n // Update Rects\n\n if ([\n 'pointer',\n 'element'\n ].includes(i.anchor)\n ) {\n computeRects(i, {\n force\n });\n }\n\n if (i.draggable?.enabled) {\n\n computeRects(i, {\n force\n });\n }\n\n //------------------------------------------------------\n // Breakpoints\n\n if (\n i._breakpoints &&\n !i._breakpoints.length\n ) {\n\n resolveBreakpoints(i);\n }\n\n //------------------------------------------------------\n // Update Rects\n\n if (\n [\n 'pointer',\n 'element'\n ].includes(i.anchor) &&\n\n i.lastTarget\n ) {\n syncPosition(i);\n }\n\n if (i.draggable?.enabled) {\n\n syncDrag(i);\n }\n }\n\n callHook('onRefresh', i, {});\n}\n\nexport function update(i, {\n force = false\n} = {}) {\n\n //------------------------------------------------------\n // Update Rects \n\n if (\n i.opened &&\n i.anchor == 'element' &&\n i.lastTarget\n ) {\n //console.log('Update instance');\n\n syncPosition(i);\n\n callHook('onUpdate', i, {});\n }\n\n /*if (i.draggable?.enabled) {\n\n syncDrag(i);\n }*/\n}\n\nexport function raf(i) {\n\n if (i.opened) {\n\n if (i.anchor == 'pointer') {\n\n syncPosition(i);\n }\n }\n}\n\nexport function computeRects(i, {\n force = false\n} = {}) {\n\n if (\n !i._elements.boundary ||\n !i._elements.box ||\n (\n i.anchor == 'element' &&\n !i._registry.open.size\n // elements precisam existir para serem calculados\n )\n ) {\n return;\n }\n\n const globalRefreshVersion = getManager()._cache.refreshVersion;\n\n if (!force) {\n\n if (\n i._state.firstcomputeRectsDone && // Apenas se o primeiro já estiver sido feito\n globalRefreshVersion === i._cache.computeRectsVersion\n ) {\n\n //console.log('Using rects cache. refreshVersion: ', globalRefreshVersion);\n return;\n }\n }\n\n //------------------------------------------------------\n // Positioner\n\n if (\n [\n 'pointer',\n 'element'\n ].includes(i.anchor) ||\n i.draggable?.enabled\n ) {\n\n i._cache.positionerRect = i._elements.positioner.getBoundingClientRect();\n }\n\n //------------------------------------------------------\n // Boundary\n\n const boundaryRect = i._elements.boundary.getBoundingClientRect();\n\n if (\n i.boundaryPadding === null ||\n i.boundaryPadding === 0\n ) {\n\n i._cache.boundaryRect = boundaryRect;\n }\n else {\n\n const boundaryPadding = i.boundaryPadding;\n\n i._cache.boundaryRect = {\n x: boundaryRect.x,\n y: boundaryRect.y,\n left: boundaryRect.left + boundaryPadding.left,\n top: boundaryRect.top + boundaryPadding.top,\n right: boundaryRect.right - boundaryPadding.right,\n bottom: boundaryRect.bottom - boundaryPadding.bottom,\n\n width: (boundaryRect.right - boundaryPadding.right) - (boundaryRect.left + boundaryPadding.left),\n height: (boundaryRect.bottom - boundaryPadding.bottom) - (boundaryRect.top + boundaryPadding.top),\n };\n\n //console.log(i.boundaryRect);\n }\n\n //------------------------------------------------------\n // \n\n /*i._cache.targetRects.clear();\n\n for (const [element, data] of i._registry.open) {\n\n i._cache.targetRects.set(\n element,\n element.getBoundingClientRect()\n );\n }*/\n\n //------------------------------------------------------\n // \n\n // Timestamp\n i._cache.computeRectsVersion = globalRefreshVersion;\n\n // Done\n i._state.firstcomputeRectsDone = true;\n\n /*console.log('computeRects', {\n boundary: i.boundaryRect,\n positioner: i.positionerRect,\n targetRects: i._cache.targetRects\n });*/\n};\n\nexport async function syncPosition(i) {\n\n const invalid =\n !i._registry.open.size ||\n !i.positionerRect ||\n !i.boundaryRect ||\n (\n i.anchor === 'element' &&\n (\n !i.lastTarget\n //|| !i._cache.targetRects.length\n )\n );\n\n if (invalid) {\n\n i._elements.positioner.style.transform = '';\n i._state.anchored = false;\n i._elements.boundary.dataset.hyperfloatAnchored = 'false';\n return;\n }\n\n //------------------------------------------------------\n // Update Anchor Rects\n\n let anchorRect;\n\n if (i.anchor === 'pointer') {\n\n const globalPointer = getManager()._cache.pointer;\n \n if (\n globalPointer.x === 0\n && globalPointer.y === 0\n ) {\n i._elements.positioner.style.opacity = 0;\n\n } else {\n\n if (i._elements.positioner.style.opacity == '0') {\n i._elements.positioner.style.opacity = '';\n }\n }\n\n i._state.pointer.x = globalPointer.x;\n i._state.pointer.y = globalPointer.y;\n //i._state.pointer.target = globalPointer.target;\n\n anchorRect = {\n left: i._state.pointer.x - 5,\n top: i._state.pointer.y - 5,\n right: i._state.pointer.x + 5,\n bottom: i._state.pointer.y + 5,\n width: 10,\n height: 10,\n x: i._state.pointer.x - 5,\n y: i._state.pointer.y - 5,\n };\n\n } else {\n\n anchorRect = i.lastTarget.getBoundingClientRect(); //i._cache.targetRects.get(i.lastTarget);\n\n //console.log(anchorRect);\n }\n\n //------------------------------------------------------\n // Check outside\n\n const outside = isOutsideViewport(anchorRect);\n\n if (outside) {\n\n if (!i._timers.outside) {\n\n //console.log('iniciou a contagem');\n\n i._timers.outside = setTimeout(() => {\n\n i.close({\n event: 'target-outside'\n });\n\n //console.log('fechou');\n\n i._timers.outside = null;\n\n }, i._outsideCloseDelay);\n }\n\n } else {\n\n //console.log('cancelou a contagem');\n\n clearTimeout(i._timers.outside);\n i._timers.outside = null;\n }\n\n //------------------------------------------------------\n // Before Update\n\n //await callHook('onBeforeUpdate', i, {});\n\n //------------------------------------------------------\n // Compute Position\n\n i._state.anchored = true;\n i._elements.boundary.dataset.hyperfloatAnchored = 'true';\n\n i._state.resolvedPlacement = i.placement;\n\n const computedPosition = computePosition({\n\n elementRect: i.positionerRect,\n anchorRect: anchorRect,\n boundaryRect: i.boundaryRect,\n\n placement: i.placement,\n\n offset: i.offset,\n\n flip: i.flip,\n\n shift: i.shift\n });\n\n i._state.resolvedPlacement = computedPosition.resolvedPlacement;\n\n\n //------------------------------------------------------\n // Before Update\n\n //await callHook('onUpdate', i, {});\n\n //------------------------------------------------------\n // Interpolation\n\n const {\n x,\n y\n } = await interpolation(i,\n computedPosition.position.left,\n computedPosition.position.top\n );\n\n //------------------------------------------------------\n // \n\n const left = x + 'px';\n const top = y + 'px';\n\n i._elements.positioner.style.transform = `translate3d(${left}, ${top}, 0)`;\n\n //------------------------------------------------------\n // After Update\n\n //await callHook('onAfterUpdate', i, {});\n\n await callHook('onMove', i, {\n x: left,\n y: top\n });\n}\n","export function isOutsideViewport(element) {\n\n let rect = null;\n\n if (\n typeof element === 'object'\n && element !== null\n ) {\n\n // Quando já recebe o rect\n rect = element;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n\n const isOutsite =\n rect.bottom <= 0 ||\n rect.top >= window.innerHeight ||\n rect.right <= 0 ||\n rect.left >= window.innerWidth;\n\n /*const isVisible =\n rect.bottom > 0 &&\n rect.top < window.innerHeight &&\n rect.right > 0 &&\n rect.left < window.innerWidth;*/\n\n return isOutsite;\n}","// src/instance/actions.js\n\nimport {\n callHook\n} from './hooks.js';\n\nimport {\n computeRects,\n syncPosition\n} from './sync.js';\n\nimport {\n resolveBreakpoints\n} from './breakpoints.js';\n\nimport {\n getManager\n} from '../helpers/getManager.js';\n\nimport {\n prioritize\n} from '../manager/prioritize.js';\n\nimport {\n addListener,\n removeListener,\n destroyListeners\n} from '../helpers/listener.js';\n\nimport { syncDrag } from './draggable.js';\n\n//------------------------------------------------------\n// Open\n\nexport async function open(i, {\n target = null, \n event = null,\n source = 'user',\n} = {}) {\n\n if (!i._state.ready) return;\n\n /*if (i._initializePromise) {\n await i._initializePromise;\n }*/\n\n //------------------------------------------------------\n // State\n\n if (\n i._state.opened\n || i._state.locked\n ) return;\n\n i._state.locked = true;\n\n i._state.opening = true;\n\n i._console.log('Opening:', i.id);\n\n //------------------------------------------------------\n // \n\n i._cache.parentHyperfloat = null;\n\n if (target) {\n\n let dataElement = i._registry.open.get(target);\n\n // Adiciona de forma inteligente novos elements que não estão listados\n /*if (!dataElement) {\n\n i.registerOpen(element);\n\n dataElement = i._registry.open.get(target);\n }*/\n\n if (\n dataElement &&\n dataElement.hostHyperfloat !== i.id\n ) {\n i._cache.parentHyperfloat = dataElement.hostHyperfloat;\n }\n }\n\n //------------------------------------------------------\n // Hook -> Before Open\n\n let resultHook = await callHook('onBeforeOpen', i, {\n target,\n event,\n source,\n });\n\n if (\n resultHook === false ||\n resultHook?.prevent\n ) {\n\n i._state.locked = false;\n i._state.opened = false;\n i._state.opening = false;\n return;\n }\n\n //------------------------------------------------------\n // Prioritize\n\n prioritize(i);\n\n //------------------------------------------------------\n // Anchoring\n\n i._cache.lastTarget = target;\n \n i._state.pointer.target = {\n el: target,\n action: 'open'\n };\n\n if (\n i.anchor === 'pointer' //||\n //i.draggable?.enabled\n ) {\n getManager()._syncPointerEngine(true); // Force\n }\n\n if ([\n 'pointer',\n 'element'\n ].includes(i.anchor)) {\n\n // Remover repetição\n if (!i._state.firstcomputeRectsDone) {\n\n await new Promise(requestAnimationFrame);\n await new Promise(requestAnimationFrame);\n }\n\n computeRects(i);\n syncPosition(i);\n }\n\n if (i.draggable?.enabled) {\n\n // Remover repetição\n if (!i._state.firstcomputeRectsDone) {\n\n await new Promise(requestAnimationFrame);\n await new Promise(requestAnimationFrame);\n }\n\n computeRects(i);\n syncDrag(i);\n }\n\n resolveBreakpoints(i);\n\n //------------------------------------------------------\n // Setup Inactive Close Delay\n\n if (\n i.dismiss.timeout &&\n i.dismiss.timeout !== null\n ) {\n i._handlers.startTimeoutTimer();\n }\n else if (\n i.dismiss.idleTimeout &&\n i.dismiss.idleTimeout !== null\n ) {\n\n addListener(i, i.elements.box, 'pointerenter', i._handlers.stopIdleTimer);\n addListener(i, i.elements.box, 'pointerleave', i._handlers.startIdleTimer);\n\n addListener(i, i.elements.box, 'pointerdown', i._handlers.stopIdleTimer);\n addListener(i, i.elements.box, 'wheel', i._handlers.stopIdleTimer, { passive: true });\n addListener(i, i.elements.box, 'touchstart', i._handlers.stopIdleTimer, { passive: true });\n addListener(i, i.elements.box, 'keydown', i._handlers.stopIdleTimer);\n addListener(i, i.elements.box, 'focusin', i._handlers.stopIdleTimer);\n\n i._handlers.startIdleTimer();\n }\n\n //------------------------------------------------------\n // Open\n\n await callHook('onOpen', i, {\n target,\n event,\n source\n });\n\n //------------------------------------------------------\n // Open\n\n i._state.opened = true;\n i._state.opening = false;\n\n i._elements.boundary.dataset.hyperfloatOpened = 'true';\n\n getManager()._setHyperfloatOpened(i, true);\n\n i._console.log('Open:', i.id);\n\n //------------------------------------------------------\n // Update Bound Status\n\n for (const [_element, _props] of i._registry.open) {\n\n _element.dataset.hyperfloatOpened = 'true';\n };\n\n for (const [_element, _props] of i._registry.close) {\n\n _element.dataset.hyperfloatOpened = 'true';\n };\n\n //------------------------------------------------------\n // After Open\n\n await callHook('onAfterOpen', i, {\n target,\n event,\n source\n });\n\n //------------------------------------------------------\n // Ready\n\n i._state.locked = false;\n}\n\nexport async function close(i, {\n target = null,\n event = null,\n source = 'user',\n} = {}) {\n\n if (!i._state.ready) return;\n\n /*if (i._initializePromise) {\n await i._initializePromise;\n }*/\n\n //------------------------------------------------------\n // State\n\n if (\n !i._state.opened\n || i._state.locked\n ) return;\n\n i._state.locked = true;\n\n i._state.opening = false;\n\n i._console.log('Closing:', i.id);\n\n //------------------------------------------------------\n // \n\n if (target) {\n\n /*let dataElement = i._registry.close.get(target);\n\n // Adiciona de forma inteligente novos elements que não estão listados\n if (!dataElement) {\n\n i.registerClose(element);\n\n dataElement = i._registry.open.get(target);\n }*/\n }\n\n //------------------------------------------------------\n // \n\n for (const [id, hyperfloatInstance] of getManager()._instancesMap) {\n\n if (\n hyperfloatInstance.parentHyperfloat === i.id &&\n hyperfloatInstance.dismiss.closeWithParent\n ) {\n\n await hyperfloatInstance.close({\n el,\n event,\n source\n });\n }\n };\n\n //------------------------------------------------------\n // Before Close\n\n let resultHook = await callHook('onBeforeClose', i, {\n target,\n event,\n source\n });\n\n if (\n resultHook === false ||\n resultHook?.prevent\n ) {\n i._state.locked = false;\n i._state.opened = true;\n i._state.opening = false;\n return;\n }\n\n //------------------------------------------------------\n // \n\n i._cache.lastcloseTarget = target;\n\n i._state.pointer.target = {\n el: target,\n action: 'close'\n };\n\n //------------------------------------------------------\n // Remove Inactive Close Delay\n\n if (\n i.dismiss.timeout &&\n i.dismiss.timeout !== null\n ) {\n i._handlers.stopTimeoutTimer();\n }\n else if (\n i.dismiss.idleTimeout &&\n i.dismiss.idleTimeout !== null\n ) {\n\n i._handlers.stopIdleTimer();\n\n removeListener(i, i.elements.box, 'pointerenter', i._handlers.stopIdleTimer);\n removeListener(i, i.elements.box, 'pointerleave', i._handlers.startIdleTimer);\n\n removeListener(i, i.elements.box, 'pointerdown', i._handlers.stopIdleTimer);\n removeListener(i, i.elements.box, 'wheel', i._handlers.stopIdleTimer);\n removeListener(i, i.elements.box, 'touchstart', i._handlers.stopIdleTimer);\n removeListener(i, i.elements.box, 'keydown', i._handlers.stopIdleTimer);\n removeListener(i, i.elements.box, 'focusin', i._handlers.stopIdleTimer);\n }\n\n //------------------------------------------------------\n // Close\n\n await callHook('onClose', i, {\n target,\n event,\n source\n });\n\n //------------------------------------------------------\n // Close\n\n i._state.opened = false;\n i._state.opening = false;\n\n i._elements.boundary.dataset.hyperfloatOpened = 'false';\n\n getManager()._setHyperfloatOpened(i, false);\n\n i._console.log('Close:', i.id);\n\n //------------------------------------------------------\n // Update Status\n\n for (const [_element, _props] of i._registry.open) {\n\n _element.dataset.hyperfloatOpened = 'false';\n };\n\n for (const [_element, _props] of i._registry.close) {\n\n _element.dataset.hyperfloatOpened = 'false';\n };\n\n //------------------------------------------------------\n // After Close\n\n await callHook('onAfterClose', i, {\n target,\n event,\n source\n });\n\n //------------------------------------------------------\n // Clear\n\n i._cache.lastTarget = null;\n\n i._cache.parentHyperfloat = null;\n\n i._state.pointer.target = {\n el: null,\n action: null\n }; \n\n //------------------------------------------------------\n // \n\n if (\n i.anchor === 'pointer' //||\n //i.draggable?.enabled\n ) {\n getManager()._syncPointerEngine();\n }\n\n //------------------------------------------------------\n // Ready\n\n i._state.locked = false;\n\n //------------------------------------------------------\n // Destroy After Close\n\n if (i.destroyAfterClose) {\n\n //console.log('destroyAfterClose');\n\n await destroy(i);\n }\n}\n\nexport async function destroy(i, {\n target = null,\n event = null,\n source = 'user'\n} = {}) {\n\n if (i.opened) {\n\n await close(i, {\n event: 'destroy',\n source,\n });\n }\n\n await callHook('onDestroy', i, {\n target,\n event,\n source\n });\n\n destroyListeners(i);\n\n if (i._elements.boundary) {\n i._elements.boundary.remove();\n }\n\n // Deletar a própria instancia\n\n getManager()._off('sync', i._handlers.sync);\n getManager()._off('update', i._handlers.update);\n getManager()._off('refresh', i._handlers.refresh);\n getManager()._off('raf', i._handlers.raf);\n\n getManager()._instancesMap.delete(i.id);\n} ","// src/instance/initializer.js\n\nimport {\n mount\n} from './mount.js';\n\nimport {\n sync\n} from './sync.js';\n\nimport {\n setupBreakpoints\n} from './breakpoints.js';\n\nimport {\n callHook\n} from './hooks.js';\n\nimport {\n syncDefaultCloseEntries\n} from './registry.js';\n\nimport {\n setupDraggable\n} from './draggable.js';\n\nexport async function initialize(i) {\n\n //console.log('initialize');\n\n await callHook('onBeforeInit', i, {});\n\n mount(i);\n\n syncDefaultCloseEntries(i);\n\n sync(i);\n\n setupBreakpoints(i);\n\n setupDraggable(i);\n\n //callHook('onInit', i, {}, false);\n await callHook('onInit', i, {});\n\n //callHook('onAfterInit', i, {}, false);\n await callHook('onAfterInit', i, {});\n\n ready(i);\n\n i._state.ready = true;\n};\n\nexport function ready(i) {\n\n i._console.log('Ready:', i.id);\n\n callHook('onReady', i, {});\n\n //console.log('Created:', i.id);\n};","// src/instance/mount.js\n\nimport {\n createElement,\n customRendering,\n} from '../utils/index.js';\n\nimport {\n applyBoundaryPadding,\n applyBoxOffset,\n applyOverlay,\n applyPlacement,\n applySize,\n} from '../helpers/applicators.js';\n\nimport {\n setDraggable\n} from './setters.js';\n\n//------------------------------------------------------\n// Mount\nexport function mount(i) {\n\n //------------------------------------------------------\n // Boundary\n\n i._elements.boundary = createElement('div', {\n\n attrs: {\n\n ...i._helpers.createMetaDataset(),\n\n ...i._helpers.createAccessibilityDataset(),\n\n 'data-hyperfloat-boundary': '',\n\n id: `${i.id}`,\n\n 'data-hyperfloat-id': `${i.id}`,\n\n 'data-hyperfloat-opened': 'false',\n\n //'role': 'dialog',\n\n //'aria-dialog': 'true',\n\n 'data-hyperfloat-anchor': i.anchor,\n\n 'data-hyperfloat-anchored': i._state.anchored,\n\n 'data-hyperfloat-draggable': i.draggable?.enabled === true,\n },\n\n appendTo: i._elements.root,\n\n });\n\n //------------------------------------------------------\n // Overlay\n\n i._elements.overlayEl = createElement('div', {\n\n class: 'hyperfloat-overlay',\n attrs: {\n 'data-hyperfloat-overlay': ''\n },\n appendTo: i._elements.boundary,\n });\n\n applyOverlay(i);\n\n //------------------------------------------------------\n // Positioner\n\n const hasPositioner = (\n [\n 'pointer',\n 'element'\n ].includes(i.anchor) ||\n i.draggable?.enabled\n );\n\n if (hasPositioner) {\n\n i._elements.positioner = createElement('div', {\n\n attrs: {\n 'data-hyperfloat-positioner': '',\n },\n appendTo: i._elements.boundary,\n\n });\n }\n\n //------------------------------------------------------\n // Box\n\n const appendToBox = hasPositioner\n ? i._elements.positioner\n : i._elements.boundary;\n\n i._elements.box = createElement('div', {\n\n class: 'hyperfloat-box',\n\n attrs: {\n 'data-hyperfloat-box': '',\n },\n\n appendTo: appendToBox,\n });\n\n //------------------------------------------------------\n // Header\n\n i._elements.headerInner = customRendering(i.header, i);\n\n if (i._elements.headerInner) {\n\n i._elements.header = createElement('div', {\n\n class: 'hyperfloat-header',\n\n attrs: {\n 'data-hyperfloat-header': ''\n },\n\n html: i._elements.headerInner,\n appendTo: i._elements.box,\n });\n\n i._elements.header.style.order = 1;\n }\n\n //------------------------------------------------------\n // Content\n\n i._elements.content = createElement('div', {\n\n attrs: {\n 'data-hyperfloat-content': ''\n },\n\n appendTo: i._elements.box,\n\n });\n\n i._elements.content.style.order = 2;\n\n // Content Inner\n i._elements.contentInner = createElement('div', {\n\n\n attrs: {\n 'data-hyperfloat-content-inner': ''\n },\n\n appendTo: i._elements.content,\n\n });\n\n // Content\n if (i.content) {\n\n customRendering(i.content, {}, i._elements.contentInner);\n }\n else {\n\n i._elements.loading = createElement('div', {\n\n class: 'hyperfloat-loading',\n\n attrs: {\n 'data-hyperfloat-loading': ''\n },\n\n html: '<span class=\"hyperfloat-loading-bar\" data-hyperfloat-loading-bar></span>',\n\n appendTo: i._elements.content,\n\n });\n }\n\n //------------------------------------------------------\n // Footer\n\n i._elements.footerInner = customRendering(i.footer, i);\n\n if (i._elements.footerInner) {\n\n i._elements.footer = createElement('div', {\n\n class: 'hyperfloat-footer',\n\n attrs: {\n 'data-hyperfloat-footer': ''\n },\n\n html: i._elements.footerInner,\n appendTo: i._elements.box,\n });\n\n i._elements.footer.style.order = 3;\n }\n\n // Padding \n applyBoundaryPadding(i);\n\n // Offset\n applyBoxOffset(i);\n\n // Placement\n applyPlacement(i);\n\n // Size\n applySize(i);\n\n //------------------------------------------------------\n // \n\n if (\n i.draggable?.enabled &&\n i._data?.draggable?.handle\n ) { \n setDraggable(i, {\n bounds: i.draggable.bounds,\n handle: i._data?.draggable?.handle\n });\n }\n}","// src/instance.js \n\nimport {\n getManager\n} from './helpers/getManager.js';\n\nimport {\n sync,\n refresh,\n update,\n raf\n} from './instance/sync.js';\n\nimport {\n open,\n close,\n destroy\n} from './instance/actions.js';\n\nimport {\n setAccessibility,\n setBoundaryPadding,\n setDismiss,\n setDraggable,\n setFlip,\n setMeta,\n setOffset,\n setOverlay,\n setPlacement,\n setShift,\n setSize\n} from './instance/setters.js';\n\nimport {\n registerAction\n} from './instance/registry.js';\n\nimport {\n _console\n} from './helpers/console.js';\n\nimport {\n initialize\n} from './instance/initializer.js';\n\nimport {\n normalizeRegisterOptions,\n resolveHostHyperfloat,\n} from './helpers/normalizers.js';\n\nimport {\n parseOptions\n} from './helpers/parsers.js';\n\nimport pkg from '../../../package.json';\nimport baseOptions from './constants/baseOptions.js';\nimport allowedValues from './constants/allowedValues.js';\n\nconst VERSION = pkg.version;\n\nexport default class Hyperfloat {\n\n constructor(dataRaw) {\n\n // Trava para evitar execução no Node.js/SSR\n if (typeof window === 'undefined') {\n return;\n }\n\n const data = getManager()._normalizeData(dataRaw);\n\n this._data = data;\n\n this._id = data.id;\n\n this._listenersMap = new Map();\n\n //------------------------------------------------------\n // Options \n\n this._config = {\n anchor: data.anchor ?? 'viewport', // element | viewport | pointer\n };\n\n this._config = {\n ...this._config,\n ...parseOptions(this, data),\n };\n\n // Content\n\n this.content = data.content ?? null;\n\n //------------------------------------------------------\n // Functions\n\n this._console = _console(\n this,\n '[Trivon Ui - Hyperfloat]',\n );\n\n //------------------------------------------------------\n // Timers\n\n this._timers = {\n\n pointerLeave: null,\n idle: null,\n timeout: null,\n outside: null,\n };\n\n this._outsideCloseDelay = 4000;\n\n //------------------------------------------------------\n // Elements\n\n this._elements = {\n\n root: data.root,\n\n boundary: null,\n\n positioner: null,\n\n box: null,\n\n content: null,\n\n contentInner: null,\n\n overlayEl: null,\n\n header: null,\n\n headerInner: null,\n\n footer: null,\n\n footerInner: null,\n\n loading: null,\n };\n\n //------------------------------------------------------\n // State\n\n this._state = {\n\n ready: false,\n\n opened: false,\n\n opening: false,\n\n locked: false,\n\n dragging: false,\n\n anchored: [\n 'element',\n 'pointer'\n ].includes(this.anchor),\n\n priority: 0,\n\n pointer: {\n x: 0,\n y: 0,\n target: {\n el: null,\n action: null\n },\n },\n\n drag: null,\n /*\n {\n startX: 0,\n startY: 0,\n offsetX: 0,\n offsetY: 0\n }\n */\n\n position: {\n x: 0,\n y: 0\n },\n\n interpolation: {\n lastX: 0,\n lastY: 0\n },\n\n resolvedPlacement: this._config.placement,\n\n firstresolveBreakpointsDone: false,\n\n firstcomputeRectsDone: false,\n };\n\n //------------------------------------------------------\n // \n\n this._breakpoints = [];\n\n //------------------------------------------------------\n // Handlers\n\n this._handlers = {\n\n startIdleTimer: () => {\n\n clearTimeout(this._timers.idle);\n\n if (!this.dismiss.idleTimeout || this.dismiss.idleTimeout <= 0) return;\n\n this._timers.idle = setTimeout(() => {\n\n close(this, {\n event: 'no-interaction'\n });\n\n }, this.dismiss.idleTimeout);\n },\n\n stopIdleTimer: () => {\n\n clearTimeout(this._timers.idle);\n },\n\n startTimeoutTimer: () => {\n\n clearTimeout(this._timers.timeout);\n\n if (!this.dismiss.timeout || this.dismiss.timeout <= 0) return;\n\n this._timers.timeout = setTimeout(() => {\n\n close(this, {\n event: 'timeout'\n });\n\n }, this.dismiss.timeout);\n },\n\n stopTimeoutTimer: () => {\n\n clearTimeout(this._timers.timeout);\n },\n\n sync: (...args) => sync(this, ...args),\n\n update: (...args) => update(this, ...args),\n\n refresh: (...args) => refresh(this, ...args),\n\n raf: () => raf(this),\n\n pointerLeave: (e) => {\n\n if (\n !this._state.opened &&\n !this._state.opening\n ) return;\n\n const el = e.currentTarget || e.target;\n\n const related = e.relatedTarget;\n\n if (\n related &&\n (\n this._elements.box.contains(related) ||\n [...this._registry.open.keys()].some(element =>\n element.contains(related)\n )\n )\n ) {\n return;\n }\n\n //------------------------------------------------------\n // Candidate to close\n\n if (this.anchor === 'pointer') {\n\n clearTimeout(this._timers.pointerLeave);\n\n this._timers.pointerLeave = setTimeout(() => {\n\n // O ponteiro realmente saiu?\n\n const hovered =\n this._elements.box.matches(':hover') ||\n [...this._registry.open.keys()].some(element => element.matches(':hover'));\n\n if (hovered) {\n return;\n }\n \n this.close({\n target: el,\n event: 'pointerleave'\n });\n\n }, 100);\n }\n else {\n\n this.close({\n target: el,\n event: 'pointerleave'\n });\n } \n },\n\n pointerMove: () => { },\n\n pointerDown: () => { },\n\n pointerUp: () => { }\n };\n\n this.sync = this._handlers.sync;\n this.update = this._handlers.update;\n this.refresh = this._handlers.refresh;\n getManager()._on('sync', this._handlers.sync);\n getManager()._on('update', this._handlers.update);\n getManager()._on('refresh', this._handlers.refresh);\n getManager()._on('raf', this._handlers.raf);\n\n //------------------------------------------------------\n // Actions\n\n this.open = async (...args) => await open(this, ...args);\n this.close = async (...args) => await close(this, ...args);\n this.destroy = async (...args) => await destroy(this, ...args);\n\n //------------------------------------------------------\n // Cache\n\n this._cache = {\n\n boundaryRect: null,\n positionerRect: null,\n targetRects: new Map(),\n\n parentHyperfloat: null,\n lastTarget: null,\n lastcloseTarget: null,\n lastBreakpoint: 9999999999999,\n\n computeRectsVersion: 0,\n\n resolveBreakpointsVersion: 0,\n\n syncPositionVersion: 0,\n\n lastApplyMeta: {},\n lastApplyAccessibility: {},\n };\n\n //------------------------------------------------------\n // Entries\n\n this._registry = {\n open: new Map(),\n close: new Map(),\n };\n\n for (const action of Object.keys(this._registry)) {\n\n const entries = normalizeRegisterOptions(\n data[action] ?? null\n );\n\n entries.forEach(entry => {\n\n this._registry[action].set(entry.el, {\n hostHyperfloat: resolveHostHyperfloat(entry.el),\n event: entry.event\n });\n });\n\n }\n\n // Functions\n this.registerOpen = (params) => registerAction(this, 'open', params);\n this.registerClose = (params) => registerAction(this, 'close', params);\n\n this.unregisterOpen = (target) => unregisterAction(this, 'open', target);\n this.unregisterClose = (target) => unregisterAction(this, 'close', target);\n\n //------------------------------------------------------\n // Vars\n\n this.vars = data.vars ?? {};\n\n //------------------------------------------------------\n // Finaly\n\n getManager()._instancesMap.set(this.id, this);\n\n return this;\n }\n\n //------------------------------------------------------\n // Create \n\n static async create(data = {}) {\n\n // Trava para evitar execução no Node.js/SSR\n if (typeof window === 'undefined') {\n return null;\n }\n\n if (\n data.id &&\n getManager()._instancesMap.has(data.id)\n ) {\n\n const existentInstance = getManager()._instancesMap.get(data.id);\n const overwrite = data.overwrite === true;\n\n //console.log('Já existe Lib:', data.id, 'overwrite', overwrite);\n\n if (overwrite) {\n\n existentInstance.destroy();\n }\n else {\n\n existentInstance.sync();\n return existentInstance;\n }\n }\n\n //------------------------------------------------------\n // New\n\n const instance = new this(data);\n\n await initialize(instance);\n\n if (data.autoOpen === true) {\n\n //console.log('autoOpen');\n\n await open(instance, {\n event: 'initialize',\n source: 'auto',\n });\n }\n\n return instance;\n }\n\n //------------------------------------------------------\n // Gets\n\n get id() {\n return this._id;\n }\n\n get anchor() {\n return this._config.anchor;\n }\n\n get opened() {\n return this._state.opened;\n }\n\n get resolvedPlacement() {\n return this._state.resolvedPlacement;\n }\n\n get state() {\n return {\n ready: this._state.ready,\n priority: this._state.priority,\n anchored: this._state.anchored,\n pointer: this._state.pointer,\n locked: this._state.locked,\n opened: this._state.opened,\n opening: this._state.opening,\n dragging: this._state.dragging,\n }\n }\n\n get elements() {\n\n return {\n //root: this._elements.root,\n boundary: this._elements.boundary,\n overlay: this._elements.overlayEl,\n positioner: this._elements.positioner,\n box: this._elements.box,\n content: this._elements.content,\n contentInner: this._elements.contentInner,\n loading: this._elements.loading,\n header: this._elements.header,\n headerInner: this._elements.headerInner,\n footer: this._elements.footer,\n footerInner: this._elements.footerInner,\n };\n }\n\n get lastTarget() {\n return this._cache.lastTarget;\n }\n\n get parentHyperfloat() {\n return this._cache.parentHyperfloat;\n }\n\n get boundaryRect() {\n return this._cache.boundaryRect;\n }\n\n get positionerRect() {\n return this._cache.positionerRect;\n }\n\n get lastBreakpoint() {\n return this._cache.lastBreakpoint;\n }\n\n _helpers = {\n\n createAccessibilityDataset: () => {\n\n const values = Object.fromEntries(\n\n Object.entries(this.accessibility)\n .map(([key, value]) => {\n\n let attr = '';\n\n switch (key) {\n case 'role':\n attr = key;\n break;\n\n case 'label':\n attr = 'aria-label';\n break;\n\n case 'modal':\n default:\n attr = `data-${key}`;\n break;\n }\n\n return [\n attr,\n String(value)\n ];\n })\n );\n\n this._cache.lastApplyAccessibility = values;\n\n return values;\n },\n\n createMetaDataset: () => {\n\n const values = Object.fromEntries(\n\n Object.entries(this.meta).map(([key, value]) => [\n\n `data-${key}`,\n\n String(value)\n ])\n );\n\n this._cache.lastApplyMeta = values;\n\n return values;\n },\n }\n\n //------------------------------------------------------\n // Statics\n\n static get version() {\n\n return VERSION;\n }\n\n static get _manager() {\n\n return getManager();\n }\n\n static config(data = {}) {\n\n getManager()._setConfig(data);\n }\n\n static defaults(data = {}) {\n\n getManager()._setDefaults(data);\n }\n\n static async open(id, data = {}) {\n\n await getManager()._open(id, data);\n }\n\n static async close(id, data = {}) {\n\n await getManager()._close(id, data);\n }\n\n static async closeAll(data = {}) {\n\n await getManager()._closeAll(data);\n }\n\n static async destroy(id, data = {}) {\n\n await getManager()._destroy(id, data);\n }\n\n static async destroyAll(data = {}) {\n\n await getManager()._destroyAll(data);\n }\n\n static sync() {\n\n getManager()._sync();\n }\n\n static update() {\n\n getManager()._update();\n }\n\n static refresh() {\n\n getManager()._refresh();\n }\n\n static raf(time) {\n\n getManager()._raf(time);\n }\n\n static getAll() {\n\n return getManager()._getAll();\n }\n\n static getOpened(...args) {\n\n return getManager()._getOpened(...args);\n }\n\n static getByPriority(...args) {\n\n return getManager()._getByPriority(...args);\n }\n};\n\n//------------------------------------------------------\n// Getters\n\nbaseOptions.forEach(opt => {\n\n Object.defineProperty(Hyperfloat.prototype, opt, {\n\n get() {\n return this._config[opt] ?? getManager()._defaults[opt] ?? allowedValues[opt].default;\n },\n\n set(value) {\n\n if (opt == 'meta') {\n\n setMeta(this, value);\n }\n else if (opt == 'accessibility') {\n\n setAccessibility(this, value);\n }\n else if (opt == 'dismiss') {\n\n setDismiss(this, value);\n }\n else if (opt == 'overlay') {\n\n setOverlay(this, value);\n }\n else if (opt == 'placement') {\n\n setPlacement(this, value);\n }\n else if (opt == 'boundaryPadding') {\n\n setBoundaryPadding(this, value);\n }\n else if (opt == 'offset') {\n\n setOffset(this, value);\n }\n else if (opt == 'flip') {\n\n setFlip(this, value);\n }\n else if (opt == 'shift') {\n\n setShift(this, value);\n }\n else if (opt == 'size') {\n\n setSize(this, value);\n }\n else if (opt == 'draggable') {\n\n setDraggable(this, value);\n }\n // Booleans\n else if ([\n 'destroyAfterClose',\n 'ignoreCloseAll',\n 'debug'\n ].includes(opt)) {\n\n this._config[opt] = value === true;\n }\n else {\n /* \n draggable,\n autoOpen,\n header,\n footer,\n breakpoints,\n */\n // Not allowed\n }\n },\n\n configurable: true, // Permite que seja redefinido depois se necessário\n enumerable: true // Faz a propriedade aparecer em Object.keys()\n });\n\n});\n","// src/helpers/console.js\n\nexport function _console(i, prefix = '') {\n\n const debug = i.debug;\n\n if (!debug) {\n\n return {\n log: () => { },\n info: () => { },\n warn: () => { },\n error: () => { },\n table: () => { },\n };\n }\n\n return {\n log: (...args) => console.log(prefix, ...args),\n info: (...args) => console.info(prefix, ...args),\n warn: (...args) => console.warn(prefix, ...args),\n error: (...args) => console.error(prefix, ...args),\n table: (...args) => {\n const data = args.pop();\n console.log(prefix, ...args);\n console.table(data);\n },\n };\n};"],"names":["placementOptions","hookValues","forEach","hook","type","default","allowedValues$1","id","meta","variant","role","accessibility","label","modal","anchor","values","open","close","ignoreCloseAll","autoOpen","destroyAfterClose","overlay","placement","boundaryPadding","draggable","offset","flip","shift","dismiss","outsideClick","outsideWheel","escapeKey","pointerLeave","closeWithParent","timeout","idleTimeout","size","breakpoints","content","header","footer","vars","interpolate","debug","resolveRenderOutput","renderItem","context","call","Promise","Node","trimmed","trim","test","tempContainer","document","createElement","innerHTML","fragment","createDocumentFragment","firstChild","appendChild","createTextNode","customRendering","rawRender","insertIn","customRender","hyperfloatRoot","querySelector","sandbox","dataset","hyperfloatSandbox","inserted","DocumentFragment","Array","from","childNodes","isArray","append","tag","options","element","class","classList","split","add","attrs","Object","entries","key","value","setAttribute","text","textContent","innerHtml","html","style","this","applyStyle","appendTo","prependTo","prepend","toArray","scope","leaveStrings","hasElement","Element","isElement","val","resolvedScope","uniqueSet","Set","collect","length","i","querySelectorAll","nodes","generateUUID","prefix","blacklist","result","crypto","randomUUID","replace","c","r","Math","random","toString","includes","getValueType","resolveCssLength","parsed","parseHyperfloat","isNaN","getComputedCssLength","temp","all","position","visibility","pointerEvents","width","body","computed","getComputedStyle","removeChild","numeric","resolveCssSize","rawSize","parts","height","normalizeDelay","fallback","max","trunc","Number","validate","m","data","schema","allowedValues","output","rules","allowedTypes","push","currentType","normalizeArray","itemType","filter","item","console","warn","structuredClone","invalidValues","join","undefined","syncPointerEngine","force","required","instance","_instancesMap","opened","_config","autoRaf","_state","autoRafStarted","loop","time","_raf","requestAnimationFrame","startAutoRaf","pointerTrackingStarted","window","addEventListener","_handlers","pointermove","passive","startPointerTracking","stopAutoRaf","removeEventListener","stopPointerTracking","normalizeSizeOptions","presets","_value","normalizePlacement","rawPlacement","normalizeOverlayOptions","enabled","color","blur","normalizeDismissOptions","mouseLeave","normalizeRegisterOptions","rawTargets","resolvedEvent","NodeList","HTMLCollection","isDomList","el","event","mouseenter","mousemove","map","resolveHostHyperfloat","hostContainer","closest","hyperfloatId","normalizeOffsetOptions","mainAxis","crossAxis","alignmentAxis","normalizeMainCrossAxis","normalizeFlipOptions","normalizeShiftOptions","normalizeBoundaryPaddingOptions","top","right","bottom","left","topBottom","leftRight","resolveCssBox","normalizeAccessibilityOptions","normalizeMetaOptions","rawMeta","normalizeDraggableOptions","bounds","handle","validateCustomRendering","parseOptions","prevent","Manager","constructor","Map","_root","_openedInstances","viewport","pointer","_defaults","zIndex","_listeners","update","refresh","raf","sync","_cache","refreshVersion","updateVersion","x","y","target","deltaTime","lastRafTime","keydown","_onKeydown","bind","async","_callHook","e","clientX","clientY","_refreshRaf","_update","_refresh","_syncPointerEngine","args","_sync","_on","stage","callback","priority","on","_off","listener","off","sort","a","b","callHook","_open","hyperfloatInstance","get","_close","_closeAll","closeData","closeAll","_destroy","destroy","_destroyAll","clear","destroyAll","setProperty","_closeFirstPriority","_setHyperfloatOpened","status","currentTime","performance","now","Date","_getAll","instances","_getOpened","allowOpening","state","opening","_getByPriority","operator","priorityRef","_getElementsAbovePriority","boxes","box","elements","_setConfig","_setDefaults","newData","_normalizeData","keys","root","openedInstances","flat","highestPriorityHyperfloat","uniqueInstanceOpened","managerInstance","ssrManager","Proxy","prop","getManager","mustAwait","hooks","_data","then","error","addListener","handler","targetEvents","_listenersMap","set","handlersMap","has","removeListener","delete","removeTargetListeners","hyperfloatBound","hyperfloatOpened","syncDismiss","_elements","_registry","preparePointerLeave","prepareOutsideEvent","handlerKey","some","contains","applyBoundaryPadding","boundary","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","applyBoxOffset","margin","side","alignment","isVertical","marginTop","marginLeft","cross","marginRight","marginBottom","calcOffsetMargin","applySize","hyperfloatSize","applyOverlay","hyperfloatOverlayEnabled","hyperfloatOverlayColor","hyperfloatOverlayBlur","applyPlacement","hyperfloatPlacement","setMeta","oldAttrs","lastApplyMeta","newAttrs","_helpers","createMetaDataset","removeAttribute","setAccessibility","lastApplyAccessibility","createAccessibilityDataset","setDismiss","setOverlay","setPlacement","normalizedValue","resolvedPlacement","setBoundaryPadding","setOffset","setFlip","syncPosition","lastTarget","setShift","setSize","setDraggable","baseOptions","preventBreakpointOptions","allowedBreakpointOptions","option","resolveBreakpoints","_breakpoints","globalRefreshVersion","firstresolveBreakpointsDone","resolveBreakpointsVersion","matched","windowWidth","innerWidth","breakpoint","lastBreakpoint","applyBreakpoints","fallbackBreakpoint","fallbackValues","_console","log","calcPosition","aLeft","aTop","aRight","aBottom","aWidth","aHeight","eWidth","eHeight","centerX","centerY","computePosition","boundaryRect","elementRect","anchorRect","calculate","calcOffset","calculatedShift","clamp","min","minLeft","maxLeft","minTop","maxTop","placementInvalid","calcShift","shiftResolved","flippedPlacement","fits","getPlacement","newSide","newAlignment","oppositeSide","getOppositeSide","oppositePlacement","oppositeAlignment","getOppositeAlignment","calcFlip","coordinates","registerAction","action","params","registeredElements","entry","entryProps","hostHyperfloat","syncOpenTargets","syncCloseTargets","unregisterAction","props","registerOpenElement","String","interpolation","_interpolate","interpolateX","axis","current","lastX","interpolateY","lastY","prioritize","maxPriority","currentInstance","ready","syncDrag","drag","deltaX","startX","deltaY","startY","initialX","initialY","minX","maxX","minY","maxY","newX","newY","positioner","transform","syncTargets","computeRects","firstcomputeRectsDone","computeRectsVersion","positionerRect","getBoundingClientRect","anchored","hyperfloatAnchored","globalPointer","opacity","rect","innerHeight","isOutsideViewport","_timers","outside","setTimeout","_outsideCloseDelay","clearTimeout","computedPosition","source","locked","parentHyperfloat","dataElement","resultHook","startTimeoutTimer","stopIdleTimer","startIdleTimer","_element","_props","lastcloseTarget","stopTimeoutTimer","destroyListeners","remove","initialize","overlayEl","hasPositioner","appendToBox","headerInner","order","contentInner","loading","footerInner","mount","defaultEntries","_defaultCloseSelector","syncDefaultCloseEntries","rawBreakpoints","breakpointKeys","deepMerge","parent","child","fallbackBp","fallbackConfig","unshift","merged","i_","bp","rawBase","base","setupBreakpoints","pointerMove","dragging","moveX","abs","moveY","userSelect","touchAction","pointerUp","pointerDown","button","tagName","posRect","boundRect","currentX","currentY","Infinity","setupDraggable","VERSION","Hyperfloat","dataRaw","_id","info","table","pop","idle","currentTarget","related","relatedTarget","matches","targetRects","syncPositionVersion","registerOpen","registerClose","unregisterOpen","unregisterClose","create","existentInstance","overwrite","fromEntries","attr","version","_manager","config","defaults","getAll","getOpened","getByPriority","opt","defineProperty","prototype","configurable","enumerable"],"mappings":"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"}